- #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.
2.0 KiB
[2026-07-06] Web UI now RENDERS the seeded first-message (v0.19.9) — operator-reported "i don't see Sindra's greeting on the web ui". Diagnosis: the auto-seed WORKED (greeting was in the ledger at seq-0), but the web SPA never fetched a session's EXISTING history — NO /api/sessions/{id}/messages route (GET /messages was originally deferred out-of-scope; sessions used to start empty so it never mattered) and startSession() went straight from create → persona/tools/admin hydration, so the transcript only filled from the live turn stream + user echoes. Fix: (1) NEW web proxy route GET /api/sessions/{id}/messages → get_session_messages (mirrors the tools/bifrost proxies; status-preserving session_messages_unavailable envelope); (2) SPA loadTranscript(sessionId) — fetches the route on open, renders assistant items as .response .md-body (markdownSafe, same escape-first path as appendResponse) + user items as .prompt-echo (textContent), called in startSession after the workspace opens; best-effort (swallows failures). Contract web_debug_surface.contract.md amended (server endpoint + loadTranscript entries). TDD (2 web route tests, suite 617 green) + Playwright DOM check PROVED the render (drove the real UI: pick sindra → open → her greeting bubble appears — the JS-render lens unit tests can't reach; feedback_debug_surface_uses_canonical_surface_only cousin lesson). Web restarted on the fix. FOOT-GUN (self-inflicted): pkill -f "ratatoskr-web --host" SELF-MATCHES the bash command running it → exit 144, killed its own restart mid-flight — kill the web by PID, never pkill -f on a pattern your own command contains. FOOT-GUN: uvicorn hangs on SIGTERM with an open admin-events SSE → needed SIGKILL. Playwright: python module absent from the venv; use node + executablePath=/opt/ms-playwright/chromium-1223/chrome-linux64/chrome — the shared browser is build 1223, npm-latest playwright wants 1228 (version-mismatch), so pin executablePath instead of letting playwright resolve.