Record all six defects and the 9% baseline
Adds decision entries for the unpaired set-of-mark label, the interjection verifier false positive, and the vision-blob clearing bug, plus the per-run speaker audit script used to measure the chapter. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -32,4 +32,7 @@ still live belongs in `caveats/`.
|
||||
| [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 |
|
||||
|
||||
@@ -54,6 +54,33 @@ string as a name.
|
||||
Check: `python worker_vision.py`, the `shown`/`twins` cases. `pytest test_correctness.py`,
|
||||
`test_an_id_shaped_speaker_is_never_a_name`.
|
||||
|
||||
## An unpaired mark grounds nothing {#unpaired-mark}
|
||||
|
||||
**Closed.** `_set_of_mark` labels a detected face `unknown` when gated pairing
|
||||
(`decisions/audit-phase1.md#gated-face-pairing`) matched it to no present character. An answer pointing
|
||||
at such a mark identifies nobody, so it must not carry `som_face`, the highest-trust provenance.
|
||||
|
||||
Evidence: all 7 `som_face` lines in the first 36 panels of the 2026-08-11 rerun had `speaker_ref` kind
|
||||
`unknown`. The label sat on lines with no speaker. Same defect class as the fake `tail`.
|
||||
|
||||
Forbids: deriving a provenance label from the label map without checking what the label resolved to.
|
||||
Check: `python worker_vision.py`, the `unpaired` case.
|
||||
|
||||
## An interjection is not a name and not a misquote {#interjection-false-positive}
|
||||
|
||||
**Closed.** `verify_script` must stay quiet on valid narration, because `run_stage_script` retries once
|
||||
and then raises (`decisions/audit-phase1.md#verifier-false-positives`).
|
||||
|
||||
Evidence: the narrator wrote `"...Hm?"` for the source line `"Uh... hum...?"`. Both rules fired at once.
|
||||
`Hm` was absent from the source words, and a 6-character quote needs 5 matching characters to ground,
|
||||
so it got 4. That halted the `script` stage at 112/116 on job `778297bc`.
|
||||
|
||||
Interjections join `_STOPWORDS`. A quote of three letters or fewer is no longer grounded-checked. That
|
||||
holds the same line as the dialogue prompt's 1-3 character noise rule. The stage then passed 116/116.
|
||||
|
||||
Forbids: scoring a quote too short for the ratio to carry meaning.
|
||||
Check: `pytest test_script_verify.py`, `test_an_interjection_is_not_a_name_or_a_misquote`.
|
||||
|
||||
## Cast names enter the verifier tokenized {#multiword-cast-names}
|
||||
|
||||
**Closed.** `verify_script` compares single capitalized tokens, so every allowed name must be present as
|
||||
|
||||
@@ -56,3 +56,19 @@ instead. The check is not worth a failed start.
|
||||
write. Nothing is repointed. Two things still block a cutover, and neither is settled. RustFS is
|
||||
`1.0.0-beta.12`, labeled `build-type=prerelease`. Swapping storage also adds a variable to the run
|
||||
meant to produce the baseline. Task [#116].
|
||||
|
||||
## Clearing a stage strips the vision blob it wrote {#clear-vision-blob}
|
||||
|
||||
**Closed. 2026-08-11.** `dialogue` and `direct` have no output table. They write onto the per-panel
|
||||
vision blob, and `_STAGE_TABLES` had no entry for either, so `/stage/clear dialogue` deleted nothing and
|
||||
still returned `{"ok": true}`. `run_stage_dialogue` then saw `"dialogue" in vision` and skipped all 116
|
||||
panels.
|
||||
|
||||
Evidence: the first clear reported `scripts: 46, scene_graphs: 116` and no vision counts. After the fix
|
||||
the same call reported `vision_results.dialogue: 116` and `vision_results.direct: 75`, all of which the
|
||||
first clear had left in place. A whole rerun was wasted on stale data before this was found.
|
||||
|
||||
`_STAGE_VISION_KEYS` in `db.py` names the keys each stage owns, and `clear_stage_data` strips them.
|
||||
|
||||
Forbids: adding a stage that writes onto a shared blob without listing its keys there.
|
||||
Check: `pytest test_db.py`, `TestClearStageData`.
|
||||
|
||||
Reference in New Issue
Block a user