Skip to content

Topic: objectui's turbo cache never replays for Lint and shadows itself across jobs — //#lint:root couples every package's lint hash to every tracked file (the objectui#12222 disease), and four jobs restore the bare turbo-<os>- key #12276

Closed

Description

@objectstack-fleet

Topic card, filed by the director seat (summon #37, session_01LqNgdPZB2Jnr5HpGbaqLeB) under the maintainer's words 「立卡你决定,不需要我同意」 and 「后续能否你负责分析和立卡,具体的开发任务交给车道经理」 (2026-10-12): the seat files, the domain:devx lane manager claims, dispatches and lands. ⛔ Not a claim. Filing gate ①: a measured defect with named landing points, from objectui#12222's dev report and ACCEPT (6126154639), carried there as "a card for the lane once this lands".

Protects: the Lint required context's wall on every pull request and queue build, and the turbo cache the type-check job now prunes and keys per job (objectui#12222): a cache that never replays costs a full lint each run; a bare restore key restores another job's multi-GB cache.

What is measured (objectui#12222's dev, on main before 1ce8db8d; re-measure on today's main first)

  1. //#lint:root has the default inputs (turbo.json: "//#lint:root": { "outputs": [], "cache": false }, no inputs), so this root task hashes every tracked file (about 8,600), and every package's lint task dependsOn it ("lint": { "dependsOn": ["//#lint:root"], "inputs": ["$TURBO_DEFAULT$", "$TURBO_ROOT$/eslint.config.js", "$TURBO_ROOT$/eslint-rules/*.js"] }). Measured: one untracked docs/ file moves 46 of 46 lint hashes, so the Lint job's restored cache replays nothing, ever. The same coupling on //#type-check:e2e was fixed in objectui#12222 (PR ci(type-check): the turbo cache replays unchanged packages, and pull-request and queue runs type-check only what the change affects (objectui#12222) #12251) by giving the root task its own inputs: "//#type-check:e2e": { "inputs": ["e2e/**", "playwright*.config.ts", "tsconfig.e2e.json"] }. lint:root is eslint . --ignore-pattern 'packages/*/**' --ignore-pattern 'examples/*/**' --ignore-pattern 'apps/*/**' --ignore-pattern 'docs/**': its inputs are the root-level sources and eslint.config.js / eslint-rules/*.js, not the packages.
  2. Four jobs restore the bare turbo-${{ runner.os }}- key (actions/cache restore-keys): lint.yml line 333 (key turbo-<os>-<sha>, fallback bare), ci.yml line 2454 (the docs job: turbo-<os>-docs- then bare), changeset-release.yml line 719, performance-budget.yml line 236. objectui#12222 measured the shape on the type-check job before it moved to turbo-<os>-type-check-<sha> with a per-job prefix only: the bare fallback matched another job's 2 GB cache on the PR's own ref, 321 of 401 entries unused, and by the fourth run nothing could be restored. The three bare-key jobs save and restore each other's caches; the docs job's second fallback does the same.

What to build (one PR, or two if the lane prefers; the type-check job's shape is the template)

Acceptance

  • On main after landing: the first three pull_request runs' Lint jobs replay their lint tasks from the cache (the report step's notice: hits ≥ 40 of 46 on a one-package change) and the job's wall against the before median (read it first: the Lint job's Run linter step over the last 20 PR runs); no job restores another job's cache (the restored key's prefix is the job's own in the notice).
  • ⛔ lint itself, eslint's config and rules, and every other job untouched.

Related: objectui#12222 · PR #12251 (merge 1ce8db8d; ACCEPT 6126154639; landing 6126541762) · objectui#12272 (the other #12251 follow-up, in flight) · turbo.json · lint.yml · ci.yml (the docs job) · changeset-release.yml · performance-budget.yml.

Activity

  1. added
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    and removed on Oct 12, 2026
  2. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round R85 · domain:devx @ objectui seat 1, on the card's routing (the director seat files, the lane manager claims, dispatches and lands; the maintainer's words 「后续能否你负责分析和立卡,具体的开发任务交给车道经理」) · 2026-10-13T01:10Z
    Session: session_011oKFDZMRoPGDbStvxQa172
    Account: os-justin
    Branch: claude/issue-12276-lint-turbo-cache
    Worktree: objectui-issue-12276
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: turbo.json (the //#lint:root entry only), the turbo actions/cache steps of .github/workflows/lint.yml (the Lint job), .github/workflows/ci.yml (the docs job only), .github/workflows/changeset-release.yml and .github/workflows/performance-budget.yml, the pins in scripts/__tests__/ that read those steps or that entry, and content/docs/guide/ci-cd-pipeline.md only where it states these keys; ⛔ not the lint task, eslint's config or rules, ⛔ no other job or step (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: opus (the default judgment tier; dispatch-gates --tier --repo objectstack-ai/objectui over the five paths: no path-derived mandate). Governed by the maintainer's ruling 「两仓加治理行」 on .github/workflows/** (objectui#12255 lands the row): the seat treats the PR as Tier H, draft until a GOVERNED_APPROVERS member approves.
    Clause-②: no
    Responsibility: n/a — not a defect card
    Thread-read: none
    Serial constraints cleared: objectui#12278 (this round, this seat) edits two comments in changeset-release.yml (lines 736 and 1220 on 74964ad6); this card's bare-key restore there is at line 719 and its save at 1452: region-disjoint, ordinary concurrency, the later lander merges main. objectui#12255 (this round) edits no workflow file. No other open PR touches these files (4 open PRs read). Same-day churn: ci.yml took objectui#12277 (48fb558d) and objectui#12262 (a1a917a0) after this card was filed, so the card's line numbers have moved.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 12276,
    "status": "done",
    "branch": "claude/issue-12276-lint-turbo-cache",
    "pr": "#12290",
    "session": "session_011oKFDZMRoPGDbStvxQa172 — the dispatching seat's session (this run is its subagent)",
    "premise_still_valid": true,
    "summary": "Measured, then changed. H1 re-measured on 74964ad: //#lint:root hashed 8652 inputs and one untracked docs/ file moved 46/46 package lint hashes. turbo.json now gives it inputs = the ESLint-linted extensions (**/*.js|cjs|mjs|ts|tsx) minus the lint:root script's four --ignore-pattern trees, plus !**/node_modules/**: under explicit inputs turbo 2.10.9 also hashes git-ignored files (first draft: 64008 inputs, 63598 under the root node_modules). After the change it has 410 inputs: ESLint's own 407 (--format json), public/mockServiceWorker.js, and the root package.json/turbo.json that turbo adds on its own. Probes: untracked docs/, .changeset/ and content/ files move 0/46; a file in one package moves 1/46; a root scripts/ or e2e/ file, eslint.config.js or the root package.json moves 46/46. A real run (turbo run lint --filter=@object-ui/types, TURBO_RUN_SUMMARY) replays the package lint warm and still replays with an untracked docs/ file. The four bare-fallback caches (Lint, Build Docs, Changeset Release, Bundle Analysis) now copy the type-check shape: a per-job prefix (lint/docs/release/perf) as the only restore key; PR and queue runs never save; the saving runs prune via report-turbo-cache.mjs --prune; every run posts the Turbo cache notice with the restored key. H5 falsified: 14/20 main push Lint runs and 16/20 Bundle Analysis runs succeeded, so a push-only save warms the cache and no schedule was added. Before reading for the PR body: Run linter median 276.5 s over the 20 newest PR runs. New pins: the //#lint:root inputs against ESLint's own walk, and the five turbo caches as one population. Seven ablations, all red, all restored.",
    "tests": "All at the head 741484a: pnpm exec vitest run --maxWorkers=2 --shard=1/2 scripts/__tests__ exit 0 (Test Files 93 passed | 1 skipped (94); Tests 3228 passed | 1 skipped); --shard=2/2 exit 0 (Test Files 94 passed | 1 skipped (95); Tests 2403 passed | 1 skipped). An earlier unsharded run at 146ae93 was red: render-budget-comment.test.ts had 3 failures (the perf trigger closure, the !cancelled() count, the env contract). 741484a resolves them, and the shards above are the re-run. Ablations go through objectstack scripts/ablation-replace.mjs in WRAP mode; each mutation is proven by the anchor count and a blob change, each restore by blob == HEAD and an empty git diff HEAD. A1: inputs key renamed, 3 red in turbo-lint-inputs.test.ts. A2c: node_modules exclusion renamed, 1 red. A3b: bare restore key re-added in lint.yml, 1 red. A4b: perf save loses its push clause, 1 red. A5b: docs Build Site loses TURBO_RUN_SUMMARY, 1 red. A6: release key back to the shared turbo-OS-SHA, 1 red. A7: perf prefix nested under lint-, 1 red. The first attempts at A2-A5 were refused by the tool (the replacement was a substring of the anchor, or the anchor was ambiguous), so nothing was measured; they were re-run with valid anchors. No build or dist step is involved: the pins read source files directly.",
    "mcp_calls": "0 — no MCP tool called",
    "api_writes": "2 relay strokes (fleet-write, objectstack-fleet[bot]): (1) pr_create = POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos//issues/12290/assignees [os-justin], read back identical 14086/14086 bytes; (2) this os-dev-report = POST /repos//issues/12276/comments. Each stroke went through POST /repos/objectstack-ai/objectstack/dispatches. git push of the branch is not a REST write. Zero label writes: the labels on #12290 (documentation, configuration, ci/cd, tests) come from labeler.yml.",
    "gates": [
    {
    "command": "pnpm exec vitest run --maxWorkers=2 --shard=1/2 scripts/tests",
    "exit": 0,
    "verdict": "Test Files 93 passed | 1 skipped (94); Tests 3228 passed | 1 skipped (3229); os-verify-lock VERDICT command-exit 0",
    "head": "741484ae"
    },
    {
    "command": "pnpm exec vitest run --maxWorkers=2 --shard=2/2 scripts/tests",
    "exit": 0,
    "verdict": "Test Files 94 passed | 1 skipped (95); Tests 2403 passed | 1 skipped (2404); os-verify-lock VERDICT command-exit 0",
    "head": "741484ae"
    },
    {
    "command": "pnpm type-check:scripts",
    "exit": 0,
    "verdict": "os-verify-lock: VERDICT command-exit 0 (tsc --listFilesOnly lists all four changed test files)",
    "head": "741484ae"
    },
    {
    "command": "pnpm exec eslint scripts/tests/turbo-lint-inputs.test.ts scripts/tests/report-turbo-cache.test.ts scripts/tests/turbo-task-guard-coverage.test.ts scripts/tests/render-budget-comment.test.ts",
    "exit": 0,
    "verdict": "(no output)",
    "head": "741484ae"
    },
    {
    "command": "pnpm check:control-bytes",
    "exit": 0,
    "verdict": "check-control-bytes: OK (scanned 8568 tracked text file(s); skipped 85 binary).",
    "head": "741484ae"
    },
    {
    "command": "pnpm check:new-line-citations",
    "exit": 0,
    "verdict": "VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0",
    "head": "741484ae"
    },
    {
    "command": "pnpm check:action-ref-convention",
    "exit": 0,
    "verdict": "check-action-ref-convention: 109 action reference(s) in 29 workflow file(s), 13 distinct; 0 off-convention and undeclared, 0 stale exception(s)",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-pre-install-import-graph.mjs --self-test",
    "exit": 0,
    "verdict": "check-pre-install-import-graph self-test: 16 cases pass",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-pre-install-import-graph.mjs",
    "exit": 0,
    "verdict": "OK — 39 pre-install step(s) in 19 job(s) run 34 scripts/ gate(s); 40 module(s) walked, every non-relative leaf a node builtin.",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-shell-escape-residue.mjs",
    "exit": 0,
    "verdict": "check-shell-escape-residue: OK (5/5 root(s) resolved ...)",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-doc-links.mjs",
    "exit": 0,
    "verdict": "Links are valid across 17 scan roots.",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-doc-fence-languages.mjs --self-test",
    "exit": 0,
    "verdict": "check-doc-fence-languages self-test: 26 cases pass",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-doc-fence-languages.mjs",
    "exit": 0,
    "verdict": "check:doc-fences — every TypeScript block in 227 document(s) is fenced ts/tsx/typescript, except 2 declared file(s)",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-changeset-presence.mjs",
    "exit": 0,
    "verdict": "No source or published contract of a released package changed in this range, so no changeset is owed.",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-changeset-no-major.mjs",
    "exit": 0,
    "verdict": "No changeset declares a major bump.",
    "head": "741484ae"
    },
    {
    "command": "node scripts/check-governed-queue-guard.mjs --test (the 11 changed paths)",
    "exit": 0,
    "verdict": "NOT GOVERNED — 11 path(s) checked against 5 governed surface(s); none matched. (objectui#12255 lands the workflow row in parallel; the seat treats this PR as Tier H, and the body carries the maintainer quick-read section.)",
    "head": "741484ae"
    },
    {
    "command": "NOT MEASURED locally: repo-wide pnpm lint, the build-dependent repo-gates (doc snippet/example/JSON fence types, skill examples), and the workflows themselves",
    "exit": null,
    "verdict": "CI-owned. This diff adds no fenced block. The PR exercises Lint, Build Docs (turbo.json and ci.yml are in its pathspec) and Bundle Analysis (its own file). The release job runs only on main.",
    "head": "741484ae"
    }
    ],
    "line_budget": "n/a (none named in the dispatch)",
    "deviations": [
    "File surface beyond the claim's literal list; each item is forced by the card's prune/report ask or by a pin. (a) env: TURBO_RUN_SUMMARY on the four turbo-running steps (Run linter, Build Site, and the two Build packages steps): the prune and the report read the run summary. (b) New Report what the turbo cache replayed and Prune the turbo cache to what this run used steps in each of the four jobs. (c) performance-budget.yml paths: (push and pull_request) gain scripts/report-turbo-cache.mjs: render-budget-comment.test.ts pins that every script the job runs is in its trigger closure. (d) render-budget-comment.test.ts is edited (it was not on H6's list): !cancelled() count 3 to 4, env scan scoped to the render step, closure entry added. (e) ci-cd-pipeline.md names the report script in the docs row and the Lint, Performance Budget and Changeset Release sections, not only where keys are stated: ci-cd-pipeline-doc.test.ts pairs every first-party command a job runs with its doc section. (f) changeset-release.yml: the save step's derivation comment had a premise the change falsifies (the shared key), so it was rewritten. The two comment lines objectui#12278 edits were not touched.",
    "H5 falsified (push runs mostly complete), so no schedule trigger was added to lint.yml or performance-budget.yml; they save on push only.",
    "Each new bookkeeping step carries timeout-minutes: 1, derived from the measured 87 ms run of the report script. The template's 2 was not inherited (objectui#7048 fences inheriting a number). Bookkeeping stays within half of each job's ceiling: 7/25, 7/15, 7/40, 7/25.",
    "The shared shallow clone was deepened by 150 commits (git fetch --deepen=150 origin main, a shared .git/shallow) for the 200-merge census.",
    "turbo in a linked worktree writes its cache under the MAIN checkout's .turbo/cache: the replay probe left 3 files (one entry, hash cca15f79830bd54e) in /home/user/objectui/.turbo/cache, a git-ignored path. Those 3 files, which were the directory's entire contents, and the then-empty .turbo/ dirs were removed afterwards.",
    "Commit trailers are model-free (Claude-Session + Co-authored-by: Claude), per objectui AGENTS.md. The harness reminder asked for a model-named Co-Authored-By; AGENTS.md takes precedence."
    ],
    "files_changed": [
    ".changeset/12276-lint-turbo-cache.md",
    ".github/workflows/changeset-release.yml",
    ".github/workflows/ci.yml",
    ".github/workflows/lint.yml",
    ".github/workflows/performance-budget.yml",
    "content/docs/guide/ci-cd-pipeline.md",
    "scripts/tests/render-budget-comment.test.ts",
    "scripts/tests/report-turbo-cache.test.ts",
    "scripts/tests/turbo-lint-inputs.test.ts",
    "scripts/tests/turbo-task-guard-coverage.test.ts",
    "turbo.json"
    ],
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none (承接者:无) · noted, not filed · Root package.json / turbo.json and every lint:root-linted file still move all 46 package lint hashes: turbo adds the two manifests to every root task's inputs, and lint dependsOn //#lint:root. In the last 200 merges up to 74964ad, 28 touched one of these. Decoupling needs the lint task's dependsOn changed, which the card fences off. Recorded in the PR's Acceptance notes. · dedupe words: lint dependsOn lint:root, root task inputs package.json, turbo hash fold",
    "carrier: none (承接者:无) · noted, not filed · Under explicit inputs, turbo 2.10.9 hashes git-ignored files; measured with a git-ignored dist/ probe file and node_modules. //#type-check:e2e's e2e/** therefore hashes git-ignored files under e2e/ on a local tree. CI checks out fresh, so no public door shows a wrong answer, and there is no reach. · dedupe words: turbo inputs gitignored, explicit inputs node_modules, type-check:e2e inputs",
    "carrier: the next edit of scripts/report-turbo-cache.mjs · noted, not filed · The script header still names only ci.yml's type-check use (TURBO_RUN_SUMMARY on Run type-check, prune on the full battery). That is still true but now incomplete: five jobs use the script. · dedupe words: report-turbo-cache header, turbo run summary users",
    "carrier: none (承接者:无) · noted, not filed · Lint push runs replay without TURBO_FORCE, unlike the type-check full battery; they rely on the derived inputs guard. Considered and not changed (not asked by the card). · dedupe words: lint TURBO_FORCE push, lint full battery"
    ]
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR objectui#12290 at head 741484ae · 2026-10-13T02:18Z · domain:devx @ objectui seat 1, session_011oKFDZMRoPGDbStvxQa172.
    Implemented-by: os-dev subagent of this session (report 6136521542, branch claude/issue-12276-lint-turbo-cache)
    Reviewed-by: the claiming seat, session_011oKFDZMRoPGDbStvxQa172 (os-justin)

    Checklist (read on GitHub, not from the report):

    • PR shape: draft, base main, body line 1 Fixes #12276, a line-start Clause-②: no; a scan of the whole body finds no other closing keyword.
    • turbo.json: //#lint:root gains inputs covering the five linted extensions minus the lint:root script's four ignore trees and **/node_modules/**. It stays cache: false. Nothing else in turbo.json moves.
    • The four caches take the type-check template. lint.yml (lint-), ci.yml docs (docs-), changeset-release.yml (release-) and performance-budget.yml (perf-) each have one per-job restore prefix and no bare fallback. Pull-request and queue runs never save; the saving runs prune through report-turbo-cache.mjs --prune first. Every run posts the report notice.
    • CI on 741484ae: 30 success; the coverage legs and dependabot are skipped by design. The PR's own runs read as expected. Lint: "lint 0/46 replayed · uncached //#lint:root (410 input files) · restored nothing (cold)", cold because no main entry exists yet under the new lint- prefix. Build Docs: restored turbo-Linux-docs-… with "161 (2958.8 MB) not used by this run", the bloat the push-side prune removes. Bundle Analysis is cold under perf-.
    • Pins: turbo-lint-inputs.test.ts checks the inputs against ESLint's own lint:root walk. Its positive controls are eslint.config.js and a root script reached, and a walk of more than 100 files. report-turbo-cache.test.ts holds the five turbo caches as one population. The report's seven ablations (each red, each restore proven by blob) fit the diff.
    • Changeset: .changeset/12276-lint-turbo-cache.md, empty frontmatter; Changeset Declaration green.
    • Size: 11 files, +537/−19, under the 3,000-line threshold.

    File surface amended (the report's deviations a–f): the claim's list grows by the TURBO_RUN_SUMMARY env on the four turbo-running steps of those jobs, and the new report and prune steps in each of the four jobs. It also adds scripts/report-turbo-cache.mjs to performance-budget.yml's paths: (required by render-budget-comment.test.ts's trigger-closure pin), the edit to render-budget-comment.test.ts itself, the ci-cd-pipeline.md sections that ci-cd-pipeline-doc.test.ts pairs with each job's commands, and the rewritten derivation comment on the release save step. Each item is forced by the card's own report-and-prune ask or by a pin that reads it. The two changeset-release.yml comment lines objectui#12278 edited (now merged as 15701796) are untouched.

    H5 falsified, accepted: 14 of the 20 newest main push Lint runs and 16 of 20 Bundle Analysis runs succeeded. A push-only save warms the cache, so no schedule was added.

    Governed: the central register (check-governed-merges.mjs --pr) answers NOT governed, because its workflow row waits on objectstack#23048. objectui's own guard governs .github/workflows/** once PR objectui#12289 (in the merge queue now) lands. The seat applies the stricter reading, the maintainer's 「两仓加治理行」: Tier H. The PR stays a draft with needs-user-decision, and a review is requested from both GOVERNED_APPROVERS.

    Out-of-scope readings (4): each is Acceptance notes, none is filed. (1) Root package.json/turbo.json and every lint:root-linted file still move all 46 hashes, because of the dependsOn coupling the card fences off: 28 of the last 200 merges touched one. (2) Under explicit inputs, turbo hashes git-ignored files locally; CI checks out fresh, so there is no reach. (3) The report-turbo-cache.mjs header is incomplete; carrier: its next edit. (4) Lint push runs skip TURBO_FORCE.

    After landing (the seat's, owed): the card's acceptance on main. The first three pull_request Lint runs after the first main push save must replay at least 40 of 46 lint tasks on a one-package change. Their Run linter wall goes against the before median of 276.5 s (the PR body). No job's notice may name another job's prefix.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · 2026-10-13T02:46Z · domain:devx @ objectui seat 1, session_011oKFDZMRoPGDbStvxQa172.

    PR objectui#12290 merged through the queue as 9d313ebe on main (GitHub's merged_at: 2026-10-13T02:46:13Z). The authorised approval, ready and auto-merge were the maintainer's own hand (os-zhuang). This is the first workflow PR to pass the queue guard after PR objectui#12289 (45ae6b89) made .github/workflows/** governed.

    • Content probe on origin/main 9d313ebe: in turbo.json, //#lint:root carries 10 inputs entries and stays cache: false. There are 0 bare turbo-OS- restore keys left in lint.yml, ci.yml, changeset-release.yml and performance-budget.yml. lint.yml carries the lint- prefix (3 hits).
    • The card closed completed through Fixes. pm:dispatched and the assignee are removed right after this comment.

    Still owed by this seat (the card's acceptance on main, ACCEPT 6136770133):

    • The first main push Lint run after 9d313ebe saves under the lint- prefix.
    • The next three pull_request Lint runs must then replay at least 40 of 46 lint tasks on a one-package change, according to their Turbo cache notice.
    • Their Run linter wall goes against the 276.5 s before median.
    • No job's notice may name another job's prefix.

    The reading is posted here when those runs exist. If it fails, it is filed as a regression against 9d313ebe.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Acceptance on main: met · 2026-10-13T05:09Z · domain:devx @ objectui seat 1, session_011oKFDZMRoPGDbStvxQa172. This discharges the reading owed in the landing note 6137086103. Every value is read from each run's own Turbo cache notice (check-run annotation) and from its Run linter step timestamps.

    main push saves:

    run head notice Run linter
    38338476451 9d313ebe (the merge) 0/46 replayed · restored nothing (cold) · pruned then saved 191 s
    38339757540 5d3f437a 41/46 replayed · restored turbo-Linux-lint-9d313ebe… 93 s

    The first three pull_request Lint runs after the merge (the card's acceptance), plus the fourth:

    run PR packages changed replayed restored key Run linter
    38341087445 objectui#12298 1 45/46 turbo-Linux-lint-5d3f437a… 24 s
    38343895302 objectui#12299 4 42/46 turbo-Linux-lint-fd4872f9… 37 s
    38345167297 objectui#12299 4 42/46 turbo-Linux-lint-fd4872f9… 29 s
    38348110250 objectui#12304 3 43/46 turbo-Linux-lint-fd4872f9… 43 s
    • Replay: the one-package change replays 45 of 46, against the card's bar of at least 40. On the multi-package PRs the tasks that re-ran equal the packages changed (4, 4, 3), which is the hash isolation the inputs fix was for.
    • Wall: Run linter is 24 / 37 / 29 s on the three acceptance runs, against the before median of 276.5 s (the PR body's reading over the 20 newest PR runs before the change).
    • Cross-job restore: every restored key carries this job's own lint- prefix. The PR runs skipped prune and save, as designed.

    Nothing further is owed on this card.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopriority:p2tooling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions