Files
ratatoskr/persistent-memory.d/2026-06-30-b1-sse-resume-shipped-v0-18-5-streamturnresil.md
vh ff1f9ca1e8 memory: /snapshot — #368 silo test passed; two-tier migration; stores scrubbed
- #368 (user,character) memory silo test DONE + PASSED live (WT b127):
  write-side conjunctive {end_user,agent_self} scoping + read-side cross-
  character isolation both proven end-to-end; betty (throwaway) deleted,
  Sindra intact. Full record in persistent-memory.d/2026-07-18-368-silo-
  test-passed.md. Retired the stale "silo test in progress" in-flight blocks.
- Two-tier migration: split 152 over-threshold dated entries into
  persistent-memory.d/ detail files, leaving one-line pointers in the index
  (startup load ~196KB -> ~53KB; bodies now load on demand).
- Tier-3 stores scrubbed clean (memory 0 / affect 0, provider restarted
  empty); persistent-memory + detail file updated to reflect the scrub.
2026-07-17 21:39:18 -07:00

1.4 KiB

[2026-06-30] (b1) SSE-resume SHIPPED (v0.18.5) — stream_turn_resilient (sse_client.py). The shared resume-orchestration surface (design-brief §8b): wraps stream_turn+reconnect_turn, catches SseConnectionDropped (mid-stream drop OR clean-EOF-before-terminal) → resumes from last-seen sse_id via reconnect_turn (Last-Event-ID), up to max_reconnects (default 5); non-drop reconnect failures (412/410/400/TurnIdFlip/SseConnectFailed) PROPAGATE per contract #1's "surface, not recover". last_seen persists ACROSS attempts (a zero-event reconnect drop falls back to the prior attempt's id). Direct in-session TDD against a contract-#1 amendment (8 cases incl. two-drops, max-reconnects-exhausted, zero-budget, buffer-expired-propagates, unresumable-zero-event). Wired ALL THREE presenters through it (v0.18.6): cli --send (cli.py:396), TUI (tui.py:1321), web (web/server.py:294) — each a name-for-name stream_turnstream_turn_resilient swap (the §8b "all presenters share the consumer" promise, fully kept; the TUI is the primary resume beneficiary — long-lived sessions / laptop-suspend). Suite 518 green; ruff+mypy clean on touched code (pre-existing cli.py:400/543 mypy warts left untouched per surgical rule); contract #1 validates OK. heid-code-review NOT run (small additive well-TDD'd wrapper; offered to operator). b2 (session-picker + --session/--new flags) still pending.