Files
kami c19a726455 Stop dropping strip pixels, so panel bboxes tile the page
Answering whether the caption merge breaks the page-space key in
eval/chapter-truth.json. It does not. _merge_plan only groups adjacent
fragments and slice_webtoon cuts at gutter midpoints, so a vstacked panel's
[x, y0, w, sum(heights)] is the exact page region.

The defect is one line up. slice_webtoon skipped any segment shorter than
min_seg instead of absorbing it, so this chapter's 116 panels have a 62px hole
between panel_order 70 and 71 and lose 18px at the strip's end. A merge
spanning that hole reports a bbox 62px short of the page span it covers, and
every consumer mapping a detection back to the page is then wrong by that much,
silently. The 62px held the credits line, found at p_050.png row 338.

A short band is now held and absorbed by the next segment, or by the previous
one when it is last. min_seg still suppresses a tiny panel and no strip pixel
is discarded. The self-check asserts the bboxes tile the strip end to end.

Checks: worker_crop.py self-check passes and fails on the old code, where the
first band starts at 49 instead of 0. ruff check . exits 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 23:41:11 +04:00

5.2 KiB

decisions/

One entry per settled question about this pipeline. An entry names the claim, the evidence, the date, and what it forbids or permits next.

No entry is a plan. NEXT.md holds the plan, ROADMAP.md holds the horizon, and a limitation that is still live belongs in caveats/.

Rules for this directory

  • One file per topic, one ## section per question, so the index can link an anchor.
  • An entry cites a file and line, a commit, or a test. No citation means it is an opinion, and an opinion gets deleted rather than defended.
  • Closed means acting on it is safe. Open means investigated and undecided. Void means the evidence turned out to be invalid and the claim must not be cited again.
  • Rewrite an entry when something contradicts it, and say what changed.

Index

decision state
A dialogue row's speaker is speaker_ref, not speaker closed
Script verification must not fail on sentence-initial capitals or short quotes closed
Tracklet links are transitive over similarity, never across a hard constraint closed
A detected face takes an identity only when it falls inside that character's box closed
A 409 from the GPU mutex is a queue signal, not a stale lease closed
Correctness flags resolve by flag id, and never block autonomous TTS closed
An out-of-range resolver index is unresolved, never a new character closed
The session manager holds no lock across a model load closed
One bucket per artifact class, not everything under manga closed
The orchestrator creates missing buckets at startup closed
RustFS is staged, not adopted open
A model guess is never labelled tail closed
The model's speaker answer is resolved against what the prompt showed closed
An unpaired set-of-mark label grounds nothing closed
An interjection is not a name and not a misquote closed
Cast names enter the verifier tokenized closed
Clearing a stage strips the vision blob it wrote closed
The shipped 72.7s gap was a stream copy across mixed frame rates closed
xfade offsets come from min(video, audio), never format=duration closed
A vision bbox is gemma's 0-1000 grid, converted to pixels at /vision closed
Assembly verifies its own output instead of trusting ffmpeg's exit code closed
The single-item passthrough is not the assembly bug void
A stage result proves nothing until the worker is newer than the edit closed
A detection with no detected face never enrolls or binds closed
A resolver NONE mints an anonymous character, it does not clear the crop closed
The extras gate runs at enrollment and at narration, not at the speaker prompt closed
A roster name is a guess, so it never reaches detection closed
merged_into is exactly one hop deep closed
_bbox_to_pixels orders the corners, because the model sometimes swaps them closed
A tracklet is bounded by span, not only by pairwise distance closed
A generic word is not identity evidence, and one tokenizer serves both consumers closed
The gallery is the live cast, not cosine's top-k closed
A name is a word set, not a string closed, GPU pending
A confident caption names a character on its own closed, GPU pending
A name belongs to one character closed, GPU pending
The truth file keys on page-space geometry closed
Purity is a share, so it never names an id closed
A slice under min_seg is absorbed, not dropped closed
The truth is 38 assignments, and holds no dialogue yet open