# NEXT Updated 2026-08-11. Replaces the old `HANDOFF.md`. ## State Audit Phase 1 is implemented and green. Nothing is half-finished. Changed on workpc: `worker_scene.py`, `worker_script.py`, `worker_vision.py`, `session_manager.py`. Changed on homesrv (`/mnt/server/home/kami/docker-apps/manga-infra/orchestrator/`): `tracklets.py`, `correctness.py`, `db.py`, `service.py`, `session_proxy.py`, `test_script_verify.py`, `test_name_binding.py`. What landed and why: `decisions/audit-phase1.md`. What was left open: `caveats/audit-open.md`. Verification: CPU-only self-checks and the orchestrator test suite. 108 orchestrator tests pass (`test_api.py` is excluded on workpc because fastapi is not installed in this venv). No GPU work ran and no pipeline ran, so none of this is confirmed against a real chapter. The orchestrator half is committed as `1c60710` in `/mnt/server/home/kami/docker-apps` and the container is rebuilt and serving. `94bd4d8` in the same repo repins minio to its amd64 digest, which the rebuild exposed. ## Next The named-speaker share is 9%, 9 of 95 speech lines, and that number is real. See `JOURNAL.md` for the five defects behind the old 30%. Everything below is measured on job `778297bc`, not inferred. **Identity is the constraint now, not attribution.** 26 of 113 detected people carry an identity. 25 of those 26 are the single over-merged row (`caveats/speaker-attribution.md#identity-over-merge`). That caps this chapter near 23% named even with perfect balloon binding. Work identity before geometry. 1. Split the over-merged character row and dedupe the registry. `Lim Seonho` and `Seonho` are separate rows with overlapping aliases, so either name matches two rows and binds nothing. Needs the reversible-merge design (`caveats/audit-open.md#destructive-reconcile`) rather than a patch. 2. Bind a balloon to a speaker by tail geometry, using the unused `det`/`seg` heads (`caveats/speaker-attribution.md#tail-is-not-geometry`). Until then multi-character panels have no speaker at all, which is 40 of 95 lines here. 3. Resolve a speaker answer across the whole dialogue window, not just the answering panel. The last 3 unresolved refs are a description belonging to a neighbouring panel in the same 8-panel call. 4. Start Phase 2 from `ROADMAP.md`. Set SQLite `busy_timeout` before any concurrency work (`caveats/audit-open.md#sqlite-locking`). ## The 2026-08-11 chapter run Job `778297bc-e7ce-439d-91b5-8a027060d17f`, chapter `7c944dd4-e972-42c7-ba60-9f6939548e80`, 116 panels. It reached `scene` 116/116 and then failed in `script` at 87/116 on the verifier bug fixed above. `tts layers render assemble` never ran. Read where it got to, clear the failed stage, resume: ```bash ssh kami@192.168.1.104 "curl -s 'http://127.0.0.1:9090/job/status?job_id=778297bc-e7ce-439d-91b5-8a027060d17f'" 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\":\"script\"}'" 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'" ``` That resume narrates the attributions the old `tail` label produced. Clearing back to `dialogue` instead re-runs the GPU stages and produces the honest metric. Numbers and the quality read are in `JOURNAL.md` and `caveats/speaker-attribution.md`. ## Storage and viewer, tasks #116/#117 [#117] is done. `stowage` serves the manga buckets. It was never a MinIO problem: the container had been dead since 2026-07-19 on an arm64 digest pin. Details in `JOURNAL.md`. [#116] is closer but not cut over. Artifacts now split one bucket per class (`decisions/storage-layout.md#bucket-per-artifact`), and both MinIO and `rustfs` hold all six buckets. `rustfs` on `127.0.0.1:9010/9011` is still empty and nothing is repointed, so MinIO serves every read and write. Remaining: `mc mirror` the live buckets, verify counts and sizes, then decide on cutover (`decisions/storage-layout.md#rustfs-staged`). Two containers on homesrv had been dead for two weeks and are now running. `manga-fetch` is the one `/job/create` needs. `manga-web` is what `manga.kvmx.ru` proxies to on 8083. Nothing watches them. ## Open questions Four Phase 1 items have no Vikunja task, because writing to the tracker was not asked for. They are the speaker contract fix, the verifier rules, the tracklet constraints, and the flag resolution path. Only [#203] existed and is now closed by `decisions/audit-phase1.md#unlocked-model-load`. Three audit items are deliberately not done and are recorded as caveats rather than silently dropped: honest stage clearing, ComfyUI under the session mutex, and reversible identity merges. Each needs a design decision, not a patch. Carried over from the reconstruction: `.venv` needs the ROCm torch wheel reinstalled, and `dots.tts/`, `legacy/`, `RESUME_SPEC.md`, `pipeline-design-notes.md`, `spec-v2.md` are unrecoverable.