feat(settings,host): Video calls moves to Settings › Experimental, off until the account turns it on

Merged
CH
4d ago
+96-73

What

The Keyframe avatar's switch moves from Settings › Voice ("Video calls", the voiceVideo setting from #2565) to Settings › Experimental, following the pattern in experimental-page.tsx and docs/proposals/experimental-settings.md. There is one switch now, none under Voice, and it stays off until turned on.

  • @luke/settings: a new EXPERIMENT.VIDEO_CALLS (video-calls) registry entry, listed first since it is newest. It has its own anchor and counted value (PRODUCT_EXPERIMENT.VIDEO_CALLS). The voiceVideo toggle and its voice_video id are removed.
  • @luke/host: composeLive reads experimentOn(snapshot.experiments, VIDEO_CALLS) as each call comes to stand, where it used to read voiceVideo. A store that cannot be read still opens the call without video.
  • Since experiments are stored per account, the choice now follows the account to every Mac, the same as Factory and Automations.
  • PRIVACY.md and packages/service/README.md now say "the Video calls experiment … in Settings › Experimental". PRIVACY also notes that the choice follows the account.

Tests

  • experimental-page.test.ts: Video calls is drawn first, and its Send feedback opens the dialog about video-calls.
  • settings-search.test.ts: searching "Video calls" or "Keyframe" lands on the Experimental row. A new test checks that "Video calls" is found on the Experimental page only and not among the Voice controls; it fails on the old schema.
  • compose-live.test.ts: the avatar tests use a real SettingsStore with an account signed in and the experiment cached the way the service answers it (cacheExperiments). These cover video on, off by default, and turning it on mid-call, which takes effect on the next call.
  • The Voice-page row test in schema.test.ts is removed with the row.

./scripts/check.sh exits 0.

Not verified

  • CI could not verify this; Mac evidence pending (the user will retest on the Mac).
  • No live Keyframe session was opened, so the real avatar coming up for a call with the experiment on is untested against Keyframe. Coverage stops at the scripted voice socket in compose-live.test.ts.
  • Turning the experiment off mid-call leaves that call's avatar up, because the experiment is read only as a call comes to stand, the same as the old setting. The tile's own "video off" still ends it.

🤖 Generated with Claude Code


Open workspace in Conductor


Devin Review


Summary by cubic

Moves Keyframe video calls from the voiceVideo setting in Settings › Voice to a new Video calls experiment in Settings › Experimental, which stays off until the account turns it on. The host now reads the experiment when each call comes to stand, so a settings store that cannot be read still opens the call without video.

  • The choice follows the account to every Mac, like Factory and Automations.
  • PRIVACY.md and the service README now describe the switch under Settings › Experimental.
  • Mac-side behavior and live Keyframe sessions were not verified; coverage stops at the scripted voice socket tests.