Add owner onboarding trigger for cold-start speaker attribution
Wire existing speaker detection and confirmation components into the
triage muse awareness system so new journals proactively surface owner
voice detection.
Changes:
- think/awareness.py: Add owner_detection_ready() — checks centroid
existence, 14-day rejection cooldown, then runs detect_owner_candidate()
- apps/speakers/owner.py: Extract confirm_owner_candidate() and
reject_owner_candidate() as shared functions (used by both CLI and routes)
- apps/speakers/call.py: Add detect, confirm-owner (with auto-backfill),
reject-owner, and owner-ready CLI commands for triage muse
- apps/speakers/routes.py: Refactor confirm/reject handlers to use shared
functions from owner.py
- muse/triage.md: Add Owner Voice Detection Awareness section with
conversational prompt, confirm/reject handling, and sample navigation
- Tests: 10 new tests covering awareness checks, CLI commands, cooldown
expiry, and shared confirm/reject functions
Implements CPO spec section 1 (cold-start-speaker-attribution.md).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>