diff --git a/HANDOFF.md b/HANDOFF.md index 3647f47..c59bdd5 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -61,14 +61,15 @@ Job `778297bc-e7ce-439d-91b5-8a027060d17f`, chapter `7c944dd4-e972-42c7-ba60-9f6 ## Open -- **The run is still going.** It was in `tts` at 26/116 when this was written, with `layers render - assemble` unrun. `tts` is the bottleneck. Read it: +- **The run finished.** Every stage completed at 2026-08-11T20:08:16Z: `tts` 116/116, `layers` 116/116, + `render` 116/116, `assemble` 1/1. `s3://video/` holds 49 clips and a 50MiB `chapter.mp4` under + `ef105a86-.../7c944dd4-.../`, `s3://audio/` 49 objects at 32MiB. Nobody has watched the video. - ```bash - /usr/bin/ssh kami@192.168.1.104 "curl -s 'http://127.0.0.1:9090/job/status?job_id=778297bc-e7ce-439d-91b5-8a027060d17f'" - ``` + Two honesty defects at the finish, recorded not fixed. `layers` reported `completed 116/116` with an + empty bucket, so no clip has parallax (`caveats/audit-open.md#layers-writes-nothing`). The completed + job still carries `error: "partial: 112/116 completed"` (`caveats/audit-open.md#stale-job-error`). - If it failed, clear the failed stage and resume: + Read the state, or clear a stage and resume: ```bash /usr/bin/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\":\"\"}'" diff --git a/JOURNAL.md b/JOURNAL.md index a5d813e..60dbba9 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -160,3 +160,12 @@ at 112/116 because the narrator wrote `"...Hm?"` for the source line `"Uh... hum rules fired on that two-letter interjection (`decisions/speaker-attribution.md#interjection-false-positive`). After the fix, `script` passed 116/116, the first time this chapter has cleared the verifier. `tts` then ran for the first time. + +The run then completed end to end for the first time: `tts` 116/116, `layers` 116/116, `render` 116/116, +`assemble` 1/1, finished 2026-08-11T20:08:16Z. `s3://video/` holds 49 clips and a 50MiB `chapter.mp4`, +`s3://audio/` 49 objects at 32MiB. The per-artifact bucket split is now proven for every class except +layers (`decisions/storage-layout.md#bucket-per-artifact`). + +Two honesty defects surfaced at the finish, both recorded rather than fixed. `layers` reported +`completed 116/116` with an empty bucket, and the completed job still carries +`error: "partial: 112/116 completed"` from the failure three resumes earlier. diff --git a/NEXT.md b/NEXT.md index a8e40e3..5daa5a3 100644 --- a/NEXT.md +++ b/NEXT.md @@ -24,7 +24,10 @@ 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. +six defects behind the old 30%. Everything below is measured on job `778297bc`, not inferred. + +That job now runs end to end: `chapter.mp4`, 50MiB, 49 clips. Nobody has watched it. Two stages lie about +it (`caveats/audit-open.md#layers-writes-nothing`, `#stale-job-error`). **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 diff --git a/caveats/CLAUDE.md b/caveats/CLAUDE.md index b07997b..cc8beac 100644 --- a/caveats/CLAUDE.md +++ b/caveats/CLAUDE.md @@ -36,3 +36,5 @@ a complaint, so give it one or drop it. | [One character id covers two different women](speaker-attribution.md#identity-over-merge) | 2026-08-11 run | | [The character registry carries five weeks of wrong names](speaker-attribution.md#registry-pollution) | 2026-08-11 run | | [One invented word still halts the chapter](speaker-attribution.md#one-word-halts-chapter) | 2026-08-11 run | +| [A completed job keeps the error from an earlier failure](audit-open.md#stale-job-error) | 2026-08-11 run | +| [`layers` reports success on an empty bucket](audit-open.md#layers-writes-nothing) | 2026-08-11 run | diff --git a/caveats/audit-open.md b/caveats/audit-open.md index afea734..cebd189 100644 --- a/caveats/audit-open.md +++ b/caveats/audit-open.md @@ -151,3 +151,23 @@ transitions, so every non-`cut` transition shortens the real video. Costs: reviewer timestamps drift further out of sync the further into the chapter they scrub. Revisit when: the review UI is used for timing work. Workaround: subtract the transition overlaps by hand. + +## A completed job keeps the error from an earlier failure {#stale-job-error} + +`/job/resume` does not clear `jobs.error`. Job `778297bc` finished every stage and still reports +`status: "completed"` beside `error: "partial: 112/116 completed"`, a message from three resumes earlier. + +Costs: any reader of the error field sees a failure on a successful job. The review UI and any future +alerting both read it. +Revisit when: anything branches on `jobs.error`, or a run is judged by its status alone. + +## `layers` reports success on an empty bucket {#layers-writes-nothing} + +Measured on job `778297bc`: `layers` reported `completed 116/116` while `s3://layers/` held 0 objects. +Every clip in that run therefore has no parallax. The stage is a sibling of +[#inconsistent-stage-policy](#inconsistent-stage-policy), but this is the measured instance: +`worker_layers.py`'s own self-check already fails on the missing +`legacy/qwen_layered_workflow.json`, and the stage still reports done for every panel. + +Costs: a silent quality regression that no status field reveals. +Revisit when: parallax matters for a deliverable, or before quoting this run as a full-pipeline pass.