54bd126cd7
`_bbox_to_pixels` sorts each coordinate pair after clamping. Run B returned `p007 person_1` as `[226, 417, 130, 551]`, x1 > x2, which cropped to nothing and lost that detection silently. The third GPU cycle came back with 0 degenerate boxes over 119 detections. The plan's first item cannot run as written. All 145 rows of `identity_labels` belong to chapter 8ca8249b, a different manga. Chapter 7c944dd4 has none, so `/review/identity` reports `accuracy: null`. Scoring 8ca8249b gives 7/138 on an identity run that predates every fix. The cycle also settled the coverage question. All 68 assignments landed on face-bearing detections and none on a gated one, so recall among face-bearing detections is 96%, up from 82%. Coverage is the `has_face` gate and nothing else. What is now open is precision: the lead holds 36 of 68 assignments. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
89 lines
3.7 KiB
Markdown
89 lines
3.7 KiB
Markdown
# HANDOFF, 2026-08-12 (sixth session)
|
|
|
|
Live state is in `NEXT.md`. This file is only what this session did. The previous handoff is in
|
|
`JOURNAL.md`.
|
|
|
|
## Asked
|
|
|
|
The two files, then "go" on the third GPU cycle.
|
|
|
|
## Result
|
|
|
|
One worker fix, one measurement that killed the plan's first item, one GPU cycle. The cycle proved the new
|
|
fix and the fifth session's merge fix. Coverage rose for the first time, 50% to 57%. It is now explained
|
|
entirely by the `has_face` gate.
|
|
|
|
| metric | 17:38 run | 18:07 run |
|
|
| --- | --- | --- |
|
|
| detections | 117 | 119 |
|
|
| assignments | 59 | 68 |
|
|
| coverage | 50% | 57% |
|
|
| degenerate boxes | 1 | 0 |
|
|
| assigned among face-bearing | 59/72 = 82% | 68/71 = 96% |
|
|
| assigned among gated | -- | 0 |
|
|
| chains deeper than one hop | 1 | 0 |
|
|
| `merged_from` stamps | 9 | 22 |
|
|
|
|
## The corner-ordering fix
|
|
|
|
`_bbox_to_pixels` sorts each coordinate pair after clamping. Three lines
|
|
(`decisions/identity-bbox.md#bbox-corners-ordered`). The self-check feeds it run B's real
|
|
`[226, 417, 130, 551]` and asserts `[117, 688, 203, 909]`. Unsorted the call returns `[203, 688, 117, 909]`,
|
|
so the assert fails without the fix.
|
|
|
|
The run returned 0 degenerate boxes over 119 detections. The caveat is deleted and the decision is indexed.
|
|
|
|
## The measurement that killed item 1
|
|
|
|
The plan said to score precision with `eval_identity.py` against the 145 rows of `identity_labels`. Every
|
|
one of those rows belongs to chapter `8ca8249b`, a different manga with cast "Rico" and "Ikekin", spread
|
|
over 81 panels. Chapter `7c944dd4` has zero labels, so
|
|
`/review/identity?job_id=778297bc...` returns `labeled: 0, correct: 0, accuracy: null`.
|
|
|
|
Scoring `8ca8249b` anyway gives 7/138, with 113 rows labelled as a real person and left unassigned. That
|
|
chapter's identity run is stale: 44 assignments over 246 panels, predating every fix. The number measures
|
|
old code on the wrong chapter.
|
|
|
|
So the eval path is proven end to end and the ground truth is absent. A precision number needs a hand pass
|
|
over `7c944dd4` through `POST /review/identity/label`, keyed by bbox rather than `local_id`.
|
|
|
|
## What the cycle settled
|
|
|
|
**Coverage is the gate and nothing else.** All 68 assignments landed on face-bearing detections and none on
|
|
a gated one. Recall among face-bearing detections is 96%, up from 82%. The resolver is not losing cast, so
|
|
the suspicion in `caveats/audit-open.md#coverage-trend` is closed.
|
|
|
|
**The merge-chain fix holds under load.** 9 merges this run against 7 last run, and 22 `merged_from`
|
|
stamps. No chain is deeper than one hop.
|
|
|
|
## What the cycle opened
|
|
|
|
**The lead may be absorbing.** 36 of 68 assignments, 53%, against 25 of 59 before. `audit_registry.py`
|
|
flags it. A protagonist in half the panels looks identical to an over-merge without labels.
|
|
|
|
**Panel 7 got worse.** 5 of its 6 detections carry `has_face = False`, and `person_6`, the one that does,
|
|
went unassigned. The previous run bound its colleague. That is the cost of requiring a face, `NEXT.md`
|
|
item 4.
|
|
|
|
## Not done
|
|
|
|
- Nothing downstream re-ran. The job is still parked at `dialogue waiting` with every stage below cleared.
|
|
- Nothing is committed. All edits are in the working tree.
|
|
|
|
## Checks
|
|
|
|
```bash
|
|
.venv/bin/python worker_vision.py # self-check ok, including the swapped-corner assert
|
|
./check_stale.sh # exit 0 before the run and after it
|
|
```
|
|
|
|
## Traps confirmed
|
|
|
|
- Restart a worker with `tmux send-keys -t manga-workers:<window> C-c`, then re-send the launch line from
|
|
`start_workers.sh` with the `MIOPEN_ENV` prefix. `pgrep`-based kills match the calling shell.
|
|
- `POST /characters/reset` returns `restart_identity_worker: true`. Honour it, the worker caches the
|
|
registry.
|
|
- `identity_assignments` has no `method` column. The `merged_from:` stamps live in
|
|
`identity_assignment_sources`.
|
|
- `chapters` has no `title` column.
|