Skip to content

[finding] a single-carrier needs:contract-review hang makes the eventual clear indistinguishable from a strip — the defect is committed at hang time and only surfaces at landing #15975

Description

@hotlong

Observed on #15072 / PR #15235, recorded rather than fixed in a landing.

The clause-② review gate is a dual carrier — hung on the card and the delivering PR, in one stroke, and cleared in one stroke (maintainer 2026-08-22, 「两边都挂好」). Its second carrier is not decoration; check-clause2-carriers.mjs states its whole purpose:

the only machine-readable evidence that a gate was CLEARED rather than STRIPPED — a legitimate clear leaves two removals seconds apart, a strip leaves one

What happened: on #15072 the gate was hung on PR #15235 only; the card never carried it. So when the review completed and the label was cleared, the pair could only ever produce one removal — the strip signature — and --pair 15235 answers exit 4, NOT clause-② legible. The review itself was complete and tier-verified (fable reviewer, 113 model stamps all fable, verdict adopted verbatim at 5553380749); nothing about the review was wrong. The evidence shape was wrong before the review started.

A single-carrier hang converts a legitimate future clear into an unprovable one. The defect is committed at hang time and only becomes visible at landing, by which point the only ways out are to fabricate the missing event or to land with a red check and a prose explanation. Both are bad; the second is merely honest.

Why this is a mechanism gap, not a seat's carelessness

Nothing enforces the pair at the moment of hanging. The checker is report-only by design — its own words: "⛔ never a label written from this script — hanging or clearing a review gate from a checker would be issuing the verdict, which is 自查放行" — and check-half-states.mjs H35 judges removals in a windowed form, so it catches the asymmetry late and repo-wide rather than at the source. A seat that hangs one carrier gets no signal until someone tries to land.

Suggested shapes, for whoever owns the hanging path to choose between

  1. Make the hang atomic where clause-② is declared: whatever writes needs:contract-review writes both carriers or neither, and says so if the second is unreachable.
  2. Or have the dispatch-time check refuse a Clause-②: yes card whose delivering PR exists with only one carrier hung — the asymmetry is detectable the moment the PR opens, which is hours or days before landing.
  3. ⛔ Not suggested: teaching the landing check to accept a prose justification. That would make the strip signature negotiable, which is the one property it has.

⚠️ Do not "fix" the existing pair retroactively. Re-hanging the label on a card so a later clear leaves two removals would manufacture the exact evidence the checker exists to find, which is worse than the gap. #15072 carries a prose record instead (5553388622).

Refs: #15072 (the pair) · PR #15235 · scripts/pm/check-clause2-carriers.mjs (C3) · scripts/pm/check-half-states.mjs H35 · maintainer ruling 2026-08-22.

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