Skip to content

[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

Description

@os-project-manager

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions