Reachability Is the Whole Game
Here is the failure mode that will bite you, and it is not the one you are expecting.
You will not lose content. You will lose the route to it.
A file that nothing names is a file that does not exist. It sits there, perfectly written, fully valid, passing every check โ and the GM never opens it, because nothing ever told it to. Fourteen mechanics in this project, hundreds of kilobytes of genuinely good writing, sat unreachable for months. Every automated check reported green the entire time, because "is anything pointing at this" is not a thing a validator asks.
Why it happens
Because writing the thing feels like the work and wiring it feels like admin.
It is the reverse. The wiring is the work. The writing is the easy part and you will do it enthusiastically at 1am; the wiring is the part you skip because you are tired and you will "do it tomorrow". Tomorrow the file is finished, so it looks done.
The four routes in
THE LADDER NAMES IT pinned, so the name is always present. About ten
tokens. The strongest route there is.
A CARD NAMES IT in its Deep: footer, or inline. Loads when that
card loads. The normal route for most content.
A PHASE NAMES IT the phase file is opened when phaseMode changes,
so anything it names rides in with the state.
A TRIGGER FIRES IT on an event, evaluated every turn against the phase.
Tool triggers fire AFTER the write they ride on.
Searchable is not a route. It means findable if the GM goes looking, and the GM does not go looking for things it does not know exist. That is not a limitation of the model; it is what "searchable" means.
The test, and it takes ten seconds
For anything you add, finish this sentence: "The GM will read this when ______."
If you cannot fill the blank with something specific โ a named card, a phase, a trigger condition โ you have not added a mechanic. You have added a document.
The blank has to name a mechanism, not an occasion. "...when it is relevant" is not an answer. "...when phaseMode is Combat, because Phase โ Combat names it" is.
And the other half
Written but never read. A field the GM dutifully fills that no instruction ever consults.
This one is harder to see, because the file looks alive โ data is arriving, the writes are happening, nothing is empty. It is still dead. Ask the mirror question of every field you add: what routinely reads this? If nothing does, you have built a very tidy dead end that costs a write on every turn and returns nothing.
Two checks worth running by hand
Name the field across the whole workspace. Before you delete or rename anything, grep the field name everywhere, not just in the file that owns it. Expressions read fields by name and no validator confirms the field still exists โ a computed value pointing at a deleted field evaluates to nothing and passes every check in the suite.
Grep for orphans in the other direction. List the files in a folder, then grep each filename across the rest of the project. Anything with no hits outside itself is unreachable. It takes a minute and it finds more real problems than an afternoon of reading.
Reachability is not a quality bar you clear once. It is the thing that quietly degrades every time somebody renames a file.