Skip to content

Commit 1776dbd

Browse files
committed
wip(docs): past tense for the retired pin gates in AGENTS.md, release docs and comments
AGENTS.md drops Console Pin Gate from the full-battery list and re-points the sibling-removal rule at Type Check UI; docs/releases-maintenance.md moves the pin-check paragraph to the past tense and reads the release gate roster as CI + Lint; workflow and script comments that named the retired gates as live now say they retired (#25697). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H835wAyqCCeF7jiYq7XSxi
1 parent 1dfef05 commit 1776dbd

10 files changed

Lines changed: 36 additions & 30 deletions

‎.github/workflows/cut-rc.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ jobs:
355355
restore-keys: |
356356
${{ runner.os }}-pnpm-store-v3-
357357
358-
# Restore-only, like ci.yml's Console Pin Gate: this workflow runs a handful
358+
# Restore-only, as ci.yml's retired Console Pin Gate was: this workflow runs a handful
359359
# of times a month so its own namespace is almost always cold, and the
360360
# build-core fallbacks seeded from main are the ones that actually hit.
361361
# Saving is lint.yml's job.

‎.github/workflows/docs-deploy.yml‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,9 @@ on:
5757
# snapshot owns :07 of 02, 08, 14 and 20. Of the six six-hour sets, only
5858
# 0/6/12/18 and 1/7/13/19 have hours with nothing scheduled after :00; the
5959
# first is taken because its :00 neighbours are short (release.yml's
60-
# version-pr refresh, prerelease-pin-watch at 06:00, the hourly ci/lint
61-
# runs), while 07:00 starts the showcase smoke. The MINUTE is off the top of
62-
# the hour for the reason every patrol here gives: scheduled runs queue
63-
# behind everyone else's :00 cron.
60+
# version-pr refresh, the hourly ci/lint runs), while 07:00 starts the
61+
# showcase smoke. The MINUTE is off the top of the hour for the reason every
62+
# patrol here gives: scheduled runs queue behind everyone else's :00 cron.
6463
#
6564
# This job spends almost nothing of the per-repository GITHUB_TOKEN budget
6665
# (the checkout, and no API reads), so unlike the board readers it is not

‎.github/workflows/lint.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3286,7 +3286,7 @@ jobs:
32863286
# from git: 17.1.0 ran 5h44m (36 PRs landed), 16.1.0 ran 25 days (2712 PRs).
32873287
# Hard-failing would have red 2748 PRs for a debt none of them created. So
32883288
# findings are a `::warning::` + step summary with the job GREEN — the
3289-
# loud-but-non-blocking shape prerelease-pin-watch.yml uses — and the policy
3289+
# loud-but-non-blocking shape the retired prerelease-pin-watch.yml used — and the policy
32903290
# follows half-state-patrol.yml's rule verbatim: findings never fail
32913291
# anything, the job DOES fail when the sweep could not run. A broken
32923292
# instrument is fatal here in every mode. `--strict` promotes findings to
@@ -4752,7 +4752,7 @@ jobs:
47524752
# the legacy `##[...]` form is parsed ANYWHERE in a printed line (the
47534753
# measured token sat at column 18 and was still consumed), while the
47544754
# `::...::` form is parsed only at LINE START (two mid-sentence ones print
4755-
# on every PR from `check-prerelease-pin-watch` and mint nothing). So the
4755+
# on every PR from the since-retired `check-prerelease-pin-watch` and minted nothing). So the
47564756
# first detector is unanchored and the second is anchored — flagging inert
47574757
# prose would be a false positive the next author would be right to delete.
47584758
#

‎.github/workflows/release-coverage-patrol.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ name: Release-Coverage Patrol
6363
# grepping prose, while the JOB stays green whenever findings exist. A `--strict`
6464
# run stays red for as long as the prose is unwritten — 25 days, in the 16.1.0
6565
# case — and a chronically red scheduled job is how people learn to skim red,
66-
# which `prerelease-pin-watch.yml`'s header warns about directly. Findings land
66+
# which the retired `prerelease-pin-watch.yml`'s header warned about directly. Findings land
6767
# in the anchor issue; they never colour this job.
6868
#
6969
# ## What lands where

‎AGENTS.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ Even inside your own worktree, operate defensively:
530530
check-run name, so a rename detaches its gate silently — treat those five names as contract.
531531
**Two speeds** (ruling record 6120820653): PR and queue runs carry the fast set, 10 minutes of
532532
wall per queue entry; `main`'s hourly and push runs carry the full battery — dogfood, e2e,
533-
`Console Pin Gate`, `Temporal Conformance (live PG + MySQL)` — read by the publish lane before
533+
`Temporal Conformance (live PG + MySQL)` — read by the publish lane before
534534
any approval. **Main-red:** a full-battery red is its lane's first work — triage files it under
535535
the main-red convention, the lane's next PR fixes it, and ⛔ no lane PR arms the queue meanwhile.
536536

@@ -1100,8 +1100,8 @@ Both non-handshake shapes, and how to classify and probe your own:
11001100
(`pnpm check:adr-0087-registration` reads the arm and the kind there). ⛔ The categories are NOT copied here —
11011101
the gate prints the full set when it fails.
11021102
4. **A removal that breaks the pinned sibling checkout ships together with the sibling fix and the pin bump — or it
1103-
does not ship.** The full battery's `Console Pin Gate` builds objectui at the pinned `.objectui-sha` against
1104-
**current** `main`, so such a removal is a main-red the moment it merges; its ruling therefore authorizes the
1103+
does not ship.** `Type Check UI` compiles the Console under `ui/` against the spec of the PR that makes such a
1104+
removal, so the removal reds its own PR; its ruling therefore authorizes the
11051105
objectui-side fix and the pin bump (manifest regeneration included — see the Frontend section) in the same
11061106
landing. Before merging, `git grep` what you remove or rename in `../objectui` at the pinned SHA.
11071107
5. **Touched `packages/spec`? Regenerate and commit its artifacts before pushing** — § *Touched `packages/spec`*

‎docs/releases-maintenance.md‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,11 @@ path. The 2026-08-20 ruling removed it (#10134): the workflow, the script and th
270270
*everything shipped is covered by the changeset record* — is delivered by step 3
271271
above, at bump time, which is where the decision is actually taken.
272272

273-
**What still checks the pin, and what it checks.** `ci.yml`'s **Console Pin Gate**
274-
(#4290) clones objectui at the pin and builds the SPA, so it proves the pinned SHA
275-
still **builds**. It has never had an opinion about whether the pin is current, and
276-
that is now the only question anyone asks about the pin automatically.
273+
**What used to check the pin.** `ci.yml`'s **Console Pin Gate** (#4290) cloned
274+
objectui at the pin and built the SPA, so it proved the pinned SHA still
275+
**built**; it never had an opinion about whether the pin was current. It retired
276+
with the objectui import (#25697): `Type Check UI` and `Build & E2E UI` in
277+
`ci.yml` build the Console from `ui/` in the pull request that changes it.
277278

278279
## Rehearsing the version pass (throwaway clone)
279280

@@ -472,7 +473,7 @@ is changed by where the refresh came from.
472473
**Then, before approving, check that no nearer `CI` run is still in flight** (#24889).
473474
Open the Release run's **`Full battery green at the version commit`** job, step *Read
474475
the full battery at or before the version commit*. It prints one line per workflow it
475-
reads (`CI`, `Lint & Type Check`, `Spec Shape Gate`), each naming the run it chose and
476+
reads (`CI`, `Lint & Type Check`), each naming the run it chose and
476477
how many first-parent commits before the version commit that run's head sits. The
477478
gate reads only *completed* runs and never waits (by design: `selectFullBatteryRun`
478479
in `scripts/ci/scheduled-full-run.mjs`), so a run still in progress is invisible to

‎scripts/check-release-section-coverage.mjs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@
7575
// whichever PR happens to run CI next". An uncovered minor is a fact about the
7676
// release history, not about whichever PR runs CI next. Same shape, same answer.
7777
//
78-
// Loud-but-non-blocking is `prerelease-pin-watch.yml`'s mechanism, reused here:
78+
// Loud-but-non-blocking was `prerelease-pin-watch.yml`'s mechanism (retired, #25697), reused here:
7979
// a `::warning::` annotation plus a step-summary table, job GREEN. `--strict`
8080
// promotes findings to exit 1 for a caller that OWNS the remedy (a standing
8181
// patrol, or someone editing the release pages) — the same escape hatch that
82-
// workflow's own `--strict` provides.
82+
// workflow's own `--strict` provided.
8383
//
8484
// ## What IS fatal: the instrument
8585
//
@@ -1184,7 +1184,7 @@ function renderOk(checked, minorCount) {
11841184
}
11851185

11861186
/**
1187-
* Loud-but-non-blocking, the `prerelease-pin-watch.yml` mechanism: a `::warning::`
1187+
* Loud-but-non-blocking, the retired `prerelease-pin-watch.yml` mechanism: a `::warning::`
11881188
* annotation plus a step-summary table, job GREEN. Silent outside Actions.
11891189
*
11901190
* @param {string[]} findings

‎scripts/check-required-contexts.mjs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,11 @@ const UNATTRIBUTED_BATTERY = '(no battery open)';
334334
* is right. Budgeting around it would only arm the trap for the next author
335335
* who legitimately names the live job.
336336
*
337+
* `Console Pin Gate` IS dead since #25697 deleted its job with the objectui pin
338+
* gates. It still takes no RETIRED_CONTEXT_NAMES row: it never sat in any
339+
* reading of the required set, and the instruction files no longer name it as
340+
* a live check (`docs/releases-maintenance.md` keeps it in the past tense).
341+
*
337342
* ⚠️ The cost of the drop, stated rather than discovered later: these two
338343
* `name:` literals are now pinned by NOTHING, while prose elsewhere still refers
339344
* to the jobs by name — `docs/releases-maintenance.md`,

‎scripts/check-self-test-workflow-commands.mjs‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@
3535
* safe by indenting it or by burying it in prose.
3636
*
3737
* **2. The `::...::` form is parsed only at LINE START.** Measured against the
38-
* same population: `scripts/check-prerelease-pin-watch.mjs --self-test` prints
39-
* two lines carrying `::error::` and `::warning::` mid-sentence on every PR,
40-
* and its check run carries zero annotations. Those two lines are inert where
41-
* they sit and one re-indentation away from not being; this gate reddens at the
42-
* moment they move, which is the moment they start lying.
38+
* same population: `scripts/check-prerelease-pin-watch.mjs --self-test` (since
39+
* retired, #25697) printed two lines carrying `::error::` and `::warning::`
40+
* mid-sentence on every PR, and its check run carried zero annotations. Such a
41+
* line is inert where it sits and one re-indentation away from not being; this
42+
* gate reddens at the moment one moves, which is the moment it starts lying.
4343
*
4444
* ⚠️ Neither fact is inferable from a local run — the transformation happens on
4545
* a runner and nowhere else. That is exactly why the property needs a gate

‎scripts/check-vendor-version-stamps.mjs‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,11 @@
6262
// written, true now, true after 1.9.0. Forcing them to the pin would
6363
// fabricate that many measurements. (Those figures are a dated reading, not
6464
// a live one: run `--census` for today's.)
65-
// - Some sites are not attestations at all. It is SELF-TEST FIXTURE DATA
66-
// inside `check-prerelease-pin-watch.mjs` — a synthetic npm registry payload
67-
// whose `1.7.1` is an arbitrary input proving the watcher notices a stable
68-
// release. A pin-equality sweep would corrupt a gate's own test input.
65+
// - Some sites are not attestations at all. One was SELF-TEST FIXTURE DATA
66+
// inside `check-prerelease-pin-watch.mjs` (since retired) — a synthetic
67+
// npm registry payload whose `1.7.1` was an arbitrary input proving the
68+
// watcher noticed a stable release. A pin-equality sweep would corrupt a
69+
// gate's own test input.
6970
//
7071
// So the rule is about PHRASING, not about version equality:
7172
//
@@ -376,8 +377,8 @@ export const ANCHOR_PATTERN = /\b20\d\d-\d\d-\d\d\b|#\d{3,6}\b/;
376377
* Gate self-tests build fake registry payloads and fake prose to drive their own
377378
* assertions; those numbers are arbitrary test data, and holding them to the
378379
* resolved pin would corrupt another gate's fixture. #13940 measured one such
379-
* site inside `check-prerelease-pin-watch.mjs` — its `1.7.1` proves the watcher
380-
* notices a stable release and means nothing about this tree.
380+
* site inside `check-prerelease-pin-watch.mjs` (since retired) — its `1.7.1`
381+
* proved the watcher noticed a stable release and meant nothing about this tree.
381382
*
382383
* It is an INLINE declaration rather than a central exemption list on purpose: a
383384
* central list rots away from the thing it describes, while this sits on the

0 commit comments

Comments
 (0)