Skip to content

finding(ci): fetch-depth 0 checkouts fetch ~1236 heads and ~7950 tags (main alone is 15–20× faster), and Test Core shards still turn a slow fetch into a cancelled required check — the cost #22020 budgets around #22034

Closed

Description

@objectstack-fleet

Filed by PM seat domain:devx#2 (session_01VF48aw8RPG6wzDnMgp6rtw) from PR #22033's dev report on #22020. The seat re-read the cited runs before filing. ⛔ Filed bare: grading and routing are triage's. ⛔ Not a claim.

Filing gate: ① a defect, class (a). A named producer, actions/checkout with fetch-depth: 0 in our workflows, turns a slow fetch into a red required check on PRs whatever their content.

Measured (PR #22033's dev, from the jobs API and controlled local fetches)

  • The cost is the ref set, not main's depth.
    • Main's full history alone fetched locally in 29 s and 32 s (397 MB).
    • The refspec fetch-depth: 0 uses (+refs/heads/* and +refs/tags/*; actions/checkout v7 getRefSpecForAllHistory; about 1236 heads and 7950 tags) took 473 s.
    • All heads without tags took 686 s.
  • On CI: the full-history checkout over the pooled jobs (n = 3459, 2026-10-05 to 2026-10-06) read p50 31 s, p90 119 s, p99 553 s and max 895 s, plus 19 wall-cut lower bounds. The control, the shallow checkouts in ci.yml over the same hours (n = 2743), read 15/18/63/107 s.
  • Test Core is still exposed after [finding] the Type Check · source gates lane is cancelled by its 10-minute wall when the full-history checkout takes 3–10 minutes (6 of 16 runs today over 3 min, two PRs cancelled): the required TypeScript Type Check goes red on PRs at random #22020. The ci.yml Test Core shards use the same full-history fetch under timeout-minutes: 45, and successful shard bodies reach 41.75 min (n = 1479). Run 37338337323 Test Core (2/6) was cancelled at the wall behind a 508 s checkout (job total 2721 s), and the required Test Core context went red with no test failing.
  • Queue latency: 186 of 1761 checkouts in the window took over 120 s, so merge-queue entries wait on the fetch even when they do not fail.

What #22020 did and did not do

PR #22033 (for #22020) splits the budget on five jobs in lint.yml and governed-surface-guard.yml: a 20-minute checkout step timeout plus a body budget. That removes the measured wall hits there by construction. It does not touch ci.yml, whose Test Core wall is read by check:stall-guard-budget, so editing it is not mechanical. It also leaves the ref-set cost in place.

Direction offered by the dev (for triage to weigh, not ruled)

  • A: leave it. The split absorbs the tail where it was applied.
  • B (the dev's recommendation): one measurement card. Switch one lane to a depth-1 checkout plus git fetch --no-tags --unshallow origin +refs/heads/main:refs/remotes/origin/main, and read its checkout distribution over about 100 CI runs before touching the others.
    • The merge-base anchor resolved in a local experiment, including on a PR head 7213 commits behind main.
    • The local unshallow measured 120/169 s against 29/32 s for a fresh main-only fetch, so the CI median could regress, and that is what the measurement settles.
  • C: switch every job now. That needs a per-gate audit across about 70 steps for reads of other branches or tags (the dev's census found none outside release and PM tooling), and an edit to the guard's self-test pin on fetch-depth: 0.

Whichever is taken, the Test Core shards need a decision: the same budget split (with check:stall-guard-budget's reading), or the fetch fix.

Reader

Triage, for routing: the precedent for CI wiring is domain:devx (#16465, #22020).

Dedupe

MCP search_issues, repo-scoped, sorted by update: 「full-history checkout fetch-depth 0 fetches all branches and tags slow, Test Core shard cancelled at timeout behind slow checkout」 → 10 hits, all closed:

None names the ref-set fetch cost or Test Core's checkout exposure. #22020 is the open parent of this shape, for lint.yml and the guard only.

Dedupe words: fetch-depth 0 refspec all heads tags · Test Core checkout wall cancelled · full-history clone slow ref set


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Claim: PM loop round 1
    Session: session_01FEkQ5njkh3xbcDN6EtSfw7
    Account: os-project-manager
    Branch: claude/project-thread-5jkily (a project card thread, session_01FEkQ5p2YmYq6pWdeNjsmB1; the thread can push only its harness branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-22034
    Domain: domain:devx
    Seat: domain:devx#3
    File surface: .github/workflows/lint.yml (checkout budgets 20 → 25 and their JOB WALL comments), plus any pin that reads them. Step 1 only, Refs #22034. ⛔ Root ci.yml, fetch depth, run: and job graph are untouched; step 2 waits on the maintainer.
    Container & model: S, mode:thread, model: default — read dispatch-gates --tier on the real diff (governed path may carry a mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — CI budget, no user door
    Thread-read: 6715813320
    Premise: holds on main cba7d8ae. lint.yml checkout steps carry timeout-minutes: 20 under "CHECKOUT BUDGET" comments.
    Ruling-ref: triage 6715813320, letter B then A, maintainer 「同意」 (2026-11-08T01:48Z); the 20 → 25 reading is devx#2's pointer 6674639434.

    Order: pm-orders/devx/order-22034.md (project files), handed to the card thread in its opening message.

  2. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 8, 2026
  3. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5p2YmYq6pWdeNjsmB1
    os-dev-report
    {
    "issue": 22034,
    "status": "needs_decision",
    "branch": "claude/project-thread-5jkily",
    "pr": "#31329",
    "head": "6f97713269d7d05091cc42952b613455301310ff",
    "session": "session_01FEkQ5p2YmYq6pWdeNjsmB1",
    "premise_still_valid": true,
    "summary": "Step 1 only (Refs #22034). In .github/workflows/lint.yml, 11 of the 12 full-history checkout steps go from timeout-minutes 20 to 25, and each of those 11 job walls rises by the same 5 minutes so the wall stays CHECKOUT BUDGET + BODY BUDGET (body budgets unchanged, verified by a YAML parse of base cba7d8a and head). typecheck-source-gates' sizing comment now argues 25 from the #29980 replay and names the exception. typecheck-workspace stays at 20: 25 + 35 = 60 would break the file's 55 cap, and the measurement the ruling cites (dev report 6674602390, option B) was taken for these same 11 lanes with workspace held at 20. That one lane is the open question below; the rest follows the ruling as written.",
    "files_changed": [
    ".github/workflows/lint.yml (+65 / -55)"
    ],
    "line_budget": "120 changed lines, under the 3000 human-merge threshold",
    "arithmetic": {
    "lint-eslint": "checkout 20->25, wall 30->35 (25 + 10)",
    "lint-repo-tooling": "checkout 20->25, wall 30->35 (25 + 10)",
    "lint-docs-code": "checkout 20->25, wall 30->35 (25 + 10)",
    "lint-ci-engine": "checkout 20->25, wall 30->35 (25 + 10)",
    "lint-scoped-erasure": "checkout 20->25, wall 30->35 (25 + 10)",
    "lint-scoped-slot-corpus": "checkout 20->25, wall 30->35 (25 + 10)",
    "lint-scoped-tooling": "checkout 20->25, wall 30->35 (25 + 10)",
    "lint-pm-dispatch-gates": "checkout 20->25, wall 50->55 (25 + 30, at the cap)",
    "typecheck-source-gates": "checkout 20->25, wall 30->35 (25 + 10)",
    "typecheck-workspace": "held: checkout 20, wall 55 (20 + 35, at the cap)",
    "typecheck-debt": "checkout 20->25, wall 35->40 (25 + 15)",
    "typecheck-consumers": "checkout 20->25, wall 45->50 (25 + 25)"
    },
    "pins_moved": "none. git grep on origin/main cba7d8a: CHECKOUT BUDGET outside lint.yml hits only governed-surface-guard.yml (out of bounds, kept at 20). Scripts reading timeout-minutes (check-stall-guard-budget, measure-stall-guard-headroom, check-shard-attestation, check-workflow-context-availability) read none of these budgets; all ran green.",
    "tests": "none owed: workflow numbers and comments only; no ablation (os-dev.md: workflows are not ablated). YAML parse of head: every lane's (job wall - checkout step) equals base's.",
    "gates": "head 6f97713: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 42 families; 42 run, exit 0 each; --ran with exit codes recorded: '42 derived famil(ies) accounted for — 42 run, 0 NOT-MEASURED (a DERIVED zero)'. node scripts/check-self-test-workflow-commands.mjs first exit 1 (spawnSync ETIMEDOUT on another script's self-test while check:pm-dispatch-gates and check:type-check-debt loaded the box), rerun alone on the same head exit 0. pnpm check:type-check-debt under os-verify-lock: VERDICT command-exit 0, held 641s. pnpm check:pm-dispatch-gates exit 0 (2174 cases, fast tier). Outside the derivation: check-issue-citations exit 0; check-governed-merges --branch exit 3 = GOVERNED, Tier H, .github/workflows/** x1, 120 lines; dispatch-gates --tier: no path-derived model mandate. pnpm lint: no package touched, nothing scoped. CI check-runs: in_progress at report time.",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "governed": "Tier H (.github/workflows/lint.yml): maintainer's merge or enqueue, or an authorized APPROVED review then the owning seat lands it.",
    "mcp_calls": "5 — reads only: issue_read x4 (#22034 get, #22034 get_comments x2, #29980 get_comments), pull_request_read x1 (#31329 get, read-back); no MCP write",
    "api_writes": "3 — git push of claude/project-thread-5jkily; relay pr_create (fleet-write run 42437688045, PR #31329, draft, labels [skip-changeset], body read back 9025 bytes identical, assignees none); POST /repos//issues/22034/comments (this report via post-stamped.mjs)",
    "deviations": [
    "typecheck-workspace's checkout budget and wall are not raised, against the order's literal 'every checkout step' and 'raise it by the same 5 minutes' (see open_questions).",
    "Commit trailer pair is model-free (Co-Authored-By: Claude), per os-dev.md over the harness reminder."
    ],
    "open_questions": [
    {
    "question": "typecheck-workspace: keep its checkout budget at 20, or move it to 25 too?",
    "status": "needs_decision",
    "options": [
    "A (shipped): keep 20, wall 55 (20 + 35). Matches the measured reading (6674602390 option B: 11 lanes, workspace held by the cap) and keeps the file's 55 cap. Cost: this one lane keeps the 1.51% incident-replay failure rate until step 2 narrows the fetch. Zero extra work.",
    "B: 25 + body 30 = 55. Keeps the cap, but cuts a measured body budget (max 17.9 min, 2x rule says 35) to 1.68x, and the file's rule asks for a fresh measurement window before any value moves. Cost: a body re-measure over recent runs, then a one-line edit.",
    "C: 25 + 35 = 60. Literal reading of the order. Breaks the 55 cap the lint job argues: a wall at 60 can cancel after the queue has already dropped the entry at its 60-minute response timeout, the silent ejection the cap exists to prevent. Cost: a one-line edit plus rewriting the cap argument."
    ],
    "recommendation": "A. Real need: the replay that justifies 25 was computed for the 11 lanes with room; no measurement covers workspace at 25. Long-term: step 2 (narrow fetch) is the fix for every lane, workspace included, so a temporary exception costs little. AI-error: A keeps one stated rule (the cap) true instead of a comment that argues 55 while a job sits at 60. Startup focus: smallest change, no new measurement or rule; B and C each widen the step."
    }
    ],
    "security_findings": "none",
    "out_of_scope_findings": [
    "carrier: #22034 · noted, not filed: governed-surface-guard.yml's queue-leg checkout keeps timeout-minutes 20 under the comment 'CHECKOUT BUDGET: lint.yml's typecheck-source-gates sizes it'; that paragraph now argues 25 and names only typecheck-workspace as the exception. Number not wrong, pointer looser; the order keeps other workflow files untouched. Step 2 edits the guard's fetch anyway."
    ]
    }

  4. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Maintainer ruling recorded · 2026-11-08T06:39Z · #22034

    Ruling-ref: the maintainer's 「以上都同意」 (2026-11-08T06:38Z, project thread message cmsg_01TenzsRopZj4jMbvjX8uz1XN1Vwc2QdcfhdqcbPa2zcGj), which accepts every recommendation in the evaluation post, §2 for this card.

    • 2a, step 2 is released to domain:devx. Dropping fetch-depth: 0 in the root ci.yml is in the devx lane's bounds for this card. The [PM seat] domain:devx · seat 2 — 🟢 os-support-ai · 由 os-support-ai 账户的项目负责 #20163 constraint "root ci.yml out of bounds" no longer binds here. Condition: two PRs.

      1. First PR: an inventory of every step that reads git history (other branches, tags, merge base, git log depth), plus the fetch change on the Test Core and Test UI shards only, the lanes that were cancelled at the wall. Once it lands, read about 100 runs to measure the checkout distribution.
      2. Second PR: the remaining jobs, after that reading.

      Both are .github/workflows/**, Tier H: the maintainer merges by hand.

    • 2b, PR ci(lint): raise the full-history checkout budget from 20 to 25 minutes #31329 keeps typecheck-workspace at checkout 20 (option A, maintain). No body change and no new measurement window. This matches the seat's reading in the PR's ACCEPT 6716132776.

    The seat dispatches step 2's first PR now. PR #31329 (step 1) still waits on the maintainer's merge.

  5. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Claim: PM loop round 2 (step 2, first PR)
    Session: session_01FEkQ5njkh3xbcDN6EtSfw7
    Account: os-project-manager
    Branch: claude/project-thread-a3vqo2 (a project card thread, session_01FEkQ5ocKVSrMoP2SVG2dfL; the thread can push only its harness branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-22034-step2a
    Domain: domain:devx
    Seat: domain:devx#3
    File surface: root .github/workflows/ci.yml, checkout of test-plan, test (Test Core) and test-ui (Test UI) only, plus any scripts/ci/** guard a history reader needs and pins that read them; PR body carries the inventory of every history-reading step. Refs #22034. ⛔ type-check-ui and every other job wait for PR 2. ⛔ ui/.github/** untouched. This claim supersedes the step 1 claim's branch for new work; PR #31329 (step 1) stays as is.
    Container & model: S, mode:thread, model: default — read dispatch-gates --tier on the real diff (governed path may carry a mandate), effort: default
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — CI checkout, no user door
    Thread-read: 6718334937
    Premise: holds on main 405a78eae. Root ci.yml checks out with fetch-depth: 0 in test-plan, test, type-check-ui and test-ui.
    Ruling-ref: the maintainer's 「以上都同意」 (2026-11-08T06:38Z), recorded as 6718334937: step 2 released to domain:devx, two PRs, Tier H.

    Order: pm-orders/devx/order-22034-step2a.md (project files), handed to the card thread in its opening message.

  6. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5ocKVSrMoP2SVG2dfL
    os-dev-report
    {
    "issue": 22034,
    "status": "done",
    "branch": "claude/project-thread-a3vqo2",
    "pr": "#31429",
    "head": "65cf47aba0710b8ee15eecf6186c14f9160baa63",
    "session": "session_01FEkQ5ocKVSrMoP2SVG2dfL",
    "premise_still_valid": true,
    "summary": "Step 2, first PR (Refs #22034). In the root ci.yml, test-plan, test (Test Core N/8) and test-ui (Test UI N/16) drop fetch-depth: 0 for a depth-1 checkout plus one byte-identical step, "Fetch this commit's history and the base branch": git fetch --no-tags --unshallow origin HEAD_SHA +refs/heads/main:refs/remotes/origin/main (plus the PR's base branch when it is not main), three attempts, then a red step. scripts/ci/select-shard-packages.sh now deepens a shallow checkout on pull_request/merge_group/push or exits 1 with ::error::, because on a shallow clone turbo ls --affected selected all 131 packages with exit 0 (measured). The PR body carries the 12-row inventory of every history reader across all 18 ci.yml jobs; type-check-ui and every other job are untouched (PR 2). The one pin that read the test-ui checkout's fetch-depth (ui/scripts/tests/select-affected-tests.test.ts) moved in the same PR.",
    "files_changed": [
    ".github/workflows/ci.yml (+106 / -11)",
    "scripts/ci/select-shard-packages.sh (+37 / -8)",
    "scripts/ci/select-shard-packages.selftest.sh (+67 / -5)",
    "ui/scripts/tests/select-affected-tests.test.ts (+16 / -2)"
    ],
    "line_budget": "252 changed lines (+226 / -26), under the 3000 human-merge threshold",
    "selection_equivalence": {
    "method": "Control: a clone that ran the exact fetch-depth 0 refspec (+refs/heads/* and +refs/tags/, 10300 refs). Candidate: a fresh depth-1 fetch of the same sha as actions/checkout makes it, then the new step extracted from ci.yml and run as written. Each runs the tree's own select-shard-packages.sh and plan-test-core-shards.mjs with the event variables.",
    "pr_31404_merge_71a88bc1b5_pull_request": "both: diff base 405a78e, 63 packages, turbo-ls.json md5 2e750807a6b6, digest 3c5802f687782a83..., shards 1-8",
    "pr_31404_merge_71a88bc1b5_merge_group": "both: identical to the pull_request row",
    "main_383c35303_push_before_405a78eae": "both: 122 packages, md5 aab238703101, digest d97c92ae4ce1f0a2..., shards 1-8",
    "pr_31329_merge_1a6f01112": "both events: 0 packages, digest f4a1345e45c332bb...; Test UI 691 of 6651 with diff base 604a2b3, equal to CI full-history Test UI (1/16) on run 42437703944",
    "test_ui_pr_31404": "select-affected-tests.mjs 691 of 6653 both, filter file md5 062425c4fc43 both",
    "this_pr_real_run": "CI run 42459521033 on head 65cf47a (merge 97af4b6, pull_request). Plan Test Core shards (job 128665687403): diff base 0647dab (merge-base of origin/main and HEAD), 'Plan: 3 of 8 Test Core shard(s) start, [1,2,3] (digest c10fc15cc091e4a8e3816febbdbebbf49603d72df8eb9b556bbe6ad8f8e90fba)'; the local full-history control on the same merge gives shards [1,2,3] and the same digest. Test UI (1/16) (job 128665861617): 'Diff base: 0647dab', 'selected 691 of 6653 tracked test files through 691 filter(s)', no ::warning:: fallback line fired; control 691 of 6653. Both equal. Step timings on this one run (no forecast; the ~100-run reading after merge is the measurement): Plan Test Core checkout 7 s + fetch step 49 s; Test UI (1/16) checkout 23 s + fetch step 29 s; Test Core (1/8) checkout 24 s + fetch step 38 s.",
    "shallow_without_fetch": "#31329 merge ref at depth 1, old script: merge_group → turbo 'unable to detect git range, assuming all files have changed', 131 packages, exit 0; pull_request → ::warning:: merge-base fallback, 131 packages."
    },
    "tests": "bash scripts/ci/select-shard-packages.selftest.sh: 'all 36 cases passed (193 checks)' (was 32/158; floor raised). Ablation on committed head 48580f1: node scripts/ablation-replace.mjs --file scripts/ci/select-shard-packages.sh --anchor 'pull_request | merge_group | push)' --replacement 'pull_request-ABLATED)' → mutation landed (anchor 1 → 0, blob 2ca1e28a → 76673ff3), selftest 'SELFTEST FAILED (36 cases, 193 checks)' with 24 FAIL lines; restored, blob == HEAD 2ca1e28a, git diff HEAD empty. ui: pnpm exec vitest run on select-affected-tests.test.ts, select-affected-tests-wiring.test.ts, test-file-timings.test.ts, check-lockfile-integrity.test.ts, check-changeset-presence.test.ts → 128 passed; before the pin moved select-affected-tests.test.ts failed exactly on the fetch-depth: 0 assertion.",
    "gates": "head 65cf47a: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 70 families; all 70 run, exit captured before any pipe; --ran: '70 derived famil(ies) accounted for — 69 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. 67 exit 0 (incl. check:select-shard-packages, check:stall-guard-budget, check:stall-guard-headroom, check:shard-attestation, check:ci-filter-parity, check-self-test-workflow-commands, check-step-collectors, plan-test-core-shards --self-test, check:pm-dispatch-gates '2205 cases pass' fast tier 381.6s, check:type-check-debt under os-verify-lock VERDICT command-exit 0). NOT MEASURED, prerequisite (no full build in the worktree; Build Core runs them): check:dual-build-cjs-loads exit 3, check:dts-closure exit 1 (every line 'missing packages/
    /dist/index.d.ts'). pnpm --dir ui exec vitest run scripts/ exit 1: 166 files pass, 4 fail on unbuilt dists; after building the six consumer packages under the lock 2 pass, 2 (check-doc-snippet-types, spec-symbol-ledger-plugin-detail-7265) read spec .d.ts not emitted here; none reads ci.yml or a changed file. Outside the derivation: check-governed-merges --branch HEAD exit 3 = GOVERNED, Tier H, .github/workflows/** x1, 252 lines; dispatch-gates --tier: no path-derived mandate. pnpm lint: no package touched. CI check-runs: run 42459521033 at 07:43Z: in progress. success: filter, Plan Test Core shards, Build Core, Build UI Deps, Build Docs, Live E2E UI, Dogfood Regression Gate, Type Check UI, Test Core (3/8), Test UI (1..16/16), Test UI aggregate. in progress: Test Core (1/8), Test Core (2/8), Lint UI, Build & E2E UI. not scheduled: Test Core (4..8/8), per the plan. skipped by filter: Dogfood shards, Dogfood Verify CLI, Temporal Conformance, UI Published Artifacts. Other workflows on 65cf47a: Lint & Type Check success, PR-Body Guards success, Governed Surface Guard success, PR Automation success; opt-in workflows skipped. No red.",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "governed": "Tier H (.github/workflows/ci.yml): the maintainer merges by hand.",
    "mcp_calls": "15 GitHub MCP calls, all reads: issue_read x3, actions_list x7, get_job_logs x4, pull_request_read x1. 0 GitHub MCP writes.",
    "api_writes": "3 — git push of claude/project-thread-a3vqo2; relay pr_create (fleet-write run 42459487055, PR #31429, draft, labels [skip-changeset], body 19513 bytes sent = stored, assignees none); POST /repos//issues/22034/comments (this report via post-stamped.mjs)",
    "deviations": [
    "No assignee and no review request on the PR, per the order (no assignees; no GitHub MCP writes) over the session harness line that asks for both.",
    "Commit trailers are model-free (Co-Authored-By: Claude), per os-dev.md over the harness reminder.",
    "Ablation run on a script change: os-dev.md lists scripts among what is not ablated, while it also ablates when a diff changes a test-pinned behaviour and the order says a new negative pin is ablated. The guard is pinned by the selftest, so it was ablated once (one-time proof, no permanent file).",
    "No shallow guard inside test-ui's inline select step: select-affected-tests-wiring.test.ts runs that step against the real checkout, so a guard there would red it in every depth-1 checkout. Its deepen is the fetch step; on a shallow clone it falls back to the full suite with ::warning:: (loud). Named in the inventory, row 3."
    ],
    "open_questions": [],
    "security_findings": "none",
    "out_of_scope_findings": [
    "carrier: #22034 (PR 2) · noted, not filed: type-check-ui rows 5 and 7 are silent on a shallow clone (check:lockfile-integrity throws under continue-on-error; turbo --filter=...[BASE] expected to select every ui package), so PR 2 owes them the same fetch step. Row 7 also diffs from the PR payload's frozen base.sha, the base test's #6195 comment says a selection must never use (over-selection on long-open PRs, never a skip)."
    ]
    }


    Generated by Claude Code

  7. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Landed 2026-11-08T09:23Z · step 1 of this card: PR #31329 merged by the maintainer through the merge queue at 2026-11-08T09:22Z, as e20c60d2cd0e612c8ba7a7a3c13ef19a107b29bb.

    Reading Value
    PR #31329 merged: true, merge commit e20c60d2cd, head reviewed 6f97713269 (contract review 6716127517, ACCEPT 6716132776); Tier H, readied and enqueued by the maintainer
    #22034 stays open (Refs): step 2 PR 1 is PR #31429 (contract review 6718987786, ACCEPT 6718996112, held for the maintainer); PR 2 follows a ~100-run reading after it lands

    State change: none; pm:dispatched stays for step 2.

  8. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    coordinator#1 · os-steve · session_01ADHkmRWWb3MUYRQZiCKQcX

    Priority p2 → p1 on the maintainer's order. ⛔ Not a claim: claim 6718358017 and step 2 (PR #31429) stand unchanged.

    The 2026-11-08 CI assessment (window 2026-11-01..07) recommended cutting the cost of full-history checkouts. The maintainer answered it in the project thread, verbatim: 「同意,立卡」 · 「高优先」 (2026-11-08T12:30Z). This card already carries that work, so nothing new is filed. Two readings for the step-2 PRs:

  9. added
    priority:p1High: required for production / M2
    and removed on Nov 8, 2026
  10. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Landed 2026-11-08T16:17Z · step 2, first PR: PR #31429 was merged through the merge queue at 2026-11-08T16:16Z, as e115841191bd302d62ae2ff7f5e9b29a04fc969f. The maintainer readied and enqueued it.

    Reading Value
    PR #31429 merged: true, merge commit e115841191, head reviewed 65cf47aba0 (contract review 6718987786, ACCEPT 6718996112)
    #22034 stays open (Refs) for step 2's second PR

    Hand-off: domain:devx#3 is off duty under 「devx 车道当前任务处理完。合并后就下班」 (2026-11-08T10:59Z). This card goes back to pm:queue, with no assignee, for the next devx seat. domain:devx#2 was told in mailbox #31501, comment 6720765085.

    The second PR waits on a reading. Read about 100 runs of test-plan, test and test-ui on main from this merge on: the checkout step plus the new fetch step. Then dispatch PR 2. It owes:

    • the same fetch step for type-check-ui, whose inventory rows 5 and 7 are silent on a shallow clone;
    • a pin that the checkouts stay at depth 1;
    • a fetch-step timeout-minutes sized from that reading;
    • removal of the stale fetch-depth: 0 prose.

    See PR #31429's inventory and its contract review ③. The root ci.yml is now in devx bounds lane-wide (#20163 6720656982), and #25452 goes serial after this card's work.

  11. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Nov 8, 2026
  12. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 8, 2026
  13. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · zhuangjianguo · session_01QsR2jTo666XXx9e1Gm21C6

    Claim: PM loop round 4 · 2026-11-08T17:16Z
    Session: session_01QsR2jRSntnsNKYKPXp9kFG (card thread, dev) · seat session_01QsR2jTo666XXx9e1Gm21C6
    Account: zhuangjianguo
    Branch: claude/project-thread-4lkdjv
    Worktree: objectstack-issue-22034
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: .github/workflows/ci.yml (type-check-ui checkout + the same fetch step; timeout-minutes on the three existing fetch steps; stale fetch-depth: 0 prose) and the test file that pins depth 1; Tier H, hand-merged; ⛔ no select-shard-packages.sh logic change, no other workflow, no ui/.github/**
    Container & model: M, mode:thread, model: default tier (no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: this repo's CI checkouts | step 2 PR 1 (#31429) landed e115841191 for test-plan/test/test-ui; type-check-ui still fetches every head and tag | every PR's Type Check UI wall and the queue's checkout tail (card body)
    Thread-read: 6723904729
    Premise: holds; devx#3's hand-off 6723904729 names what PR 2 owes, and PR #31429's Inventory rows 5-8 are its readers
    Serial constraints cleared: PR #31611 (#31519, this seat) edits ci.yml push-event jobs; the dev runs git merge-tree against its head before opening. #25452 goes after this card.

    Scope: step 1 is the ~100-run reading of the three converted jobs from e115841191 on, then PR 2 as handed off. PR says Refs #22034; Fixes decided at ACCEPT. Brief: /mnt/project-files/issue-22034/brief.md. Summons: the maintainer's 「开一个 devx 车道」 (this project, 2026-11-08T11:03Z); hand-off from domain:devx#3 (6723904729, mailbox 6720765085).

  14. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · zhuangjianguo · session_01QsR2jRSntnsNKYKPXp9kFG

    Step 2, PR 2 · step 1 reading: checkout cost after #31429, the fetch-step budget, and type-check-ui's readers

    Under claim 6724554460. Read-only; no code written yet.

    Headline. n is 22 runs after the merge (8 push, 14 merge_group), not about 100. On healthy runs, the new path (depth-1 checkout plus the fetch step) is not faster than the full-history checkout it replaced. The median is 2-14 s slower depending on the lane, p90 and p99 are higher, and the max is lower. Every fetch step succeeded on its first attempt. No platform incident fell in either window, so this reading cannot speak to the card's case, the 11-03 incident amplification and full-ref transport failures.

    1. The reading

    Source: jobs API, every CI run on main (push) and merge_group in two listings of 100 runs each.

    • After: every run whose head contains e115841191, checked with git merge-base --is-ancestor. That is 22 runs, from the PR's own queue run 42497604240 (16:00Z) to 17:22Z, 277 jobs. Runs still in progress count only their completed jobs.
    • Before: the same day's 178 runs on full history, from 01:27Z to 16:00Z. Queue tips never landed count when they were created before 16:00Z.
    • PR-event runs are excluded. Step durations come from the API's started_at/completed_at, at 1 s grain. Cancelled and skipped jobs are excluded; none of the after-jobs was cancelled.

    Before (full history: "Checkout repository" alone, fetch-depth: 0):

    Job n p50 p90 p99 max
    Plan Test Core shards 164 57 65 113 143
    Test Core (N/8) 917 57 63 85 133
    Test UI (N/16) 1423 58 64 87 113
    all three 2504 57 64 87 143

    After (seconds; "sum" is the checkout plus the fetch, per job):

    Job n checkout p50 / p90 / p99 / max fetch p50 / p90 / p99 / max sum p50 / p90 / p99 / max
    Plan Test Core shards 22 23 / 24 / 24 / 24 53 / 55 / 56 / 56 71 / 78 / 79 / 79
    Test Core (N/8) 111 9 / 24 / 28 / 31 49 / 57 / 71 / 85 62 / 80 / 93 / 107
    Test UI (N/16) 144 8 / 23 / 27 / 28 51 / 57 / 72 / 76 60 / 77 / 99 / 100
    all three 277 50 / 57 / 72 / 85 62 / 79 / 99 / 107
    • Control: Type Check UI still checks out full history, in the same runs. Its checkout read p50 53 s before (n=89) and 51 s after (n=9), so the two windows saw the same platform conditions.
    • Fetch outcome: 277 of 277 succeeded. The slowest, Test Core (2/8) job 128790425643 at 85 s, ran one attempt: its log shows a single fetch, then History: 20698 commit(s) behind HEAD, shallow=false, no tags.
    • Where the time goes: the fetch step pulls HEAD's whole ancestry, about 20.7k commits, with a full index-pack. On CI that alone costs about what the old single full-ref clone did, 50 s against 57 s. So the gain ci(test): check out Test Core and Test UI at depth 1 and fetch only the history they read #31429 measured locally (473 s against 29-32 s, with the ref set dominating) did not reproduce on CI's healthy network. What the change removes is the 1.5k heads and 17k tags. Those are the payload behind the 11-03 amplification (5.6-6.5x for the full-ref fetch) and the 10-13 curl 56 triple failure. This window measures neither.
    • Against the triage's test (6024293797, "if the median holds and the tail shrinks"): on healthy runs the median does not hold. It is +14 s on Plan, +5 s on Test Core and +2 s on Test UI. The tail does not shrink at p90 or p99; it does at the max, but the max compares n=277 against n=2504.
    • Job walls after, for the budget below (seconds, p99 / max): Plan 115 / 115, Test Core 1339 / 1525, Test UI 924 / 991. The bodies (wall minus checkout minus fetch) are Plan 37 / 37, Test Core 1263 / 1440, Test UI 845 / 929, and Type Check UI 863 / 863 before.
    • Pace: after the merge, about 16 runs an hour were read on main and the queue together. About 100 runs means waiting roughly 5 more hours. Whether to wait is the seat's call.

    2. Proposed fetch-step timeout-minutes: 8, the same on all four steps

    • Covers the worst incident factor: 8 min is 480 s. The fetch p99 is 72 s, and 72 x 6.5 (11-03's worst factor, measured on the full-ref fetch) is 468 s. The fetch max is 85 s, and 85 x 5.6 (that incident's low end) is 476 s. The step pulls the whole ancestry, so its incident factor is assumed to be near the full-ref fetch's, not the ~3x of a depth-1 fetch. That assumption is unmeasured.
    • Lets the retries finish on a healthy network: three max-length attempts plus the 15 s and 30 s sleeps take 3 x 85 + 45 = 300 s.
    • Sits under every job wall with the measured body max:
      • test-plan (10 min): 8:00 + checkout 0:24 + body 0:37 = 9:01.
      • test (60 min): 8:00 + 0:31 + 24:00 = 32:31.
      • test-ui (30 min): 8:00 + 0:28 + 15:29 = 23:57.
      • type-check-ui (40 min): 8:00 + about 0:30 + 14:23 = 22:53.
    • What it changes: a hung or crawling fetch now ends red at 8 min with the step named, instead of eating the job wall. In test-plan that means the eight-shard fallback, and each shard fetches for itself. It never turns a skip into a pass.
    • Not taken:
      • 5 min is under the incident factor on the measured max (85 x 3.5).
      • 10 min equals test-plan's wall, so it bounds nothing there.
      • Per-job values would break "byte-identical except budget" for no measured gain.

    3. type-check-ui, inventory rows 5-8 on current main (467a01f7)

    type-check-ui is unchanged since #31429 (the only ci.yml commit since 405a78eae is e1158411). Each reader was re-read on main:

    Row Reader What it needs The byte-identical fetch step
    5 check:lockfile-integrity (PR only, continue-on-error) → ui/scripts/check-lockfile-integrity.mjs L402-L412: git merge-base origin/BASE HEAD, then git show REV:pnpm-lock.yaml HEAD's ancestry, origin/BASE, blobs at the base answers: PR_BASE_REF is pull_request.base.ref (= github.base_ref), so origin/main comes always and origin/BASE when the base is another branch. No partial-clone filter, so the blob is local. The step sits before this one (right after the checkout).
    6 check:i18n-drift → check-i18n-en-drift.mjs resolveBaseRef L481-L515: merge-base HEAD origin/$GITHUB_BASE_REF, then origin/main, then main; git show/cat-file at the base HEAD's ancestry, origin/BASE or origin/main answers: on PR, origin/BASE. On queue and push GITHUB_BASE_REF is empty, so the base is merge-base HEAD origin/main, the same commit as under fetch-depth: 0 (on push, HEAD itself).
    7 Run type-check over the ui packages: turbo run type-check --filter=...[BASE], BASE = payload base.sha (PR) or merge_group.base_sha the path from HEAD to BASE answers: the queue's base_sha and the PR's frozen base.sha are both ancestors of HEAD (the latter through main, the merge ref's first parent), so both are in the unshallowed ancestry. The filter reads no tag or other head. Push, schedule and dispatch take the full scope.
    8 Build the @objectstack packages objectui consumes → spec build-schemas.ts merge-base HEAD origin/main answers: the same as row 2 in the three converted jobs.

    So the same step, byte-identical, answers all four.

    • Other readers: none. I checked the other 16 pnpm --dir ui run checks the job runs, and the local modules they import, for merge-base/rev-list/fetch/cat-file/is-shallow/spawnSync('git'. workspace-root.mjs matches only in a comment. The tsc steps read no git.
    • Nit: the step's ::error:: says "The package selection reads that history", which is the same misfit contract review 6718987786 ③ noted on test-ui. Byte-identity keeps it.

    For the seat before code: files outside the claim's surface

    The claim's surface is ci.yml plus "the test file that pins depth 1" (singular). Dropping fetch-depth: 0 from type-check-ui reds two existing pins, and two prose lines point at a checkout that will be gone:

    1. Pin: ui/scripts/__tests__/check-i18n-en-drift.test.ts L1173-L1180, 'gives that job a full-history checkout, or the merge base does not exist', asserts fetch-depth: 0 before the step. It goes red and must move to assert the fetch step instead.
    2. Pin: ui/scripts/__tests__/check-lockfile-integrity.test.ts L221-L229, 'checks out deep enough to have a merge base', has the same shape. It goes red too.
    3. Prose: ui/scripts/check-i18n-en-drift.mjs L842-L843 says "In CI, give the checkout fetch-depth: 0". This becomes stale advice for the one job that runs it. Contract review ③ named it.
    4. Prose: ci.yml L1032 (test's dated turbo reading) and L3656 (the lockfile step's comment) are inside the surface. ui/scripts/check-changeset-claims.mjs L1424 is not stale: no workflow runs check:changeset-claims. I leave it.

    Proposed depth-1 pin: one new case in ui/scripts/__tests__/select-affected-tests.test.ts. It already slices the root ci.yml and holds #31429's fetch-step pin. The case would cover all four jobs (test-plan, test, test-ui, type-check-ui):

    • the Checkout repository step carries no fetch-depth (and no with:);
    • the fetch step follows it directly;
    • the fetch step carries timeout-minutes: 8;
    • I ablate the case once by re-adding fetch-depth: 0.

    Ask: may I take items 1-3 into the surface, and does the pin go where I propose? Also: wait for about 100 runs, or proceed on n=22?

    PR #31611 head 80eca7dc merges cleanly with main. It touches ci.yml near type-check-ui's save step and test-ui; I run git merge-tree on my real diff before opening.

    Reads: GitHub MCP 5, all reads (pull_request_read x2, issue_read x1, actions_list x2). REST reads through the proxy: about 227 (actions/runs/ID/jobs for 200 runs plus 22 re-reads of the after-runs and one probe, jobs/128790425643/logs, 2 run listings, the claim comment). Writes: this comment.


    Generated by Claude Code

  15. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · zhuangjianguo · session_01QsR2jTo666XXx9e1Gm21C6

    Claim: PM loop round 4 · amendment · 2026-11-08T17:26Z
    Amends: 6724554460 (File surface only)
    File surface: adds ui/scripts/__tests__/check-i18n-en-drift.test.ts and ui/scripts/__tests__/check-lockfile-integrity.test.ts (each pins fetch-depth: 0 on type-check-ui; the pins move to the fetch step), ui/scripts/check-i18n-en-drift.mjs (the prose at L842 only, no logic), and the depth-1 pin as a new case in ui/scripts/__tests__/select-affected-tests.test.ts over the four jobs. These are cross-domain touches of the domain:ui tree that the claiming seat follows through. The step-1 reading is 6724659023.

  16. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · zhuangjianguo · session_01QsR2jRSntnsNKYKPXp9kFG
    os-dev-report
    {
    "issue": 22034,
    "status": "done",
    "branch": "claude/project-thread-4lkdjv",
    "pr": "#31644",
    "head": "6d8684a5",
    "session": "session_01QsR2jRSntnsNKYKPXp9kFG",
    "premise_still_valid": true,
    "summary": "Step 2, second PR (Refs #22034). type-check-ui drops fetch-depth: 0 for a depth-1 checkout plus the byte-identical fetch step test-plan/test/test-ui run since #31429; all four copies take timeout-minutes: 8, sized from the step-1 reading 6724659023 (fetch p99 72 s x 6.5, max 85 s x 5.6, under test-plan's 10-min wall at 9:01). A new describe in select-affected-tests.test.ts pins, per job, depth 1 (no fetch-depth on the checkout), the fetch step next with budget 8, the first history reader after it, and the four copies deep-equal. The two type-check-ui pins that read fetch-depth: 0 (check-i18n-en-drift.test.ts, check-lockfile-integrity.test.ts) now read the fetch step; check-i18n-en-drift.mjs's shallow refusal and two ci.yml comments now name the fetch step. The PR body states the healthy-run cost (+~5 s median per job) and both distributions with n, per the seat's ruling.",
    "files_changed": [
    ".github/workflows/ci.yml (+48 / -8)",
    "ui/scripts/tests/select-affected-tests.test.ts (+40 / -0)",
    "ui/scripts/tests/check-i18n-en-drift.test.ts (+9 / -5)",
    "ui/scripts/tests/check-lockfile-integrity.test.ts (+8 / -5)",
    "ui/scripts/check-i18n-en-drift.mjs (+1 / -1)"
    ],
    "line_budget": "125 changed lines (+106 / -19), under the 3000 human-merge threshold",
    "measurement": {
    "reading": "6724659023",
    "before": "full-history checkout, 178 runs, n=2504 jobs: p50 57 / p90 64 / p99 87 / max 143 s",
    "after": "checkout + fetch, 22 runs (8 push, 14 merge_group), n=277 jobs: 62 / 79 / 99 / 107 s; fetch alone 50 / 57 / 72 / 85 s; 277/277 green",
    "control": "Type Check UI (still full) p50 53 -> 51 s (n 89 / 9)"
    },
    "tests": "ui: pnpm exec vitest run select-affected-tests.test.ts check-i18n-en-drift.test.ts check-lockfile-integrity.test.ts select-affected-tests-wiring.test.ts -> 4 files, 148 passed (spec built OS_SKIP_DTS=1 first). Base red: same three pin files against main's ci.yml dced781 restored into the tree -> 7 failed (4 per-job cases, deep-equal case, both moved pins); restored, blob == HEAD a294db1e. Ablation on head 6d8684a via scripts/ablation-replace.mjs (re-add with: fetch-depth: 0 to type-check-ui's checkout): anchor 1 -> 0, blob a294db1e -> 4e872298, 'type-check-ui: depth-1 checkout, the fetch step next, then the first reader' failed ('expected +0 to be undefined'), 1 failed / 55 passed; restored, blob == HEAD, git diff HEAD empty.",
    "gates": "head 6d8684a: dispatch-gates --commands --repo objectstack-ai/objectstack derived 62 families; all 62 run, exit captured before any pipe, all exit 0; --ran: '62 derived famil(ies) accounted for — 62 run, 0 NOT-MEASURED (a DERIVED zero — all 62 recorded an exit code and none of them is 3)'. Incl. check:required-contexts, check:workflow-status-functions, check:shard-attestation, check:stall-guard-budget/headroom, check:aggregator-roster, check:pm-expected-skips, check-step-collectors, check-self-test-workflow-commands, check:dts-closure (256/256), check:dual-build-cjs-loads (122 entries), check:type-check-debt under os-verify-lock (VERDICT command-exit 0, 515 s), check:pm-dispatch-gates ('2205 cases pass', fast tier; first run's exit not captured, re-run EXIT=0), pnpm --dir ui exec vitest run scripts/ under the lock (170 files passed, 2 skipped; 5014 tests). Body gates on the PR body: check-closing-keyword-parity, check-changeset-no-major --base origin/main, check-adr-0087-registration, check-partof-closing-keyword: exit 0 each. Outside derivation: check-governed-merges --branch HEAD exit 3 = GOVERNED, Tier H, .github/workflows/ci.yml x1, 125 lines; dispatch-gates --tier: no path-derived mandate. pnpm lint: no package touched. CI check-runs on #31644: in_progress at report time (just opened).",
    "serial": "git merge-tree --write-tree HEAD vs PR #31611 head 80eca7d: clean; vs main dced781: clean. main moved to 6924440 (3 docs commits), none touches a changed file; no merge taken.",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "governed": "Tier H (.github/workflows/ci.yml): the maintainer merges by hand.",
    "mcp_calls": "5 — all reads: pull_request_read x2, issue_read x1, actions_list x2. 0 GitHub MCP writes.",
    "api_writes": "4 — post-stamped comment 6724659023 (step-1 reading), git push of claude/project-thread-4lkdjv, relay pr_create (fleet-write run 42509428791, PR #31644, draft, labels [skip-changeset], body 12772 bytes sent = stored, assignees none), this report via post-stamped. REST reads through the proxy: about 227 (jobs API, one job log, run listings, the claim comment).",
    "deviations": [
    "No assignee, no review request and no PR-activity subscription, per common rules 3 and 10 and os-dev.md over the session harness lines that ask for them.",
    "Commit trailers are model-free (Co-Authored-By: Claude), per os-dev.md over the harness reminder.",
    "Surface amended by the seat before code: the two ui pin files and check-i18n-en-drift.mjs (prose only).",
    "Ablation of a workflow-pin: os-dev.md lists workflows among what is not ablated, while the order's rule 7 asks a changed pin to reproduce the harm; done once, one-time, no permanent file.",
    "check:pm-dispatch-gates ran twice: the first nohup run's exit code was not captured, so it was re-run with EXIT capture (EXIT=0); both printed '2205 cases pass'."
    ],
    "open_questions": [],
    "security_findings": "none",
    "out_of_scope_findings": [
    "carrier: #22034 · noted, not filed: on healthy CI the depth-1 + unshallow path costs ~+5 s median per job over the old full-ref clone (fetch dominated by the ~20.7k-commit index-pack); the incident-tail gain is unmeasured until a fetch incident window."
    ]
    }


    Generated by Claude Code

  17. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · zhuangjianguo · session_01QsR2jTo666XXx9e1Gm21C6

    Step 2, PR 2 is ACCEPTed and waits on the maintainer's hand merge (Tier H): PR #31644, head d69b4e4769bbdad5243dd89c46bd19beaea2f7cc, ACCEPT 6725999236, contract review PASS 6725813726 (the delta round of 6725549004). type-check-ui now checks out at depth 1, and the four fetch steps have per-job budgets of 8 / 14 / 20 / 20 minutes. After this, ci.yml has no fetch-depth: 0. The stale refusal prose outside ci.yml is split off to #31649. When it lands, this seat writes the landing note, reads the fetch distribution on all four jobs, and closes this card.

  18. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · zhuangjianguo · session_01QsR2jTo666XXx9e1Gm21C6

    Landed 2026-11-08T21:42Z · step 2, second and last PR: PR #31644 was merged through the merge queue at 2026-11-08T21:42Z as 8210894c084867060d653808b253cd514377e000. The maintainer readied and enqueued it. It was the reviewed head d69b4e47: contract review PASS 6725813726 (the delta round of 6725549004), ACCEPT 6725999236.

    With it, ci.yml has no fetch-depth: 0. test-plan, test, test-ui and type-check-ui check out at depth 1 and run the history fetch step, with per-job budgets of 8 / 14 / 20 / 20 minutes. Step 1 was #31329, step 2 PR 1 was #31429, and step 2 PR 2 is #31644. The stale refusal prose went to #31649 (PR #31667, in the queue). Ruling 2b keeps lint.yml's full-history checkouts as they are.

    This card closes now (the PR said Refs). Still owed by this seat, to be posted here: the fetch-step distribution on all four jobs from 8210894c on, against the budgets. That includes the first Type Check UI runs on main, and the n the budgets were sized from (22 runs) grown toward the ruled ~100. If any job's p99 comes near its budget, the seat files a follow-up card.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxDomain lane — seat card indexed by label:pm:seatpriority:p1High: required for production / M2toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions