v0.20.2
Fixed
The A2UI memory inspector ships against a real CarHost.app renderer for the first time. Three wire-schema bugs (silent failures the unit tests couldn't see) and one UX pass.
- Tabs rendered empty — A2UI v0.9's Tabs component takes two parallel arrays (
tabs: [{id, label}]for metadata,children: [contentId]for content in matching order), per the renderer contract inapps/car-a2ui-renderer/.../A2uiRenderer.swift:595. The previous shape (a singlechildrenof nested tab-descriptor dicts) left the tab bar entirely blank — the renderer iterated nothing and showed no labels. - Badge rendered as an empty pill — Badge's visible value lives on
text, notlabel(A2uiRenderer.swift:675). Withlabel, the renderer read empty string and drew the capsule with no content. Also pinned a literaltonebecause the renderer readsobj["tone"].asStringdirectly —{path: …}references don't resolve there. ListwithforEach/itemTemplatedid nothing — the v0.9 basic-catalog renderer mapsListtorenderStack(.vertical)(A2uiRenderer.swift:465); there's no template iteration. Dropped the dynamic recent-cycles list in favor of static stays-current Texts. A future surface revision can declare fixed slot Texts bound to indexed paths if a visible cycle log is desired.
Changed (UX)
Inspector header redesigned to read like neo --version instead of supervisor jargon:
- Header now mirrors
neo --version: personality quote (fromconfig/beats/neo_matrix.yaml, stage-appropriate), repo display name (e.g.Parslee-ai/neofrom the normalized git remote — not the SHA),neo X.Y.Zline, and a learning-stage summary (Stage: Glitch · Memory 30.4% · 117 patterns · 0.58 avg confidence). The CLI banner and the inspector header now read the same stage info —a2ui._STAGE_TABLEis kept in lockstep withsubcommands.show_version. - Observer tab no longer redundant with the header — dropped the "Idle, watching for patterns" status line that just restated the Observer card below it. Header stays summary-only; Observer card carries the operational detail (badge, last-check timestamp, cadence, action buttons).
- Button labels say what they do:
Kick→Run now,Stop→Pause. The wire action names (kick,stop) are unchanged so handlers don't need to rename — only the user-visible label flipped. - Memory tab gains plain-English descriptions:
50 patterns — stable techniques and conventions,58 reviews — recent observations being distilled into patterns,9 constraints — hard rules from project docs. Pluralization handled (1 patternvs2 patterns,1 fact still being validatedvs2 facts). Scope line reads as67 specific to this project · 50 from your global knowledgeinstead ofproject=67, global=50.