Skip to content

ci: Turbo seeds vs the 10 GB Actions cache pool — measure the pool, then shrink or retire the per-sha seeds #25452

Open

Description

@objectstack-fleet

Filing gate: ② ruling-directed sibling card — batch #5 item 1, letter C (#25373 comment 6366946328, maintainer 「同意」 2026-10-23T14:13:20Z). Reader: the domain:devx execution seat, dispatch step. Dedup: search_issues on objectstack-ai/objectstack, "Actions cache pool 10 GB eviction turbo seed" → 0 hits. Session: cse_01LKHDniRQSWjRJyDtacwpEd.

One-sentence problem

Every push to main writes about 12.8 GB of per-sha Turbo seeds to the Actions cache (six Test Core shard seeds of about 2.1 GB each, plus the Build Core, Type Check and other seeds), while the repository's Actions cache pool is 10 GB, so each merge can evict the seeds — and the pnpm store and Next.js caches — that the next PR run restores, and PR builds go cold for reasons the seed design cannot see.

Evidence (file lines at objectstack commit 2b7c331)

Governing text

  • ci.yml:597-610 and lint.yml:5101-5145 — the seed discipline comments (main writes, PR and merge_group restore by prefix). This card changes what and how much is written, not the restore order, unless the measurement shows the seeds are redundant with the remote cache.
  • AGENTS.md lines 371–372 are about the local worktree cache, not CI.
  • Ruling 6366946328: "Raising the pool limit is a billing item and comes back to the maintainer."

Change (in order; the dev pins what the measurement supports)

  1. Measure first. Read actions/cache/usage and the 100 largest entries of actions/caches (sorted by size_in_bytes, desc), from a local gh or a one-off read step in a workflow_dispatch job with actions: read. Record in the PR: pool total, the share held by *-turbo-* keys, by refs/pull/* refs, and by pnpm-store / nextjs keys, plus the age of the oldest live Test Core seed. If the pool is well under 10 GB and seeds survive at least 5 merges, stop and say so — the card closes with the reading.
  2. Then shrink, cheapest first, choosing from: (a) drop the .turbo/cache Actions seed for jobs whose tasks the remote cache already serves (Build Core, Type Check), keeping the seed only where the remote cache misses; (b) save the Test Core seeds from one shard-independent job, or prune .turbo/cache to the run's own hashes before save, to cut the per-shard size; (c) stop PR runs from saving the Next.js cache (restore-only on PRs, as the Turbo seed already is).
  3. Never raise the pool limit in this card. If after (a)–(c) the pool is still over budget, return the billing option to the maintainer as a needs-user-decision with the measured numbers.

Acceptance

Risks

Work estimate

Lane domain:devx · 1 PR (.github/workflows/ci.yml, .github/workflows/lint.yml; possibly .github/workflows/*.yml for the Next.js save gate) · Clause-②: no · Metadata-protocol: none · Tier H (governed surface — the PR waits for a GOVERNED_APPROVERS approval before ready). Size M. Serial: lands after #25373's PR (same ci.yml concurrency/save region) and after #25419 (needs its remote-cache assert lines for the before/after reading).

Related: #25373 (ruled sibling), #25374 / PR #25419 (remote cache assert), #5401 (closed).

Maintainer directive (verbatim, untranslated)

同意

— the maintainer, 2026-10-23T14:13:20Z, on director batch #5 item 1 (letter C = land the staged concurrency change as a coverage fix and file a separate card for the cache pool).


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 · 2026-10-23T18:23Z
    Session: session_01SawdJgiuoz8deqVdM51jAE (card thread, dispatched by seat session session_01LKHDniRQSWjRJyDtacwpEd)
    Account: os-elon-musk
    Branch: claude/project-thread-53z7nt (the harness-pinned branch for the card thread; it names no issue, so this claim is the identity record)
    Worktree: objectstack-issue-25452
    Domain: domain:devx
    Seat: domain:devx#1 (seat post #6023)
    File surface: .github/workflows/ci.yml, .github/workflows/lint.yml (possibly other workflow files for the Next.js save gate); Tier H (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier, effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: domain:devx seat 1 (#6023) reviews; Tier H — GOVERNED_APPROVERS approval before ready
    Thread-read: none
    Serial constraints cleared: cleared — #25454 (concurrency, merged 18:20Z) and #25419 (remote-cache assert, merged 18:10Z) are on main; #25465 (DTS skip) also landed 18:20Z

    Dispatched under the maintainer's 「同意」 to the director's ruling batch 1, item 5A (devx dispatches p1–p3). This card is also covered by the maintainer's 「同意,立卡」 for the CI performance audit cards, where the card says so. Dispatch order: /mnt/project-files/pm-devx-seat/dispatch-25452.md.

  2. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (seat review) → PR #25523 · domain:devx seat 1 · session_01LKHDniRQSWjRJyDtacwpEd · 2026-10-23T18:55Z

    • Reviewed at head fcae6e3a53: two files. scripts/ci/prune-turbo-cache.mjs is new (+381) with a 25-case self-test, wired into Build Core. .github/workflows/ci.yml (+29 / -1) adds a prune step before Test Core's "Save Turbo cache (main only)", and the save now runs only when the prune says save=true.
    • Cause, from logs: each push saved six Test Core seeds of 2.41–2.44 GB, about 14.6 GB per merge. Build Core's full 76-task build is 0.048 GB. The seed snowballs because turbo never evicts .turbo/cache, and the bare Linux-turbo-test- restore fallback carries that lineage across shards; PR run 39999049930 shard 1 restored shard 3's 2.50 GB seed. This is card change (b).
    • What the prune keeps: the task hashes named by the test step's --summarize run summary (.turbo/runs/, which ci.yml writes on both the package and the slice legs), plus the closure build's summary that the ci: assert the Turbo remote cache is on after Build Core, the Test Core closure and the three Type Check builds #25419 assertion moved to $RUNNER_TEMP/turbo-remote-cache. All three files of every other entry are deleted. A file of unknown shape is kept and counted, so a turbo layout change cannot silently empty the seed. With no run summary (cancelled, or an empty shard) there is no save, and the previous seed stays newest. Every run-time path exits 0, so the shard attestation is unaffected.
    • Fallback kept, and the seat agrees: once seeds are pruned, a cross-shard restore brings at most one closure's worth, and the prune drops whatever the run did not use. The lineage cannot carry forward, and a new shard number keeps its warm start.
    • Seat re-run: --self-test at this head is OK (25 cases, 5 batteries). CI is all green: 34 success, 11 skipped.
    • Still owed: the pool total before the change (actions/cache/usage and the largest entries) is pending. The maintainer has been asked to run two gh reads locally; this is not a landing blocker. The after-reading (≥ 5 merges, pool ≤ 8 GB at steady state, closure medians) is owed after landing.
    • ⛔ GOVERNED: Tier H (.github/workflows/ci.yml). A GOVERNED_APPROVERS approval is the review record; hotlong and os-zhuang are requested.
  3. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    ContributorAuthor

    After-reading, first signal (devx seat, 2026-10-24 01:05Z; #25523 merged 00:35Z). Two push runs so far; the acceptance asks for ≥ 5.

    • Push run 40045993375 (041a120b61), Test Core 1/6: prune-turbo-cache: … kept 3 task entries named by 2 run summaries and dropped 17001 file(s) the run did not use: 2912.4 MB -> 0.8 MB on disk. It then saved Linux-turbo-test-1-main-041a120b61…. Shard 2 also saved.
    • Shards 3–6 on the same run logged NOT SAVED -- no readable run summary. Those are empty shards on an affected-only push, which is the designed no-save path, and the previous seed stays newest.
    • So a seed now carries only its own run: about 1 MB per shard on this merge, against 2.41–2.44 GB × 6 before.

    Still owed for the acceptance: the pool total at steady state (≤ 8 GB) and the PR shard-closure and Build Core medians over 10 PR runs, after ≥ 5 merges. The seat reads them on the next check.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    ContributorAuthor

    Final after-reading (devx seat, 2026-10-24 08:10Z; #25523 merged 00:35Z, interim 6377899689). Seven push runs to main since landing, all 42 Test Core jobs read.

    Seeds: met. Every saved seed is under 49 MB, and no prune step failed.

    push run sha shards saved total written
    40045993375 041a120b 2 of 6 39.9 MB
    40047991572 9c43e19f 3 62.1 MB
    40052782401 ba9e0c37 6 272.8 MB
    40056932869 e0734559 6 266.6 MB
    40059211627 ba6912c1 6 272.9 MB
    40070765813 39376972 6 272.9 MB
    40072510064 8801f2bb 2 40.0 MB
    • When all six shards run, each seed is 38.7–47.9 MB and a merge writes about 0.27 GB. Before the change it was 6 × 2.41–2.44 GB, about 14.6 GB. The PR body predicted 0.3–0.6 GB.
    • The first run cleaned up the old lineage: shard 1 went 2912.4 → 0.8 MB and shard 2 went 2951.9 → 39.5 MB.
    • All 14 shards that did not save were empty. They logged NOT SAVED -- no readable run summary, the designed path. No shard that ran tests skipped its save.
    • Every kept line reports 0 have no entry.

    PR timings over 10 PR runs since landing. The runs are 40072679921, 40066454701, 40065311088, 40063381603, 40062740824, 40062506129, 40062326459, 40059926372, 40058336591 and 40058057228. I skipped two action_required runs, one cancelled run and two runs with Build Core skipped.

    • Build this shard's dependency closure: met. The median over 60 shard jobs is 1.23 min (target ≤ 1.7), and the max is 6.68 min. Shards 3–5 carry the long tail at 200–400 s. The slowest shard's median per run is 4.45 min.
    • Build Core Build packages (excluding docs): not met as read. The median is 3.28 min (target ≤ 2.5), and the max is 6.32 min.
      • I could not apply the acceptance's filter, "PR runs whose closure matches main". All ten PRs change source, and two of them are the release PR, which bumps every version.
      • The two runs with nothing to rebuild took 0.03 and 0.00 min.
      • This PR changed nothing on Build Core's path; Build Core reads the remote cache, not these seeds. So the 3.28 min reflects what each PR rebuilt, not the seeds. I read this as no regression, but not as proof that the criterion is met.
    • Queue wait (job started_at − created_at) has a median of 2 s and a max of 3 s.

    Still open: the pool total (target ≤ 8 GB at steady state). actions/cache/usage returns 403 from the seat's container, and the two local gh reads asked of the maintainer have not arrived. On the arithmetic, about 0.27 GB per full merge leaves the 10 GB pool more than 30 merges of headroom. But the old 2.4 GB entries age out on GitHub's clock, and only the usage read can confirm that.

    The seat recommends closing #25452 once the pool read is in. If the pool read is still missing, the card can close on the seed evidence above, with the pool figure recorded when it arrives. That choice is the maintainer's.


    Generated by Claude Code

  5. hotlong commented on Oct 24, 2026

    @hotlong
    Contributor

    Pool reading (the two local gh reads asked of the maintainer) · 2026-10-24 14:25Z

    Read by the cloud ops seat at the maintainer's request, from a local gh: GET /actions/cache/usage and every entry of GET /actions/caches (31 entries, sorted by size). main was at 2c523d0100. This is reading 1; the card's risk note asks for a second at least an hour later.

    Pool total: 10.30 GB in 31 entries. That is over the ≤ 8 GB acceptance and at the 10 GB limit. cache/usage answered 11.01 GB in 30 entries; the listing taken seconds later is used below.

    share (the key axis and the ref axis overlap) entries GB of pool
    *-turbo-* keys 13 3.06 29.7 %
    refs/pull/* refs 5 2.99 29.0 %
    pnpm-store keys 7 2.25 21.9 %
    nextjs keys 9 4.98 48.3 %
    merge-queue refs (gh-readonly-queue/*) 8 2.68 26.0 %
    refs/heads/main 18 4.64 45.0 %

    Eviction is running. Of the 31 live entries, 29 were created in the last 1.5 h. The 2 older ones (13.4 h) are pnpm-store-v3 and corepack on main, which every run reads. The oldest live Test Core seed is 1.3 h old (Linux-turbo-test-6-main-49653f91…). Live Test Core seeds cover 3 main shas, short of the card's "survive at least 5 merges".

    What #25523 fixed holds. The 7 live Test Core seeds total 0.27 GB, 0.8–48 MB each.

    Where the weight is now:

    1. Next.js cache: 4.98 GB.
      • 9 entries of 241–884 MB.
      • Saved on PR, merge-queue and main refs alike: ci.yml:2918-2923 is a plain actions/cache@v6, which post-saves on every event.
      • This is the card's change (c), not yet done.
    2. The other per-sha Turbo seeds on main: 2.79 GB.
    3. pnpm store saved once per ref.
      • The same key Linux-pnpm-store-v3-d2b76958… is stored 5 times (4 merge-queue refs and 1 PR ref), about 1.47 GB of duplicates, plus spec-shape-gate's own 489 MB store.
      • The pnpm-store-v3 step is a plain actions/cache@v6 in about 12 places across ci.yml and lint.yml.
    4. Merge-queue refs: 2.68 GB of entries no later run restores.
      • Each gh-readonly-queue/main/pr-* ref is used by its one run.
      • What it saves (pnpm store and Next.js, about 0.5 GB per queue entry) only pushes main's seeds out.

    Against the acceptance:

    • Seeds: met, per 6381804603.
    • Pool ≤ 8 GB at steady state: not met, at 10.30 GB.

    Per the card's step 3, the billing option comes back to the maintainer only after (a)–(c). (a) and (c) have not been done, and the per-ref pnpm/Next.js saves on merge_group and PR events look like the cheapest next cut.

    Nothing was changed; both calls are reads.

  6. 25 remaining items

  7. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Maintainer-action: read the Actions cache pool for objectstack-ai/objectstack — gh api repos/objectstack-ai/objectstack/actions/cache/usage and gh api --paginate 'repos/objectstack-ai/objectstack/actions/caches?per_page=100' --jq '.actions_caches[] | [.key, .size_in_bytes, .last_accessed_at] | @tsv' — and paste both outputs on this card — done when a comment on this card carries both outputs, read at or after 6817bf1eae plus ≥ 5 merges to main

    Why it is parked with the maintainer · 2026-10-29T21:22Z · ⛔ not a claim

    Triage's unblock 6487355419 leaves step 3, the pool reading, as the only remaining step. The lane seat cannot take that reading: re-probed now, GET /repos/objectstack-ai/objectstack/actions/cache/usage and GET …/actions/caches both answer 403 to this seat's token. The relay has no cache-read operation either. Nothing else on the card is open, so dispatching a dev would not help, because the dev's container has the same token scope.

    The reading decides the card's end (see its Acceptance section). Either the seeds still crowd the 10 GB pool, which means a shrink/retire step; or they no longer do, and the card closes not_planned with the measured cause named. Since the step-2 prune, turbo-typecheck is down from 5,885.7 MB to 33.3 MB (6462691006). Once a reading is posted, any lane seat acts on it.


    Generated by Claude Code

  8. hotlong commented on Nov 5, 2026

    @hotlong
    Contributor

    coordinator#1 · hotlong · session_6eb9ec2e0e3f410b91239dab7a337b9e

    缓存池读数(Maintainer-action 完成) · 2026-11-05T01:30Z · 维护者原话「A 组 + B 组全做」,本条由协调席以维护者的 gh 账号(hotlong)读取。读数时 main 是 474c030b13,从 6817bf1eae 起已有 1,527 次合并,满足「≥ 5 次合并」。

    结论:种子仍然挤满 10 GB 池,而且主因是卡上没列的一个新 key

    • 两次读数:
      • 第一次 active_caches_size_in_bytes = 10,925,870,698(27 条,超过 10 GB);
      • 几分钟后第二次 = 7,745,686,441(16 条),正在被逐出。
    • 第二次的 16 条里,*-turbo-* 占 7,733 MB(99.8%):
      • Linux-turbo-dogfood-1-main-<sha> 每个 sha 约 3.69 GB,池里同时有两个,合计 7.37 GB,占 95%。它来自 .github/workflows/upgrade-harness-optin.yml:96,不在本卡第 5 段列的种子里。
      • turbo-typecheck 已降到 36.5 MB(step-2 prune 生效);turbo-test-* 每片 25–35 MB。
      • refs/pull/* 8 MB;pnpm-store 和 nextjs 都是 0(不在池里,已被逐出或不再保存)。
    • 最老的活条目创建于 01:21Z,读数时只有 9 分钟;最老的 Test Core 种子是 01:22Z。种子活不过 5 次合并,按 Acceptance 不能以「池远低于 10 GB」收卡。

    建议给车道:先看 turbo-dogfood 种子要不要每个 main sha 都存(要么限定 opt-in 运行才存,要么改成只恢复)。这一步就能把池降到 1 GB 以内。

    原始输出

    gh api repos/objectstack-ai/objectstack/actions/cache/usage(第二次)
    {"full_name":"objectstack-ai/objectstack","active_caches_size_in_bytes":7745686441,"active_caches_count":16}
    
    actions/caches(key · bytes · ref · last_accessed_at · created_at)
    Linux-corepack-v2-188a23787a99b3215615e5cca46df0142ebff58a45a31f6f7fb6b2649e4b552a	4086550	refs/heads/gh-readonly-queue/main/pr-30162-bedb96e081a0317e0983bfd6a05288139d1f2a36	2026-11-05T01:29:35Z	2026-11-05T01:27:36Z
    Linux-turbo-test-1-main-03be5655bb2702d80dcf2f5038a4899b37f585ff	34592225	refs/heads/main	2026-11-05T01:29:08Z	2026-11-05T01:25:26Z
    Linux-turbo-test-2-main-474c030b1341a5a063a04990caa51e3e81124e0c	29192700	refs/heads/main	2026-11-05T01:29:04Z	2026-11-05T01:28:40Z
    Linux-corepack-v2-188a23787a99b3215615e5cca46df0142ebff58a45a31f6f7fb6b2649e4b552a	4087770	refs/pull/30194/merge	2026-11-05T01:28:41Z	2026-11-05T01:24:39Z
    Linux-turbo-typecheck-main-474c030b1341a5a063a04990caa51e3e81124e0c	36487944	refs/heads/main	2026-11-05T01:28:39Z	2026-11-05T01:25:13Z
    Linux-turbo-test-3-main-4851668dd438f28be85f18d70cf5c57f5b0ef43f	24978067	refs/heads/main	2026-11-05T01:28:30Z	2026-11-05T01:28:30Z
    Linux-turbo-test-2-main-4851668dd438f28be85f18d70cf5c57f5b0ef43f	816771	refs/heads/main	2026-11-05T01:28:11Z	2026-11-05T01:28:11Z
    Linux-turbo-test-2-main-03be5655bb2702d80dcf2f5038a4899b37f585ff	29227351	refs/heads/main	2026-11-05T01:27:17Z	2026-11-05T01:25:32Z
    Linux-turbo-test-7-main-4851668dd438f28be85f18d70cf5c57f5b0ef43f	28651372	refs/heads/main	2026-11-05T01:27:14Z	2026-11-05T01:24:45Z
    Linux-turbo-test-3-main-474c030b1341a5a063a04990caa51e3e81124e0c	25396463	refs/heads/main	2026-11-05T01:27:14Z	2026-11-05T01:23:36Z
    Linux-turbo-test-8-main-474c030b1341a5a063a04990caa51e3e81124e0c	28520685	refs/heads/main	2026-11-05T01:27:14Z	2026-11-05T01:25:52Z
    Linux-turbo-test-6-main-474c030b1341a5a063a04990caa51e3e81124e0c	28509425	refs/heads/main	2026-11-05T01:27:14Z	2026-11-05T01:23:43Z
    Linux-turbo-test-5-main-474c030b1341a5a063a04990caa51e3e81124e0c	28776820	refs/heads/main	2026-11-05T01:27:12Z	2026-11-05T01:22:56Z
    Linux-corepack-v2-188a23787a99b3215615e5cca46df0142ebff58a45a31f6f7fb6b2649e4b552a	4088128	refs/pull/30195/merge	2026-11-05T01:26:54Z	2026-11-05T01:23:52Z
    Linux-turbo-typecheck-main-4851668dd438f28be85f18d70cf5c57f5b0ef43f	36488750	refs/heads/main	2026-11-05T01:24:59Z	2026-11-05T01:21:27Z
    Linux-turbo-dogfood-1-main-4851668dd438f28be85f18d70cf5c57f5b0ef43f	3685866556	refs/heads/main	2026-11-05T01:24:51Z	2026-11-05T01:24:51Z
    Linux-turbo-dogfood-1-main-474c030b1341a5a063a04990caa51e3e81124e0c	3687370253	refs/heads/main	2026-11-05T01:23:51Z	2026-11-05T01:23:51Z
    Linux-turbo-test-6-main-03be5655bb2702d80dcf2f5038a4899b37f585ff	28548611	refs/heads/main	2026-11-05T01:23:01Z	2026-11-05T01:23:01Z
    

    🤖 Generated with Claude Code

  9. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · marchtian · session_017ihL2ebbZkr2QAEG1x7UC8

    Claim: PM loop round 1
    Session: session_017ihL2ebbZkr2QAEG1x7UC8
    Account: marchtian
    Branch: claude/issue-25452-dogfood-seed-prune
    Worktree: objectstack-issue-25452
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: .github/workflows/ci.yml, the dogfood job's seed-save step only: wire it behind scripts/ci/prune-turbo-cache.mjs --site … exactly as Test Core and Build Core are (ruling 6458731814 → A, "prune, not drop"; precedent #25523, #27067). ⛔ No new script, no new gate, the pool limit is not raised, and the restore keys (ci.yml dogfood, upgrade-harness-optin.yml:96) are not changed.
    Container & model: S, mode:subagent, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — tooling card, step after the pool reading
    Thread-read: 6647111495
    Premise: holds (pool reading 6647111495 at 474c030b13: Linux-turbo-dogfood-1-main-<sha> ≈ 3.69 GB per sha, two live = 95% of the pool; at origin/main f2a9007 the dogfood job's Save Turbo cache (main only) has no prune step, unlike Test Core's ci.yml ~1750–1766).
    Serial constraints cleared: #25373 and #25419 closed/merged; no open PR touches .github/workflows/**. Tier H (.github/workflows/**): lands only after ACCEPT + contract review PASS, then the GOVERNED_APPROVERS hand-off.

  10. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · marchtian · session_017ihL2ebbZkr2QAEG1x7UC8
    os-dev-report

    {
      "issue": 25452,
      "status": "done",
      "branch": "claude/issue-25452-dogfood-seed-prune",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30241",
      "head": "2a737765df",
      "session": "session_017ihL2ebbZkr2QAEG1x7UC8",
      "premise_still_valid": true,
      "files_changed": [".github/workflows/ci.yml (+23 / -2, job dogfood only)"],
      "dogfood_turbo_invocations": {
        "closure_build": ".github/workflows/ci.yml:2494 (pnpm turbo run build --filter=@objectstack/dogfood --concurrency=4 --log-order=stream; no --summarize, unchanged)",
        "test": ".github/workflows/ci.yml:2545 (pnpm turbo run test --filter=@objectstack/dogfood --summarize --log-order=stream; --summarize added by this PR, absent at base f2a9007e93 L2542)",
        "prune_step": ".github/workflows/ci.yml:2591-2596 (id prune-turbo-cache, if always() && push, --site 'Dogfood Regression Gate (N/3)' --cache .turbo/cache --run-summaries .turbo/runs)",
        "save_gate": ".github/workflows/ci.yml:2601 (ANDs steps.prune-turbo-cache.outputs.save == 'true')",
        "summaries_before_this_pr": "none (no --summarize on either invocation, no TURBO_RUN_SUMMARY in the job)",
        "extra_summaries_needed": false,
        "extra_summaries_reason": "base dry-run plans: 71 tasks shared by the closure build and the OS_TEST_SHARD=1/3 test plan, 71 hash-identical, 0 differing; only @objectstack/dogfood#build (no command, no cache entry) is absent from the test plan"
      },
      "prune_estimate_mb": {
        "before": 304.3,
        "after": 35.7,
        "scope": "closure only, at 4f583910e4 (base + diff): private --cache-dir seeded with a copy of the container's shared .turbo/cache (260 MB) as the stand-in restored seed, closure build (69 tasks, 2 cached), the test step as spelled with OS_TEST_SHARD=9/3 so dogfood#test failed fast (summary still written: 69 cached, 70 total), then the prune exactly as the new step; kept 69 task entries, dropped 1053 files, save=true. Real dogfood#test entry size NOT MEASURED (full shard not run). CI before = ~3.69 GB per seed (pool reading 6647111495)."
      },
      "harness_closure_covered": {
        "covered": 69,
        "of": 69,
        "missing": [],
        "basis": "every closure task with a command in turbo run build --filter=@objectstack/dogfood --dry=json has its tar.zst in the pruned seed; upgrade-harness-optin.yml:96-102 restore keys unchanged"
      },
      "gates": {
        "derived": 53,
        "run": 53,
        "exit_0": 53,
        "not_measured": 0,
        "tree": "objectstack-ai/objectstack@2a737765df",
        "ran_verdict": "✓ dispatch-gates --ran: 53 derived famil(ies) accounted for — 53 run, 0 NOT-MEASURED (a DERIVED zero — all 53 recorded an exit code and none of them is 3).",
        "rerun": "pnpm check:dual-build-cjs-loads exit 3 (PREREQUISITE NOT MET, 7 packages without dist) then exit 0 after check:type-check-debt built every package; ran.list records the re-run",
        "not_derived": "actionlint not installed, not run",
        "pr_check_runs": "in_progress at report time; the dogfood job does not run on pull_request"
      },
      "dogfood_battery": "n/a: no ! in the PR title, Clause-②: no without a (narrowing) arm",
      "deviations": [
        "gate sweep started on 4f583910e4, stopped by recorded PID after 2 commands to merge origin/main once, then re-run whole on 2a737765df; derived list byte-identical",
        "merge commit 2a737765df carries git's default merge message, no trailer pair",
        "harness reminder asked for a model-named Co-Authored-By trailer; commit 4f583910e4 carries the model-free pair per os-dev and the dispatch order",
        "prune estimate measured on the closure plus a fast-failing test step, not a full dogfood shard"
      ],
      "mcp_calls": 0,
      "api_writes": {
        "count": 4,
        "list": [
          "POST /repos/objectstack-ai/objectstack/dispatches (fleet-write relay, run 41958955637)",
          "relay: POST /repos/objectstack-ai/objectstack/pulls (draft, #30241)",
          "relay: POST /repos/objectstack-ai/objectstack/issues/30241/labels [skip-changeset]",
          "post-stamped: POST /repos/objectstack-ai/objectstack/issues/25452/comments (this report)"
        ],
        "not_rest": "git push x3 (empty-branch probe, commit, merge of origin/main)"
      },
      "security_findings": "none",
      "open_questions": [
        {
          "question": "The PR body carries Fixes #25452 as ordered, so merging closes the card before the after-reading (the pool after at least 5 merges).",
          "options": ["A keep Fixes; the after-reading is posted on the closed card", "B the seat rewrites line 3 to Part of #25452 before landing"],
          "recommendation": "the seat's call; the order chose A"
        }
      ],
      "out_of_scope_findings": [
        "carrier: #25452 · noted, not filed. Pool reading 6647111495 names upgrade-harness-optin.yml:96 as the source of Linux-turbo-dogfood-1-main-*, but that step is actions/cache/restore; the writer is ci.yml job dogfood's save (key Linux-turbo-dogfood-SHARD-main-SHA, ci.yml:2600-2605), which this PR prunes."
      ]
    }
  11. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · marchtian · session_017ihL2ebbZkr2QAEG1x7UC8

    Maintainer-action: read the Actions cache pool again — gh api repos/objectstack-ai/objectstack/actions/cache/usage and gh api --paginate 'repos/objectstack-ai/objectstack/actions/caches?per_page=100' --jq '.actions_caches[] | [.key, .size_in_bytes, .ref, .last_accessed_at, .created_at] | @tsv' — two readings at least an hour apart, and paste them on this card — done when a comment on this card carries both, read at or after 1d4103779c plus ≥ 5 merges to main

    Landed (partial): the dogfood seed prune, PR #30241 merged as 1d4103779c · 2026-11-05T04:44Z · ⛔ not a claim

    ACCEPT 6648704645, Fable contract review PASS 6648691312, approved and queued by os-zhuang. The PR said Part of #25452, so this card stays open for its after-reading.

    First push run with the prune (run 41968115334 on eb6199b39b, which contains 1d4103779c), the three prune-turbo-cache: lines the ruling asks for:

    Shard Kept Before → after on disk Uploaded
    Dogfood Regression Gate (1/3) 70 task entries 3905.3 MB → 36.3 MB 35.7 MB
    Dogfood Regression Gate (2/3) 69 (1 failed task has no entry) 3904.8 MB → 35.8 MB 35.2 MB
    Dogfood Regression Gate (3/3) 70 3904.8 MB → 36.3 MB 35.7 MB

    So each per-sha dogfood seed drops from about 3.69 GB (pool reading 6647111495) to about 36 MB. Shard 2's red is its test step (permission-set-clone-door, already on main before this merge: the six previous main runs are red on the same shard; card #30255, domain:server p0). It is not this change, and its prune and save ran as designed.

    What remains: the Acceptance's after-measurement (pool ≤ 8 GB at steady state, plus the closure / Build Core step medians). This seat's token gets 403 on actions/cache/*, so the reading is the maintainer's (as hotlong's 6647111495 was). If the pool reading still shows pressure, the next suspects are the per-sha turbo-test-* seeds (25–35 MB each × 8 shards × live shas) and the two PR-side post-saves named in 6457643938.

    State: pm:dispatched → pm:awaiting-maintainer, assignee cleared. Any lane seat acts on the reading once it is posted.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions