2026 10 07 reader control and replay - SyberLabs/RISE GitHub Wiki
Reader control and replay (LIVE-005, M2) — 2026-10-07
What M2 of the Composer-first roadmap asks of a composed explanation, and where each line now stands in the embed (the stage: Play/Pause and Settings). Built and pinned by tests; the real-host witness waits for the whole product to be provisionally ready (owner, 2026-10-07), so LIVE-005 is in review, not done.
The five lines
| M2 asks | Where it stands | Held by |
|---|---|---|
| Begin, pause, resume and Stop are predictable; Stop cancels pending speech and future work | Begin is the poster's Play. Stop folds into Pause (the voice held at once) and the host's ui/resource-teardown, which stops the runtime: every timer, voice and connection released. Late exits and teardown during a slow start build nothing |
runtime.test.js "stopping"; LiveHost.test.js "does not recreate playback after teardown during delayed runtime startup", the late exit-callback cases; e2e/live-mcp.spec.js "the host's ping is answered, and its request to tear down is answered and ends the reading" |
| Keep the useful local controls; say which are session preferences and which durable intent | Still imagery and Text size are the reader's, kept in the frame's own settings; Intensity and Theme are for this reading only (the Current's theme is the author's) | the embed stage decision, §Settings |
| Place is kept through pause, resume and navigation; late callbacks never restart stopped or replaced playback | A pause, a hidden page or a closed card silences the voice and remembers the phrase on screen; on Play the voice and the words take that phrase up together. Nothing pauses the browser's shared speech engine, so a card taken away while held leaves no silence behind (#484). A closed run ignores its voice's and Player's late reports | dive-voice.test.js "held and taken up again without a Dive"; voices/browser.test.js "the speech engine, which every page in the browser shares"; the runtime's run.closed guards |
| Controls work at phone widths, by keyboard, and with reduced motion | Both objects stay whole in view from 420 px wide in a 481 px frame; every Settings row is a native control; the poster's Play and Play again hand the focus to the object that replaces them, so a keyboard reader goes Enter, Space, Tab, Escape without losing their place; the system's reduced motion holds the imagery still mid-reading | e2e/live-mcp.spec.js "from the keyboard alone…", "in a short frame both objects stay whole in view…", "under reduced motion…", "a maximum valid CJK title keeps Play reachable in phone-sized host frames"; stage-controls.test.js focus cases |
| Save or export the admitted explanation through the interchange/Vault machinery, and verify replay | Not in the embed (decided here, reversible): the card shows two controls by the owner's direction, and a Vault inside ChatGPT's partitioned frame storage would be core state where the platform asks for none. Replay is the host's: a reload redelivers the result and shows the poster again with no autoplay, and Play again rebuilds the reading from the admitted answer | e2e/live-mcp.spec.js "reopening the nested frame reinitializes and plays the host result from its first passage"; LiveHost.test.js "on Play again, stops the finished runtime, builds a new one…" |
Waiting for the final witness
The real host: keyboard and Play again in ChatGPT, a phone, and the voice through a hidden tab and a closed card on a release that includes #484 (the 2026-10-07 witness found the defects #484 fixes). If the owner wants a saved copy of an answer outside ChatGPT, that is a standalone /live feature, not the card's.
Published from docs/product/discussions/2026-10-07-reader-control-and-replay.md. Edits made here are overwritten on the next push to main.