13efdf43a5
Move the consolidated #368 in-flight narrative (diagnosis -> two-channel investigation -> both scrubs -> marker repro -> enforcement read) out of persistent-memory.md Current state into the silo-test detail file, leaving a compact pointer. Index 439 -> 339 lines.
340 lines
42 KiB
Markdown
340 lines
42 KiB
Markdown
# Persistent memory — ratatoskr
|
||
|
||
_Last updated: 2026-07-18_
|
||
|
||
> **Always check for `/tmp/ratatoskr-dev-handoff.md`** — if it exists and its
|
||
> `Written:` stamp is under an hour old, read it (it carries the in-flight
|
||
> handoff from the previous session), then delete it. Older than an hour:
|
||
> stale — delete it unread.
|
||
|
||
This file captures durable intent and supporting evidence (goals, decisions,
|
||
foot-gun warnings, in-flight state) across context resets. Read it at session
|
||
start; treat it as one input alongside `CLAUDE.md` and the auto-memory system,
|
||
not as the single source of truth.
|
||
|
||
When durable state shifts enough to warrant capture, run `/snapshot` and
|
||
commit alongside the next commit per the persistent-memory commit-along rule
|
||
in `CLAUDE.md`.
|
||
|
||
---
|
||
|
||
## Repo purpose
|
||
|
||
Ratatoskr is a **dev-grade debug-observability TUI** for Worldtree's
|
||
Conversation API. The product IS the observability surface; chat is the
|
||
input mechanism. Devs run Ratatoskr against a local Worldtree to watch a
|
||
turn flow through every layer of the system, side-by-side, in one terminal:
|
||
agent SSE stream, persona/Vili affect dispatch, tool calls, Bifrost
|
||
handshake state, admin lifecycle events, optional raw server log.
|
||
|
||
Named after the squirrel that runs up and down Yggdrasil carrying messages
|
||
between layers. On-the-nose Worldtree resonance (Yggdrasil = the World Tree).
|
||
|
||
**Second identity (since 2026-06-14): the v1 Bifrost Tier-3 consumer/provider** —
|
||
the durable persistence Worldtree writes Tier-3 agent affect (PAD/persona, `:8390`)
|
||
+ memory (`:8391`) into. Lives in `src/ratatoskr/provider/`, depends on `bifrost`
|
||
(`provider` optional-extra), separate from the conversation-API spec pin. So
|
||
ratatoskr now owns BOTH ends of the Bifrost round-trip — the lens #17 exploits.
|
||
|
||
**v0.15.0+ sibling browser surface** (`ratatoskr.web`, `ratatoskr-web` console
|
||
script): same five-pane debug surface over the same SSE wire, LAN-viewable.
|
||
Internal-LAN trust model — `0.0.0.0`, no auth/TLS/CORS (operator direction).
|
||
Disciplined regardless: transcript HTML-escapes assistant content (INV-004);
|
||
upstream API key stays server-side (INV-003).
|
||
|
||
## Current state / in-flight
|
||
|
||
_As of 2026-07-18:_
|
||
|
||
**✅ #368 (user, character) MEMORY SILO TEST — DONE, PASSED LIVE (2026-07-18, WT b127).** The reason for the clear;
|
||
now closed. Silo holds end-to-end: write-side promoted chunks carry conjunctive `{end_user, agent_self}` (proven on
|
||
3 live Sindra promotions under end_user `silo-368`); read-side isolation proven by cold-recall (fresh Betty session,
|
||
SAME end_user, got ZERO hits → "I don't know", did NOT bleed Sindra's coffee; Sindra recalled her own coffee).
|
||
Migration sentinel `worldtree:migration:agent-scope-v1` written on first bind (backfill a no-op on the born-empty
|
||
store). Zero consumer changes, as contracted. Throwaway `ratatoskr:betty` DELETED (WT + local); Sindra intact. Full
|
||
record → `persistent-memory.d/2026-07-18-368-silo-test-passed.md`. **Still QUEUED:** the backfill live-verify
|
||
(synthetic legacy corpus — exercises the backfill machinery a born-fresh store skips).
|
||
|
||
**▶️ NEXT MAJOR: FORK ratatoskr for arbo image-gen (operator call 2026-07-17).** The arbo debug-observability
|
||
idea did NOT become a feature bolted onto ratatoskr. Operator decision: **ratatoskr stays the Worldtree
|
||
debug surface; the arbo image-gen product becomes a FORK of ratatoskr** (clean chat-first surface, debug
|
||
panes hidden by default). The fork is the next major workstream; "get ready to assist with fork" is the
|
||
standing directive.
|
||
|
||
**✅ Pre-fork UI prep SHIPPED (v0.20.17, committed c678853, NOT pushed).** Web console: left+right debug
|
||
panes (`#rail-left`, `#affect-console`) are now independently collapsible/hideable — chevron button folds
|
||
each to a 22px re-open strip, `#center` reflows to fill, state persists per-pane in localStorage. Both
|
||
collapsed = the clean chat surface the fork starts from. Playwright-verified. Web server bounced (now pid
|
||
3194361 on :8765, serving the updated HTML). TUI untouched by this change (web-only).
|
||
|
||
**⚠️ TUI DEPRECATED (operator call 2026-07-17) — rip pending, NOT a clean delete.** The textual TUI is
|
||
superseded by the web interface; per no-backwards-compat it gets ripped. BLAST RADIUS (mapped, not yet
|
||
executed): `tui.py` (textual app) + `tests/test_tui.py` delete cleanly. BUT `cli.py` is **SHARED, not
|
||
TUI-only** — `web/entrypoint.py` and `tier3.py` both import `USER_AGENT` from it, and `cli.py` holds
|
||
`ParsedArgs`/`_format_duration_ms`/`_format_usage` (used by tui) plus its own headless `CliPresenterState`.
|
||
So the rip is a surgical disentangle, not `rm tui.py`. OPEN SCOPE Q for operator: remove textual-only
|
||
(`tui.py`, keep `cli.py`'s headless CLI + `ratatoskr` entry) vs remove the whole terminal interface
|
||
(relocate shared consts out of `cli.py` first). Breaking public-surface removal → **minor bump (needs
|
||
operator approval)**. `textual`/`textual-dev` deps removable only after confirming tui.py is the sole user.
|
||
|
||
**arbo API intel (from comfy-dev 2026-07-17, banked for fork planning):** validated-workflow-library REST
|
||
API, NOT raw txt2img. `GET /workflows` (~200 recipes: t2i/img2img/inpaint/video/…) → `POST /workflows/{id}/run`
|
||
→ 202 JobHandle → **poll** `GET /jobs/{id}` (NO SSE/websocket — coarser than WT's live stream) → `GET
|
||
outputs[].url` for the image. Thin RunRequest (prompt raw|compiled + optional seed/dims/image). Bearer
|
||
auth via infra-ops `ENGINE_TOKEN`. Deploy: `irv-ml1:8201`, WireGuard-only. Canonical doc (pinnable):
|
||
`vh/arbo:docs/rest-api.md` v1.4.27 + auto-served `/openapi.json`. comfy-dev offered a concrete t2i
|
||
walkthrough + will coordinate the token when we smoke.
|
||
|
||
**#368 cross-agent Tier-3 bleed — ARC DONE from ratatoskr's side** (diagnosis → two-channel investigation →
|
||
both scrubs → marker repro → enforcement read → silo test). Full forensic history moved to
|
||
`persistent-memory.d/2026-07-18-368-silo-test-passed.md`. Net: WT b127 silos Tier-3 memory per (user,character)
|
||
via conjunctive `{end_user, agent_self}` write+read; silo test PASSED live (see the ✅ summary above); our stores
|
||
scrubbed clean afterward. tier3 CLI define/patch adapted to the b127 `role` schema (`860e0d5`). Sibling issues
|
||
WT-owned: **#369** (recited-content re-promotion feedback loop), **#367** (copula-absence bridge phrasing).
|
||
|
||
**✅ Cross-session name-recall arc COMPLETE + SHIPPED (v0.20.11→v0.20.15, pushed).** person-prime `scan`
|
||
verb + `mark_superseded` verb both shipped, deployed to :8392, and live-verified; **WT #364 closed
|
||
end-to-end both sides; Sindra durably recalls Vuong's name** (the "name unknown" negatives are RETIRED
|
||
via mark_superseded, not just recency-evicted). Full arcs:
|
||
`persistent-memory.d/2026-07-16-person-prime-scan-shipped.md` + `…-2026-07-16-wt364-r39-name-recall.md`.
|
||
|
||
**✅ Web-console UI shipped (v0.20.16, pushed):** code-block word-wrap + per-code-block & per-turn copy
|
||
buttons (hover-revealed; one delegated `#tw` handler + LAN-http clipboard fallback; Playwright-verified).
|
||
Served from disk → browser refresh picks it up, no :8765 restart for UI edits.
|
||
|
||
**OBSOLETE — Sindra pristine baseline WIPED 2026-07-18.** The whole Tier-3 memory.db was scrubbed to 0
|
||
chunks (operator full-scrub ruling for #368 — contamination noise, nothing worth keeping; no backup taken
|
||
per direct order). The old `sindra-baseline/*.db` checkpoints predate the scrub and no longer reflect a
|
||
"clean 5-fact" target — the store is now born-empty. Any future test drive starts from the born-fresh store.
|
||
|
||
**Deferred/queued tasks (all NON-URGENT — tracked in Recent decisions):** (1) P06-driver **referential-
|
||
frame A/B/C probe** (operator-ratified; waits on WT b122; read-shape + brokkr's scoring rubric captured →
|
||
`persistent-memory.d/2026-07-17-referential-frame-probe.md`); (2) R39 Phase-2 **matched-quartets rebuild**
|
||
(confirmatory, "whenever"); (3) bifrost **snapshot-cursor adoption** (ruled normative, not blocking →
|
||
`persistent-memory.d/2026-07-16-bifrost-cursor-conformance.md`).
|
||
|
||
**Substrate / environment:** branch `main` at **v0.21.1** — local commits ahead of origin's v0.20.16 (`5a1883a`): tier3 b127-role adaptation (`860e0d5`) + memory snapshots, UNPUSHED; origin
|
||
`git@gitea.phasefinal.com:vh/ratatoskr.git`. bifrost **`==1.1.4`** / wire v0.7 (maintenance-verb hasattr
|
||
backstop + scan/cursor conformance harness); Worldtree openapi vendored 2.3.0; **suite 644 green**.
|
||
Personal WT on **b127** (#368 (user,character) silo live + deployed both instances; #364 promotion-hygiene also live). The combined **:8392** provider (memory+affect) +
|
||
**:8765** web are THE surfaces, dev-box BACKGROUND SHELLS — restart via
|
||
`scratchpad/relaunch_by_pid.py <pid>` (env-preserving, self-daemonizing; pid via `ss -ltnp | grep <port>`);
|
||
web serves static `index.html` from disk. `env.sh` sets the REQUIRED `RATATOSKR_MEMORY_EMBEDDING_DIM=1024`.
|
||
Keys env-only mode-600 in `~/.config/ratatoskr/provider.env` + `RATATOSKR_ADMIN_API_KEY` (7 read scopes,
|
||
personal-:8081-only; Heimdall keys per-instance). **FOOT-GUN: check owner-scoped agents via
|
||
`GET /agents/<owner>:<name>` with the OWNER key (`WORLDTREE_API_KEY`), NOT the admin key** — the admin
|
||
token gives a false 404. `graphify-out/` runs dirty (auto-regen, never stage). v1 = full Worldtree I/O
|
||
coverage, cuts when WT tags 1.0 (`docs/coverage-map.md`).
|
||
|
||
**Other live threads:** soong-lab = Tier-3 agent-authoring studio (v0.3.24 fixed the motivational
|
||
string→object export; our workaround droppable for v0.3.24+ bundles). Open/deferred: #10 subject-
|
||
migration watch; relational-dynamics-arc verify (bind via `--bifrost-url :8392`); P06 optimization-phase
|
||
re-drive (brokkr brings prereg); we-framing-conditional affect-egress re-vendor. WT #356 resume-durability
|
||
+ WT #367 (copula-absence bridge phrasing) = worldtree-owned.
|
||
|
||
## Recent decisions
|
||
|
||
Chronological log of decisions with `[YYYY-MM-DD]` prefix. One line per
|
||
decision. Captures rationale that won't be obvious from code alone.
|
||
|
||
- `[2026-06-15]` **Affect plane shipped (v0.17.2) + LIVE-PROVEN end-to-end against real Worldtree v0.35.2** → `persistent-memory.d/2026-06-15-affect-plane-shipped-v0-17-2-live-proven-end.md`
|
||
- `[2026-06-16]` **#295 cold-recall miss root-caused — UPSTREAM, scope-axis asymmetry** → `persistent-memory.d/2026-06-16-295-cold-recall-miss-root-caused-upstream-sco.md`
|
||
- `[2026-06-16]` **agent_self → make it CANONICAL (operator decided A)** → `persistent-memory.d/2026-06-16-agentself-make-it-canonical-operator-decided.md`
|
||
- `[2026-06-16]` **Self-drive auth identity: bound session-create uses the CONSUMER Heimdall key as bearer, NOT `WORLDTREE_API_KEY`** → `persistent-memory.d/2026-06-16-self-drive-auth-identity-bound-session-create.md`
|
||
- `[2026-06-16]` **Issue #17 v1 scope locked (operator 1A/2A): single-plane bind + dispatch-layer op-feed** → `persistent-memory.d/2026-06-16-issue-17-v1-scope-locked-operator-1a-2a-singl.md`
|
||
- `[2026-06-16]` **agent_self lattice SHIPPED both sides → our axis-validation gap CLOSED (v0.17.5)** → `persistent-memory.d/2026-06-16-agentself-lattice-shipped-both-sides-our-axis.md`
|
||
- `[2026-06-16]` **Repinned bifrost 0.7.0→0.8.0 + reimplemented memory `search` to the v0.6 scope split (operator-directed)** → `persistent-memory.d/2026-06-16-repinned-bifrost-0-7-0-0-8-0-reimplemented-me.md`
|
||
- `[2026-06-17]` **Worldtree spec pin bumped v0.29.0→v0.35.16 (`562001a`→`f1b59f8`); cold recall closed on the WIRE** → `persistent-memory.d/2026-06-17-worldtree-spec-pin-bumped-v0-29-0-v0-35-16-56.md`
|
||
- `[2026-06-17]` **End-to-end cold-recall proof RAN — our stack proven, #296 isolated** → `persistent-memory.d/2026-06-17-end-to-end-cold-recall-proof-ran-our-stack-pr.md`
|
||
- `[2026-06-17]` **DELETE+redefine `ratatoskr:sindra` (operator-authorized; pre-v1 debug surface)** → `persistent-memory.d/2026-06-17-delete-redefine-ratatoskr-sindra-operator-aut.md`
|
||
- `[2026-06-17]` **Promotion = 4-trigger hybrid (worldtree-dev, code-grounded):** → `persistent-memory.d/2026-06-17-promotion-4-trigger-hybrid-worldtree-dev-code.md`
|
||
- `[2026-06-17]` **#296 triage sent to worldtree-dev** (`01KVBBH0…`): extraction SUBJECT-INVERSION (promotes assistant prose, drops the user's fact) + META-DESCRIPTION-not-content; verbose-persona aggravator. WAD-vs-bug resolved to BUG (extraction quality), not idle-gating.
|
||
- `[2026-06-18]` **Tier-3 memory PROVEN end-to-end live** — `ratatoskr:terse-probe` recalled a seeded user fact in a COLD history-free session (scope_any → 1 hit @ cosine 0.6994). Closes the opening "how far from Tier-3 memory" question for normal agents.
|
||
- `[2026-06-18]` **#296 Stages 1+2 closed** → `persistent-memory.d/2026-06-18-296-stages-1-2-closed.md`
|
||
- `[2026-06-18]` **#17 implemented end-to-end via direct in-session TDD** → `persistent-memory.d/2026-06-18-17-implemented-end-to-end-via-direct-in-sessi.md`
|
||
- `[2026-06-18]` **#17 live-smoke PROVEN — the whole thesis validated** → `persistent-memory.d/2026-06-18-17-live-smoke-proven-the-whole-thesis-validat.md`
|
||
- `[2026-06-18]` **Fixed a pre-existing test-isolation bug exposed by the #17 CLI tests** → `persistent-memory.d/2026-06-18-fixed-a-pre-existing-test-isolation-bug-expos.md`
|
||
- `[2026-06-18]` **#18 filed (composite endpoint + PAD read-endpoint) — DEFERRED, tracked at Gitea #18** → `persistent-memory.d/2026-06-18-18-filed-composite-endpoint-pad-read-endpoint.md`
|
||
- `[2026-06-18]` **#18 SPLIT; Deliverable 1 (composite) routed to bifrost — Option C (operator)** → `persistent-memory.d/2026-06-18-18-split-deliverable-1-composite-routed-to-bi.md`
|
||
- `[2026-06-18]` **FR-1 RESOLVED — the composite premise was unverified, now wire-proven: single-endpoint, caps-routed** → `persistent-memory.d/2026-06-18-fr-1-resolved-the-composite-premise-was-unver.md`
|
||
- `[2026-06-18]` **#18 D2 implemented via direct in-session TDD (suite 470→482)** → `persistent-memory.d/2026-06-18-18-d2-implemented-via-direct-in-session-tdd-s.md`
|
||
- `[2026-06-19]` **#18 D2 SHIPPED (`v0.17.14`, `39eebd1`) and the full #17+#18 arc PUSHED to origin** → `persistent-memory.d/2026-06-19-18-d2-shipped-v0-17-14-39eebd1-and-the-full-1.md`
|
||
|
||
- `[2026-06-19]` **bifrost repinned 0.8.0→0.10.0; `affect.fetch` became MANDATORY (strong-or-absent)** → `persistent-memory.d/2026-06-19-bifrost-repinned-0-8-0-0-10-0-affect-fetch-be.md`
|
||
- `[2026-06-19]` **#18 D1 SHIPPED — composite `build_combined_app` on `:8392` (`v0.17.16`, `7f4ceaa`); #18 CLOSED; published `v0.18.0` (`359dbb1`)** → `persistent-memory.d/2026-06-19-18-d1-shipped-composite-buildcombinedapp-on-8.md`
|
||
- `[2026-06-19]` **op-feed handshake field-name fix (#17, `v0.17.17` `d60b77d`): `capabilities_requested`→`capabilities`** → `persistent-memory.d/2026-06-19-op-feed-handshake-field-name-fix-17-v0-17-17.md`
|
||
- `[2026-06-19]` **Ratatoskr is a REFERENCE implementation of the Worldtree/Bifrost standard (operator)** → `persistent-memory.d/2026-06-19-ratatoskr-is-a-reference-implementation-of-th.md`
|
||
- `[2026-06-19]` **Ratatoskr v1 is DERIVED from Worldtree I/O coverage (operator) — no self-defined feature ROADMAP** → `persistent-memory.d/2026-06-19-ratatoskr-v1-is-derived-from-worldtree-i-o-co.md`
|
||
- `[2026-06-20]` **#18's final leg PROVEN — composite `:8392` WT-driven smoke ran end-to-end + persisted** → `persistent-memory.d/2026-06-20-18-s-final-leg-proven-composite-8392-wt-drive.md`
|
||
- `[2026-06-20]` **#17 CLOSED in the tracker.** Shipped end-to-end (`v0.17.8`–`.13` + op-feed field fix `v0.17.17`); the 2026-06-20 composite smoke re-exercised its op-feed live. Closing comment captures the full both-plane proof. Open issues now just #11 (scope-blocked) + #10 (watch).
|
||
- `[2026-06-20]` **Sindra has real PAD but ~empty memory — the affect/memory persistence asymmetry, confirmed on real sessions** → `persistent-memory.d/2026-06-20-sindra-has-real-pad-but-empty-memory-the-affe.md`
|
||
- `[2026-06-29]` **Web SPA combined-bind default (`v0.18.1`, `719e4d6`) — operator-caught gap** → `persistent-memory.d/2026-06-29-web-spa-combined-bind-default-v0-18-1-719e4d6.md`
|
||
- `[2026-06-29]` **bifrost repinned 1.0.0 (`v0.18.2`, `af67ad9`)** → `persistent-memory.d/2026-06-29-bifrost-repinned-1-0-0-v0-18-2-af67ad9.md`
|
||
- `[2026-06-30]` **Worldtree v1.0.0b1→b2 consumer adaptation: eager turn-launch statuses (`v0.18.3` `b2e4901`, `v0.18.4` `e4317f6`)** → `persistent-memory.d/2026-06-30-worldtree-v1-0-0b1-b2-consumer-adaptation-eag.md`
|
||
- `[2026-06-30]` **Verify-against-the-real-spec-before-committing caught a real upstream gap** → `persistent-memory.d/2026-06-30-verify-against-the-real-spec-before-committin.md`
|
||
- `[2026-06-30]` **regard is a DEAD AXIS in Worldtree's emitted affect (caught provider-side; worldtree-dev confirmed + escalated to Vuong)** → `persistent-memory.d/2026-06-30-regard-is-a-dead-axis-in-worldtree-s-emitted.md`
|
||
- `[2026-06-30]` **v1 coverage-audit kicked off; coverage ledger written (`docs/coverage-map.md`) — the first one** → `persistent-memory.d/2026-06-30-v1-coverage-audit-kicked-off-coverage-ledger.md`
|
||
- `[2026-06-30]` **Scope mandate A locked (operator): v1 "done" = every frozen I/O point CLASSIFIED (covered-or-excluded-with-rationale), zero unaccounted — NOT a feature-complete client** → `persistent-memory.d/2026-06-30-scope-mandate-a-locked-operator-v1-done-every.md`
|
||
- `[2026-06-30]` **Finding P-1 (pin drift) + pin-remediation PENDING** → `persistent-memory.d/2026-06-30-finding-p-1-pin-drift-pin-remediation-pending.md`
|
||
|
||
- `[2026-06-30]` **(b) Tier-1 frontier SCOPED, ready for a contract-first TDD cycle (next focused work)** → `persistent-memory.d/2026-06-30-b-tier-1-frontier-scoped-ready-for-a-contract.md`
|
||
- `[2026-06-30]` **(b1) SSE-resume SHIPPED (`v0.18.5`) — `stream_turn_resilient` (sse_client.py)** → `persistent-memory.d/2026-06-30-b1-sse-resume-shipped-v0-18-5-streamturnresil.md`
|
||
|
||
- `[2026-06-30]` **(b2) session-picker SHIPPED (`v0.18.7`) — bare TUI mode → startup picker (design-brief §4)** → `persistent-memory.d/2026-06-30-b2-session-picker-shipped-v0-18-7-bare-tui-mo.md`
|
||
|
||
- `[2026-06-30]` **capabilities+me slice SHIPPED (`v0.18.8`) — `GET /me` + `GET /capabilities` consumed via a new `--whoami` one-shot** → `persistent-memory.d/2026-06-30-capabilities-me-slice-shipped-v0-18-8-get-me.md`
|
||
- `[2026-07-01]` **b1 (SSE-resume) heid-code-review panel: ZERO findings — cross-model-verified clean** → `persistent-memory.d/2026-07-01-b1-sse-resume-heid-code-review-panel-zero-fin.md`
|
||
|
||
- `[2026-07-01]` **`GET /sessions/{id}/tools` quick-win SHIPPED (`v0.18.9`) — owner-scoped tool inventory in the TUI Tools pane** → `persistent-memory.d/2026-07-01-get-sessions-id-tools-quick-win-shipped-v0-18.md`
|
||
|
||
- `[2026-07-01]` **BifrostState pane SHIPPED (`v0.18.10`) — `GET /admin/sessions/{id}/bifrost` in a new TUI "Bifrost" pane; the FIRST admin-key consumer in ratatoskr** → `persistent-memory.d/2026-07-01-bifroststate-pane-shipped-v0-18-10-get-admin.md`
|
||
- `[2026-07-01]` **LEDGER CORRECTION: #11 (AdminEvents) is NO LONGER BLOCKED** → `persistent-memory.d/2026-07-01-ledger-correction-11-adminevents-is-no-longer.md`
|
||
|
||
- `[2026-07-01]` **AdminEvents pane SHIPPED (`v0.18.11`) — `GET /admin/events` SSE in a new TUI pane; #11 closed-by-build; Tier 1 (debug-observability core) COMPLETE** → `persistent-memory.d/2026-07-01-adminevents-pane-shipped-v0-18-11-get-admin-e.md`
|
||
|
||
- `[2026-07-01]` **Tier-2 SHIPPED (`v0.19.1`) — transient-characters CRUD + persona-state write; the v1 coverage-audit CONVERGES (zero in-scope gaps)** → `persistent-memory.d/2026-07-01-tier-2-shipped-v0-19-1-transient-characters-c.md`
|
||
|
||
- `[2026-07-01]` **env.sh now PERSISTS the web Bifrost-bind vars (gitignored, local-only)** → `persistent-memory.d/2026-07-01-env-sh-now-persists-the-web-bifrost-bind-vars.md`
|
||
- `[2026-07-01]` **Tier-3 stores RESET (operator-directed)** → `persistent-memory.d/2026-07-01-tier-3-stores-reset-operator-directed.md`
|
||
- `[2026-07-01]` **Embedding-latency loop RESOLVED — it was WORLDTREE's, not ratatoskr (the consumer/provider thesis paid off again)** → `persistent-memory.d/2026-07-01-embedding-latency-loop-resolved-it-was-worldt.md`
|
||
- `[2026-07-01]` **Web debug-surface parity SHIPPED (`v0.19.2`, `a0a9d5f`) — direct in-session TDD** → `persistent-memory.d/2026-07-01-web-debug-surface-parity-shipped-v0-19-2-a0a9.md`
|
||
- `[2026-07-01]` **heid-code-review (`v0.19.3`, `75dec01`) — panel caught 2 real client-side SSE-lifecycle bugs TDD missed** → `persistent-memory.d/2026-07-01-heid-code-review-v0-19-3-75dec01-panel-caught.md`
|
||
|
||
- `[2026-07-01]` **Affect snapshot shape CHANGED valence→relations (relation_edge/1) — the persona pane was reading a dead field** → `persistent-memory.d/2026-07-01-affect-snapshot-shape-changed-valence-relatio.md`
|
||
- `[2026-07-01]` **Trust/warmth VALUES converge and go FLAT at confidence 1.0 — that's WAD, not a stuck pane** → `persistent-memory.d/2026-07-01-trust-warmth-values-converge-and-go-flat-at-c.md`
|
||
- `[2026-07-01]` **relation_context "stranger" + agency-all-zero flagged to worldtree-dev → both WAD/intentional-v1-deferrals** → `persistent-memory.d/2026-07-01-relationcontext-stranger-agency-all-zero-flag.md`
|
||
- `[2026-07-01]` **Persona pane displays the CANONICAL affect→NL Worldtree injects — ADOPT, don't invent (operator steer + reference-impl posture)** → `persistent-memory.d/2026-07-01-persona-pane-displays-the-canonical-affect-nl.md`
|
||
|
||
- `[2026-07-01]` **Sindra PAD is over-regulated — characterized via controlled probe, flagged to worldtree-dev (separate affect slice)** → `persistent-memory.d/2026-07-01-sindra-pad-is-over-regulated-characterized-vi.md`
|
||
- `[2026-07-01]` **Memory plane PROVEN healthy end-to-end** → `persistent-memory.d/2026-07-01-memory-plane-proven-healthy-end-to-end.md`
|
||
- `[2026-07-01]` **Salience scorer non-discriminating → 3-way routing** → `persistent-memory.d/2026-07-01-salience-scorer-non-discriminating-3-way-rout.md`
|
||
- `[2026-07-01]` **Canonical check BLOCKED an access_tally fork (reference-impl posture held)** → `persistent-memory.d/2026-07-01-canonical-check-blocked-an-accesstally-fork-r.md`
|
||
- `[2026-07-01]` **relation_context coherence FIXED upstream (my flag → Worldtree Wave-0, IMPLEMENTED v1.0.0b5)** → `persistent-memory.d/2026-07-01-relationcontext-coherence-fixed-upstream-my-f.md`
|
||
- `[2026-07-01]` **Foot-gun (measurement, self-caught before flagging): establish the baseline before claiming a rate** → `persistent-memory.d/2026-07-01-foot-gun-measurement-self-caught-before-flagg.md`
|
||
|
||
- `[2026-07-02]` **Salience finding matured into brokkr R28 (OPEN) — ratatoskr is the eval instrument** → `persistent-memory.d/2026-07-02-salience-finding-matured-into-brokkr-r28-open.md`
|
||
- `[2026-07-02]` **Relational-dynamics arc LIVE on demo (Worldtree v1.0.0b9) — driven by MY relation_context flag** → `persistent-memory.d/2026-07-02-relational-dynamics-arc-live-on-demo-worldtre.md`
|
||
- `[2026-07-02]` **R28 (salience→promotion-worthiness) CLOSED (operator-directed)** → `persistent-memory.d/2026-07-02-r28-salience-promotion-worthiness-closed-oper.md`
|
||
- `[2026-07-02]` **R29 (PAD mood-dynamics) finding SHIPPED as Worldtree's A1 anchor fix (demo v1.0.0b14, `e1cdf82`)** → `persistent-memory.d/2026-07-02-r29-pad-mood-dynamics-finding-shipped-as-worl.md`
|
||
- `[2026-07-03]` **R30 Phase-1 φ0 measured — deployed engine CONFIG-FAITHFUL (φ0≈0.95)** → `persistent-memory.d/2026-07-03-r30-phase-1-0-measured-deployed-engine-config.md`
|
||
- `[2026-07-03]` **R30 forward disposition (brokkr-owned; tracked at brokkr R30, "brokkr/worldtree will ping")** → `persistent-memory.d/2026-07-03-r30-forward-disposition-brokkr-owned-tracked.md`
|
||
- `[2026-07-03]` **Relational-arc verify DEFERRED — `relations[]` is Bifrost-provider-only (ADR-0009), confirmed both ways** → `persistent-memory.d/2026-07-03-relational-arc-verify-deferred-relations-is-b.md`
|
||
|
||
- `[2026-07-04]` **R30 CLOSED on offline-tests + human face-validity (operator steer, relayed via worldtree-dev)** → `persistent-memory.d/2026-07-04-r30-closed-on-offline-tests-human-face-validi.md`
|
||
- `[2026-07-05]` **Authored-history-write primitive proposed -> accepted as Worldtree #347 (Worldtree owns the engine design; ratatoskr = reference consumer)** → `persistent-memory.d/2026-07-05-authored-history-write-primitive-proposed-acc.md`
|
||
- `[2026-07-05]` **#347 v1 wire validated as reference consumer (GREEN)** → `persistent-memory.d/2026-07-05-347-v1-wire-validated-as-reference-consumer-g.md`
|
||
- `[2026-07-06]` **Sindra role character-rp -> character (operator)** → `persistent-memory.d/2026-07-06-sindra-role-character-rp-character-operator.md`
|
||
- `[2026-07-06]` **Sindra persona/OCEAN DECLARED -> mood fixed (the full diagnostic converged on a stale personal container)** → `persistent-memory.d/2026-07-06-sindra-persona-ocean-declared-mood-fixed-the.md`
|
||
|
||
- `[2026-07-06]` **OpenAPI re-vendored 2.2.0->2.3.0 (`75da676`, pin-only no bump)** → `persistent-memory.d/2026-07-06-openapi-re-vendored-2-2-0-2-3-0-75da676-pin-o.md`
|
||
- `[2026-07-06]` **#347 authored-history-write CONSUMER SIDE SHIPPED (`v0.19.6`) — direct in-session TDD** → `persistent-memory.d/2026-07-06-347-authored-history-write-consumer-side-ship.md`
|
||
|
||
- `[2026-07-06]` **Tail-2 SHIPPED (`v0.19.7`) — Tier-3 prose docs re-vendored + persona_state body-shape aligned** → `persistent-memory.d/2026-07-06-tail-2-shipped-v0-19-7-tier-3-prose-docs-re-v.md`
|
||
|
||
- `[2026-07-06]` **Sindra rewritten onto a #347 authored first-message + first-message-preset AUTO-SEED SHIPPED (`v0.19.8`)** → `persistent-memory.d/2026-07-06-sindra-rewritten-onto-a-347-authored-first-me.md`
|
||
|
||
- `[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"** → `persistent-memory.d/2026-07-06-web-ui-now-renders-the-seeded-first-message-v.md`
|
||
|
||
- `[2026-07-06]` **Web UI: pivot from incremental CSS polish to a designed prototype (Claude Design) that I wire into** → `persistent-memory.d/2026-07-06-web-ui-pivot-from-incremental-css-polish-to-a.md`
|
||
- `[2026-07-07]` **Affect-egress reference delivered by worldtree-dev + a we-framing render DRIFT-WATCH banked** → `persistent-memory.d/2026-07-07-affect-egress-reference-delivered-by-worldtre.md`
|
||
- `[2026-07-12]` **R34/R35 character-self-report reframe LIVE (WT b53); affect-half VALIDATED in prod, powered memory-half eval GREENLIT + designed** → `persistent-memory.d/2026-07-12-r34-r35-character-self-report-reframe-live-wt.md`
|
||
- `[2026-07-12]` **Capture-path resolved → a worldtree producer-probe (ratatoskr-caught blocker)** → `persistent-memory.d/2026-07-12-capture-path-resolved-a-worldtree-producer-pr.md`
|
||
- `[2026-07-12]` **bifrost 1.1.1 adopted (v0.20.10, pushed) — the library-level fix for the frozen-v0.6 handshake leak** → `persistent-memory.d/2026-07-12-bifrost-1-1-1-adopted-v0-20-10-pushed-the-lib.md`
|
||
- `[2026-07-10]` **Bifrost bound-handshake blocker → bifrost 1.1.0 broke frozen-v0.6; fixed by Worldtree b47/wire-v0.7, our side needed ZERO change** → `persistent-memory.d/2026-07-10-bifrost-bound-handshake-blocker-bifrost-1-1-0.md`
|
||
- `[2026-07-09]` **Sindra PATCHed to `character-rp` → Deckard reasoning-RP seat (operator-directed, INTERIM)** → `persistent-memory.d/2026-07-09-sindra-patched-to-character-rp-deckard-reason.md`
|
||
- `[2026-07-08]` **PAD display relaxed for R32-1B unbounded-z, done PROACTIVELY (`v0.20.9`, patch, operator-directed "sindra full and unbounded")** → `persistent-memory.d/2026-07-08-pad-display-relaxed-for-r32-1b-unbounded-z-do.md`
|
||
- `[2026-07-07]` **Web-UI iteration-3 SHIPPED (`v0.20.7`, patch) — all three queued items + the memory 0/0 root-caused** → `persistent-memory.d/2026-07-07-web-ui-iteration-3-shipped-v0-20-7-patch-all.md`
|
||
- `[2026-07-07]` **Web-UI next-work QUEUED for a fresh-context session (operator-directed `/snapshot` handoff) — full specs in Current state § ⏭ QUEUED** → `persistent-memory.d/2026-07-07-web-ui-next-work-queued-for-a-fresh-context-s.md`
|
||
- `[2026-07-07]` **Markdown pass-1 SHIPPED (`v0.20.6`) — RP semantic coloring + paragraph reflow (operator-directed markdown rework, step ①)** → `persistent-memory.d/2026-07-07-markdown-pass-1-shipped-v0-20-6-rp-semantic-c.md`
|
||
- `[2026-07-07]` **Affect-derived tooltips (`v0.20.5`) + transparent squirrel vendored + v0.20.0–.5 PUSHED to origin (operator-authorized)** → `persistent-memory.d/2026-07-07-affect-derived-tooltips-v0-20-5-transparent-s.md`
|
||
- `[2026-07-07]` **SVG sparklines + 3D mood cube imported from the updated Claude Design prototype (`v0.20.4`) — operator: "the svg sparklines and the new 3d graph"** → `persistent-memory.d/2026-07-07-svg-sparklines-3d-mood-cube-imported-from-the.md`
|
||
- `[2026-07-07]` **Brand mark + favicon → the aurora squirrel (`v0.20.3`), replacing the `ᛯ` rune** → `persistent-memory.d/2026-07-07-brand-mark-favicon-the-aurora-squirrel-v0-20.md`
|
||
- `[2026-07-07]` **Context-injection view SHIPPED (`v0.20.2`) — the console now reconstructs the FULL hidden affect block Worldtree injects into the agent's system prompt (operator: "use that canon in the interface, see as much context injection as possible")** → `persistent-memory.d/2026-07-07-context-injection-view-shipped-v0-20-2-the-co.md`
|
||
- `[2026-07-06]` **Claude Design console SHIPPED (`v0.20.0` MINOR, operator-approved) — see Current state for the full record** → `persistent-memory.d/2026-07-06-claude-design-console-shipped-v0-20-0-minor-o.md`
|
||
|
||
- `[2026-07-13]` **P06 memory-half DRIVEN + SCORED — the reframe's memory mechanism is validated** → `persistent-memory.d/2026-07-13-p06-memory-half-driven-scored-the-reframe-s-m.md`
|
||
- `[2026-07-13]` **Memory extraction turned REASONING-OFF for the eval (operator-directed)** → `persistent-memory.d/2026-07-13-memory-extraction-turned-reasoning-off-for-th.md`
|
||
- `[2026-07-13]` **Vendored the brokkr R34 psych-profile canon (Vuong-directed) — BOTH files, not just the parameters** → `persistent-memory.d/2026-07-13-vendored-the-brokkr-r34-psych-profile-canon-v.md`
|
||
- `[2026-07-13]` **Affect-egress "coordinated re-vendor" open item RESOLVED — it was a benign R32-1B doc note, not the we-framing conditional** → `persistent-memory.d/2026-07-13-affect-egress-coordinated-re-vendor-open-item.md`
|
||
- `[2026-07-13]` **WT #355 root-caused via ratatoskr telemetry (Vuong-routed via soong-dev)** → `persistent-memory.d/2026-07-13-wt-355-root-caused-via-ratatoskr-telemetry-vu.md`
|
||
- `[2026-07-13]` **WT #355 VALIDATION — fix CONFIRMED; the standing loop-in obligation is DISCHARGED** → `persistent-memory.d/2026-07-13-wt-355-validation-fix-confirmed-the-standing.md`
|
||
- `[2026-07-13]` **b61 adopted as the personal target — the orthogonal over-budget TRIGGER also fixed** → `persistent-memory.d/2026-07-13-b61-adopted-as-the-personal-target-the-orthog.md`
|
||
- `[2026-07-13]` **Cleaned + prepped for a Sindra run (operator: "clean up everything + prep")** → `persistent-memory.d/2026-07-13-cleaned-prepped-for-a-sindra-run-operator-cle.md`
|
||
- `[2026-07-14]` **soong-lab adopted as our Tier-3 agent-authoring studio (operator-directed)** → `persistent-memory.d/2026-07-14-soong-lab-adopted-as-our-tier-3-agent-authori.md`
|
||
- `[2026-07-15]` **Cross-session recall failure root-caused → the person-prime `scan` build** → `persistent-memory.d/2026-07-15-cross-session-recall-failure-root-caused-the.md`
|
||
- `[2026-07-15]` **Sindra redefined from the soong-lab bundle** → `persistent-memory.d/2026-07-15-sindra-redefined-from-the-soong-lab-bundle.md`
|
||
|
||
- `[2026-07-16]` **WT #364 + brokkr R39 re-drive (DECISIVE) — name-recall root-caused Worldtree-side; the fix is the signal FAMILY, not a threshold** → `persistent-memory.d/2026-07-16-wt-364-brokkr-r39-re-drive-decisive-name-reca.md`
|
||
- `[2026-07-16]` **bifrost ruled scan snapshot-cursor NORMATIVE (offset NOT blessed) + shipped conformance coverage in bifrost 1.1.3** → `persistent-memory.d/2026-07-16-bifrost-ruled-scan-snapshot-cursor-normative.md`
|
||
|
||
- `[2026-07-16]` **brokkr flagged ratatoskr as R39 Phase-2 PROBE-RUNNER (Arm-2 contradiction set = our frozen 10-chunk specimen); ACCEPTED IN PRINCIPLE (Vuong 2026-07-16) — formal scope + effort commit lands when Arm-2 actually spins** → `persistent-memory.d/2026-07-16-brokkr-flagged-ratatoskr-as-r39-phase-2-probe.md`
|
||
|
||
- `[2026-07-17]` **`mark_superseded` verb SHIPPED + live-verified (v0.20.15, `be2c577`) — WT #364 durable retirement lands on our store; #364 CLOSED end-to-end both sides** → `persistent-memory.d/2026-07-17-marksuperseded-verb-shipped-live-verified-v0.md`
|
||
- `[2026-07-17]` **Web-console UI (v0.20.16, pushed): code-block word-wrap + per-code-block & per-turn copy buttons** → `persistent-memory.d/2026-07-17-web-console-ui-v0-20-16-pushed-code-block-wor.md`
|
||
- `[2026-07-17]` **P06-driver referential-frame A/B/C probe QUEUED (operator-ratified, deploy-gated on WT b122)** → `persistent-memory.d/2026-07-17-p06-driver-referential-frame-a-b-c-probe-queu.md`
|
||
- `[2026-07-17]` **Sindra live memory.db tidied to a 5-fact PRISTINE baseline for a test drive** → `persistent-memory.d/2026-07-17-sindra-live-memory-db-tidied-to-a-5-fact-pris.md`
|
||
|
||
- `[2026-07-18]` **#368 (user, character) memory silo test — DONE, PASSED live (WT b127).** Write + read isolation both proven end-to-end; betty (throwaway) deleted; the immediate post-clear action, closed. → `persistent-memory.d/2026-07-18-368-silo-test-passed.md`
|
||
|
||
_46 older entries (2026-05-* debug-TUI/web era + the 2026-06-14→16 Bifrost-provider build era) archived to archival-memory.md._
|
||
|
||
_For per-issue TDD implementation notes, Volva findings, and contract amendments, see the git log — every per-issue commit carries a structured message capturing the trail._
|
||
|
||
## Tried and abandoned
|
||
|
||
Log of approaches that were tried and rejected, with rationale. Future-self
|
||
defense against re-attempting the same cul-de-sac.
|
||
|
||
- `[2026-07-10]` **Reverting our provider to bifrost 1.0.0 to fix the bound-handshake `schema_validation_failed` — DISPROVEN, and it would've been the WRONG state** → `persistent-memory.d/2026-07-10-reverting-our-provider-to-bifrost-1-0-0-to-fi.md`
|
||
- `[2026-06-15]` **"Sindra hasn't been registered" was an under-verified inference — WRONG** → `persistent-memory.d/2026-06-15-sindra-hasn-t-been-registered-was-an-under-ve.md`
|
||
- `[2026-06-14]` **Artifact-only contract review can't validate against a dependency's ACTUAL behavior** → `persistent-memory.d/2026-06-14-artifact-only-contract-review-can-t-validate.md`
|
||
- `[2026-06-15]` **"byte-equal" round-trip slip propagated affect→memory via copy-paste** → `persistent-memory.d/2026-06-15-byte-equal-round-trip-slip-propagated-affect.md`
|
||
- `[2026-06-15]` **Canonical sync retired the issue-scoped parser staleness.** `contract_parser.py` synced to v2.1 (commit `d85ab43`): now validates issue-scoped frontmatter + four v2.1 test categories. The old "treat parser ERROR-on-issue-scoped as expected" note no longer applies.
|
||
- `[2026-06-15]` **Memory plane TDD'd + shipped** → `persistent-memory.d/2026-06-15-memory-plane-tdd-d-shipped.md`
|
||
- `[2026-06-15]` **Memory provider LIVE-PROVEN against personal v0.35.3; recall-injection is upstream** → `persistent-memory.d/2026-06-15-memory-provider-live-proven-against-personal.md`
|
||
- `[2026-06-15]` **Diagnostic: our recall-search is SOUND — the cross-session recall gap is UPSTREAM, and it caught an upstream bug** → `persistent-memory.d/2026-06-15-diagnostic-our-recall-search-is-sound-the-cro.md`
|
||
- `[2026-06-15]` **"Wire 200 ≠ recall works" — prove recall efficacy at the model's answer in a COLD (history-free) session, not on the wire** → `persistent-memory.d/2026-06-15-wire-200-recall-works-prove-recall-efficacy-a.md`
|
||
- `[2026-06-15]` **Issue #17 filed.** REVERSES design-brief §6's "no Bifrost-binding consumer support" — that negative clause predates ratatoskr's provider identity (2026-06-14), so the canary now owns both ends but its client couldn't drive its own provider. (Shipped 2026-06-18.)
|
||
- `[2026-06-16]` **`scripts/contract_drift_check.py` defaults `GITEA_REPO` to "Worldtree"** (line 74), so a bare run in ratatoskr false-positives DRIFT by hashing Worldtree's same-numbered issue. Always `export GITEA_REPO=ratatoskr GITEA_OWNER=vh` before running the drift-checker here.
|
||
- `[2026-06-16]` **My #295 coupling hypothesis (the promoted question crowds out the fact at small top_k) was REFUTED** → `persistent-memory.d/2026-06-16-my-295-coupling-hypothesis-the-promoted-quest.md`
|
||
- `[2026-06-16]` **#17 contract drifted from its own design in two spots, caught only by `/heid-contract-review` (not same-author paraphrase):** → `persistent-memory.d/2026-06-16-17-contract-drifted-from-its-own-design-in-tw.md`
|
||
- `[2026-06-16]` **"No promotion" was checked TOO EARLY — Tier-3 promotion is ASYNC (lands AFTER the SSE turn-end)** → `persistent-memory.d/2026-06-16-no-promotion-was-checked-too-early-tier-3-pro.md`
|
||
- `[2026-06-17]` **"sindra is GONE" (infra-ops, from `GET /agents` + admin token) was a FALSE NEGATIVE** → `persistent-memory.d/2026-06-17-sindra-is-gone-infra-ops-from-get-agents-admi.md`
|
||
- `[2026-06-17]` **"Promotion didn't fire → #296" was PREMATURE — twice over** → `persistent-memory.d/2026-06-17-promotion-didn-t-fire-296-was-premature-twice.md`
|
||
- `[2026-06-18]` **Wiping our `:8391` store does NOT reset Worldtree's promotion-side dedup** → `persistent-memory.d/2026-06-18-wiping-our-8391-store-does-not-reset-worldtre.md`
|
||
- `[2026-06-18]` **`affect.emit` is POST-TURN ASYNC — checking the op-feed immediately after a turn MISSES it** → `persistent-memory.d/2026-06-18-affect-emit-is-post-turn-async-checking-the-o.md`
|
||
- `[2026-06-18]` **Rationalized away a KNOWN contract-invariant deviation during TDD — only the cross-model code-review caught it** → `persistent-memory.d/2026-06-18-rationalized-away-a-known-contract-invariant.md`
|
||
- `[2026-06-18]` **Latent SQLite thread-safety bug in the affect store, surfaced ONLY by the new HTTP read route** → `persistent-memory.d/2026-06-18-latent-sqlite-thread-safety-bug-in-the-affect.md`
|
||
|
||
- `[2026-06-19]` **The SAME `check_same_thread` sqlite bug recurred in the MEMORY store — exposed by the contract-mandated `search` dispatch test (TestClient = worker thread)** → `persistent-memory.d/2026-06-19-the-same-checksamethread-sqlite-bug-recurred.md`
|
||
- `[2026-06-19]` **Full WT-driven `:8392` live-smoke is infra-gated — `:8392` not in WT's `BIFROST_CLIENT_ALLOWED_HOSTS` (bind 422s)** → `persistent-memory.d/2026-06-19-full-wt-driven-8392-live-smoke-is-infra-gated.md`
|
||
- `[2026-06-19]` **heid-code-review pulled MORE weight than its own "marginal" self-assessment** → `persistent-memory.d/2026-06-19-heid-code-review-pulled-more-weight-than-its.md`
|
||
|
||
- `[2026-06-20]` **The post-turn-async timing trap bit AGAIN — even a 35s post-`[done]` read missed the promotion `upsert_many` by ~2s** → `persistent-memory.d/2026-06-20-the-post-turn-async-timing-trap-bit-again-eve.md`
|
||
- `[2026-06-30]` **Heimdall keys are PER-INSTANCE — a key minted on one Worldtree 401s on another** → `persistent-memory.d/2026-06-30-heimdall-keys-are-per-instance-a-key-minted-o.md`
|
||
- `[2026-06-30]` **`tea comment <N>` hangs on Gitea** → `persistent-memory.d/2026-06-30-tea-comment-n-hangs-on-gitea.md`
|
||
- `[2026-07-02]` **Mask-HOSTED transient characters have a STATIC mood engine — cost a whole R29 probe** → `persistent-memory.d/2026-07-02-mask-hosted-transient-characters-have-a-stati.md`
|
||
- `[2026-07-03]` **The "neutral non-appraising tail" premise fails — the neutral MESSAGE choice dominates** → `persistent-memory.d/2026-07-03-the-neutral-non-appraising-tail-premise-fails.md`
|
||
- `[2026-07-03]` **Two φ0-fit traps: fast-turn timescale + low-baseline conditioning** → `persistent-memory.d/2026-07-03-two-0-fit-traps-fast-turn-timescale-low-basel.md`
|
||
|
||
- `[2026-07-06]` **`persona_state` + the agent envelope are Tier-3-BLIND -- NOT valid signals for "did a persona store"** → `persistent-memory.d/2026-07-06-personastate-the-agent-envelope-are-tier-3-bl.md`
|
||
- `[2026-07-06]` **Raw `POST /sessions` is NOT Bifrost-bound -> zero affect/memory emits** → `persistent-memory.d/2026-07-06-raw-post-sessions-is-not-bifrost-bound-zero-a.md`
|
||
- `[2026-07-06]` **A fast/"no-op" deploy can leave a STALE container running the old image -- verify the running version, not the deploy status** → `persistent-memory.d/2026-07-06-a-fast-no-op-deploy-can-leave-a-stale-contain.md`
|
||
- `[2026-07-06]` **#348 OCEAN key-mismatch: a declared OCEAN silently resolved to neutral** → `persistent-memory.d/2026-07-06-348-ocean-key-mismatch-a-declared-ocean-silen.md`
|
||
|
||
- `[2026-07-06]` **`pkill -f "ratatoskr-web --host"` SELF-MATCHES the bash command running it** → `persistent-memory.d/2026-07-06-pkill-f-ratatoskr-web-host-self-matches-the-b.md`
|
||
- `[2026-07-06]` **Playwright: no python `playwright` module in the venv; use NODE playwright + an explicit `executablePath`** → `persistent-memory.d/2026-07-06-playwright-no-python-playwright-module-in-the.md`
|
||
- `[2026-07-06]` **The Bash tool's `grep` is a ugrep-wrapper (`--ignore-files -I`) that silently returns NOTHING on some files** → `persistent-memory.d/2026-07-06-the-bash-tool-s-grep-is-a-ugrep-wrapper-ignor.md`
|
||
- `[2026-07-06]` **`DesignSync` (claude.ai/design MCP) needs claude.ai design scopes before ANY method works** → `persistent-memory.d/2026-07-06-designsync-claude-ai-design-mcp-needs-claude.md`
|
||
|
||
- `[2026-07-13]` **`thinking_enabled=False` on the define was a NO-OP — char-rp-reasoning ignores it** → `persistent-memory.d/2026-07-13-thinkingenabled-false-on-the-define-was-a-no.md`
|
||
- `[2026-07-13]` **A same-image redeploy does NOT reload a bind-mounted config — the ModelRegistry boot-caches it at `__init__`** → `persistent-memory.d/2026-07-13-a-same-image-redeploy-does-not-reload-a-bind.md`
|
||
- `[2026-07-15]` **soong-lab bundle `ship.native.motivational.goals/fears` are bare STRINGS, but WT `agents.define` requires OBJECTS** → `persistent-memory.d/2026-07-15-soong-lab-bundle-ship-native-motivational-goa.md`
|
||
- `[2026-07-15]` **`re.sub`/`re.subn` INTERPRETS backslash-escapes in the REPLACEMENT string** → `persistent-memory.d/2026-07-15-re-sub-re-subn-interprets-backslash-escapes-i.md`
|
||
- `[2026-07-13]` **Called Deckard "hung" off a short timeout — WRONG (operator correction)** → `persistent-memory.d/2026-07-13-called-deckard-hung-off-a-short-timeout-wrong.md`
|
||
- `[2026-07-13]` **Resumed-session context-snapshot is IN-MEMORY → lost on a container recreate (agent_not_available on resume)** → `persistent-memory.d/2026-07-13-resumed-session-context-snapshot-is-in-memory.md`
|
||
|
||
- `[2026-07-16]` **`sortable_chunk_fields` advertised WITHOUT the required `type` field = whole-handshake deploy-breaker; only DRIVING the real bind caught it** → `persistent-memory.d/2026-07-16-sortablechunkfields-advertised-without-the-re.md`
|
||
|
||
_18 older entries (2026-05-* — the original debug-TUI/web build era) archived to archival-memory.md._
|