Filed by the PM/director-drafting seat on the maintainer's 2026-09-09 instruction, verbatim: 「11879 直接关闭」. That closure is done; this card takes its mechanical consequence, which the closure does not resolve by itself.
Measured mechanism (read on origin/main)
.github/workflows/release-coverage-patrol.yml:
:105 - cron: '19 4 * * *'
:153 ANCHOR_ISSUE: >-
:154 ${{ vars.RELEASE_COVERAGE_ANCHOR_ISSUE
:155 || (github.repository == 'objectstack-ai/objectstack' && '11879')
:279 await github.rest.issues.update({ …anchor body… })
⇒ #11879 is a hard-coded literal fallback for this repository, and the anchor leg's only write is issues.update() on that number.
Why closing the card is not enough — and why this is worse than a red job
GitHub permits editing the body of a CLOSED issue. So after the closure, on every daily run:
⇒ The patrol keeps reporting into a place nobody reads, with no red signal anywhere. Compare objectui#7852, where a missing anchor made the job fail loudly for 50 consecutive runs — that was noisy but visible. This shape is silent.
⚠️ And the anchor's whole purpose was the heartbeat. Its own body states the reading discipline: "a timestamp that stops advancing means the standing caller died, which is the failure this anchor exists to make visible." With the card closed, the timestamp keeps advancing into a closed page — so the one signal the anchor existed to carry is now both live and unreadable.
What this card asks for
Pick one and land it; the first is the default given the maintainer declined the pin:
- Drop the anchor leg for this repository. Remove the
'11879' literal from :155, and make an empty ANCHOR_ISSUE a supported configuration rather than an error: publish the rendered body to the run summary, emit a ::notice:: naming RELEASE_COVERAGE_ANCHOR_ISSUE, and exit 0. Keep the hard failure for every other anchor failure (issue not found, write rejected, non-numeric variable — :231-232 already handles that last one).
- Re-point it. If the coverage sweep should keep a durable anchor, open a fresh
tracking issue and set the repo variable RELEASE_COVERAGE_ANCHOR_ISSUE to its number — ⚠️ that is a maintainer action (repository variables are not writable by any seat), so ⛔ do not choose this route inside this card without a ruling.
- Retire the patrol. If published-minor section coverage is not worth a standing check, delete the workflow. ⚠️ Note what is lost: the gate ships with no baseline and no exception list precisely because its v16+ floor is inherited from
scripts/check-release-page-status.mjs (maintainer ruling 2026-08-15: 「只负责 v16 以后的,需要的话之前的版本删除也可以的」); below that floor there are 24 uncovered minors (v9, v12, v13, v14).
⛔ Whichever route: do not leave issues.update() pointed at a closed issue. That is the one outcome this card exists to prevent.
Acceptance criterion
A scheduled run of release-coverage-patrol.yml on this repository writes to no closed issue, and either (a) succeeds with the rendered body in the run summary and a notice naming the variable, or (b) writes to an anchor that is open. A run with a bad anchor number still fails.
Same family, cross-linked
objectui#8740 asks for the identical graceful-degrade treatment for half-state-patrol.yml and merge-queue-head-patrol.yml, which share the HALF_STATE_ANCHOR_ISSUE variable in that repo. ⇒ Three patrols, one anchor pattern, two repos. Whoever takes either card should read the other first; a single shared shape for "no anchor configured" is cheaper than two.
Refs: #11879 (the closed anchor, carries the sweep's last reading and the reading discipline) · objectui#8740 (same pattern, sibling repo) · objectui#7852 / objectui#5986 (both closed 2026-09-09 — the loud-but-invisible variant of this failure)
Filed by the PM/director-drafting seat on the maintainer's 2026-09-09 instruction, verbatim: 「11879 直接关闭」. That closure is done; this card takes its mechanical consequence, which the closure does not resolve by itself.
Measured mechanism (read on
origin/main).github/workflows/release-coverage-patrol.yml:⇒ #11879 is a hard-coded literal fallback for this repository, and the anchor leg's only write is
issues.update()on that number.Why closing the card is not enough — and why this is worse than a red job
GitHub permits editing the body of a CLOSED issue. So after the closure, on every daily run:
issues.update()on [Release-coverage patrol] published-minor section coverage — generated view (please pin) #11879 succeeds,⇒ The patrol keeps reporting into a place nobody reads, with no red signal anywhere. Compare objectui#7852, where a missing anchor made the job fail loudly for 50 consecutive runs — that was noisy but visible. This shape is silent.
What this card asks for
Pick one and land it; the first is the default given the maintainer declined the pin:
'11879'literal from:155, and make an emptyANCHOR_ISSUEa supported configuration rather than an error: publish the rendered body to the run summary, emit a::notice::namingRELEASE_COVERAGE_ANCHOR_ISSUE, and exit 0. Keep the hard failure for every other anchor failure (issue not found, write rejected, non-numeric variable —:231-232already handles that last one).trackingissue and set the repo variableRELEASE_COVERAGE_ANCHOR_ISSUEto its number —scripts/check-release-page-status.mjs(maintainer ruling 2026-08-15: 「只负责 v16 以后的,需要的话之前的版本删除也可以的」); below that floor there are 24 uncovered minors (v9, v12, v13, v14).⛔ Whichever route: do not leave
issues.update()pointed at a closed issue. That is the one outcome this card exists to prevent.Acceptance criterion
A scheduled run of
release-coverage-patrol.ymlon this repository writes to no closed issue, and either (a) succeeds with the rendered body in the run summary and a notice naming the variable, or (b) writes to an anchor that is open. A run with a bad anchor number still fails.Same family, cross-linked
objectui#8740 asks for the identical graceful-degrade treatment for
half-state-patrol.ymlandmerge-queue-head-patrol.yml, which share theHALF_STATE_ANCHOR_ISSUEvariable in that repo. ⇒ Three patrols, one anchor pattern, two repos. Whoever takes either card should read the other first; a single shared shape for "no anchor configured" is cheaper than two.Refs: #11879 (the closed anchor, carries the sweep's last reading and the reading discipline) · objectui#8740 (same pattern, sibling repo) · objectui#7852 / objectui#5986 (both closed 2026-09-09 — the loud-but-invisible variant of this failure)