Uh oh!
There was an error while loading. Please reload this page.
Give check-release-section-coverage a nightly standing caller, measured against the live 17.2.0 gap - #11883
Conversation
… caller The gate's advisory half runs on every PR inside lint.yml; its `--strict` half had no caller at all, so the only thing that ever executed was one green job's log line among 106 steps. Measured before building: the 17.2.0 gap has been live for 40 hours, 262 PRs landed on main in that window each emitting the two advisory annotations, and `content/docs/releases/` took zero commits. #10268's acceptance criterion is "visible within a day of a minor publishing", already exceeded with the advisory in place. Verified against a real PR head sha through the check-runs API, the annotation is registered at `path=.github` (no `file=` parameter), rides a green required check among 31 non-failing check runs, and is addressed to whoever opened the next PR — who neither created the debt nor owns the remedy. Volume is not the problem: those were the only two `##[warning]` lines in a 4004-line job log. Audience is. So this adds the reader, and leaves the advisory exactly as it is. The patrol runs the gate TWICE and the order is load-bearing: the gate returns 1 for both "findings under --strict" and "broken instrument", so advisory-first establishes instrument health and only then is `--strict`'s exit 1 unambiguous. That gives `--strict` a real standing caller as a machine-readable predicate while the job itself stays green — findings land in a pinned anchor issue, never in a chronically red scheduled job. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015ahemw8RcTgqtxrj15PEZx
os-steve
commented
Aug 24, 2026
ACCEPT — PM review, I dispatched this saying a won't-fix would be a success. The measurement said build — and it said so with evidence rather than with an argument, which is the outcome worth having either way. ⭐ The natural experiment beats the UI question the card askedThe card framed the open question as "how visible is a
⇒ #10268's own acceptance criterion — "visible within a day of a minor publishing" — is already exceeded with the advisory in place and firing. That is not an opinion about annotation visibility; it is 262 exposures producing zero response. No UI argument can be made against it. And the mechanism is pinned rather than inferred, via the check-runs annotations API: the annotation is registered at ⭐ Volume is explicitly ruled out as the cause: those were the only 2 The population had moved under the card5 in-scope GA minors, not 4 (17.2.0 published 2026-08-23), and the gate reports 2 live findings on Both of my ⛔ fences held, checked by diff
The diff is 2 files, both new: the patrol workflow and its renderer. The advisory is unchanged. ⭐ The no-chronic-red requirement, solved rather than deferredThis was my sharpest ⛔ — a
So the patrol runs advisory first to establish instrument health, after which And it was proven on a real runner, not in theory: the new workflow triggered on this PR (run 32786959622) and concluded SUCCESS with findings present — sweep, render and publish all succeeded, while the board-touching steps and "Fail if the sweep could not run" correctly skipped on Evidence discipline worth naming
On your three out-of-scope items#11886 is a good catch and the right kind of relevant: The The proxy-blocked search endpoint (403, returning what reads as zero hits) is worth every seat knowing, and catching it with a positive control instead of trusting the zero is the discipline that keeps this board honest.
|
Uh oh!
There was an error while loading. Please reload this page.
Fixes#10803
The card asked for a measurement first, and said plainly that "the advisory is
sufficient, no standing caller needed" would be a legitimate outcome. I measured
it. The measurement says a caller is warranted — and it says so on a live gap
that opened after the card was written.
The measurement
The population changed under the card. The card recorded 4 in-scope GA minors,
all covered, zero findings. Re-derived on
origin/maintoday there are 5 —17.2.0 published on 2026-08-23 — and the gate reports 2 live findings:
content/docs/releases/v17.mdxnames no 17.2 series, andindex.mdxstill reads"current series: 17.1.0". So this is not a hypothetical; the advisory is firing
right now.
The natural experiment. The 17.2.0 CHANGELOG heading landed
2026-08-23T06:29:35Z. In the 40 hours since:
main, each running the advisorycontent/docs/releases/#10268's acceptance criterion is "visible within a day of a minor publishing".
That is already exceeded, with the advisory in place and firing on every one of
those 262 runs.
Why that is structural, not bad luck. Verified against a real PR head sha
through the check-runs API (
GET /check-runs/{id}/annotations):path=.github, line 19/20 — the workflowfile, because the gate emits
::warning::with nofile=parameter. It cantherefore never appear on
content/docs/releases/v17.mdxin the Files-changedtab, which is where reviewers actually read.
failing, which GitHub collapses to "All checks have passed". It is step 74
of 106 in that job (the card estimated ~86; the job has grown).
does not own the remedy.
Volume is explicitly not the problem, and this PR does not pretend it is. The
two annotations were the only
##[warning]lines in a 4004-line job log, and 2 ofonly 5 annotations across all 31 checks. The advisory is quiet and correct. It is
pointed at the wrong reader. So this adds the reader and leaves the advisory
exactly as it stands — the advisory-vs-hard-fail choice (2748 PRs) is settled and
untouched here.
What this ships
A new workflow,
.github/workflows/release-coverage-patrol.yml— nightly, landingin a pinned anchor issue, following
half-state-patrol.yml's shape and itsargument against a per-run comment stream.
lint.ymlis not touched.How
--strictfinally gets a caller without a chronically red job. The gatereturns 1 for both "findings under
--strict" and "the instrument is broken", so--strictalone is ambiguous and cannot be branched on. The patrol runs the gatetwice, and the order is load-bearing:
it could not, which is the only thing that may redden this job. This run also
produces the authored finding text.
--strict— with instrument health already established, exit 1 nowmeans exactly one thing: findings exist.
That gives
--stricta real standing caller as a machine-readable predicate, whilefindings land in the anchor issue and never colour the job. A
--strictrun staysred for as long as the prose is unwritten — 25 days in the 16.1.0 case — and a
chronically red scheduled job is how people learn to skim red.
scripts/render-release-coverage-anchor.mjscomposes the anchor body. It is ascript and not inline
github-scriptJS because inline JS in a YAML block isreachable by no test: every property below would otherwise be pinned by nothing.
It wraps the gate's authored prose verbatim rather than re-wording it.
The anchor is #11879 (
tracking-labeled, minted for this) — please pin it.Adopting elsewhere needs no edit here: set the repository variable
RELEASE_COVERAGE_ANCHOR_ISSUE. An unset anchor makes the job refuse loudlyrather than guess a number or write nowhere.
Verification
All commands run on final head
2497d75df, exit codes captured with no pipe inbetween.
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(not from a hand-written list) — all exit 0, re-runon the final commit. Plus
check:nul-bytesand both self-tests.--self-testof the new renderer: 10 assertions, counted rather thanhard-coded (the first draft reported a literal
9while running 10; a self-testthat misreports its own size is the first thing a reader stops trusting).
PREAMBLEwith a marker in the did-not-run branch was confirmed on disk (injectedtext present, anchored count dropped) and flipped the run
0 -> 1with exactly themarker assertion failing. The restore leg was proven byte-identical via
diff -q,and the mutation carried a
trap ... EXIT INT TERM. No build/distis involved —the script runs from source — so no rebuild leg applies.
advisory
0, strict1, renderer emitted the findings body. This is the shapethe first scheduled run will write.
population (its config decides, not me);
--format jsonreports 2 files linted,0 errors, 0 warnings; and
eslint.config.mjsstates in its own words that thisrepo "never enables type-aware linting (no
parserOptions.project, no typed@typescript-eslintrules) for ANY file" — so this diff cannot move the verdictof any file it does not touch.
The
pull_requesttrigger is paths-filtered to this workflow and the gate itcalls, so this PR exercises the sweep on a real runner while the anchor write is
skipped — the rendered body goes to the run summary instead. A PR must never
rewrite the pinned view.
Assumptions the card asked me to falsify
(
fetch(,http,api.github.com,execSync,child_process,octokit,GITHUB_TOKEN) matches zero lines, against 4 each in the two precedentpatrols' workflows as a positive control. So the reason for a caller here is
audience, not reachability, and the precedents transfer less directly than they
look — this file says so in its own header rather than borrowing their rationale.
api.github.comanswered HTTP200 from this dispatch container, so the blanket "unreachable from dispatch
containers" framing is not currently true here. Recorded, not acted on.
Generated by Claude Code