• feat(web): Claude Design console — 3-column wire monitor (v0.20.0)

    vh released this 2026-07-06 21:50:22 -07:00 | 148 commits to main since this release

    Adapt the Claude Design "Ratatoskr Console" prototype into the web SPA:
    translate out of the .dc.html dialect (x-dc / sc-if / sc-for / {{}} /
    DCLogic / external _ds CSS) into single-file / no-CDN / vanilla, and wire
    all real /api/* fetch + SSE into its DOM. New 3-column command-console
    replaces the tabbed telemetry layout; endpoint set + SSE vocab unchanged.

    • left engine-ticker rail: DEBUG + ADMIN + tool/turn-lifecycle merged into
      one timeline (tickerAdd); tools-armed chips; full-detail Bifrost rail pane
      (endpoint / connected / consumer / caps / tools)
    • center conversation: per-turn INLINE chain-of-thought
    • right resizable affect console: dominant / canonical-mood centerpiece;
      bipolar PAD faders EACH with a turn-to-turn delta + sparkline; P×A mood
      orbit; relations metric rows; canonical directive
    • light / dark theme toggle (dark default; full token override —
      surfaces + fg + borders + accent-as-text)
    • inlined data-URI favicon (downscaled 1024->64px), kills /favicon.ico 404
    • ticker spine re-anchored to a content-height wrapper (was scrolling out of
      view on auto-scroll)
    • honest-shape (INV-001): dominant-emotion shows a real OCC emotion (Tier-1)
      or the canonical mood word (Tier-3), never a fabricated one; affect-derived
      grid drops non-emitted metrics (intensity / decay-tau)

    All server routes unchanged. web_debug_surface.contract.md amended for the
    presenter renames (renderBifrostState->renderBifrost, renderAffectPane->
    renderConsole, setPersonaStrip removed).

    Verified: pytest tests/test_web_* (84 passed) + node Playwright end-to-end
    against personal :8081 (session open, Sindra seeded greeting, live turn SSE,
    affect console + relations + bifrost detail, theme toggle, PAD deltas,
    no favicon 404).

    Downloads