# @exxatdesignux/ui — upgrade notes (bundled)

> **Agents:** read this before porting shell after `pnpm add @exxatdesignux/ui@…` / `npm install`.
> Default is **install only**. Run `exxat-ui upgrade` only when the notes (or the user) ask for shell sync.
> Binding rule: `exxat-consumer-package-upgrade`. Skill: `exxat-package-upgrade`.
>
> This file is the **latest 5 releases** only. Full history:
> https://github.com/ExxatDesign/Exxat-DS-Workspace/blob/main/packages/ui/RELEASES.md
>
> Also available as `docs/exxat-ds/latest-release.md` after `exxat-ui sync-extras`.

## 1.6.5 — 2026-09-22

DataTable group dividers read grouped column values correctly and match row
cell vocabulary.

### Fixed

- **People-rail grouping.** Grouping by Reviewers (or any `people-rail`
  column) no longer renders `[object Object]` in the divider. The band shows
  the same avatar rail as data rows.
- **Group divider styling.** Status groups tint with the badge fill token;
  pill/status headings render as badges; record count is a numeric badge on
  the right. Neutral columns stay on grey.
- **Pinned column seams.** Vertical borders between pinned columns (including
  on group rows) match data rows.

### Changed

- **Generated starter** pins `packageManager: pnpm@10.33.0` so consumer
  scaffolds do not pick up pnpm 12 and block esbuild during install.

### Upgrading from 1.6.4

```bash
pnpm add @exxatdesignux/ui@1.6.5
npx exxat-ui upgrade
npx exxat-ui doctor
```

## 1.6.4 — 2026-09-04

Consumer `exxat-ui upgrade` wires Design OS routes and nav without editing
the profile menu.

### Changed

- **Design OS upgrade is profile-menu-safe by default.** `upgrade` mounts
  `designOsProductChildRoutes()` and `buildDesignOsNavLayout()` only.
  `components/utility-user-menu.tsx` stays untouched.
- **`exxat-ui doctor`** treats routes + nav wiring as sufficient. Open
  `/design-os/design-system` directly, or add your own entry point.
- **Opt-in profile row:** `exxat-ui upgrade --design-os-profile-menu`.

### Upgrading from 1.6.3

```bash
pnpm add @exxatdesignux/ui@1.6.4
npx exxat-ui upgrade
npx exxat-ui doctor
```

## 1.6.3 — 2026-08-27

Record detail and focus routes needed breadcrumb chrome and header actions
that stay reachable after scroll without a second sticky row.

### Added

- **Utility bar Breadcrumb mode.** Record detail routes show the ancestor
  trail in the bar (Ask Leo stays rightmost). Back mode unchanged for focus
  flows with `siteHeader.back`.
- **PageHeader scroll relocation.** On Back / Breadcrumb chrome, header
  actions port beside Ask Leo when the page scrolls.
- **`DropdownButton`.** Menu trigger (and optional split primary + chevron)
  across default, outline, secondary, ghost, and link variants.

### Fixed

- Split dropdown button height and fused corner rendering in `ButtonGroup`.
- Button default size tier aligned to h-8 for toolbar parity.

### Upgrading from 1.6.2

`pnpm add @exxatdesignux/ui@1.6.3`, then `exxat-ui upgrade` for shell paths
(`utility-bar-slot`, `site-header`, `app-shell-providers`,
`page-header-scroll-actions-bridge`).

## 1.6.2 — 2026-08-24

Customer chats were opening at ~32% context on a simple page. Cursor
always-injects `AGENTS.md` plus every `alwaysApply` rule. Five always-on
essays plus two fat handbooks were the cost, not the page.

### Fixed

- **One always-on rule.** Only `_constitution.exxat-ds.mdc` is
  `alwaysApply: true`. Product, routing, discovery, and copy detail attach
  by glob or on demand. The brief-gate hook still blocks a new surface
  without a brief.
- **Create-page path.** Hooks tell the agent to run the surface router and
  post the brief. They no longer say to load `exxat-senior-ux` or
  `exxat-token-economy` unless IA is undecided.
- **Smaller consumer catalog.** `better-*`, `shadcn`, and `graphify` stay
  in the DS monorepo. Product `exxat-*` skills still ship.

### Added

- **Campus workspace chrome.** New homes share one greeting row: program
  picker and Administrator as matching pills on the right. Campus, Campus
  v3, and Spotlight v3 keep a **Workspace** section for People and Courses;
  Administrator opens from the header, not Your App. Program Admin scope
  (`All programs` / `3 programs`) stays in the accessible name only.

### Upgrading from 1.6.1

`exxat-ui sync-extras`, then start a new Cursor chat.

## 1.6.1 — 2026-08-24

`exxat-ui init` and `pnpm install` fail on pnpm 10+ with
`ERR_PNPM_IGNORED_BUILDS` for `esbuild`. pnpm no longer reads the `pnpm`
field in `package.json`, so the starter's `onlyBuiltDependencies` never
applied.

Cursor always-injects every file named `AGENTS.md`. The scaffold shipped
three fat copies (~292 KB) so a simple page task opened at ~32% context
before any product file.

### Fixed

- **pnpm 10/11 install.** Fresh scaffolds write `pnpm-workspace.yaml` with
  `onlyBuiltDependencies` (`esbuild`, `msw`, `sharp`, `unrs-resolver`)
  before `pnpm install`. `exxat-ui sync-extras` merges the same keys into
  existing apps without wiping `packages:` or `minimumReleaseAgeExclude`.
- **Agent token burn.** Skill folders no longer ship `AGENTS.md`. The Vercel
  compiled guide lives at `references/react-best-practices.md`. Consumer
  `./AGENTS.md` is a short pointer; the §-numbered manual is
  `docs/exxat-ds/handbook/agents-handbook.md` (on demand). `exxat-ui
  sync-extras` replaces the known 76 KB starter copy and `exxat-ui doctor`
  flags leftovers.

### Upgrading from 1.6.0

If install already failed, add `pnpm-workspace.yaml` (or run
`exxat-ui sync-extras` after this release), then `pnpm install`.

After `sync-extras`, **start a new Cursor chat**. The old fat `AGENTS.md`
files stay in the previous chat's context until you do.
