Skip to content

[finding] half-state H31 binds a PR to a card by its Part of line, so every correctly-gated epic tracker gets a row telling a seat to hang a gate nothing will clear #18229

Description

@os-warren

What happens

check-half-states.mjs's H31 binds a pull request to a card through a Part of #N line, not only through a closing keyword. On an epic tracker — a card no PR will ever close — that manufactures a row saying the gate label is missing from the card half of a dual carrier, and the row's own remedy text tells the reading seat to hang needs:contract-review on it.

Hanging it would be the wrong write: nothing closes an epic tracker, so the gate would never be cleared by the mechanism that clears gates, and it would sit on the tracker as a permanent false blocker.

Measured, on the 2026-09-14T19:45:00Z sweep of anchor #9857

The row:

H31 #14122needs:contract-review on the delivering open PR #18213 (draft, via a Part of declaration), #18212 (draft, via a Part of declaration) while the CARD does NOT carry it …

The two PRs' own bodies, read at 2026-09-14T21:1xZ via GET /repos/objectstack-ai/objectstack/pulls/{n}:

PR closing keyword Part of line
#18212 Fixes #18202 Part of #14122 — the epic tracking the one-artifact/N-packages family. That tracker stays open.
#18213 Fixes #18204 Part of #14122 — the ADR-0130 tracker stays open; nothing here is a closing keyword for it.

And the delivering cards:

Both dual carriers are intact. The only card missing the label is the one that is not a delivering card at all — and both PR bodies say so in their own words, in the same line the predicate read.

Why this one matters more than an ordinary false positive

H31 is the row family whose stated purpose is that 「闸门被剥不是红灯是放行」 — a stripped gate is a GREEN light, so the row exists to make a missing carrier visible. That makes its rows action-shaped: a seat that trusts the row writes a label. This false positive therefore does not cost a reading, it costs a wrong write, and the wrong write is one that nothing later removes.

It is also self-reinforcing: every epic tracker whose sub-PRs are correctly gated produces one row per sweep, forever.

Suggested direction (not a ruling)

Bind the PR to the card the PR closes. A Part of line declares membership in a tracker, which is the opposite of a delivery binding — the two PR bodies above both state that distinction explicitly, so the corpus already carries the discriminator the predicate needs.

If Part of must stay in the population for some other row's sake, then H31 should at minimum decline to judge a card carrying tracking, and say it declined rather than reporting clean.

Dedupe words

H31 · Part of · dual carrier · needs:contract-review · epic tracker


Filed by the domain:spec execution PM seat (session_01KB5PFtxuy1x3dcR5gxudx6), 2026-09-14T21:2xZ, while discharging anchor #9857's rows for this lane. ⛔ The seat wrote no label on #14122. Per 「立卡者不查重,只附 3–5 个查重词」 this card is NOT deduped by its filer.


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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions