14c1bc381e
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.9 KiB
3.9 KiB
MP-28 — ffmpeg 6.1.2 segfaults decoding valid HEVC (Blue Bloods KONTRAST) → false verify failures — sandbox → GO/NO-GO (spawned 2026-10-01 23:15, main session 771b2744)
Bounded background agent, media_pipeline (#61). Budget: --max-turns 50. Same tool call twice → STOP (partial). Follow the COMMON block in /home/administrator/.claude/projects/-opt-appdata-docker/memory/playbook_media_pipeline_phases.md ("### COMMON block": HARD RULES, ACCESS MAP, script-edit workflow incl. scp to server-01 + container hash check).
FACTS (main session, verified 23:10):
- Live transcoder = 19b60afe… (MP-27). Image gitea.local/backtalk6858/media-transcoder:latest ships ffmpeg 6.1.2.
ffmpeg -v error -i <Blue.Bloods.S02E01.1080p.WEBRip.x265-KONTRAST.mp4 SOURCE> -f null -in that image → Segmentation fault, rc 139, deterministic. The same command with Jellyfin's ffmpeg 7.1.4 (docker run --rm --network none -v /media/mediashare:/media/mediashare:ro --entrypoint /usr/lib/jellyfin-ffmpeg/ffmpeg jellyfin/jellyfin:latest …) → rc 0, no errors. Source has a valid ftyp header and probes fine (2616.7 s).- These are HEVC video-COPY jobs: the only full video decode is verify_output_playback() (~line 3076), whose 3-attempt loop treats SIGSEGV as transient and then returns a failure → MP-27 classifies INPUT → after 3 job attempts skipped_permanent + ntfy alerts. ~30 Blue Bloods S02/S05 sources affected (the MP-27 requeue set ids 3350-3414 minus the 19 zero-headed JJK/Peaky files). DECIDE AND BUILD (decision rule pre-made; you pick by evidence):
- Option A (preferred if it holds): upgrade ffmpeg in the transcoder image to a 7.x build (e.g. the jellyfin-ffmpeg 7.1.x package or a static 7.1 build) — ONLY if, in the sandbox, the FULL MP regression set still passes (all existing test_*.py + the fixture matrices that past phases used: mp6, mp8, mp10 incl. Y2, mp18, mp20/mp21 HEVC copy, mp15 picker) with no output differences beyond trivial (compare verify verdicts, durations, stream maps, A/V av_align on 2 fixtures). VAAPI cannot be tested on server-01 (NVIDIA) → if A is chosen, list the exact prod VAAPI checks for the main session. Build the new image on PRIMARY? NO — image builds/pushes are the main session's; you produce the Dockerfile diff + build command, and test with a locally built image on server-01 ONLY if the build is small (<1 GB pulls) — otherwise test the binary by mounting it into the sandbox container.
- Option B (fallback / or in addition): in verify_output_playback, a SIGSEGV is not proof of a bad file — re-verify
with an independent check (e.g. second decoder = the same file through
-c:v copy -f nullpacket walk + ffprobe-count_packetsvs expected duration/fps, + audio-only full decode) and return a distinct verdictverify_inconclusive_decoder_crashthat is NOT an INPUT failure (no skipped_permanent; one ntfy "decoder crashed on X, file kept, needs ffmpeg upgrade"). - Recommend ONE (A, B, or A+B). Implement in the sandbox, prove with a REAL Blue Bloods source: copy ONE source
(S02E01, ~890 MB) into the sandbox fixture library (main session pre-authorizes this read-only copy from the
live share into sandbox-fixtures/mp28/ on server-01 via scp from primary), run it through the sandbox pipeline,
expect
donewith verify pass (A) or inconclusive-not-permanent (B). OUTPUT: wrap-up JSON only: status, verdict (GO|NO-GO), recommendation (A|B|A+B) + why, ffmpeg_versions_tested, regression_results[], blue_bloods_e2e, dockerfile_diff (if A), build_push_commands (if A, for the main session), working_copy_sha256 (if B; twin = server-01 container), promote_commands, prod_vaapi_checks[], requeue_plan for the Blue Bloods rows (exact SQL/commands, NOT run), actions_taken[], actions_failed[], containers_restarted[], unverified_claims[], next_step, notes. PERSIST per COMMON ("## MP-28 — 2026-10-01 (background agent)" + embed).