8113bdfc8b
The rebuild after 1457556 came out byte-identical to the broken file,
which proved the xfade fix never runs for this chapter. An all-cut chapter
goes down the concat demuxer with -c copy, which writes the output in the
FIRST input's time_base and reinterprets every later packet in it. 14 of
49 clips are 30/1 at 1/15360 against 35 at 25/1 at 1/12800, so those 14
play 15360/12800 = 1.2 too long with their audio untouched. collage_cmd
hardcoded -r 30 and yesterday's FPS sweep missed it.
collage_cmd now emits -r FPS, and assemble probes r_frame_rate across the
clips and routes mixed rates through the re-encoding tree. Rebuilt
chapter.mp4 is 364.120s video against 364.122s audio at 25/1, from
436.392 over 363.675.
Also settle the bbox coordinate space, measured over all 113 detections:
47 boxes have x2 past the 900px panel width, none has y2 past 1000 on
panels up to 2307px tall, and the range is exactly [0, 1000]. It is
gemma's normalized grid, not pixels, whatever the prompt asks for.
/vision converts before returning, which fixes identity's crop, the gated
face pairing that was comparing pixel face boxes against grid boxes, the
set-of-mark boxes and the review UI at once. Checked by eye on panel 7:
five of six boxes now land on their subject, including the foreground
character who had no identity.
The registry still holds boxes and embeddings enrolled from the wrong
space. vision and identity have to re-run, which is GPU work and was not
started.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
44 lines
3.3 KiB
Markdown
44 lines
3.3 KiB
Markdown
# 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`](audit-phase1.md#speaker-ref-is-canonical) | closed |
|
|
| [Script verification must not fail on sentence-initial capitals or short quotes](audit-phase1.md#verifier-false-positives) | closed |
|
|
| [Tracklet links are transitive over similarity, never across a hard constraint](audit-phase1.md#tracklet-hard-constraints) | closed |
|
|
| [A detected face takes an identity only when it falls inside that character's box](audit-phase1.md#gated-face-pairing) | closed |
|
|
| [A 409 from the GPU mutex is a queue signal, not a stale lease](audit-phase1.md#no-lease-stealing) | closed |
|
|
| [Correctness flags resolve by flag id, and never block autonomous TTS](audit-phase1.md#flag-resolution) | closed |
|
|
| [An out-of-range resolver index is `unresolved`, never a new character](audit-phase1.md#hallucinated-index) | closed |
|
|
| [The session manager holds no lock across a model load](audit-phase1.md#unlocked-model-load) | closed |
|
|
| [One bucket per artifact class, not everything under `manga`](storage-layout.md#bucket-per-artifact) | closed |
|
|
| [The orchestrator creates missing buckets at startup](storage-layout.md#ensure-buckets) | closed |
|
|
| [RustFS is staged, not adopted](storage-layout.md#rustfs-staged) | open |
|
|
| [A model guess is never labelled `tail`](speaker-attribution.md#no-fake-tail) | closed |
|
|
| [The model's speaker answer is resolved against what the prompt showed](speaker-attribution.md#prompt-label-answers) | closed |
|
|
| [An unpaired set-of-mark label grounds nothing](speaker-attribution.md#unpaired-mark) | closed |
|
|
| [An interjection is not a name and not a misquote](speaker-attribution.md#interjection-false-positive) | closed |
|
|
| [Cast names enter the verifier tokenized](speaker-attribution.md#multiword-cast-names) | closed |
|
|
| [Clearing a stage strips the vision blob it wrote](storage-layout.md#clear-vision-blob) | closed |
|
|
| [The shipped 72.7s gap was a stream copy across mixed frame rates](chapter-assembly.md#mixed-rate-stream-copy) | closed |
|
|
| [xfade offsets come from `min(video, audio)`, never `format=duration`](chapter-assembly.md#offsets-from-min-stream) | closed |
|
|
| [A vision `bbox` is gemma's 0-1000 grid, converted to pixels at `/vision`](identity-bbox.md#bbox-is-normalized) | closed |
|
|
| [Assembly verifies its own output instead of trusting ffmpeg's exit code](chapter-assembly.md#check-assembled) | closed |
|
|
| [The single-item passthrough is not the assembly bug](chapter-assembly.md#passthrough-innocent) | void |
|