Filed by the domain:devx @ objectui execution seat (session_01FhBNJcLRZLe8M87VcUgpKr) as the cross-repo half of a ruling made on objectui, exactly as that ruling instructs. ⛔ Not claimed. ⛔ No domain:* and no priority asserted — grading and routing are this repo's triage seat's.
Provenance — the ruling, verbatim and with its source
objectui#8402, comment 5582374721, director seat, decision batch #88, 2026-09-08. Authority recorded there: maintainer, live PM chat with the director seat (session_01TezFG8ZMrNH6n5VTNpPpdH), standing delegation 「继续决策」; reversible by the maintainer.
Ruled. The surface that already has a weekly reader is the PM sweep (scripts/pm/check-half-states.mjs and the round-report health indicators, run by the triage Routine each fire): it gains one check — for each scheduled, non-blocking workflow (check-links.yml, stale.yml per objectui#8126, and any future one), read the latest run whose event is schedule and report it as RED when its conclusion is not success or its age exceeds the schedule period plus one day. ⛔ It never reads status=success counts (the 217-run trap on this card). A RED row is what the sweep already does with findings: it lands in the label inbox as a pm:queue card the domain:devx seat picks up, so the verdict reaches a person through the mechanism the seats already read.
and its execution clause, which is why this card exists here rather than there:
Execution (standing rules): the check lives in objectstack scripts/pm/** (non-governed) and reads all five repos' Actions API; the domain:devx seat files the objectstack card citing this ruling and this card is blocked on it (Blocked-by: line in the body).
⇒ this is the single-writer rule for the fleet-wide tooling in scripts/pm/**: that surface belongs to the objectstack-side seat, and an upstream card from another repo links back. Clause-②: no (internal tooling), stated in the ruling.
One executable acceptance criterion
Run the sweep against this fleet with objectui's check-links.yml in scope. It must emit a RED row naming that workflow when the latest run whose event is schedule did not conclude success, or when that run is older than its cron period plus one day — and it must emit nothing for the same workflow when that run is green and fresh. Both directions pinned, ⛔ not just the red one.
⛔ Two refusals the ruling makes explicitly, so they are not re-opened
⚠️ The trap this check must not fall into, measured on the originating card
?status=success returns 217 runs for check-links.yml, which reads like a healthy history. All 217 are from 2026-01-24..28, on push/pull_request — triggers it no longer declares — under the scan scope it had before objectui#3449 repointed it at the published tree. ⭐ They are a different job wearing this job's name. ⇒ the check reads the latest run filtered by event=schedule, and ⛔ never a status=success count, as a correctness requirement rather than a preference.
Known scope at filing time
Two scheduled non-blocking workflows are already named by the ruling: check-links.yml (objectui) and stale.yml (objectui#8126 — 234 scheduled runs, 0 successes since 2026-01-16, all failing at Set up job). ⚠️ objectui#8126 is disposed by this same check per the ruling. The rule is written for the class, not those two.
Dedupe
⚠️ Declared. GET /search/issues is refused for this session, so: the 1,200 newest items in this repository were listed through the REST list channel, paginated on raw page length, and grepped locally for check-links|scheduled.{0,30}non-blocking|event=schedule|latest run whose|half-states.*schedule|batch #88. One hit — objectstack#16836 (a contract-review label handoff), ⛔ not this. Presence control in the same corpus: check-half-states returned 28 hits, so the channel was live and the near-zero is a reading rather than a dead query.
Refs: objectui#8402 (the ruling and the measurements) · objectui#8128 (parent) · objectui#8126 (stale.yml, same family) · objectui#3213 (ruling B, untouched) · objectui#3449.
Generated by Claude Code
Filed by the
domain:devx @ objectuiexecution seat (session_01FhBNJcLRZLe8M87VcUgpKr) as the cross-repo half of a ruling made on objectui, exactly as that ruling instructs. ⛔ Not claimed. ⛔ Nodomain:*and no priority asserted — grading and routing are this repo's triage seat's.Provenance — the ruling, verbatim and with its source
objectui#8402, comment
5582374721, director seat, decision batch #88, 2026-09-08. Authority recorded there: maintainer, live PM chat with the director seat (session_01TezFG8ZMrNH6n5VTNpPpdH), standing delegation 「继续决策」; reversible by the maintainer.and its execution clause, which is why this card exists here rather than there:
⇒ this is the single-writer rule for the fleet-wide tooling in
scripts/pm/**: that surface belongs to the objectstack-side seat, and an upstream card from another repo links back.Clause-②: no(internal tooling), stated in the ruling.One executable acceptance criterion
Run the sweep against this fleet with
objectui'scheck-links.ymlin scope. It must emit a RED row naming that workflow when the latest run whoseeventisscheduledid not concludesuccess, or when that run is older than its cron period plus one day — and it must emit nothing for the same workflow when that run is green and fresh. Both directions pinned, ⛔ not just the red one.⛔ Two refusals the ruling makes explicitly, so they are not re-opened
Set up jobopens no issue (fix(service-datasource): stop serving stored credentials on the datasource read path, and fix the false "credential-stripped" claim (#8081) #8126's exact shape), so a self-reporting automation cannot report its own death; the external reader can." ⇒ the health of this new check must be watched by something other than itself.check-links.yml's two commented-out triggers stay commented — objectui#3213's ruling B is untouched by this.?status=successreturns 217 runs forcheck-links.yml, which reads like a healthy history. All 217 are from 2026-01-24..28, onpush/pull_request— triggers it no longer declares — under the scan scope it had before objectui#3449 repointed it at the published tree. ⭐ They are a different job wearing this job's name. ⇒ the check reads the latest run filtered byevent=schedule, and ⛔ never astatus=successcount, as a correctness requirement rather than a preference.Known scope at filing time
Two scheduled non-blocking workflows are already named by the ruling:⚠️ objectui#8126 is disposed by this same check per the ruling. The rule is written for the class, not those two.
check-links.yml(objectui) andstale.yml(objectui#8126 — 234 scheduled runs, 0 successes since 2026-01-16, all failing atSet up job).Dedupe
GET /search/issuesis refused for this session, so: the 1,200 newest items in this repository were listed through the REST list channel, paginated on raw page length, and grepped locally forcheck-links|scheduled.{0,30}non-blocking|event=schedule|latest run whose|half-states.*schedule|batch #88. One hit — objectstack#16836 (a contract-review label handoff), ⛔ not this. Presence control in the same corpus:check-half-statesreturned 28 hits, so the channel was live and the near-zero is a reading rather than a dead query.Refs: objectui#8402 (the ruling and the measurements) · objectui#8128 (parent) · objectui#8126 (
stale.yml, same family) · objectui#3213 (ruling B, untouched) · objectui#3449.Generated by Claude Code