Develop stays read-first: each artifact whose source is a repository
path gains an Open in editor action routed through a path-validated
main-process handler (shell.openPath), instead of an in-app write path.
Persona and prompt-assembly sources open the governing cordis.yml or
source file directly.
Every sidebar section now shares the same horizontal inset, so the
primary action, module nav, search field, and session rows start and
end on identical lines with one control height and one radius. Topbar
controls share one row height, and the round send-button style no
longer leaks onto the cancel button.
fixing-accessibility: expandable rows expose aria-expanded/controls, user
messages become keyboard-operable buttons, pane dividers and the composer
gain accessible names, the live status row announces politely, the busy
form sets aria-busy, feedback failures render inline next to the form,
and the muted/faint text tiers rise to AA-viable contrast.
fixing-motion-performance: composer autosize moves to CSS field-sizing
(dropping the per-keystroke measure/write cycle) and streaming scroll
writes coalesce per frame while direct user actions stay synchronous.
baseline-ui: data columns use tabular numerals, headings balance and
prose wraps pretty, and z-index joins the token scale.
improve-ui: straggler radii and control heights land on the declared
size scale (radius-xs joins the ramp).
fixing-metadata: the document language follows the active locale.
A finished turn whose persisted JSONL had not flushed yet left the live
turn on screen; the next prompt then patched its content into the stale
skeleton, so the new message rendered under the previous user bubble.
Key each live turn and rebuild the skeleton on mismatch, and poll the
persisted trace after a lagging read so the conversation converges
without waiting for a user action. Module nav rows also collapse to one
line at the primary-action control height.
Replace the full-innerHTML render loop with a static shell plus
per-region updates, so composer drafts, fold state, focus, and scroll
survive streaming turns. Fold session events into one trace graph
consumed by Chat, Trajectory, Waterfall, and the shared inspector
drawer, with live ACP updates patched into a keyed live-turn region.
Align the visual system with a tokenized design spec: a 4px spacing
base with fixed control/row height steps, foreground-derived text
tiers and borders (color-mix), neutral interaction overlays, tiered
motion durations with a reduced-motion collapse, hover-revealed
scrollbars, and drawer-aware layout elasticity. Localize trajectory
role chips and row previews.
The renderer entry (app.ts) joins the coverage exclude list as a
self-executing DOM bootstrap: jsdom lifecycle specs exercise its
behavior, and extractable logic lives in covered modules
(trace-graph.ts, renderer-content.ts).