[T04] Bulk Flag UNFIT / Dispose
Summary
Bulk admin actions on RaceNumbers: flag a selection as UNFIT_FOR_SERVICE, or dispose UNFIT rows to DESTROYED. Honours ADR-0003 — UNFIT is immutable; DESTROYED is the only valid next state.
Main Flow
-
Operator selects rows in T02 (or arrives via T03’s disposal-recommended list).
-
Flag UNFIT action — confirmation modal showing selected count + ADR-0003 immutability warning.
-
Dispose action (UNFIT rows only) — confirmation modal showing count.
-
Operator confirms — bulk POST.
-
Per-id outcome summary (success / skipped / rejected / not-found).
-
Audit-log entry per number (handled by the existing service layer).
Alternative Flows
-
AF-1: Mixed selection (UNFIT + non-UNFIT) for
Dispose— client rejects; operator must filter. -
AF-2: Already-DESTROYED in selection — skipped; counted in
not-foundorskipped. -
AF-3: Permission denied — modal closes with clear error.
Acceptance Criteria
-
Use-case page authored.
-
Status
design-todo → handoff-readyafter Claude Design pass. -
Implementation calls existing
flag-unfit+disposeendpoints; one bulk request when feasible. -
Disposing a non-UNFIT number rejected client-side with a clear message.
-
Per-id outcome summary rendered from response DTO.
API Surface
| Call | Purpose |
|---|---|
|
Batch UNFIT flag (existing). |
|
Batch UNFIT → DESTROYED (existing). |
Design Anchors
-
design-journal/2026-03/number-tag-management.adoc— ADR-0003 -
T02 — selection source