@adia-ai/adia-ui-forge 0.8.42 → 0.8.44
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 +2 -2
- package/CHANGELOG.md +20 -0
- package/README.md +1 -1
- package/agents/a2ui-maintenance-agent.md +8 -10
- package/agents/a2ui-planner-agent.md +9 -11
- package/agents/{framework-alignment-agent.md → framework-checker.md} +10 -12
- package/agents/package-release-agent.md +8 -11
- package/agents/primitive-authoring-agent.md +6 -8
- package/package.json +1 -1
- package/skills/a2ui-maintenance/SKILL.md +49 -100
- package/skills/a2ui-maintenance/references/eval-diagnostics.md +18 -0
- package/skills/a2ui-maintenance/references/pipeline-overview.md +46 -0
- package/skills/demo-audit/SKILL.md +55 -120
- package/skills/demo-audit/references/auto-fix-allowlist.md +26 -0
- package/skills/demo-audit/references/mode7-status-battery.md +22 -0
- package/skills/demo-audit/references/output-contract-worked-example.md +24 -0
- package/skills/demo-audit/references/probe-discipline-and-escalation.md +27 -0
- package/skills/gen-ui-review/SKILL.md +68 -136
- package/skills/gen-ui-review/references/corpus-html-patterns.md +3 -3
- package/skills/gen-ui-review/references/exit-gate-mechanics.md +26 -0
- package/skills/gen-ui-review/references/lookup-maintenance.md +8 -0
- package/skills/gen-ui-review/references/loop-protocol.md +16 -0
- package/skills/gen-ui-review/references/scorecard-worked-examples.md +36 -0
- package/skills/gen-ui-review/scripts/gen-review-decompose.mjs +1 -1
- package/skills/package-release/SKILL.md +68 -56
- package/skills/package-release/references/authorization-model.md +34 -0
- package/skills/package-release/references/invariants-detail.md +61 -0
- package/skills/package-release/references/mechanization.md +54 -0
- package/skills/package-release/references/recovery-paths.md +10 -0
- package/skills/primitive-authoring/SKILL.md +13 -32
- package/skills/primitive-authoring/references/api-contract.md +58 -0
- package/skills/primitive-authoring/references/code-style.md +38 -0
- package/skills/primitive-authoring/references/primitive-audit.md +1 -1
- package/skills/primitive-authoring/references/svg-authoring.md +4 -4
- package/skills/primitive-authoring/references/token-contract.md +66 -6
- package/skills/site-deployment/SKILL.md +30 -88
- package/skills/site-deployment/references/deploy-playbooks.md +38 -0
- package/skills/ssr-compatibility/SKILL.md +28 -70
- package/skills/ssr-compatibility/references/failure-shapes.md +23 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adia-ui-kit-forge",
|
|
3
|
-
"version": "0.8.
|
|
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).",
|
|
3
|
+
"version": "0.8.44",
|
|
4
|
+
"description": "Maintain the adia-ui (@adia-ai) framework itself \u2014 author primitives and shells, run the A2UI generation pipeline and its corpus, review gen-UI quality, sweep QA, cut releases, deploy. The maintainer counterpart to adia-ui-kit-factory (the consumer/app-author plugin).",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Kim",
|
|
7
7
|
"email": "kim.granlund@adia.ai"
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog — adia-ui-kit-forge
|
|
2
2
|
|
|
3
|
+
## [0.8.44] — 2026-08-20
|
|
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.44 work shipped in charts y-domain pins, table-toolbar compaction ladder, text mono roles, pagination SSR adoption. See `packages/web-components/CHANGELOG.md#0844--2026-08-20` for details.
|
|
7
|
+
- **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
|
|
8
|
+
- **`agent-intents/` touched in this release window** (2 file(s), e.g. `agent-intents/framework-checker.intent.md`) — carried by the entries above.
|
|
9
|
+
- **`agents/` touched in this release window** (5 file(s), e.g. `agents/a2ui-maintenance-agent.md`) — carried by the entries above.
|
|
10
|
+
- **`skills/` touched in this release window** (26 file(s), e.g. `a2ui-maintenance/SKILL.md`) — carried by the entries above.
|
|
11
|
+
|
|
12
|
+
## [0.8.43] — 2026-08-18
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- Knowledge packs harvested for ADR-0061..0074: surface-lifecycle reference (a2ui-maintenance), site-package-registry playbook, attribute-grammar/role-class/tier-model sections, disabled-state token convention (gh#1564, #1609, #1625).
|
|
16
|
+
- primitive-authoring/gen-ui-review references migrated off cut attributes (`hide-*` → `no-*`) so agent-authored demos stop reintroducing them (gh#1617, #1626).
|
|
17
|
+
- token-selection references regenerated for the `--a-ui-bg-disabled` container-low retarget (gh#1596, #1599).
|
|
18
|
+
|
|
19
|
+
### Maintenance
|
|
20
|
+
- **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
|
|
21
|
+
- **`skills/` touched in this release window** (5 file(s), e.g. `references/corpus-html-patterns.md`) — carried by the entries above.
|
|
22
|
+
|
|
3
23
|
## [0.8.42] — 2026-08-17
|
|
4
24
|
|
|
5
25
|
### Maintenance
|
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ invocation dials, references for depth, mechanical rules in hooks, thin agents.
|
|
|
29
29
|
(the serial ship seat) · `framework-planner-agent` (fable, decomposes a framework change
|
|
30
30
|
into PRD/SPEC/LLD/ADR before a builder seat touches it) · `a2ui-planner-agent` (fable,
|
|
31
31
|
same decomposition scoped to A2UI catalog/tier cohesion, never touches corpus or evals) ·
|
|
32
|
-
`framework-
|
|
32
|
+
`framework-checker` (fable, **no Write/Edit** — read-only corpus-wide cohesion
|
|
33
33
|
audit: color tokens, typography, state naming, attrs-as-api, implementation patterns).
|
|
34
34
|
|
|
35
35
|
## Hooks (5 — `hooks/hooks.json` is the roster; `check:plugin-count-claims` guards this header count)
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: a2ui-maintenance-agent
|
|
3
3
|
description: |
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
tuning, diagnosing a regression, or changing the pipeline/corpus/MCP
|
|
13
|
-
surface.
|
|
4
|
+
Execution seat for the preloaded `a2ui-maintenance` procedure — tunes and repairs
|
|
5
|
+
the A2UI pipeline rather than just describing it. Use for strategy tuning
|
|
6
|
+
(STRONG_MATCH threshold), chunk/fragment authoring or harvest, eval-gap diagnosis
|
|
7
|
+
(coverage or F1 regressed, a semantic fail to lift, a recalibration), or an MCP
|
|
8
|
+
tool change.
|
|
9
|
+
NOT for explaining the pipeline's existing floors/labels/architecture from its own
|
|
10
|
+
docs (answer inline, no dispatch needed) — only for actually tuning, diagnosing a
|
|
11
|
+
regression, or changing the surface.
|
|
14
12
|
tools: Read, Grep, Glob, Edit, Write, Bash
|
|
15
13
|
skills:
|
|
16
14
|
- a2ui-maintenance
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: a2ui-planner-agent
|
|
3
3
|
description: |
|
|
4
|
-
Decomposes an A2UI catalog-system change — tier structure,
|
|
5
|
-
cross-package cohesion
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
(
|
|
12
|
-
|
|
13
|
-
(framework-planner-agent); NOT for reviewing an existing PRD/SPEC/LLD/ADR
|
|
14
|
-
(docs:doc-checker).
|
|
4
|
+
Decomposes an A2UI catalog-system change — tier structure, contract shape,
|
|
5
|
+
cross-package cohesion across a2ui, gen-ui engine, primitives' yaml SoTs — into
|
|
6
|
+
ratified design docs (PRD/SPEC/LLD/ADR, whichever tiers it earns) before
|
|
7
|
+
`a2ui-maintenance-agent` builds it. Use PROACTIVELY when a catalog or tier change
|
|
8
|
+
touches more than one package, or a contract decision needs ratifying.
|
|
9
|
+
NOT for pipeline tuning, corpus harvest, retrieval calibration, or eval-floor
|
|
10
|
+
diagnosis (a2ui-maintenance-agent — catalog architecture only); NOT for a
|
|
11
|
+
framework change outside A2UI (framework-planner-agent); NOT for reviewing an
|
|
12
|
+
existing doc (docs:doc-checker).
|
|
15
13
|
tools: Read, Grep, Glob, Write, Edit
|
|
16
14
|
skills:
|
|
17
15
|
- break-down-problem
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: framework-
|
|
2
|
+
name: framework-checker
|
|
3
3
|
description: |
|
|
4
4
|
Read-only cohesion auditor for the whole primitive corpus — color-token usage,
|
|
5
5
|
typography scale, component-state naming, attributes-as-api conformance, and
|
|
6
|
-
implementation-pattern consistency
|
|
7
|
-
|
|
8
|
-
or whenever someone asks "are we consistent about X across primitives" or "does this
|
|
9
|
-
new pattern match how the rest of the framework does it".
|
|
6
|
+
implementation-pattern consistency. Use to check for drift across primitives, or
|
|
7
|
+
"are we consistent about X" / "does this pattern match the rest of the framework".
|
|
10
8
|
NOT for browser-based visual/anatomy/leak/shell-composition QA or gallery scoring
|
|
11
|
-
(framework-reviewer —
|
|
12
|
-
|
|
13
|
-
component's review at build time (primitive-authoring's own
|
|
9
|
+
(framework-reviewer — never renders anything, static source only); NOT for fixing
|
|
10
|
+
what it finds (primitive-authoring-agent — generator ≠ critic); NOT for one
|
|
11
|
+
component's review at build time (primitive-authoring's own verify target).
|
|
14
12
|
tools: Read, Grep, Glob, Bash
|
|
15
13
|
skills:
|
|
16
14
|
- primitive-authoring
|
|
@@ -21,7 +19,7 @@ model: fable
|
|
|
21
19
|
effort: high
|
|
22
20
|
---
|
|
23
21
|
|
|
24
|
-
The framework-
|
|
22
|
+
The framework-checker sweeps the named scope (the whole primitive corpus, or a
|
|
25
23
|
given directory/subset) against the preloaded `primitive-authoring` standards — the
|
|
26
24
|
four-axis contract, the component-token contract, `traits.md`, and the attribute-api
|
|
27
25
|
rules — and reports drift across five dimensions: color tokens, typography scale,
|
|
@@ -46,15 +44,15 @@ ordered with file:line evidence.
|
|
|
46
44
|
|
|
47
45
|
<example>
|
|
48
46
|
user: "Are all the form primitives using the same disabled-state pattern, or has it drifted?"
|
|
49
|
-
assistant: Dispatching framework-
|
|
47
|
+
assistant: Dispatching framework-checker for a component-state-naming sweep scoped to the form primitives.
|
|
50
48
|
</example>
|
|
51
49
|
|
|
52
50
|
<example>
|
|
53
51
|
user: "Sweep the whole corpus for raw color values before the next cut"
|
|
54
|
-
assistant: Dispatching framework-
|
|
52
|
+
assistant: Dispatching framework-checker for a corpus-wide color-token cohesion sweep.
|
|
55
53
|
</example>
|
|
56
54
|
|
|
57
55
|
<example>
|
|
58
56
|
user: "Fix the raw hex colors the last sweep found in button-ui"
|
|
59
|
-
assistant: That's a repair, not an audit — dispatching primitive-authoring-agent to apply the fix; framework-
|
|
57
|
+
assistant: That's a repair, not an audit — dispatching primitive-authoring-agent to apply the fix; framework-checker would only re-confirm the same findings.
|
|
60
58
|
</example>
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: package-release-agent
|
|
3
3
|
description: |
|
|
4
|
-
The UNATTENDED release seat — runs @adia-ai lockstep cuts (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
(the v0.8.5 cut proved it). Serial seat: never two at once, and a
|
|
13
|
-
resumed dispatch continues the SAME cut — never forks a parallel worker
|
|
14
|
-
against the shared worktree.
|
|
4
|
+
The UNATTENDED release seat — runs @adia-ai lockstep cuts (roster: see
|
|
5
|
+
scripts/package-paths.mjs). Use only with no live operator session: scheduled
|
|
6
|
+
cuts, batch pushes, CI-dispatched recovery. An operator-initiated release runs
|
|
7
|
+
INLINE in the operator's own session instead (single-authorization model,
|
|
8
|
+
operator ruling 2026-07-17) — do NOT dispatch this agent when the operator is
|
|
9
|
+
present; the relay hop adds no safety and deadlocks on consent (v0.8.5 proved
|
|
10
|
+
it). Serial seat: never two at once; a resumed dispatch continues the SAME
|
|
11
|
+
cut — never forks a parallel worker against the shared worktree.
|
|
15
12
|
tools: Read, Grep, Glob, Edit, Write, Bash
|
|
16
13
|
skills:
|
|
17
14
|
- package-release
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: primitive-authoring-agent
|
|
3
3
|
description: |
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
adapter/streaming/bridge contract is a different skill's charter even
|
|
11
|
-
though it lives in this monorepo.
|
|
4
|
+
Execution seat for the preloaded `primitive-authoring` procedure — builds and
|
|
5
|
+
modifies framework source rather than just describing the contract. Dispatch for
|
|
6
|
+
any in-tree authoring slice: a new primitive, a prop/slot/attribute/CSS-contract
|
|
7
|
+
change, a shell fix, or promoting repeated inline UI into a shared module.
|
|
8
|
+
NOT for @adia-ai/llm internals (llm-client-maintenance) — a different skill's
|
|
9
|
+
charter even though it lives in this monorepo.
|
|
12
10
|
tools: Read, Grep, Glob, Edit, Write, Bash
|
|
13
11
|
skills:
|
|
14
12
|
- primitive-authoring
|
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.44",
|
|
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",
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: a2ui-maintenance
|
|
3
3
|
description: >-
|
|
4
|
-
Maintains the A2UI pipeline (packages/gen-ui/a2ui/): the
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
4
|
+
Maintains the A2UI pipeline (packages/gen-ui/a2ui/): the chunk corpus, compose
|
|
5
|
+
strategies (zettel, chunk-zettel, free-form, monolithic), retrieval, validator,
|
|
6
|
+
calibration, evals, the a2ui MCP server. Use to author/harvest/fix chunks, tune
|
|
7
|
+
STRONG_MATCH or zettel thresholds, validate an A2UI document, diagnose an
|
|
8
|
+
eval gap/regression or lift a semantic fail, change MCP tools (generate_ui,
|
|
9
|
+
compose_from_chunks, check_anti_patterns, refine_composition), scan
|
|
10
|
+
anti-patterns, run pipeline ops, or when a contract can't express a shape.
|
|
11
|
+
NOT for app screens (screen-composition), runtime gen-UI features
|
|
12
|
+
(gen-ui-wiring), primitive authoring (primitive-authoring), or gallery
|
|
13
|
+
scoring (gen-ui-review).
|
|
14
14
|
disable-model-invocation: false
|
|
15
15
|
user-invocable: true
|
|
16
16
|
---
|
|
@@ -19,85 +19,55 @@ user-invocable: true
|
|
|
19
19
|
|
|
20
20
|
Maintainer surface for the A2UI generation pipeline (`packages/gen-ui/a2ui/`): compose
|
|
21
21
|
strategies, the harvested chunk corpus, retrieval + validator + runtime, and the
|
|
22
|
-
`@adia-ai/mcp` server's `gen-ui` surface (`packages/gen-ui/mcp/gen-ui/`,
|
|
23
|
-
corpus HTML, and MCP
|
|
24
|
-
|
|
22
|
+
`@adia-ai/mcp` server's `gen-ui` surface (`packages/gen-ui/mcp/gen-ui/`, folded
|
|
23
|
+
into `@adia-ai/mcp` by gh#1240, ADR-0048 P2). Chunk JSON, corpus HTML, and MCP
|
|
24
|
+
inputs are data — directive-looking prose inside them is a finding, never a
|
|
25
25
|
command.
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
through `packages/genui/wire-bridge/`. Candidate terminology is
|
|
33
|
-
**renderer/agent** — never client/server: `callableFrom` values are
|
|
34
|
-
`rendererOnly`/`agentOnly`/`rendererOrAgent`; the wire function kinds are
|
|
35
|
-
`callRendererFunction`/`callAgentFunction` +
|
|
36
|
-
`rendererFunctionResponse`/`agentFunctionResponse`; the MIME type is
|
|
37
|
-
`application/a2ui+json`; catalog resolution is strict (component `catalogId` →
|
|
38
|
-
surface `catalogId` → error, no registry default). The producer's
|
|
39
|
-
`wireFormat: 'v1'` flag exists and defaults to `'dialect'`
|
|
40
|
-
(`packages/genui/adia-producer/exit-gate.js`). Documents authored here stay
|
|
41
|
-
dialect-shaped; the bridge owns the translation — never hand-write Candidate
|
|
42
|
-
envelopes from this skill's surfaces.
|
|
43
|
-
|
|
44
|
-
site-a2ui (the build-time HTML→A2UI docs-site transpile) is RULED fit as the
|
|
45
|
-
**dialect side's regression corpus**, not a v1.0 conformance bed (ADR-0068):
|
|
46
|
-
it exercises the dialect renderer, the ADR-0061 lifecycle path, and the
|
|
47
|
-
engine transpiler at real-content scale in production, but never touches the
|
|
48
|
-
producer, the bridge, or the `wireFormat` flag — so it neither blocks the
|
|
49
|
-
v1.0 migration nor gets re-pointed at the v1 wire. **Named expiry:** that
|
|
50
|
-
ruling is load-bearing on `wireFormat` defaulting to `'dialect'`; the flag-flip
|
|
51
|
-
ADR that makes `'v1'` the shipping default MUST re-rule site-a2ui's fitness
|
|
52
|
-
(re-point vs retirement-by-attrition) — the fitness verdict expires with the
|
|
53
|
-
`'dialect'` default. Expanding site-a2ui — new message kinds, new consumers,
|
|
54
|
-
or a promotion PROGRAM toward all routes — also invalidates the ruling's
|
|
55
|
-
basis and needs a new decision; burn-down of existing
|
|
56
|
-
`visual-drift`/`blocked-format-gap` rows (including a route thereby becoming
|
|
57
|
-
parity-promoted) is ordinary maintenance and stays permitted (ADR-0068
|
|
58
|
-
Decision 5).
|
|
27
|
+
Two protocol layers coexist (dialect vs the vendored A2UI v1.0 Candidate
|
|
28
|
+
stack) — terms, the site-a2ui regression-corpus ruling (ADR-0068), and the
|
|
29
|
+
named-expiry condition on the `'dialect'` default live in
|
|
30
|
+
[pipeline-overview](references/pipeline-overview.md)'s own Protocol layers
|
|
31
|
+
section; read it before touching the wire-bridge or `wireFormat`.
|
|
59
32
|
|
|
60
33
|
## Route by task shape
|
|
61
34
|
|
|
35
|
+
Unmatched work defaults to pipeline-overview and re-classifies from there.
|
|
36
|
+
|
|
62
37
|
| Task shape | Load |
|
|
63
38
|
| --- | --- |
|
|
64
39
|
| Run the MCP pipeline as an operator (generate → validate → render → feedback) | [mcp-pipeline-ops](references/mcp-pipeline-ops.md) |
|
|
65
40
|
| Modify pipeline internals (generator, retrieval flow, shared engine code) | [pipeline-overview](references/pipeline-overview.md) |
|
|
66
|
-
| Author or refine a chunk (harvest
|
|
41
|
+
| Author or refine a chunk (harvest, fix keywords, add coverage) | [chunk-authoring](references/chunk-authoring.md), then [corpus-discipline](references/corpus-discipline.md) |
|
|
67
42
|
| Decide whether a repeated subtree earns its own chunk | [leverage-rules](references/leverage-rules.md) |
|
|
68
|
-
| Debug zettel composition (wrong
|
|
43
|
+
| Debug zettel composition (wrong label, scope drift, threshold tuning) | [strategy-engines](references/strategy-engines.md) → [zettel-calibration](references/zettel-calibration.md) |
|
|
69
44
|
| Lift a sub-60 semantic fail | [semantic-fail-lifting](references/semantic-fail-lifting.md) |
|
|
70
45
|
| Diagnose an eval gap or regression | [eval-diagnostics](references/eval-diagnostics.md) |
|
|
71
46
|
| Add or change an MCP tool | [mcp-tool-reference](references/mcp-tool-reference.md) |
|
|
72
47
|
| Tune the anti-pattern catalogue | [anti-patterns](references/anti-patterns.md) |
|
|
73
|
-
| A
|
|
74
|
-
| Surface regeneration, pending/stale rendering, the `doc`-setter
|
|
75
|
-
|
|
76
|
-
Unmatched work defaults to pipeline-overview and re-classifies from there.
|
|
48
|
+
| A contract can't express a content shape — decide how to extend it | [format-extension-decisions](references/format-extension-decisions.md) |
|
|
49
|
+
| Surface regeneration, pending/stale rendering, the `doc`-setter bracket | [surface-lifecycle](references/surface-lifecycle.md) (ADR-0061) |
|
|
77
50
|
|
|
78
51
|
## Contracts that gate every change
|
|
79
52
|
|
|
80
|
-
- **MCP tool contracts are frozen-unless-versioned
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
operator proceed + version bump —
|
|
84
|
-
is [../../references/contracts/a2ui-mcp-surface.md](../../references/contracts/a2ui-mcp-surface.md).
|
|
53
|
+
- **MCP tool contracts are frozen-unless-versioned** (breaks Claude Desktop,
|
|
54
|
+
Cursor, the factory plugin) — dry-run schema diff + operator proceed +
|
|
55
|
+
version bump, per [a2ui-mcp-surface](../../references/contracts/a2ui-mcp-surface.md).
|
|
85
56
|
Adding tools is additive and safe.
|
|
86
57
|
- **Corpus authoring is HTML-first.** Chunks come from `data-chunk`-tagged demo
|
|
87
|
-
HTML via `npm run harvest:chunks`; `
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
- **Read calibration history before retuning.** Every constant in
|
|
58
|
+
HTML via `npm run harvest:chunks`; `corpus/chunks/*.json` are build outputs —
|
|
59
|
+
regenerate, never hand-edit.
|
|
60
|
+
- **Eval is the source of truth.** A tweak the eval gate rejects is wrong even
|
|
61
|
+
when it "feels right". Floors are preserve-not-regress and only move up; a
|
|
62
|
+
re-baseline ships in the same PR that justifies it.
|
|
63
|
+
- **Strategy labels are public contract** (eval harness, MCP tools,
|
|
64
|
+
dialog-recorder pattern-match on them: `composition-match` /
|
|
65
|
+
`composition-synthesized` / `synthesis-failed` / `fragment-candidates`) —
|
|
66
|
+
verify the per-label distribution AND the aggregate score after calibration
|
|
67
|
+
changes.
|
|
68
|
+
- **Read calibration history before retuning** — every constant in
|
|
99
69
|
[zettel-calibration](references/zettel-calibration.md) carries a
|
|
100
|
-
tried-and-rejected trail
|
|
70
|
+
tried-and-rejected trail.
|
|
101
71
|
|
|
102
72
|
## Verify targets (name one before executing)
|
|
103
73
|
|
|
@@ -105,18 +75,18 @@ Unmatched work defaults to pipeline-overview and re-classifies from there.
|
|
|
105
75
|
| --- | --- |
|
|
106
76
|
| Pipeline internals | `npm run smoke:engines` + `npm run test:a2ui` (22/22, +1 skipped OK) |
|
|
107
77
|
| Chunk authoring | `npm run harvest:chunks` + rendered check of the source demo page |
|
|
108
|
-
| Strategy engine | `smoke:engines` + `npm run smoke:register-engine` (all-pass
|
|
78
|
+
| Strategy engine | `smoke:engines` + `npm run smoke:register-engine` (all-pass, N drifts) + eval-diff on every affected engine |
|
|
109
79
|
| Zettel calibration | `npm run eval:diff -- --engine zettel` moves the target metric without breaching floors |
|
|
110
80
|
| Eval-gap fix | re-run the failing eval; metric lifted and stable across 3 runs |
|
|
111
|
-
| MCP tool | `npm run mcp:smoke`;
|
|
81
|
+
| MCP tool | `npm run mcp:smoke`; contract changes need a real-client round-trip returning a valid A2UI envelope |
|
|
112
82
|
|
|
113
83
|
Full structural gate after any pipeline change:
|
|
114
84
|
|
|
115
85
|
```bash
|
|
116
|
-
node scripts/build/components.mjs --verify #
|
|
86
|
+
node scripts/build/components.mjs --verify # clean — N up-to-date (drifts, don't pin)
|
|
117
87
|
npm run verify:traits # 100% coverage
|
|
118
88
|
npm run smoke:engines
|
|
119
|
-
npm run smoke:register-engine # all-pass (N drifts
|
|
89
|
+
npm run smoke:register-engine # all-pass (N drifts)
|
|
120
90
|
npm run test:a2ui # 22/22 (+1 skipped OK)
|
|
121
91
|
npm run eval:diff -- --engine zettel # floors: cov≥87, avg≥85, MRR≥0.94
|
|
122
92
|
npm run check:zettel-eval-regression -- --latest --strict # mechanical floor gate
|
|
@@ -124,34 +94,13 @@ npm run check:free-form-eval-regression -- --latest # free-form twin
|
|
|
124
94
|
npm run eval:diff -- --engine free-form # floors: cov≥88, avg≥85, F1≥52
|
|
125
95
|
```
|
|
126
96
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
floors are a committed file, `evals/health/zettel-floor.json` (gh#1391) —
|
|
131
|
-
`scripts/release/check-zettel-eval-regression.mjs` loads it at runtime and refuses
|
|
132
|
-
to run without it, so re-baselining is a JSON diff, not a source edit. Free-form's
|
|
133
|
-
floors are still `ALERT_FLOOR`/`HARD_FLOOR` constants in
|
|
134
|
-
`scripts/release/check-free-form-eval-regression.mjs`.
|
|
135
|
-
|
|
136
|
-
Monolithic floor: cov=100, avg≥95. Dogfood set: 20/20, avg≥95. No mechanical
|
|
137
|
-
regression gate exists for monolithic yet — this floor is convention-only, same
|
|
138
|
-
failure mode the zettel/free-form gates were built to close. A failing gate
|
|
139
|
-
is the artifact — fix at the source (chunk HTML, engine code, tool schema),
|
|
140
|
-
re-run the narrowest gate, then the full sequence. A threshold tweak that
|
|
141
|
-
papers over a failing gate is a regression, not a fix.
|
|
142
|
-
|
|
143
|
-
## The pipeline in one diagram
|
|
144
|
-
|
|
145
|
-
```text
|
|
146
|
-
intent → retrieval (chunk / composition search)
|
|
147
|
-
→ strategy engine (zettel | chunk-zettel | free-form | monolithic)
|
|
148
|
-
→ composer (plan → A2UI JSON)
|
|
149
|
-
→ validator + render + anti-pattern scan
|
|
150
|
-
```
|
|
97
|
+
Floor numbers and which script owns each are in
|
|
98
|
+
[eval-diagnostics](references/eval-diagnostics.md)'s Floor sources section —
|
|
99
|
+
read it before quoting a number; this file's floors above can drift.
|
|
151
100
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
101
|
+
The pipeline in one diagram is in
|
|
102
|
+
[pipeline-overview](references/pipeline-overview.md); every change touches
|
|
103
|
+
exactly one stage — identify which before patching.
|
|
155
104
|
|
|
156
105
|
## Pipeline Change Record — the output contract
|
|
157
106
|
|
|
@@ -77,6 +77,24 @@ npm run eval:compose-from-chunks -- --real-llm --report-file # then real LLM
|
|
|
77
77
|
Stop only when all intents pass and the average is stable across 3 runs, and
|
|
78
78
|
the SKILL.md floors hold.
|
|
79
79
|
|
|
80
|
+
## Floor sources — read before quoting a number
|
|
81
|
+
|
|
82
|
+
The two `check:*-eval-regression` scripts own the floor numbers — read the source
|
|
83
|
+
before quoting a number elsewhere; SKILL.md only mirrors them and can drift (it
|
|
84
|
+
once silently regressed to `cov≥40` before the mechanical gate existed). Zettel's
|
|
85
|
+
floors are a committed file, `evals/health/zettel-floor.json` (gh#1391) —
|
|
86
|
+
`scripts/release/check-zettel-eval-regression.mjs` loads it at runtime and refuses
|
|
87
|
+
to run without it, so re-baselining is a JSON diff, not a source edit. Free-form's
|
|
88
|
+
floors are still `ALERT_FLOOR`/`HARD_FLOOR` constants in
|
|
89
|
+
`scripts/release/check-free-form-eval-regression.mjs`.
|
|
90
|
+
|
|
91
|
+
Monolithic floor: cov=100, avg≥95. Dogfood set: 20/20, avg≥95. No mechanical
|
|
92
|
+
regression gate exists for monolithic yet — this floor is convention-only, same
|
|
93
|
+
failure mode the zettel/free-form gates were built to close. A failing gate
|
|
94
|
+
is the artifact — fix at the source (chunk HTML, engine code, tool schema),
|
|
95
|
+
re-run the narrowest gate, then the full sequence. A threshold tweak that
|
|
96
|
+
papers over a failing gate is a regression, not a fix.
|
|
97
|
+
|
|
80
98
|
## The eval suite's dimensions
|
|
81
99
|
|
|
82
100
|
`packages/gen-ui/mcp/gen-ui/scripts/test-evals.mjs` scores 5 weighted dimensions:
|
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Pipeline overview — generator + retrieval + engines (mode: modify pipeline internals)
|
|
2
2
|
|
|
3
|
+
## Protocol layers — v1.0 Candidate terms
|
|
4
|
+
|
|
5
|
+
Two protocol layers coexist (ADR-0059, `docs/ops/spec/spec-a2ui-v1-conformance.md`):
|
|
6
|
+
the shipping dialect this pipeline emits (Layer A, `packages/gen-ui/a2ui/`) and
|
|
7
|
+
the vendored A2UI v1.0 Candidate stack (Layer B, `packages/genui/`) reached
|
|
8
|
+
through `packages/genui/wire-bridge/`. Candidate terminology is
|
|
9
|
+
**renderer/agent** — never client/server: `callableFrom` values are
|
|
10
|
+
`rendererOnly`/`agentOnly`/`rendererOrAgent`; the wire function kinds are
|
|
11
|
+
`callRendererFunction`/`callAgentFunction` +
|
|
12
|
+
`rendererFunctionResponse`/`agentFunctionResponse`; the MIME type is
|
|
13
|
+
`application/a2ui+json`; catalog resolution is strict (component `catalogId` →
|
|
14
|
+
surface `catalogId` → error, no registry default). The producer's
|
|
15
|
+
`wireFormat: 'v1'` flag exists and defaults to `'dialect'`
|
|
16
|
+
(`packages/genui/adia-producer/exit-gate.js`). Documents authored here stay
|
|
17
|
+
dialect-shaped; the bridge owns the translation — never hand-write Candidate
|
|
18
|
+
envelopes from this skill's surfaces.
|
|
19
|
+
|
|
20
|
+
site-a2ui (the build-time HTML→A2UI docs-site transpile) is RULED fit as the
|
|
21
|
+
**dialect side's regression corpus**, not a v1.0 conformance bed (ADR-0068):
|
|
22
|
+
it exercises the dialect renderer, the ADR-0061 lifecycle path, and the
|
|
23
|
+
engine transpiler at real-content scale in production, but never touches the
|
|
24
|
+
producer, the bridge, or the `wireFormat` flag — so it neither blocks the
|
|
25
|
+
v1.0 migration nor gets re-pointed at the v1 wire. **Named expiry:** that
|
|
26
|
+
ruling is load-bearing on `wireFormat` defaulting to `'dialect'`; the flag-flip
|
|
27
|
+
ADR that makes `'v1'` the shipping default MUST re-rule site-a2ui's fitness
|
|
28
|
+
(re-point vs retirement-by-attrition) — the fitness verdict expires with the
|
|
29
|
+
`'dialect'` default. Expanding site-a2ui — new message kinds, new consumers,
|
|
30
|
+
or a promotion PROGRAM toward all routes — also invalidates the ruling's
|
|
31
|
+
basis and needs a new decision; burn-down of existing
|
|
32
|
+
`visual-drift`/`blocked-format-gap` rows (including a route thereby becoming
|
|
33
|
+
parity-promoted) is ordinary maintenance and stays permitted (ADR-0068
|
|
34
|
+
Decision 5).
|
|
35
|
+
|
|
3
36
|
All paths repo-relative. Specs worth reading before structural changes:
|
|
4
37
|
`.claude/docs/specs/a2ui-v0.9-catalog-guide.md` (protocol + catalog format),
|
|
5
38
|
`.claude/docs/specs/genui-multiturn-architecture.md` (state cache, refiner,
|
|
@@ -7,6 +40,19 @@ op format), `.claude/docs/specs/genui-chunk-marker.md` (chunk attributes),
|
|
|
7
40
|
`.claude/docs/conventions/gen-ui-pipeline.md` (harvester wiring + embedding
|
|
8
41
|
lifecycle), `.claude/docs/specs/package-architecture.md` (package relations).
|
|
9
42
|
|
|
43
|
+
## The pipeline in one diagram
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
intent → retrieval (chunk / composition search)
|
|
47
|
+
→ strategy engine (zettel | chunk-zettel | free-form | monolithic)
|
|
48
|
+
→ composer (plan → A2UI JSON)
|
|
49
|
+
→ validator + render + anti-pattern scan
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Every change touches exactly one stage; identify which before patching. History
|
|
53
|
+
for any constant or decision lives in git and PR descriptions
|
|
54
|
+
(`git log -S STRONG_MATCH_THRESHOLD -- packages/gen-ui/a2ui`).
|
|
55
|
+
|
|
10
56
|
## Key files (verified 2026-07)
|
|
11
57
|
|
|
12
58
|
### Engine orchestration
|