refactor(events): migrate live consumers + delete reader functions master
Sprint 4 Lode C1. Completes retirement of legacy reader surfaces started in 9a5d800b (A) and 930f1d36 (B); last-known-good for revert: 930f1d36. - apps/home: rename `_collect_events` → `_collect_anticipated_activities`; drop `get_events` call; rename pulse context key `events` → `anticipated_activities`; update template iteration + empty-state copy. - apps/activities: delete `/api/day/<day>/events` route + `activities_day_events`; replace `activities_stats` with activities-sourced stub returning `{YYYYMMDD: {facet: count}}` via `calendar.monthrange` + `load_activity_records`. - apps/activities/_day.html: template surgery — replace `#eventsView` with `#timelineView`, extract timeline rendering into new `renderTimeline()`, delete event modal + `openModal`, delete all-day event block, delete processedEvents/column-layout/legend code, drop `/api/day/<day>/events` fetch. File: 1470 → 974 LOC. - convey/static/month-picker.js: tooltip wording `events` → `items`. - think/journal_stats.py: drop `facets/*/events/*.jsonl` mtime block from `_get_day_mtime`. - think/indexer/journal.py: delete `get_events`. `_find_signal_files` event glob retained — historical event files remain searchable via `sol call journal search`. - think/event_formatter.py: delete `get_month_event_counts`; `format_events` remains as the only public export. Registry entry at `think/formatters.py:142` unchanged. - tests: delete `tests/test_events.py` (5 tests); delete `test_get_events*` from `test_journal_index.py` (2 tests); delete `test_facet_event_mtime_invalidates_cache` from `test_journal_stats.py` (1 test, covered deleted functionality); rewrite Pulse collector test in `test_home_yesterdays_processing.py` (anticipated-only assertion); update monkeypatches in `test_home_skills.py` + `test_home_routines.py`; add one route-level stats stub test in `tests/test_app_activities.py`; remove `day-events` entry from `tests/verify_api.py`; regenerate `tests/baselines/api/activities/stats-month.json` for the new shape. Keep-list invariants intact: - `think/formatters.py:142` event formatter registry entry - `think/event_formatter.py::format_events` - `think/indexer/journal.py::_find_signal_files` event glob (line ~250) - `tests/test_formatters.py` Deferred to Lode D: `think/planner.md` references to `get_events` at lines 19, 46, 82 (live prompt text, but no runtime tool-wrapper exists — misleading but non-breaking); wider docs/baselines scrub. Test count: 3234 passed, 1 skipped (net −7 tests from the migration: −5 `test_events.py`, −2 `test_journal_index.py::test_get_events*`, −1 `test_journal_stats.py::test_facet_event_mtime_invalidates_cache`, −1 rewritten-in-place in `test_home_yesterdays_processing.py`, +1 new `test_app_activities.py` stats route test, +1 existing `test_home_yesterdays_processing.py` rewrite counted above). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>