Finding — recording only, not claimed. Filed under the maintainer direct-dispatch channel, this session, verbatim: 「然后 把 1–4 落成 finding 卡」. PM session session_0124Qg8rLvpXnQDwCmpKUmaJ.
Measured
.github/workflows/half-state-patrol.yml runs check-half-states.mjs against ${{ github.repository }}. It is installed in this repo only, so the sweep covers objectstack and nothing else. The anchor #9857 says so in its own header: "…in objectstack-ai/objectstack — 94 half-state(s) found."
Open pm:blocked inventory across the four repos, 2026-08-23:
| repo | blocked | machine-swept |
|---|
| objectstack | 22 | yes |
| objectui | 28 | no |
| cloud | 7 | no |
| objectos | 2 | no |
37 of 59 blocked cards are outside any patrol.
The cost, measured rather than asserted
A hand-run of H19's predicate over objectui's 12 blocked cards that carry a resolvable Blocked-by: target found 7 whose blocker was already closed:
| card | blocker | blocker closed | days stale |
|---|
| objectui#4676 | #9019 | 2026-08-16 | 7 |
| objectui#4664 | #8704 | 2026-08-16 | 7 |
| objectui#5233 | #9933 | 2026-08-19 | 4 |
| objectui#5210 | #9934 | 2026-08-19 | 4 |
| objectui#5329 | objectui#5127 | 2026-08-20 | 3 |
| objectui#5601 | #10054 | 2026-08-21 | (stays blocked — unreleased, see below) |
| objectui#5120 | objectui#5149 | 2026-08-21 | 2 |
Six were returned to pm:queue this round; #5601 stays blocked because its blocker's change is closed but unreleased. 58% of objectui's machine-readable blocks were false. The same predicate runs hourly in objectstack and caught its four (H19 rows on #9857) — the difference is not discipline, it is that one repo has a caller and three do not.
Second-order
The same absence hides the other predicates too. Spot-checked while sweeping: objectui#5127 and #5149 are both closed while still carrying pm:dispatched — the H22 shape — and nothing in objectui will ever report it.
Shape of the fix
Parameterise the workflow's target repo and install it (or a matrix leg) for objectui, cloud and objectos. The script is already repo-agnostic — --format=markdown exists precisely so a caller can stamp its own provenance, and the anchor-issue-per-repo pattern carries over unchanged. The open questions are the token's cross-repo scope (see the sibling finding on H19's 404) and one anchor issue per repo to rewrite in place.
⛔ Not filed as queue work: whether four separate scheduled callers or one matrix job is right, and who owns the anchors, is a routing call for triage.
Re-check
git show origin/main:.github/workflows/half-state-patrol.yml | grep -n 'github.repository'
Finding — recording only, not claimed. Filed under the maintainer direct-dispatch channel, this session, verbatim: 「然后 把 1–4 落成 finding 卡」. PM session
session_0124Qg8rLvpXnQDwCmpKUmaJ.Measured
.github/workflows/half-state-patrol.ymlrunscheck-half-states.mjsagainst${{ github.repository }}. It is installed in this repo only, so the sweep covers objectstack and nothing else. The anchor #9857 says so in its own header: "…in objectstack-ai/objectstack — 94 half-state(s) found."Open
pm:blockedinventory across the four repos, 2026-08-23:37 of 59 blocked cards are outside any patrol.
The cost, measured rather than asserted
A hand-run of H19's predicate over objectui's 12 blocked cards that carry a resolvable
Blocked-by:target found 7 whose blocker was already closed:Six were returned to
pm:queuethis round; #5601 stays blocked because its blocker's change is closed but unreleased. 58% of objectui's machine-readable blocks were false. The same predicate runs hourly in objectstack and caught its four (H19 rows on #9857) — the difference is not discipline, it is that one repo has a caller and three do not.Second-order
The same absence hides the other predicates too. Spot-checked while sweeping: objectui#5127 and #5149 are both closed while still carrying
pm:dispatched— the H22 shape — and nothing in objectui will ever report it.Shape of the fix
Parameterise the workflow's target repo and install it (or a matrix leg) for objectui, cloud and objectos. The script is already repo-agnostic —
--format=markdownexists precisely so a caller can stamp its own provenance, and the anchor-issue-per-repo pattern carries over unchanged. The open questions are the token's cross-repo scope (see the sibling finding on H19's 404) and one anchor issue per repo to rewrite in place.⛔ Not filed as queue work: whether four separate scheduled callers or one matrix job is right, and who owns the anchors, is a routing call for triage.
Re-check