refactor: route day-path construction through day_path()/day_dirs()
Chronicle migration prep. All non-test production sites that build a
journal day path by joining the journal root with a YYYYMMDD string now
go through think.utils.day_path() or day_dirs(). No behavior change —
paths produced are byte-identical. Once chronicle lands, the real
layout change becomes a two-function update in think/utils.py instead
of ~18 scattered edits.
Sites touched:
- observe: export.py, transfer.py (4 sites, one redundant mkdir dropped)
- think: conversation (NOT touched — see below), entities/activity,
entities/context, journal_stats (chronicle-breaker parent-derivation
fixed at 2 sites), supervisor._handle_segment_event_log, talent_cli,
tools/call (local-var shadow resolved), tools/sol (briefing scan
tightened to 8-digit day dirs via day_dirs())
- apps/speakers: discovery, status
Sites intentionally skipped (same wrinkle — module-local get_journal
or state.journal_root patches in tests are bypassed by day_path()):
- apps/sol/routes.py:49, 201, 455, 513 (state.journal_root)
- apps/import/routes.py:696 (state.journal_root)
- apps/import/ingest.py:207 (state.journal_root)
- think/conversation.py:105 (tests/test_conversation.py patches
think.conversation.get_journal directly)
These sites follow the same resolution pattern and can be absorbed
into the chronicle migration at the state.journal_root / module-local
get_journal layer in a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>