@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.
- package/.claude-plugin/plugin.json +3 -6
- package/CHANGELOG.md +27 -34
- package/README.md +35 -40
- package/agents/a2ui-engineer.md +22 -53
- package/agents/component-author.md +29 -0
- package/agents/framework-verifier.md +26 -0
- package/agents/release-engineer.md +21 -81
- package/agents/routing-corpus.json +293 -64
- package/bin/demo-postwrite-pattern-gate +94 -0
- package/bin/forge-lint +17 -2
- package/bin/sidecar-prewrite-guard +104 -0
- package/commands/deploy.md +9 -0
- package/commands/dogfood.md +10 -0
- package/commands/gen-review.md +9 -0
- package/commands/release.md +10 -0
- package/hooks/hooks.json +15 -0
- package/package.json +3 -6
- package/references/contracts/a2ui-mcp-surface.md +35 -0
- package/references/contracts/migration-guide-format.md +34 -0
- package/references/shared/content-trust.md +19 -74
- package/skills/adia-a2ui/SKILL.md +99 -0
- package/skills/{adia-ui-a2ui → adia-a2ui}/evals/routing-corpus.json +10 -10
- package/skills/adia-a2ui/references/anti-patterns.md +27 -0
- package/skills/adia-a2ui/references/chunk-authoring.md +71 -0
- package/skills/adia-a2ui/references/corpus-discipline.md +68 -0
- package/skills/adia-a2ui/references/eval-diagnostics.md +86 -0
- package/skills/adia-a2ui/references/format-extension-decisions.md +66 -0
- package/skills/adia-a2ui/references/leverage-rules.md +52 -0
- package/skills/adia-a2ui/references/mcp-pipeline-ops.md +83 -0
- package/skills/adia-a2ui/references/mcp-tool-reference.md +59 -0
- package/skills/adia-a2ui/references/pipeline-overview.md +115 -0
- package/skills/adia-a2ui/references/semantic-fail-lifting.md +74 -0
- package/skills/adia-a2ui/references/strategy-engines.md +109 -0
- package/skills/adia-a2ui/references/zettel-calibration.md +104 -0
- package/skills/adia-author/SKILL.md +112 -0
- package/skills/adia-author/evals/routing-corpus.json +222 -0
- package/skills/{adia-ui-authoring → adia-author}/references/anti-patterns.md +33 -4
- package/skills/{adia-ui-authoring → adia-author}/references/authoring-cycle.md +9 -11
- package/skills/adia-author/references/canonical-pattern-index.md +243 -0
- package/skills/{adia-ui-authoring → adia-author}/references/code-style.md +19 -21
- package/skills/adia-author/references/common-gotchas.md +129 -0
- package/skills/adia-author/references/composite-demo-protocol.md +271 -0
- package/skills/{adia-ui-authoring → adia-author}/references/css-patterns.md +19 -6
- package/skills/{adia-ui-authoring → adia-author}/references/lifecycle-patterns.md +1 -0
- package/skills/{adia-ui-authoring → adia-author}/references/llm-bridge.md +3 -5
- package/skills/{adia-ui-authoring → adia-author}/references/module-promotion.md +20 -38
- package/skills/{adia-ui-authoring → adia-author}/references/primitive-audit.md +2 -4
- package/skills/{adia-ui-authoring → adia-author}/references/shell-patterns.md +12 -18
- package/skills/{adia-ui-authoring → adia-author}/references/token-contract.md +5 -7
- package/skills/{adia-ui-authoring → adia-author}/references/worked-example.md +3 -3
- package/skills/{adia-ui-authoring → adia-author}/references/yaml-contract.md +3 -3
- package/skills/{adia-ui-authoring → adia-author}/scripts/build-canonical-pattern-index.mjs +3 -3
- package/skills/adia-deploy/SKILL.md +128 -0
- package/skills/{adia-ui-ops → adia-deploy}/references/deploy-playbooks.md +47 -30
- package/skills/adia-dogfood/SKILL.md +124 -0
- package/skills/adia-dogfood/references/admin-shell-anatomy.md +77 -0
- package/skills/adia-dogfood/references/app-shell-pitfalls.md +66 -0
- package/skills/adia-dogfood/references/card-anatomy-sweep.md +66 -0
- package/skills/adia-dogfood/references/html-attr-sweep.md +63 -0
- package/skills/adia-dogfood/references/native-leak-annotations.md +73 -0
- package/skills/adia-dogfood/references/visual-probe-triage.md +80 -0
- package/skills/{adia-ui-dogfood → adia-dogfood}/scripts/analyze.mjs +30 -14
- package/skills/adia-gen-review/SKILL.md +127 -0
- package/skills/adia-gen-review/references/corpus-html-patterns.md +279 -0
- package/skills/adia-gen-review/references/loop-protocol.md +216 -0
- package/skills/adia-gen-review/references/rubric-cosmetic.md +100 -0
- package/skills/adia-gen-review/references/rubric-decompose.md +101 -0
- package/skills/adia-gen-review/references/rubric-score.md +214 -0
- package/skills/{adia-ui-gen-review → adia-gen-review}/references/scores.schema.json +2 -2
- package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-coverage-audit.mjs +4 -4
- package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-decompose.mjs +10 -6
- package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/gen-review-status.mjs +5 -5
- package/skills/{adia-ui-gen-review → adia-gen-review}/scripts/validate-cycle-scores.mjs +5 -5
- package/skills/adia-llm-internals/SKILL.md +77 -0
- package/skills/{adia-ui-llm → adia-llm-internals}/references/adapter-contract.md +4 -2
- package/skills/{adia-ui-llm → adia-llm-internals}/references/add-a-provider.md +4 -5
- package/skills/{adia-ui-llm → adia-llm-internals}/references/bridge-facade.md +10 -3
- package/skills/{adia-ui-llm → adia-llm-internals}/references/browser-proxy-boundary.md +1 -1
- package/skills/{adia-ui-llm → adia-llm-internals}/references/model-registry.md +5 -3
- package/skills/{adia-ui-llm → adia-llm-internals}/references/streaming-sse.md +2 -2
- package/skills/adia-release/SKILL.md +72 -0
- package/skills/adia-release/references/changelog-discipline.md +119 -0
- package/skills/adia-release/references/cut-procedure.md +247 -0
- package/skills/adia-release/references/gates-catalog.md +222 -0
- package/skills/adia-release/references/independent-package-release.md +52 -0
- package/skills/adia-release/references/migration-guide-authoring.md +86 -0
- package/skills/adia-release/references/notes-authoring.md +90 -0
- package/skills/adia-release/references/recovery-paths.md +106 -0
- package/skills/{adia-ui-release → adia-release}/scripts/bump.mjs +27 -2
- package/skills/{adia-ui-release → adia-release}/scripts/dispatch-publish.mjs +4 -1
- package/skills/{adia-ui-release → adia-release}/scripts/insert-stub.mjs +1 -1
- package/skills/{adia-ui-release → adia-release}/scripts/package-paths.mjs +6 -0
- package/skills/{adia-ui-release → adia-release}/scripts/promote-unreleased.mjs +1 -1
- package/skills/{adia-ui-release → adia-release}/scripts/release-pack.mjs +13 -21
- package/skills/{adia-ui-release → adia-release}/scripts/tag-lockstep.mjs +5 -1
- package/skills/adia-site-docs/SKILL.md +68 -0
- package/skills/adia-site-docs/evals/audit-report.md +30 -0
- package/skills/adia-site-docs/evals/routing-corpus.json +176 -0
- package/skills/adia-site-docs/intent.md +72 -0
- package/agents/README.md +0 -209
- package/agents/author.md +0 -56
- package/agents/repo-steward.md +0 -56
- package/agents/spec-architect.md +0 -53
- package/agents/tech-lead.md +0 -57
- package/agents/verifier.md +0 -55
- package/bin/lib/audit-axes.mjs +0 -555
- package/bin/lib/dry-run-irreversible.mjs +0 -236
- package/bin/lib/run-skill-evals.mjs +0 -487
- package/bin/lib/teach-router.mjs +0 -250
- package/commands/adia-forge-a2ui.md +0 -10
- package/commands/adia-forge-author.md +0 -10
- package/commands/adia-forge-dogfood.md +0 -8
- package/commands/adia-forge-llm.md +0 -8
- package/commands/adia-forge-orient.md +0 -10
- package/commands/adia-forge-release.md +0 -8
- package/commands/adia-forge-review.md +0 -10
- package/references/shared/pev-rationale.md +0 -64
- package/references/shared/skill-conventions.md +0 -133
- package/skills/adia-ui-a2ui/CHANGELOG.md +0 -32
- package/skills/adia-ui-a2ui/SKILL.md +0 -243
- package/skills/adia-ui-a2ui/evals/adversarial-corpus.json +0 -75
- package/skills/adia-ui-a2ui/evals/teach-routing-cases.json +0 -100
- package/skills/adia-ui-a2ui/references/anti-patterns.md +0 -24
- package/skills/adia-ui-a2ui/references/chunk-authoring.md +0 -88
- package/skills/adia-ui-a2ui/references/corpus-discipline.md +0 -56
- package/skills/adia-ui-a2ui/references/eval-diagnostics.md +0 -127
- package/skills/adia-ui-a2ui/references/fragment-graph.md +0 -91
- package/skills/adia-ui-a2ui/references/mcp-pipeline-ops.md +0 -106
- package/skills/adia-ui-a2ui/references/mcp-tool-reference.md +0 -398
- package/skills/adia-ui-a2ui/references/pipeline-overview.md +0 -175
- package/skills/adia-ui-a2ui/references/semantic-fail-lifting.md +0 -120
- package/skills/adia-ui-a2ui/references/strategy-engines.md +0 -111
- package/skills/adia-ui-a2ui/references/teach-protocol.md +0 -220
- package/skills/adia-ui-a2ui/references/zettel-calibration.md +0 -93
- package/skills/adia-ui-a2ui/scripts/audit-a2ui-roster.mjs +0 -96
- package/skills/adia-ui-a2ui/scripts/teach-route.mjs +0 -157
- package/skills/adia-ui-a2ui/skill.json +0 -38
- package/skills/adia-ui-authoring/CHANGELOG.md +0 -32
- package/skills/adia-ui-authoring/SKILL.md +0 -256
- package/skills/adia-ui-authoring/assets/case-studies/admin-shell-decomposition.md +0 -101
- package/skills/adia-ui-authoring/assets/case-studies/maxtokens-32768-discovery.md +0 -109
- package/skills/adia-ui-authoring/assets/case-studies/theme-panel-promotion.md +0 -113
- package/skills/adia-ui-authoring/evals/adversarial-design-plan-gates.json +0 -138
- package/skills/adia-ui-authoring/evals/routing-corpus.json +0 -245
- package/skills/adia-ui-authoring/references/canonical-pattern-index.md +0 -179
- package/skills/adia-ui-authoring/references/common-gotchas.md +0 -93
- package/skills/adia-ui-authoring/references/composite-demo-protocol.md +0 -1084
- package/skills/adia-ui-authoring/references/teach-protocol.md +0 -428
- package/skills/adia-ui-authoring/scripts/audit-authoring-roster.mjs +0 -148
- package/skills/adia-ui-authoring/skill.json +0 -45
- package/skills/adia-ui-dogfood/CHANGELOG.md +0 -17
- package/skills/adia-ui-dogfood/README.md +0 -62
- package/skills/adia-ui-dogfood/SKILL.md +0 -866
- package/skills/adia-ui-dogfood/skill.json +0 -40
- package/skills/adia-ui-forge/SKILL.md +0 -88
- package/skills/adia-ui-forge/evals/routing-corpus.json +0 -30
- package/skills/adia-ui-gen-review/CHANGELOG.md +0 -108
- package/skills/adia-ui-gen-review/SKILL.md +0 -266
- package/skills/adia-ui-gen-review/references/loop-protocol.md +0 -712
- package/skills/adia-ui-gen-review/references/rubric-cosmetic.md +0 -144
- package/skills/adia-ui-gen-review/references/rubric-decompose.md +0 -117
- package/skills/adia-ui-gen-review/references/rubric-score.md +0 -249
- package/skills/adia-ui-gen-review/references/teach-protocol.md +0 -214
- package/skills/adia-ui-gen-review/skill.json +0 -23
- package/skills/adia-ui-llm/CHANGELOG.md +0 -25
- package/skills/adia-ui-llm/SKILL.md +0 -165
- package/skills/adia-ui-llm/evals/adversarial-corpus.json +0 -75
- package/skills/adia-ui-llm/evals/routing-corpus.json +0 -30
- package/skills/adia-ui-llm/evals/teach-routing-cases.json +0 -73
- package/skills/adia-ui-llm/references/teach-protocol.md +0 -78
- package/skills/adia-ui-llm/scripts/audit-llm-roster.mjs +0 -93
- package/skills/adia-ui-llm/scripts/teach-route.mjs +0 -119
- package/skills/adia-ui-llm/skill.json +0 -33
- package/skills/adia-ui-ops/CHANGELOG.md +0 -291
- package/skills/adia-ui-ops/SKILL.md +0 -401
- package/skills/adia-ui-ops/references/INDEX.md +0 -158
- package/skills/adia-ui-ops/references/audit-cadence.md +0 -263
- package/skills/adia-ui-ops/references/audit-patterns/archive-link-sweep.md +0 -96
- package/skills/adia-ui-ops/references/audit-patterns/audit-history-ledger.md +0 -162
- package/skills/adia-ui-ops/references/audit-patterns/browser-bundle-node-imports.md +0 -154
- package/skills/adia-ui-ops/references/audit-patterns/changelog-unreleased-bloat.md +0 -75
- package/skills/adia-ui-ops/references/audit-patterns/coverage-gaps.md +0 -187
- package/skills/adia-ui-ops/references/audit-patterns/entry-file-coverage.md +0 -122
- package/skills/adia-ui-ops/references/audit-patterns/format-hygiene.md +0 -217
- package/skills/adia-ui-ops/references/audit-patterns/lockstep-versioning.md +0 -113
- package/skills/adia-ui-ops/references/audit-patterns/memory-fragmentation.md +0 -180
- package/skills/adia-ui-ops/references/audit-patterns/orphan-detection.md +0 -202
- package/skills/adia-ui-ops/references/audit-patterns/pointer-validation.md +0 -180
- package/skills/adia-ui-ops/references/audit-patterns/redundancy-detection.md +0 -210
- package/skills/adia-ui-ops/references/audit-patterns/spec-dating-sweep.md +0 -91
- package/skills/adia-ui-ops/references/audit-patterns/stale-content.md +0 -182
- package/skills/adia-ui-ops/references/audit-patterns/staleness-tooling.md +0 -156
- package/skills/adia-ui-ops/references/audit-patterns/token-waste-detection.md +0 -196
- package/skills/adia-ui-ops/references/doc-types/adr-pattern.md +0 -210
- package/skills/adia-ui-ops/references/doc-types/architecture-md.md +0 -190
- package/skills/adia-ui-ops/references/doc-types/changelog.md +0 -183
- package/skills/adia-ui-ops/references/doc-types/decisions-log.md +0 -146
- package/skills/adia-ui-ops/references/doc-types/plan-roadmap.md +0 -182
- package/skills/adia-ui-ops/references/doc-types/postmortem-pattern.md +0 -206
- package/skills/adia-ui-ops/references/genres/prose-and-writing.md +0 -149
- package/skills/adia-ui-ops/references/guidance/context-budget.md +0 -137
- package/skills/adia-ui-ops/references/guidance/llm-doc-writing.md +0 -116
- package/skills/adia-ui-ops/references/guidance/reliability-dial.md +0 -186
- package/skills/adia-ui-ops/references/recipes/adr-introduction.md +0 -211
- package/skills/adia-ui-ops/references/recipes/audit-existing-repo.md +0 -234
- package/skills/adia-ui-ops/references/recipes/cold-start-harvest.md +0 -263
- package/skills/adia-ui-ops/references/recipes/concurrent-learnings-merge.md +0 -158
- package/skills/adia-ui-ops/references/recipes/continuous-learning-loop.md +0 -169
- package/skills/adia-ui-ops/references/recipes/external-reference-verification.md +0 -158
- package/skills/adia-ui-ops/references/recipes/findings-index-readout.md +0 -126
- package/skills/adia-ui-ops/references/recipes/greenfield-setup.md +0 -252
- package/skills/adia-ui-ops/references/recipes/harvest-repo-brain.md +0 -169
- package/skills/adia-ui-ops/references/recipes/import-repo-brain-harvest.md +0 -153
- package/skills/adia-ui-ops/references/recipes/memory-organization.md +0 -182
- package/skills/adia-ui-ops/references/recipes/recommend-then-validate.md +0 -199
- package/skills/adia-ui-ops/references/recipes/self-healing-hooks.md +0 -366
- package/skills/adia-ui-ops/references/recipes/skill-stewardship-loop.md +0 -113
- package/skills/adia-ui-ops/references/standards/agents-md-spec.md +0 -138
- package/skills/adia-ui-ops/references/standards/claude-md-convention.md +0 -123
- package/skills/adia-ui-ops/references/standards/cross-tool-matrix.md +0 -85
- package/skills/adia-ui-ops/references/standards/readme-conventions.md +0 -232
- package/skills/adia-ui-ops/references/teach-protocol.md +0 -215
- package/skills/adia-ui-ops/scripts/audit-ops-roster.mjs +0 -104
- package/skills/adia-ui-ops/skill.json +0 -65
- package/skills/adia-ui-release/CHANGELOG.md +0 -66
- package/skills/adia-ui-release/SKILL.md +0 -323
- package/skills/adia-ui-release/assets/case-studies/2026-05-20-batch-push-v0.6.14-v0.6.15.md +0 -144
- package/skills/adia-ui-release/assets/case-studies/2026-05-20-corpus-drift-remediation-v0.6.15.md +0 -155
- package/skills/adia-ui-release/assets/case-studies/2026-05-20-version-skip-correction-v0.6.12.md +0 -114
- package/skills/adia-ui-release/assets/case-studies/2026-05-21-author-from-scratch-v0.6.18.md +0 -139
- package/skills/adia-ui-release/assets/case-studies/2026-05-21-feedback37-retraction-v0.6.21.md +0 -124
- package/skills/adia-ui-release/assets/case-studies/2026-05-21-fn1-enrichment-pass-v0.6.19.md +0 -125
- package/skills/adia-ui-release/assets/case-studies/2026-05-21-stale-test-detection-v0.6.20.md +0 -142
- package/skills/adia-ui-release/assets/case-studies/2026-05-23-freshness-gate-recovery-v0.6.32.md +0 -97
- package/skills/adia-ui-release/assets/case-studies/2026-05-26-catalog-drift-recurring-v0.6.40.md +0 -147
- package/skills/adia-ui-release/assets/templates/stub-changelog.template.md +0 -22
- package/skills/adia-ui-release/evals/evals.json +0 -164
- package/skills/adia-ui-release/references/changelog-discipline.md +0 -250
- package/skills/adia-ui-release/references/cycle-happy-path.md +0 -520
- package/skills/adia-ui-release/references/exe-deploy.md +0 -149
- package/skills/adia-ui-release/references/gates-catalog.md +0 -778
- package/skills/adia-ui-release/references/independent-package-release.md +0 -129
- package/skills/adia-ui-release/references/ledger-discipline.md +0 -232
- package/skills/adia-ui-release/references/migration-guide-authoring.md +0 -174
- package/skills/adia-ui-release/references/multi-agent-baseline.md +0 -207
- package/skills/adia-ui-release/references/notes-authoring.md +0 -212
- package/skills/adia-ui-release/references/recovery-paths.md +0 -262
- package/skills/adia-ui-release/references/rollup-notes.md +0 -208
- package/skills/adia-ui-release/references/teach-protocol.md +0 -468
- package/skills/adia-ui-release/scripts/audit-gate-roster.mjs +0 -196
- package/skills/adia-ui-release/scripts/make-ledger.mjs +0 -200
- package/skills/adia-ui-release/skill.json +0 -77
- package/skills/dogfood-sweep/CHANGELOG.md +0 -37
- package/skills/dogfood-sweep/README.md +0 -105
- package/skills/dogfood-sweep/SKILL.md +0 -1000
- package/skills/dogfood-sweep/analyze.mjs +0 -600
- package/skills/dogfood-sweep/skill.json +0 -31
- /package/skills/{adia-ui-authoring → adia-author}/references/api-contract.md +0 -0
- /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();
|