Filed while repairing #13539 (PRs #13577 and #13581). ⛔ Nothing was edited for this; it is a finding for triage to grade.
#13539 states that no gate could have caught the $exists mis-teaching, "because the teaching corpus does not execute". That was tested rather than assumed while repairing it, and it splits in two:
True as stated. The one gate that reads the offending block — os:check, via packages/spec/scripts/check-skill-examples.ts — type-checks the TypeScript inside a fenced example against the live spec. The false line in content/docs/protocol/objectql/query-syntax.mdx was a // comment inside an os:check block: the gate ran on that exact block, reported it green, and was structurally blind to the sentence that was wrong. A type checker cannot express "has a value" versus "the key is present"; both readings type-check identically. The same holds for the markdown table rows, which are not code at all.
False as a limit. The recurring failure is narrower than "prose disagrees with behaviour", and the narrow version is mechanical: a lexical pin over the teaching corpus, forbidding the co-occurrence of a filter operator with phrasing that names a semantic the platform does not implement — $exists beside "field exists", "existence check", "key presence", or "MongoDB $exists".
The precedent is already in the tree and needs no invention: scripts/check-role-word.mjs is a shrink-only word ratchet over exactly the right roots (content/docs and skills, with generated references/ excluded because the spec source is the fix site there), with a baseline, a --self-test, and a maintainer-only widening path. What it does not have is a second word: WORD is a single module-level regex, so a second term is a change to its shape rather than a row in a table.
Why this is worth a card rather than a note
The corpus is where AI authors read the contract. A false line there is copied into customer projects and cannot be discovered by running anything. The two skills/** sites in #13539 were false for a day and shipped to customers; the class survives for months elsewhere precisely because the only instrument is someone reading it.
What a taker should weigh, honestly
Refs
#13539 (the repair, and the claim this tests) · PR #13529 (the alignment that made the lines false) · #13531 (the same operator's stale cells inside packages/spec, already dispatched) · scripts/check-role-word.mjs (the precedent) · packages/spec/scripts/check-skill-examples.ts (the gate that ran green over the false line).
Filed while repairing #13539 (PRs #13577 and #13581). ⛔ Nothing was edited for this; it is a finding for triage to grade.
#13539 states that no gate could have caught the
$existsmis-teaching, "because the teaching corpus does not execute". That was tested rather than assumed while repairing it, and it splits in two:True as stated. The one gate that reads the offending block —
os:check, viapackages/spec/scripts/check-skill-examples.ts— type-checks the TypeScript inside a fenced example against the live spec. The false line incontent/docs/protocol/objectql/query-syntax.mdxwas a//comment inside anos:checkblock: the gate ran on that exact block, reported it green, and was structurally blind to the sentence that was wrong. A type checker cannot express "has a value" versus "the key is present"; both readings type-check identically. The same holds for the markdown table rows, which are not code at all.False as a limit. The recurring failure is narrower than "prose disagrees with behaviour", and the narrow version is mechanical: a lexical pin over the teaching corpus, forbidding the co-occurrence of a filter operator with phrasing that names a semantic the platform does not implement —
$existsbeside "field exists", "existence check", "key presence", or "MongoDB$exists".The precedent is already in the tree and needs no invention:
scripts/check-role-word.mjsis a shrink-only word ratchet over exactly the right roots (content/docsandskills, with generatedreferences/excluded because the spec source is the fix site there), with a baseline, a--self-test, and a maintainer-only widening path. What it does not have is a second word:WORDis a single module-level regex, so a second term is a change to its shape rather than a row in a table.Why this is worth a card rather than a note
The corpus is where AI authors read the contract. A false line there is copied into customer projects and cannot be discovered by running anything. The two
skills/**sites in #13539 were false for a day and shipped to customers; the class survives for months elsewhere precisely because the only instrument is someone reading it.What a taker should weigh, honestly
has(record.foo)inobjectstack-formulais real key existence and must stay green).$exists: the same shape would have caught the retired$regexspellings and thevisibleWhenclaims that docs(ui,protocol,lint): a form SECTION visibleWhen binds current_user — retire the claim from the three prose sites #13074 left unswept #13532 swept by hand.Refs
#13539 (the repair, and the claim this tests) · PR #13529 (the alignment that made the lines false) · #13531 (the same operator's stale cells inside
packages/spec, already dispatched) ·scripts/check-role-word.mjs(the precedent) ·packages/spec/scripts/check-skill-examples.ts(the gate that ran green over the false line).