zebra-spaces: formalize self-listener as FSM — pure spec + observer-driven side effects + 12 unit tests
Fox 2026-06-04 directive: every system should be a state machine with unit + integration + functional test coverage. Implicit-state defects keep biting (kicked-listener-UI-still-green, two-kick race, cohost-toggle-kills-phone, audio-wedge-no-recovery). Starting the formalization with the most-broken-today system: self-listener mode. Spec (selfListenerSpec): off ──ENABLE / TOGGLE──▶ on on ──DISABLE / TOGGLE / UNMUTE / DEMOTED / CLEAR──▶ off Sits next to publishSpec, subscribeSpec, callSpec, remoteTileSpec in zebra-spaces.html. Composed by wireZebraMachines() into roomMachines.selfListener. UNMUTE edge encodes fox's invariant: "unmuting should seamlessly switch them back to the now of the conversation webrtc mesh" — if the user clicks unmute while on, they implicitly drop back to off. Side effects (mic mute, streamMode enrolment, remoteAudio muting) move out of enableSelfListenerMode/disableSelfListenerMode (deleted) into runSelfListenerEnable / runSelfListenerDisable, called by an observer attached to the FSM. Pure spec stays Node-testable; the runtime drives the actual audio plumbing from observed transitions. Boolean selfListenerMode flag deleted. window.selfListenerMode is now a getter against the FSM state — single source of truth, no drift possible. All callers (toggle-button click, mute-unmute, peer-joined, role-demote, leave) now dispatch FSM events instead of calling helpers directly. Tests in test/self-listener-fsm.test.js: - starts in off - TOGGLE / ENABLE / DISABLE transitions - UNMUTE drops to off (the fox-invariant) - UNMUTE / CLEAR while off is no-op - DEMOTED drops to off - CLEAR drops to off - unknown event refuses - observer fires on real transitions with prev/state - runtime observer skips prev===state edges Existing test/zebra-fsm.test.js updated to extract+expose selfListenerSpec alongside the other specs (the wireZebraMachines extract is the integration test). Makefile gets test-self-listener target + slot in test-all. All test suites green: - self-listener: 12 / 12 - zebra-fsm: 83 / 83 - mod-actions: 6 / 6 - web-protocol: 3348 / 3348 - multi-peer-mesh: 8 / 8 - video-track-removal: 18 / 18
This commit is contained in:
parent
d71a37f84a
commit
f4dbc5cc6c
4 changed files with 251 additions and 38 deletions
12
Makefile
12
Makefile
|
|
@ -53,6 +53,14 @@ test-mesh:
|
|||
test-mod-actions:
|
||||
@node test/mod-action-serializer.test.js
|
||||
|
||||
# SelfListenerFSM — pins the state-machine contract for the speaker/
|
||||
# cohost/host "switch myself to the buffered HTTP listener stream"
|
||||
# toggle. Extracts createFSM + selfListenerSpec from the live page so
|
||||
# the spec can't drift from shipped transitions (off↔on with
|
||||
# TOGGLE/ENABLE/DISABLE/UNMUTE/DEMOTED/CLEAR edges).
|
||||
test-self-listener:
|
||||
@node test/self-listener-fsm.test.js
|
||||
|
||||
# zebra-spaces JS↔Go protocol parity + vault + ed25519 + (optionally) a live
|
||||
# server flow. The live-server tier auto-runs when proxy.unturf.com sits
|
||||
# alongside this checkout AND has a Go toolchain — we build the relay binary
|
||||
|
|
@ -70,7 +78,7 @@ test-zebra-spaces:
|
|||
ZEBRA_SPACES_BINARY=$$bin node test/zebra-spaces.test.js; \
|
||||
rc=$$?; rm -f /tmp/zspc-signal-test; exit $$rc
|
||||
|
||||
test-all: test/unit test/integration test/functional test-web test-fsm test-video-removal test-mesh test-mod-actions test-zebra-spaces
|
||||
test-all: test/unit test/integration test/functional test-web test-fsm test-video-removal test-mesh test-mod-actions test-self-listener test-zebra-spaces
|
||||
@echo "--- unit ---"
|
||||
@./test/unit
|
||||
@echo "--- integration ---"
|
||||
|
|
@ -87,6 +95,8 @@ test-all: test/unit test/integration test/functional test-web test-fsm test-vide
|
|||
@node test/multi-peer-mesh.test.js
|
||||
@echo "--- mod-action serializer ---"
|
||||
@node test/mod-action-serializer.test.js
|
||||
@echo "--- self-listener FSM ---"
|
||||
@node test/self-listener-fsm.test.js
|
||||
@echo "--- zebra-spaces ---"
|
||||
@$(MAKE) -s test-zebra-spaces
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue