@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,468 +0,0 @@
1
- # Reference: Teach Protocol — Absorbing new knowledge into the adia-ui-release skill
2
-
3
- **Ecosystem context:** §Teach is this skill's instantiation of the rollup-family **extensibility** posture. The shared skill-ecosystem conventions live at `${CLAUDE_PLUGIN_ROOT}/references/shared/skill-conventions.md` (§11 mechanizes the §Teach decision tree); the verify-the-output rationale at `${CLAUDE_PLUGIN_ROOT}/references/shared/pev-rationale.md`. The posture separates **universal components** (the trigger cluster, the 7 anti-patterns, the 5-step landing procedure, the citation-vs-knowledge principle, the negative case) from **skill-specific components** (the decision tree's branches, the worked examples). When editing this file, preserve the universal sections; replace only the skill-specific decision-tree branches + worked examples.
4
-
5
- **Why authored:** As the release skill absorbs new release-engineering patterns (the release trip-wire, diff-coverage enrichment, batch-push npm-latest ordering, embeddings-fresh recovery, version-skip correction, deploy recipes), each absorption was previously a one-off improvisation. This protocol gives every future "make sure `adia-ui-release` knows about [pattern]" request a deterministic landing path.
6
-
7
- **Used by:** the `adia-ui-release` skill, when an agent receives one of the trigger phrases below. SKILL.md §Teach is the seed; this file is the binding procedure.
8
-
9
- - "make sure `adia-ui-release` knows about [the new gate / recovery path / pattern]"
10
- - "train `adia-ui-release` on [the new ledger field / the new deploy step]"
11
- - "the skill should know about [the F-N1 enrichment]"
12
- - "absorb this release-pattern into adia-ui-release"
13
- - "teach the skill about [the new post-deploy verify]"
14
- - "[recovery-paths case study]: make sure the skill reflects it"
15
-
16
- **Companion:** the `§SelfAudit` section + `scripts/audit-gate-roster.mjs` (run after any §Teach landing to verify Axis 9 gate-roster currency holds), and `cycle-happy-path.md` (the 12-step happy path — §Teach landings near it should preserve its structure).
17
-
18
- **Anti-companion:** `docs/journal/YYYY/MM/<date>.md` and `.brain/audit-history/YYYY-MM-DD-release-cut-vX.Y.Z.json` (one-off cycle retros + per-cycle ledgers belong there, NOT in the skill — see Branch H below).
19
-
20
- ---
21
-
22
- ## When to Use
23
-
24
- Trigger phrases (mirrored from the SKILL.md §Teach section):
25
-
26
- - "make sure `adia-ui-release` knows about X"
27
- - "train the skill on X"
28
- - "teach the skill about Y"
29
- - "the skill should be aware of Z"
30
- - "absorb [pattern / recovery / gate] into adia-ui-release"
31
- - "update the skill to reflect [the new ADR / the resolved failure mode / the new gate]"
32
-
33
- This protocol applies when **another agent** (release operator, peer skill author, dev-ops author) hands the release skill new knowledge to integrate. It does NOT apply when:
34
-
35
- - You're cutting a release right now (use mode 1 / `cycle-happy-path.md` instead)
36
- - You're authoring a CHANGELOG entry or release notes (use mode 9 / `notes-authoring.md` instead)
37
- - You're fixing a wrong claim in the skill (the universal "correction" posture)
38
- - You're running cleanup / archive sweeps (use §SelfAudit's hygiene-cut shape)
39
-
40
- The procedure below is the binding for skill-teach requests against `adia-ui-release`. Follow it in order. Each step has a stop-condition; do not skip ahead.
41
-
42
- ---
43
-
44
- ## Core Principles
45
-
46
- 1. **The skill is a citation layer, not a knowledge layer.** Release-cycle invariants live in `scripts/release/*` + `package.json` `scripts:` entries + workflows under `.github/workflows/`. The skill cites by gate name, mode, and recovery-path keyword — it does NOT duplicate what the scripts encode. When a §Teach landing's first instinct is "rewrite what `scripts/release/check-lockstep.mjs` says," stop: the substrate is the source of truth.
47
- 2. **Reference files are the cold-start budget's safety valve.** New content > ~50 LOC of procedural detail belongs in `references/<topic>.md` and is cited from SKILL.md, not inlined. This keeps the bare-activation surface small (the cold-start menu) and lets modes load only their declared bundles.
48
- 3. **Triggers without binding sections are waste.** Adding keywords to `trigger:` without a corresponding section in SKILL.md (or referenced file) consumes activation budget for no payoff. Always pair the two.
49
- 4. **Capability menu items must reach an actual mode.** The cold-start `## What this skill can do` table is the agent's mental model on bare activation. Lies in that table cost more than gaps.
50
- 5. **Version bumps are PATCH for citations, MINOR for new sections, MAJOR for renames/removals.** Most §Teach landings here are PATCH (a new gate row in `gates-catalog.md`) or MINOR (a new recovery scenario in `recovery-paths.md`). Never bundle MINOR with PATCH polish in one cut.
51
- 6. **§SelfAudit is the receipt.** A §Teach landing isn't done until `node "${CLAUDE_PLUGIN_ROOT}/skills/adia-ui-release/scripts/audit-gate-roster.mjs" --strict` runs clean. If the audit regresses, fix in the same cut.
52
-
53
- ---
54
-
55
- ## The Decision Tree — where does new release knowledge land?
56
-
57
- Run this **before** any patch. The wrong landing target wastes effort and creates drift.
58
-
59
- ```text
60
- Is the new fact a SUBSTRATE behavior — a script the skill cites
61
- (e.g. `scripts/release/check-release.mjs`, `scripts/release/check-lockstep.mjs`),
62
- a CI workflow, a package.json script entry?
63
- → YES: belongs in the SUBSTRATE, not the skill.
64
- Edit the script / workflow / package.json directly.
65
- If the change affects what the skill cites, follow up by
66
- updating the citation paragraph in the appropriate reference
67
- (usually `gates-catalog.md` Branch B below).
68
- STOP HERE for the substrate edit.
69
- (See Worked Example A below.)
70
- → NO: continue.
71
-
72
- Is it a NEW GATE — a `check:*` / `verify:*` / `smoke:*` / `test:*`
73
- script added to `package.json` that the release cycle should run?
74
- → YES: lands in `gates-catalog.md`. Choose category by
75
- the gate's role:
76
- - Category 1-3 — pre-cut quality gates (verify, smoke, test)
77
- - Category 4-6 — release-time invariants (lockstep, F-N1)
78
- - Category 7-8 — eval / corpus / embedding floors
79
- - Category 9 — release-side audit-roster currency itself
80
- If the new gate doesn't fit, author a new category section.
81
- Update Axis 9 (gate-roster currency) — the audit script will
82
- detect the new gate; document it explicitly.
83
- (See Worked Example B below.)
84
-
85
- Is it a NEW RECOVERY PATH — a failure mode in the release cycle
86
- that wasn't previously documented?
87
- → YES: lands in `recovery-paths.md`. Identify the
88
- scenario (batch-push npm-latest reversal, version-skip
89
- correction, stale-test detection, embeddings-fresh recovery,
90
- F-N1 enrichment pass, corpus drift remediation). Add the
91
- scenario as a new H2; cross-link from the §Recon table in
92
- SKILL.md if it's a common-enough symptom that mode-1 needs
93
- to recognize it.
94
- (See Worked Example C below.)
95
-
96
- Is it a NEW NOTES TEMPLATE VARIANT — a Slack post shape, GH release
97
- body section, or rollup-notes structure?
98
- → YES: single-version lands in `notes-authoring.md`;
99
- multi-version retrospectives in `rollup-notes.md`.
100
- These files are the SoT for what release notes look like;
101
- update them rather than inlining example notes elsewhere.
102
- (See Worked Example D below.)
103
-
104
- Is it a NEW LEDGER FIELD or audit-history JSON-shape extension?
105
- → YES: lands in `ledger-discipline.md`. The ledger schema
106
- is the cross-cycle archaeology layer; new fields should be
107
- documented before they appear in actual ledgers. Update the
108
- template at `assets/templates/audit-history.template.json`
109
- alongside the schema description.
110
- (See Worked Example E below.)
111
-
112
- Is it a NEW EXE DEPLOY RECIPE — a step in the site-build → rsync →
113
- verify chain, or a new probe?
114
- → YES: lands in `exe-deploy.md`. The deploy recipe is
115
- a discrete script chain (`npm run build:site` → `rsync` →
116
- `curl -s -o /dev/null -w`); new steps insert into the chain
117
- in the documented order. If the recipe gains a new failure
118
- mode, also add a recovery-paths entry.
119
- (See Worked Example F below.)
120
-
121
- Is it a MULTI-AGENT or PEER-IN-FLIGHT observation — a new pattern
122
- for stash discipline, staging-area defensiveness, or peer-coordination?
123
- → YES: lands in `multi-agent-baseline.md`. This file
124
- is the canonical home for the multi-agent baseline assumption
125
- from AGENTS.md; new patterns build on top.
126
- (See Worked Example G below.)
127
-
128
- Is it a NEW MIGRATION-GUIDE pattern — a breaking-change recipe shape, a
129
- new manual-review class, a version-coverage-table convention, or an
130
- in-repo-sweep verification step (the PRODUCER side of migrations)?
131
- → YES: lands in `migration-guide-authoring.md`. This is the
132
- producer counterpart to the consumer/app-author plugin's
133
- consumer-sweep side. Add the recipe shape or manual-review class
134
- there; cross-link from §Step 4b (PATCH-vs-MINOR) if it changes
135
- when a guide section is owed. Do NOT add consumer-sweep recipes
136
- here — those belong in the separate consumer plugin.
137
- (Producer side only — the consumer sweep is out of scope.)
138
-
139
- Is it a METHODOLOGY / POSTURE shift — a new mode, a new §SelfAudit
140
- axis, a new operator-confirmation checkpoint?
141
- → YES: lands INLINE in SKILL.md (the procedural spine). These
142
- shape every mode and belong in the cold-start surface:
143
- §Mission, §Posture, §ReleaseInvariants, §LoadingProtocol,
144
- §SelfAudit, §FileMap. They're allowed to grow because they
145
- shape every other section. Run §SelfAudit immediately to
146
- confirm the cold-start budget held.
147
- (See Worked Example H below.)
148
-
149
- Is it a one-off RELEASE RETRO, ARC STORY, or HISTORICAL CONTEXT for
150
- a specific cycle (vN.M.X-shaped)?
151
- → NO landing in the skill. It belongs in:
152
- - `.brain/audit-history/YYYY-MM-DD-release-cut-vN.M.X.json`
153
- (per-cycle ledger — already captured by mode 1 step 11)
154
- - `docs/journal/YYYY/MM/<date>.md` (architectural milestones,
155
- cross-cycle lessons)
156
- - `assets/case-studies/<date>-<topic>-vN.M.X.md` (when the cycle
157
- surfaced a generalizable pattern — but lift the pattern into
158
- one of the branches above; the case study is the citation,
159
- not the recipe)
160
- Skipping the skill is a FEATURE, not a gap.
161
- (See Worked Example I — the negative case.)
162
- ```
163
-
164
- ---
165
-
166
- ## The Five-Step Landing Procedure
167
-
168
- After the decision tree picks a target, follow these steps in order:
169
-
170
- ### Step 1 — Audit before patching
171
-
172
- Before writing anything:
173
-
174
- 1. **Read the target file in full.** Don't skim. The release-skill reference files have established voice + section ordering; patches must match.
175
- 2. **`git status` + `git log -5`** on the working tree. Confirm no peer activity in this skill’s directory (`${CLAUDE_PLUGIN_ROOT}/skills/adia-ui-release/`) (peer agents may be authoring sibling skills like `adia-ui-authoring`). If peer is dirty here, halt + coordinate.
176
- 3. **Grep for existing coverage.** Run `grep -rn "<keyword>" "${CLAUDE_PLUGIN_ROOT}/skills/adia-ui-release/"` to confirm the new knowledge isn't already partly covered. If it IS, the landing is a _patch + augment_, not a _new section_.
177
- 4. **Confirm the landing-target choice.** Re-read the Decision Tree above against your specific case. Two minutes of "is this really a gate, or is it actually a recovery path?" prevents two hours of misplaced content.
178
-
179
- ### Step 2 — Author the patch
180
-
181
- Two shapes depending on Step 1's grep:
182
-
183
- #### Shape A — NEW section / file (no existing coverage)
184
-
185
- If the target is a new reference file: create `references/<topic>.md` with the canonical header (provenance, why-authored, used-by, companion, anti-companion), then "## When to Use", "## Core Principles", then content. Reference from SKILL.md `§LoadingProtocol` reference-manifest area with a one-line "when to load" tag.
186
-
187
- If the target is a new H2 inside an existing reference (most common for release-skill §Teach): find the semantically correct insertion point (e.g. a new gate row goes in its Category section in `gates-catalog.md`, not at the file's end). Use the established voice — short paragraph framing, table-form details, code blocks for commands.
188
-
189
- #### Shape B — AUGMENT existing section (grep found partial coverage)
190
-
191
- Read the entire existing section first, including any cross-references to other files. Author the augment as a sub-section or inline paragraph at the _semantically correct place_, not the end. If the augment changes the meaning of nearby paragraphs, edit those too — don't leave stale claims standing.
192
-
193
- ### Step 3 — Wire the activation surface
194
-
195
- For any §Teach landing that should be discoverable:
196
-
197
- 1. **Add trigger keywords to `trigger:` in the frontmatter** if the new knowledge introduces a vocabulary the cycle's trigger phrases don't cover yet. Pick 1-3 phrases an operator would naturally say (e.g. "embeddings drift", "F-N1 enrichment").
198
- 2. **Add a capability menu entry** in `## What this skill can do — pick your mode` ONLY if the new content opens a new mode. Most §Teach landings extend existing modes; they don't create new ones.
199
- 3. **Update the §Where are you starting from table** if the new content adds a starting state (e.g. "Embeddings drift caught at pre-flight" → mode 6 / gates-catalog).
200
-
201
- If the landing is a new reference file, the SKILL.md edits are minimal — just the manifest line + a triage-table row if it warrants one.
202
-
203
- ### Step 4 — Version + CHANGELOG
204
-
205
- Cut the new content as a release:
206
-
207
- - **PATCH (vN.M.x+1)** — citation strengthening, typo fixes, augmenting an existing section with one paragraph, new gate-row in `gates-catalog.md`, new recovery-path scenario.
208
- - **MINOR (vN.M+1.0)** — new reference file, new H2 section in SKILL.md, new capability-menu mode with binding, new §SelfAudit axis.
209
- - **MAJOR (vN+1.0.0)** — renames, removals, restructuring (don't bundle with adds).
210
-
211
- Update `skill.json` version + `CHANGELOG.md` entry. The entry must name:
212
-
213
- - What was added (one-line summary)
214
- - Where it lives (file path + section anchor)
215
- - What triggers it (1-3 phrases from the trigger keywords or recovery-path keyword)
216
- - What it replaces / supersedes (if anything)
217
-
218
- ### Step 5 — Verify with §SelfAudit
219
-
220
- Run the audit:
221
-
222
- ```bash
223
- node "${CLAUDE_PLUGIN_ROOT}/skills/adia-ui-release/scripts/audit-gate-roster.mjs" --strict
224
- ```
225
-
226
- Axis 9 (gate-roster currency) is the mechanized check. If a new gate was added in §Teach Branch B but not documented in `gates-catalog.md`, this script catches it. Other axes (the extensibility binding points in `${CLAUDE_PLUGIN_ROOT}/references/shared/skill-conventions.md`) are manual-review for now.
227
-
228
- If the audit regresses, **fix in the same cut**. Don't defer hygiene-debt; it compounds.
229
-
230
- ---
231
-
232
- ## Worked Examples
233
-
234
- ### Example A — Substrate edit (NOT a skill landing)
235
-
236
- **Request:** "make sure adia-ui-release knows the new `check:typecheck:strict` script we just added to package.json."
237
-
238
- **Decision tree:** It's a substrate behavior — a new script entry. → **substrate edit, NOT skill change.**
239
-
240
- **Action:**
241
-
242
- ```bash
243
- # The package.json edit is the substrate change. Skill cites by gate
244
- # name in gates-catalog.md; the audit will catch the new entry as
245
- # undocumented and surface it as Axis 9 drift.
246
-
247
- # Run the audit to surface the gap:
248
- node "${CLAUDE_PLUGIN_ROOT}/skills/adia-ui-release/scripts/audit-gate-roster.mjs"
249
-
250
- # It will report "check:typecheck:strict" as a documented variant of
251
- # the base `check:typecheck` (if that base exists in gates-catalog.md)
252
- # OR as undocumented (if no `:strict` base). Add a one-line entry to
253
- # gates-catalog.md Category 1 or 2 as appropriate — this IS a skill
254
- # edit (Branch B below), but it's downstream of the substrate edit.
255
- ```
256
-
257
- **Pitfall to avoid:** "While I'm here, let me inline the script's full purpose in SKILL.md." NO. The script's own `--help` flag + the docstring at the top of the `.mjs` file are the SoT. The skill cites; it doesn't duplicate.
258
-
259
- ### Example B — New gate row
260
-
261
- **Request:** "we just added `check:rendered-completeness` — train the skill on it."
262
-
263
- **Decision tree:** New gate. → **`gates-catalog.md`**, appropriate category.
264
-
265
- **Action:**
266
-
267
- 1. Read `gates-catalog.md`. Identify the right category (verify-time? smoke-time? Categorized by what fails — content quality? wiring? deployment?).
268
- 2. Add a section:
269
-
270
- ```markdown
271
- #### `npm run check:rendered-completeness`
272
-
273
- - **What it catches:** ...
274
- - **Failure shape:** ...
275
- - **Recovery:** ...
276
- ```
277
-
278
- 3. PATCH bump (`scripts/audit-gate-roster.mjs` will detect the new gate is documented; Axis 9 stays clean).
279
- 4. Run `audit-gate-roster.mjs --strict` — expect 0 drift.
280
-
281
- **Real-session reference:** v1.0.1 (2026-05-22) — `audit-gate-roster.mjs` first surfaced 48 undocumented gates; the Category 10 curation pass (variant-aware logic) documented the long tail.
282
-
283
- ### Example C — New recovery path scenario
284
-
285
- **Request:** "make sure the skill knows the v0.6.18 author-from-scratch failure (peer staged source under [Unreleased] but no release commit; we authored it ourselves)."
286
-
287
- **Decision tree:** New recovery scenario. → **`recovery-paths.md`**.
288
-
289
- **Action:**
290
-
291
- 1. Open `recovery-paths.md`. Add a new H2 "Scenario N — Author from scratch (peer staged work but no release commit)".
292
- 2. Document the diagnosis ("HEAD doesn't show release commit; `[Unreleased]` block has content; no peer prep note"), the fix (mode 2 path), and a cross-reference to the case study (`assets/case-studies/2026-05-21-author-from-scratch-v0.6.18.md`).
293
- 3. MINOR bump (new scenario).
294
- 4. Cross-link from SKILL.md §Recon table if the symptom is common.
295
-
296
- **Real-session reference:** v0.3.0 (2026-05-21) — recovery-paths.md gained the author-from-scratch + version-skip + corpus-drift scenarios as part of the Phase 3 ship.
297
-
298
- ### Example D — New notes template variant
299
-
300
- **Request:** "the rollup-notes shape we used for v0.6.8 → v0.6.16 is the canonical multi-version retrospective — capture it as a template."
301
-
302
- **Decision tree:** New notes template variant (multi-version). → **`rollup-notes.md`**.
303
-
304
- **Action:**
305
-
306
- 1. Open `rollup-notes.md`. Add a new H2 documenting the rollup-notes shape: header (arc title + version range + cycle-count), per-version digest table, the-arcs section, headline-event section, net-deltas section, install snippet.
307
- 2. Add a worked example (the v0.6.8 → v0.6.16 notes are the prototype).
308
- 3. PATCH bump (augmenting existing reference file).
309
- 4. Cross-link from §Where are you starting from table if it warrants a triage row ("Want rollup notes across many versions → mode 5").
310
-
311
- ### Example E — New ledger field
312
-
313
- **Request:** "add a `peer_interleave` array to the audit-history JSON when peer commits land mid-cycle."
314
-
315
- **Decision tree:** New ledger schema field. → **`ledger-discipline.md`**.
316
-
317
- **Action:**
318
-
319
- 1. Open `ledger-discipline.md`. Add the field to the canonical schema documentation: name, type, when-populated, example value.
320
- 2. Update `assets/templates/audit-history.template.json` to include the field with a placeholder.
321
- 3. Update `scripts/make-ledger.mjs` to accept the new field via flag if it's mechanically populatable; or document the manual-fill instruction otherwise.
322
- 4. PATCH bump if augmenting; MINOR if introducing a new schema version (`schema_version` bump).
323
-
324
- **Real-session reference:** v1.0.0 (2026-05-22) — the v0.6.22 ledger captured a peer-amend interleave; future ledgers might benefit from a structured field for that.
325
-
326
- ### Example F — New EXE deploy recipe step
327
-
328
- **Request:** "we added a CDN cache-bust step after rsync — train the skill."
329
-
330
- **Decision tree:** New deploy recipe step. → **`exe-deploy.md`**.
331
-
332
- **Action:**
333
-
334
- 1. Open `exe-deploy.md`. Find the recipe section (the `npm run build:site` → `rsync` → `curl` chain).
335
- 2. Insert the cache-bust step in the documented order (between `rsync` and `curl -s -o`).
336
- 3. Document failure modes (cache-bust API timeout, auth failure).
337
- 4. PATCH bump.
338
- 5. If the new step has a failure mode that requires recovery, also add a `recovery-paths.md` scenario (Branch C — two landings).
339
-
340
- ### Example G — Multi-agent / peer-in-flight observation
341
-
342
- **Request:** "v0.6.22's mid-cycle peer-amend interaction is a new pattern — when peer commits between `git add` and `git commit`, the staging area absorbs the peer's commit and `--amend` modifies the wrong thing. Make sure the skill knows."
343
-
344
- **Decision tree:** Multi-agent baseline observation. → **`multi-agent-baseline.md`**.
345
-
346
- **Action:**
347
-
348
- 1. Open `multi-agent-baseline.md`. Add a new H2 "## §Mid-cycle peer-amend interaction" under the existing peer-coordination sections.
349
- 2. Document the failure mode (peer commit between stage + commit), the diagnostic (`git reflog` shows the unexpected commit), the recovery (`git reset HEAD~1` if commit content is fully recoverable; otherwise cherry-pick + re-amend).
350
- 3. Cross-link from `cycle-happy-path.md` § Step 5 (Stage and commit) since that's where the interaction manifests.
351
- 4. PATCH bump.
352
-
353
- **Real-session reference:** v0.6.22 cycle ledger captured this as a note; the pattern graduates from cycle-specific note to canonical guidance via this §Teach landing.
354
-
355
- ### Example H — Methodology / posture shift (inline)
356
-
357
- **Request:** "we should add a 10th §SelfAudit axis — citation-graph integrity (every reference cited in SKILL.md must exist)."
358
-
359
- **Decision tree:** Methodology / posture shift (new audit axis). → **INLINE in SKILL.md §SelfAudit**.
360
-
361
- **Action:**
362
-
363
- 1. Open this skill’s `SKILL.md` §SelfAudit (if it exists yet) or §ReleaseInvariants.
364
- 2. Add the new axis with: name, what it measures, soft threshold, remediation shape.
365
- 3. If the new axis can be mechanized, extend `scripts/audit-gate-roster.mjs` (or author a new audit script).
366
- 4. MINOR bump for the new axis (it's a new procedural commitment, not a citation).
367
- 5. Run the §SelfAudit immediately — confirm the new axis reports clean against the current state. If it doesn't, fix in the same cut.
368
-
369
- **Why inline, not reference file:** §SelfAudit's axes shape every other section. They're the procedural spine; they're allowed to grow. Reference-extracting them would mean agents miss them on cold-start.
370
-
371
- ### Example I — One-off arc story (the NEGATIVE case)
372
-
373
- **Request:** "the skill should remember the v0.6.22 amend interaction — peer's §Teach commit landed on top of the release commit, I amended their commit by mistake, tags ended up on the wrong SHA but it worked out OK."
374
-
375
- **Decision tree:** One-off arc story / specific cycle context. → **`.brain/audit-history/2026-05-22-release-cut-v0.6.22.json` + `docs/journal/`, NOT the skill.**
376
-
377
- **Action:**
378
-
379
- 1. The audit-history ledger already captures this (`notes:` field).
380
- 2. If the pattern generalizes (peer-amend interaction as a recurring failure mode), lift the generalized version into `multi-agent-baseline.md` via Branch G (Example G above). The CYCLE-SPECIFIC story stays in the ledger; the PATTERN graduates to the skill.
381
- 3. **Do nothing else in the skill.** The skill is procedural ("what to do"); the ledger records "what happened in v0.6.22 specifically".
382
-
383
- **Pitfall to avoid:** "But the skill should know about every important arc!" NO. The skill teaches the agent **what to do**; the ledger + journal record **what happened**. Conflating them bloats the skill and rots the ledger.
384
-
385
- ---
386
-
387
- ## Anti-patterns (the §Teach landing failure modes)
388
-
389
- These are universal across extensible skills (per the rollup-family conventions in `${CLAUDE_PLUGIN_ROOT}/references/shared/skill-conventions.md`). Each one was observed across §Teach rollouts in adjacent release-skill arcs.
390
-
391
- ### Anti-pattern 1 — "Append-only" landing
392
-
393
- Adding new content to the end of an existing reference without integrating it. Symptom: `gates-catalog.md` grows monotonically; new gates pile in Category 10 (stubs) instead of finding the right category.
394
-
395
- **Fix:** When augmenting a reference, find the _semantically correct insertion point_, not the end. If the new content doesn't fit any insertion point, you may be in the wrong section.
396
-
397
- ### Anti-pattern 2 — Duplicating substrate facts
398
-
399
- Adding what `scripts/release/check-lockstep.mjs` does as prose in the skill. Symptom: the skill paragraph and the script's `--help` say the same thing in different words; the next time the script changes, drift starts.
400
-
401
- **Fix:** When you catch yourself writing "the gate does Y", check — is this really in the script's own `--help` or the docstring at top? If yes, cite by gate name. The skill cites; doesn't describe.
402
-
403
- ### Anti-pattern 3 — Trigger keywords without binding
404
-
405
- Adding phrases to `trigger:` for content that doesn't exist yet, or that exists but has no procedural binding. Symptom: agent activates the skill on the keyword, then has no procedure to follow.
406
-
407
- **Fix:** Pair the keyword add with the section authoring in the SAME cut. Never bump the version with orphan triggers.
408
-
409
- ### Anti-pattern 4 — Capability menu lies
410
-
411
- Adding a mode-table row pointing to a section that doesn't exist, or to a stub. Symptom: agent reads the menu, picks the mode, jumps to the section, finds nothing actionable, falls back to general knowledge.
412
-
413
- **Fix:** Capability-menu entries are the cold-start surface — load-bearing. Treat each new entry as a contract that the underlying section MUST deliver. If you're not ready to write the section, don't add the menu item yet.
414
-
415
- ### Anti-pattern 5 — Bundling MINOR + PATCH in one cut
416
-
417
- Shipping a new recovery scenario (MINOR) alongside three citation-strengthening edits (PATCH) in a single `vN.M+1.0` cut. Symptom: the CHANGELOG entry is unclear; consumers can't tell what the new behavior is.
418
-
419
- **Fix:** Cut the MINOR first (with just the new section). Cut the PATCH after (with the polish). Each cut has a clean intent.
420
-
421
- ### Anti-pattern 6 — Hygiene-debt deferral
422
-
423
- Landing a new section, observing that `audit-gate-roster.mjs --strict` shows a threshold regression, and deferring the fix to "next cut." Symptom: the next cut has a different focus; the hygiene-debt is forgotten; six cuts later the skill's Axis 9 reports 30+ undocumented gates.
424
-
425
- **Fix:** Fix axis regressions IN THE SAME CUT as the §Teach landing. Hygiene-debt compounds.
426
-
427
- ### Anti-pattern 7 — Treating §Teach as one-way
428
-
429
- Receiving a §Teach request and landing the content without asking "should this be in `adia-ui-release`, or in `adia-ui-authoring` / a long-running-ops skill / `ops-postmortem` / a different sibling?" Symptom: the release skill absorbs content that semantically belongs in a sibling (e.g. `ops-postmortem` for incident write-ups, `adia-ui-authoring` for authoring-side hygiene).
430
-
431
- **Fix:** Before landing here, ask: is there a sibling skill for this domain? Sibling `adia-ui-authoring` owns authoring; the consumer/app-author plugin owns 3rd-party consumption + the **consumer side** of migration; `ops-postmortem` owns incident write-ups; long-running VM ops is a separate concern (not in this plugin). The release skill owns the cycle (and, via §MigrationGuideAuthoring, the **producer side** of migration guides), not adjacent concerns.
432
-
433
- ---
434
-
435
- ## Cross-references
436
-
437
- - **§Mission** (`SKILL.md`) — defines the autonomous-release-engineer posture. §Teach is a narrower lane.
438
- - **§SelfAudit** (when it lands; tracked by `audit-gate-roster.mjs` Axis 9 today) — the audit gate that catches §Teach landing regressions. Always run after.
439
- - **§LoadingProtocol** (`SKILL.md`) — defines the reference-file extraction discipline. §Teach respects it by routing content > ~50 LOC to `references/`.
440
- - **`scripts/audit-gate-roster.mjs`** — Axis 9 enforcement. Run after every §Teach landing.
441
- - **`${CLAUDE_PLUGIN_ROOT}/references/shared/skill-conventions.md`** — the rollup-family skill conventions (§11 mechanizes the §Teach decision tree; §7 the §SelfAudit axes).
442
- - **`${CLAUDE_PLUGIN_ROOT}/references/shared/pev-rationale.md`** — the verify-the-output rationale every §Teach landing inherits via §PEV.
443
- - **AGENTS.md** (the target monorepo's root) — defines journal + audit-history disciplines that §Teach defers to for cycle-specific stories.
444
-
445
- ---
446
-
447
- ## Worked Decision Examples — Quick-Reference Card
448
-
449
- When in doubt, the table below routes by request shape.
450
-
451
- | Request shape | Landing target | Version bump | Audit gate |
452
- | --- | --- | --- | --- |
453
- | "new check:_/ verify:_ / smoke:\* gate" | substrate + `gates-catalog.md` | PATCH | `audit-gate-roster.mjs` |
454
- | "new failure mode / recovery path" | `recovery-paths.md` | MINOR if new H2; PATCH if augmenting | manual review |
455
- | "new Slack post / GH release shape" | `notes-authoring.md` | PATCH | manual review |
456
- | "multi-version rollup notes shape" | `rollup-notes.md` | PATCH | manual review |
457
- | "new ledger field / schema bump" | `ledger-discipline.md` + `assets/templates/audit-history.template.json` | PATCH or MINOR | manual review |
458
- | "new EXE deploy step / probe" | `exe-deploy.md` | PATCH | manual review |
459
- | "new peer-coordination pattern" | `multi-agent-baseline.md` | PATCH | manual review |
460
- | "new migration-guide recipe / manual-review class (producer side)" | `migration-guide-authoring.md` | PATCH if augmenting; MINOR if new H2 | manual review |
461
- | "new methodology / §SelfAudit axis" | inline in `SKILL.md` (near §ReleaseInvariants / §SelfAudit) | MINOR | `audit-gate-roster.mjs` after |
462
- | "new CLI helper script" | `scripts/<name>.mjs` + cross-link from §FileMap | MINOR | `audit-gate-roster.mjs` |
463
- | "cycle retro / arc story / vN.M.X-specific lesson" | `.brain/audit-history/` + `docs/journal/` (NOT skill) | n/a | journal-date hook |
464
- | "absorb sibling-skill knowledge" | route to peer skill OR defend inclusion | varies | peer review |
465
-
466
- ---
467
-
468
- **Maintenance:** when new landing-target patterns emerge that don't fit the branches above, augment this file's decision tree + worked examples in the same arc as the landing.
@@ -1,196 +0,0 @@
1
- #!/usr/bin/env node
2
- // audit-gate-roster.mjs — §SelfAudit Axis 9 enforcement.
3
- //
4
- // Compares the `check:*` / `verify:*` / `smoke:*` / `test:*` scripts
5
- // declared in the target repo's `package.json` against the gate roster
6
- // documented in this skill's `references/gates-catalog.md`. Flags drift
7
- // in either direction:
8
- // - Gates that exist in package.json but aren't documented (new
9
- // gate added without catalog update).
10
- // - Gates documented in the catalog but no longer in package.json
11
- // (gate removed without catalog cleanup).
12
- //
13
- // Usage (run from the @adia-ai-style monorepo root):
14
- // node audit-gate-roster.mjs
15
- // node audit-gate-roster.mjs --json
16
- // node audit-gate-roster.mjs --strict # exit 1 on any drift
17
- // node audit-gate-roster.mjs --repo /path/to/monorepo
18
- //
19
- // Path resolution: the gate catalog ships with the skill. It is resolved
20
- // via ${CLAUDE_PLUGIN_ROOT}/skills/adia-ui-release/references/gates-catalog.md,
21
- // with a fallback relative to this script (../references/gates-catalog.md)
22
- // for when the plugin-root env var is not set.
23
-
24
- import fs from 'node:fs';
25
- import path from 'node:path';
26
- import process from 'node:process';
27
-
28
- function parseArgs(argv) {
29
- const args = { json: false, strict: false, repo: process.cwd() };
30
- for (let i = 0; i < argv.length; i++) {
31
- if (argv[i] === '--json') args.json = true;
32
- else if (argv[i] === '--strict') args.strict = true;
33
- else if (argv[i] === '--repo') args.repo = argv[++i];
34
- else if (argv[i] === '-h' || argv[i] === '--help') {
35
- console.log('Usage: node audit-gate-roster.mjs [--json] [--strict] [--repo <monorepo-root>]');
36
- process.exit(0);
37
- }
38
- }
39
- return args;
40
- }
41
-
42
- // The gate catalog is skill-owned (ships in references/). Resolve it via the
43
- // plugin root, falling back to a path relative to this script.
44
- function resolveCatalog() {
45
- const pluginRoot = process.env.CLAUDE_PLUGIN_ROOT;
46
- if (pluginRoot) {
47
- const p = path.join(pluginRoot, 'skills/adia-ui-release/references/gates-catalog.md');
48
- if (fs.existsSync(p)) return p;
49
- }
50
- const here = path.dirname(new URL(import.meta.url).pathname);
51
- return path.join(here, '..', 'references', 'gates-catalog.md');
52
- }
53
-
54
- // The catalog documents the gates the RELEASE FLOW runs — a curated set, NOT
55
- // every quality script in package.json (which has many check:/verify:/smoke:/
56
- // audit:/test: scripts, most of them component-authoring audits). Two universes:
57
- //
58
- // - releaseGates (drives the UNDOCUMENTED check): the gates composed into the
59
- // `npm run check` pre-flight aggregate PLUS the roster gates run directly in
60
- // a cut (ROSTER_EXTRAS). A release-flow gate missing from the catalog is real
61
- // drift worth flagging.
62
- // - allScripts (drives the OBSOLETE check): every package.json script name. A
63
- // documented gate that no longer exists ANYWHERE has been removed/renamed —
64
- // real drift.
65
- //
66
- // This intentionally does NOT flag component-authoring `audit:*` scripts or
67
- // `test:*` runner scripts as "undocumented" — they are not release-flow gates
68
- // (audit:* are an authoring-side §SelfAudit domain, invoked indirectly via
69
- // `check:dogfood-audits`).
70
- const PREFLIGHT_AGGREGATE = 'check';
71
- const ROSTER_EXTRAS = [
72
- 'check:lockstep', 'verify:traits', 'smoke:engines', 'smoke:register-engine',
73
- 'test:a2ui', 'test:unit', 'dogfood:status',
74
- ];
75
-
76
- function loadScripts(repo) {
77
- const pkgJson = path.join(repo, 'package.json');
78
- if (!fs.existsSync(pkgJson)) {
79
- console.error(`error: ${pkgJson} not found (run from the monorepo root, or pass --repo)`);
80
- process.exit(2);
81
- }
82
- return JSON.parse(fs.readFileSync(pkgJson, 'utf8')).scripts || {};
83
- }
84
-
85
- // Gates the release flow runs: every `npm run <gate>` composed into the
86
- // `npm run check` pre-flight aggregate, plus the roster gates run directly.
87
- function loadReleaseGates(scripts) {
88
- const gates = new Set();
89
- const agg = scripts[PREFLIGHT_AGGREGATE] || '';
90
- const re = /\brun ([a-z][\w-]*(?::[\w-]+)+)/g;
91
- let m;
92
- while ((m = re.exec(agg)) !== null) gates.add(m[1]);
93
- for (const g of ROSTER_EXTRAS) if (scripts[g]) gates.add(g);
94
- return [...gates].sort();
95
- }
96
-
97
- function loadDocumentedGates(catalog) {
98
- if (!fs.existsSync(catalog)) {
99
- console.error(`error: ${catalog} not found`);
100
- process.exit(2);
101
- }
102
- const txt = fs.readFileSync(catalog, 'utf8');
103
- // Match ONLY heading-form gate documentation:
104
- // ### `npm run <gate-name>`
105
- // NOT inline references to `npm run X` (which are typically
106
- // recovery commands cited in another gate's body).
107
- const matches = new Set();
108
- // Match `### `npm run X`` (Category 1-9 row form) OR
109
- // `#### `npm run X`` (Category 10 stub form).
110
- const re = /^#{3,4} `npm run ([a-z][\w-]*(?::[\w-]+)+)`(.*)$/gm;
111
- let m;
112
- while ((m = re.exec(txt)) !== null) {
113
- // Skip explicitly forward-looking entries — a documented gate marked
114
- // "(NOT YET SHIPPED — recommended)" is an intentional recommendation, not
115
- // obsolete drift; it lives in the catalog before its script exists.
116
- if (/NOT YET SHIPPED|recommended/i.test(m[2])) continue;
117
- matches.add(m[1]);
118
- }
119
- return [...matches].sort();
120
- }
121
-
122
- // Suffix variants that count as documented if the base gate is documented.
123
- // Per the §Suffix variant convention in references/gates-catalog.md.
124
- const VARIANT_SUFFIXES = ['strict', 'fix', 'json', 'quiet', 'baseline', 'thinking', 'pro'];
125
-
126
- function isCovered(gate, documentedSet) {
127
- if (documentedSet.has(gate)) return true;
128
- // Strip a single trailing variant suffix and check the base.
129
- const lastColon = gate.lastIndexOf(':');
130
- if (lastColon > 0) {
131
- const suffix = gate.slice(lastColon + 1);
132
- const base = gate.slice(0, lastColon);
133
- if (VARIANT_SUFFIXES.includes(suffix) && documentedSet.has(base)) {
134
- return true;
135
- }
136
- }
137
- return false;
138
- }
139
-
140
- function diff(releaseGates, allScripts, documented) {
141
- const allSet = new Set(allScripts);
142
- const documentedSet = new Set(documented);
143
- return {
144
- // Release-flow gate not in the catalog → document it.
145
- undocumented: releaseGates.filter((g) => !isCovered(g, documentedSet)),
146
- // Documented gate whose script no longer exists anywhere → remove the row.
147
- obsolete: documented.filter((g) => !allSet.has(g)),
148
- both: releaseGates.filter((g) => isCovered(g, documentedSet)),
149
- };
150
- }
151
-
152
- function main() {
153
- const args = parseArgs(process.argv.slice(2));
154
- const catalog = resolveCatalog();
155
- const scripts = loadScripts(args.repo);
156
- const releaseGates = loadReleaseGates(scripts);
157
- const allScripts = Object.keys(scripts);
158
- const documented = loadDocumentedGates(catalog);
159
- const d = diff(releaseGates, allScripts, documented);
160
-
161
- if (args.json) {
162
- console.log(JSON.stringify({
163
- releaseGates: releaseGates.length,
164
- documented: documented.length,
165
- both: d.both.length,
166
- undocumented: d.undocumented,
167
- obsolete: d.obsolete,
168
- }, null, 2));
169
- } else {
170
- console.log(`[audit-gate-roster] adia-ui-release §SelfAudit Axis 9`);
171
- console.log(` release-flow gates (check + roster): ${releaseGates.length}`);
172
- console.log(` documented in gates-catalog.md: ${documented.length}`);
173
- console.log(` both: ${d.both.length}`);
174
- console.log();
175
- if (d.undocumented.length === 0 && d.obsolete.length === 0) {
176
- console.log(' Clean — gate roster in sync.');
177
- } else {
178
- if (d.undocumented.length > 0) {
179
- console.log(` Undocumented gates (${d.undocumented.length}) — exist in package.json but NOT in catalog:`);
180
- for (const g of d.undocumented) console.log(` ${g}`);
181
- console.log(` -> add a row in references/gates-catalog.md describing this gate.`);
182
- }
183
- if (d.obsolete.length > 0) {
184
- console.log(` Obsolete catalog entries (${d.obsolete.length}) — in catalog but NO LONGER in package.json:`);
185
- for (const g of d.obsolete) console.log(` ${g}`);
186
- console.log(` -> remove the rows from references/gates-catalog.md.`);
187
- }
188
- }
189
- }
190
-
191
- if (args.strict && (d.undocumented.length > 0 || d.obsolete.length > 0)) {
192
- process.exit(1);
193
- }
194
- }
195
-
196
- main();