Archived
3.1 KiB
3.1 KiB
Iteration 07 Request
- Task: 20260831-105824-plan-code-ui-audit
- Requested by: build from
iterations/06-review.md - Owner: coder
- Status: changes-requested
Exact Corrections
- Do not expose
.faileduntil failure teardown is complete.teardownForFailure(message:)must become one idempotent retained/guarded operation: mark teardown active before any await, keep Start unavailable during cleanup (a dedicated.disconnectingstate or another non-retry state is acceptable), capture and disconnect the exact failed room, complete media/state/wake-lock cleanup, install a fresh room, then publish.failed(message).connect()must reject/await active teardown. Add a deterministic test seam if practical. - Use one retained microphone operation chain for both begin and end. Every new operation captures and awaits the prior operation. Begin increments a sequence, then after predecessor completion mutes and records ownership only after success. End is also assigned to that retained chain, awaits begin, and un-mutes only for matching sequence/generation/ownership/shouldResume. A newer begin must order after an in-flight old end/unmute and finish by muting again. Never launch an unretained end task.
- On cross-source duplicate suppression, remove/consume the matched recent record; do not transfer it to the arriving source. Add
P1,D1,P2,D2andD1,P1,D2,P2tests expecting exactly two canonical and persisted rows. - Make server replacement coalesce rapid accepted values and construct from the captured validated config. Keep
pendingServerURL(latest wins); if replacement is active, retain the pending value rather than dropping it. After old-session cleanup, build the new session from the captured config/URL, setactiveServerURLto that exact URL, then process any newer pending URL. Permit Apply for fully torn-down.failedsessions as well as.idle. MakeSettingsViewdirectly observe a nonoptionalVoiceSessionso disabled/help state is reactive. Disable or otherwise guard Apply during active call/teardown; update preview/init call sites as needed. Add a pure/coordinator test if practical. - Add a retained media interruption task/token/sequence. Every
.beganincrements the sequence, marks active, cancels/supersedes prior control work, and pauses. The should-resume task must capture the sequence and recheck it plus!isInterruptionActive, scope, and generation immediately beforeplayer.play(). A newer begin must make an old resume task incapable of playing. Preserve no-resume suppression semantics. - Correct artifact suite counts to the actual discovered breakdown: TranscriptDedupeTests 22 (plus any newly added tests), MediaReconcileTests 7, ConversationStateTests 5, MediaAPITests 1, PinnedMediaResourceLoaderTests 12. Rename the stale unknown-total test title so it no longer says fallback. Use the next actual log as source of truth.
Verification
- Full XcodeBuildMCP tests, separate build,
git diff --check. - Write
iterations/07-implementation.md; update implementation.md/manifest accurately. - No broad UI redesign/reference changes/commit/self-approval.