fix: track 5 frames works for bbox and polygon shapes (REQ-189)

trackForward read geometry.coordinates, a key the backend never emits, and
had no bbox branch - the action silently no-op'd for every shape (flagged
dead in docs/audit-2026-08-07.md:103).

- bbox points used as-is, polygon reduced to its bounding box
- guards speak instead of returning silently
- a frame SAM3 refuses no longer aborts the remaining frames
- a press during an in-flight run is ignored (would double-write)
- REQ-189 added; non-goal requirements.md:22 amended to keep exemplar
  propagation out while admitting this one-shot hand-off
This commit is contained in:
asus committed 2026-10-05 12:01:59 +07:00
1 parent 2971f9192c
commit b71f1d4bf2
4 files changed
+79 -24

No files matched your search

+13 -1
View File
@@ -19,7 +19,10 @@ changes.
- Login, multi-user, tenants, quotas. The architecture leaves room for them; the features
are not built.
- Tracking or annotation propagation between frames.
- Propagation of **drawn exemplars** across a batch or between frames — an example pools
features from its own image (REQ-172), so it cannot travel. One-shot propagation of an
already-drawn shape into the next few frames is a different thing and is REQ-189.
(Amended by REQ-189: was "Tracking or annotation propagation between frames".)
- Collaborative annotation by several people at once.
- Public internet deployment.
@@ -165,6 +168,15 @@ changes.
class.
- **REQ-043** — The user can ask SAM3 for help inside the editor: click or drag a box around
one object and the model produces its shape.
- **REQ-189** — In the review editor, the user can push the **selected shape's** box forward
with *Track 5 Frames* (`[T]`): the next five frames each get their own REQ-043 box-assist
run, seeded with that box, and the shape is written as `source=manual`. Both geometry types
work — a bbox shape supplies its own box, a polygon is reduced to its bounding box. Each
frame is an **independent** run: a frame SAM3 refuses (nothing inside the box) is reported
and the rest still run; nothing selected, an unusable shape, or the last frame says so
instead of doing nothing. This is one-shot hand-off across the next frames, **not**
propagation of drawn exemplars (which stays a non-goal): nothing is carried frame to frame,
and the runs do not depend on each other.
- **REQ-044** — All annotations and review statuses are **persistent** — they survive a
server restart, unlike today's in-memory sessions.
- **REQ-045** — Review progress is visible (e.g. "120/300 reviewed"), and a batch can only