fix: scope a session's "her notes" to its own time window

The HUD's notes list filtered journal/note entries by `created_at >= started_at`
with no upper bound, so a *closed* session kept absorbing every note she wrote
afterward — a session from last Saturday would show a note jotted 25 minutes ago.

Cap the window at `ended_at` for closed sessions; live sessions (no end yet) stay
open-ended as before.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-03 19:35:15 +00:00
parent a4412aa023
commit 71bbe07220
2 changed files with 27 additions and 1 deletions
+6 -1
View File
@@ -1298,12 +1298,17 @@ def hud(session_id: int | None = None) -> dict | None:
for h in list_hands(sid) for h in list_hands(sid)
] ]
# Notes she jotted during this session: journal/note entries since it started. # Notes she jotted *during* this session: journal/note entries inside its
# [started_at, ended_at] window. A live session has no end yet, so it stays
# open-ended; without the upper bound a closed session would keep absorbing
# every note she writes long after it's over.
started = s.get("started_at") or "" started = s.get("started_at") or ""
ended = s.get("ended_at") or None
notes = [ notes = [
{"created_at": j["created_at"], "kind": j["kind"], "content": j["content"]} {"created_at": j["created_at"], "kind": j["kind"], "content": j["content"]}
for j in memory.list_journal(kinds=("note", "journal")) for j in memory.list_journal(kinds=("note", "journal"))
if (j["created_at"] or "") >= started if (j["created_at"] or "") >= started
and (ended is None or (j["created_at"] or "") <= ended)
][:20] ][:20]
stats = session_stats(sid) stats = session_stats(sid)
+21
View File
@@ -18,6 +18,27 @@ def lyra(tmp_path, monkeypatch):
return poker return poker
def test_hud_notes_scoped_to_session_window(lyra):
poker = lyra
from lyra import memory
sid = poker.start_session(venue="Meadows", stakes="1/3", buy_in=300)
s = poker.get_session(sid)
started = s["started_at"]
# A note written mid-session (>= started, before it ends) belongs to it.
conn = memory._connection()
with conn:
conn.execute("INSERT INTO journal (created_at, kind, content) VALUES (?,?,?)",
(started, "note", "villain 3 overfolds turn"))
poker.end_session(cash_out=540, session_id=sid)
# A note written well after the session closed must NOT show up on it.
with conn:
conn.execute("INSERT INTO journal (created_at, kind, content) VALUES (?,?,?)",
("2999-01-01T00:00:00+00:00", "note", "thought from the far future"))
contents = [n["content"] for n in poker.hud(sid)["notes"]]
assert "villain 3 overfolds turn" in contents # inside the window
assert "thought from the far future" not in contents # after ended_at
def test_session_lifecycle_and_net(lyra): def test_session_lifecycle_and_net(lyra):
poker = lyra poker = lyra
sid = poker.start_session(venue="Meadows", stakes="1/3", buy_in=400) sid = poker.start_session(venue="Meadows", stakes="1/3", buy_in=400)