mirror of
https://github.com/razzant/ouroboros.git
synced 2026-08-06 09:09:48 +00:00
Rendered markdown and the Skills review history/findings disclosures adopt one .ui-rich-content contract (reserved list gutter, anywhere-wrapping, no marker bleed outside the card); chat-bubble messages are deliberately untouched. The skill-review bubble gets a symmetric bottom timestamp inset. Live-line disclosures toggle from the WHOLE non-interactive row surface via the pure exported guard liveLineRowToggleKey (nested interactive elements and active text selection never toggle; focus returns to the real toggle button and survives the full-output re-render; the button path with Enter/Space/ aria-expanded is unchanged), with a larger expand label and cursor affordance. Project/side-chat composers reuse the main chat's absolute dock contract (same bottom fade, --chat-input-reserve transcript padding, mobile safe-area inset — no second fade layer). Widget charts render in a bounded .widget-chart-canvas box (clamp 260-360px) and a data-only re-render adopts the live chart wrapper (Chart.js watches the canvas PARENT for responsive resize) updating chart.data in place with fresh config attributes mirrored — no destroy/recreate flicker. Poll refetches are SWR: content stays with a thin 'refreshing' indicator (declared loading label reused), 'loading' only when there is nothing to show, and a failed background refetch keeps the stale content while the status reports the error. New node tests pin the disclosure guards (token-exact stubs); the declarative Playwright smoke gains a markdown fixture with geometry asserts, a bounded-canvas assert, and a consumer-flow poll test proving canvas identity survives a live refetch. CREATING_SKILLS.md documents the observable 'refreshing' status state. Gate: triad+scope external review PASSED 2x with zero criticals ($19.91/$19.67; run 1 was an advisory parse_failure infrastructure block, $0). Adversarial subagent round + final codex review applied. Browser suite 12/12, node 19/19, full pytest green (non-serial + serial). Carried phase-2 verifications: the Skills submit button click created a REAL /api/tasks task on a live server, and a secret-shaped token logged through the live root logger is masked in server.log. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| ARCHITECTURE.md | ||
| CHECKLISTS.md | ||
| CREATING_SKILLS.md | ||
| DEPLOYMENT.md | ||
| DEVELOPMENT.md | ||