@adia-ai/adia-ui-forge 0.8.48 → 0.8.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adia-ui-kit-forge",
3
- "version": "0.8.48",
3
+ "version": "0.8.50",
4
4
  "description": "Maintain the adia-ui (@adia-ai) framework itself \u2014 author primitives and shells, run the A2UI generation pipeline and its corpus, review gen-UI quality, sweep QA, cut releases, deploy. The maintainer counterpart to adia-ui-kit-factory (the consumer/app-author plugin).",
5
5
  "author": {
6
6
  "name": "Kim",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adia-ui-kit-forge",
3
- "version": "0.8.48",
3
+ "version": "0.8.50",
4
4
  "description": "Maintain the adia-ui (@adia-ai) framework itself — author primitives and shells, run the A2UI generation pipeline and its corpus, review gen-UI quality, sweep QA, cut releases, deploy. The maintainer counterpart to adia-ui-kit-factory (the consumer/app-author plugin).",
5
5
  "author": {
6
6
  "name": "Kim",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog — adia-ui-kit-forge
2
2
 
3
+ ## [0.8.50] — 2026-08-23
4
+
5
+ ### Maintenance
6
+ - **Lockstep bump riding the v0.8.50 cut** (`scripts/release/check-lockstep.mjs`); the headline v0.8.50 work ships in @adia-ai/web-components (prose/verse sheet removal gh#1885 / PR #1918, input/search fill-default posture gh#1856 — see `packages/web-components/CHANGELOG.md#0850--2026-08-23`). Package-local changes are listed below.
7
+ - **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
8
+ - **`.codex-plugin/` touched in this release window** (1 file(s), e.g. `.codex-plugin/plugin.json`) — carried by the entries above.
9
+
10
+ ### Fixed
11
+ - **`skills/package-release` regenerates Codex plugin manifests in Step 4 (gh#1899, PR #1917)** — `release-pack.mjs` + `cut-procedure.md` gain the post-bump `build:codex-manifests` regen so `check:codex-manifests-fresh` stays green through a cut; `a2ui-maintenance` (`mcp-pipeline-ops.md`) and `primitive-authoring` (`api-contract.md`) references refreshed in the same window.
12
+
3
13
  ## [0.8.48] — 2026-08-23
4
14
 
5
15
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/adia-ui-forge",
3
- "version": "0.8.48",
3
+ "version": "0.8.50",
4
4
  "description": "Maintain the adia-ui (@adia-ai) framework itself — author primitives and shells, run the A2UI generation pipeline and its corpus, review gen-UI quality, sweep QA, cut releases, deploy. The maintainer counterpart to adia-factory (the consumer/app-author plugin).",
5
5
  "keywords": [
6
6
  "adia-ui",
@@ -59,9 +59,13 @@ MCP server restart, re-run `compose_from_chunks` for a fresh `state_id`.
59
59
  When the engine breaks expectations, fire `report_issue` with the most recent
60
60
  `state_id` (reporter: `llm` for agent self-fire, `user` for a human request).
61
61
  The record lands in the engine-internal telemetry store — scratch data for
62
- diagnosis. Anything worth durable tracking (a recurring pattern, a fix
63
- proposal) belongs in a GitHub issue or the PR description of the fixing
64
- change.
62
+ diagnosis. **[corrected 2026-08-23, ADR-0008 amendment]** that store is
63
+ `qa/findings/issues/<issue_id>.json`
64
+ (`packages/gen-ui/engine/compose/strategies/zettel/issue-reporter.js:10,26`,
65
+ `DEFAULT_STORAGE_ROOT`) — not the original `.brain/audit-history/issues/`
66
+ path, which was retired. Anything worth durable tracking (a recurring
67
+ pattern, a fix proposal) belongs in a GitHub issue or the PR description of
68
+ the fixing change.
65
69
 
66
70
  ## Validation checks
67
71
 
@@ -151,6 +151,8 @@ Any red → route via [`gates-catalog.md`](gates-catalog.md); fix at the source,
151
151
 
152
152
  **4d.5b. Regenerate catalog tiers + re-harvest the chunk corpus if it goes stale** (gh#1361, automated — this was a recurring manual rider before): `npm run build:catalog-tiers`, then `npm run check:chunks-fresh`; if that probe goes stale, `npm run harvest:chunks`. `tier-index.json` derives from the same post-bump catalog 4d.5 just refreshed, and the chunk harvester hashes `tier-index.json` as a harvest SOURCE — regenerating tiers without re-harvesting left `check:chunks-fresh` red on the next run, needing a manual rider commit both cuts it happened live: v0.8.39 (`72417beff`) and v0.8.40/CUT-0840-B (`d9ca8b323`, "Ran `npm run build:catalog-tiers` ... That regen staled `check:chunks-fresh` ... so re-harvested"). The re-harvest is CONDITIONAL on the freshness probe, not unconditional — a tier regen that produces a byte-identical index owes no re-harvest. `tier-index.json`, `packages/gen-ui/engine/corpus/manifest.json`, and `packages/gen-ui/engine/corpus/chunks/` all ride the release commit (Step 5 stages them).
153
153
 
154
+ **4d.6. Regenerate the Codex plugin manifests** (gh#1888, gh#1899): `node scripts/build/codex-manifests.mjs`, then `npm run check:codex-manifests-fresh` to confirm. Both plugins' `.codex-plugin/plugin.json` embed `version` from `.claude-plugin/plugin.json`, which the 4b bump just moved — same "derived artifact carries the lockstep version" class as 4d.5's genui catalog. Gate 31 runs pre-bump in Step 3 and only proves freshness against the PREVIOUS version; nothing re-ran the generator post-bump before this line existed — the v0.8.48 release PR (#1897) shipped stale manifests as a result, caught by `check:codex-manifests-fresh` in CI and fixed by hand on the release branch. `packages/plugins/*/.codex-plugin/plugin.json` and `packages/plugins/*/skills/*/agents/openai.yaml` ride the release commit (Step 5 stages them).
155
+
154
156
  **4e. Release docs + team notes** (gated, not optional): review the entry
155
157
  files the release touches (root README/CHANGELOG, per-package READMEs —
156
158
  content currency is YOUR judgment; the gate only proves presence), then
@@ -212,6 +214,7 @@ node "${CLAUDE_PLUGIN_ROOT}/skills/package-release/scripts/bump.mjs" --from X.Y.
212
214
  npm install --package-lock-only --no-audit --no-fund # 4c
213
215
  npm run check:lockstep # 4d
214
216
  node scripts/build/derive-genui-catalog.mjs # 4d.5 — catalogId carries the bumped version (gh#617)
217
+ node scripts/build/codex-manifests.mjs # 4d.6 — Codex manifest version carries the bumped version (gh#1899)
215
218
  node scripts/release/check-release.mjs --pending-version X.Y.Z --fix # 4f — AFTER the stubs exist
216
219
  node scripts/release/generate-release-notes.mjs --version X.Y.Z --write # 4e
217
220
  node scripts/release/check-release-docs.mjs --version X.Y.Z # 4e gate
@@ -627,6 +627,29 @@ function step4PromoteAndBump(args) {
627
627
  console.log(' ✓ chunk corpus still fresh after catalog-tiers regen — no re-harvest needed');
628
628
  }
629
629
 
630
+ // Step 4d.6 — regenerate the Codex plugin manifests (gh#1888, gh#1899): both
631
+ // .codex-plugin/plugin.json's `version` and each per-skill agents/openai.yaml
632
+ // derive from .claude-plugin/plugin.json, which the bump above just moved —
633
+ // same "derived artifact embeds the lockstep version" class as 4d.5's genui
634
+ // catalog. Gate 31 (check:codex-manifests-fresh) runs pre-bump in Step 3, so
635
+ // it only proves freshness against the PREVIOUS version; nothing re-ran the
636
+ // generator after the bump until now — the release PR for v0.8.48 (#1897)
637
+ // shipped stale manifests as a result (Static checks + MCP smoke failed on
638
+ // check:codex-manifests-fresh, fixed by hand on the release branch). Step 5
639
+ // stages both plugins' .codex-plugin/plugin.json + skills/*/agents/openai.yaml.
640
+ console.log('\n Step 4d.6 — regenerate Codex plugin manifests (version embeds the lockstep bump):');
641
+ sh('node scripts/build/codex-manifests.mjs', args);
642
+ if (args.dry) {
643
+ console.log(' [dry] npm run check:codex-manifests-fresh (post-regen proof)');
644
+ } else if (!shOk('npm run check:codex-manifests-fresh')) {
645
+ console.error('\nERROR: Codex plugin manifests still stale after regeneration — codex-manifests.mjs');
646
+ console.error(' did not produce output matching check:codex-manifests-fresh\'s expectations.');
647
+ console.error(' Run both by hand to diagnose before re-running the cut.');
648
+ process.exit(1);
649
+ } else {
650
+ console.log(' ✓ Codex plugin manifests fresh after regeneration');
651
+ }
652
+
630
653
  // Step 4e — generate docs/ops/releases/vX.Y.Z.md (gh#399: neither this step nor
631
654
  // its staging into the release commit existed before — check-cut-hygiene's
632
655
  // "notes present" claim (Step 4g, below) went unverified until
@@ -747,7 +770,17 @@ function step5Commit(args) {
747
770
  // generation MCP (@adia-ai/mcp) in .mcp.json (SKILL invariant 8 —
748
771
  // bump.mjs moves the pin too).
749
772
  const files = [`${dir}/package.json`, `${dir}/CHANGELOG.md`];
750
- if (plugin) files.push(`${dir}/.claude-plugin/plugin.json`);
773
+ if (plugin) {
774
+ files.push(`${dir}/.claude-plugin/plugin.json`);
775
+ // gh#1899: Step 4d.6 regenerates both plugins' Codex manifest tree
776
+ // post-bump (version embeds the lockstep bump, same class as the
777
+ // genui catalog outputs above) — stage it here or CI catches the
778
+ // drift the way v0.8.48's release PR (#1897) did. `skills/*/
779
+ // agents/openai.yaml` is a glob: `git add` expands it via the shell,
780
+ // and the per-skill count isn't statically knowable (same shape as
781
+ // the chunk-corpus directory pathspec above).
782
+ files.push(`${dir}/.codex-plugin/plugin.json`, `${dir}/skills/*/agents/openai.yaml`);
783
+ }
751
784
  if (name === 'adia-ui-factory') files.push(`${dir}/.mcp.json`);
752
785
  return files;
753
786
  }),
@@ -1169,6 +1202,17 @@ function selftest() {
1169
1202
  // health record, or it rides untracked past the release commit
1170
1203
  // (v0.8.35/v0.8.36 both did, PR #1196 swept them by hand).
1171
1204
  'evals/health/9.9.9.json',
1205
+ // gh#1899 — Step 4 must regenerate the Codex plugin manifests post-bump
1206
+ // (the v0.8.48 release PR #1897 shipped stale ones without this step).
1207
+ 'Step 4d.6 — regenerate Codex plugin manifests',
1208
+ '[dry] node scripts/build/codex-manifests.mjs',
1209
+ // gh#1899 — Step 5's staging pathspec must carry both plugins' Codex
1210
+ // manifest tree, or it rides untracked/uncommitted past the release
1211
+ // commit the same way the genui catalog outputs did before gh#617.
1212
+ 'packages/plugins/adia-ui-forge/.codex-plugin/plugin.json',
1213
+ 'packages/plugins/adia-ui-forge/skills/*/agents/openai.yaml',
1214
+ 'packages/plugins/adia-ui-factory/.codex-plugin/plugin.json',
1215
+ 'packages/plugins/adia-ui-factory/skills/*/agents/openai.yaml',
1172
1216
  ];
1173
1217
  for (const marker of need) {
1174
1218
  if (!out.includes(marker)) {
@@ -119,6 +119,30 @@ shape — see the ADR-0063 conventions list in
119
119
 
120
120
  Source: [ADR-0074](../../../../../../docs/ops/adr/adr-0074-chart-ratio-attribute-grammar.md).
121
121
 
122
+ **[verified 2026-08-23] Failure mode — DOM-ancestry auto-detection is riskier
123
+ than container-query auto-detection.** ADR-0081 Decision 1 (`chart-ui[labels]`,
124
+ a 3-value enum: `""`/`chip`/`outside`) initially mirrored this same
125
+ auto/explicit-override shape, but auto-detected via DOM ancestry — resolving
126
+ unset `labels=""` to `chip` whenever the element sat inside a `section[bleed]`
127
+ or `card-ui[padding="none"]` ancestor — instead of a container query on the
128
+ element's own box. The 2026-08-21 amendment walked that back entirely after it
129
+ silently flipped 2 of 60 fixtures on the Charts visual-eval floor
130
+ (`comp-chart-in-card-n-*`, pre-existing full-bleed compositions), caught only
131
+ by the floor's pixel-diff gate — neither the unit-test suite nor code review
132
+ renders real CSS/layout. Amended decision: unset `labels=""` resolves to
133
+ `outside` unconditionally; `chip` mode activates only via the explicit
134
+ `labels="chip"` attribute — no ancestry detection at all. ADR-0081's Decision
135
+ 2 (a `today` marker attribute) independently rejects clock-derived
136
+ auto-detection for the same reliability reason (cites IDR-0006). Lesson for a
137
+ new auto-snap attribute of this shape: auto-detection is safe when it reads
138
+ the element's *own* rendered geometry (a container query against its own box,
139
+ as `ratio` does); it is risky when it reads *ancestor* DOM state or wall-clock
140
+ time, because neither is guaranteed stable across every composition that
141
+ happens to nest the element — verify any such default against a real
142
+ pixel-diff/visual-eval gate, not unit tests or review alone. Source:
143
+ [ADR-0081](../../../../../../docs/ops/adr/adr-0081-chart-2-0-foundations-attribute-grammar.md)
144
+ Amendment (2026-08-21).
145
+
122
146
  ## Numeric props — `null` over sentinels
123
147
 
124
148
  Indeterminate, unknown, or "not yet set" numeric state uses `null`, not `-1` or `Infinity`: