Repository navigation
feat(frontend): hand a Tavus conversation over at its ceiling - #88
Merged
Merged
Conversation
Arm the conversation-age timer only where a handle becomes active (plain publish or promotion), so a crossfade incoming no longer replaces the live handle's timer. Restore the joined-room stop on the non-crossfade boundary fallback, and document why an unannounced end during a boundary or handover is left to those paths.
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.
What
FE-06 of
tavus-single-session-interview: the ceiling handover. Three commits.chore: syncopenapi.jsonand the generated types with the merged api contract (conversation_ttl_secondsonly; generated withbun run codegen).conversation_ttl_secondsminusHANDOVER_LEAD_MS(120 s) calls/starton thein_corsorow to obtain the fresh handle with the question clock preserved. The timer is armed only for Tavus handles with a positive lead, re-armed per fresh handle, cleared on teardown/pause/clearActiveProvider, and skips when the handle is no longer live or a boundary/handover is in flight. It does not mute the outgoing microphone (the candidate is mid-answer).stoppedonce on aleft-meetingit did not cause (the client recognises its own stops through aWeakSetfilled by the idempotent stop wrapper); the client resumes thein_corsorow via/start, but not for a deliberate stop or after the final competency.Decisions
/startresponse now publishes the new handle asincomingand keeps the joined one live (before: stop it and showconnecting). The old FE-04 test asserting that was changed accordingly.ProviderSession.playerKeyequalsdbSessionIdexcept for a replacement on the same row (a handover keeps thesession_id), where it takes a negative serial;playersandnotifyPainteduse it.tests/unit/arch/attribution-cursor-arch.spec.tsnow expects zerox.dbSessionIdreads.interview-handover.spec.ts,use-interview-session.spec.ts) are byte-identical todevelop.Verification
RED first (5 of 13 ceiling tests failed before; the provider-ended spec failed before). Mutations (restore the HeyGen-only gate, drop the lead subtraction, treat a deliberate stop as unannounced) each fail tests and were reverted. Full Vitest 119 files / 2996 tests, 96.26% lines (CI threshold 85); typecheck and lint pass. Not verified: real Daily/Tavus, Playwright (FE-07), and a closing phrase or question-timer tick arriving mid-handover (the existing guards ignore it; untested).