@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
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
// # Dry mode:
|
|
15
15
|
// node dispatch-publish.mjs --version 0.6.22 --dry
|
|
16
16
|
//
|
|
17
|
-
// Part of the
|
|
17
|
+
// Part of the package-release skill. Mechanizes the dispatch loop
|
|
18
18
|
// + handles the npm-latest ordering rule for batch pushes.
|
|
19
19
|
|
|
20
20
|
import { execFileSync } from 'node:child_process';
|
|
@@ -45,11 +45,11 @@ export const GATE_ROSTER = [
|
|
|
45
45
|
// cut. examples-md + site-a2ui are the two generators an `.examples.html`
|
|
46
46
|
// edit invalidates (the v0.8.14 cut lost a CI round-trip to exactly that);
|
|
47
47
|
// contrast is the AA gate that gh#427 widened from 42 to 90 pairs;
|
|
48
|
-
// token-semantics-sync keeps the
|
|
48
|
+
// token-semantics-sync keeps the token-selection pack's generated half honest.
|
|
49
49
|
{ n: 18, cmd: 'npm run check:examples-md-fresh', what: '.examples.md vs .examples.html' },
|
|
50
50
|
{ n: 19, cmd: 'npm run verify:site-a2ui', what: 'site-a2ui converted rows vs source fragments' },
|
|
51
51
|
{ n: 20, cmd: 'npm run verify:contrast', what: 'WCAG AA — canvas-text + text-on-fill pairs' },
|
|
52
|
-
{ n: 21, cmd: 'npm run check:token-semantics-sync', what: '
|
|
52
|
+
{ n: 21, cmd: 'npm run check:token-semantics-sync', what: 'token-selection generated references vs token sources' },
|
|
53
53
|
// Operator directive 2026-07-27: demo surfaces must be discoverable —
|
|
54
54
|
// components/modules with .examples.html need a /site/components route,
|
|
55
55
|
// catalog patterns need their Pattern Library sitemap entry.
|
|
@@ -73,12 +73,12 @@ export const GATE_ROSTER = [
|
|
|
73
73
|
{ n: 25, cmd: 'python3 packages/plugins/adia-ui-factory/scripts/adia-scaffold selftest', what: 'scaffold specifiers resolve in packed tarballs' },
|
|
74
74
|
// gh#1137 (factory-dx-ws6-measurement SPEC, REQ-05) — FLAGGED FOR
|
|
75
75
|
// CONFIRMATION: this entry was authored by the WS-6 build without a live
|
|
76
|
-
//
|
|
76
|
+
// package-release sign-off (no operator was available mid-build to confirm
|
|
77
77
|
// the exact freshness window / regression semantics). Asserts a
|
|
78
78
|
// qa/dx/sweeps/ record exists dated within this cut's window AND its
|
|
79
79
|
// verdict is not a regression-RED (a plain floors<=1 baseline RED does
|
|
80
80
|
// NOT block a cut — only a floor that DROPPED since the prior sweep
|
|
81
|
-
// does). CONFIRMED by
|
|
81
|
+
// does). CONFIRMED by package-release on the first live cut (v0.8.35,
|
|
82
82
|
// 2026-08-13): semantics hold, with one correction — the previous-cut
|
|
83
83
|
// comparison excludes the in-flight target version (self-reference fired
|
|
84
84
|
// on the handoff re-run, since the promoted heading was already on main).
|
|
@@ -93,14 +93,25 @@ export const GATE_ROSTER = [
|
|
|
93
93
|
// concern this is not) — hence `targetVersionArg` rather than
|
|
94
94
|
// `versionArg`, a distinct flag release-pack.mjs's step3PreFlight reads.
|
|
95
95
|
{ n: 28, cmd: 'node scripts/release/write-eval-health.mjs', what: 'evals/health/<version>.json committed, AC-01/AC-02 run for real', targetVersionArg: true },
|
|
96
|
+
// ADR-0048 (gh#1192) estate-split latch. Between P1 (mint @adia-ai/gen-ui)
|
|
97
|
+
// and P5 (shims + roster) the tree is correct in-repo but deliberately
|
|
98
|
+
// NOT publishable: the old package dirs are `private: true` stubs the
|
|
99
|
+
// roster still points at, and a2ui-mcp depends on @adia-ai/gen-ui, which
|
|
100
|
+
// is not on npm until P7. Prose in this doc does not stop a 2am cut; this
|
|
101
|
+
// gate does. It is a tree property (private / unrostered dep edges), not a
|
|
102
|
+
// phase number, so it clears itself when P5 lands — and then stays as a
|
|
103
|
+
// permanent no-cost invariant against any future private-dep edge.
|
|
104
|
+
// Appended rather than inserted: gate numbers are cited as identities in
|
|
105
|
+
// shipped release notes, so renumbering would falsify them.
|
|
106
|
+
{ n: 29, cmd: 'node scripts/release/check-estate-split-latch.mjs', what: 'no lockstep cut mid estate-split (ADR-0048)' },
|
|
96
107
|
];
|
|
97
108
|
|
|
98
109
|
// -- CLI ------------------------------------------------------------------
|
|
99
110
|
// Only runs when invoked directly (not when imported by release-pack.mjs).
|
|
100
111
|
// realpathSync BOTH sides (CodeRabbit, PR #289): a naive string/URL compare
|
|
101
112
|
// breaks under a symlinked invocation — this skill is normally reached
|
|
102
|
-
// through `.claude/skills/
|
|
103
|
-
// skills/
|
|
113
|
+
// through `.claude/skills/package-release` -> `packages/plugins/adia-ui-forge/
|
|
114
|
+
// skills/package-release`, and Node resolves `import.meta.url` through that
|
|
104
115
|
// symlink to the real file while `process.argv[1]` keeps the as-invoked
|
|
105
116
|
// path, so an unresolved compare never matches even when this IS the entry
|
|
106
117
|
// point. Verified directly (see embeddings-chunks.mjs's identical guard).
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
// --substantive "<one-line summary>" \
|
|
10
10
|
// --xref "packages/web-modules/CHANGELOG.md#0622--2026-05-22" \
|
|
11
11
|
// --previous-version 0.6.21 \
|
|
12
|
-
// --packages llm,a2ui
|
|
12
|
+
// --packages llm,a2ui-compose,a2ui-mcp,a2ui-retrieval,a2ui-runtime,a2ui-validator
|
|
13
13
|
//
|
|
14
|
-
// Part of the
|
|
14
|
+
// Part of the package-release skill. Replaces the inline stub-
|
|
15
15
|
// insertion pattern used across v0.6.18 / v0.6.19 / v0.6.20 / v0.6.21
|
|
16
16
|
// cycles.
|
|
17
17
|
|
|
@@ -82,8 +82,20 @@ function insertStub(repo, pkg, anchor, stubBlock, version, dry) {
|
|
|
82
82
|
}
|
|
83
83
|
const txt = fs.readFileSync(p, 'utf8');
|
|
84
84
|
if (txt.includes(`## [${version}]`)) {
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
// TRUE idempotency across partial runs (the gh#976 lesson, learned
|
|
86
|
+
// here on the v0.8.36 cut's r4): an earlier aborted run already
|
|
87
|
+
// inserted this stub — that's the DONE state, not an error. The
|
|
88
|
+
// BOTH-headings danger promote-unreleased guards (real [Unreleased]
|
|
89
|
+
// content that would miss the release) applies here too: a stub
|
|
90
|
+
// package whose [Unreleased] still carries content means it was
|
|
91
|
+
// wrongly classified as a stub — loud stop.
|
|
92
|
+
const un = txt.match(/^## \[Unreleased\][^\n]*\n([\s\S]*?)(?=^## \[|(?![\s\S]))/m);
|
|
93
|
+
if (un && un[1].trim().length > 0) {
|
|
94
|
+
console.error(` ERROR ${pkg} — has [${version}] heading AND non-empty [Unreleased] content: this package is substantive, not a stub — move it to --substantive-packages`);
|
|
95
|
+
return 'already-present';
|
|
96
|
+
}
|
|
97
|
+
console.log(` ok ${pkg} — stub already present (idempotent skip)`);
|
|
98
|
+
return 'inserted';
|
|
87
99
|
}
|
|
88
100
|
if (!txt.includes(anchor)) {
|
|
89
101
|
console.error(` ERROR ${pkg} — anchor '${anchor}' not found`);
|
|
@@ -147,10 +159,20 @@ function selftest() {
|
|
|
147
159
|
console.error('selftest FAIL: stub must land ABOVE the previous-version anchor, not below'); process.exit(1);
|
|
148
160
|
}
|
|
149
161
|
|
|
150
|
-
//
|
|
151
|
-
//
|
|
162
|
+
// TRUE idempotency across partial runs (gh#976 lesson, v0.8.36 r4): a
|
|
163
|
+
// re-run against an already-stubbed target is the DONE state — ok skip,
|
|
164
|
+
// file untouched, never a duplicate block.
|
|
165
|
+
const beforeRerun = fs.readFileSync(clPath, 'utf8');
|
|
152
166
|
const r2 = insertStub(tmp, 'llm', anchor, stub, '0.2.0', false);
|
|
153
|
-
if (r2 !== '
|
|
167
|
+
if (r2 !== 'inserted') { console.error(`selftest FAIL: expected idempotent 'inserted' on re-run, got '${r2}'`); process.exit(1); }
|
|
168
|
+
if (fs.readFileSync(clPath, 'utf8') !== beforeRerun) { console.error('selftest FAIL: idempotent re-run must not modify the file'); process.exit(1); }
|
|
169
|
+
if ((fs.readFileSync(clPath, 'utf8').match(/## \[0\.2\.0\]/g) || []).length !== 1) { console.error('selftest FAIL: duplicate stub block'); process.exit(1); }
|
|
170
|
+
|
|
171
|
+
// The one loud stop left: stub heading present BUT non-empty [Unreleased]
|
|
172
|
+
// — a substantive package misclassified as a stub.
|
|
173
|
+
fs.writeFileSync(clPath, `# C\n\n## [Unreleased]\n\n### Fixed\n- real content\n\n## [0.2.0] — 2026-02-02\n\n- stub\n\n${anchor}\n\n- prior\n`);
|
|
174
|
+
const r3 = insertStub(tmp, 'llm', anchor, stub, '0.2.0', false);
|
|
175
|
+
if (r3 !== 'already-present') { console.error(`selftest FAIL: expected 'already-present' for misclassified stub, got '${r3}'`); process.exit(1); }
|
|
154
176
|
|
|
155
177
|
console.log('selftest OK');
|
|
156
178
|
} finally {
|
|
@@ -55,6 +55,13 @@ import path from 'node:path';
|
|
|
55
55
|
// trip-wire (check-release.mjs's per-tag `checkTag` lookup) reads the FULL
|
|
56
56
|
// roster unfiltered — every pushed tag, lockstep or not, still needs its
|
|
57
57
|
// package.json/CHANGELOG validated, so it must recognize a class-B tag too.
|
|
58
|
+
// `shim` (added ADR-0048 P5): `true` marks an old npm name riding exactly ONE
|
|
59
|
+
// cut as a re-export shim before retirement. It changes NOTHING about how the
|
|
60
|
+
// cut treats the entry — a shim versions, tags, publishes and changelogs like
|
|
61
|
+
// any other lockstep member. It exists so P7's retirement PR has a mechanical
|
|
62
|
+
// answer to "which rows go away", instead of a name list someone has to
|
|
63
|
+
// re-derive from a doc. Absent = a permanent package.
|
|
64
|
+
//
|
|
58
65
|
// Every lockstep-scoped consumer must filter `p.lockstep !== false` itself
|
|
59
66
|
// (this module intentionally does NOT pre-filter PACKAGE_NAMES/PACKAGE_DIRS —
|
|
60
67
|
// they stay full-roster projections so a consumer's own filter is visible at
|
|
@@ -65,12 +72,43 @@ export const PACKAGE_ROSTER = [
|
|
|
65
72
|
{ name: 'llm', dir: 'packages/llm', lockstep: true },
|
|
66
73
|
{ name: 'agent', dir: 'packages/agent', lockstep: true },
|
|
67
74
|
{ name: 'persona', dir: 'packages/persona', lockstep: true },
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
75
|
+
// ── ADR-0048 P5 — the estate split's published names ────────────────────
|
|
76
|
+
//
|
|
77
|
+
// The successors of the six old a2ui-* names. `a2ui`/`gen-ui` join here,
|
|
78
|
+
// which is what turns gate 29 (check-estate-split-latch) green: every
|
|
79
|
+
// workspace dependency edge — web-components → a2ui, mcp/gen-ui → gen-ui,
|
|
80
|
+
// the shims → their successors — now points at a name some cut actually
|
|
81
|
+
// publishes.
|
|
82
|
+
//
|
|
83
|
+
// `mcp` (gh#1240, operator ruling 2026-08-14, roster 17 → 16): folds what
|
|
84
|
+
// were TWO planned rows — `gen-ui-mcp` (P2 rename target) and
|
|
85
|
+
// `a2ui-protocol-mcp` (minted fresh at P4) — into ONE published name,
|
|
86
|
+
// `@adia-ai/mcp`, at `packages/mcp/`. Neither predecessor name ever
|
|
87
|
+
// published a 0.8.x, so this fold has no npm deprecation cycle to run —
|
|
88
|
+
// unlike the SIX old a2ui-* shims below, which really did publish and need
|
|
89
|
+
// one. The two-SERVER decision (ADR-0048 §3) is unchanged; only the
|
|
90
|
+
// npm-distribution row count dropped by one.
|
|
91
|
+
{ name: 'a2ui', dir: 'packages/a2ui', lockstep: true },
|
|
92
|
+
{ name: 'gen-ui', dir: 'packages/gen-ui', lockstep: true },
|
|
93
|
+
{ name: 'mcp', dir: 'packages/mcp', lockstep: true },
|
|
94
|
+
// ── ADR-0048 P5 — the six old names, riding EXACTLY ONE cut as shims ────
|
|
95
|
+
//
|
|
96
|
+
// `npm unpublish` is impossible, so each retired name gets one final publish
|
|
97
|
+
// as a re-export shim (packages/shims/<name>, generated by
|
|
98
|
+
// scripts/build/generate-shims.mjs) plus an `npm deprecate` pointer run
|
|
99
|
+
// post-publish. They are on the roster only so that cut versions, tags,
|
|
100
|
+
// CHANGELOGs and publish workflows treat them like any other package.
|
|
101
|
+
//
|
|
102
|
+
// `shim: true` is the retirement marker, not decoration: P7's follow-up PR
|
|
103
|
+
// deletes exactly the entries carrying it, together with packages/shims/,
|
|
104
|
+
// their publish workflows, and resolvePackageDir's `shims/` fallback below.
|
|
105
|
+
// Nothing else in the roster is allowed to carry it.
|
|
106
|
+
{ name: 'a2ui-runtime', dir: 'packages/shims/a2ui-runtime', lockstep: true, shim: true },
|
|
107
|
+
{ name: 'a2ui-compose', dir: 'packages/shims/a2ui-compose', lockstep: true, shim: true },
|
|
108
|
+
{ name: 'a2ui-corpus', dir: 'packages/shims/a2ui-corpus', lockstep: true, shim: true },
|
|
109
|
+
{ name: 'a2ui-mcp', dir: 'packages/shims/a2ui-mcp', lockstep: true, shim: true },
|
|
110
|
+
{ name: 'a2ui-retrieval', dir: 'packages/shims/a2ui-retrieval', lockstep: true, shim: true },
|
|
111
|
+
{ name: 'a2ui-validator', dir: 'packages/shims/a2ui-validator', lockstep: true, shim: true },
|
|
74
112
|
// Plugins joined the lockstep 2026-07-15 (check-lockstep.mjs POLICY note);
|
|
75
113
|
// each carries a .claude-plugin/plugin.json that bumps with package.json.
|
|
76
114
|
{ name: 'adia-ui-factory', dir: 'packages/plugins/adia-ui-factory', lockstep: true, plugin: true },
|
|
@@ -98,6 +136,13 @@ export const PACKAGE_DIRS = PACKAGE_ROSTER.map((p) => p.dir);
|
|
|
98
136
|
// error against the resolved path).
|
|
99
137
|
export function resolvePackageDir(repo, pkg) {
|
|
100
138
|
if (fs.existsSync(path.join(repo, 'packages', pkg))) return pkg;
|
|
139
|
+
// ADR-0048 P3 — the old a2ui-* names now live at packages/shims/<old-name>.
|
|
140
|
+
// Tried before the legacy packages/a2ui/<x> nesting below so the shim wins
|
|
141
|
+
// while both could exist; both fallbacks die when P5 retires the shims.
|
|
142
|
+
if (/^a2ui-/.test(pkg)) {
|
|
143
|
+
const shim = path.join('shims', pkg);
|
|
144
|
+
if (fs.existsSync(path.join(repo, 'packages', shim))) return shim;
|
|
145
|
+
}
|
|
101
146
|
const m = /^a2ui-(.+)$/.exec(pkg);
|
|
102
147
|
if (m) {
|
|
103
148
|
const nested = path.join('a2ui', m[1]);
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
//
|
|
38
38
|
// Exit: 0 merged + main re-baselined · 1 stopped (evidence printed) · 2 bad args.
|
|
39
39
|
//
|
|
40
|
-
// Part of the
|
|
40
|
+
// Part of the package-release skill. Registered in CI's "Plugin bin selftests".
|
|
41
41
|
|
|
42
42
|
import { execSync, execFileSync } from 'node:child_process';
|
|
43
43
|
import fs from 'node:fs';
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
// node promote-unreleased.mjs --version 0.6.22 --date 2026-05-22 \
|
|
15
15
|
// --packages web-components,web-modules --dry
|
|
16
16
|
//
|
|
17
|
-
// Part of the
|
|
17
|
+
// Part of the package-release skill. Replaces the inline heading-swap
|
|
18
18
|
// pattern used across v0.6.18 / v0.6.19 / v0.6.20 / v0.6.21 cycles.
|
|
19
19
|
//
|
|
20
20
|
// Exits:
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
// --skip-gates : (DEBUG ONLY) skip pre-flight (don't ship anything!)
|
|
56
56
|
// --skip-site : skip the EXE deploy step (rare; for offline cycles)
|
|
57
57
|
//
|
|
58
|
-
// Part of the
|
|
58
|
+
// Part of the package-release skill. Mechanizes the cut procedure from
|
|
59
59
|
// references/cut-procedure.md. Every confirmation boundary prints its evidence
|
|
60
60
|
// block BEFORE the prompt (H5) — never a bare y/N — whether it waits for input
|
|
61
61
|
// (manual flags) or auto-confirms (--go).
|
|
@@ -223,7 +223,7 @@ function help() {
|
|
|
223
223
|
--substantive "<one-line>" \\
|
|
224
224
|
--xref "packages/web-modules/CHANGELOG.md#0$X$Y$Z--YYYY-MM-DD" \\
|
|
225
225
|
--substantive-packages web-components,web-modules,a2ui/corpus \\
|
|
226
|
-
--stub-packages llm,a2ui
|
|
226
|
+
--stub-packages llm,a2ui-compose,a2ui-mcp,a2ui-retrieval,a2ui-runtime,a2ui-validator
|
|
227
227
|
|
|
228
228
|
Flags: --go (single-authorization: the operator's cut-start go covers the
|
|
229
229
|
whole cycle — auto-confirms ALL checkpoints; stops only on
|
|
@@ -691,6 +691,16 @@ function step5Commit(args) {
|
|
|
691
691
|
'packages/genui/adia-catalog/base.json',
|
|
692
692
|
'packages/genui/adia-catalog/adia-pack.json',
|
|
693
693
|
'packages/genui/adia-catalog/catalog-data.js',
|
|
694
|
+
// gh#1197: gate 28 (write-eval-health.mjs, Step 3) writes this
|
|
695
|
+
// COMMITTED per-cut health record — WS-4 REQ-06's contract — but it
|
|
696
|
+
// never rode the release commit: v0.8.35's and v0.8.36's records both
|
|
697
|
+
// sat untracked until a session close-out swept them by hand (PR
|
|
698
|
+
// #1196). Named after args.version (gate 28 is a targetVersionArg gate,
|
|
699
|
+
// so it always writes at the CUT version, never previous — see Step 3's
|
|
700
|
+
// targetVersionArg comment above). Under --skip-gates the record was
|
|
701
|
+
// never written (Step 3 returned early), so staging it would make the
|
|
702
|
+
// whole `git add` fail on a missing pathspec (PR #1204 review).
|
|
703
|
+
...(args.skipGates ? [] : [`evals/health/${args.version}.json`]),
|
|
694
704
|
...LOCKSTEP_ROSTER.flatMap(({ name, dir, plugin }) => {
|
|
695
705
|
// Roster-driven (H3): each package stages its manifest + CHANGELOG;
|
|
696
706
|
// plugins also stage .claude-plugin/plugin.json (the /plugin-update
|
|
@@ -1009,13 +1019,13 @@ async function main() {
|
|
|
1009
1019
|
const args = parseArgs(process.argv.slice(2));
|
|
1010
1020
|
// Fail-fast guard: refuse to git/npm/gh/curl against a non-monorepo directory.
|
|
1011
1021
|
assertMonorepoRoot(REPO);
|
|
1012
|
-
console.log(`
|
|
1022
|
+
console.log(`package-release release-pack — v${args.version} (${args.mode})${args.dry ? ' [DRY]' : ''}`);
|
|
1013
1023
|
// Stale-plugin-cache self-check (v0.8.32 cut, first failure): the INSTALLED
|
|
1014
1024
|
// plugin cache only refreshes on a version bump, so running this script from
|
|
1015
1025
|
// the cache mid-cycle can execute a version that predates its own guards
|
|
1016
1026
|
// (SKILL.md §Plugin cache). If the repo carries its own copy and the bytes
|
|
1017
1027
|
// differ, warn loudly — the repo copy is almost always the newer one.
|
|
1018
|
-
const repoCopy = path.join(REPO, 'packages/plugins/adia-ui-forge/skills/
|
|
1028
|
+
const repoCopy = path.join(REPO, 'packages/plugins/adia-ui-forge/skills/package-release/scripts/release-pack.mjs');
|
|
1019
1029
|
const selfPath = new URL(import.meta.url).pathname;
|
|
1020
1030
|
if (fs.existsSync(repoCopy) && path.resolve(selfPath) !== path.resolve(repoCopy)) {
|
|
1021
1031
|
const self = fs.readFileSync(selfPath, 'utf8');
|
|
@@ -1115,6 +1125,10 @@ function selftest() {
|
|
|
1115
1125
|
'STOPPING per invariant 3',
|
|
1116
1126
|
// gh#358 — the release branch must actually be created, not just documented.
|
|
1117
1127
|
'git checkout -b release/v9.9.9',
|
|
1128
|
+
// gh#1197 — Step 5's staging pathspec must carry gate 28's committed
|
|
1129
|
+
// health record, or it rides untracked past the release commit
|
|
1130
|
+
// (v0.8.35/v0.8.36 both did, PR #1196 swept them by hand).
|
|
1131
|
+
'evals/health/9.9.9.json',
|
|
1118
1132
|
];
|
|
1119
1133
|
for (const marker of need) {
|
|
1120
1134
|
if (!out.includes(marker)) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// tag-lockstep.mjs — create the lockstep tag set (umbrella vX.Y.Z + one
|
|
3
3
|
// per-package <pkg>-vX.Y.Z per roster entry — package-paths.mjs is the
|
|
4
|
-
// live census;
|
|
4
|
+
// live census; 17 tags as of gh#1240) at HEAD or at a specified SHA.
|
|
5
5
|
//
|
|
6
6
|
// Usage:
|
|
7
7
|
// node tag-lockstep.mjs --version 0.6.22
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
// node tag-lockstep.mjs --version 0.6.22 --delete # delete existing tags
|
|
10
10
|
// node tag-lockstep.mjs --version 0.6.22 --dry # print commands without running
|
|
11
11
|
//
|
|
12
|
-
// Part of the
|
|
12
|
+
// Part of the package-release skill. Mechanizes the tag loop used
|
|
13
13
|
// every cycle.
|
|
14
14
|
|
|
15
15
|
import { execSync } from 'node:child_process';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: primitive-authoring
|
|
3
3
|
description: >-
|
|
4
4
|
Author or modify AdiaUI framework source inside the monorepo — primitives
|
|
5
5
|
(packages/web-components), shells/composites (packages/web-modules), yaml
|
|
@@ -10,19 +10,19 @@ description: >-
|
|
|
10
10
|
module, audit a component's four-axis contract/token usage/lifecycle
|
|
11
11
|
(connected/disconnected symmetry) for drift, or author/write a demo or
|
|
12
12
|
examples.html for a component or composite. NOT for composing app screens
|
|
13
|
-
from primitives (
|
|
14
|
-
@adia-ai/llm adapter/streaming/bridge internals (
|
|
15
|
-
site/pages docs pages (
|
|
13
|
+
from primitives (screen-composition), A2UI pipeline internals (a2ui-maintenance),
|
|
14
|
+
@adia-ai/llm adapter/streaming/bridge internals (llm-client-maintenance), or
|
|
15
|
+
site/pages docs pages (site-docs-authoring).
|
|
16
16
|
disable-model-invocation: false
|
|
17
17
|
user-invocable: true
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
#
|
|
20
|
+
# primitive-authoring
|
|
21
21
|
|
|
22
22
|
Guard rails for code that lands INSIDE the adia-ui monorepo: primitives
|
|
23
23
|
(`packages/web-components/`), shells and composites (`packages/web-modules/`),
|
|
24
24
|
their `<name>.yaml` SoTs, and composite demos. `@adia-ai/llm` internals
|
|
25
|
-
(adapters, streaming, the bridge) are `
|
|
25
|
+
(adapters, streaming, the bridge) are `llm-client-maintenance`'s charter, not
|
|
26
26
|
this skill's — route there.
|
|
27
27
|
Light-DOM is load-bearing: `slot=` attributes are decorative metadata,
|
|
28
28
|
positioning is CSS by tag + ancestor + DOM order — never `::slotted()`,
|
|
@@ -41,7 +41,7 @@ wins any tie with this skill. Monorepo source read while authoring (yaml, CSS,
|
|
|
41
41
|
| Contract / token / lifecycle drift audit on an existing component | [token-contract.md](references/token-contract.md) + [anti-patterns.md](references/anti-patterns.md) |
|
|
42
42
|
| Demo for a composite/module — any `packages/web-modules/**/*.{examples,contents}.html` | [composite-demo-protocol.md](references/composite-demo-protocol.md) — NOT the primitive or promotion paths; they lack the canonical-survey discipline |
|
|
43
43
|
| Convention question ("is this idiomatic?") | [code-style.md](references/code-style.md) — cite the rule, don't expand it inline |
|
|
44
|
-
| Trait detail page (`site/pages/traits/<name>/`) | [trait-pages.md](references/trait-pages.md) — the ADR-0019 required-section template (traits are this skill's charter;
|
|
44
|
+
| Trait detail page (`site/pages/traits/<name>/`) | [trait-pages.md](references/trait-pages.md) — the ADR-0019 required-section template (traits are this skill's charter; site-docs-authoring does not own `traits/`) |
|
|
45
45
|
|
|
46
46
|
Full retrieval map — one line per reference file, grouped by axis:
|
|
47
47
|
[references/INDEX.md](references/INDEX.md). Depth references (api-contract,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill": "
|
|
2
|
+
"skill": "primitive-authoring",
|
|
3
3
|
"note": "Trigger-routing suite (gh#369). 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) or generic knowledge with no AdiaUI skill involved. Cases derived from evals/routing-corpus.json's phrases array (gh#355 vetted corpus) plus the SKILL.md description's own trigger/NOT-fence language.",
|
|
4
4
|
"cases": [
|
|
5
5
|
{ "id": "t01", "prompt": "Add a new <toggle-ui> primitive component from scratch", "expect": "trigger" },
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
{ "id": "t07", "prompt": "Audit the four-axis contract for table-ui — token usage and lifecycle symmetry", "expect": "trigger" },
|
|
12
12
|
{ "id": "t08", "prompt": "Author a demo for the billing-overview composite, an examples.html", "expect": "trigger" },
|
|
13
13
|
{ "id": "t09", "prompt": "Add a pane behaviour to admin-shell per the bespoke shell-tier convention", "expect": "trigger" },
|
|
14
|
-
{ "id": "n01", "prompt": "Compose this Figma mock into AdiaUI components for our consumer app", "expect": "no-trigger", "owner": "
|
|
15
|
-
{ "id": "n02", "prompt": "Cut a release of the next version and publish the npm packages", "expect": "no-trigger", "owner": "
|
|
16
|
-
{ "id": "n03", "prompt": "Tune the zettel composition coverage, the eval is at 38%", "expect": "no-trigger", "owner": "
|
|
17
|
-
{ "id": "n04", "prompt": "Deploy the API service to the hosting platform", "expect": "no-trigger", "owner": "
|
|
18
|
-
{ "id": "n05", "prompt": "The gemini adapter is dropping usage tokens on streamed responses", "expect": "no-trigger", "owner": "
|
|
19
|
-
{ "id": "n06", "prompt": "Extend the LLM bridge in @adia-ai/llm to add a new provider", "expect": "no-trigger", "owner": "
|
|
14
|
+
{ "id": "n01", "prompt": "Compose this Figma mock into AdiaUI components for our consumer app", "expect": "no-trigger", "owner": "screen-composition" },
|
|
15
|
+
{ "id": "n02", "prompt": "Cut a release of the next version and publish the npm packages", "expect": "no-trigger", "owner": "package-release" },
|
|
16
|
+
{ "id": "n03", "prompt": "Tune the zettel composition coverage, the eval is at 38%", "expect": "no-trigger", "owner": "a2ui-maintenance" },
|
|
17
|
+
{ "id": "n04", "prompt": "Deploy the API service to the hosting platform", "expect": "no-trigger", "owner": "site-deployment" },
|
|
18
|
+
{ "id": "n05", "prompt": "The gemini adapter is dropping usage tokens on streamed responses", "expect": "no-trigger", "owner": "llm-client-maintenance" },
|
|
19
|
+
{ "id": "n06", "prompt": "Extend the LLM bridge in @adia-ai/llm to add a new provider", "expect": "no-trigger", "owner": "llm-client-maintenance" },
|
|
20
20
|
{ "id": "n07", "prompt": "Explain how React hooks work in general", "expect": "no-trigger" }
|
|
21
21
|
]
|
|
22
22
|
}
|
|
@@ -1,155 +1,155 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"name": "
|
|
3
|
+
"name": "primitive-authoring routing accuracy corpus",
|
|
4
4
|
"version": "2.1.0",
|
|
5
|
-
"purpose": "Routing-eval corpus for
|
|
5
|
+
"purpose": "Routing-eval corpus for primitive-authoring. 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": "primitive-authoring routing \u2014 does this phrase activate primitive-authoring?",
|
|
8
8
|
"phrases": [
|
|
9
9
|
{
|
|
10
|
-
"id": "
|
|
10
|
+
"id": "primitive-authoring-pos-01",
|
|
11
11
|
"phrase": "add a new button-ui primitive component",
|
|
12
|
-
"expected": "
|
|
12
|
+
"expected": "primitive-authoring"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"id": "
|
|
15
|
+
"id": "primitive-authoring-pos-02",
|
|
16
16
|
"phrase": "build a new <toggle-ui> component from scratch",
|
|
17
|
-
"expected": "
|
|
17
|
+
"expected": "primitive-authoring"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
"id": "
|
|
20
|
+
"id": "primitive-authoring-pos-03",
|
|
21
21
|
"phrase": "create a new primitive web component in packages/web-components",
|
|
22
|
-
"expected": "
|
|
22
|
+
"expected": "primitive-authoring"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
|
-
"id": "
|
|
25
|
+
"id": "primitive-authoring-pos-04",
|
|
26
26
|
"phrase": "add a new prop to table-ui",
|
|
27
|
-
"expected": "
|
|
27
|
+
"expected": "primitive-authoring"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
"id": "
|
|
30
|
+
"id": "primitive-authoring-pos-05",
|
|
31
31
|
"phrase": "fix the CSS in card-ui to handle the new bleed variant",
|
|
32
|
-
"expected": "
|
|
32
|
+
"expected": "primitive-authoring"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"id": "
|
|
35
|
+
"id": "primitive-authoring-pos-06",
|
|
36
36
|
"phrase": "update the input-ui yaml to add a placeholder attribute",
|
|
37
|
-
"expected": "
|
|
37
|
+
"expected": "primitive-authoring"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
|
-
"id": "
|
|
40
|
+
"id": "primitive-authoring-pos-07",
|
|
41
41
|
"phrase": "build the chat-shell composition with the new sidebar slot",
|
|
42
|
-
"expected": "
|
|
42
|
+
"expected": "primitive-authoring"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
|
-
"id": "
|
|
45
|
+
"id": "primitive-authoring-pos-08",
|
|
46
46
|
"phrase": "author a new web-module shell at packages/web-modules/editor/editor-shell",
|
|
47
|
-
"expected": "
|
|
47
|
+
"expected": "primitive-authoring"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
|
-
"id": "
|
|
50
|
+
"id": "primitive-authoring-pos-09",
|
|
51
51
|
"phrase": "add a pane behaviour to admin-shell per the bespoke shell-tier convention",
|
|
52
|
-
"expected": "
|
|
52
|
+
"expected": "primitive-authoring"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"id": "
|
|
55
|
+
"id": "primitive-authoring-pos-10",
|
|
56
56
|
"phrase": "promote this inline content to a shared web-modules module",
|
|
57
|
-
"expected": "
|
|
57
|
+
"expected": "primitive-authoring"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
|
-
"id": "
|
|
60
|
+
"id": "primitive-authoring-pos-11",
|
|
61
61
|
"phrase": "this content keeps repeating across apps, extract to a shared module",
|
|
62
|
-
"expected": "
|
|
62
|
+
"expected": "primitive-authoring"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
|
-
"id": "
|
|
65
|
+
"id": "primitive-authoring-pos-12",
|
|
66
66
|
"phrase": "lift this billing-summary block from apps/saas to web-modules",
|
|
67
|
-
"expected": "
|
|
67
|
+
"expected": "primitive-authoring"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
|
-
"id": "
|
|
70
|
+
"id": "primitive-authoring-pos-13",
|
|
71
71
|
"phrase": "audit the four-axis contract for table-ui",
|
|
72
|
-
"expected": "
|
|
72
|
+
"expected": "primitive-authoring"
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
|
-
"id": "
|
|
75
|
+
"id": "primitive-authoring-pos-14",
|
|
76
76
|
"phrase": "check the token usage in card-ui for drift",
|
|
77
|
-
"expected": "
|
|
77
|
+
"expected": "primitive-authoring"
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
|
-
"id": "
|
|
80
|
+
"id": "primitive-authoring-pos-15",
|
|
81
81
|
"phrase": "lifecycle audit on dropdown-ui \u2014 symmetric connected/disconnected?",
|
|
82
|
-
"expected": "
|
|
82
|
+
"expected": "primitive-authoring"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
|
-
"id": "
|
|
85
|
+
"id": "primitive-authoring-pos-16",
|
|
86
86
|
"phrase": "author a demo for the billing-overview composite",
|
|
87
|
-
"expected": "
|
|
87
|
+
"expected": "primitive-authoring"
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
|
-
"id": "
|
|
90
|
+
"id": "primitive-authoring-pos-17",
|
|
91
91
|
"phrase": "compose the examples.html for dashboard-layout",
|
|
92
|
-
"expected": "
|
|
92
|
+
"expected": "primitive-authoring"
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
|
-
"id": "
|
|
95
|
+
"id": "primitive-authoring-pos-18",
|
|
96
96
|
"phrase": "write the demo for <integrations-page-ui> in packages/web-modules/settings",
|
|
97
|
-
"expected": "
|
|
97
|
+
"expected": "primitive-authoring"
|
|
98
98
|
},
|
|
99
99
|
{
|
|
100
|
-
"id": "
|
|
100
|
+
"id": "primitive-authoring-neg-01",
|
|
101
101
|
"phrase": "compose this Figma mock into AdiaUI components for our consumer app",
|
|
102
|
-
"expected_not": "
|
|
102
|
+
"expected_not": "primitive-authoring"
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
|
-
"id": "
|
|
105
|
+
"id": "primitive-authoring-neg-02",
|
|
106
106
|
"phrase": "cut a release of the next version and publish the npm packages",
|
|
107
|
-
"expected_not": "
|
|
107
|
+
"expected_not": "primitive-authoring"
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
"id": "
|
|
110
|
+
"id": "primitive-authoring-neg-03",
|
|
111
111
|
"phrase": "tune the zettel composition coverage; eval is at 38%",
|
|
112
|
-
"expected_not": "
|
|
112
|
+
"expected_not": "primitive-authoring"
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
|
-
"id": "
|
|
115
|
+
"id": "primitive-authoring-neg-04",
|
|
116
116
|
"phrase": "build a user profile card with avatar and edit actions",
|
|
117
|
-
"expected_not": "
|
|
117
|
+
"expected_not": "primitive-authoring"
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
|
-
"id": "
|
|
120
|
+
"id": "primitive-authoring-neg-05",
|
|
121
121
|
"phrase": "deploy the api service to the hosting platform",
|
|
122
|
-
"expected_not": "
|
|
122
|
+
"expected_not": "primitive-authoring"
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
|
-
"id": "
|
|
125
|
+
"id": "primitive-authoring-neg-06",
|
|
126
126
|
"phrase": "explain how React hooks work",
|
|
127
|
-
"expected_not": "
|
|
127
|
+
"expected_not": "primitive-authoring"
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
|
-
"id": "
|
|
130
|
+
"id": "primitive-authoring-neg-07",
|
|
131
131
|
"phrase": "the gemini adapter is dropping usage tokens on streamed responses",
|
|
132
|
-
"expected": "
|
|
132
|
+
"expected": "llm-client-maintenance"
|
|
133
133
|
},
|
|
134
134
|
{
|
|
135
|
-
"id": "
|
|
135
|
+
"id": "primitive-authoring-neg-08",
|
|
136
136
|
"phrase": "fix the openai stopReason mapping in the llm client",
|
|
137
|
-
"expected_not": "
|
|
137
|
+
"expected_not": "primitive-authoring"
|
|
138
138
|
},
|
|
139
139
|
{
|
|
140
|
-
"id": "
|
|
140
|
+
"id": "primitive-authoring-neg-09",
|
|
141
141
|
"phrase": "extend the LLM bridge to add a new provider",
|
|
142
|
-
"expected_not": "
|
|
142
|
+
"expected_not": "primitive-authoring"
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
|
-
"id": "
|
|
145
|
+
"id": "primitive-authoring-neg-10",
|
|
146
146
|
"phrase": "modify createAdapter in @adia-ai/llm to add chunk-shape support",
|
|
147
|
-
"expected_not": "
|
|
147
|
+
"expected_not": "primitive-authoring"
|
|
148
148
|
},
|
|
149
149
|
{
|
|
150
|
-
"id": "
|
|
150
|
+
"id": "primitive-authoring-neg-11",
|
|
151
151
|
"phrase": "set up the LLM-bridge surface for a new tool-call provider",
|
|
152
|
-
"expected_not": "
|
|
152
|
+
"expected_not": "primitive-authoring"
|
|
153
153
|
}
|
|
154
154
|
],
|
|
155
155
|
"_measured_historical": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# primitive-authoring references — retrieval map
|
|
2
2
|
|
|
3
3
|
One line per file: `path — the question it answers`. Load this first; load
|
|
4
4
|
files on demand from it. Axes are topical (no severity ranking applies).
|
|
@@ -38,4 +38,4 @@ file, including the depth references those entries cross-link.
|
|
|
38
38
|
|
|
39
39
|
## Historical
|
|
40
40
|
|
|
41
|
-
- [llm-bridge.md](llm-bridge.md) — superseded 2026-07-18 pointer: `@adia-ai/llm` internals belong to `
|
|
41
|
+
- [llm-bridge.md](llm-bridge.md) — superseded 2026-07-18 pointer: `@adia-ai/llm` internals belong to `llm-client-maintenance`; kept only to redirect.
|
|
@@ -233,7 +233,7 @@ npm run verify:palette # CVD thresholds across theme × scheme
|
|
|
233
233
|
node -c path/to/new/file.js # JS syntax check
|
|
234
234
|
```
|
|
235
235
|
|
|
236
|
-
The full release-side gate roster lives in the sibling **
|
|
236
|
+
The full release-side gate roster lives in the sibling **package-release** skill; run its pre-flight sweep after any structural change.
|
|
237
237
|
|
|
238
238
|
If a gate fails, fix before declaring done.
|
|
239
239
|
|