| ADR | Decision |
|---|---|
| 0001 | Session-protocol boundary: the manager loop moves verbatim; families provide sessions speaking the pinned wire protocol |
| 0002 | Family semantics are adapter-owned; one worker thread owns all camera I/O |
| 0003 | Base deps carry frame processing (numpy+OpenCV); transports are explicit extras |
| 0004 | Capability honesty: absence is a first-class answer; no pretend controls |
| 0005 | Detection lives in-package; host analyzers are injected |
| 0006 | Discovery is non-invasive; ids are positional and refuse when stale |
| 0007 | Regression policy for unconnected hardware: pins and simulators may move, assertions never weaken |
| 0008 | Multi-camera: a hub of single-camera managers (one worker each), device-slug identity, ~/Pictures/<device>/[<sequence>/] layout, on-device/local save policy |
| 0009 | Webcam identity by AVFoundation uniqueID with native capture — no index space between enumeration and open (fixes the 2026-07-12 name/device inversion); fail-closed residuals only |
| 0010 | DWARF network family: the session protocol absorbs a Wi-Fi telescope (RTSP live view, album-backed captures); the MOUNT rides the action channel as family actions (one-shot, never replayed); discovery is configured, never scanned; wire codec vendored from the published spec |
| 0011 | Device media stores: abstractcamera download = one sync engine owning ALL safety rules (size-verified copies, verify-before-delete, protected device state) over per-device MediaStore adapters (mounted cards by layout signature, the DWARF Wi-Fi album; PTP cards next) |
| 0012 | AbstractCore integration: one synchronous CameraService behind BOTH surfaces — the camera capability plugin (generic registry path, entry point abstractcore.capabilities_plugins) and the explicit classified camera_* tool set; simulator-backed integration tests against core's real registry |
| 0013 | The camera event log is a wire contract (session epoch, eviction signal, announce-time trigger correlation, structured detection metrics) consumed at a framework entry; camera_preview_photo looks without firing the shutter. § Amendment (operator dm#14): the abstractcamera watch daemon was REMOVED — a dependency of abstractcore must not reach up to the gateway; the wake-on-motion producer is a gateway/flow consumer of the event API |