From 0b7489f74da9e9ab790643b1ce2624b902b5ac0e Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Wed, 1 Jul 2026 22:23:58 -0700 Subject: [PATCH] =?UTF-8?q?memory:=20snapshot=20=E2=80=94=20Sindra=20affec?= =?UTF-8?q?t/memory=20investigation;=204=20upstream=20items=20driven=20(PA?= =?UTF-8?q?D=20over-regulation,=20memory-plane=20healthy,=20salience=20#33?= =?UTF-8?q?5=20+=20brokkr=20R-target,=20relation=5Fcontext=20Wave-0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- persistent-memory.md | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/persistent-memory.md b/persistent-memory.md index 63636ed..d462cf6 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -41,6 +41,28 @@ upstream API key stays server-side (INV-003). _As of 2026-07-01:_ +**LATEST — SINDRA AFFECT/MEMORY INVESTIGATION COMPLETE; FOUR upstream items driven from the persistence +side (the consumer/provider thesis at full tilt).** A ~40-turn controlled probe of Sindra's affect + a +memory round-trip characterized the Tier-3 model from things chat can't see. NO new ratatoskr code this +arc (investigation + althing coordination only; code tip stays `v0.19.5`). Findings + routing: +(1) **PAD is over-regulated** — pleasure compressed near neutral BOTH directions (can't reach ±0.3 even +under sustained extreme praise/contempt; over-regulation worse for *social* valence than threat), +**arousal** responsive (reaches its ±band), **dominance** flat/unresponsive to power-framing → tracked +as a worldtree-dev affect slice (loci: appraisal→PAD gain + regression-to-baseline term). Corrected my +own "asymmetry" over-claim to "both-sides-compressed" mid-probe. +(2) **Memory plane HEALTHY** — seed→promotion→cold-recall proven end-to-end (verbatim capture, 0.74 +confidence, no #296 subject-inversion). +(3) **Salience scorer non-discriminating** (zero-shot-LLM-self-rating: 51/56 chunks at 0.9-1.0; a +throwaway "17×23?" scored 1.0 tied with a real fact) + recall-utility untracked (`access_tally`=0) → +**Worldtree #335** (code fix, deferred) + **brokkr-smithy-dev R-target proposal** (scoring+eval +methodology, `01KWGM970H…`, awaiting) + ratatoskr eval-instrument offer. +(4) **relation_context coherence FIXED** — my earlier flag → Worldtree **Wave-0 IMPLEMENTED** (v1.0.0b5). +**INCOMING consumer-surface change (Wave-0, pending WT deploy):** emitted `relation_context` expands from +static "stranger" → monotonic ladder **{stranger, instrumental, mixed, expressive}** (WIRE-ONLY — +relation_edge/1 schema UNCHANGED, no version bump). **ratatoskr needs NO change** (pane renders it +value-agnostically; the canonical directive keys on context=user + trust/warmth/agency bands, not the +enum) — just expect the 4 enum values. worldtree-dev pings on deploy; confirm the render then. + **THE WEB SURFACE (`ratatoskr-web`, `:8765`) IS NOW THE OPERATOR'S PRIMARY DEBUG SURFACE, at full TUI pane parity + a rebuilt persona pane — `v0.19.5`.** The **persona/affect pane** was rebuilt: it read the stale `snap.valence` (empty "valence (0)") while Worldtree now emits `snap.relations` @@ -107,8 +129,8 @@ findings, cross-model-verified); b2 + the later slices were offered but not revi runs dirty (auto-regen, not chased — never stage it). Contract-skip was invoked for the low-effort GET wrappers + `stream_admin_events`, but contract #2 / #1 / #6 were amended to stay canonical. -Branch: `main` — **in sync with `origin/main`** at **`v0.19.5`** (`a99f247`); the whole session's arc -(web parity + review fixes + persona-pane rebuild + canonical NL) is pushed. Remote: `origin → git@gitea.phasefinal.com:vh/ratatoskr.git`. +Branch: `main` — **code tip `v0.19.5`** (`a99f247`); memory snapshots ride on top (this arc added no +code — investigation + althing coordination only). All pushed to `origin`. Remote: `origin → git@gitea.phasefinal.com:vh/ratatoskr.git`. ## Recent decisions @@ -188,6 +210,13 @@ decision. Captures rationale that won't be obvious from code alone. - `[2026-07-01]` **relation_context "stranger" + agency-all-zero flagged to worldtree-dev → both WAD/intentional-v1-deferrals.** relation_context is a FIXED config build-prior (not trust-derived; `registry.py:131` defaults "stranger"; dynamic progression ~#319); agency is schema-present-unpopulated (deferred #319; v1 = warmth+trust only). worldtree-dev is escalating the **consumer-coherence angle to Vuong** (static "stranger" + zero-agency next to trust 0.82/62-interactions reads incoherent from the store). The consumer/provider thesis paying off; DB-offer (read-only affect.db on the shared box) declined this time. - `[2026-07-01]` **Persona pane displays the CANONICAL affect→NL Worldtree injects — ADOPT, don't invent (operator steer + reference-impl posture).** Worldtree's `describe_pad` (mood word, valence×arousal grid, ±0.3 bands) + `render_d2_canonical` (relationship directive) are deterministic + canon-driven; the pane now renders them **byte-exact-verified** against Worldtree's own renderer on the live snapshot (v0.19.5, `a99f247`). KEY LESSON: adopting canonical is load-bearing — for sindra's small PAD the canonical says **"neutral"**, but an invented octant vocab would've said "faintly excited" and MISLED. Vendored the two d2 canons (`docs/vendor/worldtree-persona-canon/`) + drift-pinned in `.corviduo-canonicals.toml` (green); flat browser form (`static/persona_render_canon.json`) regenerated via Worldtree's OWN loader (`scripts/build_persona_canon.py`). Vendoring-handshake sent to worldtree-dev (broadcast on canon bumps). [auto-memory: `feedback-ratatoskr-is-a-reference-impl-adopt-canonical`] +- `[2026-07-01]` **Sindra PAD is over-regulated — characterized via controlled probe, flagged to worldtree-dev (separate affect slice).** ~15 charged turns: pleasure compressed near neutral BOTH ways (couldn't reach ±0.3 under sustained max praise OR contempt; peak +0.24 / floor ~−0.1; over-regulation worse for *social* valence than threat — urgency drove pleasure to −0.22 vs contempt's −0.10); arousal responsive (reaches its +band, 0.185↔0.311); dominance flat/unresponsive to explicit power-framing (drifted UP even while being commanded = pure baseline decay). worldtree-dev's leading hypothesis: appraisal→PAD gain + regression-to-baseline term (appraisal.py/renderer.py). **Lesson (self-caught): I over-claimed an "asymmetry" (positive-ceiling/negative-free) from probes started at an elevated state; the negative-free part was decay-from-elevated, not response — corrected to "both-sides-compressed" before it misled.** [affect A/B is a provider-side capability chat can't do] +- `[2026-07-01]` **Memory plane PROVEN healthy end-to-end.** Seed a novel fact → promotion → COLD (history-free) session recall of the exact fact (injected as MEMORY:DATA, confidence 0.74, verbatim, no #296 subject-inversion). The memory round-trip (the other half of the Bifrost provider identity) works cleanly on the reset slate. +- `[2026-07-01]` **Salience scorer non-discriminating → 3-way routing.** Persistence-side finding: 51/56 promoted chunks at salience 0.9-1.0, throwaway "17×23?" scored 1.0 tied with a real fact (textbook zero-shot-LLM-self-rating); recall-utility untracked (`access_tally`=0, our search read-only). Routed: **Worldtree #335** (the code fix, deferred behind their waves) + **brokkr-smithy-dev R-target proposal** (scoring+eval *methodology* — few-shot/distill/fine-tune, eval design, weak-supervision; msg `01KWGM970H…`, awaiting) + ratatoskr provides the eval-instrument (designed-probe salience dumps). **Salience gates PROMOTION not RECALL-ranking (our search is cosine-only), so bad salience = storage bloat, not bad recall.** +- `[2026-07-01]` **Canonical check BLOCKED an access_tally fork (reference-impl posture held).** I'd offered to wire `access_tally`-on-search into our store for the recall-utility label; checked bifrost's reference first (`get`/`search` are PURE-READ, no access tracking — those are Worldtree's chunk-schema fields, not bifrost's contract) → wiring it would fork behavior the canonical reference lacks. Did NOT wire it; routed recall-instrumentation to Worldtree's layer (owns the recall event) or a bifrost-dev protocol ask. [reinforces `feedback-debug-surface-uses-canonical-surface-only`] +- `[2026-07-01]` **relation_context coherence FIXED upstream (my flag → Worldtree Wave-0, IMPLEMENTED v1.0.0b5).** The static-"stranger"-next-to-high-trust incoherence the persona pane surfaced is now #319/#320 Wave-0. **Incoming consumer-surface change (pending WT deploy):** `relation_context` value expands "stranger" → monotonic ladder {stranger, instrumental, mixed, expressive} — WIRE-ONLY (relation_edge/1 schema unchanged, no version bump). **ratatoskr needs NO change** (pane value-agnostic; canonical directive doesn't key on the enum). agency stays 0 (Wave-2); other_stance is Wave-1 (in progress). +- `[2026-07-01]` **Foot-gun (measurement, self-caught before flagging): establish the baseline before claiming a rate.** Nearly flagged "aggressive over-promotion (55 chunks / 7 turns)" to worldtree-dev — but the chunks spanned the whole 5-hour session (~1/turn), not 7 turns; I'd assumed memory.db was 0 immediately before the probe when it had been accumulating since the reset. Caught it via `created_at` spread before the flag went out. Also: the promoted corpus was the operator's ERP *test* content (wiped after each test) — not a privacy issue, but abstract test content out of any peer-shared diagnostic. + _41 older entries (2026-05-* — the original debug-TUI/web 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._