From d1bfddcf868b9c84a2e63a3ab072d10551317322 Mon Sep 17 00:00:00 2001 From: Abir Abbas Date: Thu, 12 Nov 2026 08:04:14 -0500 Subject: [PATCH 1/2] Remove a working-notes file that was committed by mistake NOTES-FIX-2597.md was a scratch record of the #2597 fix round. It was never meant to be tracked: it describes local test runs, not the product. Co-Authored-By: Claude Fable 5.2 --- NOTES-FIX-2597.md | 447 ---------------------------------------------- 1 file changed, 447 deletions(-) delete mode 100644 NOTES-FIX-2597.md diff --git a/NOTES-FIX-2597.md b/NOTES-FIX-2597.md deleted file mode 100644 index c1e4ef8389..0000000000 --- a/NOTES-FIX-2597.md +++ /dev/null @@ -1,447 +0,0 @@ -FIX-2597: real 21 (fixed 21, PR dropped: none); already red 14; flaky 20; packages cmd/codeaf red: see final validation session pending; laws pending; hand ok - -Working record for SPEC-FIX-2597.md. Local commits only on -`land/app-v3-open-prs`; no push, GitHub actions, or Git configuration changes. - -## Starting evidence - -- Starting head: `980918d1d`; frozen comparison `origin/dev`: `86a2069f6`. -- Read `/home/abir/af-integrate/NOTES-INTEGRATE.md`, the contributor guide, - architecture map, documentation ownership, and repository instructions. -- `/tmp/integrate/final/ci-failing.txt` contains 18 top-level `cmd/codeaf` - tests and no `internal/session` failures. Each listed test will run alone - here and on the frozen base before classification. No unlisted session - failures will be invented. -- The specified base worktree did not exist; created a detached worktree at - `/home/abir/af-base-dev-now` at `86a2069f6`. Its source will remain unchanged. -- Go invocations use `nice -n 10`, `GOFLAGS=-p=3`, `CODEAF_TELEMETRY=off`, - `TMPDIR=/tmp/integrate/fix`, and the default shared caches. Test logs and - diagnostic scripts live outside worktrees under `/tmp/integrate/fix/`. -- Existing unrelated jobs and tmux servers are left alone. -- Scratch bisects use a detached worktree under `/tmp/integrate/fix/bisect`; - they do not move the requested contribution branch or create other commits. - -## Reproduction and classification - -In progress. The CI input and initial branch/base outcomes are retained with -the scratch evidence. Existing assertions will remain unchanged. - -Initial classification: 14 wave regressions (including two wave-added tests), -one already-red startup/upload test, and three flaky tests. Every listed name -was invoked alone on each tree. Prepared-base reruns supersede engine skips. -The two missing base tests remain explicitly identified below. - -| CI-listed test | Initial branch | Prepared base | Classification | -| --- | --- | --- | --- | -| TestARefusedRunThatWroteNothingNamesTheDirectory | cleanup failure, isolated rerun passes | pass | flaky | -| TestFactoryStageCallsPRBaseSyncThroughTheRealToolBelt | folder refusal | absent | real, wave-added fixture | -| TestFinalPublishDisplacementReachesTheRestoredWindowOnce | writer never started | pass | real | -| TestLiveDriveRefusedStartupRetriesAndUploads | initial notice absent | recovery/upload failures | already red, separate failure signatures | -| TestNoticeReplayIsCurrent | stale storage-full notice | pass | real | -| TestProcessCloseJoinsTheUsageWriter | pass | pass | flaky | -| TestSharedDriveNoticesEachWindow | no notices | pass | real | -| TestSharedLocalToolsExpireOwnershipWhilePongsKeepArriving | no live feed | pass | real | -| TestSharedLocalToolsReuseASlowFailedReading | zero reads | pass | real | -| TestSharedLocalToolsShareOneConcurrentDirectoryReading | zero reads/no feed | pass | real | -| TestStorageNoticeReachesEngineWindow | absent notices/writer | pass | real | -| TestStorageOffChatKeepsSendingAfterItsOwnRecordedHeadHoldExpires | quiet profile | pass | real | -| TestStorageOffChatWithMissingSavedTurnsDoesNotReturnQuietly | quiet profile | pass | real | -| TestStorageOffContinuedChatSendsAfterItsOwnEmptyHeadHoldExpires | quiet profile | pass | real | -| TestStorageOffSeatedTurnStopsWhenAnotherComputerContinuesIt | misses displacement | pass | real | -| TestStorageOnChatWithDifferentHeadsStillAsksToContinue | quiet profile | pass | real | -| TestTheNextLookSeesEveryChange | stale full-read refusal | absent; old-watcher comparison passes | real, wave-added compatibility test | -| TestTheSameSentenceIsInTheJSONAnswer | pass | pass | flaky | - -Raw results: `initial-results.json`, corrected engine results in -`base-prepared-results.json`, and individual `initial-*.log` files under the -scratch root. One driver pause while preparing base is included in the recorded -wall time of the next branch invocation; the test log retains its actual time. - -Preparation correction: the first fresh-base engine cases skipped because its -ignored furrow artifact was absent. Ran the prescribed `make furrow` preparation -on that worktree; rerunning those cases into `initial-base-prepared-*.log`. -Skipped executions are not counted as passing behavior. The listed -`TestFactoryStageCallsPRBaseSyncThroughTheRealToolBelt` does not exist on base; -its initial base command explicitly reported no tests, not a behavioral pass. - -## Cause isolation and repairs - -Pending paired reproductions and `git bisect run` evidence. - -### Shared notices and ownership: #2090 - -Authoritative `git bisect run` on the paired passing/failing shared-gate probe -identifies `c25dbd3b3` (#2090), encrypted custody, as the first bad commit. -`61d259d1b` has an intermediate stamp-type compilation failure and was skipped; -the parent of #2090 passes and #2090 itself gives the exact zero-read failure. -Evidence: `bisect-sharing-gate.txt`, `bisect-sharing-gate-git.log`, and per-cut -logs. The earlier startup/upload bisect remains rejected. - -Repair: use the existing `spokenDoorChatWithPairing(t, true)` in fixtures whose -premise is an already-paired profile, before their first metadata save. Preserve -the two deliberate solo fixtures, every existing assertion, and production -`EnsureSolo`/custody behavior. No refusal expectation or ownership check changes. -Fix commit: `09dbdb2fb` — pair shared fixtures before #2090 custody saves a -solo identity. - -Focused green: shared slow-failure reuse, both pairing/solo transition tests, -custody restart/move, existing-profile sync posture (paired and solo), and -fresh-profile quiet behavior all pass in `shared-custody-green.log`. - -### Stop-watch/full-admission handover: #2358 - -The carried `TestTheNextLookSeesEveryChange` fails twice on the unchanged wave -(`early-stop-branch.log` and its initial individual run), at the handover's full -read. `cmd/codeaf/factory_person_stop.go`, `floorJobFiles`, reuses a negative -memo for 100 ms even after an atomic job rename changes the folder. The new -`WatchedRefusal` from #2358 uses the current `TalkStop` index, so it sees the -handover while the admission path can still allow it. The old suite advances -`floorNow` between edits; the carried test does not. - -Added `TestAutomaticRefusalSeesHandoverBeforeNextFloorInterval`, which fixes the -clock through a real store handover and asserts both watcher and admission -answers. It fails before the repair in 0.28 seconds (`handover-red.log`). This -removes machine-speed dependence from reproduction without changing an existing -assertion. Bisect of the carried test and repair validation are in progress. - -Repair under test: retain the floor folder's identity with a shared look and -check it before reusing that look within 100 ms. An atomic rename invalidates -the negative memo immediately; unchanged job documents still are not decoded. -The pre-fix unmanaged-admission benchmark (100 iterations) is 144 B/op and one -allocation/op; elapsed timings are diagnostic, not acceptance gates. Benchmark -source and overlay are external scratch artifacts, not repository tests. - -Green proof: the deterministic handover, both existing next-look cases, unchanged -manager checks, unrelated floor churn, idle watcher zero-document work, exactly -one document after one job edit, and allocation growth limits pass together in -`handover-factory-green.log`. Unmanaged admission now costs 432 B/op and three -allocations/op (the additional directory stat), still within existing unchanged -allocation caps. No cap or existing assertion was changed. Fix commit: -`e8fc2e3a0` — invalidate #2358 handover look before stale admission. - -### Factory PR-base belt fixture: #2570 - -`git bisect run` narrows the new test failure to `97bdc7207` (#2570) or its -integration build repair `dc6bbde8d`. The former does not compile until the -latter supplies the retained `updateAt` argument, so Git reports that exact -two-commit ambiguity. The test and its nested profile are introduced by -`97bdc7207`; the second commit changes only the lease recovery call signature. -This is attribution to #2570, not to the unrelated guard it trips. - -Cause: `cmd/codeaf/factory_stage_test.go`, -`TestFactoryStageCallsPRBaseSyncThroughTheRealToolBelt`, makes its state home -`root/state` while requesting `root` as a Factory workspace. Existing -`factoryFolderRefusal` correctly refuses an ancestor of the profile. -Repair under test: give the profile a separate TempDir. All tool-call, repair -reason, and error assertions remain byte-for-byte unchanged. - -Green proof: the exact real-tool-belt test passes in -`handover-factory-green.log` (2.00 seconds). Fix commit: `0d20225dd` — keep -#2570 belt fixture outside its profile ancestor. - -The unpinned stop-test bisect is also rejected: changing I/O speed let older -cuts spend more than the 100 ms cache interval and pass, falsely blaming the -unrelated pinned-Go verification fix `306a14c84`. Restarted with the same -carried assertions and a scratch-only overlay that freezes its existing -`floorNow` seam. This forces the handover to remain inside one shared cache -interval on every cut. No repository test assertion is altered. The new -deterministic repository regression uses that same controlled clock. - -The controlled `git bisect run` identifies `21ebed37c` (#2358) as the first bad -cut (`bisect-stop-clock.txt`, `bisect-stop-clock-git.log`). This locates the -introduced watcher/full-admission interaction, not an unrelated later speed -change. Pre-introduction cuts have no such test and are explicitly marked as -absent rather than described as behavioral passes. - -Evidence so far (before any edits): - -- `TestProcessCloseJoinsTheUsageWriter` passes on both trees in isolation; - classify flaky and leave its assertions and implementation alone. -- `TestARefusedRunThatWroteNothingNamesTheDirectory` initially failed only - TempDir teardown, then passed its isolated rerun without an edit. Base passes. - Treat that observed cleanup race as flaky; do not change its assertions or - invent a deterministic production regression from the first cleanup result. -- Prepared base passes final-publish notices, notice replay, shared-drive - notices, expiry while pongs arrive, and sharing one slow failed reading. - This branch fails those same contracts. -- Prepared base's startup-retry test fails later, during recovery/upload and - request deadlines, while this branch misses the initial refusal notice. - Preserve both failure signatures: the initial startup test selection is - unsuitable as an unqualified bisect predicate because it also catches the - base-red upload path. Its preliminary bisect is diagnostic only; a successful - paired shared-gate test will supply the authoritative family predicate. - The rejected startup bisect blamed `19c0ecd66`, a two-line rollup-only change, - on upload failures rather than missing notices; it is explicitly not causal - evidence. Retained as `bisect-startup-rejected*`. Restarted with - `TestSharedLocalToolsReuseASlowFailedReading`, accepting only the observed - zero-read failure as bad and skipping other failures. -- Custody protection in `internal/session/agent_identity.go`, - `protectAgentIdentity` (#2090), calls `identity.EnsureSolo` on first save. - Existing sharing fixtures save a turn before calling `identity.Ensure`, - which deliberately preserves an existing solo marker. Their intended paired - premise is therefore never established. Existing solo/quiet assertions must - remain intact; shared fixtures can explicitly establish pairing before save. -- The exact stop-watch test is wave-added (#2358), absent on base. An external - overlay runs its unchanged assertions on base through the old watcher road - (`AutomaticRefusal` in both positions); that comparison passes. It took - 102.45 seconds under host I/O pressure, so this is compatibility evidence, - not proof that a missing base test executed verbatim. -- On the wave, the stop-watch failure is the full-read negative memo reusing - `floorJobFiles` for 100 ms after a job gains the conversation; the new cheap - watcher sees the edit immediately. Investigating the interaction and bisect. -- The Factory PR-base test is wave-added (#2570), absent on base. Its workspace - contains its profile (`root/state`), which violates dev's existing factory - folder guard before the tool belt can run. The assertion itself is sound; - the profile must be outside the workspace. - -## Final validation - -Pending fixes: all CI-listed tests individually, each complete cmd/session -package once (20-minute ceiling), laws, manual gates, build, and the specified -throwaway-profile live hand checks. - -Final validation is running on `0d20225dd`, with the final binary built first -so binary-driving package tests use the fixed source. Build passes. A private -driver invokes each listed test separately and then the two complete package -targets with four shards and `TEST_TIMEOUT=20m`, followed by laws and both manual -paths. Logs and structured results are `final-*.log`, `final-results.json`, and -the package report JSON files. No full package has been used as an editing loop. - -All 18 final individual CI selections are complete: 17 pass, including all 14 -regressions and all three flaky selections. The sole red is the already-red -`TestLiveDriveRefusedStartupRetriesAndUploads`: initial notices now pass, but -`relay_storage_full0` reaches the same later pending-upload failure observed on -base (calls=9, frames=1). No upload assertion or underlying base-red behavior was -changed. The complete `cmd/codeaf` run has started under the per-machine lock. - -Full-package raw JSON streams are also archived as `full-cmd-shard-*.jsonl` -(and the corresponding session files) because the standard timing report keeps -outcomes but not assertion text. A read-only follower copies each existing shard -stream until its temporary directory is removed; it changes no test command. - -The cmd package's four shards reached their 20-minute ceiling (1,210.93 seconds -including setup). Exactly 3,129/3,507 top-level tests started and reported an -outcome; 378 never started. The initial package run is red, not a complete green -result. Session has started once under the same lock and ceiling. - -To fulfill whole-package coverage without repeating completed tests, the -remaining never-started names will run as explicit, disjoint continuation -selections after the initial package runs finish. They use the same repository -shard runner, per-machine lock, four shards, 20-minute ceiling, and final source. -The expected lists, starts, and continuation selections are saved externally; -already-started tests are excluded. Actual reds still get only the required -isolated rerun and frozen-base comparison. - -### New real family from the full session run: journal bubble ownership - -The initial complete session selection aborted two shards in Memory tests with -`fatal error: send on synctest channel from outside bubble`. Both -`TestMemoryRecoveryKeepsOriginalExchangeOnce` and -`TestClosedSessionHasNoMemoryPassStillWritingTheStore` reproduce alone here -(0.268/0.753 seconds) and pass alone on the frozen base (0.288/0.825 seconds). -Their original assertions are unchanged. These add two confirmed real cases -beyond the initial CI list. Raw paired outcomes are already saved in -`triage-results.json`; they will not be redundantly rerun by later triage. - -Cause under investigation: #2387's `usagePending.append` creates its batch -synchronizer channels in the recording caller. Dev deliberately starts the -process-wide `usageWriter` outside fake-clock bubbles. The journal's new -`usageWriter.run` cleanup then sends to a bubble-owned wake channel from that -outside writer. A fix must keep the journal's independent batching (including -when projection is blocked), crash recovery, and bounded joined shutdown. - -The automatic continuation/triage follower was stopped while waiting, by its -exact owned PID, so it cannot start tests while this newly confirmed family is -being repaired. No unrelated process was signalled. The two initial package -runs and initial laws/manual gates have finished; both gates pass. - -`git bisect run` identifies `4fadc9452` (the #2387 projection-durability follow-up) -as the first bad cut for the existing Memory recovery test. Removing projection -fsyncs exposed the caller-owned batch synchronizer before its temporary scope -had drained. Evidence: `bisect-usage-bubble.txt` and its Git log. - -Added `TestJournalSyncStaysWithTheProcessWriterAcrossCallerScopes`. It starts -the process writer outside a caller bubble, records and joins inside that scope, -and checks one unchanged charge afterward. The exact test passes on the base -through an external overlay, and fails with the fatal cross-bubble send on the -original wave production files (`journal-scope-base.log`, `journal-scope-red.log`). -Existing Memory and journal assertions remain unchanged. - -Repair under verification: the shared writer owns a joined, idle journal loop. -Recording schedules it without blocking; batch synchronizers are created only -from that owner. The loop remains separate from ledger projection, so a stalled -projection cannot stop journal syncing. Shutdown joins the journal before replay. -The 100 ms/64-row batching constants and all existing shutdown ceilings remain. - -The first focused journal run passed its assertions, including subprocess -compaction, but exited red administratively because I added the regression file -while that command was still active. The checkout-change guard correctly caught -that. Its result is not claimed as a green command; verification will be repeated -with the checkout held still. This was an agent workflow mistake, not a test or -production assertion failure. - -The stable repeat passes the journal/Memory assertions and the public 20,000-row -benchmark (exact $200, no drops). Its cmd process-close assertion catches the -new helper being counted via its `created by usageWriter.run` stack line. -Launching both owned loops from `usageWriterForLocked` keeps the process's one -writer-per-ledger observation intact; the existing assertion is not changed. -The scoped lifetime and process join checks are being rerun after that fix. - -The constructor-launch repeat passes both packages' focused checks, including -the unchanged process writer-count and close assertions -(`journal-owner-green-joined.log`). The final coalesced-wake variant also passes -all journal, Memory, scope, and process-close assertions; one unrelated flush -fixture exceeded its two-second bound during I/O contention, then passed -unchanged in isolation in 0.15 seconds (`journal-owner-final.log`, -`journal-durable-isolated.log`). No deadline or expectation was relaxed. - -Fresh-process before/after `BenchmarkLedgerWriter20K` invocations both verify -20,000 public rows, exact $200 total, and no drops. Allocation measurements per -20,000-charge iteration: before 91,502,848 bytes / 724,209 allocations; after -95,270,832 bytes / 733,473 allocations. Elapsed times are diagnostic. The -additional owned loop is idle without a timer and wakes only when a new sync -burst is needed; existing batching, reader, and shutdown caps are unchanged. -Evidence: `journal-perf-before.log`, `journal-perf-after.log`. - -The remaining original full-run failure comparisons will use the detached -scratch tree frozen at the full-run source `0d20225dd`; continuation failures -will use their newer repaired source. This avoids relabeling an old failure as -flaky merely because the new journal repair makes it pass. No comparison source -will be edited, and the two already-completed Memory pairs will not be repeated. - -Workflow correction: the follow-up driver had already launched its child -continuation runner when its parent was stopped. That child completed all -continuation batches while the journal fix was being edited. Cmd's 378-case -continuation and session batches 1/5 passed; session batch 2 reproduced the -old journal fatal; batches 3/4 reported checkout-change guard failures as well -as ordinary test failures. Those are discovery evidence only, not clean -final-source validation. No assertions were removed. The source will be held -still for replacement validation after triage and any further fixes. - -The private frozen snapshot was moved to -`/home/abir/af-fix-2597-snapshot`, still at `0d20225dd`. Go's VCS probe under -the scratch tree reached an existing invalid `/tmp/.git` directory and exited -128; the snapshot now builds normally outside that parent. No Git configuration -or unrelated directory was changed. Source and default caches remain intact. - -Post-journal build and both manual paths pass. The post-journal laws command -hit a behavioral neighbor's retained-row retry deadline; that exact unchanged -test passes in isolation (`laws-ledger-isolated.log`). Structural laws have not -been weakened. A final quiet-source laws run is still required. - -Further full-run triage uses unchanged-source pairs and leaf failures, so a -parent failing on both trees cannot hide a branch-only subcase. The malformed -repository-file app subcase failed on snapshot 0d twice, but passes unchanged -on repaired e62 (`bad-file-current.log`). Its intermediate bisect is diagnostic -until repeatability is established; different slow points have been observed. -The bisect harness initially inherited `GIT_DIR` from `git bisect run`, causing -its Git fixture to reinitialize the private bisect worktree and reject a duplicate -origin. Those runs are skipped, not behavioral failures. Later test environments -strip inherited `GIT_*` variables. No Git configuration command was run. -The bad-file timing bisect was rejected: its alleged first bad cut #2269 -passes unchanged on confirmation (`bad-file-bisect-confirm.log`), and the exact -original 0d snapshot app subcase also passes unchanged in 9.66 seconds -(`bad-file-snapshot-confirm.log`). It is flaky, not an additional real family; -no production code, deadline, or existing assertion was changed for it. -The review-mint test likewise passes unchanged on the original snapshot after -one branch-fail/base-pass pair (`review-mint-snapshot-confirm.log`); its 300 ms -assertion alternates under load. It remains unchanged and is classified flaky. - -### Full-run triage complete; two more proven cases - -All 48 discovery selections now have branch/base comparisons. The standalone -old-source agent-close test also fatals in journal `finishSync` -(`journal-closing-old.log`); repaired head and base both pass the unchanged -assertion. It is a third existing case fixed by `e62b4ef67`, rather than a flaky -result. The pause-tail leaf that differed inside a base-red Memory parent -passes unchanged alone on both trees (`memory-pause-tail-pair.json`). - -One new deterministic real case is -`TestNoToolDecodesItsOwnArgumentsWithEncodingJSON`. #2570 introduces -`tools_stage_pr_base.go::stagePRBaseSyncTool` using direct JSON decoding. -The unchanged structural assertion fails on the branch and passes on dev; -`bisect-tool-grammar.txt` identifies `97bdc7207` exactly. The fix routes that -same map through `decodeToolArguments`, retaining all empty-object checks, -refusal text, and the bound-checkout authority checks. No assertion changed. - -Before the fix, a standalone overlay benchmark of the actual tool Execute door -verifies 10,000 successful calls at 208 bytes / 4 allocations per call -(`tool-grammar-perf-before.log`). Focused decoder and carried tool assertions, -and the same benchmark, will verify the one-line repair before committing. - -The unchanged decoder law and both existing PR-base tool tests pass after the -repair (`tool-grammar-green.log`). Before/after actual Execute benchmarks both -verify 10,000 calls at exactly 208 bytes / 4 allocations per call. The final -bisect names `97bdc7207` as first bad; no intermediate test assertion changed. - -Discovery totals are now 18 confirmed existing/wave-added test regressions, -all repaired; 14 already-red parent tests; 20 flaky parent tests; and 14 tests -interrupted by a fatal sibling that pass when selected alone. Counts combine -the initial 18 CI names with the 48 full-run selections, with no duplicate -names or newly added regression tests. The three journal cases include the -separately frozen old-source agent-close proof. No carried PR was dropped. - -The initial full runs found the journal and decoder causes after the first -three repairs. A new frozen final-source validation is therefore required: -each CI name alone, both complete packages using the repository's usual eight -shards with the contract's 20-minute ceiling, then laws and both manual paths. -Its driver archives streams in-process and refuses any source change. There -will be no edits or commits while it is running. - -Further full-run triage uses unchanged-source pairs and leaf failures, so a -parent failing on both trees cannot hide a branch-only subcase. The malformed -repository-file app subcase failed on snapshot 0d twice, but passes unchanged -on repaired e62 (`bad-file-current.log`). Its intermediate bisect is diagnostic -until repeatability is established; different slow points have been observed. -The bisect harness initially inherited `GIT_DIR` from `git bisect run`, causing -its Git fixture to reinitialize the private bisect worktree and reject a duplicate -origin. Those runs are skipped, not behavioral failures. Later test environments -strip inherited `GIT_*` variables. No Git configuration command was run. -The bad-file timing bisect was rejected: its alleged first bad cut #2269 -passes unchanged on confirmation (`bad-file-bisect-confirm.log`), and the exact -original 0d snapshot app subcase also passes unchanged in 9.66 seconds -(`bad-file-snapshot-confirm.log`). It is flaky, not an additional real family; -no production code, deadline, or existing assertion was changed for it. -The review-mint test likewise passes unchanged on the original snapshot after -one branch-fail/base-pass pair (`review-mint-snapshot-confirm.log`); its 300 ms -assertion alternates under load. It remains unchanged and is classified flaky. - -Frozen-head build c3637de9c passes. Hand check is complete on that binary: -one real chat turn returned FIX_2597_CHAT_OK, quit exit0, reopen displayed -$0.0013 and retained exact ledger $0.0013311 (four rows, identical digest), -quit exit0 in .111s, exec returned FIX_2597_EXEC_OK and exit0 in 1.487s. -Only the dedicated fix2597 tmux server was used; its two owned panes are closed. -The key was sourced only into child environments, never printed. Setup corrections: -the first draft was held while model discovery warmed, with no provider call; -a fresh profile then selected Nano explicitly. The script initially expected -/cost's old “conversation” label instead of “spend”; it resumed the saved turn -for reopen/exec after correcting that parser, without another chat prompt. - -The c3637de9c session validation exposed a fixture initialization mistake in my -journal repair: retiredpin_wire_test.go and usage_close_ceiling_test.go create -three raw usageWriter instances and invoke run directly. The new owner's defer -closes journalStop, which those raw instances never initialize. All three -existing tests fail alone on c363 and pass alone on the frozen base; bisect -identifies my e62b4ef67, not an additional carried PR. This adds three confirmed -repair-introduced cases. The fix will use usageWriterForLocked/usageWriterFor in -those fixtures, retaining every assertion, deadline, blocker, and all 200×4 race -iterations. No production code or behavior needs to change. Cmd's complete -c363 run and hand binary therefore remain applicable. After the fixture repair, -repeat the complete session package and final laws/manual gates with source -held still. The c363 session run is discovery only, not final complete coverage. - -Fixture correction applied after the c363 primary validation ended. The two -stalled writers are obtained through usageWriterForLocked while holding the -registry lock, then receive their existing beforeWrite hook before publication. -The four-writer race loop uses usageWriterFor. No production Go file, assertion, -deadline, or loop bound changes. Focused verification is next, followed by a -complete session run on the corrected fixtures. The c363 laws run hit two -other cases (tool-rejection turn deadline and the frame harness work deadline); -these need isolated/base comparison if they remain red. Manual paths pass. - -The corrected fixtures pass all eight focused checks in -`writer-fixtures-green.log`: the three previously panicking tests, normal joined -close, all three original journal scope failures, and the new cross-scope -regression. The four-writer race still runs all 200 iterations. Every assertion -and time ceiling is unchanged. There is no production-source change, and the -hand-tested c363 binary is unchanged. All 21 confirmed cases are repaired. From 71848c344b8aab2b51d6751ecd9ca34ec5577af7 Mon Sep 17 00:00:00 2001 From: Abir Abbas Date: Thu, 12 Nov 2026 08:04:25 -0500 Subject: [PATCH 2/2] changes: record the removal of the stray notes file Co-Authored-By: Claude Fable 5.2 --- docs/changes/unreleased/2610-remove-stray-notes.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/changes/unreleased/2610-remove-stray-notes.md diff --git a/docs/changes/unreleased/2610-remove-stray-notes.md b/docs/changes/unreleased/2610-remove-stray-notes.md new file mode 100644 index 0000000000..1b1e7ac4db --- /dev/null +++ b/docs/changes/unreleased/2610-remove-stray-notes.md @@ -0,0 +1,10 @@ +--- +kind: fixed +title: a working-notes file committed by mistake is removed from the repository root +pr: 2610 +surface: [build] +invalidates: + - "Was true: NOTES-FIX-2597.md sat at the repository root, a scratch record of one fix round's local test runs. Is true now: it is gone; nothing in the build, the tests or the manual read it." +--- + +The file arrived with #2597 by mistake. It described local runs, not the product.