@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.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +10 -0
- package/package.json +1 -1
- package/skills/a2ui-maintenance/references/mcp-pipeline-ops.md +7 -3
- package/skills/package-release/references/cut-procedure.md +3 -0
- package/skills/package-release/scripts/release-pack.mjs +45 -1
- package/skills/primitive-authoring/references/api-contract.md +24 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adia-ui-kit-forge",
|
|
3
|
-
"version": "0.8.
|
|
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.
|
|
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.
|
|
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.
|
|
63
|
-
|
|
64
|
-
|
|
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)
|
|
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`:
|