You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[ci] the half-state patrol has been red on all 50 scheduled runs since 2026-08-28 (no anchor configured), and ci-cd-pipeline.md documents a knob the workflow no longer sets #7852
Filed unassigned and unlabeled by the os-dev seat working objectui#7010 (session session_01KDq78vMMSzCGWGmhUYBabh, branch claude/issue-7010-merge-queue-head-patrol). Found while reading half-state-patrol.yml as the nearest precedent for a scheduled patrol. ⛔ Out of scope for #7010 and deliberately not fixed there. ⛔ Routing, domain:*, type and grading are the triage seat's.
Two defects in one installation. They are filed together because they are the same workflow, the same install, and one sitting.
① The standing half-state patrol has been RED on every scheduled run for eight days
Measured 2026-09-06T00:0xZ against actions/workflows/half-state-patrol.yml/runs:
⇒ 50 consecutive failures, every scheduled run since 2026-08-28.
The step-level reading on the newest run (33987749545) says exactly where:
4 Run the live sweep -> success
5 Resolve the anchor issue -> FAILURE
6 Update the pinned anchor issue -> skipped
7 Publish the rendered body to summary -> success
⭐ The sweep itself runs and passes. Its findings then land nowhere. The workflow resolves its anchor as vars.HALF_STATE_ANCHOR_ISSUE || (github.repository == 'objectstack-ai/objectstack' && '9857') || '' — the literal fallback is guarded to the sibling repository, correctly, so in objectui the value is empty unless the repository variable is set. It is not set. The workflow then refuses to guess an issue number and fails, which is the behaviour its own header argues for and is the right call in isolation.
The consequences are two, and the second is the reason this is worth a card rather than a shrug:
Thirteen predicates over this board's dispatch invariants have produced no delivered output for eight days. objectui#5791's own adoption note is the measurement of what that costs: a hand-run of one predicate over this repo's blocked inventory found 7 blocks whose blocker had already closed — 58% of the machine-readable blocks were false, one for a week — and the stated difference from the sibling repo was never discipline, it was that one repo had a caller. This repo now has a caller that cannot deliver.
A workflow that is red four times a day for eight days is red as a matter of course, and this repository has already ruled on that shape (objectui#6596: a check red on the healthy case trains everyone to ignore red).
The remedy is maintainer-only and is written in the workflow's own header: open a tracking-labeled anchor issue in this repository and set the repository variable HALF_STATE_ANCHOR_ISSUE to its number (Settings, then Secrets and variables, then Actions, then Variables). No agent seat can set a repository variable. ⚠️ Triage may want the needs-user-decision label for that half; this seat applies no labels.
② ci-cd-pipeline.md describes a configuration the workflow does not have
content/docs/guide/ci-cd-pipeline.md, in its Half-State Patrol section:
The behavioural one: the sweeper's closed-card reader (pm:* labels left on cards that already closed) is switched off here via PM_SWEEP_CLOSED_WINDOW_PAGES: '0'.
.github/workflows/half-state-patrol.yml does not set PM_SWEEP_CLOSED_WINDOW_PAGES at all. It sets:
PM_SWEEP_CLOSED_FLOOR: '2026-08-28'
and its own header says the reader is ON with a dated floor, that it read the zeroed window "until 2026-08-28", and that the page window is now "deliberately absent: it is back to the script's own upstream default of 4".
⇒ The page says a predicate is switched off. It is switched on, judging every card closed on or after the cutover. The page also still quotes the retired mechanism as the thing doing the switching, so a reader looking for the knob finds a variable nothing sets.
⚠️ Scope of the reading: the page's surrounding claims were not re-verified one by one, only the sentence quoted above. The rest of the workflow inventory tracks .github/workflows/ in both directions under scripts/__tests__/ci-cd-pipeline-doc.test.ts, but that pin reads headings and file names — it cannot see a false statement inside a section, which is why this one survived the divergence being changed.
Dedup, and its bound — stated rather than implied
Searched before filing, and the search channel available to this seat is narrow enough to state exactly:
GET /search/issues is 403 here ("sessions are bound to their configured repositories"), and the MCP search_issues fallback answered API rate limit already exceeded on this container.
⚠️ NOT read: the finding-labeled listing came back as a full page of 100 with the same control absent, i.e. page 1 of a paged listing, so that read is void and was not extended into a full-board scan.
⇒ If a card for either half already exists under a label outside ci/cd, this is a duplicate — close it against the older one.
Filed unassigned and unlabeled by the
os-devseat working objectui#7010 (sessionsession_01KDq78vMMSzCGWGmhUYBabh, branchclaude/issue-7010-merge-queue-head-patrol). Found while readinghalf-state-patrol.ymlas the nearest precedent for a scheduled patrol. ⛔ Out of scope for #7010 and deliberately not fixed there. ⛔ Routing,domain:*,typeand grading are the triage seat's.Two defects in one installation. They are filed together because they are the same workflow, the same install, and one sitting.
① The standing half-state patrol has been RED on every scheduled run for eight days
Measured 2026-09-06T00:0xZ against
actions/workflows/half-state-patrol.yml/runs:⇒ 50 consecutive failures, every scheduled run since 2026-08-28.
The step-level reading on the newest run (
33987749545) says exactly where:⭐ The sweep itself runs and passes. Its findings then land nowhere. The workflow resolves its anchor as
vars.HALF_STATE_ANCHOR_ISSUE || (github.repository == 'objectstack-ai/objectstack' && '9857') || ''— the literal fallback is guarded to the sibling repository, correctly, so in objectui the value is empty unless the repository variable is set. It is not set. The workflow then refuses to guess an issue number and fails, which is the behaviour its own header argues for and is the right call in isolation.The consequences are two, and the second is the reason this is worth a card rather than a shrug:
The remedy is maintainer-only and is written in the workflow's own header: open a⚠️ Triage may want the
tracking-labeled anchor issue in this repository and set the repository variableHALF_STATE_ANCHOR_ISSUEto its number (Settings, then Secrets and variables, then Actions, then Variables). No agent seat can set a repository variable.needs-user-decisionlabel for that half; this seat applies no labels.②
ci-cd-pipeline.mddescribes a configuration the workflow does not havecontent/docs/guide/ci-cd-pipeline.md, in its Half-State Patrol section:.github/workflows/half-state-patrol.ymldoes not setPM_SWEEP_CLOSED_WINDOW_PAGESat all. It sets:and its own header says the reader is ON with a dated floor, that it read the zeroed window "until 2026-08-28", and that the page window is now "deliberately absent: it is back to the script's own upstream default of 4".
⇒ The page says a predicate is switched off. It is switched on, judging every card closed on or after the cutover. The page also still quotes the retired mechanism as the thing doing the switching, so a reader looking for the knob finds a variable nothing sets.
.github/workflows/in both directions underscripts/__tests__/ci-cd-pipeline-doc.test.ts, but that pin reads headings and file names — it cannot see a false statement inside a section, which is why this one survived the divergence being changed.Dedup, and its bound — stated rather than implied
Searched before filing, and the search channel available to this seat is narrow enough to state exactly:
GET /search/issuesis 403 here ("sessions are bound to their configured repositories"), and the MCPsearch_issuesfallback answeredAPI rate limit already exceededon this container.ci/cd— 3 of them, with a control confirming the read was real ([ci] the merge queue has landed NOTHING since 07:58Z — five merge_group builds completedsuccessandmainhas not moved in 90 minutes #7010 carries that label and is present). Neither of the other two is this.finding-labeled listing came back as a full page of 100 with the same control absent, i.e. page 1 of a paged listing, so that read is void and was not extended into a full-board scan.⇒ If a card for either half already exists under a label outside
ci/cd, this is a duplicate — close it against the older one.Generated by Claude Code