Skip to content

Commit e448d3c

Browse files
ci(lint): shrink lint.yml by 122,702 bytes (510,016 → 387,314), comment lines only (#23064)
Fixes #23044 Clause-②: no ## What this does `.github/workflows/lint.yml` stood at **510,016 bytes** on `main` @ `df7a13792`. The card measured GitHub rejecting this file at 513,738 bytes (a workflow-file run with zero jobs, and neither required context reporting), so `main` had under 3.7 KB of margin. 87% of the file's bytes were YAML comment lines. This PR removes comment lines only and leaves every key and value untouched. | | before (`df7a13792`) | after (`fc9340b61`) | |---|---|---| | bytes | 510,016 | **387,314** (−122,702, −24.1%) | | lines (`wc -l`) | 8,082 | 6,358 | | lines whose first non-blank char is `#` | 6,266 | 4,542 | | bytes in those lines / share of the file | 445,409 / 87.3% | 322,707 / 83.3% | (19 of the `#`-led lines are shell comments inside `run: |` block scalars. This PR touches none of them.) Changed lines: **+136 / −1,860 = 1,996**, under the 3,000 human-merge line. - **60 per-step rationale blocks** became a pointer of one or two lines: `# Rationale: SCRIPT header (#cards).`, naming the script whose header already carries that rationale. - **29 verbatim duplicate copies** of a lane note (the same note pasted into each of the eight `Lint · *` lanes or the four `Type Check · *` lanes) became a pointer to the first copy. The first copy stays verbatim. - **5 step notes** from the removed blocks are kept on the pointer, one or two lines each: three ⛔ "self-test only" warnings (prior-ruling reader, release-index currency rewriter, stall-guard headroom), the export-origins ordering note, and the skills-liveness "unfiltered" note that `scripts/pm/bare-root-worklist.mjs` cites as "stated in the step comment". - **One file-level note added** (9 lines, after the GATE ORDER note). Many removed blocks repeated "it lives in this job because it has no paths filter". That argument is now stated once, at the top of the file. - **No new `docs/` file.** Every removed rationale already lives in a script header, so nothing had to move there. Item 1 of the card (a new `check:*` size gate) is not built: the dispatch scoped this PR to item 2, because the seat's instrument rule requires the maintainer's words on the card for a new gate and the card quotes none. ## How the blocks were chosen (measured) Every YAML comment block was found with the `yaml` 2.9.1 `Lexer`, so a `#` line inside a block scalar is never treated as a comment. Each block was then resolved to the step it precedes, and the step to the scripts its `run:` invokes, through the root and package `package.json` scripts. A block qualified only when both of these hold: 1. the invoked script has a header (its leading comment) of at least 40 lines, and 2. **every card number the block cites (`#NNNN`) is also cited by that script file.** 119 blocks qualified. The 60 largest were taken, minus two kept on purpose. The `typecheck-debt` `NODE_OPTIONS` block stays because it argues the step's own `env:` coupling. The docs image-tag rewriter block (`#9064`) stays because `scripts/sync-template-versions.mjs` quotes it. Every pointer line also carries every card number its removed block cited, so a search of `lint.yml` for a card still lands on its step. In 58 of the 60 the cards are cited in the script's **header**. In the other two (`check-closing-target-claim.mjs`, `build-export-origins.ts`) they are cited in the script body. The ⛔/⚠️ sentences of each removed block were compared with the script text (3-gram overlap). Where a step-wiring warning was not stated in the script in the same words, it was kept on the pointer. The full prior text of every removed block remains at `df7a13792:.github/workflows/lint.yml`. ## Proof of no behaviour change - **YAML data identical.** Base and head were each loaded as data by two parsers, and both compare equal: - `yaml` 2.9.1 (`parse`, strict, `uniqueKeys`): deep-equal, sha256 of the JSON `2b8d629828681750` on both sides. - PyYAML 6.0.1 (`safe_load`): equal, `e04c40c7a827bfbb` on both sides. - **Only comment lines changed.** `git diff -U0 df7a137 fc9340b` has 0 changed lines that are not `#`-led. - **Names byte-identical.** 14 jobs and 344 steps, with every job name unchanged. That covers the required contexts `Lint & Repo Gates` and `TypeScript Type Check`, and all eight `Lint · *` lanes. ## Readers of `lint.yml` comments (dispatch assumption 4) **Searched:** every file under `scripts/`, `packages/` and `.claude/hooks/` with a code-level (non-comment) string literal naming `lint.yml`, `.github/workflows` or `workflows`. That is 89 files. They include the candidates the dispatch named: - `check-comment-mask-corpus` and `docs-audit/check-drift-comment`: these read JS/TS and the docs-drift workflow, not `lint.yml` comments. - `check-aggregator-roster`, `check-step-collectors`, `check-self-test-wired`, `check-self-test-workflow-commands` and `dispatch-gates`: these read step structure and `run:` text. The scripts that literally read `lint.yml` text were found as well: the wiring self-tests that `includes()` the raw text, the `check-changeset-no-major` job slicer, and `check-type-check-coverage`'s raw `typecheck:root` / `turbo run typecheck` regexes. **Measured:** a copy of `lint.yml` with **all** 6,247 YAML comment lines removed (66,120 bytes, parsed data still identical) was swapped in. 76 reader commands were run against it: 40 of the 43 dispatch-derived commands, the dispatch's `check-ci-filter-parity` and `check:doc-authoring`, and 34 commands for the other literal readers. The three derived commands left out were `check:pm-dispatch-gates` and `check:type-check-debt` (both heavy, run on the final head below) and `check-comment-mask-corpus` (it reads JS/TS only). The swap was restored by `git checkout HEAD --` and the restore was proved by blob hash. - All 76 exited 0, as they did on base. - 72 of 76 printed byte-identical output once timings were normalised. - The other four changed only prose counts or line numbers, never a verdict: - `check-whole-set-label-write`: mentions in comments, cleared, 12 → 9. - `check:agent-test-spelling`: separators judged 11 → 10. - `check:pnpm-filter-targets`: "more in comments" 62 → 54. - `check:pnpm-acquisition`: line numbers. So no reader pins a `lint.yml` comment, and nothing had to be kept for a reader. ## Pointer map Line numbers are base (`df7a13792`) lines. The table also carries each pointer's card count. | removed (base lines) | job | step | where its rationale lives | cards the block cited | |---|---|---|---|---| | 568-571 | lint-repo-tooling | Checkout repository | verbatim copy of the note at base line 424, which stays | none cited | | 687-704 | lint-repo-tooling | Raw control-byte guard | `scripts/check-nul-bytes.mjs` header, 267 lines | 7/7 cited there (7/7 in the header) | | 708-726 | lint-repo-tooling | Staged gitlinks are declared in .gitmodules | `scripts/check-gitlink-declared.mjs` header, 89 lines | 2/2 cited there (2/2 in the header) | | 940-960 | lint-repo-tooling | Keyed text-family columns declare their bound (#12147) | `scripts/check-keyed-text-bounds.mjs` header, 204 lines | 4/4 cited there (4/4 in the header) | | 966-994 | lint-repo-tooling | shell scripts hold the bash 3.2 floor | `scripts/check-bash32-floor.mjs` header, 206 lines | 1/1 cited there (1/1 in the header) | | 1214-1237 | lint-repo-tooling | Closing-target claim guard self-test | `scripts/check-closing-target-claim.mjs` header, 266 lines | 1/1 cited there (0/1 in the header) | | 1318-1353 | lint-repo-tooling | Prior-ruling reader self-test | `scripts/pm/check-prior-rulings.mjs` header, 203 lines | 1/1 cited there (1/1 in the header); one step note kept | | 1425-1447 | lint-repo-tooling | Label-write helper self-test | `scripts/pm/label-write.mjs` header, 183 lines | 1/1 cited there (1/1 in the header) | | 1451-1470 | lint-repo-tooling | Card-closure helper self-test | `scripts/pm/close-cards.mjs` header, 255 lines | 1/1 cited there (1/1 in the header) | | 1540-1557 | lint-repo-tooling | Board-snapshot archiver self-test | `scripts/pm/board-snapshot.mjs` header, 309 lines | 1/1 cited there (1/1 in the header) | | 1683-1708 | lint-repo-tooling | Release-rehearsal clone preflight self-test | `scripts/pm/release-rehearsal-clone.mjs` header, 93 lines | 1/1 cited there (1/1 in the header) | | 1815-1845 | lint-repo-tooling | Step-collector gate (self-tests that mask each other) | `scripts/check-step-collectors.mjs` header, 197 lines | 1/1 cited there (1/1 in the header) | | 1851-1897 | lint-repo-tooling | Self-test wiring gate | `scripts/check-self-test-wired.mjs` header, 150 lines | 1/1 cited there (1/1 in the header) | | 2099-2128 | lint-repo-tooling | Docs frontmatter parses | `scripts/check-doc-frontmatter.mjs` header, 252 lines | 3/3 cited there (3/3 in the header) | | 2217-2259 | lint-repo-tooling | Platform-object tenancy census matches the tree | `scripts/check-platform-object-tenancy-census.mjs` header, 64 lines | 2/2 cited there (2/2 in the header) | | 2272-2276 | lint-repo-tooling | Report how many gates never ran | verbatim copy of the note at base line 523, which stays | none cited | | 2281-2286 | lint-repo-tooling | Report how many gates never ran | verbatim copy of the note at base line 532, which stays | none cited | | 2316-2319 | lint-docs-code | Checkout repository | verbatim copy of the note at base line 424, which stays | none cited | | 2346-2368 | lint-docs-code | One `h1` per docs page | `scripts/check-docs-single-h1.mjs` header, 144 lines | 4/4 cited there (4/4 in the header) | | 2372-2408 | lint-docs-code | Docs redirect destinations resolve, and no chains | `scripts/check-docs-redirects.mjs` header, 101 lines | 2/2 cited there (2/2 in the header) | | 2475-2500 | lint-docs-code | React pages honour the useAdapter() query and result contracts | `scripts/check-react-page-adapter-contract.mjs` header, 175 lines | 2/2 cited there (2/2 in the header) | | 2515-2554 | lint-docs-code | Docs form-section examples carry a `name` | `scripts/check-docs-section-name.mjs` header, 207 lines | 4/4 cited there (4/4 in the header) | | 2560-2588 | lint-docs-code | Published-README links are followable off the docs site | `scripts/check-published-readme-links.mjs` header, 237 lines | 1/1 cited there (1/1 in the header) | | 2728-2768 | lint-docs-code | Release-index currency version-time rewriter self-test | `scripts/sync-release-index-currency.mjs` header, 118 lines | 3/3 cited there (3/3 in the header); one step note kept | | 2795-2816 | lint-docs-code | Teaching-corpus lexical anti-drift ratchet | `scripts/check-corpus-claim-drift.mjs` header, 125 lines | 4/4 cited there (4/4 in the header) | | 2820-2848 | lint-docs-code | Published-skills identifier liveness gate (two legs) | `scripts/check-skill-identifier-liveness.mjs` header, 208 lines | 1/1 cited there (1/1 in the header); one step note kept | | 2917-2947 | lint-docs-code | Runtime-services indexes enumerate the chapter's real pages | `scripts/check-runtime-services-index.mjs` header, 240 lines | 5/5 cited there (5/5 in the header) | | 3324-3341 | lint-docs-code | Auth mount-vs-ledger guard | `scripts/check-auth-mount-ledger.mjs` header, 116 lines | 3/3 cited there (3/3 in the header) | | 3481-3497 | lint-docs-code | Logger receiver-detach guard | `scripts/check-logger-receiver-detach.mjs` header, 141 lines | 3/3 cited there (3/3 in the header) | | 3536-3554 | lint-docs-code | objectui pin write-ordering guard | `scripts/bump-objectui.selftest.sh` header, 50 lines | 1/1 cited there (1/1 in the header) | | 3607-3611 | lint-docs-code | Report how many gates never ran | verbatim copy of the note at base line 523, which stays | none cited | | 3616-3621 | lint-docs-code | Report how many gates never ran | verbatim copy of the note at base line 532, which stays | none cited | | 3674-3677 | lint-ci-engine | Checkout repository | verbatim copy of the note at base line 424, which stays | none cited | | 3797-3817 | lint-ci-engine | Post-publish npm verification self-test | `scripts/release-verify-npm.mjs` header, 160 lines | 1/1 cited there (1/1 in the header) | | 3874-3891 | lint-ci-engine | Workflow status-function guard | `scripts/check-workflow-status-functions.mjs` header, 72 lines | 4/4 cited there (4/4 in the header) | | 3915-3949 | lint-ci-engine | No whole-set label PUT anywhere in the repo (#10778) + its self-test | `scripts/check-whole-set-label-write.mjs` header, 135 lines | 2/2 cited there (2/2 in the header) | | 3955-4000 | lint-ci-engine | Cross-repo closer outcome contract | `scripts/check-cross-repo-closer-outcome.mjs` header, 117 lines | 3/3 cited there (3/3 in the header) | | 4006-4026 | lint-ci-engine | Closing-keyword parser parity | `scripts/check-closing-keyword-parity.mjs` header, 133 lines | 1/1 cited there (1/1 in the header) | | 4076-4106 | lint-ci-engine | Merged-branch reaper classifier contract | `scripts/check-merged-branch-reaper-outcome.mjs` header, 99 lines | 1/1 cited there (1/1 in the header) | | 4146-4169 | lint-ci-engine | Hourly full run self-test and concurrency gate | `scripts/ci/scheduled-full-run.mjs` header, 45 lines | 1/1 cited there (1/1 in the header) | | 4190-4213 | lint-ci-engine | Aggregator roster gate | `scripts/check-aggregator-roster.mjs` header, 82 lines | 3/3 cited there (3/3 in the header) | | 4219-4246 | lint-ci-engine | Required-context name pin | `scripts/check-required-contexts.mjs` header, 182 lines | 5/5 cited there (5/5 in the header) | | 4250-4267 | lint-ci-engine | Cross-package test inputs | `scripts/check-cross-package-test-inputs.mjs` header, 371 lines | 1/1 cited there (1/1 in the header) | | 4334-4354 | lint-ci-engine | Live-server database isolation | `scripts/check-live-db-isolation.mjs` header, 58 lines | 2/2 cited there (2/2 in the header) | | 4379-4407 | lint-ci-engine | CI filter parity (cross-package Layer C) | `scripts/check-ci-filter-parity.mjs` header, 238 lines | 4/4 cited there (4/4 in the header) | | 4466-4483 | lint-ci-engine | Hand-written declaration mirrors | `scripts/check-declaration-mirrors.mjs` header, 107 lines | 3/3 cited there (3/3 in the header) | | 4545-4562 | lint-ci-engine | Test-source alias gate | `scripts/check-test-source-alias.mjs` header, 346 lines | 2/2 cited there (2/2 in the header) | | 4566-4589 | lint-ci-engine | Ref'd-timer probe containment | `scripts/check-refd-timer-probe.mjs` header, 98 lines | 1/1 cited there (1/1 in the header) | | 4609-4631 | lint-ci-engine | Manifest repository.directory guard | `scripts/check-manifest-repository-directory.mjs` header, 171 lines | 1/1 cited there (1/1 in the header) | | 4762-4791 | lint-ci-engine | driver-memory census gate | `scripts/check-driver-memory-census.mjs` header, 107 lines | 7/7 cited there (7/7 in the header) | | 4840-4874 | lint-ci-engine | Read-side tenant chokepoint gate | `scripts/check-tenant-chokepoint.mjs` header, 108 lines | 6/6 cited there (6/6 in the header) | | 4878-4905 | lint-ci-engine | Every committed pnpm --filter names a real package | `scripts/pnpm-filter-targets.mjs` header, 83 lines | 2/2 cited there (2/2 in the header) | | 4909-4947 | lint-ci-engine | No committed command forwards args to vitest through a bare -- | `scripts/check-agent-test-spelling.mjs` header, 174 lines | 2/2 cited there (2/2 in the header) | | 4988-5017 | lint-ci-engine | workspace manifest dependency graph has no cycle | `scripts/check-workspace-manifest-cycles.mjs` header, 84 lines | 2/2 cited there (2/2 in the header) | | 5139-5156 | lint-ci-engine | Duration-shaped spec keys carry their unit in the key name | `packages/spec/scripts/check-duration-unit-keys.ts` header, 271 lines | 1/1 cited there (1/1 in the header) | | 5167-5171 | lint-ci-engine | Report how many gates never ran | verbatim copy of the note at base line 523, which stays | none cited | | 5176-5181 | lint-ci-engine | Report how many gates never ran | verbatim copy of the note at base line 532, which stays | none cited | | 5212-5215 | lint-scoped-erasure | Checkout repository | verbatim copy of the note at base line 424, which stays | none cited | | 5364-5368 | lint-scoped-erasure | Report how many gates never ran | verbatim copy of the note at base line 523, which stays | none cited | | 5373-5378 | lint-scoped-erasure | Report how many gates never ran | verbatim copy of the note at base line 532, which stays | none cited | | 5407-5410 | lint-scoped-slot-corpus | Checkout repository | verbatim copy of the note at base line 424, which stays | none cited | | 5545-5549 | lint-scoped-slot-corpus | Report how many gates never ran | verbatim copy of the note at base line 523, which stays | none cited | | 5554-5559 | lint-scoped-slot-corpus | Report how many gates never ran | verbatim copy of the note at base line 532, which stays | none cited | | 5588-5591 | lint-scoped-tooling | Checkout repository | verbatim copy of the note at base line 424, which stays | none cited | | 5767-5771 | lint-scoped-tooling | Report how many gates never ran | verbatim copy of the note at base line 523, which stays | none cited | | 5776-5781 | lint-scoped-tooling | Report how many gates never ran | verbatim copy of the note at base line 532, which stays | none cited | | 5813-5816 | lint-pm-dispatch-gates | Checkout repository | verbatim copy of the note at base line 424, which stays | none cited | | 5947-5951 | lint-pm-dispatch-gates | Report how many gates never ran | verbatim copy of the note at base line 523, which stays | none cited | | 5956-5961 | lint-pm-dispatch-gates | Report how many gates never ran | verbatim copy of the note at base line 532, which stays | none cited | | 6153-6172 | typecheck-source-gates | Check object-definition parameters declare the keys they are read for | `scripts/check-object-def-param-keys.mjs` header, 134 lines | 3/3 cited there (3/3 in the header) | | 6195-6216 | typecheck-source-gates | Stall-guard budget invariant | `scripts/check-stall-guard-budget.mjs` header, 195 lines | 1/1 cited there (1/1 in the header) | | 6240-6276 | typecheck-source-gates | Stall-guard headroom self-test (self-test half only, never the measurement) | `scripts/measure-stall-guard-headroom.mjs` header, 147 lines | 2/2 cited there (2/2 in the header); one step note kept | | 6475-6493 | typecheck-source-gates | Check the export-origins baseline resolves as recorded | `packages/spec/scripts/build-export-origins.ts` header, 78 lines | 2/2 cited there (1/2 in the header); one step note kept | | 6557-6577 | typecheck-source-gates | Check the decision frame is in sync across its four copies | `scripts/check-skill-frame-sync.mjs` header, 84 lines | 3/3 cited there (3/3 in the header) | | 6617-6634 | typecheck-source-gates | Check SKILL.md compatibility declarations match the workspace majors | `scripts/check-skill-compatibility-version.mjs` header, 83 lines | 3/3 cited there (3/3 in the header) | | 6656-6679 | typecheck-source-gates | Check every agent definition declares a model | `scripts/check-agent-model-declared.mjs` header, 82 lines | 2/2 cited there (2/2 in the header) | | 6721-6738 | typecheck-source-gates | Ratchet-remedy authority convention (#8435) across the gate farm | `scripts/check-ratchet-remedy-authority.mjs` header, 172 lines | 5/5 cited there (5/5 in the header) | | 6742-6761 | typecheck-source-gates | Published skills token ratchet (#10473) + its self-test | `scripts/check-skills-token-ratchet.mjs` header, 162 lines | 2/2 cited there (2/2 in the header) | | 6784-6808 | typecheck-source-gates | Check spec pin citations still name the pin this repo builds against | `packages/spec/scripts/check-objectui-pin-citations.ts` header, 196 lines | 6/6 cited there (6/6 in the header) | | 6858-6871 | typecheck-workspace | Checkout repository | verbatim copy of the note at base line 6032, which stays | 3/3 kept on the pointer | | 6895-6936 | typecheck-workspace | Restore Turbo cache | verbatim copy of the note at base line 6069, which stays | 1/1 kept on the pointer | | 7155-7168 | typecheck-debt | Checkout repository | verbatim copy of the note at base line 6032, which stays | 3/3 kept on the pointer | | 7192-7233 | typecheck-debt | Restore Turbo cache | verbatim copy of the note at base line 6069, which stays | 1/1 kept on the pointer | | 7410-7423 | typecheck-consumers | Checkout repository | verbatim copy of the note at base line 6032, which stays | 3/3 kept on the pointer | | 7447-7488 | typecheck-consumers | Restore Turbo cache | verbatim copy of the note at base line 6069, which stays | 1/1 kept on the pointer | | 7503-7519 | typecheck-consumers | Build workspace packages | verbatim copy of the note at base line 7248, which stays | 3/3 kept on the pointer | | 7554-7563 | typecheck-consumers | Sweep the built closure for vanished declarations | verbatim copy of the note at base line 7341, which stays | 3/3 kept on the pointer | | 7762-7782 | typecheck-consumers | Check docs formula examples are valid CEL | `packages/lint/scripts/check-doc-formula-expressions.mjs` header, 148 lines | 2/2 cited there (2/2 in the header) | | 7786-7804 | typecheck-consumers | Check docs object examples pass the os validate security posture | `packages/lint/scripts/check-doc-security-posture.mjs` header, 123 lines | 3/3 cited there (3/3 in the header) | ## Gates, run on `fc9340b61` (`git rev-parse --short HEAD` of the run) **80 commands, 80 exit 0.** Each exit code was captured before any pipe. - **The derived set.** `node scripts/pm/dispatch-gates.mjs --commands` was re-derived on this diff, with no paths given: 43 commands, the same 43 as the dispatch's lint.yml derivation. `--ran` reconciles them: `✓ dispatch-gates --ran: 43 derived famil(ies) accounted for — 43 run, 0 NOT-MEASURED`. - **The three dispatch extras.** The dispatch derivation also named `docs/ci/lint-gates.md`; this PR adds no such file. Its three extra commands ran anyway, all green: `check-ci-filter-parity`, `check:doc-authoring`, and `check:doc-formula-expressions`. The last one was run after building `@objectstack/formula` and `@objectstack/lint` under the verify lock (on base it exits 3 PREREQUISITE NOT MET without that build). - **The 34 extra readers.** The commands for the other literal `lint.yml` readers, listed below. - **The two heavy gates.** `check:pm-dispatch-gates` ran detached: `✓ dispatch-gates self-test (fast tier): 1833 cases pass`. `check:type-check-debt` ran under the verify lock: `VERDICT command-exit 0`, `1 ledger entr(ies) re-measured in 661.7s, 26 raw tsc error(s) total, none above its recorded number`. - **NOT MEASURED, by the derivation's own report.** 6 workflow-valued families take a value only a CI run carries (`check-required-contexts.mjs --verify-required-set` and the `check-shard-attestation --emit/--verify` legs). They are CI's. ```text node scripts/check-aggregator-roster.mjs :: exit 0 node scripts/check-aggregator-roster.mjs --self-test :: exit 0 node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-comment-mask-corpus.mjs :: exit 0 node scripts/check-merged-branch-reaper-outcome.mjs :: exit 0 node scripts/check-merged-branch-reaper-outcome.mjs --self-test :: exit 0 node scripts/check-position-name-fold-loaders.mjs :: exit 0 node scripts/check-position-name-fold-loaders.mjs --self-test :: exit 0 node scripts/check-self-test-wired.mjs :: exit 0 node scripts/check-self-test-wired.mjs --self-test :: exit 0 node scripts/check-self-test-workflow-commands.mjs :: exit 0 node scripts/check-self-test-workflow-commands.mjs --self-test :: exit 0 node scripts/check-step-collectors.mjs :: exit 0 node scripts/check-step-collectors.mjs --self-test :: exit 0 node scripts/check-whole-set-label-write.mjs :: exit 0 node scripts/check-whole-set-label-write.mjs --self-test :: exit 0 node scripts/ci/scheduled-full-run.mjs --self-test :: exit 0 node scripts/docs-audit/check-drift-comment.mjs :: exit 0 node scripts/pm/ci-failure.mjs --self-test :: exit 0 pnpm check:agent-test-spelling :: exit 0 pnpm check:cross-package-test-inputs :: exit 0 pnpm check:declared-population-live :: exit 0 pnpm check:driver-memory-census :: exit 0 pnpm check:gitlink-declared :: exit 0 pnpm check:node-version :: exit 0 pnpm check:nul-bytes :: exit 0 pnpm check:pm-expected-skips :: exit 0 pnpm check:pm-post-stamped :: exit 0 pnpm check:pnpm-acquisition :: exit 0 pnpm check:pnpm-filter-targets :: exit 0 pnpm check:refd-timer-probe :: exit 0 pnpm check:required-contexts :: exit 0 pnpm check:select-gate-families :: exit 0 pnpm check:shard-attestation :: exit 0 pnpm check:stall-guard-budget :: exit 0 pnpm check:stall-guard-headroom :: exit 0 pnpm check:type-check-coverage :: exit 0 pnpm check:watch-hint-literal :: exit 0 pnpm check:workflow-status-functions :: exit 0 pnpm check:workflow-step-name-quoting :: exit 0 node scripts/check-ci-filter-parity.mjs :: exit 0 pnpm check:doc-authoring :: exit 0 node scripts/check-adr-symbol-anchors.mjs --self-test :: exit 0 node scripts/check-adr-symbol-anchors.mjs :: exit 0 node scripts/check-cross-repo-closer-outcome.mjs --self-test :: exit 0 node scripts/check-cross-repo-closer-outcome.mjs :: exit 0 node scripts/check-doc-frontmatter.mjs --self-test :: exit 0 node scripts/check-doc-frontmatter.mjs :: exit 0 node scripts/check-docs-nav-label.mjs --self-test :: exit 0 node scripts/check-docs-nav-label.mjs :: exit 0 node scripts/check-merge-queue-triage-outcome.mjs --self-test :: exit 0 node scripts/check-merge-queue-triage-outcome.mjs :: exit 0 node scripts/check-platform-checklist-watchdog.mjs --self-test :: exit 0 node scripts/check-platform-checklist-watchdog.mjs :: exit 0 node scripts/check-scripts-symbol-anchors.mjs --self-test :: exit 0 node scripts/check-scripts-symbol-anchors.mjs :: exit 0 node scripts/check-spec-docblock-symbol-anchors.mjs --self-test :: exit 0 node scripts/check-spec-docblock-symbol-anchors.mjs :: exit 0 node scripts/check-system-context-census.mjs --self-test :: exit 0 node scripts/check-system-context-census.mjs :: exit 0 node scripts/check-test-suite-ceilings.mjs --self-test :: exit 0 node scripts/pm/bare-root-worklist.mjs --self-test :: exit 0 node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0 node scripts/report-unmeasured-gate-tail.mjs --self-test :: exit 0 pnpm check:changeset-gate-self-tests :: exit 0 pnpm check:cli-test-child-env :: exit 0 pnpm check:closing-target-claim :: exit 0 pnpm check:filter-alias-parity :: exit 0 pnpm check:partof-closing-keyword :: exit 0 pnpm check:pm-half-states :: exit 0 pnpm check:published-files :: exit 0 pnpm check:quick-reference-counts :: exit 0 pnpm check:runner-env-posture :: exit 0 pnpm check:sdui-lockstep :: exit 0 pnpm check:single-claim-paths :: exit 0 pnpm check:stack-collection-maps :: exit 0 pnpm check:pm-dispatch-gates :: exit 0 pnpm check:type-check-debt :: exit 0 pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 ``` ## Acceptance notes None of these are filed: none is a reproducible defect, a contract violation or an authoring trap. - **Stale lane wording in kept comments.** Some kept comments still say "this job carries the whole `check:*` gate family". That has not been true since the eight-lane split (#22991). They were left alone because they are outside the blocks this PR measured. - **"Same reason as the step above."** Kept notes that say this now reach that reason through the step's pointer, one hop further. - **Prose references to removed step comments.** Two script headers still mention a lint.yml step comment: - `scripts/check-nul-bytes.mjs` names "the `.github/workflows/lint.yml` step comment" as one prose statement of its byte set. That comment is now a pointer to that very header, which the header's own "cite this header, do not restate it" footing allows. - `scripts/check-whole-set-label-write.mjs` records a historical measured verdict that counted "this gate's own wiring comment in lint.yml". Nothing reads either sentence. Who carries them: whoever next edits those headers; no one is assigned. - **No mechanical size guard.** Item 1 was not built, so nothing stops the margin from shrinking again. It is now about 122 KB under the last size measured valid (510,016). The ceiling itself is still unmeasured, and this PR did not probe it. - **The other workflows are far from the ceiling.** `ci.yml` is 175,786 bytes and `release.yml` is 128,877. - **Dispatch assumption 1 re-measured on `df7a13792`: it holds.** 510,016 bytes, 8,083 lines counting the unterminated last one (`wc -l` 8,082), and 445,409 bytes in `#`-led lines. The card body's "`main` is 505,924 bytes at `9f4b652e`" is an older reading. ## 维护者速读(草稿) ### 改了什么 把 `.github/workflows/lint.yml` 里的 1,860 行注释换成了 136 行指针。删掉的主要是每个检查步骤前面大段"为什么要有这个检查"的说明。这些理由在对应检查脚本的文件头里本来就有,指针直接指过去。同一段说明被逐字复制进多个并行 lane 的,只保留第一份。文件从 510,016 字节降到 387,314 字节,少了约 24%。 ### 为什么改 GitHub 对单个 workflow 文件有大小上限。卡片实测:文件到 513,738 字节时,GitHub 判它无效,一个 job 都不跑,两个必需检查(`Lint & Repo Gates`、`TypeScript Type Check`)都不上报。必需检查不上报,PR 和合并队列就会卡住。改之前,main 离这条线不到 4 KB,下一个往 lint.yml 里加检查的 PR 就可能踩线。现在,离最后一次实测有效的大小还有约 122 KB 余量。 ### 风险与代价(含回滚) - **执行内容一点没改。** 两个独立的 YAML 解析器都证明:改前改后解析出来的数据完全一致,job 名和必需检查名一个字节都没变。 - **代价。** 读 workflow 的人要多跳一步,去脚本文件头看理由。被删的原文仍在 git 历史里(`df7a13792`)。 - **回滚。** revert 这个 PR 即可,不涉及任何数据或配置迁移。 - **卡片第 1 项没有做。** 那一项是新增一个文件大小门禁,而新增门禁需要维护者的原话。 ### 席位意见 (留空) ### 你要做的 - **审阅并合并。** 本 PR 改的是 `.github/workflows/**`。这个路径可能随 #23048 纳入受管面,届时须按受管面规则由人合并。本 PR 约 2,000 行改动,低于 3,000 行的人合线。 - **要不要大小门禁,由你定。** 如果希望用机械门禁防止文件再次逼近上限,在 #23044 上留一句话点名即可,席位会单独立卡。 --- _Generated by [Claude Code](https://claude.ai/code/session_012zwsLMxQBwHUYJgPyrpEvx)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 1e44436 commit e448d3c

1 file changed

Lines changed: 136 additions & 1860 deletions

File tree

0 commit comments

Comments
 (0)