Memory entry filed at the cross-campaign location
~/.claude/projects/-home-mfritsche-src/memory/feedback_characterize_before_change.md
and registered in that MEMORY.md index.
The lesson: when starting a campaign on a new substrate with a
known-good system, iter1 = characterize-and-baseline ONLY. Don't
bundle blockers into iter1; each blocker spawns its own iteration
(iter2/3/4) so each has its own Phase 1 success metric and outside-
team dependency. ampere-fourier iter1 is the worked example —
zero code change in Phase 6, 3 follow-up issues filed, 3 codecs
baseline-validated, ka#6 umbrella closed.
phase8_close.md is the campaign-level close artifact: phase-by-phase
summary table with file links + 3 iteration hand-offs + reference-
history FPS numbers for iter2/3/4 to anchor against.
The 8-phase loop terminates. iter1 closed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
C1 PASS, C3 PASS bit-perfect (same sha), C4 PASS bit-perfect (digit-
for-digit SSIM reproduction — decoder is deterministic), C5 PASS
within ±2% (Phase 3 σ was tight so the spread is small), C6 PASS
empty dmesg diff.
C2 ioctl counts came back ~2× Phase 3 — analyzed as a script bug
in p3_engage.sh's cleanup (rm -f $log.strace doesn't catch the
$log.strace.<tid> files, so Phase 7's grep aggregates both runs).
Real HW behavior unchanged; system regression NOT indicated. Filed
as a minor follow-up tweak, not iter1-blocking.
Phase 4 prediction matched observations. No loopback. iter1 ready
for Phase 8 close.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Plan subagent with model:sonnet reviewed Phase 0-4 with raw artifacts
(no curation per dev process). Two findings:
1. H.264 SSIM precedent framing — "mirrors fresnel iter1 exactly"
overstates the cross-host link. Two independent empirical data
points on two different rkvdec generations (RK3399 0.6431 vs
RK3588 0.6676) that converge, not a cross-verified anchor.
Reframe in iter1_close.md.
2. C7 deferral framing — "rig blocker" misframes a deliberate
scope boundary (headless-ssh by design) as a rig deficit.
Reframe in iter1_close.md.
Both findings are pure framing changes (no code/data/struct claim),
so no test-verify gate. Per empirical-over-theoretical guardrail,
adoption is direct.
Reviewer also confirmed the codec fragmentation rationale and
kernel-agent-vs-backend issue assignment as correct (no cross-codec
coupling problem).
Plan sound, proceed to Phase 6 with the two amendments applied.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
iter1 is a characterize-and-baseline iteration. Backend code is
unchanged; what Phase 6 executes is criterion refinement +
follow-up-issue filing + iteration close artifact.
5 work items for Phase 6:
1. Refine C4 to per-codec SSIM Y floors (VP8 >=1.000 byte-identical,
MPEG-2 >=0.9997 IEEE-1180, H.264 documented at ~0.667 no PASS
threshold — accepted decoder drift per fresnel iter1 precedent).
2. File kernel-agent [ka:experiment] for HEVC kernel OOPS fix.
3. File kernel-agent [ka:experiment] for VP9 enablement on RK3588
rkvdec (VDPU381/383 path, not RK3399 legacy).
4. File marfrit/libva-v4l2-request-fourier issue for iter39 (3rd-fd
probe for AV1).
5. Update + close kernel-agent #6, write iter1_close.md.
Phase 7 verification: re-run p3_*.sh at N=1; predict within ±2σ of
Phase 3 anchors. Loopback if deviation.
Risk register: gitea API filing low risk (claude-noether proven
today), other risks small. Documented in plan.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Re-verifies Phase 0 substrate against live system (post-reboot ampere
2 min uptime, backend md5 still matches hand-build, source clips
intact, memory list unchanged). Two missing tools flagged for Phase 4
to install (strace, firefox-fourier).
Catalogues 7 constraints (backend file pacman-owned but content-
unmanaged; kernel hand-managed; HEVC OOPS cascade; mpv --hwdec=vaapi
needs GL surface; mpv MPEG-2 not on default hwdec allow-list; reboot
authorization in scope; fresnel offline-able and not depended-on)
and 7 known failure modes (HEVC oops, broken CI backend silent fail,
hwdec SW fallback, MPEG-2 hwdec gate, firefox prefs version
sensitivity, RK3399 vaDeriveImage zero-page issue as open Q for
RK3588, pacman-Qo lying about file content).
Explicit non-deps section (HEVC/VP9/AV1, kdirect-on-RK3588, cross-host
byte-compare, DokuWiki) preempts scope creep doubts in Phase 3-7.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Locks iter1 scope to the 3 currently-kernel-supported codecs (H.264,
VP8, MPEG-2). The other 3 (HEVC, VP9, AV1) are deferred to dedicated
iter2/3/4 loops — bundling them would conflate three different
external dependencies into one un-closable iteration.
Resolves Phase 0 open questions Q1 (scope = 3 codecs), Q2 (bit-exact
anchor = libva-HW vs SW byte-compare; kdirect-on-RK3588 is its own
piece of work), Q4 (firefox-fourier in scope as consumer test).
Defers Q3 (HEVC OOPS sandboxing) and Q5 (AV1 source clip) to the
relevant iterations.
Success criteria are six per-codec instruments (C1-C6: frame count,
HW engagement via lsof+strace, byte-identical at frame 0, SSIM>=0.99
at frame 30s, N=3 FPS, clean dmesg) plus one campaign-level
firefox-fourier vendor-default test (C7).
Hypothesis is falsifiable in three named ways (codec crash/hang,
first-frame byte deviation indicating kernel ABI drift, MPEG-2 IDCT
tolerance refinement) — each maps to a specific phase loopback.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>