Skip to content

Reconcile the running audio provider when SayPi authentication changes #617

Description

@rosscado

Problem

A host tab that stays open across SayPi sign-out or sign-in does not reconcile its running audio provider with the new authentication state, even though a fresh provider lookup can return the correct provider.

Scope and evidence

This concerns the running audio actor and host-audio ownership on Pi and the other supported chat hosts. It is separate from preserving the saved voice (#608), rendering the correct Pi sign-in notice (#607), the catalog invalidation fixed in #456, and the lost audio-element binding fixed in #602. The saved voice should remain a preference throughout an auth transition.

Source audit at d5b28cd394186a31774497224523b85f10155dee found:

The missing subscription also existed before this release work; this is a separate follow-up, not a new regression attributed to #608. The audit establishes the missing handoff in source. An attended sign-out/sign-in playback reproduction has not yet been performed, so the exact audible effect across hosts and browsers still needs verification.

Reproduction / verification

  1. Add a hermetic integration case using the real output actor, an authenticated context, and a saved remote voice. Initialize the provider through the normal event path.
  2. Reconcile sign-out through the existing auth-status path without reloading the page or selecting another voice. Compare the actor provider and host-mute ownership with a fresh getActiveAudioProvider result. The current wiring leaves the actor on its previous provider.
  3. Repeat from signed-out initialization through sign-in with the saved choice unchanged. Verify the next remote stream is accepted without requiring a second explicit voice selection.
  4. During an attended host check, repeat the two transitions in an already-open Pi tab, then confirm the relevant behavior on Claude/ChatGPT. Record actual audible output, host mute state, and browser. Run a bounded confirmation turn only when authorized; no unattended account traffic is needed.

Expected: effective provider, actor acceptance, and host-audio ownership agree after auth reconciliation. Actual source path: JWT state and menu presentation can change while the running actor retains the old provider.

Acceptance criteria

  • Both auth-transition directions update the effective running provider without a page reload or another voice selection.
  • Signed-out Pi can use its native voice; signing in can resume an eligible saved remote voice. Hosts without a usable native fallback do not claim unavailable SayPi playback.
  • A saved remote voice survives the transition, and a newer explicit voice choice wins over an older asynchronous reconciliation.
  • Hermetic tests exercise the real actor and host-mute seam, including a transition during an outstanding preference read; getter-only assertions are insufficient.
  • An attended confirmation records the supported-host behavior and any Chrome/Firefox differences without claiming unperformed checks.

Filed from independent Codex release review. Auth/JWT implementation, if required, remains subject to the repository's existing review and founder-sign-off rules.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions