Skip to content

Commit 1dfef05

Browse files
committed
wip(ci): re-point dispatch-gates live job-filter cases at Build Core; prose tense for retired jobs
Claude-Session: https://claude.ai/code/session_01H835wAyqCCeF7jiYq7XSxi Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 349da48 commit 1dfef05

2 files changed

Lines changed: 27 additions & 19 deletions

File tree

‎scripts/pm/dispatch-gates.mjs‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,9 +1264,9 @@ export function jobIfReading(ifExpression) {
12641264
*
12651265
* `name` is read from the job's own `name:` key at its child indent and falls
12661266
* back to the job id. It is load-bearing rather than cosmetic: the id
1267-
* `console-pin` is not what CI, branch protection or a red check calls that
1268-
* job, and a lead a dev cannot find in the Checks tab is a lead they will not
1269-
* act on.
1267+
* `console-pin` was not what CI, branch protection or a red check called that
1268+
* job (`Console Pin Gate`, retired with the objectui pin), and a lead a dev
1269+
* cannot find in the Checks tab is a lead they will not act on.
12701270
*/
12711271
export function extractJobBlocks(workflowText) {
12721272
const lines = workflowText.split('\n');
@@ -2083,8 +2083,9 @@ export function defaultedArgv(args, defaults = new Map()) {
20832083
* `DIRECT_CHECK_INVOCATION` stops the tail before `>`, which is right — the
20842084
* redirection is the shell's. But `2>&1` puts its fd on the argv side of that
20852085
* boundary, so `--verbose 2>&1` captured as ` --verbose 2` and the stray `2`
2086-
* read as an argument. It is the live spelling in `prerelease-pin-watch.yml`,
2087-
* and it is why an argv that was complete all along scored unrenderable.
2086+
* read as an argument. It was the live spelling in `prerelease-pin-watch.yml`
2087+
* (retired with the objectui pin gates), and it is why an argv that was
2088+
* complete all along scored unrenderable.
20882089
*
20892090
* The discriminator is the shell's own: digits touching the operator are a
20902091
* descriptor (`2>`), digits with a space before it are an argument
@@ -7698,7 +7699,7 @@ export function coveringTrigger(entry, inputPath) {
76987699
* what it refuses to follow.
76997700
*
77007701
* The JOB NAME travels with the answer because that is what a dev sees go red.
7701-
* `console-pin` is the id; `Console Pin Gate` is the required check, and the
7702+
* `console-pin` was the id and `Console Pin Gate` the check name, and the
77027703
* measured failure this closes (#12956) was a dev reading a derived list that
77037704
* named neither.
77047705
*/

‎scripts/pm/dispatch-gates.self-test.mjs‎

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,10 +1003,12 @@ export function selfTest({ tier = 'full' } = {}) {
10031003
'scripts/check-adr-0087-registration.mjs', 'scripts/check-changeset-no-major.mjs']
10041004
.every((script) => valueBearing.some((i) => i.script === script)),
10051005
);
1006+
// The card named three; the third, `scripts/check-prerelease-pin-watch.mjs
1007+
// --verbose`, left the tree with prerelease-pin-watch.yml (objectstack#25697),
1008+
// and the `keyWf` fixture above still carries its shape.
10061009
t(
1007-
'⭐ …and the three the card called value-bearing that are really LITERAL render as runnable commands instead',
1008-
['scripts/check-engine-split-ratio.mjs --days 90', 'scripts/check-required-contexts.mjs --verify-required-set',
1009-
'scripts/check-prerelease-pin-watch.mjs --verbose']
1010+
'⭐ …and the two the card called value-bearing that are really LITERAL render as runnable commands instead',
1011+
['scripts/check-engine-split-ratio.mjs --days 90', 'scripts/check-required-contexts.mjs --verify-required-set']
10101012
.every((key) => direct.some((i) => i.check === key && i.argvVariables.length === 0)),
10111013
);
10121014
t(
@@ -5754,20 +5756,25 @@ export function selfTest({ tier = 'full' } = {}) {
57545756
//
57555757
// Pinned rather than left to the fixture, because the whole finding was that
57565758
// the FIXTURE-shaped question ("can it follow an indirection?") had a
5757-
// different answer from the LIVE one. If the console job is renamed or its
5758-
// filter re-spelled, re-point these cases — do not delete them: they are the
5759-
// measured statement that a pin bump derives its own gates.
5759+
// different answer from the LIVE one. If the job is renamed or its filter
5760+
// re-spelled, re-point these cases — do not delete them: they are the
5761+
// measured statement that a root file a job filter names derives that job's
5762+
// own gates. The card's job, `console-pin` (Console Pin Gate) with the pin
5763+
// file `.objectui-sha`, retired with the objectui pin (objectstack#25697);
5764+
// they are re-pointed at Build Core, whose `core` filter names root files
5765+
// outside every package the same way and whose steps run four dist guards.
57605766
const liveCiPops = jobPathPopulations(readFileSync(nodePath.join(ROOT, '.github/workflows/ci.yml'), 'utf8'), 'ci.yml');
5761-
const livePinJob = liveCiPops.find((p) => p.checks.includes('check:console-sha'));
5762-
t('the live console job is found by the gate it runs', Boolean(livePinJob));
5763-
t('and it is named Console Pin Gate — the name branch protection and the Checks tab use', livePinJob?.name === 'Console Pin Gate');
5767+
const BUILD_CORE_GUARDS = ['check:dts-closure', 'check:dual-build-cjs-loads', 'check:sourcemap-no-sources-content', 'check:lean-entry-closure'];
5768+
const liveFilteredJob = liveCiPops.find((p) => p.checks.includes('check:lean-entry-closure'));
5769+
t('the live Build Core job is found by the gate it runs', Boolean(liveFilteredJob));
5770+
t('and it is named Build Core — the name branch protection and the Checks tab use', liveFilteredJob?.name === 'Build Core');
57645771
t(
5765-
'its derived population covers the pin file, which is the whole acceptance criterion',
5766-
Boolean(livePinJob && triggerListCovers(livePinJob.paths, '.objectui-sha')),
5772+
'its derived population covers a root file outside every package (tsconfig.json), which is the whole acceptance criterion',
5773+
Boolean(liveFilteredJob && triggerListCovers(liveFilteredJob.paths, 'tsconfig.json')),
57675774
);
57685775
t(
5769-
'both console gates are reached, not just the one the card named',
5770-
Boolean(livePinJob?.checks.includes('check:console-sha') && livePinJob?.checks.includes('check:console-injection')),
5776+
'all four of its dist guards are reached, not just the one it was found by',
5777+
Boolean(liveFilteredJob && BUILD_CORE_GUARDS.every((c) => liveFilteredJob.checks.includes(c))),
57715778
);
57725779
// The NEGATIVE control, and it is the half that keeps the widening honest: a
57735780
// path in none of the four filters must derive nothing extra. AGENTS.md is a

0 commit comments

Comments
 (0)