Files
Final-Year-Project/docs/STREAMING_SIMPLIFICATION_VALIDATION_MATRIX.md

13 KiB

Validation Matrix: Streaming Simplification (WebRTC-only)

Row ID Checklist Item Status Code Evidence Test Evidence Runtime Evidence
B1 Add/confirm SIMPLE_STREAMING environment/config switch done Backend/media/config.ts:28,44-50 (parseFeatureFlag, simpleStreamingEnabled, streamRecordingEnabled) bun test -> tests/media-config.test.ts passed (3 cases) bunx tsc --noEmit exited 0 in Backend/
B2 Update stream request endpoint with simplified flow and role/link checks done Backend/routes/streams.ts:168-184 (createStreamRequestedPayload, simplified /streams/request response) bun test -> tests/streaming-simple.test.ts passed (builds deterministic requested and started payloads) bunx tsc --noEmit exited 0 in Backend/
B3 Update stream accept endpoint to set streaming and emit started done Backend/routes/streams.ts:344-356 (createStreamStartedPayload, simplified accept response) bun test -> tests/streaming-simple.test.ts passed (builds deterministic requested and started payloads) bunx tsc --noEmit exited 0 in Backend/
B4 Update stream end endpoint with proper status, end timestamp, lifecycle emit done Backend/routes/streams.ts:660-721 (status: nextStatus, createStreamEndedPayload, simplified end response) bun test -> tests/streaming-simple.test.ts passed (normalizes ended payload and strips provider fields from API response) bunx tsc --noEmit exited 0 in Backend/
B5 Remove media provider dependency in accept logic done Backend/media/service.ts:17-24 (mediaProviderRuntimeEnabled, createLiveMediaSession), Backend/routes/streams.ts:320-334 (accept uses wrapper result) bun test -> tests/media-config.test.ts, tests/streaming-simple.test.ts both passed bunx tsc --noEmit exited 0 in Backend/
B6 Gate/remove recording creation path in stream end logic done Backend/media/config.ts:45,50, Backend/routes/streams.ts:681-683 (streamRecordingEnabled) bun test passed all 17 tests in Backend/tests/* bunx tsc --noEmit exited 0 in Backend/
B7 Return minimal deterministic stream payloads done Backend/streaming/simple.ts:35-73 (createStream*Payload, toSimpleStreamSessionResponse), Backend/routes/streams.ts:184,356,721 bun test -> tests/streaming-simple.test.ts passed (3 cases) bunx tsc --noEmit exited 0 in Backend/
B8 Document deprecated media fields in schema done Backend/db/schema.ts:68-69 (legacy provider field comments) bun test passed all 17 tests in Backend/tests/* bunx tsc --noEmit exited 0 in Backend/
B9 Guard media service calls behind non-simplified mode done Backend/media/service.ts:17-24 (mediaProviderRuntimeEnabled, createLiveMediaSession) bun test -> tests/media-config.test.ts passed (3 cases) bunx tsc --noEmit exited 0 in Backend/
B10 Annotate mock provider as metadata-only in phase-1 path done Backend/media/providers/mock.ts:40-41 (runtime compatibility comment), Backend/routes/streams.ts:320-334 (runtime no longer requires provider session in simplified mode) bun test passed all 17 tests in Backend/tests/* bunx tsc --noEmit exited 0 in Backend/
B11 Ensure SFU service not required in simplified mode done Backend/media/sfu/service.ts:1,6-8 (simpleStreamingEnabled short-circuit) bun test passed all 17 tests in Backend/tests/* bunx tsc --noEmit exited 0 in Backend/
B12 Deprecate command-table stream lifecycle usage under simplified mode done Backend/routes/commands.ts:53, Backend/routes/streams.ts:168-184, Backend/realtime/gateway.ts:110-116 bun test passed all 17 tests in Backend/tests/* bunx tsc --noEmit exited 0 in Backend/
R13 Remove stream:frame event listener/sender from gateway done Backend/realtime/gateway.ts:323-349 (webrtc:signal only in streaming path) bun test passed all 17 tests in Backend/tests/* rg -n "stream:frame" Backend/realtime/gateway.ts returned no matches; bunx tsc --noEmit exited 0
R14 Remove frame-relay participant cache and validation branches done Backend/realtime/gateway.ts:240-349 (no verifiedRelayTargets, no frame validation branch) bun test passed all 17 tests in Backend/tests/* rg -n "stream:frame" Backend/realtime/gateway.ts returned no matches; bunx tsc --noEmit exited 0
R15 Keep only webrtc:signal relay logic for streaming done Backend/realtime/gateway.ts:323-349 (socket.on('webrtc:signal'...)) bun test -> tests/streaming-simple.test.ts passed (only relays WebRTC signals between stream participants) rg -n "stream:frame" Backend/realtime/gateway.ts returned no matches; bunx tsc --noEmit exited 0
R16 Simplify signal validation to ownership + session checks done Backend/realtime/gateway.ts:330-343 (streamSessions lookup + canRelayWebrtcSignal), Backend/streaming/simple.ts:20-33 bun test -> tests/streaming-simple.test.ts passed (only relays WebRTC signals between stream participants) bunx tsc --noEmit exited 0 in Backend/
R17 Remove command retry polling for stream command queue when flag is enabled done Backend/realtime/gateway.ts:110-116,155-161 (start_stream dispatch/retry disabled under SIMPLE_STREAMING) bun test passed all 17 tests in Backend/tests/* bunx tsc --noEmit exited 0 in Backend/
R18 Preserve stream:started and stream:ended event emission done Backend/routes/streams.ts:344-353,685-714, Backend/realtime/gateway.ts:36-49 (sendRealtimeToDevice) bun test -> tests/streaming-simple.test.ts passed (builds deterministic requested and started payloads, normalizes ended payload) bunx tsc --noEmit exited 0 in Backend/
R19 Keep strict socket auth and room handling for devices done Backend/realtime/gateway.ts:176-235 (token auth, role match, room join) bun test -> tests/device-token.test.ts passed (2 cases) bunx tsc --noEmit exited 0 in Backend/
W20 Simplify web stream state machine done WebApp/src/lib/app/controller.js:144-152,950-975, WebApp/src/lib/app/store.js:43-44 npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) npm run build in WebApp/ passed
W21 Remove web fallback image mode and frame state done WebApp/src/lib/app/store.js:43-44, WebApp/src/lib/app/controller.js:144-152, WebApp/src/routes/client/+page.svelte:183-189 npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) `rg -n "stream:frame
W22 Enforce video-only rendering path on client done WebApp/src/routes/client/+page.svelte:183-189, WebApp/src/lib/app/controller.js:723,950-968 npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) npm run build in WebApp/ passed
W23 Simplify ontrack handling done WebApp/src/lib/app/controller.js:711-723 (connection.ontrack) npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) npm run build in WebApp/ passed
W24 Add deterministic teardown path on end/unmount/navigation done WebApp/src/lib/app/controller.js:596-614,975-992,1125-1132 (teardownPeerConnection, stream:ended, cleanup) npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) npm run build in WebApp/ passed
W25 Remove frame capture/sender fallback on web camera page done WebApp/src/lib/app/controller.js:869-882,908-928 (camera request handling now only starts preview/accept/offer), WebApp/src/routes/camera/+page.svelte remains preview-only npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) `rg -n "stream:frame
W26 Ensure camera only sends WebRTC offer path done WebApp/src/lib/app/controller.js:738-749,869-882,908-928 (startOfferToClient, handleCameraStreamRequest) npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) npm run build in WebApp/ passed
W27 Remove recording hooks tied to fallback transport done WebApp/src/lib/app/controller.js:869-882,975-992 (recording kept, fallback transport removed), no frame relay refs remain in WebApp/src npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) `rg -n "stream:frame
W28 Remove client-side image fallback UI branches done WebApp/src/routes/client/+page.svelte:183-189, WebApp/src/lib/app/store.js:43-44 npm run check in WebApp/ passed (svelte-check found 0 errors and 0 warnings) npm run build in WebApp/ passed
M29 Remove mobile frame relay state and timer lifecycle blocked MobileApp/src/app-context.tsx:86-87,175-213, MobileApp/README.md:75-79 show native mobile still depends on frame relay; MobileApp/package.json has no react-native-webrtc dependency npm run lint in MobileApp/ passed rg -n "react-native-webrtc" MobileApp/package.json returned no matches; native WebRTC stack still absent
M30 Align mobile state transitions with web logic blocked MobileApp/src/app-context.tsx:105-113,349-381, MobileApp/src/state.ts:92-93, MobileApp/README.md:75-79 npm run lint in MobileApp/ passed npx tsc --noEmit exited 0 in MobileApp/; implementation remains blocked by missing native WebRTC runtime
M31 Remove mobile JPEG relay loop blocked MobileApp/src/app-context.tsx:183-213,312-319, MobileApp/README.md:75-79 npm run lint in MobileApp/ passed rg -n "react-native-webrtc" MobileApp/package.json returned no matches; removing the JPEG loop would break the only current mobile stream path
M32 Remove mobile image fallback rendering path blocked MobileApp/app/(tabs)/index.tsx:150-151,284, MobileApp/src/state.ts:92-93 npm run lint in MobileApp/ passed npx tsc --noEmit exited 0 in MobileApp/; image fallback remains required until native WebRTC view/render support exists
M33 Remove publish/subscribe credential calls from streaming runtime blocked MobileApp/src/app-context.tsx:312,361, MobileApp/src/api.ts:84-85 npm run lint in MobileApp/ passed npx tsc --noEmit exited 0 in MobileApp/; credential calls remain because mobile still follows the legacy relay path
M34 Ensure mobile peer cleanup on end/unmount blocked MobileApp/src/app-context.tsx:375-412 has no RTCPeerConnection lifecycle to clean up; MobileApp/README.md:79 documents missing RN WebRTC stack npm run lint in MobileApp/ passed rg -n "react-native-webrtc" MobileApp/package.json returned no matches; unblock by adding supported native WebRTC dependency and peer lifecycle code
C35 Update OpenAPI streaming contract done Backend/docs/openapi.ts:740,786,832; legacy credential/playback stream paths removed from OpenAPI bunx tsc --noEmit exited 0 in Backend/ `rg -n "publish-credentials
C36 Update docs/comments to remove fallback as primary path done Backend/README.md:133,147,191, MobileApp/README.md:75-79, Backend/public/backend-architecture.html:499-500, Backend/db/schema.ts:68-69 npm run check in WebApp/ passed; bunx tsc --noEmit in Backend/ passed `rg -n "stream:frame
C37 Add migration and deprecation guidance done docs/STREAMING_SIMPLIFICATION_ROLLOUT_AND_ROLLBACK.md:11-19, Backend/README.md:147-149 bunx tsc --noEmit exited 0 in Backend/ `rg -n "Migration notes
C38 Add structured stream lifecycle logging done Backend/routes/streams.ts:171,230,359,719, Backend/realtime/gateway.ts:348 bun test passed all 17 tests in Backend/tests/* bunx tsc --noEmit exited 0 in Backend/; log markers present for request/accept/end/signal events
C39 Add compile/build checks after cleanup done Validation spans Backend/, WebApp/, and MobileApp/ bun test passed (17/17), npm run check passed, npm run lint passed bunx tsc --noEmit in Backend/ exited 0, npm run build in WebApp/ passed, npx tsc --noEmit in MobileApp/ exited 0
C40 Add rollback runbook for flag behavior done docs/STREAMING_SIMPLIFICATION_ROLLOUT_AND_ROLLBACK.md:35-43 bunx tsc --noEmit exited 0 in Backend/ `rg -n "Rollback checklist