Follow-up to #13582, which shipped scripts/check-corpus-claim-drift.mjs — a shrink-only,
table-driven lexical anti-drift ratchet over content/docs/** + skills/** — deliberately carrying
exactly one VOCABULARY row (exists-key-presence), per that card's ruling. The one-row cap is
mechanically enforced: an ablation that smuggles a second row reds the gate's self-test with 10
named failures.
This card is the second row (and any further ones).
Why each new word is its own card, not a rider
The ratchet's row is a claim, not a spelling: a site is a co-occurrence of a claim phrase within
4 lines of a pinned spelling. Adding a row therefore means (a) surveying legitimate usage of the new
phrase across 225 corpus files, (b) paying whatever baseline entries that survey turns up, and (c)
proving the row does not fire on the legitimate ones. ⛔ A word added without that survey turns a
ratchet into a noise gate — which is the failure mode #13582's B' ablation demonstrates directly
(remove co-occurrence, and every legitimate-usage leg fires).
Candidate rows
1. NoSQL / the portability gloss — ⚠️ measurement already done, ⛔ do not re-derive it
#13582's dev measured this one and handed it over rather than shipping it. Recorded here so the
work is not repeated:
⇒ A new row (or a new claim member on a new axis), with its own survey and its own baseline.
2. The retired $regex spelling
Named by #13582's dev as belonging to this family. ⛔ Unmeasured — the survey is this card's work.
3. #13532's visibleWhen claims
Named by #13582's dev as belonging to this family. ⛔ Unmeasured.
⚠️ Scope fact the implementer needs up front
The gate's two roots are content/docs/** and skills/** — 225 files, zero under packages/**.
So no row added here can reach a false claim living in source-code prose. The known live instance of
exactly that is packages/spec/src/data/filter.zod.ts:997 ("Field exists check (primarily for
NoSQL) - MongoDB: $exists"), tracked separately on #13709 — it lands in packages/spec/src/**,
which is the domain:spec seat's surface and a clause ② limb. ⛔ Do not widen this gate's roots
to chase it without a ruling; that is a different decision from adding a word.
Acceptance
Source
#13582 (PR #13742) — open question answered A by the domain:devx PM seat, with the NoSQL
measurement handed over rather than dropped.
Generated by Claude Code
Follow-up to #13582, which shipped
scripts/check-corpus-claim-drift.mjs— a shrink-only,table-driven lexical anti-drift ratchet over
content/docs/**+skills/**— deliberately carryingexactly one
VOCABULARYrow (exists-key-presence), per that card's ruling. The one-row cap ismechanically enforced: an ablation that smuggles a second row reds the gate's self-test with 10
named failures.
This card is the second row (and any further ones).
Why each new word is its own card, not a rider
The ratchet's row is a claim, not a spelling: a site is a co-occurrence of a claim phrase within
4 lines of a pinned spelling. Adding a row therefore means (a) surveying legitimate usage of the new
phrase across 225 corpus files, (b) paying whatever baseline entries that survey turns up, and (c)
proving the row does not fire on the legitimate ones. ⛔ A word added without that survey turns a
ratchet into a noise gate — which is the failure mode #13582's
B'ablation demonstrates directly(remove co-occurrence, and every legitimate-usage leg fires).
Candidate rows
1.⚠️ measurement already done, ⛔ do not re-derive it
NoSQL/ the portability gloss —#13582's dev measured this one and handed it over rather than shipping it. Recorded here so the
work is not repeated:
$exists"is portable, not a NoSQL-only operator", andevery pre-repair row carried the
(NoSQL)gloss./NoSQL/to the existingexists-key-presencerow would have caughtskills/objectstack-query/rules/filters.mddirectly, rather than reaching it via the axislabel.
ruling scoped [finding] The teaching corpus has no lexical anti-drift pin, so a filter operator's prose can contradict its driver forever — the reachable half of "no gate can catch it" #13582 to the word-face the card named. The bare
existencemember was admittedonly because it is a morphological member of a phrase that card already named and was measured
to cost zero baseline entries;
NoSQLis neither.⇒ A new row (or a new claim member on a new axis), with its own survey and its own baseline.
2. The retired
$regexspellingNamed by #13582's dev as belonging to this family. ⛔ Unmeasured — the survey is this card's work.
3. #13532's
visibleWhenclaimsNamed by #13582's dev as belonging to this family. ⛔ Unmeasured.
The gate's two roots are
content/docs/**andskills/**— 225 files, zero underpackages/**.So no row added here can reach a false claim living in source-code prose. The known live instance of
exactly that is
packages/spec/src/data/filter.zod.ts:997("Field exists check (primarily forNoSQL) - MongoDB: $exists"), tracked separately on #13709 — it lands in
packages/spec/src/**,which is the
domain:specseat's surface and a clause ② limb. ⛔ Do not widen this gate's rootsto chase it without a ruling; that is a different decision from adding a word.
Acceptance
properties are the gate's whole safety argument — ⛔ a row must not weaken them)
Source
#13582 (PR #13742) — open question answered A by the
domain:devxPM seat, with theNoSQLmeasurement handed over rather than dropped.
Generated by Claude Code