@adia-ai/adia-ui-forge 0.8.35 → 0.8.36
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/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/skills/adia-release/SKILL.md +7 -6
- package/skills/adia-release/references/cut-procedure.md +12 -8
- package/skills/adia-release/references/gates-catalog.md +1 -1
- package/skills/adia-release/references/independent-package-release.md +12 -8
- package/skills/adia-release/references/recovery-paths.md +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adia-ui-kit-forge",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.36",
|
|
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,12 @@
|
|
|
1
1
|
# Changelog — adia-ui-kit-forge
|
|
2
2
|
|
|
3
|
+
## [0.8.36] — 2026-08-13
|
|
4
|
+
|
|
5
|
+
### Maintenance
|
|
6
|
+
- **Lockstep version bump only.** No source changes in this package; bumped to maintain the lockstep version coherence enforced by `scripts/release/check-lockstep.mjs`. Substantive v0.8.36 work shipped in a2ui chain standalone-installable (gh#1186: unpublishable dep removed, 143 packed-import escapes fixed, packed-imports gate + boot probe) + ui-architect coordinator agent + MCP doc consolidation. See `packages/a2ui/mcp/CHANGELOG.md#0836--2026-08-13` for details.
|
|
7
|
+
- **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
|
|
8
|
+
- **`skills/` touched in this release window** (6 file(s), e.g. `adia-release/SKILL.md`) — carried by the entries above.
|
|
9
|
+
|
|
3
10
|
## [0.8.35] — 2026-08-13
|
|
4
11
|
|
|
5
12
|
### 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.36",
|
|
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",
|
|
@@ -3,8 +3,9 @@ name: adia-release
|
|
|
3
3
|
description: >-
|
|
4
4
|
Release engineering for the @adia-ai lockstep monorepo. Use when asked to
|
|
5
5
|
cut and ship a release, promote [Unreleased] CHANGELOG entries, tag and push the
|
|
6
|
-
lockstep packages to origin, publish a 13-package release (11
|
|
7
|
-
libraries + 2 Claude Code plugins
|
|
6
|
+
lockstep packages to origin, publish a 13-package release (11
|
|
7
|
+
npm libraries + 2 Claude Code plugins, as of gh#607 — see
|
|
8
|
+
scripts/package-paths.mjs), batch-push piled-up release commits,
|
|
8
9
|
recover a cut that landed wrong or whose publish workflows didn't fire,
|
|
9
10
|
fix a check:lockstep bump failure or an F-N1 CHANGELOG-coverage warning,
|
|
10
11
|
verify the release gates without cutting anything, or author release
|
|
@@ -17,7 +18,7 @@ user-invocable: true
|
|
|
17
18
|
|
|
18
19
|
# adia-release
|
|
19
20
|
|
|
20
|
-
Release engineering for an @adia-ai-style lockstep monorepo: the `@adia-ai/*` packages on the roster (`scripts/package-paths.mjs`, the single source — 13 as of gh#607: 11 npm libraries plus the 2 Claude Code plugins under `packages/plugins/*`) version and publish together (class A; the plugins joined the lockstep 2026-07-15 after class-B independence let npm drift a full harness-reset behind the repo). Class B (independent versioning)
|
|
21
|
+
Release engineering for an @adia-ai-style lockstep monorepo: the `@adia-ai/*` packages on the roster (`scripts/package-paths.mjs`, the single source — 13 lockstep as of gh#607: 11 npm libraries plus the 2 Claude Code plugins under `packages/plugins/*`) version and publish together (class A; the plugins joined the lockstep 2026-07-15 after class-B independence let npm drift a full harness-reset behind the repo). Class B (independent versioning) has one member — `@adia-ai/adia-plugins` (gh#1133/gh#1160, ADR-0045), the npm-sourced marketplace manifest package, marked `lockstep: false` on the roster; it cuts on its own version line and its own tag, never the umbrella ([`references/independent-package-release.md`](references/independent-package-release.md)). The substrate — `scripts/release/*`, the `check:*` gates, the tag-triggered publish workflows — encodes the invariants; this skill routes, sequences, and stops at the judgment calls.
|
|
21
22
|
|
|
22
23
|
## Authorization — one go, gates do the rest (operator ruling 2026-07-17)
|
|
23
24
|
|
|
@@ -34,7 +35,7 @@ Mechanics: `release-pack.mjs --go` auto-confirms all checkpoints (it equals `--y
|
|
|
34
35
|
1. **Lockstep coherence** — every roster package bumps together (`check:lockstep`; the roster lives in `scripts/package-paths.mjs`, currently `web-components`, `web-modules`, `llm`, `agent`, `persona`, `a2ui-{runtime,compose,corpus,mcp,retrieval,validator}`, and the plugins `adia-ui-{factory,forge}`) (each plugin's `.claude-plugin/plugin.json` version moves with its package.json — `bump.mjs` handles both; `verify:plugins` gates the sync).
|
|
35
36
|
2. **PATCH-cut asymmetry** — internal `@adia-ai/*` ranges hold at `^X.Y.0` during PATCH cuts; only MINOR bumps the floor. `^0.0.x` is forbidden (pre-1.0 caret locks exact — shipped a real stale-sibling bug).
|
|
36
37
|
3. **Release commits land via PR, never a direct push to `main`** (repo policy, operator ruling 2026-07-12): commit on `release/vX.Y.Z` → PR → CI → merge — THEN tag at `main`'s post-merge HEAD, not at the bump commit; post-bump fixes merge before tagging and belong in the tarball. Exception: batch push tags each version at its own release-merge SHA.
|
|
37
|
-
4. **One umbrella + one per-package tag per cut** (`vX.Y.Z` +
|
|
38
|
+
4. **One umbrella + one per-package tag per cut** (`vX.Y.Z` + 13 × `<pkg>-vX.Y.Z`, one per lockstep-roster package — `scripts/package-paths.mjs`); publish workflows key off the per-package tags. Push tags **one per `git push`** — a batched multi-tag push drops the trigger event.
|
|
38
39
|
5. **F-N1 (`check:release --all-pending`) per-package clean** — the umbrella-tag mismatch error is expected noise. Coverage is mechanized at cut time: Step 4f (`check-release.mjs --pending-version X.Y.Z --fix`) runs the SAME matcher pre-PR and auto-appends verified Maintenance bullets, so a post-tag warn means something novel — stop and investigate, don't loop enrichment PRs.
|
|
39
40
|
6. **`npm dist-tag latest` is set by publish order** — batch pushes publish oldest first and WAIT for settle.
|
|
40
41
|
7. **A breaking (MINOR) cut MUST ship its MIGRATION GUIDE section in the same cycle** — MINOR is reserved for removed/renamed API symbols; everything else, including visible behavior changes, stays PATCH.
|
|
@@ -58,7 +59,7 @@ The release is done only when reality confirms it: **the npm registry, the GH re
|
|
|
58
59
|
|
|
59
60
|
| Task shape | Done when |
|
|
60
61
|
| --- | --- |
|
|
61
|
-
| Lockstep cut / handoff | `npm view @adia-ai/<pkg> version` = X.Y.Z for all
|
|
62
|
+
| Lockstep cut / handoff | `npm view @adia-ai/<pkg> version` = X.Y.Z for all 13 lockstep packages AND `dist-tags.latest` = X.Y.Z AND a deployed content file (not an SPA route) serves real bytes |
|
|
62
63
|
| Batch push | every batched tag on `git ls-remote --tags origin` + every version on the registry, `latest` on the newest |
|
|
63
64
|
| Verify-only | the failing gate re-runs green |
|
|
64
65
|
| Recovery | the trip-wire that surfaced the issue passes |
|
|
@@ -74,7 +75,7 @@ Every cut reports, whether it ran inline or via `release-builder`:
|
|
|
74
75
|
| --- | --- |
|
|
75
76
|
| Version | X.Y.Z — all roster packages at this version (`check:lockstep`) |
|
|
76
77
|
| Commit / PR | release commit SHA, PR # (merged) |
|
|
77
|
-
| Tags | umbrella `vX.Y.Z` +
|
|
78
|
+
| Tags | umbrella `vX.Y.Z` + 13 per-package tags pushed (or: which are still pending, and why) |
|
|
78
79
|
| Registry | `npm view @adia-ai/<pkg> version` per package, cited (not "publish workflow green") |
|
|
79
80
|
| `dist-tags.latest` | confirmed = X.Y.Z |
|
|
80
81
|
| Deploy | dispatched (`deploy-site.yml` run URL) / N/A this cut |
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
> handoff). Companions: [`gates-catalog.md`](gates-catalog.md) (gate roster +
|
|
5
5
|
> failure routing), [`changelog-discipline.md`](changelog-discipline.md) (promotion
|
|
6
6
|
> + F-N1 enrichment), [`recovery-paths.md`](recovery-paths.md) (when it goes wrong).
|
|
7
|
-
> The concrete gate names,
|
|
8
|
-
>
|
|
7
|
+
> The concrete gate names, the roster's package paths (`scripts/package-paths.mjs`,
|
|
8
|
+
> 13 lockstep as of gh#607), and `ui-kit.exe.xyz` deploy are the @adia-ai
|
|
9
|
+
> monorepo's worked example of the portable discipline. `$REPO` = repo root.
|
|
9
10
|
|
|
10
11
|
Two entry variants, converging at Step 5:
|
|
11
12
|
|
|
@@ -270,7 +271,7 @@ The operator's initiating instruction covers the whole cycle — no per-step re-
|
|
|
270
271
|
|
|
271
272
|
| Evidence logged before | Content | Why it's still printed |
|
|
272
273
|
| --- | --- | --- |
|
|
273
|
-
| Tagging (Step 6) | The planned tag list (umbrella +
|
|
274
|
+
| Tagging (Step 6) | The planned tag list (umbrella + 13 per-package) | The log line a recovery diagnoses from |
|
|
274
275
|
| Pushing (Step 8) | The Step 7 F-N1 output + tag list + `origin/main..HEAD` count | F-N1's first real evidence — and its ERROR path still hard-stops unconditionally |
|
|
275
276
|
| Publishing (Step 9) | The current registry snapshot (versions + `dist-tags.latest`) | Ordering is verified against what's LIVE, mechanically |
|
|
276
277
|
| Deploying (Step 10) | The `deploy-site.yml` dispatch (never a raw rsync) | The workflow carries its own GitHub-environment human gate |
|
|
@@ -285,7 +286,7 @@ After the bump + lockfile, run the AUTHORITATIVE F-N1 matcher against the workin
|
|
|
285
286
|
node scripts/release/check-release.mjs --pending-version X.Y.Z --fix
|
|
286
287
|
```
|
|
287
288
|
|
|
288
|
-
Stage its CHANGELOG edits into the release commit (the Step-5 allowlist already covers `CHANGELOG.md`). It re-verifies its own output with the same matcher before writing — a `--fix` that doesn't satisfy the checker is a hard error, not a silent pass.
|
|
289
|
+
Stage its CHANGELOG edits into the release commit (the Step-5 allowlist already covers `CHANGELOG.md`). It re-verifies its own output with the same matcher before writing — a `--fix` that doesn't satisfy the checker is a hard error, not a silent pass. (The former `check:changelog-coverage` gate — a different matcher and a 9-package roster missing the 2 plugins — cost the v0.8.5 cut 3 enrichment PRs and 3 tag rewrites after "coverage clean" at cut time; it was deleted 2026-07-19, so `check-release.mjs --pending-version` is now the only pre-tag coverage check.)
|
|
289
290
|
|
|
290
291
|
## §Step 6 — Tag
|
|
291
292
|
|
|
@@ -293,7 +294,7 @@ Log the planned tag list (evidence table above), then tag **at `main`'s post-mer
|
|
|
293
294
|
|
|
294
295
|
```bash
|
|
295
296
|
node "${CLAUDE_PLUGIN_ROOT}/skills/adia-release/scripts/tag-lockstep.mjs" \
|
|
296
|
-
--version X.Y.Z # umbrella vX.Y.Z +
|
|
297
|
+
--version X.Y.Z # umbrella vX.Y.Z + 13 <pkg>-vX.Y.Z (11 npm + 2 plugins, 2026-07-15 policy)
|
|
297
298
|
```
|
|
298
299
|
|
|
299
300
|
## §Step 7 — F-N1 release trip-wire
|
|
@@ -334,8 +335,9 @@ node "${CLAUDE_PLUGIN_ROOT}/skills/adia-release/scripts/dispatch-publish.mjs" \
|
|
|
334
335
|
Wait for the workflows to settle, then verify against the **registry**, never the workflow's green check:
|
|
335
336
|
|
|
336
337
|
```bash
|
|
337
|
-
for pkg in web-components web-modules llm a2ui-runtime a2ui-compose
|
|
338
|
-
a2ui-mcp a2ui-retrieval a2ui-validator adia-ui-factory
|
|
338
|
+
for pkg in web-components web-modules llm agent persona a2ui-runtime a2ui-compose \
|
|
339
|
+
a2ui-corpus a2ui-mcp a2ui-retrieval a2ui-validator adia-ui-factory \
|
|
340
|
+
adia-ui-forge; do
|
|
339
341
|
echo -n "$pkg: "; npm view "@adia-ai/$pkg" version
|
|
340
342
|
done
|
|
341
343
|
npm view @adia-ai/web-components dist-tags.latest # must equal X.Y.Z
|
|
@@ -346,7 +348,9 @@ Zero workflows fired after a tag push → [`recovery-paths.md`](recovery-paths.m
|
|
|
346
348
|
## §Step 10 — GH releases + site deploy dispatch
|
|
347
349
|
|
|
348
350
|
```bash
|
|
349
|
-
for pkg in
|
|
351
|
+
for pkg in web-components web-modules llm agent persona a2ui-runtime a2ui-compose \
|
|
352
|
+
a2ui-corpus a2ui-mcp a2ui-retrieval a2ui-validator adia-ui-factory \
|
|
353
|
+
adia-ui-forge; do
|
|
350
354
|
gh release create "$pkg-vX.Y.Z" --title "@adia-ai/$pkg vX.Y.Z" --notes-file <body>.md
|
|
351
355
|
done
|
|
352
356
|
# Site deploy goes through the pipeline, never a raw rsync. The dispatch is
|
|
@@ -14,7 +14,7 @@ Row layout per gate: **What** · **Typical failure** · **Recovery**.
|
|
|
14
14
|
|
|
15
15
|
### `npm run check:lockstep`
|
|
16
16
|
|
|
17
|
-
- **What:** all
|
|
17
|
+
- **What:** all 13 lockstep `@adia-ai/*` packages declare the same `version` (the class-B `adia-plugins` package is excluded — `lockstep: false`, `scripts/package-paths.mjs`); internal `@adia-ai/*` dep ranges match policy (`^X.Y.0` during PATCH cycles, bumped at MINOR).
|
|
18
18
|
- **Typical failure:** one package forgot to bump; a peer edited an internal range mid-PATCH; a `^0.0.x` range slipped in.
|
|
19
19
|
- **Recovery:** version drift → `` `${CLAUDE_PLUGIN_ROOT}/skills/adia-release/scripts/bump.mjs` ``; range drift → `npm run check:lockstep:fix` auto-aligns, then re-run.
|
|
20
20
|
- **Why `^0.0.x` is forbidden:** npm pre-1.0 semver only widens the caret when major+minor aren't both zero — `^0.0.6` resolves to `>=0.0.6 <0.0.7`, locked to exactly 0.0.6. An internal dep pinned that way silently installs a *stale* sibling on every fresh `npm i` (this shipped a real ~4-day-latent bug before the lockstep policy). The `^X.Y.0` floor (Y≥1) widens correctly across patches; trust the gate, don't reason about caret semantics by hand. Moot at 1.0.0.
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
> Load when releasing a package versioned **independently** of the lockstep set —
|
|
4
4
|
> excluded from the lockstep gate, no umbrella tag, no demo-site deploy.
|
|
5
|
-
> **Class B
|
|
6
|
-
>
|
|
7
|
-
> lockstep
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
>
|
|
5
|
+
> **Class B's current member is `@adia-ai/adia-plugins`** (gh#1133/gh#1160,
|
|
6
|
+
> ADR-0045) — the npm-sourced marketplace manifest package, marked
|
|
7
|
+
> `lockstep: false` on the roster (`scripts/package-paths.mjs`). It's the
|
|
8
|
+
> first member since the 2026-07-15 policy change (operator ruling) that
|
|
9
|
+
> emptied the class: the Claude Code plugins under `packages/plugins/*`
|
|
10
|
+
> joined the lockstep after class-B independence let npm drift a full
|
|
11
|
+
> harness-reset behind the repo (npm served forge 0.1.3/factory 0.2.4
|
|
12
|
+
> pre-reset content while the rewritten estate sat unpublished at a
|
|
13
|
+
> regressed 0.1.0). This procedure covers both onboarding a NEW class-B
|
|
14
|
+
> package and a routine cut of an existing one (adia-plugins). The
|
|
11
15
|
> lockstep cut is [`cut-procedure.md`](cut-procedure.md).
|
|
12
16
|
|
|
13
17
|
## §Two release classes in one monorepo
|
|
@@ -15,7 +19,7 @@
|
|
|
15
19
|
| | Class A — lockstep cut | Class B — independent package |
|
|
16
20
|
| --- | --- | --- |
|
|
17
21
|
| Versioning | whole set bumps together | own version line per package |
|
|
18
|
-
| Lockstep gate | enforced (`check:lockstep`
|
|
22
|
+
| Lockstep gate | enforced (`check:lockstep` 13/13) | **excluded** — a class-B package is not listed in `check-lockstep.mjs`'s `PACKAGES` (`adia-plugins`, the current member, is filtered out via `lockstep: false` — `scripts/package-paths.mjs`) |
|
|
19
23
|
| Umbrella tag | `vX.Y.Z` + per-package | **none** — per-package tags only (versions differ) |
|
|
20
24
|
| `dist-tag` ordering | cross-package publish order matters | N/A |
|
|
21
25
|
| Demo-site deploy | yes | **none** |
|
|
@@ -43,7 +47,7 @@ Substrate fixes (release scripts / lockfile / CHANGELOG), landed once as a norma
|
|
|
43
47
|
|
|
44
48
|
## §Verify target
|
|
45
49
|
|
|
46
|
-
The published package(s) on the **npm registry** at their independent versions, plus the npm-published `@adia-ai/adia-plugins` manifest referencing the new versions (ADR-0045). NOT "all
|
|
50
|
+
The published package(s) on the **npm registry** at their independent versions, plus the npm-published `@adia-ai/adia-plugins` manifest referencing the new versions (ADR-0045). NOT "all 13 lockstep packages + the demo site" — that's class A.
|
|
47
51
|
|
|
48
52
|
## §Gotchas (from the first independent cut, factory v0.2.2 + forge v0.1.2)
|
|
49
53
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
1. Verify the skip: `npm view <pkg> versions --json | tail` (no X+1 on npm) + `git tag --list 'vX.Y.*'` (no tags). Run pre-flight at the peer's commit to confirm it's shippable.
|
|
19
19
|
2. Correct the version via a **new commit on top** (not amend — the peer's commit stays for history).
|
|
20
|
-
3. Sweep every occurrence of the wrong version:
|
|
20
|
+
3. Sweep every occurrence of the wrong version: 13 × package.json, 13 × CHANGELOG (headers + body refs — the lockstep roster, `scripts/package-paths.mjs`), any doc/CSS-comment refs, then regenerate the lockfile. Preserve filename references that intentionally encode the original label.
|
|
21
21
|
4. Commit as `fix(release): correct vX.Y.Z+1 version-skip → vX.Y.Z` documenting the discovery, then resume [`cut-procedure.md`](cut-procedure.md) at Step 5.
|
|
22
22
|
|
|
23
23
|
## §Scenario 2 — Batch push
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
|
|
64
64
|
## §Scenario 7 — Tags pushed, ZERO publish workflows fired
|
|
65
65
|
|
|
66
|
-
**Shape:** all
|
|
66
|
+
**Shape:** all 14 tags exist on origin (umbrella + one per lockstep-roster package — `scripts/package-paths.mjs`), but no `publish-<pkg>.yml` run exists for them; npm latest unchanged; nothing errored.
|
|
67
67
|
|
|
68
68
|
**Root cause:** pushing many tags in **one** `git push` fires a single batched create event that GitHub Actions routinely drops. Re-pushing is a no-op (the tags already exist remotely).
|
|
69
69
|
|