# Capture Module — Codex (per FVW v8 §22 + §40)

**Module ID:** `oscar.capture`
**Status:** Constitutional (per §40 + latent doctrine, locally ratified).

## C1 — Behaviour Inventory
- `app/src/capture/CaptureFlow.tsx` (5 capture modes)
- Wired into AssistantDock (4 buttons + 1 inline text)

## C2 — State Machine
Capture flow: idle → active → saving → done | cancelled | failed

## C3 — Side Effect List
- Writes to voices or media store based on mode

## C4 — Input Validation Contract
- Voice/text: non-empty transcript
- Photo: optional, type=photo
- GPS: navigator.geolocation
- Measurement: numeric string

## C5 — Failure Modes
- GPS denied → status: failed
- No project → status: failed

## C6 — User Simulation List
1. Tap voice → speak → save → artifact in /voice
2. Tap photo → upload → artifact in /media
3. Tap GPS → grant → save → artifact in /media
4. Tap measurement → type → save → artifact in /media

## C7 — Reproducibility Test
Deterministic.

## C8 — Shape Matrix
| Surface | Modes | Chips | States |
|---|---|---|---|
| CaptureFlow | voice, photo, gps, measurement, text | save, cancel | idle, active, saving, done |

## C9 — State Shape Inventory
### C9.1 localStorage
None
### C9.2 In-memory
- captureMode in AssistantDock
### C9.3 IDB
- voices, media (via Voice/Media models from C2)

---

## END OF CAPTURE CODEX
