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
{{ message }}
Repository navigation
Commit 55f65aa
Browse filesBrowse the repository at this point in the historyBrowse files
ci(lint): rename the ESLint required context to Lint & Repo Gates (#9325)
The `lint` job in lint.yml publishes one check run whose name is its `name:`,
and that name was `ESLint` while the job ran ~70 sequential `pnpm check:*`
steps. Any one of them failing published a red check called `ESLint` on a PR
whose diff may have nothing to do with linting, so the reader had to open the
log and scroll to the failing step before they could even decide whose problem
it was. That cost was paid three times on 2026-08-17 (#9258, PRs #9256/#9291),
and the compounding harm is that a check whose name does not describe what it
verifies trains readers to re-run on red -- which is how a real regression in
this gate family gets waved through (#5617 is that failure, from the other
direction).
Renames the job to `Lint & Repo Gates` and moves the pinned literal in the
`check-required-contexts.mjs` registry (#6865) in the same diff, so the two
repo-side halves cannot drift. The self-test's rename ablation now anchors on
the new name and mutates it back to `ESLint`, which makes it the regression
test for this very change: reverting lint.yml without the registry is red.
⚠️ This is only the repo-side half. A GitHub required status check is matched
by check-run name, so the entry in Settings -> Rulesets must be swapped from
`ESLint` to `Lint & Repo Gates` by a maintainer immediately after this merges.
Merging without that swap leaves every open PR and the merge queue wedged on a
permanently-pending `ESLint` that can never report again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYgmGheCzM6NrHZN436Cxf
renamedEslint.problems.some((p)=>p.includes("job 'lint'")&&p.includes('"ESLint (fast)"')&&p.includes("'ESLint'")&&p.includes('The name IS the contract')),
546
-
"renaming lint.yml's ESLint job ⇒ red, naming the job, the new name and the required context",
563
+
renamedGateJob.problems.some(
564
+
(p)=>p.includes("job 'lint'")&&p.includes('"ESLint"')&&p.includes("'Lint & Repo Gates'")&&p.includes('The name IS the contract'),
565
+
),
566
+
"renaming lint.yml's gate-family job ⇒ red, naming the job, the new name and the required context",
547
567
);
548
-
assert(renamedEslint.problems.length===1,`renaming ESLint produces exactly the one finding — got ${JSON.stringify(renamedEslint.problems)}`);
568
+
assert(renamedGateJob.problems.length===1,`renaming the gate-family job produces exactly the one finding — got ${JSON.stringify(renamedGateJob.problems)}`);
549
569
550
570
// The second-batch half: a name the maintainer approved on 2026-08-09, which
551
571
// had no assertion of any kind before this script.
@@ -609,7 +629,7 @@ async function selfTest() {
609
629
// ── (6) the merge_group trigger ──────────────────────────────────────────
610
630
constnoQueue=fixture('drop merge_group from lint.yml','lint.yml',(s)=>s.replace('\n merge_group:\n','\n'));
611
631
assert(
612
-
noQueue.problems.some((p)=>p.includes('merge_group')&&p.includes('ESLint')&&p.includes('TypeScript Type Check')),
632
+
noQueue.problems.some((p)=>p.includes('merge_group')&&p.includes('Lint & Repo Gates')&&p.includes('TypeScript Type Check')),
613
633
'a required-context workflow without merge_group ⇒ red, naming every context it would strand',
assert(/check-required-contexts\.mjs--self-test/.test(wiring),'wiring: `check:required-contexts` must run this file\'s --self-test first');
795
815
assert(/check-required-contexts\.mjs(?!--self-test)/.test(wiring),'wiring: `check:required-contexts` must also run the real pin, not only the self-test');
796
816
// The pin lives in a job it also pins. That is deliberate and worth stating:
797
-
// renaming the ESLint job turns this gate red under the NEW name, while the
798
-
// old required context stops reporting — the PR is blocked from both sides.
817
+
// renaming the gate-family job turns this gate red under the NEW name, while
818
+
// the old required context stops reporting — the PR is blocked from both
819
+
// sides. That is also why the #9325 rename could not be self-serve: the
820
+
// repo-side half is checkable here, the Settings half is not reachable at all.
0 commit comments