feat: session timeline (running log) + reliable live logging

She was logging stacks but skipping hands — the CASH card framed logging as one of
two registers, so she'd 'talk about' a hand instead of recording it (streaming
returns content OR tool calls). Fixes:

- CASH card: logging is mandatory and log-FIRST — trackable facts get the tool call
  before the reply, both not either/or, hands never skipped for conversation.
- log_stack gains a note ('card dead', 'doubled up vs the LAG') -> timeline context;
  tool spec + handler updated. Migration adds poker_stack_log.note.
- poker.timeline(): interleaves session start, stack updates (+context), hands
  (linkable), reads, and rituals chronologically in local time (clock.short()).
  Added to the hud() bundle.
- Session HUD: a 📜 Timeline card renders the running log with hand links — the
  '10:19pm start … 1:34a doubled up, $750 (hand)' view Brian wanted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-27 07:26:14 +00:00
parent ba00530caf
commit cb4ed10c1a
5 changed files with 101 additions and 16 deletions
+7 -3
View File
@@ -184,8 +184,9 @@ def _log_stack(args: dict, ctx: dict) -> str:
amount = float(args.get("amount"))
except (TypeError, ValueError):
return "Give me a number for the stack."
note = (args.get("note") or "").strip() or None
try:
st = poker.log_stack(amount)
st = poker.log_stack(amount, note=note)
except ValueError:
return "No live session — start one first, then I'll track your stack."
net = st.get("net")
@@ -519,8 +520,11 @@ TOOLS.update({
"log_stack",
"Record Brian's CURRENT total chip stack in the live session. Call whenever "
"he states his stack ('I'm at 350', 'down to 220', 'stacked off to 900'). "
"Tracks his stack over time and his live net while he's still sitting.",
{"amount": {**_N, "description": "Current total chip stack, in dollars"}},
"Tracks his stack over time and his live net while he's still sitting. Pass "
"`note` with the WHY when he gives it ('card dead', 'doubled up vs the LAG') — "
"it becomes the line in his session timeline.",
{"amount": {**_N, "description": "Current total chip stack, in dollars"},
"note": {**_S, "description": "Optional context for the change, e.g. 'card dead', 'doubled up'"}},
["amount"])},
"scar_note": {"handler": _scar_note, "spec": _f(
"scar_note",