Release · July 1, 2026 · v0.6.55
What's new
Jul 1 (0.6.55) hardens agent discipline when screenshots are attached:
exxat-image-ia-gate records the upload on submit; exxat-brief-gate escalates with
IA-only + brief-first messaging on the next design-critical write. Onboarding step 1 hides sidebar and site header;
step 2+ shows a live preview. Typography fixes darken --muted-foreground, keep helpers at
text-sm, and drop muted opacity hacks on nav and breadcrumbs.
Jun 30 (0.6.53) shipped the 978/978 axe gate, ScrollRegion primitives,
and Google Antigravity .agents/ mirror — still the accessibility floor on every upgrade.
Exam lock · 0.6.50 — Timed delivery shell: inset question card, timer, tools — no sidebar, ⌘K, or Leo.
0 · Agent context + onboarding · 0.6.55
Screenshots are IA — not pixels.
Uploaded mockups inform information architecture only. The new beforeSubmitPrompt hook writes a
short-lived flag when a turn includes an image; the brief-gate then appends an IA-only escalation on the next
design-critical write — so agents cannot silently pixel-copy chrome. Constitution + ux-discovery rules carry the
same mandate; exxat-ui doctor smoke-tests the pipeline end-to-end.
Step 1 is focus mode
Sidebar and site header hidden on the welcome step; breadcrumb chrome returns from step 2 with a live nav preview.
Welcome to Design OS
Onboarding title reads as Design OS — not a generic product welcome. Ivy wordmark on the sidebar B2 lockup uses font-heading.
Readable meta copy
--muted-foreground darkened; helper/description text stays text-sm; nav and breadcrumb opacity hacks removed.
Release gates enforce parity
pnpm release:gates runs agent:context:validate — hooks, rules, and Claude mirrors must match before publish.
0a · Accessibility ship · 0.6.53
978 scans. Zero violations.
The ship matrix runs 163 routes × six variants (desktop light/dark, Windows high contrast,
reflow-320) with axe-core + Playwright. Pass means zero WCAG 2.x AA violations — not a Lighthouse spot-check on one page.
Fixes belong in packages/ui primitives so every consumer inherits them on upgrade.
Component-level fixes
scrollable-region-focusable and color-contrast failures resolved in shared scroll + badge chrome — not per-route doc previews.
Markdown receipts
Every gate run writes axe-a11y-summary.json + axe-a11y-report.md under .axe-reports/.
Inline agent workflow
Accessibility skills run axe + read the report in the main agent — no sub-agent dispatch.
Antigravity parity
pnpm sync-antigravity mirrors Cursor rules/skills to .agents/ with slash-command workflows.
I · Hub table filters
Every column can filter.
Before 0.6.50, only columns with an explicit filter: block appeared in Add filter.
Now cellKind on each column definition drives the filter type — person, status, rating, progress,
currency, numeric range, date range, or text — and the toolbar chips use the same runtime as Table properties.
Add filter lists all columns
Data columns with a cellKind show up even when you never wrote a filter: block.
Person pickers from row data
derivePersonFilterOptions builds the avatar list from the hub dataset — not a hard-coded mock array.
Chips match Properties
Range sliders, date windows, and rich option previews in the toolbar mirror the Properties sheet controls.
One filter bag
Table, list, board, and dashboard views read the same useTableState filters — change once, every view follows.
II · Component catalog
Live hub previews — not sandboxes.
The dogfood catalog split into list + details. Hub primitives (DataTable, KPI strip, board cards) render the
same reference tables you ship in Library — including the column-types rule demo at /column-types-demo.
Side panels use FloatingSheetPanel (no overlay bleed, no sharp-corner Sheet chrome).
III · Exam lock · 0.6.50
Assessment delivery — no hub chrome.
Timed exams are not list hubs. ExamLockTemplate owns the full viewport: brand
bg-sidebar canvas, inset question card, transparent app header (title, timer, tools, avatar),
and card-top progress. App.tsx omits sidebar, ⌘K, Ask Leo, and system banner on
/exam-lock.
Question renderer
One switch routes stem + body by type — shared nav, progress, and keyboard submit.
Native figure dialog
Stem images open in <dialog> with DS tokens — not a bespoke modal stack.
Enter / Esc parity
Submit and cancel pair inline Kbd hints with <Shortcut> bindings.
Showcase route
/design-os/exam-lock demos the full delivery loop for design review and QA.
Focus ≠ hub (P9)
Do not put exam delivery inside ListPageTemplate. Register suffixes in
lib/exam-lock-shell.ts; agents load exxat-focus-workflow before authoring.
IV · Focus workflow · 0.6.50
One task — sidebars off.
Create-question and short compose flows use FocusWorkflowTemplate: primary + secondary
sidebars hidden via isSidebarHiddenPath, but ⌘K and Leo stay available unless the product
opts out. Reference: /library/new and /design-os/focus-workflow showcase.
V · Library secondary panel · 0.6.49
Folder labels wrap.
Long folder names in the Library scope rail no longer truncate or overlap the next row. Rows use
h-auto min-h-8 with top-aligned chrome; the active highlight grows with the label.
On /library/new, the focus shell keeps a compact icon scope rail while the primary sidebar is hidden.
Primary + secondary rails
Expanding the main sidebar while a scope rail is open collapses the secondary panel to its icon strip — both rails no longer fight for width on narrow laptops.
VI · Column cell primitives
Pick the right cell — and filter.
The table-column-cells pattern now documents which primitive belongs on each data point — person avatar column,
status badge, progress bar, currency, rating — and how each cellKind wires into filters.
Agents load exxat-table-column-cells instead of inventing bespoke filter markup.
Person columns
Avatar + name + email in tables; filter picker lists people from the hub rows.
Status + badge columns
Shared list-status badges; filter dropdown matches chip vocabulary.
Progress + rating
ProgressCell and star ratings filter as numeric ranges — not free-text search.
Date + currency
Date-range control and numeric bounds reuse the same toolbar chip shell.
VII · Agent context shipped
Rules + skills for tables.
table-column-cells-pattern.md, focus-workflow-pattern.md,
exxat-table-column-cells.mdc, exxat-focus-workflow.mdc, and consolidated skills
(exxat-kpi, exxat-overlays, exxat-sidebar-nav) sync to consumer apps
via exxat-ui sync-extras. When a PM asks for a placements column or an exam screen, the agent
maps to documented templates — not a one-off div stack.
What this means in review
Filter chips, person pickers, and column types should match Library reference — agents cite
apps/web/docs/table-column-cells-pattern.md and the hub table in
library-table.tsx, not screenshots pasted into chat.
VIII · Polish & fixes
Small things that blocked.
Slider thumbs no longer remount mid-drag (key={index} on thumbs). Dev toolchain deps patched
(vite, vitest, hono, ws) via pnpm overrides — no runtime API change, cleaner Dependabot posture.
Slider drag fix
Catalog range demos and Properties sliders stay draggable end-to-end.
No raw Sheet in catalog
Side panels demo FloatingSheetPanel — matches production overlay rules.
React Doctor 100
Reference app clears react-doctor warnings on filter + catalog surfaces.
Still no toasts
Feedback stays on banners, inline status, and dialogs — Sonner remains gone.
VII · Day by day
The arc of the sprint.
0.6.55 — Image IA gate + onboarding chrome
exxat-image-ia-gate + brief-gate escalation; step 1 hides sidebar/header; typography and contrast fixes; agent-context validation in release gates.
0.6.53 — 978/978 axe ship pass
ScrollRegion + contrast fixes at the primitive layer; pnpm a11y:axe:all gate; Google Antigravity .agents/ mirror.
0.6.50 — Filters + exam lock + catalog
cellKind filter stack; ExamLockTemplate + question types; FocusWorkflowTemplate showcase; catalog live hub previews; agent context (table cells, focus workflow, KPI/overlays skills).
0.6.49 — Library folder wrap
Multi-line folder labels in the secondary panel; compact focus-shell scope rail; primary + secondary sidebars share width without overlap.
May 26–Jun 2 · 0.6.27–0.6.34
Onboarding wizard, four-app switcher, Properties compact rail, Settings tiles, SidebarNavLabel, and upgrade UX — see spring changelog ↓.
VIII · Semver changelog
0.6.55 → 0.6.53
Engineering source of truth: packages/ui/RELEASES.md. Summaries below are designer-facing;
upgrade with pnpm add @exxatdesignux/ui@0.6.55 then npx exxat-ui upgrade — restart Cursor so hooks reload.
0.6.55 · Jul 1
- Added — Image IA gate.
exxat-image-ia-gate.mjsonbeforeSubmitPrompt; brief-gate escalates with IA-only + brief-first copy when a screenshot was attached. - Added — Onboarding chrome store. Step 1 hides sidebar and site header; preview from step 2; title Welcome to Design OS; Ivy wordmark on sidebar B2 lockup.
- Fixed — Typography & contrast. Darker
--muted-foreground; helpers staytext-sm; removed/60//70muted opacity on nav, breadcrumbs, and table cells. - Fixed — Agent context. Constitution + ux-discovery IMAGE blocks; sessionStart IA reminder;
agent:context:validatein release gates;exxat-ui doctorsmoke-tests image escalation.
0.6.54 · Jul 1
- Fixed — Publish gates.
agent:context:validatewired intopnpm release:gates; Design OS shell dependency sync before tarball.
0.6.53 · Jun 30
- Added — Axe ship gate. 978/978 scans pass;
ScrollRegion,BadgeAi, Leo prompt chips;pnpm a11y:axe:reportmarkdown receipts. - Added — Antigravity mirror.
.agents/rules, skills, workflows viapnpm sync-antigravity.
0.6.50 · Jun 23
- Added — Exam lock shell.
ExamLockTemplate, MCQ/T-F/fill-blank/essay renderers, stem figures, timer header, color-mode toggle;/design-os/exam-lockshowcase; full chrome strip viaisExamLockPath. - Added — Focus workflow.
FocusWorkflowTemplate,/design-os/focus-workflowshowcase,focus-workflow-pattern.md+exxat-focus-workflow.mdc. - Fixed — Hub table filters. Add filter lists every data column via
filterableColumns+resolveColumnFilter— not only columns with explicitfilter:blocks. - Fixed — Filter chips. Person pickers, range sliders, date-range, and rich option previews in the toolbar (
filterFieldContextfrom row data). - Fixed — Slider. Thumb no longer remounts mid-drag.
- Added — Column filter stack.
cellKindpresets +FilterPersonOptionList, range/date controls. - Changed — Catalog. List + details split, live hub previews,
/column-types-demo;FloatingSheetPanelfor side panels. - Changed — Agent context. Table-column-cells + focus-workflow patterns; consolidated KPI/overlays/sidebar-nav skills; 50 rules in consumer extras.
0.6.49 · Jun 17
- Fixed — Library folder tree. Multi-line labels wrap with top-aligned chrome; active highlight follows expanded row height.
- Changed — Library focus shell. Compact icon scope rail while primary sidebar is hidden on
/library/new. - Changed — Sidebar width. Expanding primary sidebar (⌘B) collapses secondary panel to icon strip so rails don't compete.
VIIIb · Earlier spring releases
0.6.27 → 0.6.34
May 26–Jun 2 shell polish — sidebar labels, Properties rail, Settings tiles, upgrade UX.
Upgrade path for these lines: pnpm add @exxatdesignux/ui@0.6.34 then npx exxat-ui upgrade.
0.6.34 · Jun 2
- Fixed — Vite scaffolds boot.
sidebar-nav-labelshim,SwitcherProductEntryimport, router-compat navigation (no invalid second args). - Fixed — Landing sync.
landing:syncsemver-sorts and patches What's new rows viapatchWhatsNew. - Changed — product-framework@0.1.6.
exxat-design-osonProduct; scaffoldpnpm.overridesuntil transitive install catches up.
0.6.33 · Jun 2
- Fixed — Settings appearance tile size.
labelPlacement="below"+ default density no longer usesaspect-square w-fullpreviews. - Fixed 96px (
size-24) preview wells in aw-fitrow; column count follows option count (Theme/Text size use 3 cols, not 4). - Properties compact rail unchanged (
density="compact"stays on the sheet only).
0.6.32 · Jun 2
- Fixed — Settings appearance density. Reverts
density="compact"on Theme / Contrast / Text size insettings-appearance-card.tsx. - Compact caption-below rail remains on Table Properties (view type, row height, export format).
0.6.31 · Jun 2
- Changed — Upgrade UX matches fresh install.
exxat-ui upgradeprints the same receipt ascreate-exxat-app. exxat-ui sync-extrasquiet by default on TTY; auto-runs upgrade when shell drift is detected.- Fixed manual
sync-extrasafter a bump — no 100+ file lines + separate upgrade step. builder-onboarding.tsxadded toexxat-ui upgradeauto-port list (prism/one skip nav builder step).
0.6.30 · Jun 2
- Added —
SelectionTileGridcompact rail for Properties view type + Export format (icon well + caption below). - Added — View type overflow —
inlineVisibleCount={4}+ More menu; overflow selection keeps ⋯ + label active. - Added —
HorizontalScrollRegion/HorizontalScrollControlsfor dense toolbars and tab strips. - Changed view-type labels shortened (Table, List, Board, … — dropped “view” suffix).
- Changed —
PageHeadercollaboration — title, face rail, actions on one row; subtitle on row two. - Changed —
KeyMetricsinsight — description clamped to two lines. - Fixed Properties sheet fourth view-type tile clipping in the 20rem panel.
- Fixed page header title wrap (stale
globals.cssoverrides removed).
0.6.28 · May 29
- Added —
SidebarNavLabel— wrap on expanded rail; icon rail still hides labels + uses tooltips. - Added —
exxat-sidebar-nav-labels.mdcvendored viasync-extras. - Fixed sidebar nav ellipsis (
truncateremoved;globals.cssenforces wrap on[data-sidebar-nav-label]). - Fixed —
ensure-distrebuilds when dist is missingSidebarNavLabel.
0.6.27 · May 29
- Fixed — Consumer install / upgrade hardening.
postinstall+create-exxat-apprunexxat-ui upgrade(globals, app-store shim, vite dedupe, product-authoring libs). - Fixed —
exxat-ui upgradeskips missing template paths instead of crashing. - Fixed —
exxat-ui doctorflags stale@source …/ui/src, missing product-framework, forked app-store, postinstall wiring.
IX · The full inventory
More than fits one page.
The Jun 17–23 hub-filter push on top of the May 26–Jun 2 platform work. Below is UX-facing inventory from 0.6.0 through 0.6.50. Patch-level detail for 0.6.49–0.6.50 is in the changelog section above.
Platform & routing
@exxatdesignux/product-frameworkpublisheddefineProduct()+registerProducts()- Four-app switcher (Prism, One Schools, One Sites, Custom)
- URL-is-truth product adoption on direct visits
productPersistKey()— no cross-app filter leaks- Custom suffix slugs (
/assessment/*) - Library under product roots + back-compat alias
- First-visit → onboarding; then default dashboard
- Custom nav active state at runtime
- Empty default tenant catalog (no seeded Assessment)
Builder authoring
- Product Studio — catalog sync, route roots, checklist
- Add product CLI + shipped catalog import
tenant-products.jsondev sync (no reload trap)- Builder mode on in dev; end-user mode in prod builds
- Authoring hard floor —
import.meta.env.DEV - Wordmark editor aligned with
ExxatProductLogo - Logo cascade: full → suffix → wrap
- Suffix clamped to 24 chars in registry
- Appearance card — brand tint on neutral card
- Restart onboarding from Profile settings
Onboarding wizard
- 5 steps with live sidebar preview
- 3-card picker — ring selection, no black fill
- Built-ins lock wordmark + brand colour
- Re-pick product without stale preview
- 80-icon FA matcher from label text
- Suggested nav rows (Library, Reports, …)
- Enter / Esc workflow shortcuts
- Leaner copy — no ALL CAPS eyebrows
- BlobBackground clip fix at wizard bottom
- Per-device completion flag
Shell & hubs
- Real starter dashboard (KPI + charts, not marketing cards)
SidebarNavLabel— wrap, don't truncate (0.6.28)SelectionTileGridcompact Properties rail (0.6.30)- Settings appearance fixed-size tiles (0.6.33)
HorizontalScrollRegionfor dense chrome (0.6.30)- Secondary panel OKLCH brand elevation
SidebarDrillInin package barrel- DataTable fills canvas when columns are narrow
- Seven hub view types parity
cellKindfilter stack — person, range, date chips (0.6.50)ExamLockTemplate+ question primitives (0.6.50)FocusWorkflowTemplate+ focus-shell rails (0.6.49–50)- Catalog live hub previews (0.6.50)
- Org settings product list for end users
- Profile / Organization settings split
- Product switcher with mark colours
- HC polish on panel, tabs, ToggleSwitch
AI & consumer DX
- Brief-gate hook — ask before design-critical writes
exxat-senior-ux+ discovery protocol- 50 binding Cursor rules via
sync-extras - 28 AI skills vendored to consumer apps
exxat-table-column-cellsskill + rule (0.6.50)exxat-product-contextruleexxat-domain-contextskillexxat-ui upgrade— port shell files + install-style receipt (0.6.31)- Quiet
sync-extras+ auto-upgrade when shell drifts (0.6.31) exxat-ui doctor— drift detection- Postinstall auto-upgrade on fresh installs (0.6.27)
- Zero-warning
pnpm devon scaffold
Quality & packaging
- Sonner removed — no-toast guardrail
- Package tarball ~50% smaller (no source maps)
- Tailwind self-scan — scaffolds styled on install
- Persisted-state no-op write guard
- Resize handles off tab order (WCAG 2.4.7)
react-router-dompeer + built-inThemeProvider- Consumer rules globs fixed for Vite apps
- RELEASES.md renamed (no 120 KB in node_modules)
- 222 tokens · 101 components in package (0.6.50)
- Builder onboarding handoff doc shipped