@adia-ai/gen-ui 0.8.37 → 0.8.39

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 (80) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +9 -3
  3. package/compose/CHANGELOG.md +22 -22
  4. package/compose/README.md +3 -3
  5. package/compose/evals/harness.mjs +1 -1
  6. package/compose/strategies/_shared/chunk-loader.js +2 -2
  7. package/compose/strategies/monolithic/_shared.js +18 -5
  8. package/compose/strategies/monolithic/generate-pro.js +1 -1
  9. package/compose/strategies/zettel/composition-library.js +2 -2
  10. package/compose/strategies/zettel/issue-reporter.js +1 -1
  11. package/compose/transpiler/transpiler-maps.js +2 -2
  12. package/compose/transpiler/transpiler.js +1 -1
  13. package/corpus/CHANGELOG.md +17 -17
  14. package/corpus/README.md +2 -2
  15. package/corpus/chunks/_index.json +177 -1
  16. package/corpus/chunks/_source-hashes.json +20 -15
  17. package/corpus/chunks/access-denied-with-request.json +6 -2
  18. package/corpus/chunks/admin-page-header-with-actions.json +6 -2
  19. package/corpus/chunks/admin-topbar-breadcrumb-actions.json +6 -2
  20. package/corpus/chunks/agent-memory-list.json +6 -2
  21. package/corpus/chunks/agent-reasoning-collapsed.json +6 -2
  22. package/corpus/chunks/agent-tool-call-accordion.json +6 -2
  23. package/corpus/chunks/alert-dialog-unsaved.json +6 -2
  24. package/corpus/chunks/analytics-chart.json +6 -2
  25. package/corpus/chunks/api-keys-list.json +6 -2
  26. package/corpus/chunks/app-nav-groups.json +6 -2
  27. package/corpus/chunks/auth-signin-card-otp.json +6 -2
  28. package/corpus/chunks/avatar-group-overflow.json +6 -2
  29. package/corpus/chunks/banner-system-maintenance.json +6 -2
  30. package/corpus/chunks/bell-menu-empty.json +6 -2
  31. package/corpus/chunks/bulk-action-toolbar-swap.json +1 -1
  32. package/corpus/chunks/chart-in-card-full-chart.json +6 -2
  33. package/corpus/chunks/checkout-order-summary-card.json +6 -2
  34. package/corpus/chunks/code-snippet.json +6 -2
  35. package/corpus/chunks/comments-composer.json +6 -2
  36. package/corpus/chunks/contact-form-card.json +6 -2
  37. package/corpus/chunks/data-export-history.json +6 -2
  38. package/corpus/chunks/destructive-confirm-modal.json +6 -2
  39. package/corpus/chunks/export-flow-delivery.json +6 -2
  40. package/corpus/chunks/faq-accordion.json +6 -2
  41. package/corpus/chunks/feature-grid-three-cards.json +6 -2
  42. package/corpus/chunks/filter-popover-form.json +6 -2
  43. package/corpus/chunks/hero-cta-simple.json +6 -2
  44. package/corpus/chunks/image-caption-tile.json +6 -2
  45. package/corpus/chunks/inline-dialog-rename.json +6 -2
  46. package/corpus/chunks/login-form-card.json +6 -2
  47. package/corpus/chunks/onb-persona-picker.json +6 -2
  48. package/corpus/chunks/order-tracking-timeline.json +6 -2
  49. package/corpus/chunks/permissions-role-picker-radio.json +6 -2
  50. package/corpus/chunks/product-tour.json +6 -2
  51. package/corpus/chunks/retention-cohort-with-legend.json +6 -2
  52. package/corpus/chunks/search-results-list.json +6 -2
  53. package/corpus/chunks/signup-form-card.json +6 -2
  54. package/corpus/chunks/stat-cards-kpi-dashboard.json +6 -2
  55. package/corpus/chunks/tabs-with-panels.json +6 -2
  56. package/corpus/chunks/testimonial-pull-quote.json +6 -2
  57. package/corpus/chunks/toolbar-icons.json +6 -2
  58. package/corpus/chunks/usage-quota-meter-card.json +6 -2
  59. package/corpus/chunks/user-profile-card.json +6 -2
  60. package/corpus/chunks/verification-stepper.json +6 -2
  61. package/corpus/chunks/webhooks-list.json +6 -2
  62. package/corpus/manifest.json +2 -2
  63. package/corpus/scripts/chunk-library.js +3 -3
  64. package/node-shims.d.ts +1 -1
  65. package/package.json +2 -9
  66. package/retrieval/CHANGELOG.md +21 -21
  67. package/retrieval/catalog.js +8 -5
  68. package/retrieval/component-catalog.js +9 -7
  69. package/retrieval/feedback/dialog-recorder.js +1 -1
  70. package/retrieval/feedback/feedback-analyzer.js +1 -1
  71. package/retrieval/feedback/feedback-store.js +1 -1
  72. package/retrieval/feedback/gap-registry.js +1 -1
  73. package/retrieval/intent/prompt-analyzer.js +12 -2
  74. package/retrieval/wiring-catalog.js +1 -1
  75. package/validate/catalog-validator.js +22 -20
  76. package/validate/semantic/cache.js +1 -1
  77. package/validate/semantic/index.js +1 -1
  78. package/corpus/catalog-a2ui_0_9.d.ts +0 -4
  79. package/corpus/catalog-a2ui_0_9.json +0 -29571
  80. package/corpus/catalog-a2ui_0_9_rules.txt +0 -1215
@@ -38,7 +38,7 @@
38
38
  "full-form"
39
39
  ]
40
40
  },
41
- "captured_at": "2026-07-17T20:08:04.842Z",
41
+ "captured_at": "2026-08-15T04:10:49.553Z",
42
42
  "template": [
43
43
  {
44
44
  "id": "text",
@@ -214,5 +214,9 @@
214
214
  "footer"
215
215
  ]
216
216
  }
217
- ]
217
+ ],
218
+ "catalogEntry": {
219
+ "tier": "L1",
220
+ "name": "signup-form-card"
221
+ }
218
222
  }
@@ -40,7 +40,7 @@
40
40
  "business-metrics"
41
41
  ]
42
42
  },
43
- "captured_at": "2026-07-17T20:08:04.842Z",
43
+ "captured_at": "2026-08-15T04:10:49.553Z",
44
44
  "template": [
45
45
  {
46
46
  "id": "stat",
@@ -174,5 +174,9 @@
174
174
  "card-4"
175
175
  ]
176
176
  }
177
- ]
177
+ ],
178
+ "catalogEntry": {
179
+ "tier": "L1",
180
+ "name": "stat-cards-kpi-dashboard"
181
+ }
178
182
  }
@@ -22,7 +22,7 @@
22
22
  "tab-strip"
23
23
  ]
24
24
  },
25
- "captured_at": "2026-08-12T05:17:18.993Z",
25
+ "captured_at": "2026-08-15T04:10:49.553Z",
26
26
  "template": [
27
27
  {
28
28
  "id": "tab",
@@ -183,5 +183,9 @@
183
183
  "card"
184
184
  ]
185
185
  }
186
- ]
186
+ ],
187
+ "catalogEntry": {
188
+ "tier": "L1",
189
+ "name": "tabs-with-panels"
190
+ }
187
191
  }
@@ -46,7 +46,7 @@
46
46
  "mouth"
47
47
  ]
48
48
  },
49
- "captured_at": "2026-08-06T10:45:35.201Z",
49
+ "captured_at": "2026-08-15T04:10:49.553Z",
50
50
  "template": [
51
51
  {
52
52
  "id": "text",
@@ -133,5 +133,9 @@
133
133
  "card"
134
134
  ]
135
135
  }
136
- ]
136
+ ],
137
+ "catalogEntry": {
138
+ "tier": "L1",
139
+ "name": "testimonial-pull-quote"
140
+ }
137
141
  }
@@ -30,7 +30,7 @@
30
30
  "icon-only"
31
31
  ]
32
32
  },
33
- "captured_at": "2026-08-11T15:04:02.567Z",
33
+ "captured_at": "2026-08-15T04:10:49.553Z",
34
34
  "template": [
35
35
  {
36
36
  "id": "bold",
@@ -212,5 +212,9 @@
212
212
  "row"
213
213
  ]
214
214
  }
215
- ]
215
+ ],
216
+ "catalogEntry": {
217
+ "tier": "L1",
218
+ "name": "toolbar-icons"
219
+ }
216
220
  }
@@ -44,7 +44,7 @@
44
44
  "period"
45
45
  ]
46
46
  },
47
- "captured_at": "2026-08-11T15:04:02.567Z",
47
+ "captured_at": "2026-08-15T04:10:49.553Z",
48
48
  "template": [
49
49
  {
50
50
  "id": "text",
@@ -213,5 +213,9 @@
213
213
  "card"
214
214
  ]
215
215
  }
216
- ]
216
+ ],
217
+ "catalogEntry": {
218
+ "tier": "L1",
219
+ "name": "usage-quota-meter-card"
220
+ }
217
221
  }
@@ -27,7 +27,7 @@
27
27
  "user-profile"
28
28
  ]
29
29
  },
30
- "captured_at": "2026-08-12T00:26:17.193Z",
30
+ "captured_at": "2026-08-15T04:10:49.553Z",
31
31
  "template": [
32
32
  {
33
33
  "id": "avatar",
@@ -188,5 +188,9 @@
188
188
  "footer"
189
189
  ]
190
190
  }
191
- ]
191
+ ],
192
+ "catalogEntry": {
193
+ "tier": "L1",
194
+ "name": "user-profile-card"
195
+ }
192
196
  }
@@ -25,7 +25,7 @@
25
25
  "compliance"
26
26
  ]
27
27
  },
28
- "captured_at": "2026-07-29T09:15:19.217Z",
28
+ "captured_at": "2026-08-15T04:10:49.553Z",
29
29
  "template": [
30
30
  {
31
31
  "id": "text",
@@ -107,5 +107,9 @@
107
107
  "section"
108
108
  ]
109
109
  }
110
- ]
110
+ ],
111
+ "catalogEntry": {
112
+ "tier": "L1",
113
+ "name": "verification-stepper"
114
+ }
111
115
  }
@@ -28,7 +28,7 @@
28
28
  "callbacks"
29
29
  ]
30
30
  },
31
- "captured_at": "2026-08-13T16:17:52.286Z",
31
+ "captured_at": "2026-08-15T04:10:49.553Z",
32
32
  "template": [
33
33
  {
34
34
  "id": "text",
@@ -200,5 +200,9 @@
200
200
  "section"
201
201
  ]
202
202
  }
203
- ]
203
+ ],
204
+ "catalogEntry": {
205
+ "tier": "L1",
206
+ "name": "webhooks-list"
207
+ }
204
208
  }
@@ -1,6 +1,6 @@
1
1
  {
2
- "timestamp": "2026-08-13T16:17:52.286Z",
2
+ "timestamp": "2026-08-15T03:21:22.954Z",
3
3
  "pages": 205,
4
4
  "chunks": 526,
5
- "skipped": 1559
5
+ "skipped": 1568
6
6
  }
@@ -2,11 +2,11 @@
2
2
  * Gen-UI training-chunk library.
3
3
  *
4
4
  * Loads the harvester's per-chunk JSON records + aggregate index from
5
- * `packages/gen-ui/corpus/chunks/` into in-memory Maps for fast retrieval.
5
+ * `packages/gen-ui/engine/corpus/chunks/` into in-memory Maps for fast retrieval.
6
6
  *
7
7
  * Used by:
8
- * - packages/a2ui/mcp/server.js — exposes search_chunks / get_chunk / lookup_chunk tools
9
- * - packages/gen-ui/compose/strategies/zettel/chunk-synthesizer.js — Phase C.2
8
+ * - packages/gen-ui/a2ui/mcp/server.js — exposes search_chunks / get_chunk / lookup_chunk tools
9
+ * - packages/gen-ui/engine/compose/strategies/zettel/chunk-synthesizer.js — Phase C.2
10
10
  *
11
11
  * Spec: .claude/docs/specs/genui-chunk-marker.md (Draft v0.1.0).
12
12
  */
package/node-shims.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * Consumers: gen-ui/{compose,retrieval,validate} (via `../node-shims.d.ts`)
8
8
  * and a2ui/mcp (via `../../gen-ui/node-shims.d.ts`). This lived at
9
- * packages/a2ui/node-shims.d.ts until ADR-0048 P1 moved retrieval — its
9
+ * packages/gen-ui/a2ui/node-shims.d.ts until ADR-0048 P1 moved retrieval — its
10
10
  * original and primary consumer — into @adia-ai/gen-ui. Kept as ONE copy
11
11
  * on purpose: two ambient shim files drift silently.
12
12
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/gen-ui",
3
- "version": "0.8.37",
3
+ "version": "0.8.39",
4
4
  "description": "AdiaUI generative-UI system — compose strategies, retrieval, the harvested training corpus, and catalog-aware + LLM-judge validation. Emits A2UI protocol messages; pairs with @adia-ai/a2ui (the protocol runtime). Folded from @adia-ai/a2ui-{compose,retrieval,corpus} + the catalog/semantic halves of the former @adia-ai/a2ui-validator (ADR-0048).",
5
5
  "type": "module",
6
6
  "main": "./compose/index.js",
@@ -120,11 +120,6 @@
120
120
  "import": "./retrieval/*.js",
121
121
  "default": "./retrieval/*.js"
122
122
  },
123
- "./corpus": {
124
- "types": "./corpus/catalog-a2ui_0_9.d.ts",
125
- "import": "./corpus/catalog-a2ui_0_9.json",
126
- "default": "./corpus/catalog-a2ui_0_9.json"
127
- },
128
123
  "./corpus/manifest": {
129
124
  "types": "./corpus/manifest.d.ts",
130
125
  "import": "./corpus/manifest.json",
@@ -178,8 +173,6 @@
178
173
  "retrieval/embedding/",
179
174
  "retrieval/feedback/",
180
175
  "retrieval/authoring/",
181
- "corpus/catalog-a2ui_0_9.json",
182
- "corpus/catalog-a2ui_0_9_rules.txt",
183
176
  "corpus/manifest.json",
184
177
  "corpus/chunks/",
185
178
  "corpus/chunk-embeddings.json",
@@ -200,7 +193,7 @@
200
193
  "repository": {
201
194
  "type": "git",
202
195
  "url": "git+https://github.com/adiahealth/gen-ui-kit.git",
203
- "directory": "packages/gen-ui"
196
+ "directory": "packages/gen-ui/engine"
204
197
  },
205
198
  "dependencies": {
206
199
  "@adia-ai/agent": "^0.8.0",
@@ -748,7 +748,7 @@ _No pending changes._
748
748
 
749
749
  Lockstep PATCH cut alongside `@adia-ai/web-components@0.4.8` (§80 event-types codegen for 38 non-form primitives + §85 class-subpath script fix + §89 icons.js split + B+C+D consumer-friction infra), `@adia-ai/web-modules@0.4.8` (FEEDBACK-02 #1 `.d.ts` shipment + `composes:` ADR-0027 wiring), `@adia-ai/a2ui-compose@0.4.8` (§87 zettel `ensureBooted()` race fix + §88 free-form composition mode), `@adia-ai/a2ui-corpus@0.4.8` (catalog regen ride-along), `@adia-ai/a2ui-mcp@0.4.8` (§87 eval threshold rebaseline). Source byte-identical to v0.4.7.
750
750
 
751
- Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.8]`](../../../CHANGELOG.md) for the cut narrative.
751
+ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.8]`](../../../../CHANGELOG.md) for the cut narrative.
752
752
  ## [0.4.7] - 2026-05-12
753
753
 
754
754
  ### Removed — `embedding/embedding-retriever.js` + `concept-mapper.js` retired (§72, the §65 carry-over)
@@ -772,21 +772,21 @@ The legacy `pattern-library.js` retrieval surface is retired in v0.4.6. Composit
772
772
  - **`authoring/index.js` + `authoring/pattern-promotion.js` + `authoring/synthetic-data.js` retired** (§64 step 2). All three were dead code by §63 (pattern-promotion fired on a surface that no consumer exercised; synthetic-data targeted the pattern shape). Files deleted; barrel re-exports cleaned.
773
773
  - **`index.js`** — barrel updated to reflect the carved-out + retired modules.
774
774
 
775
- See root [CHANGELOG.md `[Unreleased]`](../../../CHANGELOG.md) and `@adia-ai/a2ui-compose@[Unreleased]` for the cross-cutting arc narrative.
775
+ See root [CHANGELOG.md `[Unreleased]`](../../../../CHANGELOG.md) and `@adia-ai/a2ui-compose@[Unreleased]` for the cross-cutting arc narrative.
776
776
  ## [0.4.5] - 2026-05-12
777
777
 
778
778
  ### Ride-along (no source changes)
779
779
 
780
780
  Lockstep PATCH cut alongside `@adia-ai/web-components@0.4.5` (§61 CSS subpath exports + CustomEvent.detail sweep across 17 form-bearing primitives + slider reactivity test lock-in + §52 design-tokens export module + UI), `@adia-ai/web-modules@0.4.5` (§61 CSS subpath exports — six cluster `*.css` exports), `@adia-ai/a2ui-compose@0.4.5` (§56 system-prompt CORPUS CONTEXT block in monolithic strategies), `@adia-ai/llm@0.4.5` (§54 doc-comment path refresh). Source byte-identical to v0.4.4.
781
781
 
782
- Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.5]`](../../../CHANGELOG.md) for the cut narrative.
782
+ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.5]`](../../../../CHANGELOG.md) for the cut narrative.
783
783
  ## [0.4.4] - 2026-05-12
784
784
 
785
785
  ### Ride-along (no source changes)
786
786
 
787
787
  Lockstep PATCH cut alongside `@adia-ai/web-components@0.4.4` (14 yaml gap closures from corpus simplification arc), `@adia-ai/a2ui-runtime@0.4.4` (registry expansion +27 web-modules + renderer kebab-case fix), `@adia-ai/a2ui-compose@0.4.4` (composition-library rename + transpiler `<a>` → Link), `@adia-ai/a2ui-corpus@0.4.4` (corpus simplification arc §36–§51), `@adia-ai/a2ui-mcp@0.4.4` (`get_fragment` tool retirement). Source byte-identical to v0.4.3.
788
788
 
789
- Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.4]`](../../../CHANGELOG.md) for the cut narrative.
789
+ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.4]`](../../../../CHANGELOG.md) for the cut narrative.
790
790
  ## [0.4.3] - 2026-05-11
791
791
 
792
792
  ### Fixed
@@ -795,46 +795,46 @@ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4
795
795
 
796
796
  ### Lockstep
797
797
 
798
- 9-package coordinated PATCH cut to v0.4.3. Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry). Source change scoped to one file (`feedback/dialog-recorder.js`); pairs with the same fix in `@adia-ai/a2ui-compose` v0.4.3. See root [CHANGELOG.md `## [0.4.3]`](../../../CHANGELOG.md).
798
+ 9-package coordinated PATCH cut to v0.4.3. Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry). Source change scoped to one file (`feedback/dialog-recorder.js`); pairs with the same fix in `@adia-ai/a2ui-compose` v0.4.3. See root [CHANGELOG.md `## [0.4.3]`](../../../../CHANGELOG.md).
799
799
  ## [0.4.2] - 2026-05-11
800
800
 
801
801
  ### Ride-along (no source changes)
802
802
 
803
803
  Lockstep PATCH cut alongside `@adia-ai/web-components@0.4.2` (`<input-ui type="number">` rewrite drops native `<input type=number>` wrapping) + `@adia-ai/web-modules@0.4.2` (`<editor-sidebar>` grid-track width-mirror fix). Source byte-identical to v0.4.1.
804
804
 
805
- Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.2]`](../../../CHANGELOG.md) for the cut narrative.
805
+ Internal `@adia-ai/*` dep ranges stay at `^0.4.0` (patch-cut asymmetry — `^0.4.0` covers `0.4.x` under semver). See root [CHANGELOG.md `## [0.4.2]`](../../../../CHANGELOG.md) for the cut narrative.
806
806
  ## [0.4.1] - 2026-05-10
807
807
 
808
808
  ### Ride-along (no source changes)
809
809
 
810
810
  Lockstep PATCH cut alongside `@adia-ai/web-modules@0.4.1` (simple cluster) + `@adia-ai/a2ui-validator@0.4.1` (Phase 3 foundation) + `@adia-ai/a2ui-corpus@0.4.1` (fragment metrics reconciliation). Source byte-identical to v0.4.0.
811
811
 
812
- Internal `@adia-ai/*` dep ranges bumped from `^0.4.0` to `^0.4.1`. See root [CHANGELOG.md `## [0.4.1]`](../../../CHANGELOG.md) for the cut narrative.
812
+ Internal `@adia-ai/*` dep ranges bumped from `^0.4.0` to `^0.4.1`. See root [CHANGELOG.md `## [0.4.1]`](../../../../CHANGELOG.md) for the cut narrative.
813
813
  ## [0.4.0] - 2026-05-10
814
814
 
815
815
  ### Ride-along (no source changes)
816
816
 
817
817
  Lockstep MINOR cut alongside `@adia-ai/web-modules@0.4.0` (ADR-0024 legacy shell shapes retired). Source byte-identical to v0.3.6.
818
818
 
819
- Internal `@adia-ai/*` dep ranges bumped from `^0.3.0` to `^0.4.0`. See root [CHANGELOG.md `## [0.4.0]`](../../../CHANGELOG.md) for the cut narrative.
819
+ Internal `@adia-ai/*` dep ranges bumped from `^0.3.0` to `^0.4.0`. See root [CHANGELOG.md `## [0.4.0]`](../../../../CHANGELOG.md) for the cut narrative.
820
820
  ## [0.3.6] - 2026-05-10
821
821
 
822
822
  ### Ride-along (no source changes)
823
823
 
824
- Lockstep version bump only — source byte-identical to v0.3.5. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.6]`](../../../CHANGELOG.md) for the cut narrative.
824
+ Lockstep version bump only — source byte-identical to v0.3.5. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.6]`](../../../../CHANGELOG.md) for the cut narrative.
825
825
  ## [0.3.5] - 2026-05-07
826
826
 
827
827
  ### Ride-along (no source changes)
828
828
 
829
- Lockstep version bump only — source byte-identical to v0.3.4. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.5]`](../../../CHANGELOG.md) for the cut narrative.
829
+ Lockstep version bump only — source byte-identical to v0.3.4. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.5]`](../../../../CHANGELOG.md) for the cut narrative.
830
830
  ## [0.3.4] - 2026-05-07
831
831
 
832
832
  ### Ride-along (no source changes)
833
833
 
834
- Lockstep version bump only — source byte-identical to v0.3.3. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.4]`](../../../CHANGELOG.md) for the cut narrative.
834
+ Lockstep version bump only — source byte-identical to v0.3.3. Internal `@adia-ai/*` dep ranges remain at `^0.3.0`. See root [CHANGELOG.md `## [0.3.4]`](../../../../CHANGELOG.md) for the cut narrative.
835
835
  ## [0.3.3] - 2026-05-07
836
836
 
837
- **Lockstep cut.** All 9 published `@adia-ai/*` packages now share version `0.3.3`, governed by [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` ranges stay at `^0.3.0` (patch-cut asymmetry — caret floats `0.3.x`).
837
+ **Lockstep cut.** All 9 published `@adia-ai/*` packages now share version `0.3.3`, governed by [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` ranges stay at `^0.3.0` (patch-cut asymmetry — caret floats `0.3.x`).
838
838
 
839
839
  ### Changed
840
840
 
@@ -848,7 +848,7 @@ Lockstep version bump only — source byte-identical to v0.3.3. Internal `@adia-
848
848
  ## [0.3.2] - 2026-05-06
849
849
 
850
850
  **9-package lockstep patch cut to v0.3.2.** All lockstep members share
851
- one version per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
851
+ one version per [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
852
852
  Internal `@adia-ai/*` dep ranges unchanged at `^0.3.0`.
853
853
 
854
854
  ### No source changes
@@ -861,7 +861,7 @@ version only.
861
861
  - `version`: `0.3.1` → `0.3.2`.
862
862
  ## [0.3.1] - 2026-05-06
863
863
 
864
- **9-package lockstep patch cut.** All 9 published `@adia-ai/*` packages bump 0.3.0 → 0.3.1 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.3.0` (covers `0.3.1` under semver — patch-cut asymmetry).
864
+ **9-package lockstep patch cut.** All 9 published `@adia-ai/*` packages bump 0.3.0 → 0.3.1 per [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.3.0` (covers `0.3.1` under semver — patch-cut asymmetry).
865
865
 
866
866
  This package itself ships **no source changes** in v0.3.1. The cut bumps version only — substantive content lives in [`@adia-ai/web-components`](https://github.com/adiahealth/gen-ui-kit/releases/tag/web-components-v0.3.1) (folder-per-trait restructure; barrel API unchanged).
867
867
 
@@ -871,7 +871,7 @@ This package itself ships **no source changes** in v0.3.1. The cut bumps version
871
871
  - Internal `@adia-ai/*` dep ranges: unchanged at `^0.3.0` (covers `0.3.1` under semver — patch-cut asymmetry).
872
872
  ## [0.3.0] - 2026-05-05
873
873
 
874
- **9-package lockstep cut.** All 9 published `@adia-ai/*` packages bump 0.2.5 → 0.3.0 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges bump `^0.2.0` → `^0.3.0`.
874
+ **9-package lockstep cut.** All 9 published `@adia-ai/*` packages bump 0.2.5 → 0.3.0 per [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges bump `^0.2.0` → `^0.3.0`.
875
875
 
876
876
  The lockstep policy expanded from 8 to 9 packages with this cut — `@adia-ai/llm` joins as a 9th member, and `@adia-ai/a2ui-utils` was renamed to `@adia-ai/a2ui-runtime`. This package's `dependencies` updated accordingly.
877
877
 
@@ -884,7 +884,7 @@ This package itself ships **no source changes** in v0.3.0. The cut bumps version
884
884
  - `version`: `0.2.5` → `0.3.0`.
885
885
  ## [0.2.5] - 2026-05-04
886
886
 
887
- **8-package lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.4 → 0.2.5 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.2.0` (covers 0.2.5 under semver — patch-cut asymmetry).
887
+ **8-package lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.4 → 0.2.5 per [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.2.0` (covers 0.2.5 under semver — patch-cut asymmetry).
888
888
 
889
889
  This is a **patch cut on top of v0.2.4, no BREAKING changes.** Substantive content lives in `web-components` (new `<fields-ui>` form-grid primitive + `draggable-list-item` last-item drop-zone fix, both surfaced by the Tasks UI Playground at `.claude/docs/projects/tasks-playground/`); `a2ui-corpus` ships a catalog regen for the new `<fields-ui>` yaml. `a2ui-retrieval` rides along at version bump only — no source change.
890
890
 
@@ -894,7 +894,7 @@ This is a **patch cut on top of v0.2.4, no BREAKING changes.** Substantive conte
894
894
  - Internal `@adia-ai/*` dep ranges: unchanged at `^0.2.0` (covers `0.2.5` under semver — patch-cut asymmetry).
895
895
  ## [0.2.4] - 2026-05-04
896
896
 
897
- **8-package lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.3 → 0.2.4 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.2.0` (covers 0.2.4 under semver — patch-cut asymmetry).
897
+ **8-package lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.3 → 0.2.4 per [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Internal `@adia-ai/*` dep ranges remain at `^0.2.0` (covers 0.2.4 under semver — patch-cut asymmetry).
898
898
 
899
899
  This is a **patch cut on top of v0.2.3, no BREAKING changes.** Substantive content lives in `web-components` (Tier 4 trait library lift, 11 new traits + 2 architectural rewrites, plus accumulated bug fixes); `a2ui-corpus` ships a catalog regen for the new `<demo-toggle-ui>` primitive. Six packages ride along at version + dep-range bump.
900
900
 
@@ -914,7 +914,7 @@ _Nothing yet._
914
914
 
915
915
  **Lockstep cut.** All 8 published `@adia-ai/*` packages bump
916
916
  0.2.2 → 0.2.3 per
917
- [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
917
+ [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
918
918
  Patch cut — no breaking changes.
919
919
 
920
920
  ### Changed
@@ -927,7 +927,7 @@ Patch cut — no breaking changes.
927
927
  `@adia-ai/a2ui-retrieval` source is byte-identical to `0.2.2`. The cut bumps version + the internal dep range entries only.
928
928
  ## [0.2.2] - 2026-05-02
929
929
 
930
- **Lockstep cut + `detectReferences` brand-only filter.** All 8 published `@adia-ai/*` packages bump 0.2.1 → 0.2.2 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
930
+ **Lockstep cut + `detectReferences` brand-only filter.** All 8 published `@adia-ai/*` packages bump 0.2.1 → 0.2.2 per [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
931
931
 
932
932
  ### Changed
933
933
 
@@ -957,7 +957,7 @@ Per memory `feedback_panel_label_reliability.md`. Companion fix in `@adia-ai/a2u
957
957
  ---
958
958
  ## [0.2.1] - 2026-05-02
959
959
 
960
- **Lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.0 → 0.2.1 per [`.claude/docs/specs/package-architecture.md` § 15](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
960
+ **Lockstep cut.** All 8 published `@adia-ai/*` packages bump 0.2.0 → 0.2.1 per [`.claude/docs/specs/package-architecture.md` § 15](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy). Patch cut — no breaking changes.
961
961
 
962
962
  ### Changed
963
963
 
@@ -975,7 +975,7 @@ Public API of `a2ui-retrieval` is byte-identical to `0.2.0`. The above embedding
975
975
 
976
976
  **Lockstep cut + boundary reorganization.** All 8 published
977
977
  `@adia-ai/*` packages now share one version, governed by
978
- [`.claude/docs/specs/package-architecture.md` § 15 (Versioning Policy)](../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
978
+ [`.claude/docs/specs/package-architecture.md` § 15 (Versioning Policy)](../../../../.claude/docs/specs/package-architecture.md#15-versioning-policy).
979
979
  This release also lands the boundary cleanup from T4 of the
980
980
  `.claude/docs/plans/packages-architecture-fixes-2026-05-02.md`
981
981
  plan.
@@ -25,7 +25,7 @@ async function loadSchemas() {
25
25
  const { readdir, readFile, stat } = await import(/* @vite-ignore */ 'node:fs/promises');
26
26
  const { fileURLToPath } = await import(/* @vite-ignore */ 'node:url');
27
27
  const { dirname, join } = await import(/* @vite-ignore */ 'node:path');
28
- const compsDir = join(dirname(fileURLToPath(import.meta.url)), '../../web-components/components');
28
+ const compsDir = join(dirname(fileURLToPath(import.meta.url)), '../../../web-components/components');
29
29
  const entries = await readdir(compsDir, { withFileTypes: true });
30
30
  for (const e of entries) {
31
31
  if (!e.isDirectory()) continue;
@@ -47,7 +47,7 @@ async function loadSchemas() {
47
47
  // produced loaders. See composition-library.js for the full rationale.
48
48
  let modules = null;
49
49
  try {
50
- modules = import.meta.glob('../../web-components/components/*/*.a2ui.json', { query: '?raw', import: 'default' });
50
+ modules = import.meta.glob('../../../web-components/components/*/*.a2ui.json', { query: '?raw', import: 'default' });
51
51
  } catch { /* no Vite transform — static deploy */ }
52
52
 
53
53
  if (modules && Object.keys(modules).length > 0) {
@@ -64,9 +64,12 @@ async function loadSchemas() {
64
64
  // Static deploy — fetch the consolidated catalog once. Its `components`
65
65
  // values carry the same `x-adiaui.tag` shape as the per-component
66
66
  // sidecars (2026-06-10). Relative-to-module so it resolves under any
67
- // mount point + the dist symlink layout.
67
+ // mount point + the dist symlink layout. The catalog is protocol-side
68
+ // since ADR-0050 (`@adia-ai/a2ui/catalog`); from engine/retrieval/ that
69
+ // is the sibling package dir, which is also what `../../a2ui/catalog/`
70
+ // resolves to inside a flat node_modules install.
68
71
  try {
69
- const url = new URL('../corpus/catalog-a2ui_0_9.json', import.meta.url);
72
+ const url = new URL('../../a2ui/catalog/catalog-a2ui_0_9.json', import.meta.url);
70
73
  const res = await fetch(url);
71
74
  if (res.ok) {
72
75
  const catalog = await res.json();
@@ -132,7 +135,7 @@ async function loadTraitRegistry() {
132
135
  const { readFile } = await import(/* @vite-ignore */ 'node:fs/promises');
133
136
  const { fileURLToPath } = await import(/* @vite-ignore */ 'node:url');
134
137
  const { dirname, join } = await import(/* @vite-ignore */ 'node:path');
135
- const path = join(dirname(fileURLToPath(import.meta.url)), '../../web-components/traits/_catalog.json');
138
+ const path = join(dirname(fileURLToPath(import.meta.url)), '../../../web-components/traits/_catalog.json');
136
139
  const raw = await readFile(path, 'utf8');
137
140
  const data = JSON.parse(raw);
138
141
  traitRegistry = data.traits.map(t => ({
@@ -33,7 +33,7 @@ let _loadPromise = null;
33
33
  let _globA2UIModules = null;
34
34
  if (!IS_NODE) {
35
35
  try {
36
- _globA2UIModules = import.meta.glob('../../web-components/components/**/*.a2ui.json', {
36
+ _globA2UIModules = import.meta.glob('../../../web-components/components/**/*.a2ui.json', {
37
37
  query: '?raw',
38
38
  import: 'default',
39
39
  });
@@ -44,13 +44,15 @@ if (!IS_NODE) {
44
44
  const HAS_VITE_GLOB =
45
45
  !IS_NODE && !!_globA2UIModules && Object.keys(_globA2UIModules).length > 0;
46
46
 
47
- // Static-deploy source: the consolidated catalog co-located in the corpus.
48
- // Its `components` map values are byte-shape-identical to the standalone
49
- // `.a2ui.json` sidecars (verified 2026-06-10), so one fetch replaces 138.
50
- // Relative-to-module from retrieval/ ../a2ui-corpus is `../corpus/`.
47
+ // Static-deploy source: the consolidated catalog, protocol-side since
48
+ // ADR-0050 (`@adia-ai/a2ui/catalog`). Its `components` map values are
49
+ // byte-shape-identical to the standalone `.a2ui.json` sidecars (verified
50
+ // 2026-06-10), so one fetch replaces 138. Relative-to-module from
51
+ // engine/retrieval/ → `../../a2ui/catalog/` — the sibling package dir in the
52
+ // repo, the static deploy, and a flat node_modules install alike.
51
53
  const _CONSOLIDATED_CATALOG_URL =
52
54
  !IS_NODE && !HAS_VITE_GLOB
53
- ? new URL('../corpus/catalog-a2ui_0_9.json', import.meta.url)
55
+ ? new URL('../../a2ui/catalog/catalog-a2ui_0_9.json', import.meta.url)
54
56
  : null;
55
57
 
56
58
  async function _loadNode() {
@@ -59,7 +61,7 @@ async function _loadNode() {
59
61
  const url = await import(/* @vite-ignore */ 'node:url');
60
62
 
61
63
  const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
62
- const componentsDir = path.resolve(__dirname, '..', '..', 'web-components', 'components');
64
+ const componentsDir = path.resolve(__dirname, '..', '..', '..', 'web-components', 'components');
63
65
 
64
66
  let compEntries;
65
67
  try {
@@ -19,7 +19,7 @@ async function _ensureModules() {
19
19
  "node:url"
20
20
  );
21
21
  const __dirname = _path.dirname(_url.fileURLToPath(import.meta.url));
22
- _logsRoot = _path.resolve(__dirname, "..", "..", "..", "..", "logs", "dialogs");
22
+ _logsRoot = _path.resolve(__dirname, "..", "..", "..", "..", "..", "logs", "dialogs");
23
23
  }
24
24
  const _turnCounter = /* @__PURE__ */ new Map();
25
25
  const _sessionMetaWritten = /* @__PURE__ */ new Set();
@@ -16,7 +16,7 @@ if (IS_NODE) {
16
16
  } catch {
17
17
  }
18
18
  }
19
- const FEEDBACK_DIR = path ? path.join(path.dirname(new URL(import.meta.url).pathname), "..", "..", "..", "gen-ui/corpus", "feedback") : null;
19
+ const FEEDBACK_DIR = path ? path.join(path.dirname(new URL(import.meta.url).pathname), "..", "..", "..", "engine/corpus", "feedback") : null;
20
20
  class FeedbackAnalyzer {
21
21
  /**
22
22
  * Read JSONL feedback files for the last N days.
@@ -19,7 +19,7 @@ function feedbackDir() {
19
19
  if (!path) return null;
20
20
  const override = typeof process !== "undefined" ? process.env?.["A2UI_FEEDBACK_DIR"] : void 0;
21
21
  if (override) return override;
22
- return path.join(path.dirname(new URL(import.meta.url).pathname), "..", "..", "..", "gen-ui/corpus", "feedback");
22
+ return path.join(path.dirname(new URL(import.meta.url).pathname), "..", "..", "..", "engine/corpus", "feedback");
23
23
  }
24
24
  function todayFile() {
25
25
  const dir = feedbackDir();
@@ -14,7 +14,7 @@ if (IS_NODE) {
14
14
  } catch {
15
15
  }
16
16
  }
17
- const REGISTRY_PATH = path ? path.join(path.dirname(new URL(import.meta.url).pathname), "..", "..", "..", "gen-ui/corpus", "gaps", "registry.json") : null;
17
+ const REGISTRY_PATH = path ? path.join(path.dirname(new URL(import.meta.url).pathname), "..", "..", "..", "engine/corpus", "gaps", "registry.json") : null;
18
18
  async function loadGaps() {
19
19
  if (!fs || !REGISTRY_PATH) return [];
20
20
  try {
@@ -17,11 +17,21 @@ async function getVocab() {
17
17
  /* @vite-ignore */
18
18
  "node:url"
19
19
  );
20
+ const { createRequire } = await import(
21
+ /* @vite-ignore */
22
+ "node:module"
23
+ );
20
24
  const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
21
- const raw = await fs.readFile(path.join(__dirname, "../../corpus/catalog-a2ui_0_9.json"), "utf8");
25
+ let catalogPath;
26
+ try {
27
+ catalogPath = createRequire(import.meta.url).resolve("@adia-ai/a2ui/catalog");
28
+ } catch {
29
+ catalogPath = path.join(__dirname, "../../../a2ui/catalog/catalog-a2ui_0_9.json");
30
+ }
31
+ const raw = await fs.readFile(catalogPath, "utf8");
22
32
  catalogJson = JSON.parse(raw);
23
33
  } else {
24
- const resp = await fetch(new URL("../../corpus/catalog-a2ui_0_9.json", import.meta.url));
34
+ const resp = await fetch(new URL("../../../a2ui/catalog/catalog-a2ui_0_9.json", import.meta.url));
25
35
  if (resp.ok) catalogJson = await resp.json();
26
36
  }
27
37
  } catch {
@@ -82,7 +82,7 @@ function getWiringCatalog() {
82
82
  // wiringRegistry (6 controllers vs the 5 listed here) while building the
83
83
  // protocol MCP's registry-derived get_wiring_catalog.
84
84
  //
85
- // Fields below mirror `packages/a2ui/controllers/state-machine.js`'s
85
+ // Fields below mirror `packages/gen-ui/a2ui/controllers/state-machine.js`'s
86
86
  // `static schema` — `commands` and `config` verbatim, `bind` keyed on
87
87
  // its two state keys (`current`, `history`) with example model paths in
88
88
  // the same shape as its siblings above. If a controller is added to the