Repository navigation
Commit e20c60d
ci(lint): raise the full-history checkout budget from 20 to 25 minutes (#31329)
<!-- claude-projects-attribution: {"github_login":"os-project-manager"}
-->
_Requested by **Leehom** · [project
thread](https://claude.ai/code/project/chan_01TenzsRopZj4jMbvjX8uz1X?thread=cmsg_01TenzsRopZj4jMbvjX8uz1X3gvtau3kCm13KgYaNh4GAp)_
domain:devx#3 · os-project-manager · session_01FEkQ5p2YmYq6pWdeNjsmB1
Refs #22034 (step 1 of the ruling; step 2, narrowing the fetch, stays on
the card)
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:`.github/workflows/lint.yml` 里 12 个全历史 checkout 步骤中的 11 个,步骤超时从
20 分钟提到 25 分钟;对应 job 的 `timeout-minutes` 各加 5 分钟(墙 = checkout 预算 + body
预算,body 预算一个都没动),并改写 `typecheck-source-gates`
里论证这个数字的注释。`typecheck-workspace` 保持 20(见下)。
- 为什么改:#22034 裁决第 1 步(triage 6715813320,你 2026-11-08T01:48Z「同意」)。#29980
的事故回放:单次 checkout 在 20 分钟失败 1.51%,25 分钟失败 0.42%;健康期最慢 checkout 435
秒,不付代价。
- 风险与回滚:只改超时数字和注释,不改 `run:`、fetch 深度、job 图;最坏情况是平台变慢时一条 lane 多等 5
分钟才红。所有 lane 的墙仍 ≤ 55 分钟上限。回滚即还原本 PR。
- 先看:`typecheck-source-gates` 的 CHECKOUT BUDGET 注释(约 4843–4854
行);`typecheck-workspace` 的墙注释与 checkout 注释(约 5520–5537
行);`lint-pm-dispatch-gates` 的墙(约 4673–4679 行,现在正好贴着 55 上限)。
- 两分钟验证:`git diff origin/main -- .github/workflows/lint.yml | grep
'^[-+] *timeout-minutes'`,预期 11 行 `20 → 25` 的步骤超时,加 11 个 job 墙各
+5;`typecheck-workspace` 不在其中。
- 需要你做的:受管面 Tier H(`.github/workflows/**`):由你合并或入队,或授权账号 APPROVED
后由席位落地;另外请定一下 `typecheck-workspace` 是否维持 20(推荐维持,理由见 Acceptance notes)。
## What changes
`.github/workflows/lint.yml` only. Every changed line is a
`timeout-minutes` value or the comment that sizes it; no `run:`,
`fetch-depth`, `needs:` or `if:` changes.
Per job, the arithmetic (JOB WALL = CHECKOUT BUDGET + BODY BUDGET; every
body budget is unchanged):
| job | checkout step | job wall | arithmetic |
|:--|--:|--:|:--|
| `lint-eslint` | 20 → 25 | 30 → 35 | 25 + 10 = 35 |
| `lint-repo-tooling` | 20 → 25 | 30 → 35 | 25 + 10 = 35 |
| `lint-docs-code` | 20 → 25 | 30 → 35 | 25 + 10 = 35 |
| `lint-ci-engine` | 20 → 25 | 30 → 35 | 25 + 10 = 35 |
| `lint-scoped-erasure` | 20 → 25 | 30 → 35 | 25 + 10 = 35 |
| `lint-scoped-slot-corpus` | 20 → 25 | 30 → 35 | 25 + 10 = 35 |
| `lint-scoped-tooling` | 20 → 25 | 30 → 35 | 25 + 10 = 35 |
| `lint-pm-dispatch-gates` | 20 → 25 | 50 → 55 | 25 + 30 = 55, at the
cap |
| `typecheck-source-gates` | 20 → 25 | 30 → 35 | 25 + 10 = 35 |
| `typecheck-workspace` | 20 (held) | 55 (held) | 20 + 35 = 55, at the
cap |
| `typecheck-debt` | 20 → 25 | 35 → 40 | 25 + 15 = 40 |
| `typecheck-consumers` | 20 → 25 | 45 → 50 | 25 + 25 = 50 |
The table was read back from a YAML parse of the file on head and on
base `cba7d8ae` (job `timeout-minutes` minus the `Checkout repository`
step's `timeout-minutes`): every body budget is the same number before
and after.
Comments:
- `typecheck-source-gates`, which argues the scheme for the whole file:
the scheme line reads 25; the CHECKOUT BUDGET paragraph now gives the
#29980 replay (1.51% at 20 minutes, 0.42% at 25, a bound plus retry
inside the same total gains nothing, healthy max 435 s over 3,576
checkouts after the incident) and names `typecheck-workspace` as the one
exception; the "what the aggregate reads" bullets read 25 and 35.
- Each JOB WALL comment reads `CHECKOUT BUDGET (25)` and its new sum.
- `typecheck-workspace`: its wall comment and its checkout-step comment
say this lane alone stays at 20, and why.
## Tests
None owed: workflow configuration and comments only. No test pins these
numbers, and os-dev.md does not ablate a workflow change.
## Acceptance notes
- **`typecheck-workspace` is held at 20 (needs the maintainer's word).**
The order reads "every checkout step that carries that budget", and "if
a job's `timeout-minutes` is that sum, raise it by the same 5 minutes".
For this lane that is 25 + 35 = 60, which breaks the cap the `lint` job
argues for every job in the file ("55 stays the CAP every job in this
file sits under": the queue removes an entry whose required check has
not reported in 60 minutes, and a job's clock starts only after a runner
picks it up). The measurement the ruling cites was taken for 11 lanes,
not 12: #29980's dev report 6674602390, option B, reads "raise the
single-attempt CHECKOUT BUDGET from 20 to 25 on the 11 lint.yml lanes
whose wall has room (every lane but typecheck-workspace, which is held
at 20 by the 55 cap: 20 + 35)". This PR ships that reading. The
alternatives are in the report's `open_questions`: shrink this lane's
body budget 35 → 30 (needs a fresh body window, which the file's rule
asks for before any value moves), or lift its wall to 60 (breaks the
cap).
- **`lint-pm-dispatch-gates` now sits at the 55 cap** (25 + 30). Its
body budget is unchanged.
- **The governed-surface guard keeps 20.**
`.github/workflows/governed-surface-guard.yml` carries the same budget
on its queue-leg checkout (`timeout-minutes: 20` under "CHECKOUT BUDGET:
lint.yml's `typecheck-source-gates` sizes it", wall 20 + 10 = 30). The
order keeps every other workflow file untouched, so it stays at 20.
After this PR that step comment points at a paragraph that now argues 25
for lint.yml and names only `typecheck-workspace` as the exception; the
guard's number is not wrong, but its pointer reads looser than it did.
Noted for #22034 step 2, which touches the guard's fetch anyway; not
edited here.
- **Readers of these numbers.** `git grep` on `origin/main` `cba7d8ae`
for `CHECKOUT BUDGET` outside lint.yml hits only
`governed-surface-guard.yml`. The scripts that read `timeout-minutes`
(`check-stall-guard-budget.mjs`, `measure-stall-guard-headroom.mjs`,
`check-shard-attestation.mjs`,
`check-workflow-context-availability.mjs`) read stall-guarded steps,
shard jobs or expression contexts; none reads a lint.yml checkout budget
or job wall, and all of them ran green below. No pin moves.
- **Root `ci.yml` and `ui/.github/**` are untouched** (out of bounds for
this lane). The Test Core and Test UI full-history checkouts there carry
no step budget; they are #22034 step 2.
## Verification
Gate union derived by `node scripts/pm/dispatch-gates.mjs --commands
--repo objectstack-ai/objectstack` (42 families for this diff), run on
head `6f977132`, each exit code captured before any pipe:
- **42 run, exit 0 each.** `--ran` with the codes recorded: "42 derived
famil(ies) accounted for — 42 run, 0 NOT-MEASURED (a DERIVED zero — all
42 recorded an exit code and none of them is 3)".
- One family needed a second run: `node
scripts/check-self-test-workflow-commands.mjs` first exited 1 with
"REFUSED — scripts/check-adr-0087-registration.mjs --self-test could not
be run: spawnSync node ETIMEDOUT", while `check:pm-dispatch-gates` (519
s) and `check:type-check-debt` (641 s under the verify lock) loaded the
box. Rerun alone on the same head: exit 0, 251 self-tests scanned. A
load timeout, not a reading of this diff.
- `pnpm check:type-check-debt` under `scripts/pm/os-verify-lock.sh`:
"VERDICT command-exit 0 · held the lock 641s".
- `pnpm check:pm-dispatch-gates`: exit 0, "2174 cases pass" (fast tier).
- Outside the derivation: `node scripts/check-issue-citations.mjs` exit
0 ("no issue citations added against cba7d8a"); `node
scripts/pm/check-governed-merges.mjs --branch
claude/project-thread-5jkily` exit 3 (GOVERNED, expected):
```text
governed-surface predicate: 1 of 1 path(s) hit the register (13 surfaces govern objectstack).
⛔ GOVERNED — a human merge is the review record for this PR (#9495 regime).
⚖️ landing tier: H(人合) — the maintainer's hand, or an authorized APPROVED review (GOVERNED_APPROVERS) and then the owning seat lands it.
.github/workflows/** ×1 — CI, deploy and release workflows: what runs on every push, what deploys, what gates the queue
- .github/workflows/lint.yml
1 parent f88ca70 commit e20c60d
1 file changed
Lines changed: 65 additions & 55 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
511 | 511 | | |
512 | 512 | | |
513 | 513 | | |
514 | | - | |
| 514 | + | |
515 | 515 | | |
516 | 516 | | |
517 | | - | |
518 | | - | |
| 517 | + | |
| 518 | + | |
519 | 519 | | |
520 | 520 | | |
521 | 521 | | |
| |||
524 | 524 | | |
525 | 525 | | |
526 | 526 | | |
527 | | - | |
| 527 | + | |
528 | 528 | | |
529 | 529 | | |
530 | 530 | | |
| |||
595 | 595 | | |
596 | 596 | | |
597 | 597 | | |
598 | | - | |
| 598 | + | |
599 | 599 | | |
600 | 600 | | |
601 | | - | |
602 | | - | |
| 601 | + | |
| 602 | + | |
603 | 603 | | |
604 | 604 | | |
605 | 605 | | |
| |||
608 | 608 | | |
609 | 609 | | |
610 | 610 | | |
611 | | - | |
| 611 | + | |
612 | 612 | | |
613 | 613 | | |
614 | 614 | | |
| |||
1987 | 1987 | | |
1988 | 1988 | | |
1989 | 1989 | | |
1990 | | - | |
| 1990 | + | |
1991 | 1991 | | |
1992 | 1992 | | |
1993 | | - | |
1994 | | - | |
| 1993 | + | |
| 1994 | + | |
1995 | 1995 | | |
1996 | 1996 | | |
1997 | 1997 | | |
| |||
2000 | 2000 | | |
2001 | 2001 | | |
2002 | 2002 | | |
2003 | | - | |
| 2003 | + | |
2004 | 2004 | | |
2005 | 2005 | | |
2006 | 2006 | | |
| |||
3018 | 3018 | | |
3019 | 3019 | | |
3020 | 3020 | | |
3021 | | - | |
| 3021 | + | |
3022 | 3022 | | |
3023 | 3023 | | |
3024 | | - | |
3025 | | - | |
| 3024 | + | |
| 3025 | + | |
3026 | 3026 | | |
3027 | 3027 | | |
3028 | 3028 | | |
| |||
3052 | 3052 | | |
3053 | 3053 | | |
3054 | 3054 | | |
3055 | | - | |
| 3055 | + | |
3056 | 3056 | | |
3057 | 3057 | | |
3058 | 3058 | | |
| |||
4176 | 4176 | | |
4177 | 4177 | | |
4178 | 4178 | | |
4179 | | - | |
| 4179 | + | |
4180 | 4180 | | |
4181 | 4181 | | |
4182 | | - | |
4183 | | - | |
| 4182 | + | |
| 4183 | + | |
4184 | 4184 | | |
4185 | 4185 | | |
4186 | 4186 | | |
| |||
4189 | 4189 | | |
4190 | 4190 | | |
4191 | 4191 | | |
4192 | | - | |
| 4192 | + | |
4193 | 4193 | | |
4194 | 4194 | | |
4195 | 4195 | | |
| |||
4336 | 4336 | | |
4337 | 4337 | | |
4338 | 4338 | | |
4339 | | - | |
| 4339 | + | |
4340 | 4340 | | |
4341 | 4341 | | |
4342 | | - | |
4343 | | - | |
| 4342 | + | |
| 4343 | + | |
4344 | 4344 | | |
4345 | 4345 | | |
4346 | 4346 | | |
| |||
4349 | 4349 | | |
4350 | 4350 | | |
4351 | 4351 | | |
4352 | | - | |
| 4352 | + | |
4353 | 4353 | | |
4354 | 4354 | | |
4355 | 4355 | | |
| |||
4482 | 4482 | | |
4483 | 4483 | | |
4484 | 4484 | | |
4485 | | - | |
| 4485 | + | |
4486 | 4486 | | |
4487 | 4487 | | |
4488 | | - | |
4489 | | - | |
| 4488 | + | |
| 4489 | + | |
4490 | 4490 | | |
4491 | 4491 | | |
4492 | 4492 | | |
| |||
4495 | 4495 | | |
4496 | 4496 | | |
4497 | 4497 | | |
4498 | | - | |
| 4498 | + | |
4499 | 4499 | | |
4500 | 4500 | | |
4501 | 4501 | | |
| |||
4670 | 4670 | | |
4671 | 4671 | | |
4672 | 4672 | | |
4673 | | - | |
| 4673 | + | |
4674 | 4674 | | |
4675 | 4675 | | |
4676 | | - | |
4677 | | - | |
| 4676 | + | |
| 4677 | + | |
4678 | 4678 | | |
4679 | | - | |
| 4679 | + | |
4680 | 4680 | | |
4681 | 4681 | | |
4682 | 4682 | | |
| |||
4685 | 4685 | | |
4686 | 4686 | | |
4687 | 4687 | | |
4688 | | - | |
| 4688 | + | |
4689 | 4689 | | |
4690 | 4690 | | |
4691 | 4691 | | |
| |||
4823 | 4823 | | |
4824 | 4824 | | |
4825 | 4825 | | |
4826 | | - | |
| 4826 | + | |
4827 | 4827 | | |
4828 | 4828 | | |
4829 | 4829 | | |
| |||
4840 | 4840 | | |
4841 | 4841 | | |
4842 | 4842 | | |
4843 | | - | |
4844 | | - | |
4845 | | - | |
4846 | | - | |
| 4843 | + | |
| 4844 | + | |
| 4845 | + | |
| 4846 | + | |
| 4847 | + | |
| 4848 | + | |
| 4849 | + | |
| 4850 | + | |
| 4851 | + | |
| 4852 | + | |
| 4853 | + | |
| 4854 | + | |
4847 | 4855 | | |
4848 | 4856 | | |
4849 | 4857 | | |
4850 | | - | |
| 4858 | + | |
4851 | 4859 | | |
4852 | 4860 | | |
4853 | 4861 | | |
4854 | | - | |
| 4862 | + | |
4855 | 4863 | | |
4856 | | - | |
4857 | | - | |
| 4864 | + | |
| 4865 | + | |
4858 | 4866 | | |
4859 | 4867 | | |
4860 | 4868 | | |
4861 | 4869 | | |
4862 | | - | |
4863 | | - | |
| 4870 | + | |
| 4871 | + | |
4864 | 4872 | | |
4865 | 4873 | | |
4866 | 4874 | | |
4867 | 4875 | | |
4868 | 4876 | | |
4869 | 4877 | | |
4870 | 4878 | | |
4871 | | - | |
| 4879 | + | |
4872 | 4880 | | |
4873 | 4881 | | |
4874 | 4882 | | |
| |||
5521 | 5529 | | |
5522 | 5530 | | |
5523 | 5531 | | |
5524 | | - | |
| 5532 | + | |
| 5533 | + | |
5525 | 5534 | | |
5526 | 5535 | | |
5527 | 5536 | | |
| |||
5531 | 5540 | | |
5532 | 5541 | | |
5533 | 5542 | | |
5534 | | - | |
| 5543 | + | |
| 5544 | + | |
5535 | 5545 | | |
5536 | 5546 | | |
5537 | 5547 | | |
| |||
5777 | 5787 | | |
5778 | 5788 | | |
5779 | 5789 | | |
5780 | | - | |
| 5790 | + | |
5781 | 5791 | | |
5782 | 5792 | | |
5783 | | - | |
| 5793 | + | |
5784 | 5794 | | |
5785 | 5795 | | |
5786 | | - | |
| 5796 | + | |
5787 | 5797 | | |
5788 | 5798 | | |
5789 | 5799 | | |
5790 | 5800 | | |
5791 | 5801 | | |
5792 | 5802 | | |
5793 | 5803 | | |
5794 | | - | |
| 5804 | + | |
5795 | 5805 | | |
5796 | 5806 | | |
5797 | 5807 | | |
| |||
5981 | 5991 | | |
5982 | 5992 | | |
5983 | 5993 | | |
5984 | | - | |
| 5994 | + | |
5985 | 5995 | | |
5986 | 5996 | | |
5987 | | - | |
| 5997 | + | |
5988 | 5998 | | |
5989 | 5999 | | |
5990 | | - | |
| 6000 | + | |
5991 | 6001 | | |
5992 | 6002 | | |
5993 | 6003 | | |
5994 | 6004 | | |
5995 | 6005 | | |
5996 | 6006 | | |
5997 | 6007 | | |
5998 | | - | |
| 6008 | + | |
5999 | 6009 | | |
6000 | 6010 | | |
6001 | 6011 | | |
| |||
0 commit comments