@adia-ai/adia-ui-forge 0.8.36 → 0.8.37
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 +40 -18
- package/README.md +17 -17
- package/agents/{a2ui-builder.corpus.json → a2ui-maintenance-agent.corpus.json} +1 -1
- package/agents/{a2ui-builder.md → a2ui-maintenance-agent.md} +6 -6
- package/agents/framework-reviewer.md +6 -6
- package/agents/{release-builder.corpus.json → package-release-agent.corpus.json} +3 -3
- package/agents/{release-builder.md → package-release-agent.md} +7 -7
- package/agents/{component-author.corpus.json → primitive-authoring-agent.corpus.json} +2 -2
- package/agents/{component-author.md → primitive-authoring-agent.md} +7 -7
- package/agents/routing-corpus.json +40 -40
- package/commands/{dogfood.md → demo-audit.md} +2 -1
- package/commands/{gen-review.md → gen-ui-review.md} +3 -2
- package/commands/{release.md → package-release.md} +3 -2
- package/commands/{deploy.md → site-deployment.md} +2 -1
- package/package.json +1 -1
- package/references/contracts/a2ui-mcp-surface.md +16 -8
- package/references/contracts/migration-guide-format.md +4 -4
- package/scripts/demo-postwrite-pattern-gate +2 -2
- package/scripts/release-pretag-docs-gate +2 -2
- package/scripts/sidecar-prewrite-guard +3 -3
- package/skills/{adia-a2ui → a2ui-maintenance}/SKILL.md +6 -5
- package/skills/{adia-a2ui → a2ui-maintenance}/evals/evals.json +8 -8
- package/skills/{adia-a2ui → a2ui-maintenance}/evals/routing-corpus.json +51 -51
- package/skills/{adia-a2ui → a2ui-maintenance}/references/eval-diagnostics.md +2 -2
- package/skills/{adia-a2ui → a2ui-maintenance}/references/format-extension-decisions.md +2 -2
- package/skills/{adia-a2ui → a2ui-maintenance}/references/mcp-pipeline-ops.md +1 -1
- package/skills/{adia-a2ui → a2ui-maintenance}/references/mcp-tool-reference.md +5 -4
- package/skills/{adia-a2ui → a2ui-maintenance}/references/pipeline-overview.md +15 -15
- package/skills/{adia-a2ui → a2ui-maintenance}/references/semantic-fail-lifting.md +2 -2
- package/skills/{adia-dogfood → demo-audit}/SKILL.md +8 -8
- package/skills/{adia-dogfood → demo-audit}/evals/evals.json +7 -7
- package/skills/{adia-dogfood → demo-audit}/evals/routing-corpus.json +43 -43
- package/skills/{adia-dogfood → demo-audit}/references/visual-probe-triage.md +1 -1
- package/skills/{adia-dogfood → demo-audit}/scripts/analyze.mjs +2 -2
- package/skills/{adia-gen-review → gen-ui-review}/SKILL.md +13 -13
- package/skills/{adia-gen-review → gen-ui-review}/evals/evals.json +7 -7
- package/skills/{adia-gen-review → gen-ui-review}/evals/routing-corpus.json +43 -43
- package/skills/{adia-gen-review → gen-ui-review}/references/corpus-html-patterns.md +3 -3
- package/skills/{adia-gen-review → gen-ui-review}/references/loop-protocol.md +11 -11
- package/skills/{adia-gen-review → gen-ui-review}/references/scores.schema.json +1 -1
- package/skills/{adia-gen-review → gen-ui-review}/scripts/gen-review-coverage-audit.mjs +4 -4
- package/skills/{adia-gen-review → gen-ui-review}/scripts/gen-review-decompose.mjs +6 -6
- package/skills/{adia-gen-review → gen-ui-review}/scripts/gen-review-status.mjs +5 -5
- package/skills/{adia-gen-review → gen-ui-review}/scripts/validate-cycle-scores.mjs +5 -5
- package/skills/{adia-llm-internals → llm-client-maintenance}/SKILL.md +4 -4
- package/skills/{adia-llm-internals → llm-client-maintenance}/evals/evals.json +7 -7
- package/skills/{adia-llm-internals → llm-client-maintenance}/evals/routing-corpus.json +49 -49
- package/skills/{adia-release → package-release}/SKILL.md +16 -16
- package/skills/{adia-release → package-release}/evals/evals.json +7 -7
- package/skills/{adia-release → package-release}/evals/routing-corpus.json +45 -45
- package/skills/{adia-release → package-release}/references/changelog-discipline.md +4 -4
- package/skills/{adia-release → package-release}/references/cut-procedure.md +167 -28
- package/skills/{adia-release → package-release}/references/gates-catalog.md +4 -3
- package/skills/{adia-release → package-release}/references/independent-package-release.md +2 -2
- package/skills/{adia-release → package-release}/references/migration-guide-authoring.md +12 -3
- package/skills/{adia-release → package-release}/references/recovery-paths.md +5 -5
- package/skills/{adia-release → package-release}/scripts/bump.mjs +77 -30
- package/skills/{adia-release → package-release}/scripts/dispatch-publish.mjs +1 -1
- package/skills/{adia-release → package-release}/scripts/gate-roster.mjs +17 -6
- package/skills/{adia-release → package-release}/scripts/insert-stub.mjs +29 -7
- package/skills/{adia-release → package-release}/scripts/package-paths.mjs +51 -6
- package/skills/{adia-release → package-release}/scripts/pr-bridge.mjs +1 -1
- package/skills/{adia-release → package-release}/scripts/promote-unreleased.mjs +1 -1
- package/skills/{adia-release → package-release}/scripts/release-pack.mjs +18 -4
- package/skills/{adia-release → package-release}/scripts/tag-lockstep.mjs +2 -2
- package/skills/{adia-author → primitive-authoring}/SKILL.md +7 -7
- package/skills/{adia-author → primitive-authoring}/evals/evals.json +7 -7
- package/skills/{adia-author → primitive-authoring}/evals/routing-corpus.json +61 -61
- package/skills/{adia-author → primitive-authoring}/references/INDEX.md +2 -2
- package/skills/{adia-author → primitive-authoring}/references/authoring-cycle.md +1 -1
- package/skills/{adia-author → primitive-authoring}/references/code-style.md +5 -5
- package/skills/{adia-author → primitive-authoring}/references/common-gotchas.md +1 -1
- package/skills/{adia-author → primitive-authoring}/references/llm-bridge.md +7 -7
- package/skills/{adia-author → primitive-authoring}/references/module-promotion.md +3 -3
- package/skills/{adia-author → primitive-authoring}/references/shell-patterns.md +2 -2
- package/skills/{adia-author → primitive-authoring}/references/trait-pages.md +1 -1
- package/skills/{adia-author → primitive-authoring}/scripts/build-canonical-pattern-index.mjs +1 -1
- package/skills/{adia-deploy → site-deployment}/SKILL.md +4 -4
- package/skills/{adia-deploy → site-deployment}/evals/evals.json +8 -8
- package/skills/{adia-deploy → site-deployment}/evals/routing-corpus.json +49 -49
- package/skills/{adia-deploy → site-deployment}/references/deploy-playbooks.md +2 -2
- package/skills/{adia-site-docs → site-docs-authoring}/SKILL.md +4 -4
- package/skills/{adia-site-docs → site-docs-authoring}/evals/evals.json +7 -7
- package/skills/{adia-site-docs → site-docs-authoring}/evals/routing-corpus.json +51 -51
- package/skills/{adia-site-docs → site-docs-authoring}/intent.md +8 -8
- package/skills/{adia-ssr → ssr-compatibility}/SKILL.md +8 -8
- package/skills/{adia-ssr → ssr-compatibility}/evals/evals.json +7 -7
- package/skills/{adia-ssr → ssr-compatibility}/evals/routing-corpus.json +43 -43
- package/skills/{adia-ssr → ssr-compatibility}/references/failure-shapes.md +1 -1
- package/skills/{adia-ssr → ssr-compatibility}/references/guard-patterns.md +1 -1
- /package/skills/{adia-a2ui → a2ui-maintenance}/references/anti-patterns.md +0 -0
- /package/skills/{adia-a2ui → a2ui-maintenance}/references/chunk-authoring.md +0 -0
- /package/skills/{adia-a2ui → a2ui-maintenance}/references/corpus-discipline.md +0 -0
- /package/skills/{adia-a2ui → a2ui-maintenance}/references/leverage-rules.md +0 -0
- /package/skills/{adia-a2ui → a2ui-maintenance}/references/strategy-engines.md +0 -0
- /package/skills/{adia-a2ui → a2ui-maintenance}/references/zettel-calibration.md +0 -0
- /package/skills/{adia-dogfood → demo-audit}/references/admin-shell-anatomy.md +0 -0
- /package/skills/{adia-dogfood → demo-audit}/references/app-shell-pitfalls.md +0 -0
- /package/skills/{adia-dogfood → demo-audit}/references/card-anatomy-sweep.md +0 -0
- /package/skills/{adia-dogfood → demo-audit}/references/html-attr-sweep.md +0 -0
- /package/skills/{adia-dogfood → demo-audit}/references/native-leak-annotations.md +0 -0
- /package/skills/{adia-gen-review → gen-ui-review}/references/rubric-cosmetic.md +0 -0
- /package/skills/{adia-gen-review → gen-ui-review}/references/rubric-decompose.md +0 -0
- /package/skills/{adia-gen-review → gen-ui-review}/references/rubric-score.md +0 -0
- /package/skills/{adia-llm-internals → llm-client-maintenance}/references/adapter-contract.md +0 -0
- /package/skills/{adia-llm-internals → llm-client-maintenance}/references/add-a-provider.md +0 -0
- /package/skills/{adia-llm-internals → llm-client-maintenance}/references/bridge-facade.md +0 -0
- /package/skills/{adia-llm-internals → llm-client-maintenance}/references/browser-proxy-boundary.md +0 -0
- /package/skills/{adia-llm-internals → llm-client-maintenance}/references/model-registry.md +0 -0
- /package/skills/{adia-llm-internals → llm-client-maintenance}/references/streaming-sse.md +0 -0
- /package/skills/{adia-release → package-release}/references/notes-authoring.md +0 -0
- /package/skills/{adia-release → package-release}/scripts/assert-monorepo-root.mjs +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/anti-patterns.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/api-contract.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/canonical-pattern-index.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/composite-demo-protocol.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/css-patterns.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/lifecycle-patterns.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/primitive-audit.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/token-contract.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/worked-example.md +0 -0
- /package/skills/{adia-author → primitive-authoring}/references/yaml-contract.md +0 -0
- /package/skills/{adia-ssr → ssr-compatibility}/references/consumer-workarounds.md +0 -0
- /package/skills/{adia-ssr → ssr-compatibility}/references/status-ledger.md +0 -0
- /package/skills/{adia-ssr → ssr-compatibility}/references/test-without-linkedom.md +0 -0
|
@@ -1,125 +1,125 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"name": "
|
|
3
|
+
"name": "llm-client-maintenance routing accuracy corpus",
|
|
4
4
|
"version": "2.1.0",
|
|
5
|
-
"purpose": "Routing-eval corpus for
|
|
5
|
+
"purpose": "Routing-eval corpus for llm-client-maintenance. Each phrase declares the skill (expected), a forbidden skill (expected_not, for phrases the source data only ever asserted as \"not this skill\"), or neither. Scored by scripts/skills/run-skill-evals.mjs (TF-IDF token overlap over per-skill description+triggers).",
|
|
6
6
|
"scoring_notes": "Heuristic signal, not ground truth. Treat misroutes as a prompt to tighten the skill description, never as a reason to keyword-stuff it. Real harness routing is LLM-driven.",
|
|
7
|
-
"scope": "
|
|
7
|
+
"scope": "llm-client-maintenance routing \u2014 does this phrase activate llm-client-maintenance?",
|
|
8
8
|
"phrases": [
|
|
9
9
|
{
|
|
10
|
-
"id": "
|
|
10
|
+
"id": "llm-client-maintenance-pos-01",
|
|
11
11
|
"phrase": "the gemini adapter is dropping usage tokens on streamed responses",
|
|
12
|
-
"expected": "
|
|
12
|
+
"expected": "llm-client-maintenance"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"id": "
|
|
15
|
+
"id": "llm-client-maintenance-pos-02",
|
|
16
16
|
"phrase": "stopReason from openai never reaches the client as MAX_TOKENS",
|
|
17
|
-
"expected": "
|
|
17
|
+
"expected": "llm-client-maintenance"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
"id": "
|
|
20
|
+
"id": "llm-client-maintenance-pos-03",
|
|
21
21
|
"phrase": "the SSE parser chokes when a chunk splits mid-line",
|
|
22
|
-
"expected": "
|
|
22
|
+
"expected": "llm-client-maintenance"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
|
-
"id": "
|
|
25
|
+
"id": "llm-client-maintenance-pos-04",
|
|
26
26
|
"phrase": "the passthrough proxy is returning 401 for anthropic requests in production",
|
|
27
|
-
"expected": "
|
|
27
|
+
"expected": "llm-client-maintenance"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
"id": "
|
|
30
|
+
"id": "llm-client-maintenance-pos-05",
|
|
31
31
|
"phrase": "add a new model to the MODELS registry and set it as DEFAULT_MODEL",
|
|
32
|
-
"expected": "
|
|
32
|
+
"expected": "llm-client-maintenance"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"id": "
|
|
35
|
+
"id": "llm-client-maintenance-pos-06",
|
|
36
36
|
"phrase": "createAdapter() is leaking a real API key to the browser on a production host",
|
|
37
|
-
"expected": "
|
|
37
|
+
"expected": "llm-client-maintenance"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
|
-
"id": "
|
|
40
|
+
"id": "llm-client-maintenance-pos-07",
|
|
41
41
|
"phrase": "add support for a new OpenAI-compatible gateway provider adapter",
|
|
42
|
-
"expected": "
|
|
42
|
+
"expected": "llm-client-maintenance"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
|
-
"id": "
|
|
45
|
+
"id": "llm-client-maintenance-pos-08",
|
|
46
46
|
"phrase": "streamChat() never emits a terminal done chunk",
|
|
47
|
-
"expected": "
|
|
47
|
+
"expected": "llm-client-maintenance"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
|
-
"id": "
|
|
50
|
+
"id": "llm-client-maintenance-pos-09",
|
|
51
51
|
"phrase": "detectProvider isn't resolving the new model id to the right adapter",
|
|
52
|
-
"expected": "
|
|
52
|
+
"expected": "llm-client-maintenance"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"id": "
|
|
55
|
+
"id": "llm-client-maintenance-pos-10",
|
|
56
56
|
"phrase": "the anthropic adapter's buildRequest() diverges from the passthrough proxy path",
|
|
57
|
-
"expected": "
|
|
57
|
+
"expected": "llm-client-maintenance"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
|
-
"id": "
|
|
60
|
+
"id": "llm-client-maintenance-pos-11",
|
|
61
61
|
"phrase": "the StreamChunk union is missing a variant for tool_use deltas",
|
|
62
|
-
"expected": "
|
|
62
|
+
"expected": "llm-client-maintenance"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
|
-
"id": "
|
|
65
|
+
"id": "llm-client-maintenance-pos-12",
|
|
66
66
|
"phrase": "the stub LLM adapter isn't returning parseable A2UI JSON in dev mode",
|
|
67
|
-
"expected": "
|
|
67
|
+
"expected": "llm-client-maintenance"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
|
-
"id": "
|
|
70
|
+
"id": "llm-client-maintenance-neg-01",
|
|
71
71
|
"phrase": "wire the chat client into our admin app's chat-shell",
|
|
72
|
-
"expected_not": "
|
|
72
|
+
"expected_not": "llm-client-maintenance"
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
|
-
"id": "
|
|
75
|
+
"id": "llm-client-maintenance-neg-02",
|
|
76
76
|
"phrase": "why did the composer emit composition-synthesized instead of composition-match",
|
|
77
|
-
"expected_not": "
|
|
77
|
+
"expected_not": "llm-client-maintenance"
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
|
-
"id": "
|
|
80
|
+
"id": "llm-client-maintenance-neg-03",
|
|
81
81
|
"phrase": "cut a release and bump @adia-ai/llm's version with the rest of the lockstep packages",
|
|
82
|
-
"expected_not": "
|
|
82
|
+
"expected_not": "llm-client-maintenance"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
|
-
"id": "
|
|
85
|
+
"id": "llm-client-maintenance-neg-04",
|
|
86
86
|
"phrase": "add a new prop to the chat-input-ui primitive",
|
|
87
|
-
"expected_not": "
|
|
87
|
+
"expected_not": "llm-client-maintenance"
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
|
-
"id": "
|
|
90
|
+
"id": "llm-client-maintenance-neg-05",
|
|
91
91
|
"phrase": "explain how Server-Sent Events work in general",
|
|
92
|
-
"expected_not": "
|
|
92
|
+
"expected_not": "llm-client-maintenance"
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
|
-
"id": "
|
|
95
|
+
"id": "llm-client-maintenance-neg-06",
|
|
96
96
|
"phrase": "add a chat box to the admin app",
|
|
97
|
-
"expected_not": "
|
|
97
|
+
"expected_not": "llm-client-maintenance"
|
|
98
98
|
},
|
|
99
99
|
{
|
|
100
|
-
"id": "
|
|
100
|
+
"id": "llm-client-maintenance-neg-07",
|
|
101
101
|
"phrase": "the chat-shell message list isn't rendering streamed replies",
|
|
102
|
-
"expected_not": "
|
|
102
|
+
"expected_not": "llm-client-maintenance"
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
|
-
"id": "
|
|
105
|
+
"id": "llm-client-maintenance-neg-08",
|
|
106
106
|
"phrase": "tune STRONG_MATCH and lift the eval fails in the compose strategies",
|
|
107
|
-
"expected_not": "
|
|
107
|
+
"expected_not": "llm-client-maintenance"
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
"id": "
|
|
110
|
+
"id": "llm-client-maintenance-neg-09",
|
|
111
111
|
"phrase": "deploy the ui-kit dist to exe.dev and restart the service",
|
|
112
|
-
"expected_not": "
|
|
112
|
+
"expected_not": "llm-client-maintenance"
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
|
-
"id": "
|
|
115
|
+
"id": "llm-client-maintenance-neg-10",
|
|
116
116
|
"phrase": "run a dogfood sweep to find broken demos",
|
|
117
|
-
"expected_not": "
|
|
117
|
+
"expected_not": "llm-client-maintenance"
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
|
-
"id": "
|
|
120
|
+
"id": "llm-client-maintenance-neg-11",
|
|
121
121
|
"phrase": "score the gen-ui gallery outputs against the exit gate",
|
|
122
|
-
"expected_not": "
|
|
122
|
+
"expected_not": "llm-client-maintenance"
|
|
123
123
|
}
|
|
124
124
|
],
|
|
125
125
|
"_measured_historical": {
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: package-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
|
|
7
|
-
npm libraries + 2 Claude Code plugins, as of gh#
|
|
6
|
+
lockstep packages to origin, publish a 16-package release (14
|
|
7
|
+
npm libraries + 2 Claude Code plugins, as of gh#1240's MCP fold — see
|
|
8
8
|
scripts/package-paths.mjs), batch-push piled-up release commits,
|
|
9
9
|
recover a cut that landed wrong or whose publish workflows didn't fire,
|
|
10
10
|
fix a check:lockstep bump failure or an F-N1 CHANGELOG-coverage warning,
|
|
11
11
|
verify the release gates without cutting anything, or author release
|
|
12
12
|
notes/a MIGRATION GUIDE section for a breaking change. NOT for
|
|
13
|
-
consumer-app migration sweeps (
|
|
14
|
-
(
|
|
13
|
+
consumer-app migration sweeps (app-migration) or exe.dev VM ops
|
|
14
|
+
(site-deployment).
|
|
15
15
|
disable-model-invocation: false
|
|
16
16
|
user-invocable: true
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
-
#
|
|
19
|
+
# package-release
|
|
20
20
|
|
|
21
|
-
Release engineering for an @adia-ai-style lockstep monorepo: the `@adia-ai/*` packages on the roster (`scripts/package-paths.mjs`, the single source —
|
|
21
|
+
Release engineering for an @adia-ai-style lockstep monorepo: the `@adia-ai/*` packages on the roster (`scripts/package-paths.mjs`, the single source — 16 lockstep as of gh#1240's MCP-distribution fold (ADR-0048 P5, amended): 14 npm libraries plus the 2 Claude Code plugins under `packages/plugins/*`; 6 of those libraries are the old-name shims marked `shim: true`, which ride the 0.8.37 cut once and are deleted in the P7 follow-up, taking the count to 10) 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.
|
|
22
22
|
|
|
23
23
|
## Authorization — one go, gates do the rest (operator ruling 2026-07-17)
|
|
24
24
|
|
|
@@ -26,20 +26,20 @@ Release engineering for an @adia-ai-style lockstep monorepo: the `@adia-ai/*` pa
|
|
|
26
26
|
|
|
27
27
|
This replaced the 4-checkpoint sign-off ceremony after the v0.8.5 cut (2026-07-17): ~40 minutes of approval relays that produced zero safety — every real protection had already fired deterministically (the `release-pretag-docs-gate` hook, the pre-push F-N1 trip-wire, the one-tag-per-push rule, the registry verify). Those deterministic gates are untouched and remain non-skippable: **an F-N1 error hard-stops unconditionally — no flag, no instruction wording, bypasses it.**
|
|
28
28
|
|
|
29
|
-
**Releases run INLINE in the operator's session by default.** Do not dispatch a subagent to run an interactive release — a dispatched seat cannot receive the operator's words directly, which the v0.8.5 cut proved structurally deadlocks on any consent question (the relay-refusal loop). The `release-
|
|
29
|
+
**Releases run INLINE in the operator's session by default.** Do not dispatch a subagent to run an interactive release — a dispatched seat cannot receive the operator's words directly, which the v0.8.5 cut proved structurally deadlocks on any consent question (the relay-refusal loop). The `package-release-agent` agent exists for UNATTENDED contexts only (scheduled/batch/CI cuts), where the dispatch itself carries the operator's authorization.
|
|
30
30
|
|
|
31
31
|
Mechanics: `release-pack.mjs --go` auto-confirms all checkpoints (it equals `--yes --push --publish`); the evidence blocks still print as a log — the audit trail survives, nothing waits on input. The granular flags remain for cautious manual runs; interactive prompts fire for whatever flag is absent. A cosmetic F-N1 warn still refuses auto-confirmation at the push boundary — with Step 4f (mechanized pre-tag coverage) warns should be extinct, so one appearing means something novel: treat it as a gate failure, not ceremony.
|
|
32
32
|
|
|
33
33
|
## Invariants (class-A lockstep cut)
|
|
34
34
|
|
|
35
|
-
1. **Lockstep coherence** — every roster package bumps together (`check:lockstep
|
|
35
|
+
1. **Lockstep coherence** — every roster package bumps together (`check:lockstep`). **The roster is `scripts/package-paths.mjs`'s `PACKAGE_ROSTER` — read it, never a copy.** This line used to enumerate the names inline and went stale the first time the roster moved (ADR-0048 P4 added a package while the list still read the pre-split six); a name list here has no gate behind it, so it can only decay. Each plugin's `.claude-plugin/plugin.json` version moves with its package.json — `bump.mjs` handles both; `verify:plugins` gates the sync.
|
|
36
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).
|
|
37
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.
|
|
38
|
-
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` + 16 × `<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.
|
|
39
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.
|
|
40
40
|
6. **`npm dist-tag latest` is set by publish order** — batch pushes publish oldest first and WAIT for settle.
|
|
41
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.
|
|
42
|
-
8. **The adia-factory plugin's `.mcp.json` pins
|
|
42
|
+
8. **The adia-factory plugin's `.mcp.json` pins the generation MCP exactly** — bump the pin in `packages/plugins/adia-ui-factory/.mcp.json` in the same cut (the consumer never floats; with the plugins in-lockstep this lands in the release commit itself, not a follow-up). The pinned NAME is still `@adia-ai/a2ui-mcp` and flips to `@adia-ai/gen-ui-mcp` in the ADR-0048 P7 release commit — never before it, because invariant 8 forces the pin to the current lockstep version and the new name has no `0.8.x` on npm (`references/cut-procedure.md` §the P7 cut).
|
|
43
43
|
|
|
44
44
|
The release is done only when reality confirms it: **the npm registry, the GH release page, and the deployed endpoint — a workflow's green check or any self-report is never the verify target.**
|
|
45
45
|
|
|
@@ -59,7 +59,7 @@ The release is done only when reality confirms it: **the npm registry, the GH re
|
|
|
59
59
|
|
|
60
60
|
| Task shape | Done when |
|
|
61
61
|
| --- | --- |
|
|
62
|
-
| 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 16 lockstep packages AND `dist-tags.latest` = X.Y.Z AND a deployed content file (not an SPA route) serves real bytes |
|
|
63
63
|
| Batch push | every batched tag on `git ls-remote --tags origin` + every version on the registry, `latest` on the newest |
|
|
64
64
|
| Verify-only | the failing gate re-runs green |
|
|
65
65
|
| Recovery | the trip-wire that surfaced the issue passes |
|
|
@@ -69,13 +69,13 @@ The release is done only when reality confirms it: **the npm registry, the GH re
|
|
|
69
69
|
|
|
70
70
|
## The Cut Record — the output contract
|
|
71
71
|
|
|
72
|
-
Every cut reports, whether it ran inline or via `release-
|
|
72
|
+
Every cut reports, whether it ran inline or via `package-release-agent`:
|
|
73
73
|
|
|
74
74
|
| Field | Value |
|
|
75
75
|
| --- | --- |
|
|
76
76
|
| Version | X.Y.Z — all roster packages at this version (`check:lockstep`) |
|
|
77
77
|
| Commit / PR | release commit SHA, PR # (merged) |
|
|
78
|
-
| Tags | umbrella `vX.Y.Z` +
|
|
78
|
+
| Tags | umbrella `vX.Y.Z` + 16 per-package tags pushed (or: which are still pending, and why) |
|
|
79
79
|
| Registry | `npm view @adia-ai/<pkg> version` per package, cited (not "publish workflow green") |
|
|
80
80
|
| `dist-tags.latest` | confirmed = X.Y.Z |
|
|
81
81
|
| Deploy | dispatched (`deploy-site.yml` run URL) / N/A this cut |
|
|
@@ -94,9 +94,9 @@ assumed pass, or "published" without the actual `npm view` output.
|
|
|
94
94
|
|
|
95
95
|
## Mechanization (bundled `scripts/`, stdlib Node, all support `--dry`)
|
|
96
96
|
|
|
97
|
-
`release-pack.mjs` walks the cycle in two phases per invariant 3 — `--mode cut` / `--mode from-scratch` promote `[Unreleased]` (BOTH modes now — a peer's hand-authored section must be promoted whichever mode cut it, and a loud guard blocks the bump if any roster package still carries non-empty `[Unreleased]` content after promotion), run Step 4f (pre-tag coverage `--fix` with the authoritative F-N1 matcher), and stop at the release commit (PR → merge); `--mode handoff` tags/publishes/deploys from post-merge main. **`--go` is the standard invocation for an operator-initiated release** — the single authorization covers the cycle; evidence blocks print as a log; granular `--yes`/`--push`/`--publish` remain for cautious manual runs (`--push` still refuses to auto-fire past any F-N1 finding). `--mode batch` is not implemented — it hard-rejects with a pointer to [`recovery-paths.md`](references/recovery-paths.md) §Scenario 2 rather than silently misbehaving; a real batch tags each version at its own release-merge SHA, which this single-version orchestrator has no model for. Pre-flight (Step 3) runs the full
|
|
97
|
+
`release-pack.mjs` walks the cycle in two phases per invariant 3 — `--mode cut` / `--mode from-scratch` promote `[Unreleased]` (BOTH modes now — a peer's hand-authored section must be promoted whichever mode cut it, and a loud guard blocks the bump if any roster package still carries non-empty `[Unreleased]` content after promotion), run Step 4f (pre-tag coverage `--fix` with the authoritative F-N1 matcher), and stop at the release commit (PR → merge); `--mode handoff` tags/publishes/deploys from post-merge main. **`--go` is the standard invocation for an operator-initiated release** — the single authorization covers the cycle; evidence blocks print as a log; granular `--yes`/`--push`/`--publish` remain for cautious manual runs (`--push` still refuses to auto-fire past any F-N1 finding). `--mode batch` is not implemented — it hard-rejects with a pointer to [`recovery-paths.md`](references/recovery-paths.md) §Scenario 2 rather than silently misbehaving; a real batch tags each version at its own release-merge SHA, which this single-version orchestrator has no model for. Pre-flight (Step 3) runs the full 29-gate roster from the single shared list in `scripts/gate-roster.mjs` — the same list [`cut-procedure.md`](references/cut-procedure.md) §3.1 transcribes, so a subset run requires editing that one file, not two.
|
|
98
98
|
|
|
99
|
-
The pieces are callable alone: `bump.mjs` (version fields + the factory `.mcp.json` a2ui-mcp pin, invariant 8), `promote-unreleased.mjs` / `insert-stub.mjs` (CHANGELOG blocks), `tag-lockstep.mjs` (umbrella + one tag per roster package — 14
|
|
99
|
+
The pieces are callable alone: `bump.mjs` (version fields + the factory `.mcp.json` a2ui-mcp pin, invariant 8), `promote-unreleased.mjs` / `insert-stub.mjs` (CHANGELOG blocks), `tag-lockstep.mjs` (umbrella + one tag per lockstep roster package — the set is derived from `PACKAGE_ROSTER`, never a number written here: it went stale at 14 while the roster said 17, 17 went stale in turn when gh#1240 folded two planned MCP rows into one (now 16), and 16 goes stale again the day the ADR-0048 shims retire; run `--dry` to see the live list, `--delete` to move), `dispatch-publish.mjs` (publish workflows; `--verify-triggered` re-dispatches missing AND dead — cancelled/failed/timed-out — runs, each gated behind an npm-registry check so an already-published version is never re-dispatched (gh#763); `--after` enforces batch ordering — dispatch output states what WAS done, never a to-do phrased as if it hadn't fired), and `pr-bridge.mjs` (the two-phase bridge: pushes the release branch, opens the PR, waits out CI, and merges ONLY on all-non-fail-soft-checks-green + zero unresolved threads + no changes-requested; any other state stops with evidence — §5.7 mechanized, `--dry` to preview the decision). All fail fast outside a monorepo root (`assert-monorepo-root.mjs`); fork-configurable via `--host` / `--scope`. All 6 CLI scripts (plus `scripts/release/check-release.mjs`) have a `selftest` mode wired into CI's Plugin bin selftests step; the 3 helper modules (`assert-monorepo-root`, `gate-roster`, `package-paths`) are exercised through the CLIs' selftests, not their own.
|
|
100
100
|
|
|
101
101
|
Site deploy (Step 10 of the handoff) dispatches `deploy-site.yml` (its own pre-flight verify → snapshot → hardened rsync → post-deploy verify → auto-rollback), never a raw local `rsync` — H1 (forge-campaign gh#268 audit): the script had drifted into bypassing that pipeline even though this doc already taught the workflow-dispatch path. The dispatch rides the cycle's single authorization (`--go`, or `--publish` on a manual run); the workflow's own GitHub environment gate is the human stop for the deploy itself.
|
|
102
102
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill": "
|
|
3
|
-
"note": "Trigger-routing suite (forge-campaign gh#268, item 10). expect=trigger: the skill should fire on the prompt in a fresh session. expect=no-trigger: a near-miss owned elsewhere (owner named per case) — exe.dev VM ops route to
|
|
2
|
+
"skill": "package-release",
|
|
3
|
+
"note": "Trigger-routing suite (forge-campaign gh#268, item 10). expect=trigger: the skill should fire on the prompt in a fresh session. expect=no-trigger: a near-miss owned elsewhere (owner named per case) — exe.dev VM ops route to site-deployment, consumer-app migration sweeps route to app-migration, and framework authoring/consumer composition route to primitive-authoring/screen-composition. Covers cut/tag/publish/batch/recovery/notes phrasings per the audit's ask.",
|
|
4
4
|
"cases": [
|
|
5
5
|
{ "id": "t01", "prompt": "Cut and ship v0.8.5 of the AdiaUI packages", "expect": "trigger" },
|
|
6
6
|
{ "id": "t02", "prompt": "The [Unreleased] CHANGELOG entries are piling up, let's cut a release", "expect": "trigger" },
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
{ "id": "t11", "prompt": "Publish the adia-ui-forge plugin independently of the lockstep set", "expect": "trigger" },
|
|
16
16
|
{ "id": "t12", "prompt": "Just verify the release gates are green without cutting anything", "expect": "trigger" },
|
|
17
17
|
{ "id": "t13", "prompt": "Tags are pushed but zero publish workflows fired, what happened", "expect": "trigger" },
|
|
18
|
-
{ "id": "n01", "prompt": "Restart the exe.dev VM, it's returning 502s", "expect": "no-trigger", "owner": "
|
|
19
|
-
{ "id": "n02", "prompt": "Rsync the built dist folder to ui-kit.exe.xyz", "expect": "no-trigger", "owner": "
|
|
20
|
-
{ "id": "n03", "prompt": "Sweep our consumer app for the renamed variant prop after the last breaking release", "expect": "no-trigger", "owner": "
|
|
21
|
-
{ "id": "n04", "prompt": "Add a new size variant to the button-ui primitive", "expect": "no-trigger", "owner": "
|
|
22
|
-
{ "id": "n05", "prompt": "Compose a settings screen for our app from the AdiaUI catalog", "expect": "no-trigger", "owner": "
|
|
18
|
+
{ "id": "n01", "prompt": "Restart the exe.dev VM, it's returning 502s", "expect": "no-trigger", "owner": "site-deployment" },
|
|
19
|
+
{ "id": "n02", "prompt": "Rsync the built dist folder to ui-kit.exe.xyz", "expect": "no-trigger", "owner": "site-deployment" },
|
|
20
|
+
{ "id": "n03", "prompt": "Sweep our consumer app for the renamed variant prop after the last breaking release", "expect": "no-trigger", "owner": "app-migration" },
|
|
21
|
+
{ "id": "n04", "prompt": "Add a new size variant to the button-ui primitive", "expect": "no-trigger", "owner": "primitive-authoring" },
|
|
22
|
+
{ "id": "n05", "prompt": "Compose a settings screen for our app from the AdiaUI catalog", "expect": "no-trigger", "owner": "screen-composition" }
|
|
23
23
|
]
|
|
24
24
|
}
|
|
@@ -1,115 +1,115 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"name": "
|
|
3
|
+
"name": "package-release routing accuracy corpus",
|
|
4
4
|
"version": "2.1.0",
|
|
5
|
-
"purpose": "Routing-eval corpus for
|
|
5
|
+
"purpose": "Routing-eval corpus for package-release. Each phrase declares the skill (expected), a forbidden skill (expected_not, for phrases the source data only ever asserted as \"not this skill\"), or neither. Scored by scripts/skills/run-skill-evals.mjs (TF-IDF token overlap over per-skill description+triggers).",
|
|
6
6
|
"scoring_notes": "Heuristic signal, not ground truth. Treat misroutes as a prompt to tighten the skill description, never as a reason to keyword-stuff it. Real harness routing is LLM-driven.",
|
|
7
|
-
"scope": "
|
|
7
|
+
"scope": "package-release routing \u2014 does this phrase activate package-release?",
|
|
8
8
|
"phrases": [
|
|
9
9
|
{
|
|
10
|
-
"id": "
|
|
10
|
+
"id": "package-release-pos-01",
|
|
11
11
|
"phrase": "Cut and ship v0.8.5 of the AdiaUI packages",
|
|
12
|
-
"expected": "
|
|
12
|
+
"expected": "package-release"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"id": "
|
|
15
|
+
"id": "package-release-pos-02",
|
|
16
16
|
"phrase": "The [Unreleased] CHANGELOG entries are piling up, let's cut a release",
|
|
17
|
-
"expected": "
|
|
17
|
+
"expected": "package-release"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
"id": "
|
|
20
|
+
"id": "package-release-pos-03",
|
|
21
21
|
"phrase": "Tag the lockstep packages and push them to origin",
|
|
22
|
-
"expected": "
|
|
22
|
+
"expected": "package-release"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
|
-
"id": "
|
|
25
|
+
"id": "package-release-pos-04",
|
|
26
26
|
"phrase": "check:lockstep is failing \u2014 one package didn't bump",
|
|
27
|
-
"expected": "
|
|
27
|
+
"expected": "package-release"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
"id": "
|
|
30
|
+
"id": "package-release-pos-05",
|
|
31
31
|
"phrase": "Dispatch the publish workflows for v0.8.5 and verify npm",
|
|
32
|
-
"expected": "
|
|
32
|
+
"expected": "package-release"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"id": "
|
|
35
|
+
"id": "package-release-pos-06",
|
|
36
36
|
"phrase": "We have three unpushed release commits piled up, batch-push them",
|
|
37
|
-
"expected": "
|
|
37
|
+
"expected": "package-release"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
|
-
"id": "
|
|
40
|
+
"id": "package-release-pos-07",
|
|
41
41
|
"phrase": "F-N1 is warning about a CHANGELOG entry not covering a touched directory",
|
|
42
|
-
"expected": "
|
|
42
|
+
"expected": "package-release"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
|
-
"id": "
|
|
45
|
+
"id": "package-release-pos-08",
|
|
46
46
|
"phrase": "The release cut landed on the wrong branch, help me recover",
|
|
47
|
-
"expected": "
|
|
47
|
+
"expected": "package-release"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
|
-
"id": "
|
|
50
|
+
"id": "package-release-pos-09",
|
|
51
51
|
"phrase": "Author the release notes and Slack post for the last two versions",
|
|
52
|
-
"expected": "
|
|
52
|
+
"expected": "package-release"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"id": "
|
|
55
|
+
"id": "package-release-pos-10",
|
|
56
56
|
"phrase": "This cut removes the variant prop from button-ui, write the MIGRATION GUIDE section",
|
|
57
|
-
"expected": "
|
|
57
|
+
"expected": "package-release"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
|
-
"id": "
|
|
60
|
+
"id": "package-release-pos-11",
|
|
61
61
|
"phrase": "Publish the adia-ui-forge plugin independently of the lockstep set",
|
|
62
|
-
"expected": "
|
|
62
|
+
"expected": "package-release"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
|
-
"id": "
|
|
65
|
+
"id": "package-release-pos-12",
|
|
66
66
|
"phrase": "Just verify the release gates are green without cutting anything",
|
|
67
|
-
"expected": "
|
|
67
|
+
"expected": "package-release"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
|
-
"id": "
|
|
70
|
+
"id": "package-release-pos-13",
|
|
71
71
|
"phrase": "Tags are pushed but zero publish workflows fired, what happened",
|
|
72
|
-
"expected": "
|
|
72
|
+
"expected": "package-release"
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
|
-
"id": "
|
|
75
|
+
"id": "package-release-neg-01",
|
|
76
76
|
"phrase": "Restart the exe.dev VM, it's returning 502s",
|
|
77
|
-
"expected_not": "
|
|
77
|
+
"expected_not": "package-release"
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
|
-
"id": "
|
|
80
|
+
"id": "package-release-neg-02",
|
|
81
81
|
"phrase": "Rsync the built dist folder to ui-kit.exe.xyz",
|
|
82
|
-
"expected_not": "
|
|
82
|
+
"expected_not": "package-release"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
|
-
"id": "
|
|
85
|
+
"id": "package-release-neg-03",
|
|
86
86
|
"phrase": "Sweep our consumer app for the renamed variant prop after the last breaking release",
|
|
87
|
-
"expected_not": "
|
|
87
|
+
"expected_not": "package-release"
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
|
-
"id": "
|
|
90
|
+
"id": "package-release-neg-04",
|
|
91
91
|
"phrase": "Add a new size variant to the button-ui primitive",
|
|
92
|
-
"expected_not": "
|
|
92
|
+
"expected_not": "package-release"
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
|
-
"id": "
|
|
95
|
+
"id": "package-release-neg-05",
|
|
96
96
|
"phrase": "Compose a settings screen for our app from the AdiaUI catalog",
|
|
97
|
-
"expected_not": "
|
|
97
|
+
"expected_not": "package-release"
|
|
98
98
|
},
|
|
99
99
|
{
|
|
100
|
-
"id": "
|
|
100
|
+
"id": "package-release-neg-06",
|
|
101
101
|
"phrase": "zettel coverage dropped on the nightly eval, find out why",
|
|
102
|
-
"expected_not": "
|
|
102
|
+
"expected_not": "package-release"
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
|
-
"id": "
|
|
105
|
+
"id": "package-release-neg-07",
|
|
106
106
|
"phrase": "sweep the component demos for native-primitive leaks before we cut",
|
|
107
|
-
"expected_not": "
|
|
107
|
+
"expected_not": "package-release"
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
"id": "
|
|
110
|
+
"id": "package-release-neg-08",
|
|
111
111
|
"phrase": "the gemini adapter is dropping usage tokens on streamed responses",
|
|
112
|
-
"expected": "
|
|
112
|
+
"expected": "llm-client-maintenance"
|
|
113
113
|
}
|
|
114
114
|
],
|
|
115
115
|
"_measured_historical": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
The heading swap is all that happens; content under it stays:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
node "${CLAUDE_PLUGIN_ROOT}/skills/
|
|
21
|
+
node "${CLAUDE_PLUGIN_ROOT}/skills/package-release/scripts/promote-unreleased.mjs" \
|
|
22
22
|
--version 0.X.Y --date YYYY-MM-DD --packages web-components,web-modules,a2ui/corpus
|
|
23
23
|
```
|
|
24
24
|
|
|
@@ -70,12 +70,12 @@ Why this recurs: cross-package sweeps leave 1–3 incidental touches (a docstrin
|
|
|
70
70
|
## §Stubs — ride-along lockstep
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
|
-
node "${CLAUDE_PLUGIN_ROOT}/skills/
|
|
73
|
+
node "${CLAUDE_PLUGIN_ROOT}/skills/package-release/scripts/insert-stub.mjs" \
|
|
74
74
|
--version 0.X.Y --date YYYY-MM-DD \
|
|
75
75
|
--substantive "<one-line> in @adia-ai/<pkg>" \
|
|
76
76
|
--xref "packages/web-modules/CHANGELOG.md#0XY--YYYY-MM-DD" \
|
|
77
77
|
--previous-version 0.X.Y-1 \
|
|
78
|
-
--packages llm,a2ui
|
|
78
|
+
--packages llm,a2ui-compose,a2ui-mcp,a2ui-retrieval,a2ui-runtime,a2ui-validator
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
The inserted block:
|
|
@@ -111,7 +111,7 @@ This is cut-procedure §Step 4f: the SAME matcher F-N1 uses at tag time (every r
|
|
|
111
111
|
**Recovery — a warn AFTER tagging** (Step 4f skipped, or an interleaved merge added uncovered changes): the release commit is already merged via PR, so `--amend` is not possible —
|
|
112
112
|
|
|
113
113
|
1. Run `--pending-version X.Y.Z --fix`; `git add` the CHANGELOGs; `git commit -m "fix(release): F-N1 enrichment — vX.Y.Z"`; push the branch → PR → CI → merge.
|
|
114
|
-
2. The SHA moved: `node "${CLAUDE_PLUGIN_ROOT}/skills/
|
|
114
|
+
2. The SHA moved: `node "${CLAUDE_PLUGIN_ROOT}/skills/package-release/scripts/tag-lockstep.mjs" --version X.Y.Z --delete`, then re-tag at `main`'s new post-merge HEAD.
|
|
115
115
|
3. Re-run F-N1; expect per-package clean (umbrella error stays, ignored). ONE recovery round — if a second warn appears, the cause is upstream (find what keeps merging into the window), not another enrichment.
|
|
116
116
|
|
|
117
117
|
## §Dating and anchors
|