feat(settings,host): Video calls moves to Settings › Experimental, off until the account turns it on
Merged
CH
4d ago+96+96+01234567890123456789-73-73-01234567890123456789
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 newEXPERIMENT.VIDEO_CALLS(video-calls) registry entry, listed first since it is newest. It has its own anchor and counted value (PRODUCT_EXPERIMENT.VIDEO_CALLS). ThevoiceVideotoggle and itsvoice_videoid are removed.@luke/host:composeLivereadsexperimentOn(snapshot.experiments, VIDEO_CALLS)as each call comes to stand, where it used to readvoiceVideo. 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.mdnow 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 aboutvideo-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 realSettingsStorewith 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.tsis 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
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.