Skip to content

ci: attribute the production test-import consumer planning timeout #2465

Description

@schlessera

Current disposition — 2026-10-21

2026-10-21 bounded source/evidence review complete. Parent verified 44 files / 9,850,334 bytes, manifest SHA256 a81a51597c184ba64799145af5a25c7cb395b1adfe170e19b524c50c2af4373e, and independently checked the immutable producer-source hashes and refusal ordering. The review passed 48 retained-data/source checks; no workload or production test ran. Metered extraction/analysis/validation subtotal: 1.360 seconds wall, 0.078 seconds self CPU and 0.364 seconds waited Git-child CPU, excluding exploration, drafting and orchestration.

Additional comparison limit: the original failed checkout's frozen generated-CSS producer audit first rejects scripts/check-pr.ts (ninth entry); the diagnostic first rejects scripts/build-receipt.ts (third). Both conservatively refuse if reached. Actual call counts were not recorded, so this is not a measured saving. Observer imports also change transitive discovery inputs. Equal selected test bytes do not establish equal planning work. No producer repinning or fallback change is proposed.

The browser entrypoint lists match: 321 entries / 174 distinct paths. Duplicate entrypoints hit mode-aware visited state; they are not 147 extra same-mode parses. There is a narrow optional bookkeeping opportunity to avoid repeated package-scope Set/string insertion within one graph, but its benefit is unmeasured and it is not a timeout repair. No such implementation is allocated.

The following bounded observation design is retained for a future independently required execution opportunity, not a new standalone dispatch:

  • Observe only the two actual real-root consumer planning calls. Record coarse wall/own CPU, attempted/completed inventory/parse/resolution/scope/producer operations, unresolved outcomes, and result membership. Where input equality is claimed, digest actual consumed source/metadata and lookup outcomes without rereading the tree; uncovered inputs remain unknown.
  • Preserve invocation/span/PID-start identity, existing external resource sampling and original 30-second testcase / 15-second listing budgets. Optional scheduler accounting must report unsupported fields as unavailable. No guessed GC hook, forced GC, heap walk, dependency patch, global filesystem patch, changed affinity or profiler escalation.
  • Bound additions to two targets, 256 records, 16 KiB per record, 2 MiB output and 8 MiB recorder state. Caps, write errors, missing identities or incomplete spans invalidate diagnostic conclusions while original workload results and failures retain their behavior. Required offline controls cover observation transparency, known operation counts, changing source/metadata/loader semantics, exact selection/deadlines and cap/identity refusal, with named mutations.
  • At most one separately authorized, already-required execution after those controls. Stop after the outcome: failure may localize a supported hypothesis; green leaves this recurrence unresolved; incomplete capture names the missing discriminator. No repeated green search or automatic second allocation.

The design is suitable for future scoped implementation, but no implementation or additional runtime/hosted opportunity is allocated now. Specific GC attribution and internal Node prepare/close remain unavailable. The original acceptance criteria remain: establish a failure mechanism, prove a targeted correction without weakening guarantees, and complete applicable qualifying proof. Passing diagnostics or bookkeeping changes do not meet them.

Bounded investigation handoff: releasing only parent claim e1849-2465-20261021-r5-recurrence. Keep this issue open with needs: repro, without agent-ready, and retain milestone 0.44.0 for the delivered telemetry slice. Resume when a concrete required candidate/execution can carry the bounded evidence, or new failing-window evidence identifies a mechanism. PR #2464 stays draft/unwatched; no integration reservation is held. #2473 has separate work in PR #2475; no ownership is taken over. #2319 activation remains deferred.

Current analysis — 2026-10-21

2026-10-21 retained hosted trace analysis complete for run 39619980273, diagnostic head c39e9f6. Parent independently rehashed all 52 analysis files / 8,213,525 bytes (manifest SHA256 e26a9b1e659c2728d88e0ae6a7e48e01c3523d1d9eca92ae3adbc1c2f43d13a8), checked raw target phase arithmetic and fixture endpoints. The analysis includes 58 independent validation assertions.

Both passing targets retain all expected coarse phase pairs. Application/types import discovery took 6.143 / 3.725 seconds; four closure scans totaled 5.915 / 5.395 seconds; real Node listing took 3.910 / 3.861 seconds; final unitFiles took 12.249 / 12.895 milliseconds. These are observations from passing calls, not attribution of the original timeout or a matched saving.

All 25 fixture builds finished before the first target, by 4.270 seconds. Worker 1 consumed CPU during the first target's graph phase; it had finished before the second target. This neither reproduces fixture/compiler overlap nor establishes contention as the cause. Sampled target windows do not support sustained memory exhaustion or storage stall in these passing calls; the failed run lacks equivalent raw phase/resource evidence.

All 210 selected files remain byte-identical, ordered 104/106 file partitions and testcase membership match. Within-file registration differs at 102 positions in dependency-edges.test.ts. All six fewer assertions map to the unchanged storage-maintenance polling case (38 to 32); source accounts for six fewer polling iterations, but per-poll traces are unavailable. This is not identical execution history.

Limits are retained: 40 unmatched listing starts belong to later scratch-fixture calls, with their precise caught exception unrecorded; 286 process I/O reads and 37 status reads are unavailable. Internal Vitest prepare/close boundaries are absent; beforeExit is not close. Wrapper completeness and empty sampled survivors do not prove full capture or containment. Metered final analysis scripts cost 2.233 seconds wall / 2.060 seconds self CPU plus 0.094 seconds waited Git-child CPU, excluding preparation, exploratory work and orchestration. No workload was executed by the analysis.

The original timeout mechanism remains unresolved. The diagnostic aggregate correctly rejects this cadence; no readiness or qualifying proof follows. Next is one bounded read-only source/evidence design review of import discovery and closure scanning: specify a falsifiable hypothesis, missing failing-window evidence, observer limits and a stop criterion. No new test, workload, hosted dispatch or correction is allocated. #2464 remains draft/unwatched; #2473 and deferred #2319 remain separate.

Completed diagnostic; evidence analysis pending — 2026-10-21

2026-10-21 changed diagnostic 39619980273, attempt 1, completed. The observed unit shard passed; the unchanged aggregate correctly rejected diagnostic cadence with Candidate selection cadence is missing or inconsistent. No qualifying proof or timeout repair is claimed.

Actual metadata, unit and aggregate checkout logs all identify c39e9f6, tree d02726e7a2c96c3a06ca1ffa1aaa52935501273d, verified against the immutable commit. Runtime is the supplied Node v22.23.3. Unit worker 1 reports 1,183 tests / 7,257 assertions; worker 2 reports 1,352 / 14,065; zero failures/skips. Original consumer cases passed at 16.002497 and 13.007916 seconds, one assertion each, with unchanged deadlines. Other categories were intentionally not executed. The worker-2 assertion total differs from the earlier failed run and will be reconciled per case; no assertion-count equivalence is assumed.

Both artifact digests were verified: unit-proof-4 SHA256 402c8e9c4bee9ce3cba9dff081d3757bb85f347a1ebf9277cd27a87add411083 and metadata ledger d1db319275b86a374c530b60b4f74d34e40f2ee4448b17bec081d9e13abf3a15. Full raw job logs, source identity, JUnit, phases, fixture snapshots and resource series are retained. The wrapper exits 0 naturally after 762.430 seconds, both EOFs joined, no watchdog, no reported capture errors/cap exhaustion and no sampled survivors. Its 763 samples used 3.848 seconds sampling wall; wrapper self CPU was 3.662 seconds, excluding workload CPU. Capture completeness remains narrower than phase/descendant completeness or proof qualification.

Executed job walls are 29 / 803 / 15 seconds, 847 summed seconds, excluding queue and not representing process CPU. These are diagnostic costs, not a matched saving against the failed run. No further invocation is allocated. Next is read-only analysis of the retained phase/resource/worker/fixture evidence, original testcase ordering and assertion differences, with explicit limits on whether the slow condition or natural fixture overlap occurred. A passing observed shard alone does not close #2465. #2464 stays draft/unwatched and no merge lock is held.

Historical runtime-corrected hosted allocation — 2026-10-21

2026-10-21 parent accepted the observer compatibility correction at c39e9f6, tree d02726e7a2c96c3a06ca1ffa1aaa52935501273d, directly above the prior diagnostic c2cd133. Parent independently verified all 5,847 indexed files / 448,197,132 bytes; manifest SHA256 78120d3e6e2e66ecc6b7aadf7e2bb2a80805bcedaa969852377af10ae2cb7bc2.

The three-file change admits exact hosted Node 22.23.3 while requiring native TypeScript stripping, retains the existing Node 24 path, and adds actual supported/unsupported controls. The private exact Node 22.23.3 archive matched official upstream checksums. Real preload, lifecycle, failure, cancellation, bounded capture and unsupported-runtime sentinel controls passed; 129 focused tests / 1,068 assertions, strict types, source/partition refusals and unchanged aggregate rejection pass. No hosted runtime installation, PATH override, workload implementation, original testcase, workflow or deadline changed in this increment. The historical selected 210 testcase hashes and 104/106 ordered partitions remain intact.

Parent allocates exactly one changed diagnostic run on isolated test/2465-hosted-observer-r9 at that immutable SHA, using the retained 2465-r8 diagnostic protocol. Existing metadata/unit shard 4/4/aggregate jobs, 1,500-second wrapper plus 10-second cleanup, normal job caps and artifact retention remain. The aggregate must remain nonpassing; this is attribution evidence, not qualifying proof or a repair branch. No additional arm or automatic retry is allocated. Record actual checkout/runtime/source and any missing evidence before drawing conclusions.

The previous run 39616281963 remains a terminal prerequisite failure with zero workload execution and 65 summed job-seconds. It is not relabelled as this changed run. Node 24 local observations do not establish the older timeout runtime or cause. #2465 remains unresolved, #2464 stays draft/unwatched, no integration reservation is acquired, and #2473/#2319 status is unchanged. The one changed diagnostic is run 39619980273, workflow_dispatch at c39e9f6, initially queued. Remote branch and workflow bytes were read back before dispatch. Actual job/result verification remains pending.

Historical observer prerequisite failure — 2026-10-21

2026-10-21 diagnostic run 39616281963, attempt 1, stopped before workload setup. The actual runner supplies Node v22.23.3; the observer-specific Linux Node 24 prerequisite refused it. No original test, private worker build, runtime setup or planner timing invocation ran. This is a diagnostic preparation failure, not recurrence or resolution of the consumer timeout.

Metadata succeeded; unit stopped at the runtime prerequisite; the unchanged aggregate rejected diagnostic cadence as designed. All three executed job checkout logs identify c2cd133, tree ca56f169421bec1c224f43f029c67e098fe13949, verified against the immutable commit. Other categories were intentionally skipped. Raw logs and both downloaded artifacts were retained and digest-verified: unit-proof-4 SHA256 476edf96cfc0d5ab00199f32b684dab86187008d8db07f2746eb0d1617c51deb; metadata ledger cdecba61b30a2f5d2a0dc376280cd9f9b7b945da9eca7232fe9a35301febbc03. The runtime identity artifact records the supplied executable and versions. Executed job walls were 27 / 23 / 15 seconds, 65 summed seconds; no workload CPU or performance gain is claimed.

Next is bounded local observer compatibility work against the actual supplied Node 22.23.3, using a verified private runtime and real preload/process controls. Preserve the workload's existing Node selection; do not install a different runner runtime or relabel prior Node 24 observations. The observer prerequisite may recognize capabilities only after proving the observer works under them, while still refusing unsupported execution before the workload. All product test/listing deadlines, guards, historical selected tests/partitions and aggregate rejection remain. No full shard, original-case replay, push or hosted dispatch is allocated to this correction round. Parent will review a changed candidate before deciding any later allocation; this failed run remains terminal and will not be retried unchanged.

#2465 remains unresolved. #2464 stays draft/unwatched; no integration reservation exists for this diagnostic. #2473 and deferred #2319 retain their separate status.

Historical hosted allocation — 2026-10-21

2026-10-21 parent review accepted the corrected diagnostic preparation at c2cd133, tree ca56f169421bec1c224f43f029c67e098fe13949, retaining candidate base c2932a6. Parent verified all 772 indexed files / 2,762,055 bytes, manifest SHA256 3b96c4f111c17002241b378f5d126e3902093468d6d09aba92e317151aaec569, reviewed the final diff and independently reran the formerly failing copied-planner control successfully.

The fixture dependency is supplied without changing its assertions. Short snapshot writes are marked incomplete, real workload failures and cancellation stay nonzero, bounded capture errors remain visible, and focused local checks pass: 129 tests / 1,068 assertions plus routing/refusal/writer/process controls. All 210 historical selected test hashes and ordered 104/106 worker partitions remain. Ordinary CI routes retain their behavior. Diagnostic cadence is deliberately rejected by the unchanged aggregate; this is not qualifying partial proof.

Parent allocates exactly one hosted observation on isolated branch test/2465-hosted-observer-r8 at that immutable SHA, using the existing CI metadata, unit shard 4/4 and aggregate jobs. The wrapper cap is 1,500 seconds plus 10 seconds cleanup; existing job caps remain. No other shard, arm or retry is allocated. Record actual workflow/job checkout and runtime identities, phase/resource evidence, original worker histories and fixture timing. The aggregate is expected to fail even if the observed unit shard passes. Internal Vitest close/preparation events remain unavailable; do not infer them from beforeExit. Missing evidence or a green observed shard alone cannot close #2465.

This is a new instrumented diagnostic, not a retry for green or a repair candidate. No PR readiness, integration reservation, merge, push to a merged branch or #2319 activation occurs. #2464 remains draft and the independent #2473 requirement remains open. The one dispatch is run 39616281963, workflow_dispatch on c2cd133, initially queued. Remote branch SHA and workflow bytes were independently read back before dispatch. Actual result and job checkout verification remain pending.

Historical observer review — 2026-10-21

2026-10-21 hosted-observer preparation reviewed. Parent verified 182 files / 1,805,557 bytes, manifest SHA256 72c8b79bc6597d853add4958d819de8a652414b66fe11bb0e07ae30249610c36. Local diagnostic head d921223 remains unpublished and is not dispatch-ready.

The prepared observer records coarse planner phases, Node bootstrap/exit, bounded process/resource series and fixture build snapshots. It preserves the target deadlines and uses no installed dependency patches. Internal Vitest prepare/close events are unavailable; Node lifetime cannot be called post-close retention. A small sampler control used 17.3 ms self CPU over 3.218 seconds, which does not establish hosted overhead.

Parent review reproduced a concrete related regression: the existing copied-planner executable test fails at its child-exit assertion because the copied ci-plan.ts imports hosted-observer.mts, which that fixture does not supply. This is a preparation defect, not timeout evidence. The correction must audit all copied-script consumers and preserve historical target assertions and partitions. Build snapshot short-write reporting also needs a checked control before relying on complete capture.

The proposed narrow dispatch is acceptable only as explicitly non-qualifying diagnosis on an isolated diagnostic ref: normal PR/main/scheduled/default-manual behavior must remain, the original unit job and shard 4/4 workload remain, and the unchanged aggregate must reject the diagnostic cadence. It is not an exception allowing partial proof to pass. Next preparation round will correct the fixture regression, apply and validate the exact routing proposal locally, and test on/off and wrong identity/partition refusals. No push, dispatch, reservation, readiness transition, original-case replay or full shard is allocated to that round. Parent review of the final immutable diff and recorded checks precedes any hosted allocation.

Historical worker observation — 2026-10-21

2026-10-21: the single four-CPU original-shard observation is complete. Parent independently verified 179 files / 198,918,024 bytes; manifest SHA256 f09399cc2deb36f95f9c1c61538477563c168e30d32ca91401eec80ac4a1ebad.

The diagnostic descendant 17a592bf2ffeb1d5fbc0f8fbe62c9817e3d4c598 has candidate c2932a6 as its sole parent. Both real production worker lifecycles completed with the original ordered 104/106 file partitions, private dependencies/builds, all guards and cleanup intact: 2,535 passes, zero failures/skips. The original consumer cases passed at 13.965 / 13.541 seconds. Node close-to-exit was 3.805 / 3.847 ms; the former telemetry-retention interval remains absent locally.

No build-freshness fixture overlapped either consumer case. The first of 25 retained fixture builds began 109.092 seconds after the second planner completed. Four-CPU affinity and full worker file history did not reproduce the hosted timing relationship. No hosted cause, corrective implementation or performance saving is established.

Complete testcase membership matches. Worker 2 has 114 within-file registration-order differences in dependency-edges.test.ts, whose source uses unsorted filesystem enumeration. Fourteen fewer dynamic assertions arise in polling/PDF page loops; unchanged source and per-case differences are retained, while the PDF pagination cause remains unresolved. Local Chrome 140 differs from hosted 155; kernel, hardware, memory and filesystem conditions also differ. This is not identical hosted execution or qualification of the unmodified candidate.

Command cost: 739.999 seconds wall / 1,470.429 seconds waited-tree CPU, including 70.318 seconds private worker preparation and 667.832 seconds worker execution. The external sampler consumed another 81.107 seconds self CPU. Raw resource/phase series, observer overhead limits, source/dependency audits, EOF and zero owned PID/start survivors are retained. No repeated invocation occurred.

Next step is to prepare a reviewable, portable hosted observation for this attribution: narrow phase and process/resource evidence, complete original worker histories, natural fixture overlap if it occurs, bounded sampling overhead and artifact retention. Existing test/listing deadlines, partition rules, assertions, guards and aggregate failure behavior must remain. Parent review precedes any hosted allocation; no dispatch, reservation, readiness transition or speculative correction is authorized in preparation. Another green run alone cannot close this issue. #2464 stays draft, #2465 remains needs: repro, and the separate #2473 scope remains open.

Historical standalone diagnostic — 2026-10-21

2026-10-21 recurrence diagnostic: parent independently verified all 142 indexed files / 25,626,155 bytes, manifest SHA256 54d96390289ddedb68c7ad11cc43cb1aa9772ab81e17f7e005226ac040cfac15. The two allocated local commands completed; no new cause or corrective implementation is established.

Both original production consumer cases pass unchanged (11.020 / 9.291 seconds) and with observation spans (9.769 / 9.804 seconds), preserving the 30-second test and 15-second listing limits. Measured local phase walls: unit graph 2.63–2.77 seconds, four closures 4.03–4.20 seconds, Node listing 2.94–2.96 seconds. Node exits about 8 ms after collector close; no old seven-second retention is observed locally. These inclusive scopes must not be added twice. Local affinity is 32 CPUs with no observed quota, unlike the hosted four-CPU runner; worker history and concurrent ordinary builds were not reproduced.

The retained hosted build probes all precede the failing interval. The overlapping build-freshness fixtures normally delete their own probes. Logs establish overlap, but retained whole-VM totals lack the per-process phase/CPU/I/O data required to assign its cause. The unchanged planner source also traverses changed repository inputs, so equal planner code alone does not prove equal workload.

Exactly two diagnostic commands cost 40.655 seconds wall / 60.071 seconds waited-tree CPU. Preparation command sums were 94.240 / 115.170 seconds, with overlapping setup and exclusions recorded separately. Source and dependency bytes were restored; clean checkout and no recorded owned survivors verified. These are diagnostic costs, not measured savings or hosted qualification.

That single local observation is now complete, with its outcome and limits recorded above. No further local shard replay is allocated.

Reopened after hosted recurrence — 2026-10-21

2026-10-21 confirmation on head c2932a6 failed. Unit shard 4 timed out in the actual production consumer check for packages/ui-server/src/brain/application.ts: 34,011.94 ms against the unchanged 30,000 ms limit. The following module-jobs/types.ts check passed in 26,568.12 ms. Worker 2 finished with 1,351 pass / one fail / 14,071 assertions. JUnit records tests/unit-test-consumers.test.ts:16, TimeoutError and one assertion.

Actual unit and aggregate checkout was 0f552f3, tree f432f5af7bef9c11bf79dbd03104d85a2e787506, with parents main c2f080f and candidate c2932a6. All other 15 pre-aggregate jobs succeeded; the aggregate correctly refused selected unit failure. This is not the older cancelled run. Raw logs and the 48-entry unit-proof-4 artifact are retained; artifact SHA256 73bc86c864e73b28435ea15326640dfd9da8c17cdc8b89e4527ec47f41b04abe.

The telemetry opt-out delivered in #2468 is present. Its measured local mechanism correction and successful candidate/main delivery remain valid evidence, but they do not resolve this recurrence or establish its cause. Concurrent worker build tests are visible in the log; their causal contribution is unproven. The next step is retained-artifact/source attribution and a bounded phase diagnostic, preserving both actual production consumer assertions, fallback and all original deadlines. No unchanged hosted retry or speculative planner correction is allocated.

The coordinator released its exact owned integration reservation and independently verified no active reservation. PR #2464 is draft again; no merge occurred. #2465 is reopened for further attribution. Full #2457 completion also still requires #2473 and its loaded rerun; #2319 activation remains deferred.

Delivered telemetry correction — 2026-10-21

2026-10-21 delivery complete: #2468 merged as b393bf4, milestone 0.44.0. Candidate confirmation 39563361981 and automatic main push 39566209688, attempt 1 each, both pass all 17 jobs. Every actual selected job checkout, including verification, packaging and aggregate, was independently read from its checkout log. Candidate checkout 0a97ff4 has parents 419f3a5 and 33fd422; the squash has that main parent and matching tree 307865609240c7de2907d143e6fc668996d9f972. All main jobs checked out the squash. Both aggregates prove all nine selected categories with no retained jobs. Main ancestry and PR/issue milestones are verified; the integration reservation is released.

The original production consumer cases pass on main at 12,358.60 ms and 11,421.13 ms, with unchanged 30-second limits. Candidate/main elapsed costs are 1,355 / 1,255 seconds; summed job time is 10,447 / 10,057 seconds, zero cancellations in these two runs. These are distinct-run observations, not a matched hosted saving. The earlier superseded draft cancellation is preserved separately. The measured local mechanism correction remains 33.653 to 19.543 seconds on its recorded source pair, with actual telemetry-timer red/restored controls, equal inventories/plans and meaningful consumer-selection/fallback mutations. Historical hosted timeout attribution remains explicitly unproven; no historical failure or criterion is erased.

#2468's scoped telemetry correction and its local, selected hosted and main proof were complete at that delivery. The later recurrence below reopens the remaining timeout attribution; #2457/#2279 and the epic are not thereby complete. #2319 activation stays deferred.

Established local mechanism and correction scope — 2026-10-21

On the exact failed tree, actual installed Vitest discovery publishes the complete inventory and closes in about 2.9 seconds. Two Storybook telemetry retry chains then retain Node for about 7.1 seconds through referenced 1/2/4-second timers. Source and measured timer stacks identify the retry path; all four observed calls naturally exit 0 and preserve 382 project/file records, 234 unique files and 15 projects. This establishes a local avoidable delay, not a retrospective cause for the hosted 37.326-second timeout.

The delivered change implements the supported discovery-child STORYBOOK_DISABLE_TELEMETRY=1 opt-out in discoverBrowserClosures (scripts/browser-input-closure.ts:340-342 at the failed tree), matching browserInventory in scripts/proof-inputs.ts:76-87. Preserve all discovery calls, project inventories, graph/metadata/loader/fallback rules, offline guards, and original test/listing deadlines. Prove removal of the observed retry mechanism with a named failing/restored control, compare actual inventories/plans/categories, and measure costs. No broader planner cache or source-scan optimization is included.

The installed dependency audit found pre-existing REPRO1973 browser-session trace lines outside the exercised collector path. Preserve old attribution and verify new qualification dependencies from a fresh private cache against published package integrity before relying on them; do not mutate a shared cache. Compare the consumed Vitest/Storybook files used to establish this mechanism. This is a local prerequisite/evidence check, not a claim that the hosted dependency bytes matched.

Parent verified all 111 round-3 archive files / 67,490,559 bytes, manifest SHA256 ac4db1daefe835b644f0a98df6dae7a21b43d2f3019b130976dcb2d63c7f5d3a. Diagnostic commands cost 68.390 seconds wall / 60.347 seconds waited-tree CPU; preparation is separate. Original evidence and acceptance criteria below remain intact. The scoped correction is delivered with the complete proof recorded above; any recurrence requires further attribution.

Observation

Hosted candidate confirmation for PR #2464 recorded a genuine timeout before its unit shard was cancelled. Run 39522289975, attempt 1, unit (4) tested checkout 9d70c46, tree 3b639c2ddf92125d266dfb762c9c5147e41f14ea, with parents e2deae1 and 063f5a0.

The named production check for cross-workspace consumers of packages/ui-server/src/brain/application.ts timed out at 37,325.69 ms against its unchanged 30,000 ms budget. The following module-jobs/types.ts case passed at 23,020.78 ms. Worker 2 completed with 1,351 passes / one failure / 14,069 assertions, exit 1, before job cancellation. Worker 1 reported 1,183 passes / zero failures. The aggregate job was cancelled with no executed steps. Neither cancelled check supplies proof; the earlier test timeout must not be hidden by its job conclusion.

The unit-proof-4 artifact retains actual checkout, worker identities/timings and JUnit. JUnit identifies tests/unit-test-consumers.test.ts:16, time 37.325687, TimeoutError and one assertion. Raw log and artifact were preserved by the coordinator. No worker scheduling or scanner phase cause is established.

Source and scope

The production cases at tests/unit-test-consumers.test.ts:13-19 call planChecks with actual repository workspaces, then assert the required consumer in unitFiles. Relevant entrypoints are planChecks (scripts/ci-plan.ts:238), unitFiles (scripts/ci-proof.ts:36), discoverUnitImports (scripts/unit-test-consumers.ts:31) and addUnitImportConsumers (scripts/unit-test-consumers.ts:206), verified at 063f5a0. Those files are unchanged from its main base. This does not establish that changed repository input size, worker concurrency or another environmental factor is irrelevant.

The tests preserve #2404's maintainer-selected additive test-import consumers and conservative fallback. The issue belongs to #1849's feedback-cost work. It is separate from #2464's owned-prune source-anchor regression, and requires its own attribution before a new candidate confirmation can count as qualified.

Out of scope

No timeout increase, skipped production-path case, reduced consumer assertions, weakened fallback or blanket global selection to make the check cheap. No unchanged hosted retry for green, broad product cancellation change or claim that #2404's correctness guarantee is invalid. Do not fold an unrelated planner optimization into the metadata cancellation PR.

Acceptance criteria

  • Preserve the actual failed head/base/checkout, test, deadline, raw log, JUnit and resource/worker context; distinguish the timeout from later cancellation.
  • Identify the expensive production phase and relevant source/input or execution condition with a bounded diagnostic. Record wall/CPU costs and unresolved observation limits; a passing unchanged local run alone is not a diagnosis.
  • Propose and prove a correction only when its mechanism is established. Keep the actual planChecks-to-unitFiles guarantees for both cross-workspace consumers, all existing exact-edge/metadata/loader fallback assertions, and existing timeout/offline guards.
  • Preserve meaningful failing-first/mutation controls, including cases where removal of consumer selection or conservative fallback must fail, and demonstrate restored behavior.
  • Required local and selected hosted proof must complete on the actual corrected candidate before closure. Missing or cancelled proof remains incomplete.

Next action and contract impact

The telemetry correction remains delivered by #2468. The recurrence remains unresolved; the bounded investigation and source/evidence review are complete. The observation specification above is retained for a future independently required execution opportunity after scoped implementation and offline validation. No new standalone diagnostic, unchanged retry, implementation or runtime allocation is active. Resume on a concrete required candidate/execution or new failing-window evidence, preserving all original acceptance criteria, selection/fallback guarantees and deadlines. Claim e1849-2465-20261021-r5-recurrence is released; needs: repro remains. No public contract change is proposed.

Activity

  1. added
    type: testCoverage, harness or proof work with no behaviour change.
    area: ciCI workflows, the gates they run, release scripts, packaging.
    priority: p2Wanted, not scheduled. Pulled in when a milestone has room.
    needs: reproBlocked on a reproduction.
    on Oct 21, 2026
  2. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    Source/artifact audit completed for failed head 063f5a0 and hosted checkout 9d70c46. Raw log and JUnit confirm the named 37.326-second timeout and worker exit 1 before cancellation. The four cited planner/test files are unchanged from the candidate base; runtime inputs and conditions remain relevant.

    Each explicit-root production planning call constructs a fresh unit-import graph and repeats filename discovery, then runs installed Vitest listing and capture/browser/layout/endurance input-closure scans. Source establishes repeated work, but retained artifacts contain no per-phase CPU/wall measurements establishing its cost or the timeout cause. Worker overlap and the faster second input are confounded by order, input and warmed state. Historical whole-plan timings cannot substitute for this failed run.

    Next is a bounded two-command diagnostic after the separate prune-anchor worker releases the local resource slot: original two production cases, then the same cases with observation-only phase spans. Preserve actual planChecks-to-unitFiles assertions, the original 30-second test and 15-second listing limits, offline guards and conservative fallback. Each command has a 120-second outer bound; preparation and self/child/process-tree CPU are accounted separately. No full shard, pressure run, unchanged hosted retry or production correction is part of this diagnostic. A local green run alone will not establish a repair.

    Implementation is not yet specified; needs: repro and the qualification dependency remain.

  3. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    Bounded phase diagnostic completed on the original failed tree 3b639c2d / checkout 9d70c46, with one private frozen install and full build separately accounted. Both original production consumer cases passed unchanged (17.043 / 16.772 s) and with observation spans (17.250 / 16.682 s). The hosted 37.326-second timeout was not reproduced; no repair is claimed.

    The measured local cost is concentrated in installed Node/Vitest listing: 10.090 / 10.108 s, successful exits below the unchanged 15-second cap. Total browser discovery including four closures costs 14.300 / 14.012 s; unit graph construction costs 2.907 / 2.632 s. Four closure walks perform 4,357 parses over 1,393 unique files, but their roughly 2-second parse subtotal is not the dominant listing cost. Filename discovery totals only about 16–18 ms. These phase spans are inclusive and must not be added together.

    Both actual planChecks-to-unitFiles assertions ran with the original 30-second test limits. Traced inventories are nonglobal, 838 / 815 units, with manifest floors and 761 conservative fallback owners preserved. Full baseline-versus-traced inventory equality was not measured; only the original two inclusion assertions are a cross-arm behavioral comparison. Original hosted worker history/contention and filesystem state were not recreated. Node child phase/CPU remained unmeasured; a repeated approximately ten-second listing does not establish a timer, stall or shutdown cause.

    The two diagnostic commands used 69.067 s wall / 61.631 s waited-tree CPU. Separate preparation used 67.239 s wall / 107.114 s waited-tree CPU; other hashing/analysis costs are disclosed separately. Instrumentation was restored, source remains clean, and recorded owned processes were absent. Parent verified 164 archive files / 124,744,503 bytes; manifest SHA256 ea6ce89f8202bbf86d689475f7e7289699dc9d8de6e268ea81f18575390bb4bc.

    Next diagnostic is allocated to the same Node/Vitest process: observe collector/config preparation, specification enumeration, output and close, preserving argv, discovery scope, offline conditions, deadlines and exit behavior. At most two serial bounded commands, with the second only for a newly identified narrower observation. No optimization or hosted retry is authorized by this evidence. needs: repro and the qualification dependency remain.

  4. added
    agent-readyContext and acceptance criteria are complete enough for an agent to take this unattended.
    and removed
    needs: reproBlocked on a reproduction.
    on Oct 21, 2026
  5. self-assigned this
    on Oct 21, 2026
  6. added this to the 0.44.0 milestone on Oct 21, 2026
  7. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    Claim e1849-2465-20261021-r4-telemetry. Parent coordinator owns this issue; a single delegated worker will implement and qualify the supported discovery-child telemetry opt-out on branch fix/2465-discovery-telemetry-r4. Historical hosted attribution remains separate, all original selection/assertion/deadline guarantees remain, and no hosted dispatch or merge-window reservation is allocated to the child.

  8. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    2026-10-21 delivery complete: #2468 merged as b393bf4, milestone 0.44.0. Candidate confirmation 39563361981 and automatic main push 39566209688, attempt 1 each, both pass all 17 jobs. Every actual selected job checkout, including verification, packaging and aggregate, was independently read from its checkout log. Candidate checkout 0a97ff4 has parents 419f3a5 and 33fd422; the squash has that main parent and matching tree 307865609240c7de2907d143e6fc668996d9f972. All main jobs checked out the squash. Both aggregates prove all nine selected categories with no retained jobs. Main ancestry and PR/issue milestones are verified; the integration reservation is released.

    The original production consumer cases pass on main at 12,358.60 ms and 11,421.13 ms, with unchanged 30-second limits. Candidate/main elapsed costs are 1,355 / 1,255 seconds; summed job time is 10,447 / 10,057 seconds, zero cancellations in these two runs. These are distinct-run observations, not a matched hosted saving. The earlier superseded draft cancellation is preserved separately. The measured local mechanism correction remains 33.653 to 19.543 seconds on its recorded source pair, with actual telemetry-timer red/restored controls, equal inventories/plans and meaningful consumer-selection/fallback mutations. Historical hosted timeout attribution remains explicitly unproven; no historical failure or criterion is erased.

    #2465's scoped correction and required local, selected hosted and main proof are complete. #2464 now needs a current-main refresh and its own exact-candidate qualification; #2457/#2279 and the epic are not thereby complete. #2319 activation stays deferred.

  9. 9 remaining items

  10. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    2026-10-21 diagnostic run 39616281963, attempt 1, stopped before workload setup. The actual runner supplies Node v22.23.3; the observer-specific Linux Node 24 prerequisite refused it. No original test, private worker build, runtime setup or planner timing invocation ran. This is a diagnostic preparation failure, not recurrence or resolution of the consumer timeout.

    Metadata succeeded; unit stopped at the runtime prerequisite; the unchanged aggregate rejected diagnostic cadence as designed. All three executed job checkout logs identify c2cd133, tree ca56f169421bec1c224f43f029c67e098fe13949, verified against the immutable commit. Other categories were intentionally skipped. Raw logs and both downloaded artifacts were retained and digest-verified: unit-proof-4 SHA256 476edf96cfc0d5ab00199f32b684dab86187008d8db07f2746eb0d1617c51deb; metadata ledger cdecba61b30a2f5d2a0dc376280cd9f9b7b945da9eca7232fe9a35301febbc03. The runtime identity artifact records the supplied executable and versions. Executed job walls were 27 / 23 / 15 seconds, 65 summed seconds; no workload CPU or performance gain is claimed.

    Next is bounded local observer compatibility work against the actual supplied Node 22.23.3, using a verified private runtime and real preload/process controls. Preserve the workload's existing Node selection; do not install a different runner runtime or relabel prior Node 24 observations. The observer prerequisite may recognize capabilities only after proving the observer works under them, while still refusing unsupported execution before the workload. All product test/listing deadlines, guards, historical selected tests/partitions and aggregate rejection remain. No full shard, original-case replay, push or hosted dispatch is allocated to this correction round. Parent will review a changed candidate before deciding any later allocation; this failed run remains terminal and will not be retried unchanged.

    #2465 remains unresolved. #2464 stays draft/unwatched; no integration reservation exists for this diagnostic. #2473 and deferred #2319 retain their separate status.

  11. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    2026-10-21 parent accepted the observer compatibility correction at c39e9f6, tree d02726e7a2c96c3a06ca1ffa1aaa52935501273d, directly above the prior diagnostic c2cd133. Parent independently verified all 5,847 indexed files / 448,197,132 bytes; manifest SHA256 78120d3e6e2e66ecc6b7aadf7e2bb2a80805bcedaa969852377af10ae2cb7bc2.

    The three-file change admits exact hosted Node 22.23.3 while requiring native TypeScript stripping, retains the existing Node 24 path, and adds actual supported/unsupported controls. The private exact Node 22.23.3 archive matched official upstream checksums. Real preload, lifecycle, failure, cancellation, bounded capture and unsupported-runtime sentinel controls passed; 129 focused tests / 1,068 assertions, strict types, source/partition refusals and unchanged aggregate rejection pass. No hosted runtime installation, PATH override, workload implementation, original testcase, workflow or deadline changed in this increment. The historical selected 210 testcase hashes and 104/106 ordered partitions remain intact.

    Parent allocates exactly one changed diagnostic run on isolated test/2465-hosted-observer-r9 at that immutable SHA, using the retained 2465-r8 diagnostic protocol. Existing metadata/unit shard 4/4/aggregate jobs, 1,500-second wrapper plus 10-second cleanup, normal job caps and artifact retention remain. The aggregate must remain nonpassing; this is attribution evidence, not qualifying proof or a repair branch. No additional arm or automatic retry is allocated. Record actual checkout/runtime/source and any missing evidence before drawing conclusions.

    The previous run 39616281963 remains a terminal prerequisite failure with zero workload execution and 65 summed job-seconds. It is not relabelled as this changed run. Node 24 local observations do not establish the older timeout runtime or cause. #2465 remains unresolved, #2464 stays draft/unwatched, no integration reservation is acquired, and #2473/#2319 status is unchanged. Run identity and outcome remain pending at this allocation.

  12. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    The single changed diagnostic is run 39619980273, workflow_dispatch on exact c39e9f6. Remote SHA/workflow bytes match the reviewed source. Initially queued; no result or qualifying proof is claimed. Diagnostic aggregate rejection remains required. No integration reservation or PR readiness change occurred.

  13. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    2026-10-21 changed diagnostic 39619980273, attempt 1, completed. The observed unit shard passed; the unchanged aggregate correctly rejected diagnostic cadence with Candidate selection cadence is missing or inconsistent. No qualifying proof or timeout repair is claimed.

    Actual metadata, unit and aggregate checkout logs all identify c39e9f6, tree d02726e7a2c96c3a06ca1ffa1aaa52935501273d, verified against the immutable commit. Runtime is the supplied Node v22.23.3. Unit worker 1 reports 1,183 tests / 7,257 assertions; worker 2 reports 1,352 / 14,065; zero failures/skips. Original consumer cases passed at 16.002497 and 13.007916 seconds, one assertion each, with unchanged deadlines. Other categories were intentionally not executed. The worker-2 assertion total differs from the earlier failed run and will be reconciled per case; no assertion-count equivalence is assumed.

    Both artifact digests were verified: unit-proof-4 SHA256 402c8e9c4bee9ce3cba9dff081d3757bb85f347a1ebf9277cd27a87add411083 and metadata ledger d1db319275b86a374c530b60b4f74d34e40f2ee4448b17bec081d9e13abf3a15. Full raw job logs, source identity, JUnit, phases, fixture snapshots and resource series are retained. The wrapper exits 0 naturally after 762.430 seconds, both EOFs joined, no watchdog, no reported capture errors/cap exhaustion and no sampled survivors. Its 763 samples used 3.848 seconds sampling wall; wrapper self CPU was 3.662 seconds, excluding workload CPU. Capture completeness remains narrower than phase/descendant completeness or proof qualification.

    Executed job walls are 29 / 803 / 15 seconds, 847 summed seconds, excluding queue and not representing process CPU. These are diagnostic costs, not a matched saving against the failed run. No further invocation is allocated. Next is read-only analysis of the retained phase/resource/worker/fixture evidence, original testcase ordering and assertion differences, with explicit limits on whether the slow condition or natural fixture overlap occurred. A passing observed shard alone does not close #2465. #2464 stays draft/unwatched and no merge lock is held.

  14. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    2026-10-21 retained hosted trace analysis complete for run 39619980273, diagnostic head c39e9f6. Parent independently rehashed all 52 analysis files / 8,213,525 bytes (manifest SHA256 e26a9b1e659c2728d88e0ae6a7e48e01c3523d1d9eca92ae3adbc1c2f43d13a8), checked raw target phase arithmetic and fixture endpoints. The analysis includes 58 independent validation assertions.

    Both passing targets retain all expected coarse phase pairs. Application/types import discovery took 6.143 / 3.725 seconds; four closure scans totaled 5.915 / 5.395 seconds; real Node listing took 3.910 / 3.861 seconds; final unitFiles took 12.249 / 12.895 milliseconds. These are observations from passing calls, not attribution of the original timeout or a matched saving.

    All 25 fixture builds finished before the first target, by 4.270 seconds. Worker 1 consumed CPU during the first target's graph phase; it had finished before the second target. This neither reproduces fixture/compiler overlap nor establishes contention as the cause. Sampled target windows do not support sustained memory exhaustion or storage stall in these passing calls; the failed run lacks equivalent raw phase/resource evidence.

    All 210 selected files remain byte-identical, ordered 104/106 file partitions and testcase membership match. Within-file registration differs at 102 positions in dependency-edges.test.ts. All six fewer assertions map to the unchanged storage-maintenance polling case (38 to 32); source accounts for six fewer polling iterations, but per-poll traces are unavailable. This is not identical execution history.

    Limits are retained: 40 unmatched listing starts belong to later scratch-fixture calls, with their precise caught exception unrecorded; 286 process I/O reads and 37 status reads are unavailable. Internal Vitest prepare/close boundaries are absent; beforeExit is not close. Wrapper completeness and empty sampled survivors do not prove full capture or containment. Metered final analysis scripts cost 2.233 seconds wall / 2.060 seconds self CPU plus 0.094 seconds waited Git-child CPU, excluding preparation, exploratory work and orchestration. No workload was executed by the analysis.

    The original timeout mechanism remains unresolved. The diagnostic aggregate correctly rejects this cadence; no readiness or qualifying proof follows. Next is one bounded read-only source/evidence design review of import discovery and closure scanning: specify a falsifiable hypothesis, missing failing-window evidence, observer limits and a stop criterion. No new test, workload, hosted dispatch or correction is allocated. #2464 remains draft/unwatched; #2473 and deferred #2319 remain separate.

  15. removed their assignment
    on Oct 21, 2026
  16. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    2026-10-21 bounded source/evidence review complete. Parent verified 44 files / 9,850,334 bytes, manifest SHA256 a81a51597c184ba64799145af5a25c7cb395b1adfe170e19b524c50c2af4373e, and independently checked the immutable producer-source hashes and refusal ordering. The review passed 48 retained-data/source checks; no workload or production test ran. Metered extraction/analysis/validation subtotal: 1.360 seconds wall, 0.078 seconds self CPU and 0.364 seconds waited Git-child CPU, excluding exploration, drafting and orchestration.

    Additional comparison limit: the original failed checkout's frozen generated-CSS producer audit first rejects scripts/check-pr.ts (ninth entry); the diagnostic first rejects scripts/build-receipt.ts (third). Both conservatively refuse if reached. Actual call counts were not recorded, so this is not a measured saving. Observer imports also change transitive discovery inputs. Equal selected test bytes do not establish equal planning work. No producer repinning or fallback change is proposed.

    The browser entrypoint lists match: 321 entries / 174 distinct paths. Duplicate entrypoints hit mode-aware visited state; they are not 147 extra same-mode parses. There is a narrow optional bookkeeping opportunity to avoid repeated package-scope Set/string insertion within one graph, but its benefit is unmeasured and it is not a timeout repair. No such implementation is allocated.

    The following bounded observation design is retained for a future independently required execution opportunity, not a new standalone dispatch:

    • Observe only the two actual real-root consumer planning calls. Record coarse wall/own CPU, attempted/completed inventory/parse/resolution/scope/producer operations, unresolved outcomes, and result membership. Where input equality is claimed, digest actual consumed source/metadata and lookup outcomes without rereading the tree; uncovered inputs remain unknown.
    • Preserve invocation/span/PID-start identity, existing external resource sampling and original 30-second testcase / 15-second listing budgets. Optional scheduler accounting must report unsupported fields as unavailable. No guessed GC hook, forced GC, heap walk, dependency patch, global filesystem patch, changed affinity or profiler escalation.
    • Bound additions to two targets, 256 records, 16 KiB per record, 2 MiB output and 8 MiB recorder state. Caps, write errors, missing identities or incomplete spans invalidate diagnostic conclusions while original workload results and failures retain their behavior. Required offline controls cover observation transparency, known operation counts, changing source/metadata/loader semantics, exact selection/deadlines and cap/identity refusal, with named mutations.
    • At most one separately authorized, already-required execution after those controls. Stop after the outcome: failure may localize a supported hypothesis; green leaves this recurrence unresolved; incomplete capture names the missing discriminator. No repeated green search or automatic second allocation.

    The design is suitable for future scoped implementation, but no implementation or additional runtime/hosted opportunity is allocated now. Specific GC attribution and internal Node prepare/close remain unavailable. The original acceptance criteria remain: establish a failure mechanism, prove a targeted correction without weakening guarantees, and complete applicable qualifying proof. Passing diagnostics or bookkeeping changes do not meet them.

    Bounded investigation handoff: releasing only parent claim e1849-2465-20261021-r5-recurrence. Keep this issue open with needs: repro, without agent-ready, and retain milestone 0.44.0 for the delivered telemetry slice. Resume when a concrete required candidate/execution can carry the bounded evidence, or new failing-window evidence identifies a mechanism. PR #2464 stays draft/unwatched; no integration reservation is held. #2473 has separate work in PR #2475; no ownership is taken over. #2319 activation remains deferred.

  17. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    Recurrence after closure (2026-10-21). The same test timed out again in hosted unit (4) on #2475's confirmation run 39594559989 (job 119204171089), at head fb310b5e3dda088bf166ccbb81c0b0bbd93e78fb on base c2f080f20, which already includes #2468:

    (fail) production unit proof includes the cross-workspace consumer of packages/ui-server/src/brain/application.ts [33245.73ms]
      ^ this test timed out after 30000ms.
    

    #2475 changes only packages/ui-server/src/app.ts, packages/ui-server/src/brain/client.ts, one new test file, docs citations and a changeset. It does not touch application.ts or the consumer planner. This looks like the same planning-time margin and not a regression, but it is not attributed. Recording it here so the next occurrence can be correlated; if it recurs again, it may warrant reopening.

  18. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    Reopened (2026-10-21): the timeout recurred on 3/3 confirmation runs of #2475, after #2468. In each, tests/unit-test-consumers.test.ts › production unit proof includes the cross-workspace consumer of packages/ui-server/src/brain/application.ts timed out in hosted unit (4) worker 2:

    • 33.2 s (job 119204171089, head fb310b5e3)
    • 35.7 s (job 119370137071, head 0d915f7db)
    • 34.2 s (job 119382416149, head 0d915f7db)

    Recent passing durations of the same case: 17.9 s (main c2f080f20), 19.9 s (#2472), 12.4 s (b393bf459). Locally it takes 11–12 s. The case reads no PR diff. #2475 changes ui-server/src/app.ts, which widens the affected set, and in the failing runs the consumer test ran near the end of a ~110-file single-process worker list.

    Taking this on now: measure where planChecks + unitFiles spend the time, and remove repeated whole-repository work, without raising the deadline.

  19. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    Failing-window evidence from the #2478 observer (2026-10-22). #2475's confirmation run 39685067876, unit (3) (job 119517500798), head 8f2d1df15 on 2db5626d9: production unit proof includes the cross-workspace consumer of packages/ui-server/src/brain/application.ts timed out at 30,309 ms. The observer records are in unit-proof-3 under unit-worker-diagnostics/…/worker-2/tmp/unit-consumer-planning/.

    Passing (#2478 run, unit (2)) Failing (this run) module-jobs case, same failing run (passed)
    Wall 21,490 ms 30,044 ms 25,400 ms
    Main-thread CPU 15,406 ms 19,453 ms 17,201 ms
    Main-thread run-queue wait 9 ms 855 ms 276 ms
    Waited-for child CPU 9,360 ms 11,540 ms 10,730 ms
    Host PSI CPU "some" 492 ms 7,024 ms 3,724 ms
    Busiest other process runner agent, 60 ms /tmp/provjobd1752264878, 10,750 ms; worker 1 bun test + children ≈ 5,160 ms worker 1 children ≈ 3,000 ms; provjobd 90 ms

    Reading:

    1. Intrinsic CI cost leaves about 30% headroom. Uncontended, one call costs about 15 s of main-thread CPU plus about 9 s of CPU in waited-for synchronous children, about 21 s of wall time against the 30 s deadline. Locally on this host the same call is about 7 s of CPU and about 10.7 s of wall time. CI CPU is about 2× slower for this work.
    2. The failure coincides with host background load, not with run-queue starvation. In the failing window a runner-side process (/tmp/provjobd…, present but idle in the passing run) used 10.75 s of CPU, about a third of the window. The other unit worker added about 5 s, and host CPU pressure rose 14×. Run-queue wait stayed under 1 s, but the planner's own CPU time grew 26% (15.4 → 19.5 s) and child CPU 23%. That is what co-scheduled load on shared physical cores looks like. The deadline was crossed by 44 ms.
    3. This is not a fix(ui-server): cancel in-flight shared brain runs after a close grace period #2475 effect. The diff does not touch the planner; it only changes which files share the shard.

    Mechanism (supported, single failing window): a CPU-heavy whole-repository planning call, with thin CI headroom, crosses its 30 s deadline when runner background load (provjobd) and the concurrent worker inflate its CPU time. The earlier 33–36 s failures fit the same picture with heavier co-load, but they predate the observer.

    Correction directions that keep the guarantee (none selected yet; needs a ruling):

    • (a) Reduce intrinsic cost. The waited-for child is the synchronous node vitest list --filesOnly that planChecks reaches through discoverBrowserClosures (scripts/ci-plan.ts:294 → scripts/browser-input-closure.ts:341-343, with its own 15 s budget). This issue's earlier trace measured that listing at about 3.9 s wall in passing runs, and it accounts for most of the 9–11 s of child CPU here. The assertion only checks unit-file membership, which does not depend on browser closures. A planner entry point limited to the unit-consumer selection would test exactly the asserted behaviour without the listing.
    • (b) Isolate the two real-repository planning cases from the long unit worker list, so they are not co-scheduled with a runtime-heavy worker. This reduces co-load but not runner background load.
    • (c) Both.
  20. schlessera commented on Oct 21, 2026

    @schlessera
    OwnerAuthor

    Decision (maintainer, 2026-10-22): correction (a). The two consumer cases test unit-consumer selection through a planner entry that stops before browser-closure selection, so they no longer run the synchronous vitest list child (about 9–11 s of CPU per case on CI). planChecks keeps its exact production behaviour by applying closure selection on top of that same entry. Closure selection changes only the browser, layout, endurance and captures categories, none of which unitFiles reads. Isolation (b) is not selected. #2475 merges after this lands.

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: ciCI workflows, the gates they run, release scripts, packaging.priority: p2Wanted, not scheduled. Pulled in when a milestone has room.type: testCoverage, harness or proof work with no behaviour change.

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions