- #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.
1.4 KiB
[2026-06-30] (b) Tier-1 frontier SCOPED, ready for a contract-first TDD cycle (next focused work). The primitives already exist + are contracted + tested; the gap is PRESENTER-level wiring. Two slices: (b1) SSE-resume — contract #1 (ratatoskr.sse_client) DELIBERATELY makes resume caller-owned ("on SseConnectionDropped, the caller MAY invoke reconnect_turn"); reconnect_turn (sse_client.py:524) has NO caller. Gap = a SHARED resume-orchestration wrapper (catch SseConnectionDropped → track last-seen sse_id → reconnect_turn → continue), consumed by all 3 presenters per design-brief §8b "share the consumer, branch the presenter" (NOT per-presenter — that forks the consumer). New function block → amend contract #1 (additive FN, e.g. stream_turn_resilient) then TDD (RED: drop-mid-stream→resume continuity; GREEN: wrapper; wire cli --send first as the tracer). Resume design pre-locked: in-process Last-Event-ID only, cross-process deferred to v2 (design-brief §8d). (b2) session-picker — list_sessions (sessions.py:198) has NO caller; add a Textual DataTable startup picker (>1 session) + --session <id>/--new CLI flags (design-brief §4, decisions pre-locked). Both pre-locked → heid-contract-review likely skippable as ceremony (small additive amendments to mature specs); heid-code-review still valuable. #11 AdminEvents stays BLOCKED on admin.events.read scope (infra-ops).