@adia-ai/adia-ui-forge 0.1.3 → 0.8.0

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 (259) hide show
  1. package/.claude-plugin/plugin.json +3 -6
  2. package/CHANGELOG.md +27 -34
  3. package/README.md +35 -40
  4. package/agents/a2ui-engineer.md +22 -53
  5. package/agents/component-author.md +29 -0
  6. package/agents/framework-verifier.md +26 -0
  7. package/agents/release-engineer.md +21 -81
  8. package/agents/routing-corpus.json +293 -64
  9. package/bin/demo-postwrite-pattern-gate +94 -0
  10. package/bin/forge-lint +17 -2
  11. package/bin/sidecar-prewrite-guard +104 -0
  12. package/commands/deploy.md +9 -0
  13. package/commands/dogfood.md +10 -0
  14. package/commands/gen-review.md +9 -0
  15. package/commands/release.md +10 -0
  16. package/hooks/hooks.json +15 -0
  17. package/package.json +3 -6
  18. package/references/contracts/a2ui-mcp-surface.md +35 -0
  19. package/references/contracts/migration-guide-format.md +34 -0
  20. package/references/shared/content-trust.md +19 -74
  21. package/skills/adia-a2ui/SKILL.md +99 -0
  22. package/skills/{adia-ui-a2ui → adia-a2ui}/evals/routing-corpus.json +10 -10
  23. package/skills/adia-a2ui/references/anti-patterns.md +27 -0
  24. package/skills/adia-a2ui/references/chunk-authoring.md +71 -0
  25. package/skills/adia-a2ui/references/corpus-discipline.md +68 -0
  26. package/skills/adia-a2ui/references/eval-diagnostics.md +86 -0
  27. package/skills/adia-a2ui/references/format-extension-decisions.md +66 -0
  28. package/skills/adia-a2ui/references/leverage-rules.md +52 -0
  29. package/skills/adia-a2ui/references/mcp-pipeline-ops.md +83 -0
  30. package/skills/adia-a2ui/references/mcp-tool-reference.md +59 -0
  31. package/skills/adia-a2ui/references/pipeline-overview.md +115 -0
  32. package/skills/adia-a2ui/references/semantic-fail-lifting.md +74 -0
  33. package/skills/adia-a2ui/references/strategy-engines.md +109 -0
  34. package/skills/adia-a2ui/references/zettel-calibration.md +104 -0
  35. package/skills/adia-author/SKILL.md +112 -0
  36. package/skills/adia-author/evals/routing-corpus.json +222 -0
  37. package/skills/{adia-ui-authoring → adia-author}/references/anti-patterns.md +33 -4
  38. package/skills/{adia-ui-authoring → adia-author}/references/authoring-cycle.md +9 -11
  39. package/skills/adia-author/references/canonical-pattern-index.md +243 -0
  40. package/skills/{adia-ui-authoring → adia-author}/references/code-style.md +19 -21
  41. package/skills/adia-author/references/common-gotchas.md +129 -0
  42. package/skills/adia-author/references/composite-demo-protocol.md +271 -0
  43. package/skills/{adia-ui-authoring → adia-author}/references/css-patterns.md +19 -6
  44. package/skills/{adia-ui-authoring → adia-author}/references/lifecycle-patterns.md +1 -0
  45. package/skills/{adia-ui-authoring → adia-author}/references/llm-bridge.md +3 -5
  46. package/skills/{adia-ui-authoring → adia-author}/references/module-promotion.md +20 -38
  47. package/skills/{adia-ui-authoring → adia-author}/references/primitive-audit.md +2 -4
  48. package/skills/{adia-ui-authoring → adia-author}/references/shell-patterns.md +12 -18
  49. package/skills/{adia-ui-authoring → adia-author}/references/token-contract.md +5 -7
  50. package/skills/{adia-ui-authoring → adia-author}/references/worked-example.md +3 -3
  51. package/skills/{adia-ui-authoring → adia-author}/references/yaml-contract.md +3 -3
  52. package/skills/{adia-ui-authoring → adia-author}/scripts/build-canonical-pattern-index.mjs +3 -3
  53. package/skills/adia-deploy/SKILL.md +128 -0
  54. package/skills/{adia-ui-ops → adia-deploy}/references/deploy-playbooks.md +47 -30
  55. package/skills/adia-dogfood/SKILL.md +124 -0
  56. package/skills/adia-dogfood/references/admin-shell-anatomy.md +77 -0
  57. package/skills/adia-dogfood/references/app-shell-pitfalls.md +66 -0
  58. package/skills/adia-dogfood/references/card-anatomy-sweep.md +66 -0
  59. package/skills/adia-dogfood/references/html-attr-sweep.md +63 -0
  60. package/skills/adia-dogfood/references/native-leak-annotations.md +73 -0
  61. package/skills/adia-dogfood/references/visual-probe-triage.md +80 -0
  62. package/skills/{adia-ui-dogfood → adia-dogfood}/scripts/analyze.mjs +30 -14
  63. package/skills/adia-gen-review/SKILL.md +127 -0
  64. package/skills/adia-gen-review/references/corpus-html-patterns.md +279 -0
  65. package/skills/adia-gen-review/references/loop-protocol.md +216 -0
  66. package/skills/adia-gen-review/references/rubric-cosmetic.md +100 -0
  67. package/skills/adia-gen-review/references/rubric-decompose.md +101 -0
  68. package/skills/adia-gen-review/references/rubric-score.md +214 -0
  69. package/skills/{adia-ui-gen-review → adia-gen-review}/references/scores.schema.json +2 -2
  70. package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-coverage-audit.mjs +4 -4
  71. package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-decompose.mjs +10 -6
  72. package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-status.mjs +5 -5
  73. package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/validate-cycle-scores.mjs +5 -5
  74. package/skills/adia-llm-internals/SKILL.md +77 -0
  75. package/skills/{adia-ui-llm → adia-llm-internals}/references/adapter-contract.md +4 -2
  76. package/skills/{adia-ui-llm → adia-llm-internals}/references/add-a-provider.md +4 -5
  77. package/skills/{adia-ui-llm → adia-llm-internals}/references/bridge-facade.md +10 -3
  78. package/skills/{adia-ui-llm → adia-llm-internals}/references/browser-proxy-boundary.md +1 -1
  79. package/skills/{adia-ui-llm → adia-llm-internals}/references/model-registry.md +5 -3
  80. package/skills/{adia-ui-llm → adia-llm-internals}/references/streaming-sse.md +2 -2
  81. package/skills/adia-release/SKILL.md +72 -0
  82. package/skills/adia-release/references/changelog-discipline.md +119 -0
  83. package/skills/adia-release/references/cut-procedure.md +247 -0
  84. package/skills/adia-release/references/gates-catalog.md +222 -0
  85. package/skills/adia-release/references/independent-package-release.md +52 -0
  86. package/skills/adia-release/references/migration-guide-authoring.md +86 -0
  87. package/skills/adia-release/references/notes-authoring.md +90 -0
  88. package/skills/adia-release/references/recovery-paths.md +106 -0
  89. package/skills/{adia-ui-release → adia-release}/scripts/bump.mjs +27 -2
  90. package/skills/{adia-ui-release → adia-release}/scripts/dispatch-publish.mjs +4 -1
  91. package/skills/{adia-ui-release → adia-release}/scripts/insert-stub.mjs +1 -1
  92. package/skills/{adia-ui-release → adia-release}/scripts/package-paths.mjs +6 -0
  93. package/skills/{adia-ui-release → adia-release}/scripts/promote-unreleased.mjs +1 -1
  94. package/skills/{adia-ui-release → adia-release}/scripts/release-pack.mjs +13 -21
  95. package/skills/{adia-ui-release → adia-release}/scripts/tag-lockstep.mjs +5 -1
  96. package/skills/adia-site-docs/SKILL.md +68 -0
  97. package/skills/adia-site-docs/evals/audit-report.md +30 -0
  98. package/skills/adia-site-docs/evals/routing-corpus.json +176 -0
  99. package/skills/adia-site-docs/intent.md +72 -0
  100. package/agents/README.md +0 -209
  101. package/agents/author.md +0 -56
  102. package/agents/repo-steward.md +0 -56
  103. package/agents/spec-architect.md +0 -53
  104. package/agents/tech-lead.md +0 -57
  105. package/agents/verifier.md +0 -55
  106. package/bin/lib/audit-axes.mjs +0 -555
  107. package/bin/lib/dry-run-irreversible.mjs +0 -236
  108. package/bin/lib/run-skill-evals.mjs +0 -487
  109. package/bin/lib/teach-router.mjs +0 -250
  110. package/commands/adia-forge-a2ui.md +0 -10
  111. package/commands/adia-forge-author.md +0 -10
  112. package/commands/adia-forge-dogfood.md +0 -8
  113. package/commands/adia-forge-llm.md +0 -8
  114. package/commands/adia-forge-orient.md +0 -10
  115. package/commands/adia-forge-release.md +0 -8
  116. package/commands/adia-forge-review.md +0 -10
  117. package/references/shared/pev-rationale.md +0 -64
  118. package/references/shared/skill-conventions.md +0 -133
  119. package/skills/adia-ui-a2ui/CHANGELOG.md +0 -32
  120. package/skills/adia-ui-a2ui/SKILL.md +0 -243
  121. package/skills/adia-ui-a2ui/evals/adversarial-corpus.json +0 -75
  122. package/skills/adia-ui-a2ui/evals/teach-routing-cases.json +0 -100
  123. package/skills/adia-ui-a2ui/references/anti-patterns.md +0 -24
  124. package/skills/adia-ui-a2ui/references/chunk-authoring.md +0 -88
  125. package/skills/adia-ui-a2ui/references/corpus-discipline.md +0 -56
  126. package/skills/adia-ui-a2ui/references/eval-diagnostics.md +0 -127
  127. package/skills/adia-ui-a2ui/references/fragment-graph.md +0 -91
  128. package/skills/adia-ui-a2ui/references/mcp-pipeline-ops.md +0 -106
  129. package/skills/adia-ui-a2ui/references/mcp-tool-reference.md +0 -398
  130. package/skills/adia-ui-a2ui/references/pipeline-overview.md +0 -175
  131. package/skills/adia-ui-a2ui/references/semantic-fail-lifting.md +0 -120
  132. package/skills/adia-ui-a2ui/references/strategy-engines.md +0 -111
  133. package/skills/adia-ui-a2ui/references/teach-protocol.md +0 -220
  134. package/skills/adia-ui-a2ui/references/zettel-calibration.md +0 -93
  135. package/skills/adia-ui-a2ui/scripts/audit-a2ui-roster.mjs +0 -96
  136. package/skills/adia-ui-a2ui/scripts/teach-route.mjs +0 -157
  137. package/skills/adia-ui-a2ui/skill.json +0 -38
  138. package/skills/adia-ui-authoring/CHANGELOG.md +0 -32
  139. package/skills/adia-ui-authoring/SKILL.md +0 -256
  140. package/skills/adia-ui-authoring/assets/case-studies/admin-shell-decomposition.md +0 -101
  141. package/skills/adia-ui-authoring/assets/case-studies/maxtokens-32768-discovery.md +0 -109
  142. package/skills/adia-ui-authoring/assets/case-studies/theme-panel-promotion.md +0 -113
  143. package/skills/adia-ui-authoring/evals/adversarial-design-plan-gates.json +0 -138
  144. package/skills/adia-ui-authoring/evals/routing-corpus.json +0 -245
  145. package/skills/adia-ui-authoring/references/canonical-pattern-index.md +0 -179
  146. package/skills/adia-ui-authoring/references/common-gotchas.md +0 -93
  147. package/skills/adia-ui-authoring/references/composite-demo-protocol.md +0 -1084
  148. package/skills/adia-ui-authoring/references/teach-protocol.md +0 -428
  149. package/skills/adia-ui-authoring/scripts/audit-authoring-roster.mjs +0 -148
  150. package/skills/adia-ui-authoring/skill.json +0 -45
  151. package/skills/adia-ui-dogfood/CHANGELOG.md +0 -17
  152. package/skills/adia-ui-dogfood/README.md +0 -62
  153. package/skills/adia-ui-dogfood/SKILL.md +0 -866
  154. package/skills/adia-ui-dogfood/skill.json +0 -40
  155. package/skills/adia-ui-forge/SKILL.md +0 -88
  156. package/skills/adia-ui-forge/evals/routing-corpus.json +0 -30
  157. package/skills/adia-ui-gen-review/CHANGELOG.md +0 -108
  158. package/skills/adia-ui-gen-review/SKILL.md +0 -266
  159. package/skills/adia-ui-gen-review/references/loop-protocol.md +0 -712
  160. package/skills/adia-ui-gen-review/references/rubric-cosmetic.md +0 -144
  161. package/skills/adia-ui-gen-review/references/rubric-decompose.md +0 -117
  162. package/skills/adia-ui-gen-review/references/rubric-score.md +0 -249
  163. package/skills/adia-ui-gen-review/references/teach-protocol.md +0 -214
  164. package/skills/adia-ui-gen-review/skill.json +0 -23
  165. package/skills/adia-ui-llm/CHANGELOG.md +0 -25
  166. package/skills/adia-ui-llm/SKILL.md +0 -165
  167. package/skills/adia-ui-llm/evals/adversarial-corpus.json +0 -75
  168. package/skills/adia-ui-llm/evals/routing-corpus.json +0 -30
  169. package/skills/adia-ui-llm/evals/teach-routing-cases.json +0 -73
  170. package/skills/adia-ui-llm/references/teach-protocol.md +0 -78
  171. package/skills/adia-ui-llm/scripts/audit-llm-roster.mjs +0 -93
  172. package/skills/adia-ui-llm/scripts/teach-route.mjs +0 -119
  173. package/skills/adia-ui-llm/skill.json +0 -33
  174. package/skills/adia-ui-ops/CHANGELOG.md +0 -291
  175. package/skills/adia-ui-ops/SKILL.md +0 -401
  176. package/skills/adia-ui-ops/references/INDEX.md +0 -158
  177. package/skills/adia-ui-ops/references/audit-cadence.md +0 -263
  178. package/skills/adia-ui-ops/references/audit-patterns/archive-link-sweep.md +0 -96
  179. package/skills/adia-ui-ops/references/audit-patterns/audit-history-ledger.md +0 -162
  180. package/skills/adia-ui-ops/references/audit-patterns/browser-bundle-node-imports.md +0 -154
  181. package/skills/adia-ui-ops/references/audit-patterns/changelog-unreleased-bloat.md +0 -75
  182. package/skills/adia-ui-ops/references/audit-patterns/coverage-gaps.md +0 -187
  183. package/skills/adia-ui-ops/references/audit-patterns/entry-file-coverage.md +0 -122
  184. package/skills/adia-ui-ops/references/audit-patterns/format-hygiene.md +0 -217
  185. package/skills/adia-ui-ops/references/audit-patterns/lockstep-versioning.md +0 -113
  186. package/skills/adia-ui-ops/references/audit-patterns/memory-fragmentation.md +0 -180
  187. package/skills/adia-ui-ops/references/audit-patterns/orphan-detection.md +0 -202
  188. package/skills/adia-ui-ops/references/audit-patterns/pointer-validation.md +0 -180
  189. package/skills/adia-ui-ops/references/audit-patterns/redundancy-detection.md +0 -210
  190. package/skills/adia-ui-ops/references/audit-patterns/spec-dating-sweep.md +0 -91
  191. package/skills/adia-ui-ops/references/audit-patterns/stale-content.md +0 -182
  192. package/skills/adia-ui-ops/references/audit-patterns/staleness-tooling.md +0 -156
  193. package/skills/adia-ui-ops/references/audit-patterns/token-waste-detection.md +0 -196
  194. package/skills/adia-ui-ops/references/doc-types/adr-pattern.md +0 -210
  195. package/skills/adia-ui-ops/references/doc-types/architecture-md.md +0 -190
  196. package/skills/adia-ui-ops/references/doc-types/changelog.md +0 -183
  197. package/skills/adia-ui-ops/references/doc-types/decisions-log.md +0 -146
  198. package/skills/adia-ui-ops/references/doc-types/plan-roadmap.md +0 -182
  199. package/skills/adia-ui-ops/references/doc-types/postmortem-pattern.md +0 -206
  200. package/skills/adia-ui-ops/references/genres/prose-and-writing.md +0 -149
  201. package/skills/adia-ui-ops/references/guidance/context-budget.md +0 -137
  202. package/skills/adia-ui-ops/references/guidance/llm-doc-writing.md +0 -116
  203. package/skills/adia-ui-ops/references/guidance/reliability-dial.md +0 -186
  204. package/skills/adia-ui-ops/references/recipes/adr-introduction.md +0 -211
  205. package/skills/adia-ui-ops/references/recipes/audit-existing-repo.md +0 -234
  206. package/skills/adia-ui-ops/references/recipes/cold-start-harvest.md +0 -263
  207. package/skills/adia-ui-ops/references/recipes/concurrent-learnings-merge.md +0 -158
  208. package/skills/adia-ui-ops/references/recipes/continuous-learning-loop.md +0 -169
  209. package/skills/adia-ui-ops/references/recipes/external-reference-verification.md +0 -158
  210. package/skills/adia-ui-ops/references/recipes/findings-index-readout.md +0 -126
  211. package/skills/adia-ui-ops/references/recipes/greenfield-setup.md +0 -252
  212. package/skills/adia-ui-ops/references/recipes/harvest-repo-brain.md +0 -169
  213. package/skills/adia-ui-ops/references/recipes/import-repo-brain-harvest.md +0 -153
  214. package/skills/adia-ui-ops/references/recipes/memory-organization.md +0 -182
  215. package/skills/adia-ui-ops/references/recipes/recommend-then-validate.md +0 -199
  216. package/skills/adia-ui-ops/references/recipes/self-healing-hooks.md +0 -366
  217. package/skills/adia-ui-ops/references/recipes/skill-stewardship-loop.md +0 -113
  218. package/skills/adia-ui-ops/references/standards/agents-md-spec.md +0 -138
  219. package/skills/adia-ui-ops/references/standards/claude-md-convention.md +0 -123
  220. package/skills/adia-ui-ops/references/standards/cross-tool-matrix.md +0 -85
  221. package/skills/adia-ui-ops/references/standards/readme-conventions.md +0 -232
  222. package/skills/adia-ui-ops/references/teach-protocol.md +0 -215
  223. package/skills/adia-ui-ops/scripts/audit-ops-roster.mjs +0 -104
  224. package/skills/adia-ui-ops/skill.json +0 -65
  225. package/skills/adia-ui-release/CHANGELOG.md +0 -66
  226. package/skills/adia-ui-release/SKILL.md +0 -323
  227. package/skills/adia-ui-release/assets/case-studies/2026-05-20-batch-push-v0.6.14-v0.6.15.md +0 -144
  228. package/skills/adia-ui-release/assets/case-studies/2026-05-20-corpus-drift-remediation-v0.6.15.md +0 -155
  229. package/skills/adia-ui-release/assets/case-studies/2026-05-20-version-skip-correction-v0.6.12.md +0 -114
  230. package/skills/adia-ui-release/assets/case-studies/2026-05-21-author-from-scratch-v0.6.18.md +0 -139
  231. package/skills/adia-ui-release/assets/case-studies/2026-05-21-feedback37-retraction-v0.6.21.md +0 -124
  232. package/skills/adia-ui-release/assets/case-studies/2026-05-21-fn1-enrichment-pass-v0.6.19.md +0 -125
  233. package/skills/adia-ui-release/assets/case-studies/2026-05-21-stale-test-detection-v0.6.20.md +0 -142
  234. package/skills/adia-ui-release/assets/case-studies/2026-05-23-freshness-gate-recovery-v0.6.32.md +0 -97
  235. package/skills/adia-ui-release/assets/case-studies/2026-05-26-catalog-drift-recurring-v0.6.40.md +0 -147
  236. package/skills/adia-ui-release/assets/templates/stub-changelog.template.md +0 -22
  237. package/skills/adia-ui-release/evals/evals.json +0 -164
  238. package/skills/adia-ui-release/references/changelog-discipline.md +0 -250
  239. package/skills/adia-ui-release/references/cycle-happy-path.md +0 -520
  240. package/skills/adia-ui-release/references/exe-deploy.md +0 -149
  241. package/skills/adia-ui-release/references/gates-catalog.md +0 -778
  242. package/skills/adia-ui-release/references/independent-package-release.md +0 -129
  243. package/skills/adia-ui-release/references/ledger-discipline.md +0 -232
  244. package/skills/adia-ui-release/references/migration-guide-authoring.md +0 -174
  245. package/skills/adia-ui-release/references/multi-agent-baseline.md +0 -207
  246. package/skills/adia-ui-release/references/notes-authoring.md +0 -212
  247. package/skills/adia-ui-release/references/recovery-paths.md +0 -262
  248. package/skills/adia-ui-release/references/rollup-notes.md +0 -208
  249. package/skills/adia-ui-release/references/teach-protocol.md +0 -468
  250. package/skills/adia-ui-release/scripts/audit-gate-roster.mjs +0 -196
  251. package/skills/adia-ui-release/scripts/make-ledger.mjs +0 -200
  252. package/skills/adia-ui-release/skill.json +0 -77
  253. package/skills/dogfood-sweep/CHANGELOG.md +0 -37
  254. package/skills/dogfood-sweep/README.md +0 -105
  255. package/skills/dogfood-sweep/SKILL.md +0 -1000
  256. package/skills/dogfood-sweep/analyze.mjs +0 -600
  257. package/skills/dogfood-sweep/skill.json +0 -31
  258. /package/skills/{adia-ui-authoring → adia-author}/references/api-contract.md +0 -0
  259. /package/skills/{adia-ui-release → adia-release}/scripts/assert-monorepo-root.mjs +0 -0
@@ -1,129 +0,0 @@
1
- # `independent-package-release.md` — class-B cut (an independently-versioned package outside the lockstep)
2
-
3
- > Loaded by **mode 12 (Independent-package release)**. Load when releasing a package
4
- > that versions **independently** of the lockstep set — it is excluded from the
5
- > lockstep-coherence gate, carries no umbrella tag, and triggers no demo-site deploy.
6
- > For the lockstep cut (the primary path), use `cycle-happy-path.md` (modes 1–4).
7
-
8
- > **Worked example — the @adia-ai monorepo's `packages/plugins/*`.** The concrete
9
- > package names, gate names, and workflow files below are **the worked example** of
10
- > this class, drawn from the @adia-ai monorepo's two Claude Code plugins —
11
- > `@adia-ai/adia-ui-factory` (versioned `0.2.x`) and `@adia-ai/adia-ui-forge`
12
- > (versioned `0.1.x`) — which live under `packages/plugins/*`, version
13
- > independently, and are EXCLUDED from the 9-package lockstep. A _different_
14
- > @adia-ai-style monorepo with its own independently-versioned package keeps this
15
- > skeleton and substitutes its own package path, exclusion comment, and publish
16
- > workflow. `$REPO` below = the monorepo root.
17
-
18
- ## §Why a separate class — two release classes in one monorepo
19
-
20
- A lockstep monorepo can host packages that do **not** move with the lockstep set:
21
- plugins, tools, or any package whose release cadence is deliberately decoupled.
22
- These are a **class-B independent-package release**, distinct from the **class-A
23
- lockstep cut** the rest of this skill describes.
24
-
25
- | | Class A — lockstep cut (modes 1–4) | Class B — independent-package release (mode 12) |
26
- | --- | --- | --- |
27
- | **Versioning** | The whole set bumps together | Each package on its own version line |
28
- | **Lockstep gate** | Enforced (`check:lockstep` 9/9) | **Excluded** — the gate skips the package by design |
29
- | **Umbrella tag** | Yes (`vX.Y.Z` + per-package) | **None** — per-package tags only (versions differ) |
30
- | **`dist-tag` ordering** | Cross-package publish ordering matters | N/A (independent versions; no cross-package `latest` race) |
31
- | **Demo-site deploy** | Yes (the worked example's `ui-kit.exe.xyz`) | **None** |
32
- | **Publish trigger** | Tag-triggered per-package workflow | Tag-triggered per-package workflow (same mechanism) |
33
-
34
- `SKILL.md §ReleaseInvariants` govern the **class-A lockstep cut**. Class B's
35
- invariants are the §Posture operator-confirmation checkpoints plus the onboarding
36
- trip-wires below — and the same verify-against-reality discipline (verify the npm
37
- registry, not the workflow's reported "success").
38
-
39
- > **Worked example.** In the @adia-ai monorepo, `scripts/release/check-lockstep.mjs`
40
- > skips `packages/plugins/*` by design (there's a comment there saying so), and the
41
- > plugins publish via their own tag-triggered workflows
42
- > (`.github/workflows/publish-adia-ui-{factory,forge}.yml`) — exactly like the
43
- > framework packages but on independent versions. No umbrella tag, no `dist-tag`
44
- > cross-package ordering, no EXE deploy.
45
-
46
- ## §New-package onboarding — the three trip-wires a FIRST independent cut hits
47
-
48
- A package that is **new to the release tooling** fails three gates the established
49
- set long since passed. These are **substrate** fixes (release scripts / lockfile /
50
- CHANGELOG), not skill edits — per the §Teach decision tree, branch A (substrate).
51
- The skill only *cites* them here. Onboard the package **once**; the fixes land as a
52
- normal substrate PR on `main` *before* tagging.
53
-
54
- 1. **Lockfile.** A new workspace package isn't in the lockfile → the pre-commit
55
- lockfile-check hook blocks the commit, and the publish workflow's clean install
56
- (`npm ci`) fails the same way.
57
- *Fix:* regenerate the lockfile only and stage it —
58
- `npm install --package-lock-only && git add package-lock.json`.
59
- 2. **Release-trip-wire package registry.** The release trip-wire (F-N1,
60
- `check:release`) validates each pushed tag against a registry of known packages.
61
- An unregistered tag fails the **pre-push** hook with an `unknown package` error.
62
- *Fix:* register the package in that list — its tag-prefix + path.
63
- *(Worked example: `scripts/release/check-release.mjs` has a hardcoded `PACKAGES`
64
- array — the framework 9; add
65
- `{ tagPrefix: '<name>', path: 'packages/plugins/<name>' }`.)*
66
- 3. **CHANGELOG bracket form.** The trip-wire's entry check requires the
67
- Keep-a-Changelog `## [<version>]` (brackets) heading. A bare `## <version>`
68
- heading fails with a "no `## [<version>]` entry" error.
69
- *Fix:* bracket the version headings.
70
-
71
- ## §Procedure
72
-
73
- > The gate/workflow names below are the @adia-ai worked example; substitute your
74
- > monorepo's own pre-publish gate and publish workflow.
75
-
76
- 0. **Re-baseline** (the multi-agent baseline assumption). `git fetch`; know HEAD +
77
- whether the shared working tree is on a peer's branch.
78
- 1. **Land the package(s) on `main`** via PR — the usual PR-merge gate: resolve
79
- **every** review thread (e.g. CodeRabbit) before an admin-merge. A PR-merge gate
80
- that requires resolved review threads before `gh pr merge --admin` is a hard
81
- precondition — an admin merge over unresolved threads is the failure this guards
82
- against. *(See `SKILL.md §Posture` / your monorepo's merge convention.)*
83
- 2. **Pre-publish gate.** Run the per-package version-coherence check (the worked
84
- example: `npm run verify:plugins` → N/N synced — `package.json` ↔ the plugin
85
- manifest versions). The lockstep gate still passes for the lockstep set (the
86
- independent package is excluded). Confirm the names are free on npm:
87
- `npm view @adia-ai/<pkg> version` → `E404` means available.
88
- 3. **Tag at the published commit** — `git tag <pkg>-vX.Y.Z` per package (versions
89
- differ; **no umbrella tag**). The tag must point at a commit whose `package.json`
90
- + bracketed CHANGELOG match: dry-run the release trip-wire over the tag list
91
- (worked example: `node scripts/release/check-release.mjs <tags>` → clean) before
92
- pushing. **If the shared working tree is on a peer's branch, push the tags from a
93
- throwaway worktree on `origin/main`** — never carry a peer's branch state into a
94
- tag push.
95
- 4. **Push the tags** → the per-package publish workflows run the clean-install →
96
- pre-publish-gate → publish sequence (worked example:
97
- `npm ci → verify:plugins → npm publish --access public` with the repo's npm token).
98
- 5. **Verify (against npm, not the workflow).** `npm view @adia-ai/<pkg> version`
99
- returns the new version for each package. Watch each workflow to completion
100
- (`gh run watch <id> --exit-status`) — but the registry, not the workflow's green
101
- check, is the source of truth.
102
- 6. **Marketplace cut-over** (if a plugin marketplace repo exists). Point the
103
- marketplace manifest's per-plugin `source` at npm —
104
- `{ "source": "npm", "package": "@adia-ai/<pkg>" }` — and `git rm -r` any vendored
105
- copies (the canonical home is the monorepo). Validate the JSON, commit, push.
106
- Consumers then add the marketplace + install the plugin from npm (e.g.
107
- `/plugin marketplace add <org>/<repo>` → `/plugin install <pkg>@<repo>`).
108
- 7. **Audit-history ledger** — same as class A; record the **per-package** versions
109
- (independent — they differ per package).
110
-
111
- ## §Verify Target
112
-
113
- The published package(s) on the **npm registry** at their independent versions, plus
114
- (if a marketplace exists) it references npm. **NOT** "the whole lockstep set + the
115
- demo site" — that's class A. Verify against the registry, never the workflow's
116
- reported "success."
117
-
118
- ## §Gotchas — from the first independent cut (worked example: 2026-06-07, factory v0.2.2 + forge v0.1.2)
119
-
120
- - The independent package is **NOT** lockstep — never add it to the lockstep gate,
121
- and never tag it with the lockstep umbrella tag.
122
- - Publish-workflow YAMLs are **token-bearing** — keep `persist-credentials: false`
123
- on the checkout step (match the established publish workflows' action-pinning
124
- convention).
125
- - A marketplace repo's **org + visibility is an operator call** — creating a public
126
- repo is outward-facing; confirm before `gh repo create`. The repo home may differ
127
- from the primary org (the marketplace manifest's `owner` field is the signal; a
128
- member without org repo-create rights falls back to a personal repo).
129
- - Run a **secret-scan of the full history** before pushing any repo public.
@@ -1,232 +0,0 @@
1
- # `ledger-discipline.md` — audit-history JSON schema + what to capture
2
-
3
- > Loaded by mode 1 Step 11 (Ledger), mode 4 (batch-push ledger), and mode 8 (Investigation — reads past ledgers).
4
-
5
- Every release cycle writes a JSON ledger to `.brain/audit-history/YYYY-MM-DD-<kind>-vX.Y.Z.json`. The ledger is the long-term memory of the cycle — what shipped, what was excluded, what was learned. Future cycles read past ledgers (mode 8) and the post-mortem flow (mode 7 + `ops-postmortem` skill) cross-references them.
6
-
7
- This file documents the canonical schema + what to capture for each release-kind.
8
-
9
- ---
10
-
11
- ## §The canonical schema
12
-
13
- ```json
14
- {
15
- "kind": "release-cut" | "batch-push" | "p1-hotfix" | "post-release-fix",
16
- "audit_id": "YYYY-MM-DD-<kind>-vX.Y.Z",
17
- "repo": "<org>/<repo>",
18
- "released_at": "YYYY-MM-DD",
19
- "version": "X.Y.Z",
20
- "release_type": "MAJOR" | "MINOR" | "PATCH",
21
- "summary": "<one-paragraph>",
22
- "scope": { /* free-form keys, one per substantive package or topic */ },
23
- "release_commit": "<sha>",
24
- "tag_commit": "<sha>",
25
- "tags": [ /* all 10 tags */ ],
26
- "verification": { /* gate-by-gate summary */ },
27
- "publish_workflows": { "dispatched": "9/9 ...", "conclusions": "9/9 success" },
28
- "notes": [ /* one entry per lesson, exclusion, anomaly */ ]
29
- }
30
- ```
31
-
32
- The `audit_id` is the file's basename (without `.json`). The `.brain/audit-history/` directory accumulates one such ledger per release cycle. (`make-ledger.mjs` scaffolds the file from git state + `--repo-slug`; the `9/9` counts below are the @adia-ai monorepo's 9-package worked example — substitute your monorepo's package count.)
33
-
34
- No `$schema` key: ledgers are self-describing local audit records, so `make-ledger.mjs` deliberately emits no `$schema` (it pointed at a non-bundled external host that this skill does not own or validate against). If your ops setup validates ledgers against a hosted JSON Schema, add the `$schema` field in your own post-processing.
35
-
36
- ---
37
-
38
- ## §What every ledger MUST capture
39
-
40
- These fields are required and the cycle is incomplete without them:
41
-
42
- ### `audit_id` + `released_at` + `version`
43
-
44
- - `audit_id` matches the filename. Format: `YYYY-MM-DD-release-vX.Y.Z` (single-version) or `YYYY-MM-DD-batch-push-vA-vZ` (batch).
45
- - `released_at` is the YYYY-MM-DD cycle date.
46
- - `version` is the published semver (no `v` prefix).
47
-
48
- ### `summary` (the one-paragraph)
49
-
50
- A single paragraph (4–6 sentences) covering: substantive packages + scope + new primitives/APIs + retracted features + bundled skill cuts. This is what future operators READ when grepping `.brain/audit-history/`.
51
-
52
- Example (v0.6.21):
53
-
54
- > "9-package lockstep PATCH cut, authored from scratch. @adia-ai/web- components: table-ui truncate-by-default with [wrap]/[data-wrap] opt-in (§403), toast/feed-item variant text colour fix, input-ui slot-label spacing. @adia-ai/web-modules: `<admin-entity-item>` row- inset alignment, FEEDBACK-37 retraction (admin-shell spurious slot- contract console.warn removed), page-header title-row :first-of-type selector fix. @adia-ai/a2ui-corpus: catalog regen."
55
-
56
- ### `release_commit` + `tag_commit`
57
-
58
- - `release_commit`: the SHA of the actual `chore(release):` or `release(*):` commit (typically the same as `tag_commit` unless an enrichment-pass amended it).
59
- - `tag_commit`: the SHA the 10 tags point at (= HEAD at tag time).
60
-
61
- If those differ (F-N1 enrichment scenario), record BOTH and explain in a `notes` entry.
62
-
63
- ### `tags` array
64
-
65
- All 10 tags (umbrella + 9 per-package), in that order.
66
-
67
- ### `verification` (gate-by-gate)
68
-
69
- A flat object with gate-name → status. Use the same keys across cycles so future search can find regression patterns:
70
-
71
- ```json
72
- "verification": {
73
- "check_lockstep": "OK at X.Y.Z / ^X.Y.0",
74
- "test_unit": "NNNN/NNNN across NN files",
75
- "typecheck": "clean",
76
- "components_verify": "clean — NN files",
77
- "verify_traits": "56/56 (100%)",
78
- "check_demo_shells": "clean — NN shells",
79
- "check_lightningcss_build": "NN CSS files clean",
80
- "verify_corpus": "0 errors / 0 warns",
81
- "check_embeddings_fresh": "OK",
82
- "check_links": "NNNN files clean",
83
- "smoke_engines": "green",
84
- "smoke_register_engine": "11/11",
85
- "eval_diff_zettel": "cov=N% avg=N (floor cov≥5% avg≥85)",
86
- "fn1_trip_wire": "9/9 per-package clean ...",
87
- "npm_latest": "X.Y.Z across all 9 packages",
88
- "exe_serves": "HTTP 200 (gen-ui)",
89
- "gh_releases": "9 created per-package"
90
- }
91
- ```
92
-
93
- Use underscores (`check_demo_shells`) not colons (`check:demo-shells`) in JSON keys — colons aren't valid JSON identifier punctuation.
94
-
95
- If a gate FAILED at first and was recovered — record the recovery in `notes`, not in `verification` (which shows final state).
96
-
97
- ### `publish_workflows`
98
-
99
- ```json
100
- "publish_workflows": {
101
- "dispatched": "9/9 via gh workflow run --ref <pkg>-vX.Y.Z",
102
- "conclusions": "9/9 success"
103
- }
104
- ```
105
-
106
- For batch push, expand:
107
-
108
- ```json
109
- "publish_workflows": {
110
- "dispatched": "18/18 — vA.B.C set dispatched + settled FIRST, then vA.B.D set (ordering ensures npm latest lands on vA.B.D)",
111
- "conclusions": "18/18 success"
112
- }
113
- ```
114
-
115
- ### `notes` (the lesson log)
116
-
117
- Array of strings, one per significant observation. Examples:
118
-
119
- - "STALE TEST FIXED: ..." — when a stale test required updating.
120
- - "PEER-IN-FLIGHT EXCLUDED: ..." — when a peer file was stashed.
121
- - "STRAY UNCOMMITTED CHANGE EXCLUDED: ..." — when an uncommitted-but-undocumented change was stashed.
122
- - "F-N1 flagged N cosmetic diff-coverage warns; enrichment pass applied to ..." — when the enrichment pass ran.
123
- - "Companion: `<companion-plugin>` vX.Y.Z bundled with this cut" — when a tooling/skill update rides along.
124
- - "Umbrella tag vX.Y.Z fails F-N1 pattern check — expected; lockstep convention" — boilerplate but worth keeping for archaeological consistency.
125
-
126
- The `notes` array is the **highest-information part of the ledger**. This is what future operators read first when investigating a past release.
127
-
128
- ---
129
-
130
- ## §What ELSE to capture per kind
131
-
132
- ### `kind: release-cut` (standard single-version)
133
-
134
- Add `scope` keys per substantive package:
135
-
136
- ```json
137
- "scope": {
138
- "web_components": "<one-sentence per substantive feature in this package, with FEEDBACK numbers>",
139
- "web_modules": "<same>",
140
- "a2ui_corpus": "<same>",
141
- "ride_along_stubs": "@adia-ai/llm, @adia-ai/a2ui-compose, ... — version bump only."
142
- }
143
- ```
144
-
145
- ### `kind: batch-push` (multi-version)
146
-
147
- Add `versions` array + per-version `tag_commits` + `scope` per-version:
148
-
149
- ```json
150
- "versions": ["A.B.C", "A.B.D"],
151
- "tag_commits": {
152
- "vA.B.C": "<sha>",
153
- "vA.B.D": "<sha>"
154
- },
155
- "scope": {
156
- "vA.B.C": "<one-paragraph summary of this version>",
157
- "vA.B.D": "<same>"
158
- }
159
- ```
160
-
161
- ### `kind: p1-hotfix` (urgent fix without normal cycle)
162
-
163
- Add `incident` block:
164
-
165
- ```json
166
- "incident": {
167
- "trigger": "<the symptom that demanded a hotfix>",
168
- "detection_lag": "<when shipped → when noticed>",
169
- "scope_minimization": "<what was deliberately NOT included to keep the hotfix small>"
170
- }
171
- ```
172
-
173
- Cross-reference `ops-postmortem` skill — the hotfix usually pairs with a postmortem doc.
174
-
175
- ### `kind: post-release-fix` (correction after publish)
176
-
177
- Add `corrects` block:
178
-
179
- ```json
180
- "corrects": {
181
- "version": "<the version being corrected>",
182
- "issue": "<what was wrong>",
183
- "resolution_path": "<how — typically a follow-up release>"
184
- }
185
- ```
186
-
187
- Example: a future "v0.6.21.1" or "v0.6.22 fix-only" cycle correcting a v0.6.21 defect would carry this block.
188
-
189
- ---
190
-
191
- ## §Where to write it
192
-
193
- Path: `.brain/audit-history/YYYY-MM-DD-release-vX.Y.Z.json`.
194
-
195
- Convention:
196
-
197
- - Date is the cycle's `released_at` field (not strictly the local filesystem date; they should match but the field is authoritative).
198
- - For batch push: `.brain/audit-history/YYYY-MM-DD-batch-push-vA-vZ.json` where A is the oldest and Z is the newest version in the batch.
199
-
200
- The file MUST be added in a separate `chore(audit-history)` commit after the release commit ships. Don't bundle it into the release commit — the ledger commit is the cycle's epilogue.
201
-
202
- ---
203
-
204
- ## §Reading past ledgers (mode 8)
205
-
206
- When the operator asks "what shipped in v0.6.X?" or "did we ever fix `<symptom>`?":
207
-
208
- ```bash
209
- # Single-version lookup
210
- cat .brain/audit-history/*-release-v0.6.X.json | jq .
211
-
212
- # Search across cycles
213
- grep -l "FEEDBACK-37" .brain/audit-history/*.json | sort
214
- grep -l "stale test" .brain/audit-history/*.json | sort
215
- grep -l "version-skip" .brain/audit-history/*.json | sort
216
-
217
- # What gates were ever flagged?
218
- for f in .brain/audit-history/*.json; do
219
- echo "$(basename $f):"
220
- jq -r '.notes[] | select(test("FAILED|enrichment|STASHED|EXCLUDED"))' "$f" 2>/dev/null
221
- done
222
- ```
223
-
224
- Memory: `reference_findings_index_and_postmortems` — there's a `.brain/findings/INDEX.md` for open follow-ups and `.brain/postmortems/` for incident write-ups. The audit-history ledgers complement those: ledgers are per-cycle, INDEX/postmortems are per-issue.
225
-
226
- ---
227
-
228
- ## §When this reference is "done v1"
229
-
230
- - Every cycle's ledger uses the canonical schema with no key drift (verifiable via a JSON schema validator or `jq` keys diff).
231
- - The `notes` array has at least one entry per cycle (the umbrella F-N1 boilerplate counts as the minimum).
232
- - The next mode-8 investigation (what shipped in v0.6.X?) reads the ledger first, not the GH release page.
@@ -1,174 +0,0 @@
1
- # `migration-guide-authoring.md` — authoring the MIGRATION GUIDE when cutting a breaking release
2
-
3
- > Loaded by **mode 11 (Author a migration guide)** and by **mode 1 / 2** whenever the cut is a **MINOR** (an API-surface break — removed/renamed prop, attribute, slot, event, token, or tag). The **producer** side of migrations: you are shipping the breaking change, so you author the guide section consumers will follow. Companion: `changelog-discipline.md` (the CHANGELOG records _what_ landed; the migration guide tells consumers _how to absorb it_).
4
-
5
- This is the **producer counterpart** to consumer-side migration. When the framework ships a breaking release, `MIGRATION GUIDE.md` is the canonical record of every BREAKING item + its mechanical search-and-replace recipe. The **consumer side** (sweeping a consumer app's call sites with `git grep` + `perl -i -pe`, then verifying with the build gate) lives in the separate consumer/app-author plugin — it READS this guide. Your job here is to WRITE the section it reads.
6
-
7
- > **Scope split (don't blur it):**
8
- >
9
- > - **Producer (this skill, this file)** — author the `MIGRATION GUIDE.md` version section + migrate the IN-REPO surfaces (demo / exemplar / playground / catalog pages) so the release ships clean.
10
- > - **Consumer (separate plugin)** — sweep a downstream consumer app against a published guide section. NOT this skill.
11
- > - **Designing the breaking change itself** — a contract decision, not a migration. Upstream of both.
12
-
13
- ---
14
-
15
- ## §When you need a migration guide section
16
-
17
- Author (or extend) a `MIGRATION GUIDE.md` section when the cut removes or renames a **public API symbol**:
18
-
19
- - a removed/renamed **prop or attribute** (e.g. `variant="danger"` → `color="danger"`);
20
- - a removed/renamed **slot** or **slot semantics flip** (e.g. `[open]` default-hidden → `[collapsed]` default-visible);
21
- - a removed/renamed **event name** (e.g. `chat-submit` → `submit`);
22
- - a removed/renamed **token** (e.g. `--n-*` → `--a-*`);
23
- - a removed/renamed **tag** (e.g. `app-shell` → `adia-shell`);
24
- - a **Boolean → enum** migration (e.g. `completed` → `status="completed"`);
25
- - a **default-value behavior change** wide enough that consumers must act.
26
-
27
- This is the same line as the **PATCH-vs-MINOR** rule in `cycle-happy-path.md` §Step 4b: **MINOR is reserved for API-surface breaks ONLY.** If you're cutting MINOR, you almost certainly owe a migration-guide section. If the change is a visible-behavior change with no removed/renamed symbol, it stays PATCH and usually needs only a CHANGELOG `### Changed` bullet — **not** a guide section.
28
-
29
- Additive cuts (new component, new opt-in attribute, new API) need **no** migration section — note "additive; no consumer sweep" in the version table and move on.
30
-
31
- ---
32
-
33
- ## §Where the guide lives
34
-
35
- `MIGRATION GUIDE.md` is a **top-level consumer artifact at the repo root** (not under `docs/` — the space in the filename is intentional; it's surfaced to consumers as a first-class document). It is READ by the consumer side but MODIFIED only here, at producer time, when a new breaking release is cut.
36
-
37
- One section per release that introduces breaking changes, newest at the top. A consumer jumping multiple versions reads the merged span of all sections between their source and target.
38
-
39
- ---
40
-
41
- ## §The authoring workflow
42
-
43
- ### Step 1 — Enumerate the breaking surface
44
-
45
- From the cut's diff + CHANGELOG `[vX.Y.Z]` `### Removed` / `### Changed` entries, list every breaking item. For each, capture:
46
-
47
- - **The symbol** — the exact prop / attr / slot / event / token / tag.
48
- - **The before → after** — old shape and new shape.
49
- - **The kind** — pure rename (mechanical) · semantic flip (needs author judgment) · Boolean→enum · removal (no replacement).
50
- - **The audit grep** — the `git grep -nE` that surfaces call sites.
51
- - **The sweep** — the `git grep -lE | xargs perl -i -pe` incantation, OR "manual review" if the change can't be safely mechanized.
52
-
53
- ### Step 2 — Write the section
54
-
55
- Section skeleton (per release):
56
-
57
- ```markdown
58
- ## Migrating to @adia-ai/web-components@X.Y.Z (YYYY-MM-DD)
59
-
60
- <one-line scope: how many breaking items, the headline.>
61
-
62
- ### <item 1 — bold headline> (`old` → `new`)
63
-
64
- <one sentence: what changed and why.>
65
-
66
- **Audit:**
67
-
68
- \`\`\`bash
69
- git grep -nE '<pattern that surfaces call sites>'
70
- \`\`\`
71
-
72
- **Sweep:**
73
-
74
- \`\`\`bash
75
- git grep -nlE '<pattern>' \
76
- | xargs perl -i -pe 's/<old>/<new>/g'
77
- \`\`\`
78
-
79
- ### <item 2 …>
80
- ...
81
- ```
82
-
83
- Shape rules:
84
-
85
- - **One item = one subsection.** Each removed/renamed symbol gets its own `###` with audit + sweep (or a "manual review" note).
86
- - **Bold-prefix headline + before→after in the heading** — readers grep the heading for the symbol they hit.
87
- - **Audit grep first, sweep second.** The consumer side ALWAYS audits (lists call sites) before sweeping. Author both so they can.
88
- - **Mechanical vs manual, explicitly labeled.** A pure rename ships a `perl -i -pe`. A semantic flip / opt-out-Boolean / ownership-move ships a **"manual review — here's why"** note instead, because sed can't tell author intent (see §Manual-review classes below).
89
- - **One component per sweep regex.** Don't merge `<(toast|alert|tag)-ui …>` alternations — perl/sed alternation captures don't preserve the matched alternative cleanly. One component at a time.
90
- - **HTML-attribute regexes only match HTML/JSX.** A `<button-ui variant="danger">` sweep won't touch JS `el.variant = 'danger'` — author a separate JS-side regex when the symbol has a programmatic form.
91
-
92
- ### Step 3 — Migrate the in-repo surfaces FIRST
93
-
94
- Before the cut ships, sweep the framework's OWN consumer surfaces — the demo pages, exemplars, playgrounds, and catalog — so the release doesn't ship broken examples of the thing it just changed. Run your own audit + sweep against `apps/`, `playgrounds/`, `catalog/`, `packages/web-components/components/*/*.html`. This is the producer dogfooding the migration: if the in-repo sweep is awkward, the consumer sweep will be worse — fix the recipe now.
95
-
96
- ### Step 4 — Verify
97
-
98
- Run the cut's normal pre-flight gate roster (`cycle-happy-path.md` §Step 3). For a breaking cut, pay special attention to the structural/demo gates (`check:demo-shells`, the static-HTML probes) — they catch in-repo surfaces you missed. A **sweep-verification grep audit** across all extensions catches the trap where a vocabulary migration touched the markup but NOT the CSS selectors that style it or the JS comments that reference it (different files; a markup-only commit looks complete but leaves drift):
99
-
100
- ```bash
101
- # For any vocabulary migration where legacy → new shapes coexist or get
102
- # retired, grep the full legacy-pattern set across ALL extensions at the
103
- # END of the in-repo sweep. 0 hits = sweep verified clean.
104
- LEGACY_PATTERNS=( '<old-tag' 'old-attr=' '--old-token' )
105
- for pat in "${LEGACY_PATTERNS[@]}"; do
106
- echo "=== $pat ==="
107
- grep -rln -E "$pat" apps playgrounds catalog \
108
- --include='*.css' --include='*.html' --include='*.js' --include='*.yaml' 2>/dev/null
109
- done
110
- ```
111
-
112
- ### Step 5 — Cross-reference from the CHANGELOG + release notes
113
-
114
- - The breaking package's CHANGELOG `[vX.Y.Z]` `### Removed` / `### Changed` entry should name the symbol AND point at the guide ("see `MIGRATION GUIDE.md` §X.Y.Z").
115
- - The release notes (`notes-authoring.md`) carry a `⚠️` heads-up paragraph naming the break + linking the guide section, so consumers reading the announcement know to migrate.
116
-
117
- ---
118
-
119
- ## §Manual-review classes (do NOT auto-sweep)
120
-
121
- Some breaking changes look mechanical but aren't. Document them as **manual review** with the reason, never as a `perl -i -pe`:
122
-
123
- - **Semantic flips** — a rename that inverts default behavior. Example: `[open]` (default-hidden, opt-in) → `[collapsed]` (default-visible, opt-out). The right migration depends on author intent: if the surface wanted the thing expanded, drop the attr; if hidden, add `collapsed`. List occurrences, ask.
124
- - **Opt-out Booleans that default true** — when `<x-ui filterable>` is the same as bare `<x-ui>` (filter on by default), the migration only matters where a consumer EXPLICITLY disabled an affordance (`searchable="false"`). Sed can't tell the difference.
125
- - **Ownership moves** — moving a message/prop from a wrapper to a child (e.g. `<field-ui error="…">` → the message moves to the slotted control) requires knowing which child is the form control; the slot may not exist yet. Manual.
126
- - **kebab-string property keys** — when the HTML _attribute_ name is unchanged but the JS _programmatic_ form changed (`el['submit-label']` → `el.submitLabel`), attribute-only consumers need no migration. Audit programmatic access only.
127
- - **Wide tag/token renames (50+ symbols)** — the `@agent-ui-kit/*` → `@adia-ai/*` namespace rename class: tag renames, token-namespace renames (`--n-*` → `--a-*`), class renames (`NanoElement` → `AdiaElement`). Don't auto-sweep the whole surface blind — false positives are likely (a `variant="danger"` on a non-`*-ui` element that shares a prefix). List by table; require human approval per cluster.
128
-
129
- ---
130
-
131
- ## §The version-coverage table
132
-
133
- Maintain a table at the top of `MIGRATION GUIDE.md` that classifies every release so a consumer jumping a gap knows which sections apply:
134
-
135
- ```markdown
136
- | Version | Type | Sweeps |
137
- |---|---|---|
138
- | `0.0.22` | additive | New shell components; net-new APIs. No consumer sweep needed. |
139
- | `0.0.21` | additive (no runtime change) | JSDoc/source-doc refresh. Bump the dep; no sweep. |
140
- | `0.0.20` | BREAKING (N items) | <bullet list of every breaking item + its sweep>. |
141
- | `0.0.5`–`0.0.19` | additive | No migration sweeps. Bump the dep version. |
142
- | `0.0.4` | structural | Runtime extracted to a new package; imports retarget. |
143
- | `@agent-ui-kit/*` → `@adia-ai/*` | rename | Tag + token + class renames (50+). Don't auto-migrate without approval. |
144
- ```
145
-
146
- `additive` = bump and go. `BREAKING` = the version has a `###` section with audit + sweep per item. `structural` = import retargeting (package extraction / move). `rename` = wide namespace rename, manual-review by cluster.
147
-
148
- ---
149
-
150
- ## §Forward-looking surfaces (the next guide author's heads-up)
151
-
152
- When a surface is currently additive but accumulating breaking pressure, note it at the bottom of the guide so the NEXT breaking-release author knows where the churn is concentrated — shell components, the gen-UI MCP op-type names, table-family opt-out attributes, etc. A future author reading "this area is volatile" writes a tighter section faster.
153
-
154
- ---
155
-
156
- ## §Anti-patterns
157
-
158
- - **Authoring the guide AFTER the cut ships.** The guide section is part of the breaking-release scope — write it in the same cycle, before the in-repo sweep, so you dogfood the recipe.
159
- - **A `perl -i -pe` for a semantic flip.** If author intent decides the migration, it's manual review. A mechanical sweep applied to a flip silently mis-migrates surfaces.
160
- - **Merging component sweeps into one alternation regex.** One component per regex (capture-group preservation).
161
- - **Skipping the in-repo sweep.** Shipping a breaking release whose own demo pages still use the old shape teaches consumers the wrong thing and trips the demo gates.
162
- - **A bare CHANGELOG bullet with no guide section for a real break.** The CHANGELOG says _what_; the guide says _how_. A removed symbol needs both.
163
- - **Treating this as the consumer sweep.** This skill authors the guide + migrates in-repo surfaces. Sweeping a downstream consumer app is the separate consumer/app-author plugin's job.
164
-
165
- ---
166
-
167
- ## §Verify target (mode 11)
168
-
169
- The migration-guide section is "done" when:
170
-
171
- 1. Every breaking item in the cut's CHANGELOG has a matching `###` subsection (audit + sweep, or a labeled manual-review note).
172
- 2. The in-repo surfaces (demo / playground / catalog) are swept and the sweep-verification grep audit reports **0 legacy hits**.
173
- 3. The breaking cut's structural/demo gates pass.
174
- 4. The release notes carry the `⚠️` heads-up linking the guide section.