{"type":"meta","schema":"session-state/v1","slug":"session-limits-menu","topic":"tray account session-limit progress rows","created":"2026-07-01","exec_mode":"ship","scheduler":"sequential","land_mode":"pr","base_branch":"origin/main","status_enum":["BLOCKED","PENDING","WORKING","WRITTEN","REVIEWED","COMMITTED"],"truth_rule":"this file is ground truth for INTENT (goals/directions/task list); git is ground truth for DONE-NESS — reconcile statuses against git, never trust a COMMITTED line with no commit","refresh_how":"native Read of THIS file — NEVER ctx_execute/ctx_search (the point is re-injecting intent into the main thread; a context-mode call keeps bytes OUT and silently kills the feature)","refresh_what":"meta + every goal/methodology/intent/direction record + all WORKING and BLOCKED tasks (skip COMMITTED lines)","refresh_when":["wave/phase boundary","any task status change","after a compaction system-reminder","before calling advisor"],"update_rule":"on status change, rewrite that task's single line in place; append new tasks/session_memory as new lines","report_rule":"at session end emit brief: done / blocked / deferred / canceled — NO 'next action' (if you know it, do it)"}
{"type":"goal","text":"Show per-account 5h and 7d session-limit progress rows from the tray click menu, including remaining time only when server reset metadata exists."}
{"type":"methodology","text":"Contract-first; preserve existing dirty worktree; use existing AccountSnapshot, health cache, Indicator menu, and pytest fake GTK patterns."}
{"type":"intent","text":"Make account choice safer by exposing usage pressure before launching or switching Codex sessions."}
{"type":"direction","verbatim":"If Codex does not expose exact reset/remaining timestamps for a limit window, show accurate progress bars and percentages; display time left only when server data exists."}
{"type":"anchor","path":"docs/specs/2026-07-01-session-limits-menu-design.md","what":"spec"}
{"type":"anchor","path":"docs/plans/2026-07-01-session-limits-menu.md","what":"plan"}
{"type":"task","id":"w1.p1.t1","wave":1,"phase":1,"desc":"Extend AccountSnapshot and health cache with optional reset timestamps while preserving old cache compatibility.","status":"COMMITTED","deps":[],"requires_decision":null,"files":["health_client.py","cdx.py","tests/test_cld.py"],"blocker":null}
{"type":"task","id":"w2.p1.t1","wave":2,"phase":1,"desc":"Render session-limit progress rows in existing Indicator account labels.","status":"COMMITTED","deps":["w1.p1.t1"],"requires_decision":null,"files":["indicator.py","tests/test_indicator.py"],"blocker":null}
{"type":"task","id":"w3.p1.t1","wave":3,"phase":1,"desc":"Run targeted tests and adjust routing/cache compatibility tests for extended snapshots.","status":"COMMITTED","deps":["w1.p1.t1","w2.p1.t1"],"requires_decision":null,"files":["tests/test_account_registry.py","tests/test_systray_codex_switcher.py","tests/test_indicator.py"],"blocker":null}
