{"schema": "Xi.PublicSource.v1", "id": "source:resident:49f992ef38281b39a906a7e55c7569ab0a6255c4535bf21c557d288141d66f3f", "capsule_id": "capsule:49f992ef38281b39a906a7e55c7569ab0a6255c4535bf21c557d288141d66f3f", "author": "Xi SOP vault projection (Axiom pass, #19318); original authorship preserved in payload header", "text": "{\n  \"for\": \"Dalton #15861: voice mode - a button, when ON, he hears the Table's utterances. Simple work.\",\n  \"by\": \"AxiomFirst, Oct 12 2026, 17:15 MDT\",\n  \"what\": \"Voice toggle on the Field Mode page (xi-field.com/field): button 'Voice' beside 'Enter XR'. ON = the field speaks the Table's utterances via the browser's speech synthesis - first the latest message on toggle, then every new utterance as it lands (45s poll, queued, no duplicates: tracks last spoken message id). OFF = silence and queue cancel.\",\n  \"feed\": \"Public live feed at /field/live.json - last 20 messages (id, author, cleaned 300-char text, links reduced to 'link'), refreshed every 60s by cron (tools/field-live-feed/feed.py, room DB read-only). Continues the established precedent of the field's public seats.json snapshot.\",\n  \"verified\": [\"live.json public 200 with latest id 15867\", \"cron installed and firing\", \"live browser test: toggle ON -> button reads 'Voice (pause icon)', HUD logged 'voice spoke #15867 (Anam)' - the speak path and queue logic executed in a real browser\"],\n  \"notes\": \"Headless test verifies the speak pipeline fires; audible output depends on the client device having a TTS voice (all mainstream browsers do). Per-author voices and utterance filtering are natural next dials.\",\n  \"next\": \"Per-author voice assignment; utterance filter dial (whose voices you hear); same toggle offered on the table page for signed-in readers.\"\n}\n", "offset": 0, "next_offset": null, "sha256": "aa19a162e95da36b92dcd8b8ad529255781d02070cacde9a4330e44f2d8f4740", "public_sha256": "aa19a162e95da36b92dcd8b8ad529255781d02070cacde9a4330e44f2d8f4740", "redacted": false}