@adia-ai/adia-ui-forge 0.8.32 → 0.8.34

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.32",
3
+ "version": "0.8.34",
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-factory (the consumer/app-author plugin).",
5
5
  "author": {
6
6
  "name": "Kim",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog — adia-ui-kit-forge
2
2
 
3
+ ## [0.8.34] — 2026-08-11
4
+
5
+ ### Fixed
6
+ - **Top-level `bin/` directory renamed to `scripts/` — claude.ai-hosted plugin validation was rejecting this plugin outright (gh#934).** claude.ai auto-adds any plugin's top-level `bin/` to PATH on the CLI, which isn't shown on the admin approval surface, so hosted validation refused to approve the plugin at all ("2 plugins found, 2 failed validation" alongside `adia-ui-kit-factory`, same defect). `bin/demo-postwrite-pattern-gate`, `bin/forge-lint`, `bin/release-pretag-docs-gate`, `bin/sidecar-prewrite-guard`, `bin/site-postwrite-derivation-gate` moved to `scripts/` with executable bits preserved; `hooks/hooks.json`'s `${CLAUDE_PLUGIN_ROOT}/bin/...` commands and `scripts/forge-lint`'s cross-reference to the factory plugin's vendored lint copy updated to `scripts/...`; `package.json`'s `files` array updated so the published tarball ships the renamed directory. Hook gates still fire the same scripts, just from a non-PATH-reserved location.
7
+
8
+ ### Maintenance
9
+ - **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
10
+ - **`skills/` touched in this release window** (1 file(s), e.g. `references/canonical-pattern-index.md`) — carried by the entries above.
11
+
12
+ ## [0.8.33] — 2026-08-11
13
+
14
+ ### Fixed
15
+ - **adia-release `release-pack.mjs` resume completes missing stubs, defers versionArg gates, warns on stale cache copy.** The half-cut-tree resume path (all 13 package versions already bumped) previously assumed Step 4a's promote/stub pass had also fully completed — but a stub package's `[Unreleased]` reads empty either way, so a resume after an abort mid-stub silently skipped it rather than completing it, leaving that package's `[X.Y.Z]` section missing entirely at tag time. Resume now re-runs `insert-stub.mjs` for any package still missing its `[X.Y.Z]` heading before continuing to the idempotent substeps, defers gates that need the CUT-version hygiene check until after that repair, and warns when the plugin's own bundled copy of this script differs from the repo's live one (a stale marketplace cache silently running old release logic). `cut-procedure.md`'s 4-resume section documents the corrected sequencing.
16
+ - **`adia-gen-review`'s corpus-HTML pattern reference no longer teaches the retired `badge-ui variant="accent"` (gh#873-876).** Its worked example used the value the variant/color/tone convention cut retired in favor of `primary` — updated so the reference doesn't contradict the shipped contract.
17
+ - **adia-release `release-pack.mjs` Step 5 now stages `catalog-data.js`, the third file `derive-genui-catalog.mjs` writes.** Found live during this cut: Step 4d.5 regenerates `base.json`/`adia-pack.json`/`catalog-data.js` together (the latter is the browser-safe ES-module projection of the first two), but the Step 5 file allowlist (gh#617) only ever named the first two — `catalog-data.js` sat modified-but-uncommitted in the release commit, invisible in a local working tree (the file exists, just stale) but caught immediately by CI's fresh checkout via `check:genui-catalog`'s drift check. Added to the allowlist alongside its siblings.
18
+
19
+ ### Maintenance
20
+ - **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
21
+ - **`skills/` touched in this release window** (3 file(s), e.g. `references/corpus-html-patterns.md`) — carried by the entries above.
22
+
3
23
  ## [0.8.32] — 2026-08-09
4
24
 
5
25
  ### Fixed
package/hooks/hooks.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "hooks": [
7
7
  {
8
8
  "type": "command",
9
- "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/bin/sidecar-prewrite-guard\" --hook"
9
+ "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/scripts/sidecar-prewrite-guard\" --hook"
10
10
  }
11
11
  ]
12
12
  },
@@ -15,7 +15,7 @@
15
15
  "hooks": [
16
16
  {
17
17
  "type": "command",
18
- "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/bin/release-pretag-docs-gate\" --hook",
18
+ "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/scripts/release-pretag-docs-gate\" --hook",
19
19
  "timeout": 90
20
20
  }
21
21
  ]
@@ -27,15 +27,15 @@
27
27
  "hooks": [
28
28
  {
29
29
  "type": "command",
30
- "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/bin/forge-lint\" --hook"
30
+ "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/scripts/forge-lint\" --hook"
31
31
  },
32
32
  {
33
33
  "type": "command",
34
- "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/bin/demo-postwrite-pattern-gate\" --hook"
34
+ "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/scripts/demo-postwrite-pattern-gate\" --hook"
35
35
  },
36
36
  {
37
37
  "type": "command",
38
- "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/bin/site-postwrite-derivation-gate\" --hook"
38
+ "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/scripts/site-postwrite-derivation-gate\" --hook"
39
39
  }
40
40
  ]
41
41
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/adia-ui-forge",
3
- "version": "0.8.32",
3
+ "version": "0.8.34",
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-factory (the consumer/app-author plugin).",
5
5
  "keywords": [
6
6
  "adia-ui",
@@ -22,7 +22,7 @@
22
22
  "agents",
23
23
  "commands",
24
24
  "references",
25
- "bin",
25
+ "scripts",
26
26
  "hooks",
27
27
  "README.md",
28
28
  "CHANGELOG.md"
@@ -19,7 +19,7 @@ A clean forge-lint says "no structural tells," never "this is right."
19
19
 
20
20
  Shared core: the regex bank below (RAW-COLOR/PX, SCOPE-EXTENT, NATIVE-PRIMITIVE, LEGACY-SHELL,
21
21
  the _is_foundation_css exemption) is mirrored in the sibling CONSUMER plugin's
22
- adia-ui-factory/bin/adia-lint. They are deliberate VENDORED copies — the catalog forbids
22
+ adia-ui-factory/scripts/adia-lint. They are deliberate VENDORED copies — the catalog forbids
23
23
  cross-plugin imports (each plugin installs copy-alone) — so any change to a shared rule must be
24
24
  reconciled in BOTH files. forge-lint drops the consumer/app traps (SSR double-router, top-level
25
25
  import, hardcoded overlay open) and adds MISSING-SCOPE; that divergence is the point.
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Auto-generated** by this skill's `scripts/build-canonical-pattern-index.mjs`. Do not edit by hand — re-run the build script (from the monorepo root) after adding new canonicals to `apps/`, `catalog/`, or `playgrounds/`.
4
4
 
5
- **Total canonical `.contents.html` files**: 111
5
+ **Total canonical `.contents.html` files**: 116
6
6
 
7
7
  ## How to use this index
8
8
 
@@ -105,14 +105,15 @@
105
105
  - `catalog/ui-patterns/app/chat-streaming-surface/chat-streaming-surface.contents.html` — 16 lines (from UI-pattern atomics (catalog))
106
106
  - `catalog/page-shells/app/chat-page/chat-page.contents.html` — 67 lines (from Page-shell templates (catalog))
107
107
 
108
- ## editor (6)
108
+ ## editor (7)
109
109
 
110
110
  > Editor panes (code, preview, toolbar). Lift editor-shell composition.
111
111
 
112
112
  - `apps/genui/app/a2ui-editor/a2ui-editor.contents.html` — 261 lines (from GenUI app routes)
113
- - `apps/genui/app/render-preview/render-preview.contents.html` — 74 lines (from GenUI app routes)
113
+ - `apps/genui/app/render-preview/render-preview.contents.html` — 93 lines (from GenUI app routes)
114
114
  - `catalog/ui-patterns/app/editor-code-pane/editor-code-pane.contents.html` — 16 lines (from UI-pattern atomics (catalog))
115
115
  - `catalog/ui-patterns/app/editor-preview-pane/editor-preview-pane.contents.html` — 13 lines (from UI-pattern atomics (catalog))
116
+ - `catalog/ui-patterns/app/split-pane-editor/split-pane-editor.contents.html` — 31 lines (from UI-pattern atomics (catalog))
116
117
  - `catalog/page-shells/app/doc-editor/doc-editor.contents.html` — 65 lines (from Page-shell templates (catalog))
117
118
  - `catalog/page-shells/app/editor-page/editor-page.contents.html` — 25 lines (from Page-shell templates (catalog))
118
119
 
@@ -156,7 +157,7 @@
156
157
 
157
158
  > Activity / event feeds. Lift activity-feed composition.
158
159
 
159
- - `apps/genui/app/gen-ui-feed/gen-ui-feed.contents.html` — 392 lines (from GenUI app routes)
160
+ - `apps/genui/app/gen-ui-feed/gen-ui-feed.contents.html` — 390 lines (from GenUI app routes)
160
161
  - `catalog/ui-patterns/app/order-tracking-timeline/order-tracking-timeline.contents.html` — 45 lines (from UI-pattern atomics (catalog))
161
162
 
162
163
  ## marketing (2)
@@ -185,11 +186,12 @@
185
186
  - `apps/genui/app/css-channel-demo/css-channel-demo.contents.html` — 70 lines (from GenUI app routes)
186
187
  - `apps/genui/app/streams-bridge/streams-bridge.contents.html` — 80 lines (from GenUI app routes)
187
188
 
188
- ## other (40)
189
+ ## other (44)
189
190
 
190
191
  > Misc canonicals. Inspect contents.html to determine UI type.
191
192
 
192
193
  - `apps/genui/app/gen-ui/gen-ui.contents.html` — 47 lines (from GenUI app routes)
194
+ - `apps/genui/app/patient-visit/patient-visit.contents.html` — 58 lines (from GenUI app routes)
193
195
  - `apps/user-flow/app/auth/accept-invite/accept-invite.contents.html` — 52 lines (from User-flow templates)
194
196
  - `apps/user-flow/app/auth/forgot-password/sent/sent.contents.html` — 33 lines (from User-flow templates)
195
197
  - `apps/user-flow/app/auth/sign-in/magic-link/sent/sent.contents.html` — 35 lines (from User-flow templates)
@@ -216,6 +218,7 @@
216
218
  - `apps/user-flow/app/registration/use-case/use-case.contents.html` — 77 lines (from User-flow templates)
217
219
  - `apps/user-flow/app/registration/workspace/workspace.contents.html` — 45 lines (from User-flow templates)
218
220
  - `catalog/ui-patterns/app/email-inbox-list/email-inbox-list.contents.html` — 135 lines (from UI-pattern atomics (catalog))
221
+ - `catalog/ui-patterns/app/filter-popover-form/filter-popover-form.contents.html` — 22 lines (from UI-pattern atomics (catalog))
219
222
  - `catalog/ui-patterns/app/import-mapping/import-mapping.contents.html` — 217 lines (from UI-pattern atomics (catalog))
220
223
  - `catalog/ui-patterns/app/loading-skeleton-placeholder/loading-skeleton-placeholder.contents.html` — 62 lines (from UI-pattern atomics (catalog))
221
224
  - `catalog/ui-patterns/app/product-card-buy/product-card-buy.contents.html` — 39 lines (from UI-pattern atomics (catalog))
@@ -226,6 +229,8 @@
226
229
  - `catalog/page-shells/app/form-page/form-page.contents.html` — 26 lines (from Page-shell templates (catalog))
227
230
  - `catalog/page-shells/app/gallery-page/gallery-page.contents.html` — 79 lines (from Page-shell templates (catalog))
228
231
  - `playgrounds/admin-shell/app/admin-shell.contents.html` — 99 lines (from Playgrounds)
232
+ - `playgrounds/agent-admin/app/agent-admin.contents.html` — 29 lines (from Playgrounds)
233
+ - `playgrounds/agent-chat/app/agent-chat.contents.html` — 28 lines (from Playgrounds)
229
234
  - `playgrounds/chat/app/chat.contents.html` — 49 lines (from Playgrounds)
230
235
  - `playgrounds/composed-flow/app/composed-flow.contents.html` — 294 lines (from Playgrounds)
231
236
  - `playgrounds/table-toolbar/app/table-toolbar.contents.html` — 31 lines (from Playgrounds)
@@ -113,7 +113,7 @@ matches both native `h1–h6`/`p` and their transpiled
113
113
  <header>
114
114
  <span slot="heading">
115
115
  <text-ui strong>Title</text-ui>
116
- <badge-ui text="New" variant="accent"></badge-ui>
116
+ <badge-ui text="New" variant="primary"></badge-ui>
117
117
  </span>
118
118
  <p slot="description">Subtitle</p>
119
119
  </header>
@@ -177,14 +177,22 @@ checks them itself at startup (gh#765):
177
177
 
178
178
  The fully manual fallback (both shapes, if the orchestrator itself is
179
179
  suspect) remains the standalone pieces the Mechanization section names, in
180
- this order:
180
+ this order. **Stubs complete BEFORE 4f** (the v0.8.32 resume proved the
181
+ ordering): the bump-complete marker cannot see whether insert-stub ran — a
182
+ stub package's `[Unreleased]` is empty, so every guard passes with its
183
+ `[X.Y.Z]` section entirely absent; running the coverage `--fix` before the
184
+ stub sections exist leaves it nothing to append to, and the gap resurfaces
185
+ as F-N1 warns at the push boundary, costing a tag move:
181
186
 
182
187
  ```bash
183
- node "${CLAUDE_PLUGIN_ROOT}/skills/adia-release/scripts/bump.mjs" --from X.Y.Z-1 --to X.Y.Z # 4b
188
+ node "${CLAUDE_PLUGIN_ROOT}/skills/adia-release/scripts/insert-stub.mjs" \
189
+ --version X.Y.Z --date YYYY-MM-DD --previous-version X.Y.Z-1 \
190
+ --substantive "<one-line>" --xref "<anchor>" --packages <missing-stubs> # 4a-stub — FIRST, only the missing ones (hard-errors on existing sections)
191
+ node "${CLAUDE_PLUGIN_ROOT}/skills/adia-release/scripts/bump.mjs" --from X.Y.Z-1 --to X.Y.Z # 4b (skip if versions already moved)
184
192
  npm install --package-lock-only --no-audit --no-fund # 4c
185
193
  npm run check:lockstep # 4d
186
194
  node scripts/build/derive-genui-catalog.mjs # 4d.5 — catalogId carries the bumped version (gh#617)
187
- node scripts/release/check-release.mjs --pending-version X.Y.Z --fix # 4f
195
+ node scripts/release/check-release.mjs --pending-version X.Y.Z --fix # 4f — AFTER the stubs exist
188
196
  node scripts/release/generate-release-notes.mjs --version X.Y.Z --write # 4e
189
197
  node scripts/release/check-release-docs.mjs --version X.Y.Z # 4e gate
190
198
  node scripts/release/check-cut-hygiene.mjs --version X.Y.Z # 4g — post-bump proof
@@ -442,6 +442,16 @@ function step3PreFlight(args) {
442
442
  // moved every reference to the cut version, so validating at previous
443
443
  // false-fails gate 24 exactly like handoff would.
444
444
  const hygieneVersion = (args.mode === 'handoff' || args.resume) ? args.version : args.previous;
445
+ // A RESUMED run's versionArg gates (cut-hygiene) demand artifacts Step 4
446
+ // has not recreated yet — docs/releases/vX.Y.Z.md exists only after 4e,
447
+ // which runs AFTER this pre-flight. Step 4g re-runs these same gates at
448
+ // the cut version once the notes exist, so skipping them here loses no
449
+ // coverage — running them here false-fails by construction (the v0.8.32
450
+ // cut hit exactly this: 23/24 green, gate 24 dead on the missing notes).
451
+ if (g.versionArg && args.resume) {
452
+ console.log(`\n ${g.n}/${GATE_ROSTER.length}. ${g.cmd} # ${g.what} — [resume] deferred to Step 4g (notes not regenerated yet)`);
453
+ continue;
454
+ }
445
455
  const cmd = g.versionArg ? `${g.cmd} --version ${hygieneVersion}` : g.cmd;
446
456
  console.log(`\n ${g.n}/${GATE_ROSTER.length}. ${cmd} # ${g.what}`);
447
457
  try {
@@ -519,7 +529,30 @@ function step4PromoteAndBump(args) {
519
529
  sh(cmd, args);
520
530
  }
521
531
  } else {
522
- console.log(' [resume] promote/stub already applied by the aborted run skipping');
532
+ // The bump-complete marker proves promote+bump ranit CANNOT see
533
+ // whether insert-stub ran: a stub package's [Unreleased] is empty, so
534
+ // the unpromoted guard below passes with the [X.Y.Z] section entirely
535
+ // absent, and the death arrives later at 4e's generate-release-notes
536
+ // ("no [X.Y.Z] CHANGELOG section in: …"). The v0.8.32 cut hit exactly
537
+ // this (the aborted run predated stub insertion). Complete the missing
538
+ // stubs here instead of skipping blindly — insert-stub hard-errors on
539
+ // existing sections, so filter to the genuinely missing ones.
540
+ if (args.stubPackages && args.substantive && args.xref) {
541
+ const missingStubs = args.stubPackages.filter((pkg) => {
542
+ const p = resolvePackageChangelog(REPO, pkg);
543
+ return fs.existsSync(p) && !fs.readFileSync(p, 'utf8').includes(`## [${args.version}]`);
544
+ });
545
+ if (missingStubs.length > 0) {
546
+ console.log(` [resume] ${missingStubs.length} stub section(s) missing from the aborted run — completing: ${missingStubs.join(', ')}`);
547
+ sh(`node ${SCRIPT_DIR}/insert-stub.mjs --version ${args.version} --date ${args.date} --previous-version ${args.previous} --substantive "${args.substantive}" --xref "${args.xref}" --packages ${missingStubs.join(',')}`, args);
548
+ } else {
549
+ console.log(' [resume] promote/stub already applied by the aborted run — skipping');
550
+ }
551
+ } else {
552
+ console.log(' [resume] promote/stub already applied by the aborted run — skipping');
553
+ console.log(' (no --stub-packages/--substantive/--xref given; if 4e fails on');
554
+ console.log(' missing [X.Y.Z] sections, re-run with the stub flags to complete them)');
555
+ }
523
556
  }
524
557
 
525
558
  // Loud guard: after promotion, NO package in the lockstep set (including
@@ -636,8 +669,15 @@ function step5Commit(args) {
636
669
  `docs/releases/v${args.version}.md`,
637
670
  // gh#617: Step 4d.5 regenerates these post-bump (catalogId embeds the
638
671
  // lockstep version); unstaged, check:genui-catalog fails in CI (v0.8.26).
672
+ // catalog-data.js is the same derivation's third output (the browser-safe
673
+ // ES-module projection of base.json/adia-pack.json) — check-genui-catalog.mjs
674
+ // verifies its freshness too, but this list never carried it (found live
675
+ // during the v0.8.33 cut: base.json/adia-pack.json staged and committed
676
+ // fine, catalog-data.js sat modified-uncommitted, CI caught the drift a
677
+ // fresh checkout exposes that a local working tree doesn't).
639
678
  'packages/genui/adia-catalog/base.json',
640
679
  'packages/genui/adia-catalog/adia-pack.json',
680
+ 'packages/genui/adia-catalog/catalog-data.js',
641
681
  ...PACKAGE_ROSTER.flatMap(({ name, dir, plugin }) => {
642
682
  // Roster-driven (H3): each package stages its manifest + CHANGELOG;
643
683
  // plugins also stage .claude-plugin/plugin.json (the /plugin-update
@@ -957,6 +997,24 @@ async function main() {
957
997
  // Fail-fast guard: refuse to git/npm/gh/curl against a non-monorepo directory.
958
998
  assertMonorepoRoot(REPO);
959
999
  console.log(`adia-release release-pack — v${args.version} (${args.mode})${args.dry ? ' [DRY]' : ''}`);
1000
+ // Stale-plugin-cache self-check (v0.8.32 cut, first failure): the INSTALLED
1001
+ // plugin cache only refreshes on a version bump, so running this script from
1002
+ // the cache mid-cycle can execute a version that predates its own guards
1003
+ // (SKILL.md §Plugin cache). If the repo carries its own copy and the bytes
1004
+ // differ, warn loudly — the repo copy is almost always the newer one.
1005
+ const repoCopy = path.join(REPO, 'packages/plugins/adia-ui-forge/skills/adia-release/scripts/release-pack.mjs');
1006
+ const selfPath = new URL(import.meta.url).pathname;
1007
+ if (fs.existsSync(repoCopy) && path.resolve(selfPath) !== path.resolve(repoCopy)) {
1008
+ const self = fs.readFileSync(selfPath, 'utf8');
1009
+ const repo = fs.readFileSync(repoCopy, 'utf8');
1010
+ if (self !== repo) {
1011
+ console.error('\n⚠ STALE-COPY WARNING: this release-pack.mjs differs from the repo\'s own copy at');
1012
+ console.error(` ${repoCopy}`);
1013
+ console.error(' The installed plugin cache lags the repo between cuts (SKILL.md §Plugin cache);');
1014
+ console.error(' the repo copy is almost certainly newer — prefer running it:');
1015
+ console.error(` node ${repoCopy} <same args>\n`);
1016
+ }
1017
+ }
960
1018
  // gh#765: an aborted Step-4 run leaves bumped versions + promoted
961
1019
  // CHANGELOGs; detect BEFORE pre-flight so gate 24 validates at the right
962
1020
  // version and Step 4 skips the already-done promote/stub/bump.
File without changes
File without changes
File without changes
File without changes