fix(web): de-ugly the Tier-3 persona pane — clear message instead of bare HTTP 404
persona_state hard-404s every Tier-3 (colon-id) agent by design upstream (WT api.py:1220, "Phase 2.0 has no Tier 3 persona") — so the Persona pane showed "persona not available (HTTP 404)" for consumer-defined characters. loadPersona now reads error_code + renders a clear Tier-3-aware message (she still responds in character; only the affect/OCEAN readout is gated), with distinct text for persona_not_configured / 403 / other. Also (snapshot): sindra switched to thoughtful-character role (mistral-small-4-reasoning); worldtree-dev pinged re Tier-3 persona_state roadmap (thread 01KVCR6P); #17 (bifrost-binding the chat client) teed up as the next-context target. v0.17.7
This commit is contained in:
+18
-6
@@ -67,12 +67,22 @@ COLD history-free session recalled it @ 0.694 — "Dark chocolate. With sea salt
|
||||
verbose characters remember too. All session commits + tags PUSHED to origin (v0.17.6, spec repin v0.35.16,
|
||||
snapshots; tags v0.17.4/.5/.6).
|
||||
|
||||
**NOW (operator session):** `:8391` store WIPED clean; `ratatoskr-web` UP on `0.0.0.0:8765` (LAN
|
||||
`http://10.100.10.50:8765`) — consumer key (owner-matches sindra) + end_user `vuong`, `ratatoskr:sindra` added to
|
||||
the local picker; operator is spending time with Sindra via the web UI. **CAVEAT: the web client does NOT bind to
|
||||
our `:8391` provider (#17 unbuilt) → the web chat is the PERSONA + debug-surface experience; Sindra does NOT
|
||||
persist/recall memory there** (the proofs above used manual bound sessions via scripts, not the client). worldtree-dev
|
||||
thread closed; althing monitor armed.
|
||||
**NOW (operator session):** `:8391` store WIPED clean; `ratatoskr-web` UP on `0.0.0.0:8765`
|
||||
(LAN `http://10.100.10.50:8765`, consumer key — owner-matches sindra, end_user `vuong`, `ratatoskr:sindra` in the
|
||||
picker). Sindra switched to the **`thoughtful-character` role → `mistral-small-4-reasoning`** (via DELETE+redefine;
|
||||
she chats in full persona on it). **"No persona" 404 diagnosed = Worldtree limitation, NOT ours:** `persona_state`
|
||||
hard-404s every Tier-3 (colon-id) agent by design (`api.py:1220` "Phase 2.0 has no Tier 3 persona", still on
|
||||
v0.36.0) — a persona block in the define does NOT help (404 fires before the row read). Pinged worldtree-dev re:
|
||||
the Tier-3 persona_state roadmap (thread `01KVCR6P…`). De-uglied our web persona pane (`index.html` `loadPersona`)
|
||||
to render a clear Tier-3 message instead of a bare "HTTP 404". **CAVEAT still stands: the web client does NOT bind
|
||||
to `:8391`/`:8390` (#17 unbuilt) → web chat = persona + debug only; no memory persistence, no affect telemetry.**
|
||||
|
||||
**NEXT (fresh context): #17 — bifrost-binding the chat client.** The single unblock for BOTH (a) memory persistence
|
||||
in the web/TUI/CLI chat (Sindra remembering in a real session, not just scripts) AND (b) feeding the persona pane
|
||||
affect telemetry once WT ships Tier-3 persona_state. Contract `docs/contracts/issues/17.contract.md` is WRITTEN +
|
||||
Heid-reviewed + drift-clean; **TDD is the next step** — slice 1 = the `create_session` bifrost-binding primitive
|
||||
(consumer-key per-request bearer + missing-key precondition + 502→`BifrostHandshakeFailed`, respx-mocked), then
|
||||
`endpoint_for_plane` → dispatch-layer op-feed → CLI/TUI/web triggers → live smoke. althing monitor armed.
|
||||
|
||||
**(2026-06-16 PM) — BIFROST REPINNED 0.7.0→0.8.0 (wire v0.5→v0.6).** The
|
||||
memory `search` scope filter was split into `scope_all` (AND/intersection) +
|
||||
@@ -255,6 +265,8 @@ decision. Captures rationale that won't be obvious from code alone.
|
||||
|
||||
- `[2026-06-18]` **FULL-COVERAGE proof — verbose-persona memory works under Stage 2 (v0.36.0).** Re-smoked `ratatoskr:sindra-probe` (sindra's theatrical prompt; FRESH agent + end_user `verbose-v2` to dodge the WT promotion-dedup): the high-volume turn promoted the user fact CLEANLY (not a meta-description) and cold-recalled @ 0.694. Confirms `:8081` is on v0.36.0 and closes the verbose-persona caveat end-to-end. Then started `ratatoskr-web` (`:8765`, consumer key, `ratatoskr:sindra` in the picker) for the operator's Sindra session — **persona + debug only; the web client does NOT bind to `:8391` (#17 unbuilt), so no memory persistence in the web chat** (memory-enabled chat is the #17 build, or a manual bound session).
|
||||
|
||||
- `[2026-06-18]` **Tier-3 persona_state is a Worldtree limitation (not ours); sindra → thoughtful-character.** The web Persona-pane 404 ("persona not available") = `persona_state` hard-404s ALL Tier-3 (colon-id) agents by design (`api.py:1220`); a persona block in the define doesn't help (endpoint short-circuits before the row). Pinged worldtree-dev on the Tier-3 persona_state roadmap (thread `01KVCR6P…`) + de-uglied our web pane (`index.html loadPersona`) to render a clear message (v0.17.7). Separately switched `ratatoskr:sindra` to the `thoughtful-character` role (→ `mistral-small-4-reasoning`) via DELETE+redefine (kept her prompt; added an inert persona block — inert because the pane's 404 is endpoint-side + we don't bind affect). Tier-3 persona/affect observability is gated on BOTH WT shipping Tier-3 persona_state AND our #17 affect-binding.
|
||||
|
||||
_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
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "ratatoskr"
|
||||
version = "0.17.6"
|
||||
version = "0.17.7"
|
||||
description = "Worldtree Conversation API debug TUI — multi-pane observability dashboard"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.12"
|
||||
|
||||
@@ -704,7 +704,20 @@ async function loadPersona(agentId) {
|
||||
renderPersonaPane(snap);
|
||||
setPersonaStrip(snap);
|
||||
} else {
|
||||
$("pane-persona").innerHTML = `<div class="empty">persona not available (HTTP ${esc(r.status)})</div>`;
|
||||
let code = "";
|
||||
try { code = (await r.json()).error_code || ""; } catch (_) {}
|
||||
let msg;
|
||||
if (r.status === 404 && code === "persona_not_configured" && agentId.includes(":")) {
|
||||
msg = "persona telemetry isn't exposed for Tier-3 (consumer-defined) agents on this Worldtree yet — " +
|
||||
"the agent still responds in character; only this affect / OCEAN readout is gated.";
|
||||
} else if (r.status === 404 && code === "persona_not_configured") {
|
||||
msg = "this agent has no persona configured.";
|
||||
} else if (r.status === 403) {
|
||||
msg = "persona telemetry requires the persona.read scope.";
|
||||
} else {
|
||||
msg = `persona unavailable (HTTP ${esc(r.status)}${code ? " · " + esc(code) : ""}).`;
|
||||
}
|
||||
$("pane-persona").innerHTML = `<div class="empty">${msg}</div>`;
|
||||
}
|
||||
} catch (e) {
|
||||
$("pane-persona").innerHTML = `<div class="empty">persona fetch failed</div>`;
|
||||
|
||||
Reference in New Issue
Block a user