You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ci: re-census and justify real-time test waits added since the #1849 wait inventory #3332
Epic #1849's definition of done requires every real-time wait to be justified. The inventory that satisfied this was taken at 5dc2595c. The #2763 audit (#1849 (comment)) found 197 files with wait calls added after it. The maintainer ruled on 2026-11-02 (Q2, option B) that the requirement is a standing one, so the later waits must be censused and classified before #1849 closes.
Classify every wait in the 197 files, and in any added since, as justified (real-time behaviour under test, with the reason stated in or next to the test) or replaceable.
Replace each replaceable wait with a deterministic signal: an event, a fake clock or a condition. Never raise a timeout. The work lands in reviewable slices, with mutation receipts where a replacement removes a race.
Claimed (token wc3332-7f1e). Branch test/3332-census-realtime-waits from epic/1849-test-cost at 3bee06dce. This PR covers the re-census at current main, the per-line classification (archived on archive/measurements) and a first replacement slice in packages/ui-server/tests/private-index-cache.test.ts. Later slices follow in separate PRs. Collision check on the cited paths: no path collisions. There are closure-only overlaps in the ui-server workspace with open PRs (#3059, #3069, #3292, #3293, #3295, #3305, #3309, #3310, #3312, #3316, #3317, #3319, #3320, #3325, #3328, #3335, #3336, #3338, #3342, #3343, #3345, #3352).
Slice 1 is open as #3362 against epic/1849-test-cost (head bfb26af8ecbe, base 3bee06dce) and is marked ready. Its hosted proof is CI run 41525551038.
Census: taken at main 3984040f199cbadbee6e4ce3f1beff816b68dc36 with the test-waits.md expression. In scope are 604 lines in 204 files: the 197 files ci: audit the test-cost epic's coverage and performance acceptance #2763 listed plus 7 newer ones. The rule-based classification gives 374 justified, 89 replaceable and 142 not a wait. It is archived at a13f2247a on archive/measurements.
Slice 1:private-index-cache.test.ts now uses its existing clock and readiness signals. The six changed cases drop from 1.362 s to 0.050 s, with five mutation receipts in the PR.
Remaining: 83 replaceable rows in 45 files, in five slices listed in the PR. A sixth slice covers the negative observations: 84 rows, of which 71 in 38 files have no reason stated in source.
This issue stays open (the PR uses Refs) until the epic batch lands on main and every slice is done.
Slice 1 (census, classification and the private-index-cache replacements) delivered to epic/1849-test-cost as f61599e6b via #3362. The remaining slices listed in #3362 stay open under this issue. Releasing the claim so the next slice can pick it up.
Claimed (token wc3332-u2b9) for the next slices from #3362: reference-source/reference-tools and the other ui-server unit files, then ui-sdk/backends/geo and root tests if they fit. Branch test/3332-unit-wait-slices from epic/1849-test-cost at f61599e6b.
Slices 1 (reference-source/reference-tools) and 3 (the other ui-server unit files) are open as #3395 against epic/1849-test-cost (head 910eee3f5c9b, base f61599e6b), marked ready; its hosted proof is CI run 41547783884.
The changed cases drop from 5.54 s to 3.76 s (median of 3 runs). The PR records eleven mutation receipts.
Re-reading reclassified 11 rows: some are justified, some are negative observations for slice 6, and one is not a wait. One row stays replaceable: private-index 176 fails on the untouched base on the local host, so a replacement couldn't be shown green there.
Remaining:
slice 2: browser and layout
the private-index 176 residue
slice 4: ui-sdk, Claude backend, ui-react and geo (not started)
Slices 4 and 5 delivered to epic/1849-test-cost as 42b4e81f1 via #3440. Still open: slice 2 (browser/layout), the private-index 176 residue, and slice 6 (negative observations), as listed in #3440.
Claimed (token wc3332-s6n) for slice 6 (negative observations) from #3440. Branch test/3332-negative-observations from epic/1849-test-cost at 42b4e81f1. Browser/layout rows stay with slice 2.
Slice 6 (negative observations), ui-server part plus the six reclassified windows, is open as #3463 against epic/1849-test-cost (head c857a2b7f, base 42b4e81f1), marked ready; hosted proof is CI run 41625311098.
28 census windows, plus storage-scan-offloop 272, now use deterministic signals: write-worker hold replies, a held step then one macrotask, ordered timer/socket markers. 17 keep their wait with the reason in source (10 of them are failure maxima). The 5 other reclassified windows state why a window is the only observable. Every replacement has a mutation receipt in the PR. No timeout changed; proof-system classify: not a proof-system change.
Still open in slice 6: 16 non-browser rows outside ui-server (Claude worker-event-loop, Pi early-cancel-lifecycle/worker-stdio-release, ui-react untrusted-marks-runtime, ui-sdk identity-broker-qualification.native/worker-steps-event-loop, root build-concurrency/test-invocation-lifetime). The 5 browser/layout rows stay with slice 2.
Claimed (token wc3332-s6r) for the rest of slice 6 (negative observations) outside ui-server, as listed in #3463: Claude worker-event-loop, Pi early-cancel-lifecycle/worker-stdio-release, ui-react untrusted-marks-runtime, ui-sdk identity-broker-qualification.native/worker-steps-event-loop, root build-concurrency/test-invocation-lifetime. Branch test/3332-negative-observations-rest from epic/1849-test-cost at 42b4e81f1. Path collisions: #3439 edits test-invocation-lifetime (kept off its lines); #3426, #3446, #3448 and #3463 edit docs/process/test-waits.md, which this slice leaves alone.
The rest of slice 6 (non-ui-server negative observations) is open as #3469 against epic/1849-test-cost (head e658129d7ca8, base 42b4e81f1), marked ready. Its hosted proof is CI run 41633660429.
4 windows now use deterministic signals: Claude worker-event-loop 135, Pi worker-stdio-release 113, and ui-sdk worker-steps-event-loop 139 and 180. Each has a mutation receipt in the PR.
11 keep their wait, with the reason now stated in source: Claude 115, Pi 215 and 67, ui-sdk identity qualification 494/497/519/540, worker-steps-event-loop 136 and 595, build-concurrency 80 and test-invocation-lifetime 205. build-concurrency 80 now opens its window only after the failing compiler has exited.
No timeout changed. proof-system classify: not a proof-system change.
Still open:
ui-react untrusted-marks-runtime 406. The file is not on the epic base; it came to main after the merge-base, and it is a browser test.
Claimed (token wc3332-s2b) for slice 2 (browser and layout): the 25 replaceable rows listed in #3362, the five browser/layout negative windows from #3463 (conversation-consent, conversation-controls, storage-guidance.layout, transcript-qualifiers ×2), and ui-react untrusted-marks-runtime 406 from #3469. Branch test/3332-browser-layout-waits from epic/1849-test-cost at 429804d3e, with origin/main (d142e997b) merged in so the branch carries untrusted-marks-runtime.test.ts. Path collisions: #3054, #3056, #3059 and #3069 (drafts) edit conversation.offline.tsx; #3426, #3446 and #3448 edit docs/process/test-waits.md. This slice keeps off #3469's files.
Pointer from #3475 (PR #3480, targeting epic/1849-test-cost): packages/ui-react/tests/browser/recordings.offline.tsx has the same pattern, expect.poll with the default 1 s timeout waiting on native committed events, at lines 63, 165, 228, 288, 560 and 580. #3480 adds recordingCell(ctx).committed(n), an event-based wait, which these could use once it lands. They are left for this census, so I haven't changed them.
Slice 2 (browser and layout) is open as #3487 against epic/1849-test-cost (head f747c34e8, base fce827eba) and is marked ready. Hosted proof: CI run 41652100147.
Deterministic signals replace the waits in share-review (12 rows: admission decided through native lock-request settlement, scan-input checks, the dismiss queue, the flushed lost response), storage-guidance.layout (3), transcript-qualifiers (2), the conversation-controls reply gap, conversation-endpoint, conversation-consent and conversation.offline. Kept, with the reason now in source: recording-limits starvation and the dialogue/contextual fixture drains. Reclassified as justified: hygiene-lifecycle-command 234, storage-server-command 39 and liveness-clock 53. Mutation receipts are in the PR. No timeout changed. proof-system classify: not a proof-system change.
Still open:
ui-react untrusted-marks-runtime 406 and the newer conversation-controls attach-tooltip window. Both files arrived on main after the epic's merge-base. Merging main into the slice made it a proof-system change, so both wait for the epic to carry them; the PR describes the ready replacements.
Activity
schlessera commentedon Nov 2, 2026
Claimed (token
wc3332-7f1e). Branchtest/3332-census-realtime-waitsfromepic/1849-test-costat3bee06dce. This PR covers the re-census at current main, the per-line classification (archived onarchive/measurements) and a first replacement slice inpackages/ui-server/tests/private-index-cache.test.ts. Later slices follow in separate PRs. Collision check on the cited paths: no path collisions. There are closure-only overlaps in theui-serverworkspace with open PRs (#3059, #3069, #3292, #3293, #3295, #3305, #3309, #3310, #3312, #3316, #3317, #3319, #3320, #3325, #3328, #3335, #3336, #3338, #3342, #3343, #3345, #3352).schlessera commentedon Nov 2, 2026
Slice 1 is open as #3362 against
epic/1849-test-cost(headbfb26af8ecbe, base3bee06dce) and is marked ready. Its hosted proof is CI run 41525551038.3984040f199cbadbee6e4ce3f1beff816b68dc36with thetest-waits.mdexpression. In scope are 604 lines in 204 files: the 197 files ci: audit the test-cost epic's coverage and performance acceptance #2763 listed plus 7 newer ones. The rule-based classification gives 374 justified, 89 replaceable and 142 not a wait. It is archived ata13f2247aonarchive/measurements.private-index-cache.test.tsnow uses its existing clock and readiness signals. The six changed cases drop from 1.362 s to 0.050 s, with five mutation receipts in the PR.This issue stays open (the PR uses
Refs) until the epic batch lands on main and every slice is done.test(ui-server): census later real-time waits and replace the private…
schlessera commentedon Nov 2, 2026
Slice 1 (census, classification and the private-index-cache replacements) delivered to
epic/1849-test-costasf61599e6bvia #3362. The remaining slices listed in #3362 stay open under this issue. Releasing the claim so the next slice can pick it up.schlessera commentedon Nov 2, 2026
Claimed (token
wc3332-u2b9) for the next slices from #3362:reference-source/reference-toolsand the other ui-server unit files, then ui-sdk/backends/geo and root tests if they fit. Branchtest/3332-unit-wait-slicesfromepic/1849-test-costatf61599e6b.schlessera commentedon Nov 2, 2026
Slices 1 (
reference-source/reference-tools) and 3 (the other ui-server unit files) are open as #3395 againstepic/1849-test-cost(head910eee3f5c9b, basef61599e6b), marked ready; its hosted proof is CI run 41547783884.private-index176 fails on the untouched base on the local host, so a replacement couldn't be shown green there.private-index176 residueThis issue stays open under
Refs.7 remaining items
schlessera commentedon Nov 3, 2026
Slices 4 and 5 delivered to
epic/1849-test-costas42b4e81f1via #3440. Still open: slice 2 (browser/layout), theprivate-index176 residue, and slice 6 (negative observations), as listed in #3440.schlessera commentedon Nov 3, 2026
Claimed (token
wc3332-s6n) for slice 6 (negative observations) from #3440. Branchtest/3332-negative-observationsfromepic/1849-test-costat42b4e81f1. Browser/layout rows stay with slice 2.test: replace the remaining storage-scan-offloop maintenance and canc…
schlessera commentedon Nov 3, 2026
Slice 6 (negative observations), ui-server part plus the six reclassified windows, is open as #3463 against
epic/1849-test-cost(headc857a2b7f, base42b4e81f1), marked ready; hosted proof is CI run 41625311098.storage-scan-offloop272, now use deterministic signals: write-worker hold replies, a held step then one macrotask, ordered timer/socket markers. 17 keep their wait with the reason in source (10 of them are failure maxima). The 5 other reclassified windows state why a window is the only observable. Every replacement has a mutation receipt in the PR. No timeout changed;proof-system classify: not a proof-system change.worker-event-loop, Piearly-cancel-lifecycle/worker-stdio-release, ui-reactuntrusted-marks-runtime, ui-sdkidentity-broker-qualification.native/worker-steps-event-loop, rootbuild-concurrency/test-invocation-lifetime). The 5 browser/layout rows stay with slice 2.schlessera commentedon Nov 3, 2026
Claimed (token
wc3332-s6r) for the rest of slice 6 (negative observations) outside ui-server, as listed in #3463: Claudeworker-event-loop, Piearly-cancel-lifecycle/worker-stdio-release, ui-reactuntrusted-marks-runtime, ui-sdkidentity-broker-qualification.native/worker-steps-event-loop, rootbuild-concurrency/test-invocation-lifetime. Branchtest/3332-negative-observations-restfromepic/1849-test-costat42b4e81f1. Path collisions: #3439 editstest-invocation-lifetime(kept off its lines); #3426, #3446, #3448 and #3463 editdocs/process/test-waits.md, which this slice leaves alone.schlessera commentedon Nov 3, 2026
The rest of slice 6 (non-ui-server negative observations) is open as #3469 against
epic/1849-test-cost(heade658129d7ca8, base42b4e81f1), marked ready. Its hosted proof is CI run 41633660429.worker-event-loop135, Piworker-stdio-release113, and ui-sdkworker-steps-event-loop139 and 180. Each has a mutation receipt in the PR.worker-steps-event-loop136 and 595,build-concurrency80 andtest-invocation-lifetime205.build-concurrency80 now opens its window only after the failing compiler has exited.proof-system classify: not a proof-system change.untrusted-marks-runtime406. The file is not on the epic base; it came tomainafter the merge-base, and it is a browser test.private-index176 residue.test-waits.mdre-census rows for this PR, after test: justify or replace ui-server negative-observation windows (#3332 slice 6) #3463 lands.test: justify or replace ui-server negative-observation windows (#3332 …
schlessera commentedon Nov 3, 2026
Slice 6 (the ui-server part) delivered to
epic/1849-test-costas429804d3evia #3463. The rest is listed in #3469 and #3463.schlessera commentedon Nov 3, 2026
Claimed (token
wc3332-s2b) for slice 2 (browser and layout): the 25 replaceable rows listed in #3362, the five browser/layout negative windows from #3463 (conversation-consent,conversation-controls,storage-guidance.layout,transcript-qualifiers×2), and ui-reactuntrusted-marks-runtime406 from #3469. Branchtest/3332-browser-layout-waitsfromepic/1849-test-costat429804d3e, withorigin/main(d142e997b) merged in so the branch carriesuntrusted-marks-runtime.test.ts. Path collisions: #3054, #3056, #3059 and #3069 (drafts) editconversation.offline.tsx; #3426, #3446 and #3448 editdocs/process/test-waits.md. This slice keeps off #3469's files.test: justify or replace the remaining non-ui-server negative-observa…
schlessera commentedon Nov 3, 2026
Pointer from #3475 (PR #3480, targeting
epic/1849-test-cost):packages/ui-react/tests/browser/recordings.offline.tsxhas the same pattern,expect.pollwith the default 1 s timeout waiting on nativecommittedevents, at lines 63, 165, 228, 288, 560 and 580. #3480 addsrecordingCell(ctx).committed(n), an event-based wait, which these could use once it lands. They are left for this census, so I haven't changed them.schlessera commentedon Nov 3, 2026
Slice 2 (browser and layout) is open as #3487 against
epic/1849-test-cost(headf747c34e8, basefce827eba) and is marked ready. Hosted proof: CI run 41652100147.share-review(12 rows: admission decided through native lock-request settlement, scan-input checks, the dismiss queue, the flushed lost response),storage-guidance.layout(3),transcript-qualifiers(2), theconversation-controlsreply gap,conversation-endpoint,conversation-consentandconversation.offline. Kept, with the reason now in source:recording-limitsstarvation and the dialogue/contextual fixture drains. Reclassified as justified:hygiene-lifecycle-command234,storage-server-command39 andliveness-clock53. Mutation receipts are in the PR. No timeout changed.proof-system classify: not a proof-system change.untrusted-marks-runtime406 and the newerconversation-controlsattach-tooltip window. Both files arrived onmainafter the epic's merge-base. Mergingmaininto the slice made it a proof-system change, so both wait for the epic to carry them; the PR describes the ready replacements.private-index176 residue.test-waits.mdrows for test: justify or replace the remaining non-ui-server negative-observation waits (#3332 slice 6) #3469.test(ui-react): replace browser and layout real-time waits with deter…