The dialogue prompt renders each present character as
`- person_1: brown ponytail, green dress (f)`, and gemma answers with what it was
shown: the description (15 lines), a bare local_id (9), a stale mark label (2),
or a name with the gender marker attached (2). All of them fell through
normalize_speaker as free-form names and never matched the registry, so 28 of 51
speech lines on job 778297bc lost a speaker the pipeline had already identified.
_apply_speaker_labels now resolves every string the prompt showed, drops an
id-shaped answer that names nobody present, and strips a trailing gender marker
so an off-panel name can still match.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
_annotate_speaker_methods stamped `tail`, the highest-trust provenance, on any
line whose speaker matched a present local_id, at gemma's confidence of 1.0. No
balloon was read. Three of three sampled two-character panels had the speakers
swapped, so a multi-character guess is now dropped to unknown, and a solo-panel
guess is kept as model_solo at 0.7.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The baseline run died in `script` at 87/116. Every lost beat cites
`unsupported-proper-noun: ['Choi', 'Haeseon']`, because verify_script puts the
full name in the allowed set and then tests single capitalized tokens against
it. No fix applied.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XD7cAy81MZrc7gCr6aZGWr
Panels, wavs, layers, clips, and the chapter mp4 leave the `manga` bucket for
`panels`, `audio`, `layers`, and `video`. The key under the bucket is unchanged,
so every reader that derives the bucket from the first path segment keeps
working. The orchestrator half moves in the same commit, per invariant 7.
The 2026-08-11 chapter run proves the split for `raw` and `panels` and produced
the first quality read on speaker attribution, which is wrong in every sampled
multi-character panel.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XD7cAy81MZrc7gCr6aZGWr
#117 done: stowage was dead on an arm64 digest pin, not a MinIO fault.
#116 staged: rustfs runs on 9010/9011, buckets not mirrored, no cutover.
Also logs the ISP port 80/443 interception that made three external
reachability measurements worthless, so the next session does not repeat them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Implements every P0 from AUDIT.md plus four P1s, across both halves of the
pipeline. Verified by CPU-only self-checks and the orchestrator test suite.
No GPU work ran and no pipeline ran.
workpc:
- worker_scene: read speaker_ref, not the rewritten speaker field. Every line
narrated as "Someone" before this. Emit `actions` for the verifier.
- worker_script: declare beat + verifier_feedback (pydantic dropped both, so
the retry was blind) and render them as a repair prompt.
- worker_vision: gate face->identity pairing on containment, assign globally
shortest-first, map an out-of-range resolver index to `unresolved` instead
of minting a character, parse JSON with raw_decode.
- session_manager: tear down a server whose lease vanished mid-load, and spawn
the supervisor respawn unlocked.
orchestrator (edited in place, NOT committed there):
- tracklets: canonicalize gender, add co-presence cannot-links, block
transitive bridges across a hard constraint.
- correctness: stop failing valid narration on sentence-initial capitals and
short quotes; read action evidence from the singular key.
- db: stop orphan flags leaking into every chapter; resolve by flag id.
- service: TTS returns instead of raising under GATES, auto-resolves under
autonomous mode; job admission control; registry names on dialogue resume.
- session_proxy: queue on 409 instead of stealing the lease; run heartbeats.
Docs restructured per the repo-structure layout: CLAUDE.md is a pointer table,
NEXT.md replaces HANDOFF.md, plus ROADMAP.md, JOURNAL.md, decisions/ and
caveats/. AUDIT.md now points at those instead of restating them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XD7cAy81MZrc7gCr6aZGWr
Read the workpc workers against the homesrv orchestrator and checked the
first-pass audit against source. Report only, no code changed.
Adds 4 P0, 6 P1, and 13 P2 findings to AUDIT.md, most of them in the seam
between the two repos:
- worker_scene reads dialogue `speaker` as a local id, but the orchestrator
already rewrote it to a character_id, so all narration says "Someone"
- the script verifier fails valid narration on sentence-initial capitals and
on short quotes, which halts the chapter
- correctness flags block TTS with no path to clear them when GATES is off
- session_manager can orphan a llama-server that keeps its VRAM
Confirms four first-pass claims in source: tracklet gender enum, missing
action evidence, dropped verifier feedback, 409 lease stealing.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Rebuild the venv half of the reconstruction. Adds the two CPU onnx
detectors back under models/ (comic-text-detector, deepghs anime face,
both gitignored), re-clones the dots.tts checkout, and records both
recipes in requirements.txt so the next rebuild skips the archaeology.
Two pre-existing environment breakages had to be cleared:
- Arch's torchvision 0.25 is too old for torch 2.13, so every
transformers model import died with "operator torchvision::nms does
not exist". Shadowed with 0.28.0+rocm7.2 inside the venv only, so the
system copy stays put.
- dots_tts refuses to import when torch and torchaudio minors differ,
and that pair is unsatisfiable here: 2.11 is the newest torchaudio
ROCm wheel there is. Verified 2.11 loads and resamples against 2.13,
then scoped a bypass around the import in both call sites.
Self-checks 13/14. worker_layers still needs the ComfyUI workflow json,
which legacy/ took with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Working tree (including .git) was lost to an rm. Rebuilt by replaying Write/Edit/
Read/attachment events from 25 Claude sessions and 22 successful codex apply_patch
blocks into one timestamp-ordered timeline.
Verified against ground truth recorded in the transcripts: wc -l on 10 files and
ls -l on 5 files at 2026-07-18T13:13:44Z both match exactly; 18 files are
byte-identical to their newest ~/.claude/file-history blob.
See HANDOFF.md for sources, gaps, and how to rebuild .venv.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>