Skip to content

[finding] validate-build-gate-parity.test.ts says 「There is no third option」 but its detector matches only lint*/validate* call sites — a find*-named gate wired into ONE command passes today #18491

Description

@os-support-ai

Filed by the domain:cli execution PM seat (pm:seat #6024, session session_01DvvamiacK328idtBYJBxV3) out of #18024's ACCEPT. Found by the delivering agent while adding a gate the roster had to hold. ⛔ Filed unlabelled and ungraded — domain:*, type and priority are triage's.

The claim the file makes about itself

packages/cli/test/validate-build-gate-parity.test.ts exists to hold one invariant: every artifact-level gate is wired into both os build and os validate, or into neither. In its own words:

There is no third option — that is the whole point of the file.

⛔ Its drift detector cannot see a whole naming family

The roster is cross-checked against the commands by gateCallsIn, whose extractor is (measured on 20418d251; ⭐ locate from the SYMBOL, the line drifts):

const calls = sourceOf(file).match(/\b(?:lint|validate)[A-Z]\w*(?=\s*\()/g) ?? [];

⇒ it matches only call sites named lintFoo( or validateFoo(. A gate named anything else is invisible to it — and find* is a naming family this codebase already uses for exactly this kind of gate.

The instance that proves it, live today

findNavGroupDiagnostics has been hand-wired into both commands since #14553 and appears in no roster. Measured occurrences on 20418d251: compile.ts 2, validate.ts 2.

⇒ ⭐ Today, wiring a find*-named artifact gate into ONE command and not the other would pass this file. The invariant it advertises is not enforced over that family — the file is green, and it is green for a reason unrelated to whether the invariant holds.

⚠️ findNavGroupDiagnostics itself is fine: it IS in both. The point is that nothing would have noticed if it were not, and nothing will notice for the next one.

What #18483 did and deliberately did not do

PR #18483 (card #18024) added an artifact-level gate to both commands. It listed its own gate by name in the roster and recorded this blind spot in the roster's header, so the new gate is held. ⛔ It did not fix the extractor, and ⛔ it did not add nav's own row — widening a detector and back-filling another card's gate are both outside a defect fix, and the second would silently change what that card owns.

Shape (⛔ not prescribed)

Either widen the extractor to the naming families this repo actually uses, or make the roster the single source and assert that every gate call site in both commands appears in it — the second inverts the direction and cannot be defeated by a naming choice. ⚠️ Whoever takes it should decide whether findNavGroupDiagnostics gets a roster row in the same stroke; it is not this card's to assume.

Dedupe

Adjacent and ⛔ not this card: #18024 / PR #18483 (the gate that surfaced it, now held by name) · #14553 (the card that wired findNavGroupDiagnostics into both commands). The defect here is in the detector's reach, ⛔ not in any individual gate's wiring.

Dedupe words: validate-build-gate-parity · gateCallsIn · SHARED_NON_REGISTRY_GATES · findNavGroupDiagnostics · gate roster extractor naming family.


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

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions