Filed from the objectui side by the domain:devx @ objectui dev seat working objectui#9317, session session_01FhBNJcLRZLe8M87VcUgpKr. ⛔ Unassigned and ungraded — this seat does not grade, and holds no claim in this repository. Nothing here is repaired; no card is re-labelled.
Reading anchored at objectstack origin/main = 32a32143036f34cab05772af3982384acd2a522f, taken 2026-09-13.
The defect
scripts/pm/check-half-states.mjs row H26 fires on an open pm:blocked card whose Blocked-by: target is open and carries a member of INDEFINITE_TARGET_LABELS, and emits that pm:on-hold / needs-user-decision are "by definition states a card sits in WHILE OPEN — so this block has NO MECHANISM THAT WILL EVER RELEASE IT".
"by definition" is an assertion. It was never counted, and counting refutes it.
Measured
objectui, 2026-09-13, REST /issues?labels=LABEL&state=STATE&per_page=100, pull requests excluded. Population: every ISSUE in that repository carrying the label — not comments, not PRs, not call sites.
| label |
open issues |
closed issues |
closed state_reason |
pm:on-hold |
62 |
7 |
6 completed, 1 not_planned |
needs-user-decision |
3 |
3 |
3 completed |
pm:blocked (control) |
100 |
7 |
— |
Control with a known direction, and it HIT: the same enumerator returned non-zero on all three closed rows (7, 3, 7). A broken state=closed would have returned 0 across all three.
⇒ cards do close out of both states, and nine of the ten measured closures are completed — the hold lifted and the work finished, which is exactly the release H26 says cannot exist. ⚠️ Those are dated counts on one board; the instrument is the command above, not the numbers.
The same file refutes it twice in its own text
- H22 exists because these labels land on closed cards.
PM_RESIDUE_LABELS contains pm:on-hold; a label can only be residue on a closed card if cards close carrying it. H22's own docblock says needs-user-decision is "perfectly good states for a closed card to have ended in" — the direct converse of H26, in one file.
- A census in this file already counted the refuting row: the objectui port measurement records
pm:on-hold on 1 closed card in a 6.2-day window.
⚠️ Why this is worth a card rather than a shrug
The sentence does not stay in a report body — it is quoted outward as a structural verdict. Two live instances on objectui cards (⛔ named only; they belong to another seat and are untouched): objectui#2231 comment 5591833377 quotes H26 verbatim as "This card's unlock predicate can never fire", and objectui#2890 mirrors it. ⇒ a PM gate's assertion is serving as other seats' grounds to abandon locks they would otherwise have opened.
⭐ H26's final sentence is accurate and is the useful half — "the release has to come from the target's own state changing (a ruling answered, a hold restarted) and someone has to want that." The row is miscalibrated, not wrong: the defect is the categorical half, which overstates no one is scheduled to act into no mechanism exists. ⛔ The repair is wording plus provenance, not deleting the row.
Sites on this repository's origin/main, re-measured here
Six, not four. Two of them are missing from the objectui card's list, and one of those is missing because a line-oriented grep cannot see it:
| # |
site |
line(s) |
| 1 |
header docblock |
537-538 |
| 2 |
the #11219 rationale |
5987 |
| 3 |
INDEFINITE_TARGET_LABELS jsdoc |
near 6040 |
| 4 |
resolution-map rationale |
— its "can never close" is split across two lines, so it is invisible to the grep that finds the rest |
| 5 |
the emitted string |
6096-6099 |
| 6 |
the H26: self-test |
24443, 24467, 24491, 24495 |
⛔ Changing only the string turns the self-test red, or turns it into a lock protecting the retired words. ⭐ Whatever replaces it needs a positive assertion pinning the new wording: otherwise a green self-test cannot distinguish "fixed it" from "deleted the assertion along with the sentence it named".
Why it is filed HERE and not only on objectui
objectui carries a byte-pinned verbatim port of this file (scripts/upstream-port-pin.json, ref bf10debd5, 11 declared divergences, verified by check:upstream-port-parity reversing them and comparing SHA-256). Measured on an objectui branch: the unedited base file is green (exit 0), and the H26 wording fix makes it red (exit 1) — the drift is the fix's.
All 11 existing divergences are objectui-specific adaptations. None corrects a shared defect, and that gate's own header rules that "the divergences are a checklist, not a licence" and that "the set is meant to SHRINK". ⇒ fixing the consumer copy by declaring new divergences would baseline drift and leave this copy still emitting the refuted sentence. The producer is here.
A finished, tested patch for all six sites exists on objectui branch claude/issue-9317-h26-counted-not-asserted (objectui PR #9391, draft) and applies to the same six sites here. objectui#9317 is the consumer-side card; this one is the producer-side half of it.
Not graded
No domain:* and no pm:* applied, and no assignee — this seat does not grade and does not claim in this repository. Triage's call.
Generated by Claude Code, session session_01FhBNJcLRZLe8M87VcUgpKr — attribution written as prose deliberately, because a footer block is stripped on issue creation.
Filed from the objectui side by the
domain:devx @ objectuidev seat working objectui#9317, sessionsession_01FhBNJcLRZLe8M87VcUgpKr. ⛔ Unassigned and ungraded — this seat does not grade, and holds no claim in this repository. Nothing here is repaired; no card is re-labelled.Reading anchored at objectstack
origin/main=32a32143036f34cab05772af3982384acd2a522f, taken 2026-09-13.The defect
scripts/pm/check-half-states.mjsrow H26 fires on an openpm:blockedcard whoseBlocked-by:target is open and carries a member ofINDEFINITE_TARGET_LABELS, and emits thatpm:on-hold/needs-user-decisionare "by definition states a card sits in WHILE OPEN — so this block has NO MECHANISM THAT WILL EVER RELEASE IT"."by definition" is an assertion. It was never counted, and counting refutes it.
Measured
objectui, 2026-09-13, REST
/issues?labels=LABEL&state=STATE&per_page=100, pull requests excluded. Population: every ISSUE in that repository carrying the label — not comments, not PRs, not call sites.state_reasonpm:on-holdneeds-user-decisionpm:blocked(control)Control with a known direction, and it HIT: the same enumerator returned non-zero on all three closed rows (7, 3, 7). A broken
state=closedwould have returned 0 across all three.⇒ cards do close out of both states, and nine of the ten measured closures are⚠️ Those are dated counts on one board; the instrument is the command above, not the numbers.
completed— the hold lifted and the work finished, which is exactly the release H26 says cannot exist.The same file refutes it twice in its own text
PM_RESIDUE_LABELScontainspm:on-hold; a label can only be residue on a closed card if cards close carrying it. H22's own docblock saysneeds-user-decisionis "perfectly good states for a closed card to have ended in" — the direct converse of H26, in one file.pm:on-holdon 1 closed card in a 6.2-day window.The sentence does not stay in a report body — it is quoted outward as a structural verdict. Two live instances on objectui cards (⛔ named only; they belong to another seat and are untouched): objectui#2231 comment
5591833377quotes H26 verbatim as "This card's unlock predicate can never fire", and objectui#2890 mirrors it. ⇒ a PM gate's assertion is serving as other seats' grounds to abandon locks they would otherwise have opened.⭐ H26's final sentence is accurate and is the useful half — "the release has to come from the target's own state changing (a ruling answered, a hold restarted) and someone has to want that." The row is miscalibrated, not wrong: the defect is the categorical half, which overstates no one is scheduled to act into no mechanism exists. ⛔ The repair is wording plus provenance, not deleting the row.
Sites on this repository's
origin/main, re-measured hereSix, not four. Two of them are missing from the objectui card's list, and one of those is missing because a line-oriented grep cannot see it:
#11219rationaleINDEFINITE_TARGET_LABELSjsdocH26:self-test⛔ Changing only the string turns the self-test red, or turns it into a lock protecting the retired words. ⭐ Whatever replaces it needs a positive assertion pinning the new wording: otherwise a green self-test cannot distinguish "fixed it" from "deleted the assertion along with the sentence it named".
Why it is filed HERE and not only on objectui
objectui carries a byte-pinned verbatim port of this file (
scripts/upstream-port-pin.json, refbf10debd5, 11 declared divergences, verified bycheck:upstream-port-parityreversing them and comparing SHA-256). Measured on an objectui branch: the unedited base file is green (exit 0), and the H26 wording fix makes it red (exit 1) — the drift is the fix's.All 11 existing divergences are objectui-specific adaptations. None corrects a shared defect, and that gate's own header rules that "the divergences are a checklist, not a licence" and that "the set is meant to SHRINK". ⇒ fixing the consumer copy by declaring new divergences would baseline drift and leave this copy still emitting the refuted sentence. The producer is here.
A finished, tested patch for all six sites exists on objectui branch
claude/issue-9317-h26-counted-not-asserted(objectui PR #9391, draft) and applies to the same six sites here. objectui#9317 is the consumer-side card; this one is the producer-side half of it.Not graded
No
domain:*and nopm:*applied, and no assignee — this seat does not grade and does not claim in this repository. Triage's call.Generated by Claude Code, session
session_01FhBNJcLRZLe8M87VcUgpKr— attribution written as prose deliberately, because a footer block is stripped on issue creation.