Skip to content

Latest commit

 

History

History
17 lines (16 loc) · 2.93 KB

File metadata and controls

17 lines (16 loc) · 2.93 KB

Architecture Decision Records

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