Files
manga-recap-pipeline/HANDOFF.md
T
kami 54c456801a Split artifacts across per-class buckets, record the baseline run
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
2026-08-11 23:00:13 +04:00

66 lines
2.8 KiB
Markdown

# HANDOFF, 2026-08-11 session
Live state lives in `NEXT.md`. This file is only what this session did.
## Asked
1. Add the buckets to rustfs.
2. Fix the bucket saving on the orchestrator side.
3. Run the title recap.
Mid-session: check `manga.kvmx.ru`, and cross-check whether the run got dialogue and identities right.
## Changed
Workers, `/home/kami/Programs/n8n-worker`, branch `restore-runtime`:
- `worker_crop.py` panels -> `s3://panels/`
- `worker_tts.py` wavs -> `s3://audio/`
- `worker_layers.py` layers -> `s3://layers/`
- `worker_render.py` clips and `chapter.mp4` -> `s3://video/`
- `decisions/storage-layout.md`, `caveats/speaker-attribution.md`, indexes, `JOURNAL.md`, `NEXT.md`
Orchestrator, `/mnt/server/home/kami/docker-apps/manga-infra/orchestrator`:
- `minio_layout.py` per-artifact bucket constants, `BUCKETS`, `parse_key` accepts any of them
- `service.py` `_s3_delete_prefix` takes `<bucket>/<prefix>`, `_stage_s3_prefixes` no longer slices,
new `_ensure_buckets` in the lifespan
- `test_minio_layout.py` updated, one test added
Infrastructure, homesrv:
- six buckets created on `rfs` (rustfs, `127.0.0.1:9010`)
- `manga-fetch` started, exited 2 weeks, `/job/create` fails without it
- `manga-web` started, exited 2 weeks, `manga.kvmx.ru` -> nginx -> `localhost:8083`
- orchestrator rebuilt and restarted
- `mc` aliases `mio` and `rfs` now exist on homesrv
## Measured
Job `778297bc-e7ce-439d-91b5-8a027060d17f`, chapter `7c944dd4-e972-42c7-ba60-9f6939548e80`,
"Teto X Egen", 116 panels.
- 109 orchestrator tests pass. `worker_crop.py`, `worker_tts.py`, `worker_render.py` self-checks pass.
`worker_layers.py` self-check fails on the missing `legacy/qwen_layered_workflow.json`, which
predates this session.
- buckets after the run: `raw` 64MiB/79, `panels` 101MiB/116, `manga` 366MiB/491, `audio` `layers`
`video` still empty because the run had not reached those stages.
- stage times: crop 85s, vision ~4min, identity ~1min, reconcile ~7min, dialogue ~8min.
- 24 of 81 speech lines resolve to a named character, 30%.
- 26 of 113 detected people got an identity, 23%, and 25 of the 26 went to one character.
- 3 of 3 sampled two-character panels attribute both speakers to the wrong person.
## Open
- The run stopped in `direct` at 113/116. `scene script tts layers render assemble` never ran. Resume:
```bash
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'"
```
- Speaker attribution is wrong in multi-character panels and the fix is not written
(`caveats/speaker-attribution.md`). No code was changed for it.
- Objects from the 2026-07-17 run still sit under `manga/<manga_id>/<chapter_id>/{pages,panels,audio,
layers,clips}`. Nothing reads them. They are the rollback, not live data.
- `rustfs` holds empty buckets. No mirror, no cutover.