@adia-ai/adia-ui-forge 0.8.36 → 0.8.38

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.
Files changed (126) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +53 -18
  3. package/README.md +17 -17
  4. package/agents/{a2ui-builder.corpus.json → a2ui-maintenance-agent.corpus.json} +1 -1
  5. package/agents/{a2ui-builder.md → a2ui-maintenance-agent.md} +6 -6
  6. package/agents/framework-reviewer.md +6 -6
  7. package/agents/{release-builder.corpus.json → package-release-agent.corpus.json} +3 -3
  8. package/agents/{release-builder.md → package-release-agent.md} +7 -7
  9. package/agents/{component-author.corpus.json → primitive-authoring-agent.corpus.json} +2 -2
  10. package/agents/{component-author.md → primitive-authoring-agent.md} +7 -7
  11. package/agents/routing-corpus.json +40 -40
  12. package/commands/{dogfood.md → demo-audit.md} +2 -1
  13. package/commands/{gen-review.md → gen-ui-review.md} +3 -2
  14. package/commands/{release.md → package-release.md} +3 -2
  15. package/commands/{deploy.md → site-deployment.md} +2 -1
  16. package/package.json +1 -1
  17. package/references/contracts/a2ui-mcp-surface.md +16 -8
  18. package/references/contracts/migration-guide-format.md +4 -4
  19. package/scripts/demo-postwrite-pattern-gate +2 -2
  20. package/scripts/release-pretag-docs-gate +2 -2
  21. package/scripts/sidecar-prewrite-guard +3 -3
  22. package/skills/{adia-a2ui → a2ui-maintenance}/SKILL.md +10 -9
  23. package/skills/{adia-a2ui → a2ui-maintenance}/evals/evals.json +8 -8
  24. package/skills/{adia-a2ui → a2ui-maintenance}/evals/routing-corpus.json +51 -51
  25. package/skills/{adia-a2ui → a2ui-maintenance}/references/anti-patterns.md +2 -2
  26. package/skills/{adia-a2ui → a2ui-maintenance}/references/chunk-authoring.md +2 -2
  27. package/skills/{adia-a2ui → a2ui-maintenance}/references/eval-diagnostics.md +3 -3
  28. package/skills/{adia-a2ui → a2ui-maintenance}/references/format-extension-decisions.md +2 -2
  29. package/skills/{adia-a2ui → a2ui-maintenance}/references/mcp-pipeline-ops.md +5 -5
  30. package/skills/{adia-a2ui → a2ui-maintenance}/references/mcp-tool-reference.md +5 -4
  31. package/skills/{adia-a2ui → a2ui-maintenance}/references/pipeline-overview.md +18 -18
  32. package/skills/{adia-a2ui → a2ui-maintenance}/references/semantic-fail-lifting.md +2 -2
  33. package/skills/{adia-a2ui → a2ui-maintenance}/references/strategy-engines.md +2 -2
  34. package/skills/{adia-a2ui → a2ui-maintenance}/references/zettel-calibration.md +2 -2
  35. package/skills/{adia-dogfood → demo-audit}/SKILL.md +8 -8
  36. package/skills/{adia-dogfood → demo-audit}/evals/evals.json +7 -7
  37. package/skills/{adia-dogfood → demo-audit}/evals/routing-corpus.json +43 -43
  38. package/skills/{adia-dogfood → demo-audit}/references/visual-probe-triage.md +1 -1
  39. package/skills/{adia-dogfood → demo-audit}/scripts/analyze.mjs +2 -2
  40. package/skills/{adia-gen-review → gen-ui-review}/SKILL.md +13 -13
  41. package/skills/{adia-gen-review → gen-ui-review}/evals/evals.json +7 -7
  42. package/skills/{adia-gen-review → gen-ui-review}/evals/routing-corpus.json +43 -43
  43. package/skills/{adia-gen-review → gen-ui-review}/references/corpus-html-patterns.md +4 -4
  44. package/skills/{adia-gen-review → gen-ui-review}/references/loop-protocol.md +11 -11
  45. package/skills/{adia-gen-review → gen-ui-review}/references/scores.schema.json +1 -1
  46. package/skills/{adia-gen-review → gen-ui-review}/scripts/gen-review-coverage-audit.mjs +4 -4
  47. package/skills/{adia-gen-review → gen-ui-review}/scripts/gen-review-decompose.mjs +6 -6
  48. package/skills/{adia-gen-review → gen-ui-review}/scripts/gen-review-status.mjs +5 -5
  49. package/skills/{adia-gen-review → gen-ui-review}/scripts/validate-cycle-scores.mjs +5 -5
  50. package/skills/{adia-llm-internals → llm-client-maintenance}/SKILL.md +7 -7
  51. package/skills/{adia-llm-internals → llm-client-maintenance}/evals/evals.json +7 -7
  52. package/skills/{adia-llm-internals → llm-client-maintenance}/evals/routing-corpus.json +49 -49
  53. package/skills/{adia-llm-internals → llm-client-maintenance}/references/adapter-contract.md +3 -3
  54. package/skills/{adia-llm-internals → llm-client-maintenance}/references/add-a-provider.md +5 -5
  55. package/skills/{adia-llm-internals → llm-client-maintenance}/references/bridge-facade.md +2 -2
  56. package/skills/{adia-llm-internals → llm-client-maintenance}/references/browser-proxy-boundary.md +2 -2
  57. package/skills/{adia-llm-internals → llm-client-maintenance}/references/model-registry.md +2 -2
  58. package/skills/{adia-llm-internals → llm-client-maintenance}/references/streaming-sse.md +2 -2
  59. package/skills/{adia-release → package-release}/SKILL.md +16 -16
  60. package/skills/{adia-release → package-release}/evals/evals.json +7 -7
  61. package/skills/{adia-release → package-release}/evals/routing-corpus.json +45 -45
  62. package/skills/{adia-release → package-release}/references/changelog-discipline.md +4 -4
  63. package/skills/{adia-release → package-release}/references/cut-procedure.md +84 -30
  64. package/skills/{adia-release → package-release}/references/gates-catalog.md +7 -6
  65. package/skills/{adia-release → package-release}/references/independent-package-release.md +2 -2
  66. package/skills/{adia-release → package-release}/references/migration-guide-authoring.md +12 -3
  67. package/skills/{adia-release → package-release}/references/recovery-paths.md +5 -5
  68. package/skills/{adia-release → package-release}/scripts/bump.mjs +87 -37
  69. package/skills/{adia-release → package-release}/scripts/dispatch-publish.mjs +1 -1
  70. package/skills/{adia-release → package-release}/scripts/gate-roster.mjs +17 -6
  71. package/skills/{adia-release → package-release}/scripts/insert-stub.mjs +30 -8
  72. package/skills/{adia-release → package-release}/scripts/package-paths.mjs +47 -18
  73. package/skills/{adia-release → package-release}/scripts/pr-bridge.mjs +1 -1
  74. package/skills/{adia-release → package-release}/scripts/promote-unreleased.mjs +1 -1
  75. package/skills/{adia-release → package-release}/scripts/release-pack.mjs +29 -8
  76. package/skills/{adia-release → package-release}/scripts/tag-lockstep.mjs +2 -2
  77. package/skills/{adia-author → primitive-authoring}/SKILL.md +7 -7
  78. package/skills/{adia-author → primitive-authoring}/evals/evals.json +7 -7
  79. package/skills/{adia-author → primitive-authoring}/evals/routing-corpus.json +61 -61
  80. package/skills/{adia-author → primitive-authoring}/references/INDEX.md +2 -2
  81. package/skills/{adia-author → primitive-authoring}/references/authoring-cycle.md +1 -1
  82. package/skills/{adia-author → primitive-authoring}/references/code-style.md +5 -5
  83. package/skills/{adia-author → primitive-authoring}/references/common-gotchas.md +1 -1
  84. package/skills/{adia-author → primitive-authoring}/references/llm-bridge.md +17 -17
  85. package/skills/{adia-author → primitive-authoring}/references/module-promotion.md +5 -5
  86. package/skills/{adia-author → primitive-authoring}/references/shell-patterns.md +2 -2
  87. package/skills/{adia-author → primitive-authoring}/references/trait-pages.md +1 -1
  88. package/skills/{adia-author → primitive-authoring}/scripts/build-canonical-pattern-index.mjs +1 -1
  89. package/skills/{adia-deploy → site-deployment}/SKILL.md +6 -6
  90. package/skills/{adia-deploy → site-deployment}/evals/evals.json +8 -8
  91. package/skills/{adia-deploy → site-deployment}/evals/routing-corpus.json +49 -49
  92. package/skills/{adia-deploy → site-deployment}/references/deploy-playbooks.md +10 -10
  93. package/skills/{adia-site-docs → site-docs-authoring}/SKILL.md +4 -4
  94. package/skills/{adia-site-docs → site-docs-authoring}/evals/evals.json +7 -7
  95. package/skills/{adia-site-docs → site-docs-authoring}/evals/routing-corpus.json +51 -51
  96. package/skills/{adia-site-docs → site-docs-authoring}/intent.md +8 -8
  97. package/skills/{adia-ssr → ssr-compatibility}/SKILL.md +8 -8
  98. package/skills/{adia-ssr → ssr-compatibility}/evals/evals.json +7 -7
  99. package/skills/{adia-ssr → ssr-compatibility}/evals/routing-corpus.json +43 -43
  100. package/skills/{adia-ssr → ssr-compatibility}/references/failure-shapes.md +1 -1
  101. package/skills/{adia-ssr → ssr-compatibility}/references/guard-patterns.md +1 -1
  102. /package/skills/{adia-a2ui → a2ui-maintenance}/references/corpus-discipline.md +0 -0
  103. /package/skills/{adia-a2ui → a2ui-maintenance}/references/leverage-rules.md +0 -0
  104. /package/skills/{adia-dogfood → demo-audit}/references/admin-shell-anatomy.md +0 -0
  105. /package/skills/{adia-dogfood → demo-audit}/references/app-shell-pitfalls.md +0 -0
  106. /package/skills/{adia-dogfood → demo-audit}/references/card-anatomy-sweep.md +0 -0
  107. /package/skills/{adia-dogfood → demo-audit}/references/html-attr-sweep.md +0 -0
  108. /package/skills/{adia-dogfood → demo-audit}/references/native-leak-annotations.md +0 -0
  109. /package/skills/{adia-gen-review → gen-ui-review}/references/rubric-cosmetic.md +0 -0
  110. /package/skills/{adia-gen-review → gen-ui-review}/references/rubric-decompose.md +0 -0
  111. /package/skills/{adia-gen-review → gen-ui-review}/references/rubric-score.md +0 -0
  112. /package/skills/{adia-release → package-release}/references/notes-authoring.md +0 -0
  113. /package/skills/{adia-release → package-release}/scripts/assert-monorepo-root.mjs +0 -0
  114. /package/skills/{adia-author → primitive-authoring}/references/anti-patterns.md +0 -0
  115. /package/skills/{adia-author → primitive-authoring}/references/api-contract.md +0 -0
  116. /package/skills/{adia-author → primitive-authoring}/references/canonical-pattern-index.md +0 -0
  117. /package/skills/{adia-author → primitive-authoring}/references/composite-demo-protocol.md +0 -0
  118. /package/skills/{adia-author → primitive-authoring}/references/css-patterns.md +0 -0
  119. /package/skills/{adia-author → primitive-authoring}/references/lifecycle-patterns.md +0 -0
  120. /package/skills/{adia-author → primitive-authoring}/references/primitive-audit.md +0 -0
  121. /package/skills/{adia-author → primitive-authoring}/references/token-contract.md +0 -0
  122. /package/skills/{adia-author → primitive-authoring}/references/worked-example.md +0 -0
  123. /package/skills/{adia-author → primitive-authoring}/references/yaml-contract.md +0 -0
  124. /package/skills/{adia-ssr → ssr-compatibility}/references/consumer-workarounds.md +0 -0
  125. /package/skills/{adia-ssr → ssr-compatibility}/references/status-ledger.md +0 -0
  126. /package/skills/{adia-ssr → ssr-compatibility}/references/test-without-linkedom.md +0 -0
@@ -1,130 +1,130 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "name": "adia-a2ui routing accuracy corpus",
3
+ "name": "a2ui-maintenance routing accuracy corpus",
4
4
  "version": "2.1.0",
5
- "purpose": "Routing-eval corpus for adia-a2ui. 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).",
5
+ "purpose": "Routing-eval corpus for a2ui-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": "adia-a2ui routing \u2014 does this phrase activate adia-a2ui?",
7
+ "scope": "a2ui-maintenance routing \u2014 does this phrase activate a2ui-maintenance?",
8
8
  "phrases": [
9
9
  {
10
- "id": "adia-a2ui-pos-01",
10
+ "id": "a2ui-maintenance-pos-01",
11
11
  "phrase": "validate this A2UI document",
12
- "expected": "adia-a2ui"
12
+ "expected": "a2ui-maintenance"
13
13
  },
14
14
  {
15
- "id": "adia-a2ui-pos-02",
15
+ "id": "a2ui-maintenance-pos-02",
16
16
  "phrase": "harvest a chunk from this HTML demo",
17
- "expected": "adia-a2ui"
17
+ "expected": "a2ui-maintenance"
18
18
  },
19
19
  {
20
- "id": "adia-a2ui-pos-03",
20
+ "id": "a2ui-maintenance-pos-03",
21
21
  "phrase": "zettel coverage dropped after the last change",
22
- "expected": "adia-a2ui"
22
+ "expected": "a2ui-maintenance"
23
23
  },
24
24
  {
25
- "id": "adia-a2ui-pos-04",
25
+ "id": "a2ui-maintenance-pos-04",
26
26
  "phrase": "should this repeated subtree become its own chunk",
27
- "expected": "adia-a2ui"
27
+ "expected": "a2ui-maintenance"
28
28
  },
29
29
  {
30
- "id": "adia-a2ui-pos-05",
30
+ "id": "a2ui-maintenance-pos-05",
31
31
  "phrase": "tune the STRONG_MATCH threshold",
32
- "expected": "adia-a2ui"
32
+ "expected": "a2ui-maintenance"
33
33
  },
34
34
  {
35
- "id": "adia-a2ui-pos-06",
35
+ "id": "a2ui-maintenance-pos-06",
36
36
  "phrase": "run check_anti_patterns on this rendered HTML",
37
- "expected": "adia-a2ui"
37
+ "expected": "a2ui-maintenance"
38
38
  },
39
39
  {
40
- "id": "adia-a2ui-pos-07",
40
+ "id": "a2ui-maintenance-pos-07",
41
41
  "phrase": "refine composition with an OAuth row",
42
- "expected": "adia-a2ui"
42
+ "expected": "a2ui-maintenance"
43
43
  },
44
44
  {
45
- "id": "adia-a2ui-pos-08",
45
+ "id": "a2ui-maintenance-pos-08",
46
46
  "phrase": "MRR dropped in the chunk retrieval eval",
47
- "expected": "adia-a2ui"
47
+ "expected": "a2ui-maintenance"
48
48
  },
49
49
  {
50
- "id": "adia-a2ui-pos-09",
50
+ "id": "a2ui-maintenance-pos-09",
51
51
  "phrase": "add an MCP tool to the a2ui server",
52
- "expected": "adia-a2ui"
52
+ "expected": "a2ui-maintenance"
53
53
  },
54
54
  {
55
- "id": "adia-a2ui-pos-10",
55
+ "id": "a2ui-maintenance-pos-10",
56
56
  "phrase": "audit the training data corpus for drift",
57
- "expected": "adia-a2ui"
57
+ "expected": "a2ui-maintenance"
58
58
  },
59
59
  {
60
- "id": "adia-a2ui-pos-11",
60
+ "id": "a2ui-maintenance-pos-11",
61
61
  "phrase": "diagnose this eval gap and regression",
62
- "expected": "adia-a2ui"
62
+ "expected": "a2ui-maintenance"
63
63
  },
64
64
  {
65
- "id": "adia-a2ui-pos-12",
65
+ "id": "a2ui-maintenance-pos-12",
66
66
  "phrase": "run the MCP pipeline: generate_ui then validate_schema",
67
- "expected": "adia-a2ui"
67
+ "expected": "a2ui-maintenance"
68
68
  },
69
69
  {
70
- "id": "adia-a2ui-pos-13",
70
+ "id": "a2ui-maintenance-pos-13",
71
71
  "phrase": "lift a semantic fail under sixty",
72
- "expected": "adia-a2ui"
72
+ "expected": "a2ui-maintenance"
73
73
  },
74
74
  {
75
- "id": "adia-a2ui-pos-14",
75
+ "id": "a2ui-maintenance-pos-14",
76
76
  "phrase": "why did the composer emit composition-match instead of composition-synthesized",
77
- "expected": "adia-a2ui"
77
+ "expected": "a2ui-maintenance"
78
78
  },
79
79
  {
80
- "id": "adia-a2ui-neg-01",
80
+ "id": "a2ui-maintenance-neg-01",
81
81
  "phrase": "build a settings page from existing primitives",
82
- "expected_not": "adia-a2ui"
82
+ "expected_not": "a2ui-maintenance"
83
83
  },
84
84
  {
85
- "id": "adia-a2ui-neg-02",
85
+ "id": "a2ui-maintenance-neg-02",
86
86
  "phrase": "add a slot to button-ui and update its yaml contract",
87
- "expected_not": "adia-a2ui"
87
+ "expected_not": "a2ui-maintenance"
88
88
  },
89
89
  {
90
- "id": "adia-a2ui-neg-03",
90
+ "id": "a2ui-maintenance-neg-03",
91
91
  "phrase": "cut a release and bump the version tag",
92
- "expected_not": "adia-a2ui"
92
+ "expected_not": "a2ui-maintenance"
93
93
  },
94
94
  {
95
- "id": "adia-a2ui-neg-04",
95
+ "id": "a2ui-maintenance-neg-04",
96
96
  "phrase": "score the generated UI quality in apps/genui",
97
- "expected_not": "adia-a2ui"
97
+ "expected_not": "a2ui-maintenance"
98
98
  },
99
99
  {
100
- "id": "adia-a2ui-neg-05",
100
+ "id": "a2ui-maintenance-neg-05",
101
101
  "phrase": "run a broad visual QA sweep across site and playgrounds",
102
- "expected_not": "adia-a2ui"
102
+ "expected_not": "a2ui-maintenance"
103
103
  },
104
104
  {
105
- "id": "adia-a2ui-neg-06",
105
+ "id": "a2ui-maintenance-neg-06",
106
106
  "phrase": "fix the @adia-ai/llm SSE adapter",
107
- "expected_not": "adia-a2ui"
107
+ "expected_not": "a2ui-maintenance"
108
108
  },
109
109
  {
110
- "id": "adia-a2ui-neg-07",
110
+ "id": "a2ui-maintenance-neg-07",
111
111
  "phrase": "explain how React state management works",
112
- "expected_not": "adia-a2ui"
112
+ "expected_not": "a2ui-maintenance"
113
113
  },
114
114
  {
115
- "id": "adia-a2ui-neg-08",
115
+ "id": "a2ui-maintenance-neg-08",
116
116
  "phrase": "compose a settings screen from catalog primitives",
117
- "expected_not": "adia-a2ui"
117
+ "expected_not": "a2ui-maintenance"
118
118
  },
119
119
  {
120
- "id": "adia-a2ui-neg-09",
120
+ "id": "a2ui-maintenance-neg-09",
121
121
  "phrase": "mount gen-root and wire data resolvers for end users at runtime",
122
- "expected_not": "adia-a2ui"
122
+ "expected_not": "a2ui-maintenance"
123
123
  },
124
124
  {
125
- "id": "adia-a2ui-neg-10",
125
+ "id": "a2ui-maintenance-neg-10",
126
126
  "phrase": "edit the getting-started docs page on the site",
127
- "expected_not": "adia-a2ui"
127
+ "expected_not": "a2ui-maintenance"
128
128
  }
129
129
  ],
130
130
  "_measured_historical": {
@@ -1,6 +1,6 @@
1
1
  # Anti-pattern catalogue — the 8 checks + tuning discipline
2
2
 
3
- `check_anti_patterns` (rule source: `packages/a2ui/retrieval/anti-patterns.js`)
3
+ `check_anti_patterns` (rule source: `packages/gen-ui/a2ui/retrieval/anti-patterns.js`)
4
4
  runs eight checks against rendered HTML:
5
5
 
6
6
  - `noBareDivs` — use a layout component (`col-ui`, `row-ui`, `grid-ui`, `stack-ui`).
@@ -21,7 +21,7 @@ runs eight checks against rendered HTML:
21
21
  finding or feedback against it is noise. Check the output shape first.
22
22
  - **Don't commit intermediate JSON.** Scratch files go under the session
23
23
  scratchpad or `.gitignore`d paths; the corpus is harvester-generated into
24
- `packages/a2ui/corpus/chunks/` via `npm run harvest:chunks`.
24
+ `packages/gen-ui/a2ui/corpus/chunks/` via `npm run harvest:chunks`.
25
25
  - **One rule at a time**, and after any rule/threshold change re-run
26
26
  `npm run mcp:smoke` plus a spot-check over known-clean corpus HTML to
27
27
  measure the false-positive delta before landing.
@@ -3,9 +3,9 @@
3
3
  The corpus is **one-format and harvester-driven**. Hand-authored pattern /
4
4
  composition JSON dirs (`compose/patterns/`, `compose/{fragments,compositions}/`,
5
5
  `corpus/patterns/`) were retired; the only retrieval substrate is
6
- `packages/a2ui/corpus/chunks/` (394 chunks + `_index.json`), produced by
6
+ `packages/gen-ui/a2ui/corpus/chunks/` (394 chunks + `_index.json`), produced by
7
7
  `npm run harvest:chunks`. In-tree SoT for this workflow:
8
- `packages/a2ui/corpus/data-flow.md`.
8
+ `packages/gen-ui/a2ui/corpus/data-flow.md`.
9
9
 
10
10
  ## The authoring loop
11
11
 
@@ -46,7 +46,7 @@ fluctuate).
46
46
  ## Phase 2 — fixes per bucket
47
47
 
48
48
  - **A. Holdout alignment** — map each intent's `expected_chunk` to the actual
49
- top-1; update `packages/a2ui/corpus/evals/holdout-compose-from-chunks.jsonl`.
49
+ top-1; update `packages/gen-ui/a2ui/corpus/evals/holdout-compose-from-chunks.jsonl`.
50
50
  - **E. Measurement traps** — PascalCase→kebab (`AgentTrace` → `agent-trace`,
51
51
  not `agenttrace`); substring false positives (`pane` vs `panel`,
52
52
  `textarea-ui` contains `text-ui` — word boundaries); case sensitivity (`/i`).
@@ -62,7 +62,7 @@ fluctuate).
62
62
  `catalog/ui-patterns/app/<name>/`), `data-chunk` + `data-chunk-kind="block"`
63
63
  markers, real component tags so coverage scoring matches, then
64
64
  `npm run harvest:chunks`.
65
- - **D. Broken render** — `packages/a2ui/mcp/scripts/render-fidelity.mjs`
65
+ - **D. Broken render** — `packages/gen-ui/mcp/gen-ui/scripts/render-fidelity.mjs`
66
66
  output (console errors, blank viewport, undefined elements); verify
67
67
  registrations in `packages/web-components/index.js`; check the harvester
68
68
  didn't strip `data-chunk-slot` from page shells.
@@ -79,7 +79,7 @@ the SKILL.md floors hold.
79
79
 
80
80
  ## The eval suite's dimensions
81
81
 
82
- `packages/a2ui/mcp/scripts/test-evals.mjs` scores 5 weighted dimensions:
82
+ `packages/gen-ui/mcp/gen-ui/scripts/test-evals.mjs` scores 5 weighted dimensions:
83
83
  structural_validity 30% · intent_alignment 25% · component_coverage 20% ·
84
84
  card_model_compliance 15% · anti_pattern_count 10%. `--save-baseline`
85
85
  (`npm run test:evals:baseline`) stores scores; later runs flag any dimension
@@ -15,10 +15,10 @@ prop/construct surface.
15
15
  `link`, …). Add a new named type; the component dispatches rendering
16
16
  through the registry it already owns. **Smallest blast radius**: no new
17
17
  A2UI construct, no runtime/validator changes, no registry entry in
18
- `packages/a2ui/runtime/registry.js`. **Ceiling**: only covers formats the
18
+ `packages/gen-ui/a2ui/registry.js`. **Ceiling**: only covers formats the
19
19
  registry's render contract can express (inline-safe content, not
20
20
  arbitrary nested block markup). Building the new registry entry is a
21
- web-components primitive edit — hand off to `adia-author` for the
21
+ web-components primitive edit — hand off to `primitive-authoring` for the
22
22
  implementation half; this reference only decides the tier.
23
23
  2. **New A2UI primitive(s)**, each slot/cell a normal construct subtree (any
24
24
  registered component nestable inside it) — matches how `Column`/`Row`
@@ -23,7 +23,7 @@ node scripts/mcp-call.cjs check_anti_patterns '{"html":"<paste-rendered-html>"}'
23
23
  ```
24
24
 
25
25
  `validate_schema` is fast and deterministic — batch it over
26
- `packages/a2ui/corpus/chunks/*.json` templates to surface corpus drift without
26
+ `packages/gen-ui/a2ui/corpus/chunks/*.json` templates to surface corpus drift without
27
27
  re-running the generator.
28
28
 
29
29
  ## Compose from the chunk corpus
@@ -70,16 +70,16 @@ failures when the corpus drifts: `hasRootComponent` (missing `id: "root"`),
70
70
  `cardContentModel` (section without Column wrapper, or heading inside section
71
71
  instead of header), `headingHierarchy` (skipped levels), `flatAdjacency`
72
72
  (nested components instead of sibling id references). Full list + weights:
73
- `packages/a2ui/mcp/TOOLS.md`.
73
+ `packages/gen-ui/mcp/TOOLS.md` (the `gen-ui` section).
74
74
 
75
75
  ## Feedback loop
76
76
 
77
77
  Score runs with `submit_feedback` keyed on the `executionId` from
78
78
  `generate_ui`. The analyzer
79
- (`packages/a2ui/retrieval/feedback/feedback-analyzer.js`) aggregates
79
+ (`packages/gen-ui/a2ui/retrieval/feedback/feedback-analyzer.js`) aggregates
80
80
  `corpus/feedback/*.jsonl` into per-intent trends, promotion candidates
81
81
  (≥95 score + ≥4 rating across 3+ runs → `npm run feedback:promote`), and the
82
- gap registry (`packages/a2ui/corpus/gaps/registry.json`).
82
+ gap registry (`packages/gen-ui/a2ui/corpus/gaps/registry.json`).
83
83
  `npm run feedback:report` surfaces the current state.
84
84
 
85
85
  ### Human signal (gh#668)
@@ -87,7 +87,7 @@ gap registry (`packages/a2ui/corpus/gaps/registry.json`).
87
87
  Every score in the store except a rating is self-graded — the validator marking
88
88
  its own homework. Human thumbs are the only outside signal, and they arrive two
89
89
  ways, both through the SAME function
90
- (`packages/a2ui/retrieval/feedback/submit-feedback.js`) into the same JSONL:
90
+ (`packages/gen-ui/a2ui/retrieval/feedback/submit-feedback.js`) into the same JSONL:
91
91
 
92
92
  - `submit_feedback` (MCP), and
93
93
  - `POST /api/feedback` from a rendered surface — today the gen-UI gallery's
@@ -1,9 +1,10 @@
1
1
  # MCP tool reference — the a2ui server's tool surface
2
2
 
3
- **Schema SoT is `packages/a2ui/mcp/TOOLS.md` (30 tools), generated alongside
4
- `server.js` — read it for input/output shapes; never restate schemas here
5
- (they drift).** Tools register in `packages/a2ui/mcp/server.js` +
6
- `packages/a2ui/mcp/tools/{corpus,discovery,feedback,refine,synthesis,
3
+ **Schema SoT is `packages/gen-ui/mcp/TOOLS.md` (the `gen-ui` section — 31 tools),
4
+ generated alongside `server.js` — read it for input/output shapes; never
5
+ restate schemas here (they drift).** Tools register in
6
+ `packages/gen-ui/mcp/gen-ui/server.js` +
7
+ `packages/gen-ui/mcp/gen-ui/tools/{corpus,discovery,feedback,refine,synthesis,
7
8
  validation,zettel}.js`. Any tool change updates TOOLS.md in the same commit.
8
9
 
9
10
  ## Stability rule (load-bearing)
@@ -13,38 +13,38 @@ lifecycle), `.claude/docs/specs/package-architecture.md` (package relations).
13
13
 
14
14
  | File | Role |
15
15
  | --- | --- |
16
- | `packages/a2ui/compose/core/generator.js` | `generate_ui` orchestrator — instant / pro / thinking / stream modes; multi-turn via `executionId` |
17
- | `packages/a2ui/compose/strategies/registry.js` | Engine registry — `registerEngine(name, factory)`. Reserved names: `monolithic`, `monolithic-instant`, `monolithic-pro`, `monolithic-thinking`, `zettel`, `chunk-zettel`, `free-form` |
18
- | `packages/a2ui/compose/strategies/zettel/` | Zettel + chunk-zettel engines — see [strategy-engines](strategy-engines.md) for the per-file map |
19
- | `packages/a2ui/compose/strategies/free-form-composer/` | Free-form engine (`index.js`, `system-prompt.js`, `transpile.js`) |
20
- | `packages/a2ui/compose/strategies/_shared/chunk-loader.js` | Shared chunk loading for engines |
21
- | `packages/a2ui/compose/shared/validate-and-repair.js` | Shared closed-loop validate→repair, adopted by every LLM-calling engine (thinking/pro fully; free-form validate-only) — see [strategy-engines](strategy-engines.md) §Closed-loop validation |
22
- | `packages/a2ui/compose/transpiler/transpiler.js` | HTML → A2UI transpile pass (used by harvester + convert_html) |
16
+ | `packages/gen-ui/engine/compose/core/generator.js` | `generate_ui` orchestrator — instant / pro / thinking / stream modes; multi-turn via `executionId` |
17
+ | `packages/gen-ui/engine/compose/strategies/registry.js` | Engine registry — `registerEngine(name, factory)`. Reserved names: `monolithic`, `monolithic-instant`, `monolithic-pro`, `monolithic-thinking`, `zettel`, `chunk-zettel`, `free-form` |
18
+ | `packages/gen-ui/engine/compose/strategies/zettel/` | Zettel + chunk-zettel engines — see [strategy-engines](strategy-engines.md) for the per-file map |
19
+ | `packages/gen-ui/engine/compose/strategies/free-form-composer/` | Free-form engine (`index.js`, `system-prompt.js`, `transpile.js`) |
20
+ | `packages/gen-ui/engine/compose/strategies/_shared/chunk-loader.js` | Shared chunk loading for engines |
21
+ | `packages/gen-ui/engine/compose/shared/validate-and-repair.js` | Shared closed-loop validate→repair, adopted by every LLM-calling engine (thinking/pro fully; free-form validate-only) — see [strategy-engines](strategy-engines.md) §Closed-loop validation |
22
+ | `packages/gen-ui/engine/compose/transpiler/transpiler.js` | HTML → A2UI transpile pass (used by harvester + convert_html) |
23
23
 
24
24
  ### Corpus + retrieval
25
25
 
26
26
  | File | Role |
27
27
  | --- | --- |
28
- | `packages/a2ui/corpus/scripts/chunk-library.js` | Chunk catalog API — `getChunk()`, `searchChunks()` (keyword), `searchChunksAsync()` (keyword + cosine), `listChunksByKind()`, `lookupChunksByPrimary()`. Reads `corpus/chunks/` + `_index.json` |
29
- | `packages/a2ui/compose/strategies/zettel/composition-library.js` | Composition loader + `searchAll()` scoring (normalizes harvested chunks to composition shape) |
28
+ | `packages/gen-ui/a2ui/corpus/scripts/chunk-library.js` | Chunk catalog API — `getChunk()`, `searchChunks()` (keyword), `searchChunksAsync()` (keyword + cosine), `listChunksByKind()`, `lookupChunksByPrimary()`. Reads `corpus/chunks/` + `_index.json` |
29
+ | `packages/gen-ui/engine/compose/strategies/zettel/composition-library.js` | Composition loader + `searchAll()` scoring (normalizes harvested chunks to composition shape) |
30
30
  | `scripts/build/harvest-chunks.mjs` | `[data-chunk]` boundary walker over `site/pages/`, `apps/`, `playgrounds/`, `catalog/` — writes `corpus/chunks/<name>.json` + `_index.json`. Run via `npm run harvest:chunks` |
31
- | `packages/a2ui/retrieval/intent/intent-categorizer.js` | Free-text intent → UI-category taxonomy |
32
- | `packages/a2ui/retrieval/feedback/feedback-analyzer.js` | Aggregates JSONL feedback (`corpus/feedback/*.jsonl`); promotion + gap candidates |
33
- | `packages/a2ui/retrieval/feedback/gap-registry.js` | Persistent gap tracking → `packages/a2ui/corpus/gaps/registry.json` |
34
- | `packages/a2ui/retrieval/anti-patterns.js` | The `check_anti_patterns` rule source |
35
- | `packages/a2ui/compose/core/reference.js` | Thin wrappers over retrieval exports (`searchBlocks`, `searchBlocksSemantic`, …) |
31
+ | `packages/gen-ui/engine/retrieval/intent/intent-categorizer.js` | Free-text intent → UI-category taxonomy |
32
+ | `packages/gen-ui/engine/retrieval/feedback/feedback-analyzer.js` | Aggregates JSONL feedback (`corpus/feedback/*.jsonl`); promotion + gap candidates |
33
+ | `packages/gen-ui/engine/retrieval/feedback/gap-registry.js` | Persistent gap tracking → `packages/gen-ui/a2ui/corpus/gaps/registry.json` |
34
+ | `packages/gen-ui/engine/retrieval/anti-patterns.js` | The `check_anti_patterns` rule source |
35
+ | `packages/gen-ui/engine/compose/core/reference.js` | Thin wrappers over retrieval exports (`searchBlocks`, `searchBlocksSemantic`, …) |
36
36
 
37
37
  ### LLM bridge + MCP
38
38
 
39
39
  | File | Role |
40
40
  | --- | --- |
41
- | `packages/llm/llm-bridge.js` | `createAdapter()` — real LLM or stub fallback |
41
+ | `packages/llm/core/llm-bridge.js` | `createAdapter()` — real LLM or stub fallback |
42
42
  | `scripts/load-env.mjs` | Shared .env loader for Node scripts |
43
- | `packages/a2ui/mcp/server.js` + `mcp/tools/*.js` | MCP stdio server + tool registrations — see [mcp-tool-reference](mcp-tool-reference.md) |
43
+ | `packages/gen-ui/mcp/gen-ui/server.js` + `packages/gen-ui/mcp/gen-ui/tools/*.js` | MCP stdio server + tool registrations — see [mcp-tool-reference](mcp-tool-reference.md) |
44
44
 
45
45
  ## Critical rules
46
46
 
47
- 1. **Relative imports in `packages/llm/*.js`** — never `@llm/` Vite aliases;
47
+ 1. **Relative imports in `packages/llm/core/*.js`** — never `@llm/` Vite aliases;
48
48
  they don't resolve in Node and break published consumers.
49
49
  2. **`load-env.mjs` before any a2ui import in Node** — without it,
50
50
  `createAdapter()` silently returns `StubLLMAdapter` (canned 6-component
@@ -60,7 +60,7 @@ lifecycle), `.claude/docs/specs/package-architecture.md` (package relations).
60
60
  props + slot bindings; never JS or per-canvas CSS. Behavior delegates to
61
61
  traits or pre-built apps. "Make the generator emit JS/CSS" is a won't-fix.
62
62
  6. **Renderer guards `textContent` against container wipe** —
63
- `packages/a2ui/runtime/renderer.js` whitelists pure-text leaves
63
+ `packages/gen-ui/a2ui/renderer.js` whitelists pure-text leaves
64
64
  (`TEXT_TAG_OK`); everything else routes through the `text=` attribute so
65
65
  slotted children survive. Preserve this when touching the renderer.
66
66
  7. **Registry ↔ catalog parity.** A component in the runtime registry but
@@ -4,7 +4,7 @@ Use when `npm run eval:diff -- --engine zettel --semantic` reports intents
4
4
  with `semanticScore < 60` (or <70 for the watch list): the judge says the
5
5
  emitted UI doesn't match what was asked for.
6
6
 
7
- ## The judge's three axes (`packages/a2ui/validator/semantic/index.js:32`)
7
+ ## The judge's three axes (`packages/gen-ui/engine/validate/semantic/index.js:32`)
8
8
 
9
9
  - **dominantPattern** (weight 0.5) — does the root/primary component match the
10
10
  intent type (chat, form, calendar, data-display, nav…)?
@@ -64,7 +64,7 @@ rich keyword set (15–20 terms) with exact intent phrases and domain synonyms.
64
64
  ```bash
65
65
  node scripts/build/components.mjs --verify
66
66
  npm run smoke:engines && npm run smoke:register-engine && npm run test:a2ui
67
- node packages/a2ui/mcp/scripts/eval-diff.mjs --engine zettel --semantic
67
+ node packages/gen-ui/mcp/gen-ui/scripts/eval-diff.mjs --engine zettel --semantic
68
68
  ```
69
69
 
70
70
  The semantic judge is cached, content-hashed on
@@ -1,6 +1,6 @@
1
1
  # Strategy engines — zettel file map, strategy labels, issue telemetry
2
2
 
3
- ## File map (`packages/a2ui/compose/strategies/zettel/`, verified 2026-07)
3
+ ## File map (`packages/gen-ui/a2ui/compose/strategies/zettel/`, verified 2026-07)
4
4
 
5
5
  ```text
6
6
  generator-adapter.js ← zettel entry: retrieval → strong-match / chunk-synthesis bridge / atoms
@@ -67,7 +67,7 @@ issues / PR descriptions. Type taxonomy: `bug` / `training-gap` /
67
67
 
68
68
  Every LLM-calling engine outside this directory (`generate-pro`,
69
69
  `generate-thinking`) routes its final candidate through the shared
70
- `packages/a2ui/compose/shared/validate-and-repair.js` — full schema +
70
+ `packages/gen-ui/a2ui/compose/shared/validate-and-repair.js` — full schema +
71
71
  Ajv catalog + anti-pattern conformance, orthogonal to whatever narrower
72
72
  check the engine already runs. `chunk-zettel` (`chunk-synthesizer.js`'s
73
73
  `composeFromIntent`) does NOT get this: its result is a raw HTML
@@ -2,13 +2,13 @@
2
2
 
3
3
  **Calibration history is the substrate.** Each tweak left a trail; the same
4
4
  value may have been tried and rejected before. Recover any decision's context
5
- with `git log -S <CONSTANT> -- packages/a2ui` and the linked PR description.
5
+ with `git log -S <CONSTANT> -- packages/gen-ui/a2ui` and the linked PR description.
6
6
  **Don't change any constant without running `npm run eval:diff` first.** Each
7
7
  is calibrated against the held-out intent set or production telemetry.
8
8
 
9
9
  ## `STRONG_MATCH_THRESHOLD = 40`
10
10
 
11
- - **File**: `packages/a2ui/compose/strategies/zettel/generator-adapter.js` (`grep -n STRONG_MATCH_THRESHOLD`)
11
+ - **File**: `packages/gen-ui/a2ui/compose/strategies/zettel/generator-adapter.js` (`grep -n STRONG_MATCH_THRESHOLD`)
12
12
  - **Raised**: 22 → 40 post-incident.
13
13
  - **Reason**: at 22, login-form / signup-form played verbatim too often →
14
14
  repetitive output. At 40, only near-perfect retrievals (chart-dashboard=48,
@@ -1,17 +1,17 @@
1
1
  ---
2
- name: adia-dogfood
2
+ name: demo-audit
3
3
  description: >-
4
4
  Seven-mode QA sweep of the monorepo's demo/app surfaces: visual probe,
5
5
  app-shell QA, attr-quote typos, native-primitive leak, admin-shell
6
6
  composition, card anatomy, plus an aggregated token/contrast/lifecycle
7
7
  drift battery (`npm run dogfood:status`). Use for "run a dogfood sweep",
8
8
  "find broken demos", "audit native primitive leaks". NOT for gen-UI
9
- gallery scoring (adia-gen-review) or authoring primitives (adia-author).
9
+ gallery scoring (gen-ui-review) or authoring primitives (primitive-authoring).
10
10
  disable-model-invocation: false
11
11
  user-invocable: true
12
12
  ---
13
13
 
14
- # adia-dogfood
14
+ # demo-audit
15
15
 
16
16
  Finds the bugs the type-checker misses across the monorepo's rendered surfaces.
17
17
  Detection is script-driven — repo audit scripts plus one bundled deep analyzer;
@@ -27,7 +27,7 @@ not a filesystem tree to `ls`; the analyzers walk the sitemap.
27
27
 
28
28
  | # | Task shape | Detection (repo root) | Triage depth |
29
29
  |---|---|---|---|
30
- | 1 | Component visual probe — "find broken demos"; after wide refactors of tokens, slots, or stamping | `npm run dogfood:visual-probe` (baseline: 4xx, console, 0×0 body, host upgrade) · `node "${CLAUDE_PLUGIN_ROOT}/skills/adia-dogfood/scripts/analyze.mjs"` (deep: 8 probe classes) | [visual-probe-triage](references/visual-probe-triage.md) |
30
+ | 1 | Component visual probe — "find broken demos"; after wide refactors of tokens, slots, or stamping | `npm run dogfood:visual-probe` (baseline: 4xx, console, 0×0 body, host upgrade) · `node "${CLAUDE_PLUGIN_ROOT}/skills/demo-audit/scripts/analyze.mjs"` (deep: 8 probe classes) | [visual-probe-triage](references/visual-probe-triage.md) |
31
31
  | 2 | App-shell QA — after `apps/` structural sweeps; before a release | `node scripts/dev/audit-app-shells.mjs [--only=NAME] [--fail-fast] [--compare-prod]` | [app-shell-pitfalls](references/app-shell-pitfalls.md) |
32
32
  | 3 | HTML attr-quote typo sweep — nested `"` broke an attribute boundary | inline node one-shot (no repo script) | [html-attr-sweep](references/html-attr-sweep.md) |
33
33
  | 4 | Native-primitive leak — `<button>` where `<button-ui>` exists | `npm run audit:native-primitive-leak` (`:all` / `:strict` variants) | [native-leak-annotations](references/native-leak-annotations.md) |
@@ -56,7 +56,7 @@ map onto each other; a mode-7 finding is never relabeled critical/warning/info.
56
56
  ## Triage gate — before ANY auto-fix (builder seat only)
57
57
 
58
58
  This gate and the allowlist below govern a **builder** seat running dogfood
59
- with Write/Edit (typically `component-author`) — never a read-only
59
+ with Write/Edit (typically `primitive-authoring-agent`) — never a read-only
60
60
  verification seat. `framework-reviewer` (Read/Grep/Glob/Bash, no Write/Edit)
61
61
  never applies a fix regardless of triage outcome: it always files the finding
62
62
  with the fix-routing column below cited, and stops there.
@@ -75,7 +75,7 @@ Apply a fix unattended iff all three hold; otherwise file it for human review:
75
75
  A read-only seat holds Bash, and Bash alone can run `perl -i` / `sed -i` /
76
76
  `node -e` with a file write even without a Write or Edit tool — the tool
77
77
  allowlist is not the enforcement boundary, the routing rule is: these fixes
78
- are executed by `component-author` (or a human), never dispatched to or run
78
+ are executed by `primitive-authoring-agent` (or a human), never dispatched to or run
79
79
  by `framework-reviewer` or any other read-only dogfood seat. A read-only run
80
80
  reports "matches this allowlist row" as part of its finding and stops.
81
81
 
@@ -132,7 +132,7 @@ surfaces swept: <route(s)/component(s)/shell(s) covered, or "full sweep">
132
132
  findings: <file>:<line> — <defect class> — <severity: critical|warning|info (modes 1-6) or P0-P3 (mode 7)> — <one-line detail>
133
133
  …one row per finding; "none" if zero
134
134
  unmeasured: <modes that could not run + why, e.g. "mode 1 — dev server unreachable">; omit if none
135
- fix-routing: <per finding: auto-fixed (allowlist row cited, builder seat only) | routed to component-author | escalated to human — name which>
135
+ fix-routing: <per finding: auto-fixed (allowlist row cited, builder seat only) | routed to primitive-authoring-agent | escalated to human — name which>
136
136
  verdict: clean | findings-filed — <one line>
137
137
  ```
138
138
 
@@ -145,7 +145,7 @@ surfaces swept: apps/admin/**, packages/web-modules/shell/**
145
145
  findings: apps/admin/pages/settings.html:142 — native-primitive-leak — warning — <button> where button-ui exists, no data-native-ok
146
146
  packages/web-modules/shell/admin-shell.js:88 — admin-shell-anatomy — critical — missing canonical <statusbar-ui> part
147
147
  unmeasured: mode 1 (visual-probe) — dev server not running, skipped
148
- fix-routing: settings.html:142 — escalated to human (native-primitive replacement is an attribute-shape decision, never auto-fixed); admin-shell.js:88 — routed to component-author (shared web-modules source, outside the audited surface)
148
+ fix-routing: settings.html:142 — escalated to human (native-primitive replacement is an attribute-shape decision, never auto-fixed); admin-shell.js:88 — routed to primitive-authoring-agent (shared web-modules source, outside the audited surface)
149
149
  verdict: findings-filed — 1 critical, 1 warning open; see qa/findings/ for the full report
150
150
  ```
151
151
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "skill": "adia-dogfood",
2
+ "skill": "demo-audit",
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": "Run a dogfood sweep before we cut the release", "expect": "trigger" },
@@ -10,11 +10,11 @@
10
10
  { "id": "t06", "prompt": "Sweep card anatomy for a collapsed header wrapper", "expect": "trigger" },
11
11
  { "id": "t07", "prompt": "Run npm run dogfood:status and post the findings in the PR description", "expect": "trigger" },
12
12
  { "id": "t08", "prompt": "Find token drift and contrast collapse across the components after the refactor", "expect": "trigger" },
13
- { "id": "n01", "prompt": "Score the gen-ui gallery output quality against the rubric", "expect": "no-trigger", "owner": "adia-gen-review" },
14
- { "id": "n02", "prompt": "Add a new primitive component to packages/web-components", "expect": "no-trigger", "owner": "adia-author" },
15
- { "id": "n03", "prompt": "Cut the next release and publish the lockstep packages", "expect": "no-trigger", "owner": "adia-release" },
16
- { "id": "n04", "prompt": "Deploy the latest build to ui-kit.exe.xyz", "expect": "no-trigger", "owner": "adia-deploy" },
17
- { "id": "n05", "prompt": "Zettel coverage dropped on the nightly eval, find out why", "expect": "no-trigger", "owner": "adia-a2ui" },
18
- { "id": "n06", "prompt": "Compose the billing settings screen from the catalog", "expect": "no-trigger", "owner": "adia-compose" }
13
+ { "id": "n01", "prompt": "Score the gen-ui gallery output quality against the rubric", "expect": "no-trigger", "owner": "gen-ui-review" },
14
+ { "id": "n02", "prompt": "Add a new primitive component to packages/web-components", "expect": "no-trigger", "owner": "primitive-authoring" },
15
+ { "id": "n03", "prompt": "Cut the next release and publish the lockstep packages", "expect": "no-trigger", "owner": "package-release" },
16
+ { "id": "n04", "prompt": "Deploy the latest build to ui-kit.exe.xyz", "expect": "no-trigger", "owner": "site-deployment" },
17
+ { "id": "n05", "prompt": "Zettel coverage dropped on the nightly eval, find out why", "expect": "no-trigger", "owner": "a2ui-maintenance" },
18
+ { "id": "n06", "prompt": "Compose the billing settings screen from the catalog", "expect": "no-trigger", "owner": "screen-composition" }
19
19
  ]
20
20
  }