feat(director): /setup recalls the guide over the air [spec 10] - #141
Merged
Conversation
The mid-broadcast slice of the conversation-partner boundary (grilling decisions Q5/Q6) — and the reopen path issue #97 was missing: - A typed /setup is a command at every steer site (the /settings precedent): the segment loop parks inside the app's setupRecall while whatever is on the air plays out — the record keeps spinning, no new segment opens — and resumes when the conversation ends. Stub runs answer with the shell pointer. Proven live (pty + real brain): offer reappears mid-broadcast, the loop stays parked, decline resumes it. - The recall runs the same runSetup, explicit like `make setup`; a clean machine answers "everything checks out — nothing to fix." - Outcomes apply live where they can: the voice provider swaps behind a delegate when the resolved voice changed (buffered look-ahead dropped first; the old provider closes after a grace so the clip on air keeps its file), the TUI identity line re-greets, and a repair that the environment outranks says so honestly. - An auth-shaped synth failure (401/402/403) now raises an app seam that turns the CONFIGURED endpoint back into a voice gap — and names the /setup path once — so a lapsed key is no longer a silently mute radio with no way back (closes #97). Peer review (codex gpt-5.6-sol, xhigh): 4 findings, 4 applied — the failing-endpoint gap, look-ahead invalidation across the swap, quit honored inside the recall at all three steer sites, and the identity refresh — locked with regression tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements specs/spec10/10-tui.md (§3.2-C, §3.4) and specs/spec03/03-03-guide-harness.md (§7) — the mid-broadcast slice of the conversation-partner boundary (PR 2 of 2, after #140). Closes #97.
/setuprecalls the guide over the air. A command at every steer site (the/settingsprecedent): the Director's segment loop parks inside the app'ssetupRecallwhile whatever is on the air plays out — the record keeps spinning (boundary decision Q6), no new segment opens — and resumes when the conversation ends. Stub runs answer with the shell pointer. Single-flight; a/quitconsumed by the guide's reader is handed back to the Director and honored at all three sites.everything checks out — nothing to fix.voiceChanged) — buffered look-ahead dropped first, the old provider closed after a grace so the clip on air keeps its file — the TUI identity line re-greets (refreshIdentity), and a repair the environment outranks says so honestly instead of pretending.voicegap for the recall's probes, and names the way back once —type /setup to fix it— instead of skipping segments silently forever.Verification
pnpm test864 green (new: steer parsing + parked-loop resume + stub pointer + auth hint once + non-auth silence + quit-inside-recall, failing-endpoint gap, zero-gap explicit feedback,setupComplete/voiceChangedunits,refreshIdentityre-greet);tsc+ oxlint clean./setupre-probes and re-opens the offer card → the loop stays parked (no new segments while the card waits) → decline resumes the broadcast →/quitacks. PASS, twice (before and after the review fixes).gpt-5.6-sol, xhigh): 4 findings, 4 applied (failing-endpoint gap reachability; look-ahead invalidation across the voice swap; quit honored inside the recall; TUI identity refresh), each locked with a regression test.AI coding brief
🤖 Generated with Claude Code