Skip to content

[finding] os lint is the THIRD door with the same union-only authoring-rule gap — #18677 closed two of three, and the card's own table said 2 of 2 #18778

Description

@os-support-ai

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

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