# Phase 8 — Memory update + iter1 close iter1 of the ampere-fourier campaign closes 2026-05-16. All 9 phases ran; no loopbacks fired. ## Iteration outcome (one line) **3 codecs (H.264 + VP8 + MPEG-2) baseline-validated end-to-end via libva-v4l2-request-fourier on RK3588; 3 codec blockers (HEVC kernel OOPS, VP9 kernel gap, AV1 backend hard-cap) split into three discrete follow-up issues that become iter2/3/4 entry points.** ## Memory entry distilled from iter1 Filed as [`feedback_characterize_before_change.md`](../../.claude/projects/-home-mfritsche-src/memory/feedback_characterize_before_change.md) at the cross-campaign memory location: **"iter1 = characterize-and-baseline, not change-the-system."** The lesson: when starting a campaign on a new host / substrate / SoC with a system that's already known-good elsewhere, iter1 establishes the floor — it doesn't fix blockers. Phase 0 always surfaces blockers; each blocker is its own debugging chain with its own contract, its own outside-team dependency. Bundling 3 blockers into iter1 conflates 3 unrelated investigations and breaks Phase 6's "scope strictly to plan" guarantee. ampere-fourier iter1 IS the worked example. ## Phase-by-phase summary (with the artefacts) | Phase | File | Outcome | |-------|------|---------| | 0 | [phase0_findings.md](phase0_findings.md) | Substrate: RK3588 board, clean v7.0-rc3 kernel, 3 decoder nodes, 3 codecs viable / 3 blocked. Baseline anchor N=1 captured. | | 1 | [phase1_goal.md](phase1_goal.md) | Locked scope to 3 codecs. 7 success criteria (C1-C7) each anchored to a specific instrument. Hypothesis falsifiable in 3 named ways. | | 2 | [phase2_situation.md](phase2_situation.md) | Re-verified Phase 0 against live system. 7 constraints + 7 known failure modes catalogued. 2 missing tools (strace, firefox-fourier) flagged for Phase 4 plan. | | 3 | [phase3_baseline.md](phase3_baseline.md) | C1-C6 measured. C1 PASS, C2 PASS (ioctl trace canonical), C3 PASS (frame-0 byte-identical, same sha across codecs), C4 split (VP8 1.000 perfect / MPEG-2 0.9997 IEEE-1180 / H.264 0.6676 cumulative drift), C5 PASS (FPS at N=3 tight σ), C6 PASS (empty dmesg diff). C7 deferred. | | 4 | [phase4_plan.md](phase4_plan.md) | iter1 is characterize-and-baseline; no code change to backend / kernel / firefox / mpv. 5 work items: refine C4 per-codec floors, file 3 follow-up issues, update + close ka#6, write close artifact, Phase 7 verification. Risk register sized to that scope. | | 5 | [phase5_review.md](phase5_review.md) | Plan subagent (model:sonnet) reviewed Phase 0-4 raw artifacts. Two framing findings — H.264 SSIM precedent should be flagged as "independent observation, not cross-verified anchor"; C7 deferral is a scope boundary not a rig blocker. Both adopted (framing-only, no test-verify gate). | | 6 | [iter1_close.md](iter1_close.md) + 3 issues filed | Filed `marfrit/kernel-agent#11 [ka:experiment]` (HEVC OOPS), `marfrit/kernel-agent#12 [ka:experiment]` (VP9 enablement), `marfrit/libva-v4l2-request-fourier#2` (AV1 iter39). Closed `marfrit/kernel-agent#6` with cross-refs. Wrote close artifact with Phase 5 amendments applied. | | 7 | [phase7_verification.md](phase7_verification.md) | Re-ran C1-C6 at N=1. C1+C3+C4+C6 bit-perfect reproduction. C5 within ±1.5 % of Phase 3 N=3 mean (well within Phase 4's ±2σ). C2 ioctl counts ~2× — analyzed as a script-cleanup bug in p3_engage.sh (rm doesn't catch `.strace.` suffix), NOT a system regression. No loopback. | | 8 | this file | Memory entry written, iter1 closed. | ## Hand-offs - **iter2** (HEVC kernel OOPS fix): [kernel-agent#11](https://git.reauktion.de/marfrit/kernel-agent/issues/11) - **iter3** (VP9 kernel enablement on RK3588): [kernel-agent#12](https://git.reauktion.de/marfrit/kernel-agent/issues/12) - **iter4** (AV1 backend iter39): [libva-v4l2-request-fourier#2](https://git.reauktion.de/marfrit/libva-v4l2-request-fourier/issues/2) - **C7 sub-iteration** (firefox-fourier vendor-default engagement check): pending a graphical session on ampere — not a separate ticket, lands inside whichever iteration first runs a compositor. Each iter2/3/4 anchors to the iter1 baseline: - VP8 SSIM Y 1.000 floor (raised from default ≥0.99 on Phase 4 refinement) - MPEG-2 SSIM Y ≥0.9997 floor (IEEE 1180) - H.264 documented at SSIM Y ~0.667 (no PASS threshold — accepted decoder drift) - N=3 FPS reference history: H.264 461 fps, VP8 217 fps, MPEG-2 200 fps ## Minor follow-up (not blocking) - `phase3_scripts/p3_engage.sh`: fix `rm -f $log.strace` → `rm -f $log.strace.*` so Phase 7 re-runs don't accumulate strace files. Filed mentally; not iter1-blocking. ## Iter1 close The 8-phase loop terminates here. ampere-fourier iter1 closed.