feefa682b357ea19e7b88cd50f2fbc3a04e6e5f0
Rewrites the activity feed query to group consecutive events on the same (actor, document, kind) into sessions separated by >120 min gaps. A session becomes one row with count = events-in-session and happenedAtUntil = last event timestamp. Singletons keep count=1 / happenedAtUntil=null. Algorithm: LAG() to get the previous event's timestamp in the same partition, mark a new session when gap > 7200s, then SUM() over an unbounded preceding window yields a running session_id. Aggregation groups by session_id. COMMENT_ADDED and MENTION_CREATED always start a new session — these kinds never roll up so each event stays its own row. Also adds BLOCK_REVIEWED to the eligible-kinds WHERE clause (Chronik spec §02) so reviewed blocks appear in the activity feed. Five new integration tests cover combine-within-2h, split-at-boundary, no-hard-cap-on-long-session, never-rolls-up-comments/mentions, and the count/happenedAtUntil contract on both singletons and rollups. Part of #285. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
No description provided
Languages
Python
73.3%
TypeScript
11.4%
Java
10.8%
Svelte
4.2%
Shell
0.1%