Files
manga-recap-pipeline/HANDOFF.md
T
kami 447c68c8aa Record the first end-to-end chapter and two stages that lie
The run completed: chapter.mp4 at 50MiB from 49 clips. layers reported
completed 116/116 with an empty bucket, so nothing has parallax, and the completed
job still carries the error string from a failure three resumes earlier. Both
recorded as caveats, neither fixed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 00:10:34 +04:00

4.9 KiB

HANDOFF, 2026-08-11 late session

Live state is in NEXT.md. This file is only what this session did.

Asked

Continue from the previous handoff: fix speaker attribution, then rerun and re-read the named-speaker share. Mid-session: what happens to unidentified people in a two-person panel, can a known character be mis-named, and keep watch during the run.

Result

The named-speaker share is 9 of 95 speech lines, 9%. The previous 30% counted fake tails. All 9 binds are Choi Haeseon, the over-merged row. script passed 116/116 for the first time.

Identity, not attribution, is now the constraint. 26 of 113 detected people carry an identity. 25 of the 26 are that one row. This chapter caps near 23% named even with perfect balloon binding.

Six defects, four found by measuring the run rather than by reading code. Each has a decision entry:

# defect entry
1 tail stamped on a model guess at confidence 1.0 decisions/speaker-attribution.md#no-fake-tail
2 a two-word cast name always failed the script verifier #multiword-cast-names
3 /stage/clear dialogue deleted nothing and reported success decisions/storage-layout.md#clear-vision-blob
4 gemma's speaker answer echoed the prompt label, became a name #prompt-label-answers
5 som_face stamped on a mark that paired to nobody #unpaired-mark
6 one two-letter interjection halted the chapter at 112/116 #interjection-false-positive

Changed

Workers, /home/kami/Programs/n8n-worker, branch restore-runtime, commits e8941d8 8071137 a965077 plus docs:

  • worker_vision.py: _annotate_speaker_methods, _apply_speaker_labels, new _present_keys
  • decisions/speaker-attribution.md (new, 5 sections), decisions/storage-layout.md#clear-vision-blob, caveats/speaker-attribution.md, caveats/audit-open.md#dishonest-clearing, both indexes, JOURNAL.md, NEXT.md

Orchestrator, /mnt/server/home/kami/docker-apps, commits b18b6b4 603d388 db8d7c5 ccc3a8e plus the interjection commit:

  • correctness.py: tokenized allowed, _ID_SHAPED guard in normalize_speaker, interjection stopwords, short-quote grounding skip
  • db.py: _STAGE_VISION_KEYS and the strip pass in clear_stage_data
  • test_script_verify.py, test_correctness.py, test_db.py: one case each

Measured

Job 778297bc-e7ce-439d-91b5-8a027060d17f, chapter 7c944dd4-e972-42c7-ba60-9f6939548e80, 116 panels.

  • 113 orchestrator tests pass. worker_vision.py self-check passes.
  • dialogue 116/116, direct 116/116, scene 116/116, script 116/116.
  • speech lines 95, named 9. Multi-character panels 0 of 40 by design. Single-character 9 of 55.
  • speaker_method: unknown 47, model_solo 28, solo_prior 8, som_face 7, turn_taking 5.
  • unresolved name refs 3, all brown ponytail, green dress, from a neighbouring panel in the same 8-panel window. Was 24 of 51 before the fix.
  • identity assignments 26, of which character_afa762 "Choi Haeseon" holds 25.
  • registry duplicates that block a correct bind: seonho matches 2 rows, lim seonho matches 2 rows.
  • buckets during tts: panels 116, raw 79, manga 491, audio 1, layers 0, video 0.

Open

  • The run finished. Every stage completed at 2026-08-11T20:08:16Z: tts 116/116, layers 116/116, render 116/116, assemble 1/1. s3://video/ holds 49 clips and a 50MiB chapter.mp4 under ef105a86-.../7c944dd4-.../, s3://audio/ 49 objects at 32MiB. Nobody has watched the video.

    Two honesty defects at the finish, recorded not fixed. layers reported completed 116/116 with an empty bucket, so no clip has parallax (caveats/audit-open.md#layers-writes-nothing). The completed job still carries error: "partial: 112/116 completed" (caveats/audit-open.md#stale-job-error).

    Read the state, or clear a stage and resume:

    /usr/bin/ssh kami@192.168.1.104 "curl -s -X POST http://127.0.0.1:9090/stage/clear -H 'Content-Type: application/json' -d '{\"job_id\":\"778297bc-e7ce-439d-91b5-8a027060d17f\",\"stage\":\"<stage>\"}'"
    /usr/bin/ssh kami@192.168.1.104 "curl -s -X POST 'http://127.0.0.1:9090/job/resume?job_id=778297bc-e7ce-439d-91b5-8a027060d17f'"
    

    Note: plain ssh is the kitty ssh kitten and refuses non-interactive stdin. Use /usr/bin/ssh.

  • Defects 5 and 6 landed after dialogue had already run, so this run's 7 som_face lines are still labelled from the unpaired-mark path. The next dialogue pass fixes that. No name was affected.

  • The audit script is now audit_speakers.py in this repo. It reads /data/manga.db, so it runs inside the container: docker cp audit_speakers.py manga-orchestrator:/tmp/ && docker exec manga-orchestrator python3 /tmp/audit_speakers.py.

  • The 3 cross-panel unresolved refs need the window's whole present-list, not one panel's.

  • Workers were restarted twice this session and are running in tmux manga-workers. Nothing watches them, and nothing watches the homesrv containers.