{
  "$comment": "Machine-readable rename/removal map for @ponchia/ui upgrades (classes, attributes, and tokens). Generated-by-hand from CHANGELOG BREAKING sections; consumed by docs/migrations/*.md and any codemod/sed recipe. 'safe' rules are mechanically rewritable (whole-token, no semantic change); 'manual' rules need human judgement (concept moved or removed, not a 1:1 rename).",
  "migrations": [
    {
      "from": "0.2",
      "to": "0.3",
      "summary": "Entire non-ui-* legacy vocabulary removed; everything is now under the .ui-* contract and the check-classes drift gate.",
      "safe": [
        {
          "old": "skip-link",
          "new": "ui-skiplink"
        },
        {
          "old": "site-nav",
          "new": "ui-sitenav"
        },
        {
          "old": "site-menu",
          "new": "ui-sitemenu"
        },
        {
          "old": "theme-toggle",
          "new": "ui-themetoggle",
          "prefix": true
        },
        {
          "old": "app-shell",
          "new": "ui-app-shell",
          "prefix": true
        },
        {
          "old": "app-rail",
          "new": "ui-app-rail",
          "prefix": true
        },
        {
          "old": "app-topbar",
          "new": "ui-app-topbar",
          "prefix": true
        },
        {
          "old": "app-toolbar",
          "new": "ui-app-toolbar",
          "prefix": true
        },
        {
          "old": "app-nav",
          "new": "ui-app-nav",
          "prefix": true
        },
        {
          "old": "app-panel",
          "new": "ui-app-panel",
          "prefix": true
        },
        {
          "old": "app-content",
          "new": "ui-app-content",
          "prefix": true
        },
        {
          "old": "app-main",
          "new": "ui-app-main",
          "prefix": true
        },
        {
          "old": "app-metrics",
          "new": "ui-app-metrics",
          "prefix": true
        },
        {
          "old": "app-metric",
          "new": "ui-app-metric",
          "prefix": true
        },
        {
          "old": "app-empty-state",
          "new": "ui-app-empty-state",
          "prefix": true
        }
      ],
      "manual": [
        {
          "old": "hero / project-* / post-card / essay-* / page-* / home-* / signal-panel / worklog-summary",
          "new": "the ui-* content layer",
          "note": "Long-form content: .ui-prose / .ui-quote. Cards: .ui-card. Layout: .ui-grid / .ui-stack. Site chrome: the ui-site* shell. No 1:1 mapping — re-compose with the content primitives."
        },
        {
          "old": "callout",
          "new": "ui-alert",
          "note": "Tone modifiers differ (.ui-alert--info/-success/-warning/-danger); re-pick the tone."
        },
        {
          "old": "metric-tile",
          "new": "ui-app-metric",
          "note": "Now scoped to the admin shell vocabulary; standalone stat usage should wrap in .ui-app-metrics."
        },
        {
          "old": "tag-list / tag",
          "new": "ui-tags / ui-tag",
          "note": "Compact variant .tag-list--compact → .ui-tags--compact; verify accent-on-accent contrast (see CHANGELOG 0.3.0 a11y fix)."
        }
      ],
      "codemod": "See docs/migrations/0.2-to-0.3.md for a ready-to-run ripgrep+sed recipe covering the 'safe' rules."
    },
    {
      "from": "0.3",
      "to": "0.4",
      "summary": "Additive colour-system release (ADR-0001); the default dist/bronto.css renders identically. No class or attribute renames. One orphan token pair removed.",
      "safe": [],
      "manual": [
        {
          "old": "--orange / --orange-soft",
          "new": "(removed — re-declare in a consumer :root override if referenced)",
          "note": "Orphan token pair: defined in the token mirrors but referenced by no shipped component and documented nowhere, and untiered under the new colour model. Removed under the CONTRIBUTING 'provably-unreferenced surface' exception. If you used it: :root { --orange: #a85f32; --orange-soft: rgb(168 95 50 / 0.13); }"
        }
      ],
      "codemod": "No class codemod needed (no renames). See docs/migrations/0.3-to-0.4.md; audit usage with: rg -- '--orange' ."
    },
    {
      "from": "0.4",
      "to": "0.5",
      "summary": "Adds the analytical-primitives suite (annotations, legend, marks, connectors, spotlight, crosshair, selection + the analytical.css roll-up); all additive/opt-in. Three breaking changes: the chart data key moved out of the report kit into the standalone Legends layer (`.ui-chart__legend`/`.ui-chart__swatch` removed); annotation arrowheads now render via the shared connectors geometry kernel (a small visual path change, no API change); and the marks/bracket-note rationed-accent tone was renamed `evidence`→`accent` to match the annotation/connector tone vocabulary (`.ui-annotation--evidence` stays — it's a marker variant, not a tone).",
      "safe": [
        {
          "old": "ui-chart__swatch",
          "new": "ui-legend__swatch"
        },
        {
          "old": "ui-mark--evidence",
          "new": "ui-mark--accent"
        },
        {
          "old": "ui-bracket-note--evidence",
          "new": "ui-bracket-note--accent"
        }
      ],
      "manual": [
        {
          "old": "ui.mark({ tone: 'evidence' }) / ui.bracketNote({ tone: 'evidence' })",
          "new": "tone: 'accent'",
          "note": "The rationed-accent tone option on the mark/bracket-note recipes is now 'accent' (was 'evidence'), matching ui.connector/ui.annotation. Do NOT rewrite ui.annotation({ variant: 'evidence' }) or the 'evidence' subject marker — those are a marker shape, not a tone, and are unchanged."
        },
        {
          "old": "ui-chart__legend",
          "new": "ui-legend",
          "note": "Also import '@ponchia/ui/css/legend.css' beside report.css, and wrap each entry's content as <li class=\"ui-legend__item\"> … <span class=\"ui-legend__label\">…</span>. The swatch's --chart-color/--chart-pattern inline contract is unchanged; the categorical --chart-N colour is also available via .ui-legend__swatch--N. See docs/legends.md."
        },
        {
          "old": "connectorEndArrow (annotations)",
          "new": "connectorEndArrow (unchanged API)",
          "note": "No code change needed. The function signature is identical; only the rendered arrowhead path differs slightly now that it shares the connectors geometry kernel. Re-baseline any exact-path SVG snapshot tests of annotation arrowheads."
        }
      ],
      "codemod": "rg -l 'ui-chart__legend|ui-chart__swatch' then s/ui-chart__swatch/ui-legend__swatch/g and rework the ul.ui-chart__legend wrapper into ul.ui-legend with li.ui-legend__item rows. See docs/legends.md."
    },
    {
      "from": "0.5",
      "to": "0.6",
      "summary": "Charting realignment. The local static bar-chart renderer (.ui-chart*) is removed — a chart needs scales + data binding, out of scope for the analytical layer. bronto is now a themeable target for Vega-Lite (@ponchia/ui/vega), the same tokens-as-data path as Mermaid/D2. The --chart-* data-viz palette, tokens/charts.json, and the .ui-legend layer are unchanged.",
      "safe": [],
      "manual": [
        {
          "old": "ui-chart / ui-chart__plot / ui-chart__bar / ui-chart__label / ui-chart__track / ui-chart__fill / ui-chart__fallback / ui-chart__caption",
          "new": "a Vega-Lite chart themed with @ponchia/ui/vega, or a token-themed inline <svg>",
          "note": "No 1:1 class mapping — the renderer is removed. For a real chart: import '@ponchia/ui/vega', pass brontoVegaConfig(theme) to vega-embed, and place the result in a <figure class=\"ui-report__figure\"> with a <figcaption class=\"ui-report__caption\"> and a <ul class=\"ui-legend\"> key (see docs/vega.md). For a frozen/print chart: hand-author an inline <svg> using the --chart-N palette tokens for fills. The --chart-value inline knob is gone; --chart-color/--chart-pattern remain on .ui-legend__swatch."
        }
      ],
      "codemod": "No codemod — the .ui-chart* renderer has no replacement class. rg -l 'ui-chart\\\\b|ui-chart__' to find call sites, then rebuild each as a Vega-Lite chart (@ponchia/ui/vega) or a token-themed inline <svg>. See docs/vega.md."
    },
    {
      "from": "0.6",
      "to": "0.7",
      "summary": "Contract-hardening release. tokens.dtcg.json now uses conforming DTCG 2025.10 structured values instead of CSS strings/null placeholders. Splitters gain an additive non-drag pointer path. Framework adapters and initModal are deprecated, but remain compatible throughout 0.7.",
      "safe": [],
      "manual": [
        {
          "old": "tokens.dtcg.json scalar color/dimension values and $value:null CSS-expression placeholders",
          "new": "DTCG 2025.10 structured typed values resolved per light/dark theme",
          "note": "Update tooling to read color objects ({ colorSpace, components, alpha, optional hex }) and dimension objects ({ value, unit }). Read tokens.json when the authored CSS var()/color-mix() expression is required. CSS-only shadow expressions are not part of the portable DTCG projection."
        }
      ],
      "codemod": "No source codemod. Update the DTCG reader at its JSON access boundary, then run npx --no-install bronto-ui-check against consumer source. See docs/migrations/0.6-to-0.7.md."
    },
    {
      "from": "0.9",
      "to": "0.10",
      "summary": "Readable tool/report defaults; retire framework adapters and controlled modal.",
      "safe": [],
      "manual": [
        {
          "old": "@ponchia/ui/react / @ponchia/ui/solid / @ponchia/ui/qwik / @ponchia/ui/svelte / @ponchia/ui/vue",
          "new": "@ponchia/ui/classes + @ponchia/ui/behaviors",
          "note": "Initialize vanilla behaviors in the host mount lifecycle and return cleanup; wrappers and peers are removed."
        },
        {
          "old": "initModal / data-bronto-modal / ui.modal({ open: true }) / bronto:modal:close",
          "new": "native dialog + initDialog",
          "note": "Use showModal/close and native cancel/close events; .is-open no longer opens a modal."
        },
        {
          "old": "global dot headings and compact text defaults",
          "new": "sans headings; explicit ui-display; productive tools and editorial reports",
          "note": "Review real screens and preserve intentional display titles. Reports use a reading measure and separate print typography."
        }
      ],
      "codemod": "See docs/migrations/0.9-to-0.10.md. Changes require consumer lifecycle and visual review; no blanket replacement is safe."
    },
    {
      "from": "0.10",
      "to": "0.11",
      "summary": "Readable supporting typography and container-aware evidence layouts.",
      "safe": [],
      "manual": [
        {
          "old": "viewport-based figure/report layouts",
          "new": "container-aware figure, decision-grid and actions layouts; intrinsic two-up comparisons",
          "note": "Keep the documented wrappers, verify narrow parents on wide screens and review print. New inline-size containment can change intrinsic sizing."
        },
        {
          "old": "uppercase mono explanatory labels and unconstrained superscript citations",
          "new": "sentence-case sans supporting text and a citation size floor",
          "note": "Review explicit consumer overrides by role, preserving intentional display and technical identifiers."
        }
      ],
      "codemod": "No automatic rewrite: review complete consumer tasks and docs/migrations/0.10-to-0.11.md."
    },
    {
      "from": "0.11",
      "to": "0.12",
      "summary": "Categorical palette with no accent slot, categorical identity tokens, runtime renderer tokens.",
      "safe": [],
      "manual": [
        {
          "old": "--chart-1 = var(--accent) / ACCENT from @ponchia/ui/charts",
          "new": "fixed hues; paint an emphasised mark with var(--accent) or brontoVegaAccent(theme)",
          "note": "ACCENT is removed. Charts that meant 'the brand' need an explicit accent encoding."
        },
        {
          "old": "--chart-seq-6",
          "new": "--chart-seq-1..5",
          "note": "Re-map six-bin sequential figures to five bins."
        },
        {
          "old": "brontoVegaConfig() framed plot, accent default mark",
          "new": "frameless plot, first categorical hue as the default mark",
          "note": "A spec's own config still wins; review dashboards that relied on the frame."
        }
      ],
      "codemod": "No automatic rewrite: see docs/migrations/0.11-to-0.12.md."
    }
  ]
}
