feat: per-class exemplar preview, class hide toggle, container NMS flag (REQ-182, REQ-183, REQ-184)
This commit is contained in:
1 parent
1a99f2ffe4
commit
96a00267d9
18 files changed
+537
-124
No files matched your search
@@ -1268,6 +1268,59 @@ failure modes to the counting path. The saving was always on the browser side.
|
||||
strings present). Browser click-test of the override tables is NOT automated — manual
|
||||
click-test pending.
|
||||
|
||||
## Task — Per-class accumulating exemplar preview (REQ-172, REQ-182) `[DONE]`
|
||||
|
||||
1. Exemplar pools keyed by class and a per-class accumulating preview in the auto-annotate
|
||||
modal — switching the active class swaps pools and a frame change clears them all
|
||||
(REQ-172); a redraw re-runs only the touched class against its own pool, the canvas unions
|
||||
every exemplared class, classes without examples contribute nothing while any example
|
||||
exists, clearing the last example falls back to the full-set preview, no examples at all →
|
||||
the unchanged full-set request (REQ-182) → verify: **[DONE]** `cd frontend && npm run
|
||||
build` passes (✓ 536 ms, 69 modules); `wc -l` caps hold —
|
||||
`frontend/src/components/AutoAnnotateModal.jsx` (400) and
|
||||
`frontend/src/hooks/useExemplarPools.js` (100) both ≤ 400; rebuilt Docker frontend
|
||||
bundle carries the `pools` marker (`grep -c pools dist/assets/*.js` → 1) and serves
|
||||
HTTP 200 on :9000; browser drag/undo/clear across two classes is NOT automated —
|
||||
manual click-test pending.
|
||||
|
||||
## Task — Per-class hide toggle in review editor (REQ-183) `[DONE]`
|
||||
|
||||
1. Eye button on each sidebar class row — a hidden class's shapes leave the canvas, the
|
||||
"Shapes on this frame" list and every selection path while the row keeps its real
|
||||
per-frame count and eye state; the choice is session-only (survives frame changes, resets
|
||||
when the review page is left, stored data untouched) → verify: **[DONE]** `cd frontend &&
|
||||
npm run build` passes (✓ 535 ms, 69 modules); `wc -l` caps hold —
|
||||
`frontend/src/components/Icons.jsx` (172) and
|
||||
`frontend/src/components/ReviewSidebar.jsx` (129) ≤ 400,
|
||||
`frontend/src/pages/ReviewPage.jsx` (666) exempt (pre-existing over the 400 cap, not
|
||||
split by this task); rebuilt Docker frontend serves the new bundle (HTTP 200 on :9000,
|
||||
`aria-pressed` present in the shipped JS); browser click-test of the eye toggle is NOT
|
||||
automated — manual click-test pending.
|
||||
|
||||
## Task — Container class flag (REQ-184, REQ-031) `[DONE]`
|
||||
|
||||
1. `project_classes.container` (`INTEGER NOT NULL DEFAULT 0`), the `containers` patch on
|
||||
`PATCH /api/projects/{id}` beside the prompts patch, and the Container checkbox in both
|
||||
auto-annotate modals' overrides table → verify: **[DONE]** migration
|
||||
`PRAGMA table_info(project_classes)` lists `container`, a second `db.migrate()` run is
|
||||
a no-op; API round-trip on project 5 sets `truck → container 1` and clears it back
|
||||
(`curl -X PATCH :9010/api/projects/5 -d '{"containers":{"2":true}}'` →
|
||||
`[(0,'sack',0),(1,'box',0),(2,'truck',1)]`, revert → all 0);
|
||||
`cd frontend && npm run build` passes (✓ 536 ms);
|
||||
`wc -l frontend/src/components/ClassParamsTable.jsx` = 115 ≤ 400; both modals stay at
|
||||
400 / 347.
|
||||
2. Cross-class NMS reads the stored flag — preview and batch job build the same container-id
|
||||
set → verify: **[DONE]** scripted NMS check 6/6 (`uv run python`, pasted in
|
||||
`t3-report.md`, re-run at T5): containment ≥ 90 % keeps both boxes for the container
|
||||
class only (one direction), no blanket exemption below 0.9 (IoU 0.802 / containment
|
||||
0.890 → dropped), `iou <= 0` never drops, within-class pass unchanged, per-class IoU
|
||||
override consulted on cross pairs; `uv run ruff check backend/` → 409 errors, all
|
||||
+13 being pre-existing categories (UP006/UP035/UP045) on the new signature lines.
|
||||
|
||||
The REQ-031 amendment rides on this entry: cross-class greedy NMS with the per-class IoU
|
||||
override and the containment carve-out is only real once the flag exists and both live sites
|
||||
read it.
|
||||
|
||||
## Known open points
|
||||
|
||||
- *Not closed by any task, by choice:* **any rebuild kills the running job.** Task 14's resume
|
||||
|
||||
Reference in new issue
Block a user