FE-1664: Experiment Live Full Brunch Integration - #9673
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
0acc0bc to
81ec75d
Compare
a3e4f39 to
14cad89
Compare
14cad89 to
36564e3
Compare
`PR_DESCRIPTION.md` was a working draft of PR #9673's body inherited from the FE-1664 branch. It failed markdownlint (MD022) and oxfmt on PR #9704, and the live PR body on GitHub is the close report. The draft remains recoverable at 006cbce. Co-authored-by: Amp <amp@ampcode.com> Amp-Thread-ID: https://ampcode.com/threads/T-01a0a049-eef5-776f-aa27-79b476a7414a Co-authored-by: Kostandin Angjellari <ka@hash.ai>
|
Code review findings:
Focused Voice tests pass (5 files, 146 tests), but the first and third behaviors are currently encoded by tests rather than falsified by them. |
|
@lunelson Addressed at the restacked head 6d188da. (1) Brunch Stop clears only the interrupted bridge turn and leaves Live/WebRTC plus consent active. (2) Completed correlated responses no longer depend on observing an intermediate busy render. (3) A coalesced turn whose prose was already delivered now receives a targeted continue-without-repeating instruction for its distinct delegation. (4) Empty finalized input consumes and resolves its delegation before later input. The focused Live regression set passes (99 tests across the conversation, bridge, and control suites). |
|
Follow-up remote review confirms the four earlier findings were addressed, but the Stop fix leaves one related delegation leak.
Please resolve attached/unclaimed delegations when stopping only the Brunch response, while reserving silent cleanup for full Voice-session shutdown. Add a regression that attaches a delegation, calls |
|
@lunelson Addressed in f6203c2. Response-only Stop now sends the targeted no-completion/continue instruction to every attached and unclaimed Live delegation before clearing turn correlation. Full Voice-session shutdown remains silent because |
lunelson
left a comment
There was a problem hiding this comment.
Re-reviewed the current remote head. The response-only Stop path now resolves attached and unclaimed Live delegations before clearing correlation, and the regression verifies a later utterance cannot inherit them. I found no remaining child-specific code issue. The parent activity-state concern remains owned by #9671.
Co-authored-by: Amp <amp@ampcode.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit d9b6d6a. Configure here.
| if (this.#abort.signal.aborted) return; | ||
| this.#chat = { ...this.#chat, stopped: true }; | ||
| this.#interruptTurns(); | ||
| } |
There was a problem hiding this comment.
Stop drops Live tracking mid-submit
High Severity
stopResponse() tells Live the backend could not take the turn and removes it from tracking, but it never aborts the in-flight submit(). That call still uses the session abort signal, so a queued utterance spoken during playback is later admitted to Brunch with no Live correlation. The waiting-input slot is also cleared, so a later utterance can overlap that submit. Full stop() aborts; response-only Stop does not.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit d9b6d6a. Configure here.


Note
Experiment 2: This PR demonstrates the end-to-end GPT-Live and Brunch integration, including tool-backed turns. Manual testing passed. Stabilization issues identified during the experiment are addressed in follow-up #9704.
🌟 What is the purpose of this PR?
Experiment with GPT-Live as the full-duplex spoken interface for Brunch while
keeping Brunch as the only domain and tool authority. A separate
gpt-4o-transcribesession turns finalized speech into ordinary Brunch input;settled Brunch answers are returned to Live as commentary to speak.
The path works end to end in manual sessions, including tool-backed Brunch turns.
Manual testing of this experiment passed. Stabilization issues identified during
testing are owned by downstream #9704. Merge dependencies #9671 and #9719 land
first; this PR should not be deployed without the stabilization follow-up.
🔗 Related links
🚫 Blocked by
🔍 What does this change?
gpt-4o-transcribeWebRTC sessions from one consentedmicrophone capture. Only finalized, provider-ordered transcription items enter
the existing composer and Flue admission path.
Complete settled Brunch prose is offered once as commentary; dropped, failed,
or textless turns instruct Live to ask the person to continue.
Live has no tools. Its native audio remains best effort and is not treated as
canonical output or proof of playback.
client_event_id, avoidstruncation/retry/replay. Explicit Voice Stop, mode exit, panel close, and provider failure tear down both transports; stopping only the Brunch response keeps Voice listening.
FE-1664: Refine host-owned Voice sessions in Petrinaut #9719. Provider-independent dock layout and error presentation live in that PR.
coverage plus the corresponding user and mission documentation.
Pre-Merge Checklist 🚀
🚢 Has this modified a publishable library?
This PR:
This PR updates Petrinaut user documentation for the Live integration; #9719 owns the publishable library changes and changeset.
📜 Does this require a change to the docs?
The changes in this PR:
🕸️ Does this require a change to the Turbo Graph?
The changes in this PR:
Echo, background audio, and provider hallucination have not been distinguished.
the existing one-waiting-input policy retains.
belongs to a particular transcription item.
settlement. Commentary acceptance is not playback proof.
unproved.
🐾 Next steps
Run the structured acceptance steps with headphones. Use FE-1712's
speaker-versus-headphone comparison to classify phantom input, then reassess the
capture constraints and one-waiting-input policy.
🛡 What tests cover this?
live-conversation.test.ts: dual-session lifecycle, transcription ordering,delegation correlation, rejection formats, timeout/recovery, and Stop.
live-brunch-bridge.test.ts: admission, settlement, textless/failed turns,source freezing, and no replay.
live-conversation-control.test.tsx: consent, Brunch wiring, dock states, andstale-message handling.
openai-transcription-session.test.ts: client-secret/SDP exchange, redaction,limits, timeout, and abort behavior.
Local verification for this revision:
localStoragein the local Node environmentThese checks do not establish naturalness, echo safety, transcription fidelity, or
heard playback.
❓ How to test this?
Prepare the website dependencies, codegen, and examples, then start one provider:
Open
http://localhost:4915/new, wear headphones, and:output. Confirm ending Voice stops capture and playback.
📹 Demo
No shareable demo is available.