feat(observe): local RF-DETR object detection on media/social + still frames master
Add solstone/observe/detect.py with local rf-detr.cpp invocation, a fail-closed latch mirroring rerank_scorer, detections_block provenance assembly, screen_gate categorization gating, and the read-side qualified_objects policy. Wire describe phase 3 to run detection only for media/social primary or secondary categorization, off the event loop via asyncio.to_thread, passing the full-resolution frame bytes. Wire depict to always detect on a full-resolution PNG re-encode with source/gate still. Stored objects are the raw CLI detections array verbatim with zero write-side filtering; qualification is read-time only. Add the optional detections record property to the screen schema and regenerate the journal contract bundle. This is forward-only enrichment with no backfill and no owner-facing surfacing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>