diff --git a/.planning/phases/03-spec-10-smoke-verification-dom-event-log-verification/03-01-SUMMARY.md b/.planning/phases/03-spec-10-smoke-verification-dom-event-log-verification/03-01-SUMMARY.md new file mode 100644 index 0000000..1b9a44d --- /dev/null +++ b/.planning/phases/03-spec-10-smoke-verification-dom-event-log-verification/03-01-SUMMARY.md @@ -0,0 +1,227 @@ +--- +phase: 03-spec-10-smoke-verification-dom-event-log-verification +plan: 01 +subsystem: testing +tags: + - uat-harness + - a29 + - rrweb + - dom-verification + - spec-10-4 + - req-rrweb-dom-buffer + - approach-b + - probe-html + - eventtype-enum + - phase-3-wave-1 + +requires: + - phase: 01-stabilize-video-pipeline + provides: "Plan 01-13 UAT harness Approach B (extension-internal page + synthetic MediaStream; page-side assertA* + host-side driveA* + harness.test.ts orchestrator); FORBIDDEN_HOOK_STRINGS lockstep pattern; pre-checkpoint bundle gates" + - phase: 02-stabilize-export-pipeline + provides: "Plan 02-04 A24-A28 harness extension (closest analog); findLatestZip helper at tests/uat/lib/harness-page-driver.ts; JSZip host-side parse pattern; chained-assertion / mtime-sort pattern; rrweb wiring + GET_RRWEB_EVENTS bridge production-shipped (src/content/index.ts:284-318)" + +provides: + - 1 new UAT harness assertion (A29) empirically verifying REQ-rrweb-dom-buffer + SPEC §10 #4 end-to-end through a real Chrome instance against synthetic probe HTML (form + table + modal + DOM-mutation trigger) + - assertA29 page-side orchestrator (DOM mutation dispatch + setupFreshRecording + SAVE) at tests/uat/extension-page-harness.ts + - driveA29 host-side 3-phase driver (page.evaluate + findLatestZip + JSZip rrweb/session.json + EventType-enum grep) at tests/uat/lib/harness-page-driver.ts + - Probe HTML in tests/uat/extension-page-harness.html (form with text+email+password+submit; table with thead+2 rows; modal trigger button with hidden modal div) appended BELOW existing scaffold; head + tokens.css link preserved + - EventType import `import { EventType } from '@rrweb/types';` (already transitively present; first explicit use) + - Orchestrator extension: drivers array 28 → 29; total 30/30 with A0; banner mentions A29 + +affects: + - phase-03 plans 02/03/04/05 (will follow same Approach B template + can chain off A29 if needed) + - phase-04 future rrweb v2 upgrade (A29's EventType enum import surface needs migration validation if @rrweb/types relocates NodeType per RESEARCH §"State of the Art") + +tech-stack: + added: + - "@rrweb/types EventType enum (explicit import in tests/uat/lib/harness-page-driver.ts; transitively present via rrweb 2.0.0-alpha.4 since Phase 1)" + patterns: + - "Approach B harness extension (Plan 02-04 verbatim template): page-side assertXX + host-side driveXX 3-phase (page.evaluate → findLatestZip → JSZip parse + grep) — proven on driveA26 (meta.json) + driveA28 (zip-layout); reused verbatim for driveA29 (rrweb/session.json)" + - "RESEARCH Pitfall 1 mitigation pattern: synthetic probe HTML + pre-SAVE DOM mutation dispatch (input.value + dispatchEvent + modal click) ensures rrweb emits IncrementalSnapshot in addition to Meta + FullSnapshot — empirically verified A29.5 GREEN with events.length=4 + event types {2,3,4}" + - "Page-side orchestrator (NOT stub) — assertA29 dispatches DOM mutation + setupFreshRecording + SAVE because the mutation MUST land BEFORE the GET_RRWEB_EVENTS bridge pulls the buffer; chaining off A28's already-completed zip would miss the IncrementalSnapshot window per Pitfall 1" + +key-files: + modified: + - tests/uat/extension-page-harness.html (probe HTML: form#probe-form + table#probe-table + button#probe-modal-trigger + div#probe-modal — appended BELOW existing `
` scaffold; head + tokens.css link preserved; no