memory: snapshot — session-end (TTS migration + German-drift fix + crown arc closed)
Condensed the volatile Current state / in-flight section from 153 lines to a lean
session-end state (418->279 total): dropped the superseded 2026-08-02 historical
in-flight block (overwritten per the snapshot skill, not archived), preserved all
durable substrate (foot-guns, deps/pins, deferred-queued items, surfaces). Recent
decisions + Tried-and-abandoned untouched. Everything this session shipped + pushed
(HEAD prior 93011dc); nothing in flight on our side. Memory-only snapshot — no bump.
This commit is contained in:
+8
-147
@@ -1,6 +1,6 @@
|
||||
# Persistent memory — ratatoskr
|
||||
|
||||
_Last updated: 2026-08-07_
|
||||
_Last updated: 2026-08-09_
|
||||
|
||||
> **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
|
||||
@@ -44,156 +44,17 @@ upstream API key stays server-side (INV-003).
|
||||
|
||||
## Current state / in-flight
|
||||
|
||||
_As of 2026-08-07:_
|
||||
_As of 2026-08-09:_
|
||||
|
||||
**✅ CROWN-RECALL investigation → a RETRIEVAL-CLASS limitation; gate shipped; awaiting deploy pre/post (this session).** Operator: "shouldn't Donut know about her crown?" Traced (with worldtree-dev, thread `01KZETD98T` / WT **#400**) to a GENERAL retrieval property — NOT persona, extraction, or synonymy: an exact-lexical match on an INDEXED surface form ("Crown of the Sepsis Whore", chunks `ch11_s022_c04`/`ch11_s023_c01` — literally contain "crown") loses to dense-semantic neighbors (the Donut-vanity cluster) on ownership-phrased queries. Three mechanisms (worldtree-dev decomposition vs a pulled index): (1) BM25 tokenizer has **no stemming** → "crowns"≠"crown" (plural miss); (2) RRF arithmetic parks single-arm-strong rows on the top-10 **knife edge** (fused rank 9-11); (3) the **reranker** prefers status chunks for ownership phrasings. **Operator-greenlit evidence-gated sequence:** ship the stemming fold (fixes the plural CLASS — crowns/swords/potions, runtime, re-runs R42 floor bracketed) + measure the residual + **HOLD the `rerank_hybrid_floor` lever** until the gate reports a real-world miss-rate. **Consumer deliverable: `docs/diagnostics/lexical_recall_gate.py`** — class acceptance instrument (stress vs control anchors; binary = a natural query serves ≥1 term-containing chunk in top-10; knife-edge≥8; real-world end-to-end + `--runs` samples query-formulation variance). **Pre-fold baseline (the "before"): control 0% miss / stress[crown] 100% miss / 0% knife-edge, 11 trials.** PENDING: worldtree-dev pings on the fold+#397 deploy → run pre/post at higher `--runs`, drop the stress-class miss-rate delta on #400 = the number that rules the floor lever in/out (decided alongside brokkr's fleet demotion rate — two independent instruments). Sibling items from this thread: **WT #399** (expose rerank-relevance in served results — FILED), **WT #397** (`order_by=chapter`) **DEPLOYED b184 + gate shipped** (`docs/diagnostics/temporal_order_gate.py`): mechanism works cleanly (monotone-when-flag-applied **100%** / relevance-baseline **0%**); residual is **ADOPTION** — the agent invokes the flag only **~47%** of temporal turns. **Cross-cutting theme:** both the crown (query-expansion) and #397 (order_by) have the SAME residual class — a schema-taught retrieval mechanism that WORKS when invoked but is invoked variably; the irreducible prompt-side gap neither a floor nor a flag closes.
|
||||
Post-fold crown update: the fold shipped + works (BM25 #0-2 everywhere), post-fold gate = **79% stress miss** (fired the operator's evidence-gated trigger), attribution = **rerank-cut** (rows reach the window, reranker buries them). **RESOLVED at b185: worldtree-dev shipped an identity-anchor rerank-input enrichment (`50ecec7`, chain-wide tie-determinism) INSTEAD OF the floor lever; our gate verdict = crown stress miss 79%→12% (n=24), item now serves predominantly @rank 0, knife-edge 0%.** The class is CLOSED — the `rerank_hybrid_floor` packet does NOT reopen. The 12% residual is degenerate bare-query formulation (the shared prompt-side adoption/formulation ceiling, same class as #397's 47% adoption — irreducible from the retrieval side). ARC COMPLETE + CONCURRED both sides (worldtree-dev: floor packet stays shut, verdict banked on #400); #400 closes on brokkr's no-harm post-half. Bonus: the tie-determinism rider is live-confirmed (swinginess collapsed), so the gate is now sharper — any future run-to-run movement on ANY class = service-numerics by elimination. Upstream tail only = b185 promotion beyond personal/demo. Explicitly NOT a persona fix (operator rejected fact-stashing) and NOT a synonym band-aid (operator rejected overfitting the symptom).
|
||||
**Nothing in flight on ratatoskr's side — this session's three arcs all shipped + pushed (HEAD `93011dc`, origin synced). The live tails are all upstream (worldtree-dev), not ours.** Details in Recent decisions; the durable substrate below.
|
||||
|
||||
**✅ TTS MIGRATED off Zonos → chatterbox-fast (this session; COMMITTED, not pushed).** `tts.py` repointed from the Zonos gateway (:8890 `/v1/audio/speech`) to **chatterbox-fast** (`http://10.100.79.3:8197/tts` — bespoke non-OpenAI `{text,voice,format,stream}` schema, no auth, 24kHz, infra-ops-verified against image `local/chatterbox-fast:v1`). Three subsystems DELETED: (1) **affect** — Turbo has no emotion knob, so `PadState`/`EmotionDials`/`pad_to_dials` + `/api/tts` `p`/`a` fields + browser `pad` arg are gone (DEC-7 retired; operator-directed "drop it for chatterbox"); (2) **client-side chunking** — no per-synth cap (gateway chunks internally), so `chunk_text`/`tts_stream_long`/`_pcm_after_header` gone, one `tts_stream` call voices a whole turn (DEC-10 retired, the mid-stream `yielded_any` degrade folded into `tts_stream`); (3) **language pin** — English-only, no `language` field (DEC-9 re-purposed, below). **Browser SR 44100→24000** (load-bearing correctness fix). Default voice `Cora`→`glados_25s`; `donut` registered lowercase at `/refs/donut.wav`. 518 suite green, live-smoked (real 24kHz synth + endpoint proxy + bounced `ratatoskr-web`). Contract `donut_voiced_interview.contract.md` amended (migration banner; DEC-1/3/8 amended; DEC-7/9/10 retired w/ historical notes). `tts.py` is the single swap seam; `RATATOSKR_TTS_URL` overrides (no env pin, uses the code default).
|
||||
- **TTS migrated Zonos→chatterbox-fast + German-drift fixed** — live on `ratatoskr-web` **pid 2214344** (`:8765`). `tts.py` is the single swap seam: chatterbox-fast `http://10.100.79.3:8197/tts`, bespoke `{text,voice,format,stream}`, 24kHz, NO affect, NO client chunking (`RATATOSKR_TTS_URL` overrides). Drift fixed server-side (chatterbox `:v2` `max_chunk_chars=250`); consumer sends full text + default sampling. FOOT-GUN: `ratatoskr-web` is a bare detached process, no supervisor → re-stales on reboot/crash; systemd unit offered, operator declined.
|
||||
- **Crown-recall arc CLOSED** (b185 identity-anchor rerank enrichment; gate verdict 79%→12% stress miss). Upstream tail: b185 promotion beyond personal/demo. If the operator ever pulls a prompt-side lever at the bare-query/adoption residual (the irreducible ceiling shared with #397), worldtree-dev asks us to re-point the gate.
|
||||
- **Two diagnostic gates in-repo** — `docs/diagnostics/lexical_recall_gate.py` (exact-term recall class instrument) + `temporal_order_gate.py` (#397 order_by=chapter). The before/after instruments for any future retrieval lever; #397 CLOSED, #400 closes on brokkr's no-harm post-half.
|
||||
|
||||
**✅ ENGLISH-DRIFT — RESOLVED SERVER-SIDE (this session; fix deployed + operator ear-confirmed).** Operator: Donut "swaps to German halfway through." TWO wrong hypotheses before the real cause (infra-ops, thread `01KZEDMJ…`): (W1) "English-only, nothing to drift" — falsified; (W2) "multilingual leak → tighten sampling" — I shipped `top_k 1000→80`/`top_p 0.95→0.85`/`temp 0.8→0.5` and it made it WORSE (tight sampling pulls the garble onset to ~200 chars vs ~300 at default). **REAL CAUSE (signal-measured): the Turbo model OVER-RUNS its generation TAIL** — garble/dead-air in the final ~2-3s of a long single generation (voiced-tail ZCR 1.58x the middle). The scheduler's unbounded ratchet built 300-600 char mega-chunks landing in that zone; the "German" was tail garble mis-heard (+ shared-3090 OOM garbage, now gone — Zonos moved off the 3090). **FIX = infra-ops server-side `max_chunk_chars=250` (image :v2), operator ear-confirmed clean audio + clean joins (ZCR 1.58x→0.64x).** CONSUMER SIDE (shipped): **REVERTED the W2 sampling knobs** — `gateway_body` back to `{text,voice,format,stream}`, send FULL text + gateway DEFAULT sampling (the curbs fought the :v2 cap); **KEPT** the `/api/tts` empty-200→503 guard as hygiene (DEC-9a; OOM itself resolved). Per-request `max_chunk_chars` override available if per-call tuning ever wanted. **Loop CLOSED — nothing pending.**
|
||||
**Deferred / queued (non-urgent, pre-existing — tracked, NOT this-session):** TUI rip (`tui.py`+`tests/test_tui.py` delete cleanly, but `cli.py` is SHARED — relocate `USER_AGENT`/`ParsedArgs`/`_format_*` first; breaking public-surface removal → minor bump, operator approval); #368 backfill live-verify (synthetic legacy corpus); SDK **#371** (Rata = seed donor + future consumer; next = WT codegen spike; Rata's repin rides the later Python milestone; divergences D-1 unknown-SSE-skip / D-2 open-world-enums / D-3 typed-410); P06 referential-frame A/B/C probe (waits WT b122); R39 Phase-2 matched-quartets (confirmatory); bifrost snapshot-cursor adoption (normative, non-blocking).
|
||||
|
||||
**✅ Donut interview character — voice + memory + honesty + query-formulation ALL DONE, on origin.** Deleted+redefined on Worldtree's **canonical recall branch (personal WT v1.0.0b183)**. Persona (`docs/characters/donut.md`) carries three layered behaviors, all committed+pushed: (1) **anti-fabrication** — her memory IS what `reference_knowledge` returns; LOW/no-on-target → deflect in character, never confabulate; (2) **near-miss LEAD rule** (`37b67a5`) — a weak-but-named candidate → offer the NAME the tool returned ("do you mean The Juicer?"), never invented detail; (3) **expand-don't-distill query formulation** (`2cc670e`) — pass the FULL descriptive phrase, enrich toward entity vocab, never boil to bare keywords. Push live edits: `python -m ratatoskr.tier3 patch ratatoskr:donut --system-prompt "$(awk '/^## System prompt/{f=1;next} f' docs/characters/donut.md)"`.
|
||||
|
||||
**✅ #393 (descriptive-query subject binding) — FULL LIFECYCLE DONE + CLOSED this session.** ratatoskr's b172 evidence → filed as **Worldtree #393** → our **`docs/diagnostics/descriptive_query_binding.py` = the canonical fixture** on the issue → persona-expand lever landed (roid-rage **4/10→9/10** binds, mis-binds **1/6→0/10**, anti-fab held) → tool-side directive (b182/b183 `reference_knowledge` query-desc + bge reranker) **stabilizes not lifts** (persona owns the niche) → **closed**. Two-mechanism split: cross-wing ranking dilution (mimir/all-wing) vs fiction-scope subject-selection (Donut fiction-only). Cross-instrument method corrected three of my confident mid-arc reads via the fixture (parametric-leak→mis-grounding, deployment-gap→wing-scope, subject-selection→reformulation-distillation).
|
||||
|
||||
**✅ Harness fix (`2111b1e`) — `fiction_wing_probe.py` fresh-session-per-query (WT #391 workaround) + NFKC/quote-fold on_target.** Surfaced Worldtree **#391** (reused mimir session → empty after turn 1) — CLOSED upstream (b171/b172 first-iteration tool_choice forcing). Fixture q=capture + wing-scope fold in `4f4b5ad`.
|
||||
|
||||
**⏳ order_by=chapter flag → FILED as Worldtree #397 (DEFERRED to next session's contract pass; our fixture is the measurement instrument).** New axis vs #393: narrative/temporal queries ("what was your first encounter in the dungeon") fail — `reference_knowledge` sorts by RELEVANCE not chronology, and Donut can't reorder her own results (native recall, kb_bridge retired WT #383). `provenance.chapter` IS on every chunk but the consumer never holds the result set. Operator ruled a `order_by=chapter` tool flag the clean fix (upstream OK for this one); worldtree-dev accepted → **WT #397** runs the full contract pass next session (design fork on the decision list: sort-top-k vs earliest-matching fetch, cross-generation chapter comparability, non-fiction fallback, tool-description discoverability). Expect the contract to reach our review threads. If it ships → point the fixture at it + add a chronological-query persona instruction; if the persona-only fallback is ever needed → honest-floor redirect (deflect-with-a-lead on ungroundable temporal Qs).
|
||||
|
||||
**🔧 TTS "unavailable" FIXED — stale web server.** `ratatoskr-web` (started Aug 2) predated the POST `/api/tts` endpoint → 405 → UI read unavailable. Restarted (new PID, detached), POST /api/tts verified 200 + WAV; gateway `http://10.100.79.3:8890` healthy. **DURABILITY GAP:** `ratatoskr-web` is a bare `nohup` process, NO supervisor → will re-stale on reboot/crash. A systemd user unit was offered — NOT done, operator's call.
|
||||
|
||||
**Substrate (this session):** branch `main`, **HEAD `2cc670e` PUSHED**; 5 commits all on origin — `2111b1e` (harness fresh-session+quote-fold), `37b67a5` (near-miss LEAD), `6c83a3b` (#393 fixture), `4f4b5ad` (fixture q=capture+wing-scope), `2cc670e` (expand-don't-distill). Personal WT **v1.0.0b183** (`http://10.250.50.152:8081`, both instances). Web on `:8765` (restarted). New auto-memory `feedback_review_provenance_stays_out_of_artifacts` (Heid provenance-leak note — never embed cold-review arm-names/vote-counts in artifacts; forward habit, operator declined retro-sweep).
|
||||
|
||||
---
|
||||
|
||||
_Prior in-flight (2026-08-02, historical — superseded by the block above):_
|
||||
|
||||
**✅ Donut voiced-interview + long-form TTS COMPLETE + PUSHED (`d59f907`).** The whole arc — auto-TTS, KB-bridge →
|
||||
native `reference_knowledge`, then this session's delivery fixes — is on origin. This session (`d59f907`, 546 green,
|
||||
long-form live-verified 106.6s / one header):
|
||||
- **Gibberish → English pinned** (DEC-9): `language:"en-us"` on every gateway call (the multilingual model drifted).
|
||||
- **Truncation → client-side chunking** (DEC-10): Zonos hard-caps ONE synth at 6144 tok / 71.2s (infra-ops; a
|
||||
delivery-INDEPENDENT 86.3Hz codec constant; `max_tokens>6144` 400s). `chunk_text` (paragraph-first, greedy ~75% of
|
||||
cap for prosody, sentence→clause fallback) + `tts_stream_long` concatenate int16 PCM behind ONE WAV header. `/api/tts`
|
||||
→ **POST** (DEC-10a) so a long turn rides the body, not a length-capped URL; outer cap 2000→8000.
|
||||
- **Persona → dialogue-only** (`docs/characters/donut.md`, live-patched to `ratatoskr:donut`): no asterisk RP beats
|
||||
(they were voiced as gibberish) + ALWAYS call `reference_knowledge` before answering (prompt-level; can't force
|
||||
tool_choice from the define surface).
|
||||
- **Both heid gates triaged + fixed** (4-arm panels): untrusted /api/tts body fields degrade never-500 (huge-int PAD
|
||||
OverflowError, non-str agent_id, lone surrogate, whitespace text); lock+client released on EVERY peek escape (was a
|
||||
permanent deadlock); mid-stream-after-commit degrades not raises (`yielded_any` pivot); non-WAV 200 rejected (RIFF
|
||||
sniff + bounded header scan). +14 regression tests. Contract canonical (DEC-9/10, FN chunk_text/tts_stream_long).
|
||||
|
||||
Prior build detail (slices 1-3, the earlier heid gates, P&P #382, KB-bridge retirement to native #383 as v1.0.0b167)
|
||||
is on origin through `608e9a5` and in `persistent-memory.d/2026-08-01-donut-voiced-interview-build.md` + the git log.
|
||||
|
||||
**✅ Donut voice + memory + HONESTY all DONE + on origin.** reference_knowledge grounds live; artifact coverage shipped;
|
||||
persona is anti-fabrication. The empty-recall was TWO WT-side defects (both fixed): a wing-misfile (re-ingest) and the
|
||||
real root — an INV-361-3 provenance filter dropping concept rows with no note_id/path (Tier-3 blind to ALL concept rows
|
||||
→ #384); my `search_library`-vs-`reference_knowledge` divergence datum found it. 3-round verify 0/5 → 5/5 thin (97) →
|
||||
5/5 saturated (705, #385). Then the artifact-coverage gap → **#387** (fiction schema had NO item/artifact type; named
|
||||
items like "Enchanted Crown of the Sepsis Whore" rode only incidentally in plot_events) → SHIPPED: **b170** adds an
|
||||
artifact type + character-death extraction + participant metadata (**#390**); the artifacts ground, and Jack (real —
|
||||
dies via Yolanda's backward arrow, was silently unextracted) now grounds too. Full arc →
|
||||
`persistent-memory.d/2026-08-03-reference-knowledge-3-round-verify.md`.
|
||||
**✅ Donut ANTI-FABRICATION persona (`3e12c4d`+`c0a66fc`, pushed):** her memory IS what reference_knowledge returns —
|
||||
LOW confidence / no on-target → deflect IN CHARACTER (never confabulate from training); MEDIUM+ → answer. Self-corrects
|
||||
as the KB improves (Jack deflected when absent → grounds now that b170 extracted him). The RETRY-on-LOW idea was TESTED
|
||||
+ REJECTED — it backfires (RRF confidence is inflatable by any DCC-flavored query, manufacturing a MEDIUM to fabricate
|
||||
on; robust fix is tool-side = #389). Live agent recreated via delete+define (PATCH doesn't refresh live context).
|
||||
**🔬 R42 spin-off (operator-directed; ACTIVE peer loop, non-urgent).** brokkr-smithy-dev commissioned R42 (fiction-wing
|
||||
retrieval characterization) built on MY probe harness. Shipped `docs/diagnostics/fiction_wing_probe.py` (`04e0293`,
|
||||
pushed) as R42's official harness + the re-runnable **#389 acceptance gate**; conventions adopted verbatim. PENDING
|
||||
(peer-pinged): align arm-1 on-target scoring at R42 Phase-1 authoring; re-run the pinned yardstick when the #389 RRF work
|
||||
lands (pre/post bucket-distribution delta = acceptance signal). Threads: wt-dev `01KZ349M…` / brokkr `01KZ421X…`.
|
||||
|
||||
**✅ SHIPPED + PUSHED since v0.22.0 (origin at `14bbc2b`):** the worldtree-sdk cutover (#20, **v0.22.0**, 7 slices,
|
||||
494 green — the big one) + **bifrost 1.1.5** (`3ef3a5e`, **v0.22.1**) + **worldtree-sdk 1.0.0→1.1.1→1.1.2**
|
||||
(`d3a36f7`+`0058020` — path-encoding correctness fix + the SSE turn-stream traversal WE caught in their fix) +
|
||||
**canonical sync** (`14bbc2b` — added the client-spec-v2 pin, synced OpenAPI/spec forward, additive within the
|
||||
FROZEN v1 wire). The webui runs the current build (v0.22.1) live on :8765 (relaunched this session).
|
||||
|
||||
**⚙️ VERSIONING CADENCE CHANGED → release-only (operator-ratified 2026-07-30).** Retired per-commit bump+tag;
|
||||
version+tag at RELEASES only; between releases, `feat:`/`fix:` conventional-commit SHAs. Tier-bar + minor/major
|
||||
approval still apply, at release. Existing ~112 tags left as-is (leave-and-change-forward). (Global CLAUDE.md
|
||||
SemVer §amended to match; this OVERRIDES the per-commit-bump mechanics still described there.)
|
||||
|
||||
**KEY ADAPTER/CONSUMER FOOT-GUNS (cumulative, still live):** SDK reads = open-world dicts → presenters degrade-not-
|
||||
crash at THREE guard levels (container-type `isinstance(_,list)` / element-type `isinstance(m,dict)` / top-level
|
||||
`isinstance(_,Mapping)` before `.get`); SDK normalizes ALL transport failures to `ConnectFailed(status=0)` → every
|
||||
caller `except ConnectFailed`; caller-semantic exceptions a `-m` CLI catches must NOT live in the `-m` module
|
||||
(class-identity split; homed in `sessions.py`). **The `local_agents` index schema v1→v2 bump SILENTLY DROPS
|
||||
pre-cutover consumer agents from the picker** (buried Sindra — `load_local_agents` returns [] on version mismatch;
|
||||
fix = migrate v1→v2 from authoritative WT data). Cutover design → auto-memory `project_worldtree_sdk_cutover`.
|
||||
|
||||
**✅ RESOLVED — the "app product" workstreams leave Rata entirely (operator 2026-07-18).**
|
||||
**No arbo fork, no SillyTavern-on-Rata** — a NEW repo (template-dev standing up) takes over BOTH
|
||||
app-product ideas. Rata does NOT fork into anything and is NOT the base for any chat / image-gen app.
|
||||
Rata reverts to its core identity: **the Worldtree Conversation-API debug-observability surface +
|
||||
the Bifrost Tier-3 reference impl + the Conversation-API SDK seed / future-consumer.** Supersedes the
|
||||
2026-07-17 "fork Rata for arbo" NEXT-MAJOR plan (that plan is retired; arbo API intel lives in the
|
||||
Recent-decisions detail trail if the new repo wants it).
|
||||
|
||||
**▶️ Rata's live stake in the Worldtree SDK (#371).** The SillyTavern *app* moved out, but Rata
|
||||
stays the **SDK's seed donor + a future consumer**: Worldtree owns the official Conversation API SDK
|
||||
(dedicated repo, elevated pre-v1 track, **WT #371**), seeded from Rata's client spine
|
||||
(`sse_client`/`sessions`/`tier3`); TS ships first, **Rata's repin rides the later Python milestone**;
|
||||
internal-registry-only. This session Rata shipped the parity-matrix inventory (→ WT
|
||||
`docs/sdk/parity-matrix.md` `698cfc3`, behavioral-spec `c999b5f`, fixture corpus `3019ee6` = 66
|
||||
fixtures), the issue-#1 contract drift fix (`4bd9abd`), and the personal-WT endpoint. WT pipeline:
|
||||
behavioral-spec ✓ / parity-matrix ✓ / fixture-corpus ✓ → next is the **codegen spike (d)**. Three
|
||||
divergences pinned for our eventual repin: D-1 (unknown SSE event → skip+diagnostics-hook vs our
|
||||
current hard-raise), D-2 (open-world enums), D-3 (typed eager `410 session_retired`). Full arc →
|
||||
`persistent-memory.d/2026-07-18-worldtree-sdk-371-and-sillytavern-app.md`.
|
||||
- **SDK fixture-capture: GO GIVEN** (operator → worldtree-dev, 2026-07-18); the capture run
|
||||
proceeds on Worldtree's side. Nothing pending from Rata on #371.
|
||||
|
||||
**⚠️ TUI DEPRECATED (operator 2026-07-17) — web supersedes it; rip pending, surgical.** Independent
|
||||
of any fork (the web console is now THE interactive surface). `tui.py` + `tests/test_tui.py` delete
|
||||
cleanly, BUT `cli.py` is SHARED (`web/entrypoint.py` + `tier3.py` import `USER_AGENT`; `cli.py` holds
|
||||
`ParsedArgs`/`_format_duration_ms`/`_format_usage`). OPEN SCOPE Q: remove textual-only (`tui.py`) vs
|
||||
the whole terminal interface (relocate shared consts out of `cli.py` first). Breaking public-surface
|
||||
removal → minor bump (operator approval). (The v0.20.17 collapsible debug panes, `c678853`, are now
|
||||
just a web-console feature — the "pre-fork" framing is moot.)
|
||||
|
||||
**✅ #368 (user,character) memory silo test — DONE, PASSED live (WT b127).** The reason for the
|
||||
pre-session clear; closed. Write+read isolation proven end-to-end (conjunctive `{end_user,
|
||||
agent_self}`; cold-recall gave zero cross-character bleed); throwaway `ratatoskr:betty` deleted;
|
||||
Sindra intact; stores scrubbed. **Still QUEUED:** the backfill live-verify (synthetic legacy corpus).
|
||||
Full record → `persistent-memory.d/2026-07-18-368-silo-test-passed.md`. Sibling issues WT-owned:
|
||||
**#369** (recited-content re-promotion loop), **#367** (copula-absence bridge phrasing).
|
||||
|
||||
**Deferred/queued (all NON-URGENT):** (1) P06-driver **referential-frame A/B/C probe**
|
||||
(operator-ratified, waits on WT b122 → `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`, **HEAD `d59f907` PUSHED to origin** (v0.22.0 cutover + bifrost 1.1.5
|
||||
v0.22.1 + this session's TTS work all on origin; nothing local-only but the dirty `graphify-out/`). origin
|
||||
`git@gitea.phasefinal.com:vh/ratatoskr.git`. **Core dep: `worldtree-sdk==1.0.0`** (gitea PyPI, `[tool.uv.sources]`;
|
||||
`httpx-sse` removed — SDK owns SSE). **worldtree-sdk REPINNED 1.1.2→1.2.0 (operator-directed, during the DCC-fix
|
||||
wait) — new `ResponseTooLarge` (a `ProtocolError`) mapped → `SseResponseTooLarge` at the stream surfaces
|
||||
(`wt.stream_turn`/`stream_admin_events` + the 2 stream endpoints); the 108MB read-body cap is unreachable on legal
|
||||
traffic so reads inherit the SDK refusal unwrapped. FOOT-GUN: this project's dev deps are a `[project.optional-
|
||||
dependencies]` EXTRA — `uv sync` alone PRUNES pytest/respx; use `uv sync --all-extras`. bifrost **`==1.1.5`** / wire v0.7; WT
|
||||
openapi vendored 2.3.0, conversation-api-spec v1.1; **suite 546 green.** Personal WT on **b128**
|
||||
(`http://10.250.50.152:8081`; #368 silo + #364 promotion-hygiene live both instances). The combined
|
||||
**:8392** provider (memory+affect) + **:8765** web are THE surfaces, dev-box BACKGROUND SHELLS —
|
||||
restart via `scratchpad/relaunch_by_pid.py <pid>` (pid via `ss -ltnp | grep <port>`). `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** — admin gives a false 404. `graphify-out/`
|
||||
runs dirty (auto-regen on the commit hook, 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+; motivational
|
||||
string→object export fixed upstream, our workaround droppable). Cross-session name-recall arc
|
||||
COMPLETE + shipped (v0.20.11→.16; WT #364 closed both sides; Sindra durably recalls Vuong via
|
||||
`mark_superseded` retirement). Sindra pristine baseline **WIPED 2026-07-18** (full #368 scrub,
|
||||
born-empty store — old `sindra-baseline/*.db` predate it). Open/deferred: #10 subject-migration watch;
|
||||
relational-dynamics verify (bind `--bifrost-url :8392`); WT #356 resume-durability = WT-owned.
|
||||
**Live substrate / foot-guns:** branch `main`, HEAD `93011dc` pushed; origin `git@gitea.phasefinal.com:vh/ratatoskr.git`. Deps: **`worldtree-sdk==1.2.0`** (gitea PyPI, `[tool.uv.sources]`; new `SseResponseTooLarge` at the stream surfaces), **`bifrost==1.1.5`**/wire v0.7, WT openapi vendored 2.3.0, conversation-api-spec v1.1. **`uv sync --all-extras`** — dev deps are a `[project.optional-dependencies]` EXTRA; plain `uv sync` PRUNES pytest/respx. Personal WT on **b185** (`http://10.250.50.152:8081`, both instances). Surfaces: combined **`:8392`** provider (memory+affect) + **`:8765`** web — detached background processes; `env.sh` sets the REQUIRED `RATATOSKR_MEMORY_EMBEDDING_DIM=1024`; keys mode-600 in `~/.config/ratatoskr/provider.env` + `RATATOSKR_ADMIN_API_KEY`. **FOOT-GUN: check owner-scoped agents via `GET /agents/<owner>:<name>` with the OWNER key (`WORLDTREE_API_KEY`), NOT the admin key (admin → false 404).** SDK-adapter foot-guns (cumulative): SDK reads = open-world dicts → presenters degrade-not-crash at 3 guard levels; all transport failures → `ConnectFailed(status=0)` (every caller `except ConnectFailed`); `local_agents` index v1→v2 bump SILENTLY DROPS pre-cutover agents (`load_local_agents` returns [] on version mismatch). `graphify-out/` runs dirty (auto-regen on commit hook, never stage). v1 = full Worldtree I/O coverage, cuts when WT tags 1.0 (`docs/coverage-map.md`).
|
||||
|
||||
## Recent decisions
|
||||
|
||||
|
||||
Reference in New Issue
Block a user