Surfaced by the dev delivering #18677 (PR #18769) while closing that card, and it falsifies the framing of the card this seat filed. ⛔ Filed bare: finding only; grading and domain:* are triage's.
The reading
#18677's table compared commands/compile.ts against commands/validate.ts and concluded the asymmetry was 1 of 2 doors. Measured: it is 2 of 3. commands/lint.ts runs runAuthoringRules('lint', …) union-only, exactly as validate.ts did before PR #18769.
⭐ And the trap that hid it is one this lane keeps re-deriving: lint.ts does import artifactPackages and packageBodyAsStack, so a symbol-presence sweep scores it as covered. ⛔ A count is not a reading — opening the hits shows those imports feed lint.ts's OWN intra-package duplicate-name advisory (#17821), not the shared rule table. A finding that dissolves on opening, and a gap that survives because of it.
⇒ after #18769 lands, os build and os validate run the per-package pass and os lint still does not — the same false-clean direction, one door over.
⛔ Deliberately not fixed in #18769
The dispatch fence named os validate. Widening a landing PR into a third door on the deliverer's own initiative is the widening this lane forbids, so it was reported instead. PR #18769 is the precedent: one shared seam (runPerPackageAuthoringRules in utils/artifact-packages.ts), both doors calling it, os build's severity mapping and output unchanged.
⚠️ ⛔ Not asserted: that os lint should run it. lint and validate may legitimately differ in what they refuse — that is the same contract question #18677 carried, and it is a decision, ⛔ not a grep.
Dedupe words: os lint per-package authoring pass · lint.ts union-only runAuthoringRules · third door #18677.
Dedupe run before filing, ⛔ not from memory: complete repo-scoped enumeration of 519 open issues (⚠️ REST /search/* answers 403 for this seat — «sessions are bound to their configured repositories» — so enumeration plus local match is the only instrument). os lint → 6, lint.ts → 2, runAuthoringRules → 1 (this card's parent #18677 itself); none names this door. Negative control → 0.
Generated by Claude Code
Surfaced by the dev delivering #18677 (PR #18769) while closing that card, and it falsifies the framing of the card this seat filed. ⛔ Filed bare:
findingonly; grading anddomain:*are triage's.The reading
#18677's table compared
commands/compile.tsagainstcommands/validate.tsand concluded the asymmetry was 1 of 2 doors. Measured: it is 2 of 3.commands/lint.tsrunsrunAuthoringRules('lint', …)union-only, exactly asvalidate.tsdid before PR #18769.⭐ And the trap that hid it is one this lane keeps re-deriving:
lint.tsdoes importartifactPackagesandpackageBodyAsStack, so a symbol-presence sweep scores it as covered. ⛔ A count is not a reading — opening the hits shows those imports feedlint.ts's OWN intra-package duplicate-name advisory (#17821), not the shared rule table. A finding that dissolves on opening, and a gap that survives because of it.⇒ after #18769 lands,
os buildandos validaterun the per-package pass andos lintstill does not — the same false-clean direction, one door over.⛔ Deliberately not fixed in #18769
The dispatch fence named
os validate. Widening a landing PR into a third door on the deliverer's own initiative is the widening this lane forbids, so it was reported instead. PR #18769 is the precedent: one shared seam (runPerPackageAuthoringRulesinutils/artifact-packages.ts), both doors calling it,os build's severity mapping and output unchanged.os lintshould run it.lintandvalidatemay legitimately differ in what they refuse — that is the same contract question #18677 carried, and it is a decision, ⛔ not a grep.Dedupe words:
os lint per-package authoring pass·lint.ts union-only runAuthoringRules·third door #18677.Dedupe run before filing, ⛔ not from memory: complete repo-scoped enumeration of 519 open issues (⚠️ REST
/search/*answers 403 for this seat — «sessions are bound to their configured repositories» — so enumeration plus local match is the only instrument).os lint→ 6,lint.ts→ 2,runAuthoringRules→ 1 (this card's parent #18677 itself); none names this door. Negative control → 0.Generated by Claude Code