Three citations in the vocabulary inventory point at code that does not exist
state-vocabulary.ts (#593, 927f963) inventories MCP tool descriptions that publish a value set, each entry carrying a reason naming where the vocabulary is defined. Nothing validates those citations, and three are false:
| entry cites |
reality |
workers/api/src/lib/tool-listing.ts |
the file does not exist |
lib/connector-consent.ts for granted / n/a / per_call / required |
zero occurrences of any of the four |
lib/coding-engines.ts |
declares a different four-member set (EngineAuth) |
An entry naming a nonexistent file passes the guard exactly as an accurate one does.
Why this matters more than three stale strings
The inventory's purpose is to record why a claim is unbacked, so a future reader can decide whether it can now be backed. A false citation sends that reader to a file that isn't there and, finding nothing, they will reasonably conclude the claim is unbackable — the opposite of what the inventory exists to enable.
It is also the same defect class the guard itself was built to catch: a stated fact that nothing checks. #585 was prose recommending a field the code had replaced; #594 was a legend naming a payload key that was never sent. This is a guard's own metadata with the same problem, which makes it the most ironic instance and arguably the most important — a verification artefact that is itself unverified erodes trust in the verification.
Acceptance criteria
- Every
reason citation resolves: the file exists and contains the vocabulary named. Fail the guard when it does not.
- The three false entries are corrected to their real location, or reclassified if none exists.
- Denominator stated per ADR 0002: how many citations were checked, out of how many entries.
- Red demonstrated by pointing an entry at a nonexistent path.
- Consider whether the same check belongs on other guards that carry explanatory metadata —
PINS entries in check-file-size.mjs and the UNBACKED_CLAIMS reasons are the same shape. Do not widen without measuring; say what you found.
Verified vs inferred
- Verified: all three citations checked against the tree by the agent that reported them; that nothing enforces the
reason string.
- Inferred: that the remaining six citations are accurate. They were not individually checked — three of nine were found false, so the base rate is poor and AC1's guard is what settles it rather than a spot check.
Three citations in the vocabulary inventory point at code that does not exist
state-vocabulary.ts(#593,927f963) inventories MCP tool descriptions that publish a value set, each entry carrying areasonnaming where the vocabulary is defined. Nothing validates those citations, and three are false:workers/api/src/lib/tool-listing.tslib/connector-consent.tsforgranted/n/a/per_call/requiredlib/coding-engines.tsEngineAuth)An entry naming a nonexistent file passes the guard exactly as an accurate one does.
Why this matters more than three stale strings
The inventory's purpose is to record why a claim is unbacked, so a future reader can decide whether it can now be backed. A false citation sends that reader to a file that isn't there and, finding nothing, they will reasonably conclude the claim is unbackable — the opposite of what the inventory exists to enable.
It is also the same defect class the guard itself was built to catch: a stated fact that nothing checks. #585 was prose recommending a field the code had replaced; #594 was a legend naming a payload key that was never sent. This is a guard's own metadata with the same problem, which makes it the most ironic instance and arguably the most important — a verification artefact that is itself unverified erodes trust in the verification.
Acceptance criteria
reasoncitation resolves: the file exists and contains the vocabulary named. Fail the guard when it does not.PINSentries incheck-file-size.mjsand theUNBACKED_CLAIMSreasons are the same shape. Do not widen without measuring; say what you found.Verified vs inferred
reasonstring.