Reference session launcher activity time
The chat.justinsforge.com session launcher (scripts/forge_session_launcher_api.py, forge-session-launcher.service, user systemd unit) computes each row's "Xm ago" from activity_epoch.
Trap: a transcript's stat().st_mtime is NOT a valid last-activity signal. The Remote Control bridge keeps appending untimestamped mode / permission-mode / bridge-session control lines to a live session's .jsonl, so the file mtime creeps forward on idle sessions (they falsely read ~15m ago). tmux session_activity is the opposite problem (blind to RC traffic).
Correct signal: _last_activity_epoch(path) scans the transcript from the end for the last entry carrying a real "timestamp" (user/assistant/system message) and uses that; falls back to tmux session_activity when no transcript is joined. Tail-reads 128KB with a full-read fallback. list_sessions sets activity_epoch from it (fixed 2026-07-03, commit 4e4f24b).
Do NOT reintroduce max(session_activity, mtime) here. Related: the UI is served from UI_DIR = sites/justinsforge.com/chat (StaticFiles, edits live on disk); frontend renders time via ago() in launcher.js.