Path: none | instrument (scripts/pm/check-half-states.mjs H52) | 北极星「优先级」2
check-half-states.mjs's H52 row (an os-dev-report whose open_questions is non-empty on a card carrying no needs-user-decision) has no clearing act available to a pm:on-hold card. Two live instances on the domain:ui board right now, both already answered in full by the seat, both re-firing on every sweep and both unclearable by any legal move.
The predicate, read at source
scripts/pm/check-half-states.mjs, h52OpenQuestionsUnrouted — seat-verified on objectstack origin/main 5eebc9edced6d74fe6c76c76bab7c8483bdcfbbb:
export function h52OpenQuestionsUnrouted(issue, commentRows) {
if (!Array.isArray(commentRows)) return null; // unjudged
if (!h52SpeaksAbout(issue)) return null; // card CLOSED
if (labelNames(issue).includes(GOVERNED_PR_DECISION_LABEL)) return null; // needs-user-decision
const report = latestDevReport(commentRows);
if (!report) return null;
if (!report.parsed) return null;
if (report.questions.length === 0) return null; // a NEWER report with an empty array
…
}
⇒ exactly three acts stand the row down: close the card, hang needs-user-decision, or post a newer os-dev-report with an empty open_questions.
Why none of the three is available on a held card
The row's own remedy text names three branches, and the third one is the one that has no mechanism:
If the question has already been ANSWERED, say so in the next report, whose empty open_questions is the record that stands this row down.
- Close the card — ⛔ not legal: 「缺陷卡 ⛔ 不藏进 hold 也不自行关闭」, and a card in a well-formed hold with a fireable
Restart-when: is a hold in good standing.
- Hang
needs-user-decision — ⛔ forbidden by the row's own text for exactly this case: 「if it is a RESIDUAL raised while EXECUTING a ruling this card already carries, ⛔ never re-hang the label here」.
- A newer
os-dev-report — ⛔ impossible by construction: a report is written by an os-dev subagent, and a pm:on-hold card is dispatched to no dev. That is what the state means.
⭐ And the act the remedy actually asks for — the seat answering the questions on the card — is invisible to the predicate, because latestDevReport reads only os-dev-report comments. A seat verdict posted four minutes after the report, answering both questions by name, moves nothing.
The two instances, with the answering comment that the row cannot see
| card |
state |
newest os-dev-report |
the seat's answer, NEWER than it |
row still fires |
| objectui#8348 (reading taken 2026-09-19T01:42Z) |
pm:on-hold |
comment 5737471964, 2026-09-18T23:36:53Z, 2 questions |
comment 5737496254, 2026-09-18T23:40:42Z — 「The two open questions, answered」, Q1 and Q2 adopted verbatim with the seat's own re-measurement |
yes |
| objectui#9868 (same reading) |
pm:on-hold |
comment 5730387383, 2026-09-18T13:03:55Z, 2 questions |
— |
yes |
objectui#8348's answer is not a paraphrase: it adopts Q1's recommendation verbatim into the card's Restart-when: line (and records the post-write command classification), and answers Q2 with a source read of ObjectTreePropsSchema showing the ruling's conditional has a false antecedent. There is nothing left for a maintainer to do on either question, and the row will report both forever.
⭐ Control, so this is a reading and not a complaint about noise
objectui#9860 carries an H52 row on the same sweep and is pm:blocked, not pm:on-hold — this seat still lands its PR, so it CAN receive a newer os-dev-report, and its row is clearable by the stated act. ⇒ the defect is specific to states that are terminal for dispatch, ⛔ not a general claim that H52 is too loud. Same sweep, same predicate, one clearable and two not.
Class (b) — it violates a contract this repository publishes
The charter's mirror rule is explicit for cards: 「无机制可唤醒的卡 ⛔ 不 hold:关 not planned」 — a state with no mechanism that can ever release it is a defect, not a choice. A patrol ROW with no act that can ever clear it is the same shape one layer up, and it is worse in one way: a permanently-firing row trains its reader to skip the whole family, which is the failure mode the H-row inventory exists to prevent.
⚠️ What this card does ⛔ NOT assert
⛔ Not that H52's question is wrong — an unreachable maintainer question is a real and well-chosen thing to watch. ⛔ Not that the two instances above are mis-held. ⛔ And ⛔ no fix shape is prescribed here: whether the answer is a fourth null-exit (a seat comment newer than the report that carries an answer marker), a state-based exclusion, or something else is the claiming seat's measurement — each has a different false-negative cost and this filing measured none of them.
Dedupe words
H52 no clearing act on hold · open_questions row unclearable pm:on-hold · latestDevReport ignores seat answer · half-state row with no mechanism · h52OpenQuestionsUnrouted null exits
Cross-references, each resolved by a read in THIS act with its title printed
- objectui#8348 — finding(plugin-view/plugin-map/plugin-gantt): 三个 block 的 props 对着协议里不存在的行判断 (open,
pm:on-hold; instance 1, and the card whose answer comment is quoted above)
- objectui#9868 — (open,
pm:on-hold; instance 2)
- objectui#9860 — [ruling C] compile objectui against @objectstack/spec@main as the shape gate (open,
pm:blocked; the lit CONTROL)
filed by the domain:ui#2 execution seat · session_018HrVaotisyhgmot9o2MLRq · ⛔ this seat does ⛔ not grade or route: no priority:* and no domain:* set here · the predicate source, the three card states and the two comment timestamps were all read in this act at 2026-09-19T01:42Z, against objectstack origin/main 5eebc9edced6d74fe6c76c76bab7c8483bdcfbbb and the live objectui board · ⭐ every cross-reference resolved by a read in this act
Generated by Claude Code
Path: none | instrument (
scripts/pm/check-half-states.mjsH52) | 北极星「优先级」2check-half-states.mjs's H52 row (anos-dev-reportwhoseopen_questionsis non-empty on a card carrying noneeds-user-decision) has no clearing act available to apm:on-holdcard. Two live instances on thedomain:uiboard right now, both already answered in full by the seat, both re-firing on every sweep and both unclearable by any legal move.The predicate, read at source
scripts/pm/check-half-states.mjs,h52OpenQuestionsUnrouted— seat-verified on objectstackorigin/main5eebc9edced6d74fe6c76c76bab7c8483bdcfbbb:⇒ exactly three acts stand the row down: close the card, hang
needs-user-decision, or post a neweros-dev-reportwith an emptyopen_questions.Why none of the three is available on a held card
The row's own remedy text names three branches, and the third one is the one that has no mechanism:
Restart-when:is a hold in good standing.needs-user-decision— ⛔ forbidden by the row's own text for exactly this case: 「if it is a RESIDUAL raised while EXECUTING a ruling this card already carries, ⛔ never re-hang the label here」.os-dev-report— ⛔ impossible by construction: a report is written by anos-devsubagent, and apm:on-holdcard is dispatched to no dev. That is what the state means.⭐ And the act the remedy actually asks for — the seat answering the questions on the card — is invisible to the predicate, because
latestDevReportreads onlyos-dev-reportcomments. A seat verdict posted four minutes after the report, answering both questions by name, moves nothing.The two instances, with the answering comment that the row cannot see
os-dev-reportpm:on-hold5737471964, 2026-09-18T23:36:53Z, 2 questions5737496254, 2026-09-18T23:40:42Z — 「The two open questions, answered」, Q1 and Q2 adopted verbatim with the seat's own re-measurementpm:on-hold5730387383, 2026-09-18T13:03:55Z, 2 questionsobjectui#8348's answer is not a paraphrase: it adopts Q1's recommendation verbatim into the card's
Restart-when:line (and records the post-writecommandclassification), and answers Q2 with a source read ofObjectTreePropsSchemashowing the ruling's conditional has a false antecedent. There is nothing left for a maintainer to do on either question, and the row will report both forever.⭐ Control, so this is a reading and not a complaint about noise
objectui#9860 carries an H52 row on the same sweep and is
pm:blocked, notpm:on-hold— this seat still lands its PR, so it CAN receive a neweros-dev-report, and its row is clearable by the stated act. ⇒ the defect is specific to states that are terminal for dispatch, ⛔ not a general claim that H52 is too loud. Same sweep, same predicate, one clearable and two not.Class (b) — it violates a contract this repository publishes
The charter's mirror rule is explicit for cards: 「无机制可唤醒的卡 ⛔ 不 hold:关 not planned」 — a state with no mechanism that can ever release it is a defect, not a choice. A patrol ROW with no act that can ever clear it is the same shape one layer up, and it is worse in one way: a permanently-firing row trains its reader to skip the whole family, which is the failure mode the H-row inventory exists to prevent.
⛔ Not that H52's question is wrong — an unreachable maintainer question is a real and well-chosen thing to watch. ⛔ Not that the two instances above are mis-held. ⛔ And ⛔ no fix shape is prescribed here: whether the answer is a fourth null-exit (a seat comment newer than the report that carries an answer marker), a state-based exclusion, or something else is the claiming seat's measurement — each has a different false-negative cost and this filing measured none of them.
Dedupe words
H52 no clearing act on hold·open_questions row unclearable pm:on-hold·latestDevReport ignores seat answer·half-state row with no mechanism·h52OpenQuestionsUnrouted null exitsCross-references, each resolved by a read in THIS act with its title printed
pm:on-hold; instance 1, and the card whose answer comment is quoted above)pm:on-hold; instance 2)pm:blocked; the lit CONTROL)filed by the
domain:ui#2execution seat ·session_018HrVaotisyhgmot9o2MLRq· ⛔ this seat does ⛔ not grade or route: nopriority:*and nodomain:*set here · the predicate source, the three card states and the two comment timestamps were all read in this act at 2026-09-19T01:42Z, against objectstackorigin/main5eebc9edced6d74fe6c76c76bab7c8483bdcfbbband the live objectui board · ⭐ every cross-reference resolved by a read in this actGenerated by Claude Code