Finish automatic CI verification of the guarded-spool fixture fix
Updated 2026-10-18 20:55 UTC.
RE-VERIFY: This is a write-time snapshot. Query https://github.com/CodexCoder21Organization/BuildTestEmbedded/pull/1531 for state, headRefOid and statusCheckRollup; verify branch heads with git ls-remote. Fresh results override this document.
Design decisions in force
User direction, 2026-10-18, supersedes any broader standing authority:
Do NOT start a full local test suite: one is already running on this machine. Targeted tests only.
Do not change timeouts, iteration counts, or assertions. Do not disable tests. Do not re-run CI just to see if it turns green. Do NOT merge, enqueue, publish, or deploy.
Every background wait gets a hard deadline, and you kill it before you finish. Wait on a PID, never pgrep -f.
Do not upload or paste heap dumps, JFR recordings, environment listings, or process command lines. Quote only the thread stacks that matter.
If it is ALREADY ON MAIN, do not fix it here; report the test and the mechanism so it can go to a separate flake-fix effort.
Read ~/.claude/CLAUDE.md, the playbook https://github.com/CodexCoder21Organization/DocumentationRepository/blob/main/playbooks/DELEGATION_BRIEFS.md, and https://github.com/CodexCoder21Organization/DocumentationRepository/blob/main/architecture/TESTING.md first. Clone fresh into the current directory. Use ~/bin/cs or ~/bin/coursier, never /usr/local/bin/coursier.
About 90 minutes in total. If it runs longer, stop and report what is still open.
The current investigation is stopping at that budget. No merge or deployment is authorized. Keep the PR draft until verification is complete.
Mission and current state
The reader-join classification is finished: ALREADY ON MAIN. The first-attempt CI audit found a separate PR-caused test-fixture mismatch. Its deterministic fix is pushed at 9eaa688. The PR remains OPEN/DRAFT. Only the new head's automatic CI verification and final evidence-clone cleanup remain. No merge, enqueue, publication or deployment is authorized. The active session's roughly 90-minute budget ends around 21:31 UTC; if CI is still running, report its exact state and stop.
The motivation in the brief describes history compaction, but this PR's actual diff concerns bounded SSH output retirement and same-runner spool recovery. The investigation followed the named PR and actual failures.
Findings and completed work
The prior 51-row classification remains authoritative for the original failures. Head 767111d fixed three regressions: missing-spool checks belong to live recovery rather than cold attachment of historical completed runners; fake live-runner responders must model the guarded command and fixture root; ordinary execStreamingAttempt keeps its thrown-error contract while BuildDriver opts into a separate recoverable method. The prior remote batch passed 59/60 first attempts. The remaining reader-join timeout was the work resumed here. No full-suite result was claimed from the earlier interrupted compilation.
The matched reader comparison used PR head 767111d and unchanged main b28d028. Each passed 11/11 ordinary local first attempts and 1/1 remote first attempt, without retries. Under the same fixed two-processor affinity and four-worker runner setup, ten identical named copies per head produced 0/10 first-attempt passes on each side. PR attempts 2/3 were 0/10 and 0/10; main attempts 2/3 were 0/10 and 2/10. Both sides hit the existing 30,000 ms deadline at the corresponding reader join (PR line 386; main line 380).
Virtual-thread dumps from first-attempt failures show readers in CompletableFuture.get -> AttemptHistoryReads.read:192. The history worker is in FileDescriptor.sync0 -> FileHandle.flush -> writeAttemptIndexRoot:611 -> prepareAttemptHistoryCut/reconcileAttemptHistoryOwned. Other samples show active page decoding. Each of the 12 readers must finish at least 160 public running/history read pairs; completing publication does not finish those remaining reads. The relevant reader/index source and ownership helpers are identical on both heads. This establishes the join timeout on main, without claiming a permanent lock cycle. The older remote run's exact all-256-downloaded timing was not independently reproduced. A separate public completion-gate control timed out before its intended ordering on both heads and is excluded. See the reader report and relevant frames.
All 17 checks on 767111d's automatic CI run succeeded. The correct first-attempt count is 4,903/4,910: seven failed-first histories, eight automatic retries (seven passing, one failing). Root and the CI worker initially counted canonical rows alone and incorrectly reported 4,910; corrected manifests preserve all numbered attempts. The reader itself passed its first and only attempt in 25,552 ms. See the historical CI table and seven-case retry audit.
Four of those failed-first cases also failed in recorded main CI. A supplemental matched seven-case targeted run reproduced five failed-first cases on both heads (four wrapper proofs and projection maintenance). The cold-resume e2e passed once on each; its failed-send/ordinary-drain path is unchanged. Its exact transient cause remains unestablished and is not assigned to the PR.
The seventh case, deadDispatchStreamIsReapedDespiteLiveDropletAndConsumerLease, was a PR-caused fixture mismatch. An empty initial ordinary catch-up sends later reads through live recovery, which prefixes a file-readability check to the line-3 tail command. The fixture recognized only a command starting with tail, so status reached TESTING while its ingestion latch stayed unset. A one-shot initial-empty-drain ordering failed on the PR's first attempt and both retries (23,201/23,058/22,731 ms), while main passed first attempt in 7,206 ms. The matcher now recognizes the guarded command. No assertion, timeout, iteration count or production implementation changed.
The fixed original plus six identical named cases passed 7/7 first attempts, no retries, in 7,119–7,353 ms. Independent test and adversarial code review found no ordering or cleanup gap. After fetch/rebase, exact-head dead-dispatch, reader and duplicate-attempt neighbor tests passed 3/3 first attempts (7,628/11,799/8,450 ms), without retries. Verified the PR remained OPEN, then pushed 9eaa688 with an explicit force-with-lease. The commit contains only the intended fixture change; diagnostic copies are excluded.
The supplemental remote run f06f3887 completed: 2/2 selected first-attempt passes, reader 20,754 ms and dead-dispatch 12,590 ms. Both have canonical-attempt=highest-attempt=1; no retry histories. The XML marks 4,926 other rows filtered-out=true; they are excluded. Client exited 0 and no owned remote test remains active.
The new head's automatic CI run is still executing. At 20:48 UTC all 16 shards were IN_PROGRESS; aggregate had not yet reported. The earlier green run is not the new head's verdict. A read-only all-checks build-watchman has a hard deadline around 21:28 UTC. No CI was manually rerun. The current-head CI report will be updated as runner XML arrives.
Relevant PRs and remote refs
Remote heads were verified around 20:49 UTC; the evidence branch advanced at its latest checkpoint. All rows belong to CodexCoder21Organization/BuildTestEmbedded.
Nothing was deployed or published. This work introduces no deployed-but-unmerged artifact; all code remains unmerged. The evidence clone's fetch specification tracks only main, so compare its local HEAD directly with git ls-remote for the evidence branch. No stashes or unpushed source commits remain. Main's diagnostic fixture patch and the named-copy generators are preserved on the evidence branch. The PR, main and read-only CI clones have been removed. Only workspace/BuildTestEmbedded-evidence remains for final checkpoints and must be removed before exit. No raw dumps, console logs, heap/JFR data, environment listings or process command lines were uploaded.
Next steps
- Observe the automatic new-head CI with bounded read-only build-watchman. Parse completed shard runner XML, joining root attempt-history records and excluding filtered rows. Classify any red check from evidence. Do not requeue CI or treat the historical green run as new-head verification.
- Update the final CI inventory, XML counts, PR description and evidence. Keep the PR draft. If CI is still running at the roughly 21:31 UTC budget limit, report the remaining checks and stop.
- Stop the tracked watcher and audit owned fixture descendants. Push the final sanitized checkpoint, remove the evidence clone, and retain out/r47-findings.md. Complete this handoff only when CI verification is finished; otherwise update its pending state and release the claim.
Operational notes
Use ~/bin/cs, never /usr/local/bin/coursier. Read the linked delegation playbook and testing guidance before edits. No full local suite was started. Handoff CLI get once failed to fetch bytecode even though HTTP reading and claim/report worked. gh pr edit requests deprecated classic projectCards and fails; supported REST PATCH with a JSON body file updates the description. Both are in friction.md. The report-challenge command automatically merges, so it was not invoked under this brief's no-merge rule. Raw data stays local; only relevant frames, XML attributes and errors are preserved. The added completion-gate control failed before its intended reader join and must not be counted as a join reproducer.