5. Diagnose a Validator Error
This chapter practices a failure you will eventually create by accident: a reference that is valid JSON but does not point to a real campaign object.
Start from Checkpoint 4 or download the intentionally broken Checkpoint 5.
What you will learn
Section titled “What you will learn”- The difference between JSON syntax and campaign validation
- How to read a validator finding as a path through the campaign
- How quest and objective IDs work together
- Why plausible-looking names are still broken references
- What validator success does and does not prove
Introduce the error
Section titled “Introduce the error”In Mara’s quest-start actions, the working checkpoint contains:
{ "completeQuestObjective": [ "tutorial_codex:missing_courier", "hear_maras_request" ]}Change only the objective ID:
{ "completeQuestObjective": [ "tutorial_codex:missing_courier", "recover_sealed_letter" ]}recover_sealed_letter sounds reasonable, but the quest does not declare an objective with that ID.
The file is still valid JSON. Braces, commas, strings, and arrays are all correct. This is now a campaign-reference error, not a JSON syntax error.
Run the Author validator
Section titled “Run the Author validator”Open the Author tools and validate the broken file.
The important parts of the finding are:
code: quest.objectiveRefquest: tutorial_codex:missing_couriermissing objective: recover_sealed_letterThe displayed wording may contain more context, but the plain-English meaning is:
A campaign action tries to complete an objective that does not exist inside the named quest.
Trace the reference
Section titled “Trace the reference”Do not start by searching the entire file for vaguely similar words. Follow the relationship the validator identified.
1. Find the consumer
Section titled “1. Find the consumer”The consumer is the action that uses the reference:
"completeQuestObjective": [ "tutorial_codex:missing_courier", "recover_sealed_letter"]2. Confirm the quest exists
Section titled “2. Confirm the quest exists”Look under:
quests└── tutorial_codex:missing_courierThe quest exists, so the first value is valid.
3. Inspect the quest’s objective IDs
Section titled “3. Inspect the quest’s objective IDs”The quest declares:
hear_maras_requestrecover_lettershow_letter_to_orenIt does not declare recover_sealed_letter.
4. Decide the intended objective
Section titled “4. Decide the intended objective”This action runs when Mara starts the quest. Its job is to record that the player has heard Mara’s request. The intended ID is therefore:
hear_maras_requestA validator can prove that recover_sealed_letter is missing. A human must still decide which existing objective the action was meant to reference.
Correct the error
Section titled “Correct the error”Restore the action:
{ "completeQuestObjective": [ "tutorial_codex:missing_courier", "hear_maras_request" ]}Validate again. This specific quest.objectiveRef error should disappear.
What the validator proved
Section titled “What the validator proved”After the correction, the validator can prove that:
- the named quest exists,
- the named objective exists inside that quest,
- the action uses a supported shape,
- related campaign references are structurally resolvable.
It still cannot prove that:
- this is the narratively correct objective,
- the player can reach Mara,
- the dialogue branch will be selected at the intended time,
- the quest can be completed in every allowed order,
- the experience is understandable or enjoyable.
Those remaining questions require dependency review and playtesting.
Checkpoint 5
Section titled “Checkpoint 5”Checkpoint 5 adds no legitimate campaign feature. Its purpose is to preserve a known invalid state with one deliberate error:
recover_sealed_letter → unknown objectiveOnce you understand the finding, return to your corrected Checkpoint 4 file. Chapter 6 supplies the next valid cumulative checkpoint.
Continue to Chapter 6: Make Progression Out-of-Order Safe.