08eb1e3f8c
Sub-plan #2 of 3 in M3 (Fable #341). Two write-path additions on top of M2's events + likes infra: 1. play_started: compute session vector from prior 5 tracks in current play_session, write to play_events.session_vector_at_play. 2. like a track: if open play_event has populated vector, snapshot into contextual_likes with vector + session_id. Soft-delete on unlike (deleted_at column gates engine queries). Includes new migration 0007_contextual_likes — the table was missing from migration 0005 despite being mentioned in its comments. Adds GIN index for sub-plan #3's similarity queries. Backend-only slice; no UI changes.