activity_state: move since tracking from LLM to tooling
The LLM produced `since` values in 8+ inconsistent formats and broke
continuity ~40% of the time. Restructure so the LLM only reports
semantic state (continuing/new/ended) and the post-hook stamps `since`
from the previous segment's stored output.
- Flatten output schema from {active:[], ended:[]} to a single array
with per-item `state` field
- Add post-hook that resolves `since` by matching against previous
segment, with rapidfuzz disambiguation for concurrent same-type
activities
- Remove `since` from pre-hook context shown to LLM
- Add active-vs-visible rule and explicit ended-reporting guidance
- 35 tests (was 22)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>