docs(04-05): complete A34 fetch+XHR network_error empirical plan

- 04-05-SUMMARY.md: A34 assertion closes ROADMAP SC #2 (fetch + XHR
  network_error capture); Plan 04-01 P1 #11 Request-narrow fix
  validated end-to-end; skip-mode UAT 34->35/35 GREEN
- STATE.md: position advanced (6/8 plans); Plan 04-05 closure note;
  decision-log entry; A33 full-mode SAVE-ack flake logged as Blocker
  (routed to /gsd-debug — Plan 04-08 deliverable, out of scope here)
- ROADMAP.md: SC #2 STATUS CLOSED; 04-05 row [x]; Phase 4 progress 6/8
- All 4 ROADMAP success criteria now closed (SC #1 Plan 04-08, SC #2
  this plan, SC #3+#4 Plan 04-02)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-22 13:02:58 +02:00
parent 0712c245a1
commit 28ebc1fe4e
3 changed files with 445 additions and 8 deletions

View File

@@ -268,6 +268,23 @@ finalized at plan time):
2. A page that issues a failing `fetch` (response code >= 400) produces a
`network_error` entry in `events.json`; a failing `XMLHttpRequest` does
too.
**STATUS 2026-05-22: CLOSED via Plan 04-05 — see .planning/phases/04-harden-clean-up-optional/04-05-SUMMARY.md.**
A34 harness assertion fires a synthetic `fetch(404)` + `XMLHttpRequest(404)`
from an `https://example.com` probe tab via
`chrome.scripting.executeScript` ISOLATED-world; host-side `driveA34`
JSZip-parses `logs/events.json` and confirms 2 `network_error` entries
(one fetch, one XHR), each with `meta.status === 404`. Skip-mode UAT
(`SKIP_LONG_UAT=1`): 35/35 GREEN with A34 running for real — all 6 A34
checks PASS. The fetch entry's `target` carries the real URL
(`https://example.com/404-fetch-a34-<stamp>`), NOT `[object Request]`,
empirically validating the Plan 04-01 P1 #11 Request-narrow fix
end-to-end at the SAVE->archive layer. NOTE: full-mode UAT (5-min A33
real) bailed at A33.1 (a pre-existing Plan 04-08 SAVE-ack flake — the
1.56 MB video buffer survived; only the post-`worker.close()` ack
channel raced) so A34 was SKIPPED-not-reached in that run; A34 itself
is unaffected and fully verified by the skip-mode 35/35. The A33
full-mode flake is routed to /gsd-debug as a separate cross-plan
concern (does NOT block ROADMAP SC #2).
3. `npm run build` and `node generate-icons.js` both succeed under the
project's module setting (`"type": "module"` in `package.json`) with no
`require is not defined` or `Cannot use import statement outside a
@@ -282,7 +299,7 @@ finalized at plan time):
- [x] 04-03-PLAN.md — A29 cs-injection-world rewrite (strict-sentinel filter; closes ~1/3 flake)
- [x] 04-04-PLAN.md — A33 SW state persistence: **spike-first Wave 0 SPIKE FAILED 2026-05-21** (videoSize=8505 bytes vs 100KB floor; offscreen RAM-only `segments: Blob[]` at src/offscreen/recorder.ts:91 does NOT survive 5-min SW idle + Puppeteer CDP `worker.close()`; corrupt WebM per ffprobe). **REFUTED-architecture 2026-05-22 via debug session-2 (commit `4ea1bbb`):** root cause is canvas.captureStream invisible-canvas throttling (Chrome bug 653548), NOT architectural; segments survived SW kill structurally (POST-KILL probe count=3). Plan 04-04 SUMMARY amended at `c1501e7` with the REFUTED-architecture verdict + Plan 04-08 insertion authorization. ROADMAP SC #1 reframed as test-methodology issue (NOT architectural); IndexedDB persistence plan-fix REJECTED (would not have closed SC #1 because segments are not the problem, frames are).
- [x] 04-08-PLAN.md — A33 methodology reframe + harness assertion: **CLOSED 2026-05-22** via debug session-2 verdict (canvas-captureStream invisible-source throttling root cause); HTMLVideoElement.captureStream replaces canvas.captureStream in installFakeDisplayMedia() with SYNC install + LAZY first-frame contract; spike re-run produces videoSize=1_797_178 bytes (1.8 MB; vs 8505 baseline); A33 lands per original Plan 04-04 Wave 1 spec under SKIP_LONG_UAT env-gate; UAT 33 -> 34 GREEN. **ROADMAP SC #1 CLOSED.**
- [ ] 04-05-PLAN.md — A34 fetch + XHR network_error empirical (ROADMAP SC #2; validates Plan 04-01 P1 #11 end-to-end)
- [x] 04-05-PLAN.md — A34 fetch + XHR network_error empirical: **CLOSED 2026-05-22.** assertA34 + driveA34 + 3-site orchestrator wiring; cs-injection-world `fetch(404)` + `XMLHttpRequest(404)` from a probe tab; host-side asserts 2 `network_error` entries with `meta.status === 404`. Skip-mode UAT 34 -> 35/35 GREEN (A34 real; all 6 checks PASS). Plan 04-01 P1 #11 Request-narrow fix validated end-to-end (fetch `target` = real URL, not `[object Request]`). **ROADMAP SC #2 CLOSED.** Full-mode 35/35 gate observed a pre-existing Plan 04-08 A33 SAVE-ack flake (A33.1 false; video buffer survived at 1.56 MB) — A34 SKIPPED-not-reached in that run but unaffected; A33 flake routed to /gsd-debug.
- [ ] 04-06-PLAN.md — Dark-logo currentColor + cursor visibility verification + 01-07-SUMMARY back-patch (UI-SPEC; operator empirical ack)
- [ ] 04-07-PLAN.md — Phase 4 closure aggregator + ROADMAP backfill (D-P4-05) + v1 milestone close prep
@@ -296,4 +313,4 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5.
| 1. Stabilize video pipeline | 14/14 | **CLOSED 2026-05-20** via gsd-verifier audit GREEN (17/17 must-haves; commit 586836f); all markers flipped | Functional contract closed 2026-05-19 via Plan 01-13 harness PASS; design/brand contract closed 2026-05-20 via Plan 01-12 brand-fit ack; welcome-tab contract closed 2026-05-20 via Plan 01-10 cycle-2 operator ack "All good" + 5 inter-cycle debug fixes |
| 2. Stabilize export pipeline | 0/4 | Plans landed 2026-05-20 (4 plans: Wave 0 RED → Wave 1 Blob URL + meta.urls parallel → Wave 2 harness + operator checkpoint); execution pending | - |
| 3. SPEC §10 smoke + DOM/event-log verification | 0/TBD | Not started (absorbed Phase-2 DOM verification per 2026-05-20 re-phasing; ~2-3 plans) | - |
| 4. Harden + clean up (optional) | 5/8 | In Progress (Plan 04-08 closed ROADMAP SC #1 via methodology reframe; Plans 04-05/04-06/04-07 remain for fetch+XHR empirical + visual polish + closure aggregator) | |
| 4. Harden + clean up (optional) | 5/8 | In Progress| |