diff --git a/.planning/phases/01-stabilize-video-pipeline/01-09-PLAN.md b/.planning/phases/01-stabilize-video-pipeline/01-09-PLAN.md index 517c52c..b12fafd 100644 --- a/.planning/phases/01-stabilize-video-pipeline/01-09-PLAN.md +++ b/.planning/phases/01-stabilize-video-pipeline/01-09-PLAN.md @@ -537,10 +537,11 @@ NO 'as any', NO @ts-ignore — every new chrome.* call must be properly typed vi 8. Wait ~35 seconds (or longer to validate the post-Option-C port lifecycle still holds). 9. Click the toolbar icon. The popup opens (NOT the picker — because setRecordingMode set the popup to 'src/popup/index.html'). Click 'Сохранить отчёт об ошибке'. The save flow runs; the zip lands in ~/Downloads as session_report_*.zip. 10. Open the zip; confirm video/last_30sec.webm is present and (validated by Plan 01-08) plays for ~30s in Chrome and mpv. - 11. Stop the sharing via Chrome's 'Stop sharing' banner button. Badge transitions to ERROR ('ERR' text, yellow background). A recovery notification 'Mokosh stopped — Recording stopped. Click here to start a new session.' appears. - 12. Click the recovery notification. The picker reappears; pick Entire screen; recording resumes; badge returns to REC. + 11. Stop the sharing via Chrome's 'Stop sharing' banner button. Badge transitions to OFF ('OFF' text, neutral background — user stopped deliberately, this is not an error). NO recovery notification fires (would be noise for a deliberate stop; the OS 'Sharing your screen' indicator going away is the operator's confirmation). Popup is cleared so toolbar.onClicked re-fires for restart. (AMENDED 2026-05-17 post-Bug B: prior expectation routed user-stopped-sharing through ERROR state which locked operator out — see .planning/debug/resolved/01-09-recovery-flow.md.) + 12. Click the toolbar icon (no notification to click since stop was deliberate). The picker reappears; pick Entire screen; recording resumes; badge returns to REC. 13. Edge-case: click the toolbar icon WITHOUT a prior recording (after step 3 + reload extension without restart). The picker should appear directly (NOT the popup). This validates that initialize → setIdleMode set the popup to '' so onClicked fires. - 14. If any of steps 4 (notification appears), 5 (picker is monitor-only), 9 (popup opens on toolbar click while recording), 11 (badge transitions to ERROR + recovery notification), 12 (recovery click triggers picker), or 13 (idle toolbar click triggers picker directly) FAIL, document the exact failure mode + reproduction steps. The plan iterates on the failing handler. + 14. If any of steps 4 (notification appears), 5 (picker is monitor-only), 9 (popup opens on toolbar click while recording), 11 (badge transitions to OFF after deliberate stop — NOT ERROR; no recovery notification), 12 (post-stop toolbar click triggers picker for restart), or 13 (idle toolbar click triggers picker directly) FAIL, document the exact failure mode + reproduction steps. The plan iterates on the failing handler. + 15. ERROR state coverage (separate from 11-12): genuine recording failures (codec init failure, port disconnect, etc.) still route through setErrorMode + recovery notification — that path is preserved by Bug B fix as the defensive fallback. No operator step here unless a real error surfaces during the smoke; if it does, document it. Type 'approved' after steps 1-13 all PASS. If any step fails, paste the failure diagnostic + your Chrome version + locale + whether KEEP_PROFILE was used; Task 4 iterates. @@ -585,7 +586,7 @@ NO 'as any', NO @ts-ignore — every new chrome.* call must be properly typed vi Plan 01-09 is complete when: 1. The 4 displaySurface tests + 13 toolbar/badge/notification/popup-idle-race tests (17 new total) are all GREEN. 2. All 60 baseline GREEN tests from Plan 01-08 remain GREEN. -3. Operator runs the Task 5 checkpoint and confirms the end-to-end UX works: idle-toolbar-click triggers picker; recording-toolbar-click opens popup; onStartup notification appears; recovery notification appears after stop-sharing; badge transitions REC/OFF/ERROR visibly. +3. Operator runs the Task 5 checkpoint and confirms the end-to-end UX works: idle-toolbar-click triggers picker; recording-toolbar-click opens popup; onStartup notification appears; deliberate stop-sharing transitions badge → OFF (not ERROR) with NO recovery notification (per Bug B fix — user-stopped-sharing is a normal lifecycle event); operator can restart via direct toolbar click; ERROR state + recovery notification still trigger for genuine error codes. 4. manifest.json + smoke.sh + popup updated consistently with the new UX charter. 5. tsc + build clean.