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
ci(lint)/pm: the PM dispatch-gates self-test (7.6–13.1 min, one step) is Lint & Repo Gates' critical path on PR and merge_group runs; its family read-set selects it on most PRs — tier the battery or narrow the read-set #22076
Filing gate: ③ a maintainer-directed task — the maintainer, after this seat's CI assessment in this session, verbatim: 「CI 优化按照你的建议创建任务」 — carrying ① a measured defect with a named fix site: the PM dispatch-gates self-test step takes 7.6–13.1 minutes whenever it runs and alone makes Lint & Repo Gates the critical path of Lint & Type Check on pull_request and merge_group runs; its gate-family read-set is the tool's own inputs (every workflow file, every check:* script through the root and package package.jsons, all of scripts/** and packages/*/scripts/**, .claude/**, skills/**, AGENTS.md, CLAUDE.md), so most PRs select it. Filed by domain:skills seat 2 (seat post #19287, session_0181E4ZeZmWyknawnauxD2CE). ⛔ Not a claim. The tooling entry rule (triage-duties.md:34) is met by the maintainer's instruction quoted here; the guarded surface is the required context Lint & Repo Gates.
Reader: triage first-touch → the battery is PM tooling (domain:skills); its CI wiring (scripts/ci/select-gate-families.sh, lint.yml) is domain:devx. The seat proposes domain:skills with the wiring touched minimally; triage routes.
Dedupe: page-looped REST listings, closed included (union 1,266 as on the sibling cards) grepped for dispatch-gates.*(self-test|lint|critical)|pm-dispatch-gates → 11 hits. The nearest: #16496 (closed: Lint & Repo Gates is the merge-group critical path after #16453; run each gate family only on the paths it reads — the origin of select-gate-families.sh), #16769 (closed: pins for the families' key sets), #18201 (closed: pnpm check:pm-dispatch-gates cannot complete inside the container's 10-minute cap), #21719 (closed: the battery holds the shared verify lock about 20 minutes), #8162 (the original unconditional rationale cited at lint.yml:985). None tiers the battery or re-measures what its read-set costs the PR path; W3 on #22060 (on hold) is the long-horizon split of the frozen file, not this card.
What is measured
Lint & Type Checkpull_request run 37567293525 (branch claude/issue-22044-…): wall 26.4 min; Lint & Repo Gates 26.4 min is the critical path; its longest step is PM dispatch-gates self-test 10.9 min, then the engine query-options erasure ratchet 2.1 and ESLint 1.3.
All four hourly scheduled Lint runs sampled ran it (the scheduled run keeps the whole battery by design, select-gate-families.sh:27-28).
pull_request run 37572678684 (branch claude/issue-22047-…) skipped it: Lint wall 17.5 min, and Type Check · workspace (17.4 min) became the critical path. So without this step the Lint wall is about 17 minutes.
Locally the battery took 842.7 s and 1,023.8 s in the two os-dev reports of this shift (1,976 cases), under the shared verify lock.
The read-set (scripts/ci/select-gate-families.sh:54-74): the tool discovers every workflow file, resolves every check:* script through the root and package package.jsons, reads each gate's source for watch hints (ALL of scripts/** and every packages/*/scripts/**), and reads .claude/**, skills/**, AGENTS.md, CLAUDE.md. A PR that touches any package manifest or any script selects the 8–13-minute step; the tree-wide content censuses the battery also performs are already declared "deliberately off the PR path" in that comment, yet they run whenever the family is selected, because the battery has one tier.
Constraint: the self-test lives inside scripts/pm/dispatch-gates.mjs, which is frozen under ruling 208 (R6); the wrapper is scripts/pm/check-dispatch-gates.mjs.
Done when
A timing breakdown of the 1,976 cases by group (one run, exit codes recorded) names which groups carry the minutes.
The battery has two tiers: a fast tier — the pins that read the PR's own changed inputs — runs on pull_request and merge_group when the family is selected; a slow tier — the tree-wide censuses (compound-anchor census, exposed-scratch-dir sweep, tracked-name reachability) — runs on push to main and the scheduled full run only, where a red files a card as the hourly full run already does (ci: push runs on main use the affected set; an hourly scheduled run keeps the full list and files a card on red (maintainer-directed) #16467). Implemented in the wrapper and the family selector if the frozen file needs no edit; if it needs one flag, the PR names that flag and quotes the maintainer's unfreeze for exactly it.
Pin: on a PR touching only packages/*/src/**, Lint & Repo Gates runs no PM self-test and its wall is under 18 minutes; the merge_group run's critical path after the change is measured in the PR body with run ids.
⛔ No verdict changes: every case still runs at least daily; ⛔ Lint & Repo Gates stays a required context; ⛔ no edit to dispatch-gates.mjs beyond the one flag, if any, and only with the quoted unfreeze.
Filing gate: ③ a maintainer-directed task — the maintainer, after this seat's CI assessment in this session, verbatim: 「CI 优化按照你的建议创建任务」 — carrying ① a measured defect with a named fix site: the
PM dispatch-gates self-teststep takes 7.6–13.1 minutes whenever it runs and alone makesLint & Repo Gatesthe critical path ofLint & Type Checkonpull_requestandmerge_groupruns; its gate-family read-set is the tool's own inputs (every workflow file, everycheck:*script through the root and packagepackage.jsons, all ofscripts/**andpackages/*/scripts/**,.claude/**,skills/**,AGENTS.md,CLAUDE.md), so most PRs select it. Filed bydomain:skillsseat 2 (seat post #19287,session_0181E4ZeZmWyknawnauxD2CE). ⛔ Not a claim. Thetoolingentry rule (triage-duties.md:34) is met by the maintainer's instruction quoted here; the guarded surface is the required contextLint & Repo Gates.Reader: triage first-touch → the battery is PM tooling (
domain:skills); its CI wiring (scripts/ci/select-gate-families.sh,lint.yml) isdomain:devx. The seat proposesdomain:skillswith the wiring touched minimally; triage routes.Dedupe: page-looped REST listings, closed included (union 1,266 as on the sibling cards) grepped for
dispatch-gates.*(self-test|lint|critical)|pm-dispatch-gates→ 11 hits. The nearest: #16496 (closed: Lint & Repo Gates is the merge-group critical path after #16453; run each gate family only on the paths it reads — the origin ofselect-gate-families.sh), #16769 (closed: pins for the families' key sets), #18201 (closed:pnpm check:pm-dispatch-gatescannot complete inside the container's 10-minute cap), #21719 (closed: the battery holds the shared verify lock about 20 minutes), #8162 (the original unconditional rationale cited atlint.yml:985). None tiers the battery or re-measures what its read-set costs the PR path; W3 on #22060 (on hold) is the long-horizon split of the frozen file, not this card.What is measured
Lint & Type Checkpull_requestrun 37567293525 (branchclaude/issue-22044-…): wall 26.4 min;Lint & Repo Gates26.4 min is the critical path; its longest step isPM dispatch-gates self-test10.9 min, then the engine query-options erasure ratchet 2.1 and ESLint 1.3.merge_grouprun 37570577129 (queue entry for perf(spec): a bundle that never reads the ADR-0087 conversion table stops keeping it, 226 KB gzip off the console first screen (#22044) #22048): wall 25.3 min;Lint & Repo Gates25.3 min; the self-test 10.2 min.select-gate-families.sh:27-28).pull_requestrun 37572678684 (branchclaude/issue-22047-…) skipped it: Lint wall 17.5 min, andType Check · workspace(17.4 min) became the critical path. So without this step the Lint wall is about 17 minutes.scripts/ci/select-gate-families.sh:54-74): the tool discovers every workflow file, resolves everycheck:*script through the root and packagepackage.jsons, reads each gate's source for watch hints (ALL ofscripts/**and everypackages/*/scripts/**), and reads.claude/**,skills/**,AGENTS.md,CLAUDE.md. A PR that touches any package manifest or any script selects the 8–13-minute step; the tree-wide content censuses the battery also performs are already declared "deliberately off the PR path" in that comment, yet they run whenever the family is selected, because the battery has one tier.scripts/pm/dispatch-gates.mjs, which is frozen under ruling 208 (R6); the wrapper isscripts/pm/check-dispatch-gates.mjs.Done when
pull_requestandmerge_groupwhen the family is selected; a slow tier — the tree-wide censuses (compound-anchor census, exposed-scratch-dir sweep, tracked-name reachability) — runs onpushtomainand the scheduled full run only, where a red files a card as the hourly full run already does (ci: push runs on main use the affected set; an hourly scheduled run keeps the full list and files a card on red (maintainer-directed) #16467). Implemented in the wrapper and the family selector if the frozen file needs no edit; if it needs one flag, the PR names that flag and quotes the maintainer's unfreeze for exactly it.select-gate-families.sh --self-testpins ([finding] nothing pinsselect-gate-families's key sets to the gates' LIVE read-sets — the dispatch-gates self-test grew a.shcontent census the day the selector shipped, and the selector has no*.sharm #16769) are updated with it.packages/*/src/**,Lint & Repo Gatesruns no PM self-test and its wall is under 18 minutes; the merge_group run's critical path after the change is measured in the PR body with run ids.Lint & Repo Gatesstays a required context; ⛔ no edit todispatch-gates.mjsbeyond the one flag, if any, and only with the quoted unfreeze.Generated by Claude Code