Skip to content

No gate reads inside a code fence in skills/objectui/ — 123 TypeScript fences and 63 JSON fences are checked by nothing #7359

Description

@os-litant

Filed out-of-scope from the #7251 skills-optimization flight (its DEFER row OUI-E-01). Unassigned.

Measured

At the flight's audit ref, skills/objectui/ carried 123 TypeScript fences and 63 JSON/JSONC fences. grep -rc "os:check" skills/objectui/ returns zero.

Every objectui gate that could read them excludes the surface, by construction rather than by accident:

Gate Why it does not reach a fence in skills/
check-skills-paths.mjs Deliberately excludes fences — "A fence is a worked example", and a tutorial fence may name a file the reader is about to create. It reads inline code spans in prose only.
check-doc-links.mjs SCAN_ROOTS has no skills row.
check-doc-component-types.mjs DOCS_ROOT = 'content/docs'; its header says so verbatim — "This gate walks content/docs and nothing else: not skills/**".
check-doc-snippet-types.mjs content/docs + package READMEs.
check-doc-fence-languages.mjs content/docs + package READMEs. It judges the fence language tag, never the contents.

Net: this repo enforces path existence in skill prose, and nothing else. A fence can import a symbol that does not exist, spell a key the renderer never reads, or restate a shape the spec changed, and stay green forever.

What already exists to copy

objectstack has packages/spec/scripts/check-skill-examples.ts, with the convention that an HTML comment containing os:check, placed on the line above a fence, opts that fence into a real type-check. A port would give objectui the same opt-in marker plus a runner over skills/**.

Why this is the highest-leverage structural addition here

It is the mechanism that stops the drift class from recurring. Two rounds of it have already been cleaned by hand — #3658 / #7094's truth sweep, and #7251's own correctness items, which included an eval asserting a mobile hook API (useSwipe / useLongPress) that has zero occurrences repo-wide. Every one of those was found by a human reading, which is precisely the economics check-skills-paths.mjs was created to end for paths.

Shape of the work

  1. Port the marker convention and the runner; opt-in, so it starts at zero red.
  2. Measure how many of the 123 fences compile as-is, and land the marker on the ones that already pass — that number is the honest starting ratchet.
  3. Decide separately whether the ratchet should be shrink-only, the way check-doc-fence-languages.mjs treats its declared-file population.

Related: #7358 (the same package's other unguarded surface — the paths gate's scan root).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions