diff --git a/docs/requirements.md b/docs/requirements.md index d1b68f1..386a2d7 100644 --- a/docs/requirements.md +++ b/docs/requirements.md @@ -29,7 +29,7 @@ Status: `Done` · `In Progress` · `Planned` · `TBD` · `Withdrawn` | ID | Requirement | Traces to | Priority | Status | |---|---|---|---|---| | AR-001 | Detect faces in sampled frames; emit bbox, confidence, 5-point landmarks in original pixel space | SR-002 | High | Done | -| AR-002 | Minimum face size 66×66 px, expressed in **original** resolution (decoupled from `dense_scale`) | SR-002 | High | Planned | +| AR-002 | Minimum face size **32×32 px** (VR-005 measured), expressed in **original** resolution (decoupled from `dense_scale`) | SR-002 | High | Planned | | AR-003 | No fixed per-frame face cap — crowd scenes must not lose background cast | SR-002 | Medium | Planned | | AR-004 | Backpressure: unbounded faces/frame absorbed by slowing, never by dropping or throwing | SR-002 | High | Planned | | AR-005 | Align to 112×112 via ArcFace 5-point similarity transform | SR-002 | High | Done | @@ -104,7 +104,7 @@ Status: `Done` · `In Progress` · `Planned` · `TBD` · `Withdrawn` | VR-002 | Replay drives the **real** KPN nodes, not a reimplementation | PR-002 | High | Done | | VR-003 | Scoring: micro-F1 against X-Ray, precision/recall logged at every evaluation | PR-002 | High | Done | | VR-004 | Reproducible validation corpus with ground truth | PR-002 | High | Done | -| VR-005 | Minimum face size study — TPI/FPI vs probe size, gallery held at native res | PR-002 | Medium | Planned | +| VR-005 | Minimum face size study — TPI/FPI vs probe size, gallery held at native res | PR-002 | Medium | **Done** — knee at 24–32 px; 32 px gives 98.1% TPI, 0.0 FPI at every size | | VR-006 | Re-tune `scene_threshold` once native-rate decode lands | PR-002 | Low | Planned | | VR-007 | Expansion band, clustering threshold, and deferred-pass ablation | PR-002 | Medium | Planned | | VR-008 | Gallery scaling benchmark — throughput vs gallery size | PR-002 | Medium | Planned | @@ -195,7 +195,7 @@ as such rather than counted as covered. | Requirement | Tier | Note | |---|---|---| | AR-001, AR-005, AR-006 | T3 | Smoke only — correctness of detection/embedding is a model property, not ours | -| AR-002 | T2 | Size filtering is arithmetic on dumped bboxes | +| AR-002 | Minimum face size **32×32 px** (VR-005 measured), expressed in **original** resolution (decoupled from `dense_scale`) | Size filtering is arithmetic on dumped bboxes | | AR-003, AR-004 | T1 + T4 | Backpressure logic is unit-testable; saturation behaviour needs real load | | AR-007 … AR-017 | **T2** | The core of the redesign — fully replayable | | AR-018 … AR-022 | **T2** | Expansion, deferred pass, clustering: all post-embedding | @@ -302,7 +302,7 @@ because it will be trusted. | ID | Tier | Test asserts | Edge cases to cover | |---|---|---|---| | AR-001 | T3 | Detector returns plausible boxes on a known frame | — smoke only | -| AR-002 | T2 | Faces below 66 px (original res) are dropped | Exactly at threshold; with `dense_scale` 0.5 — the interaction that motivated the requirement | +| AR-002 | Minimum face size **32×32 px** (VR-005 measured), expressed in **original** resolution (decoupled from `dense_scale`) | Faces below 66 px (original res) are dropped | Exactly at threshold; with `dense_scale` 0.5 — the interaction that motivated the requirement | | AR-003 | T2 | No cap applied; a 40-face frame yields 40 | Crowd frame | | AR-004 | T1 | Saturated input blocks rather than drops or throws | Bounded queue at capacity; **byte-based** limit with large crops; SIGTERM mid-block | | AR-005 | T1 | Known landmarks → expected 112×112 warp | Landmarks near frame edge; degenerate/collinear points |