@adia-ai/adia-ui-forge 0.1.2 → 0.1.3
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 +2 -2
- package/CHANGELOG.md +8 -0
- package/agents/README.md +209 -0
- package/agents/a2ui-engineer.md +57 -0
- package/agents/author.md +56 -0
- package/agents/release-engineer.md +85 -0
- package/agents/repo-steward.md +56 -0
- package/agents/routing-corpus.json +89 -0
- package/agents/spec-architect.md +53 -0
- package/agents/tech-lead.md +57 -0
- package/agents/verifier.md +55 -0
- package/package.json +3 -2
- package/skills/adia-ui-authoring/SKILL.md +2 -2
- package/skills/adia-ui-authoring/assets/case-studies/theme-panel-promotion.md +1 -1
- package/skills/adia-ui-authoring/references/module-promotion.md +2 -2
- package/skills/adia-ui-gen-review/skill.json +1 -0
- package/skills/adia-ui-ops/CHANGELOG.md +291 -0
- package/skills/adia-ui-ops/SKILL.md +401 -0
- package/skills/adia-ui-ops/references/INDEX.md +158 -0
- package/skills/adia-ui-ops/references/audit-cadence.md +263 -0
- package/skills/adia-ui-ops/references/audit-patterns/archive-link-sweep.md +96 -0
- package/skills/adia-ui-ops/references/audit-patterns/audit-history-ledger.md +162 -0
- package/skills/adia-ui-ops/references/audit-patterns/browser-bundle-node-imports.md +154 -0
- package/skills/adia-ui-ops/references/audit-patterns/changelog-unreleased-bloat.md +75 -0
- package/skills/adia-ui-ops/references/audit-patterns/coverage-gaps.md +187 -0
- package/skills/adia-ui-ops/references/audit-patterns/entry-file-coverage.md +122 -0
- package/skills/adia-ui-ops/references/audit-patterns/format-hygiene.md +217 -0
- package/skills/adia-ui-ops/references/audit-patterns/lockstep-versioning.md +113 -0
- package/skills/adia-ui-ops/references/audit-patterns/memory-fragmentation.md +180 -0
- package/skills/adia-ui-ops/references/audit-patterns/orphan-detection.md +202 -0
- package/skills/adia-ui-ops/references/audit-patterns/pointer-validation.md +180 -0
- package/skills/adia-ui-ops/references/audit-patterns/redundancy-detection.md +210 -0
- package/skills/adia-ui-ops/references/audit-patterns/spec-dating-sweep.md +91 -0
- package/skills/adia-ui-ops/references/audit-patterns/stale-content.md +182 -0
- package/skills/adia-ui-ops/references/audit-patterns/staleness-tooling.md +156 -0
- package/skills/adia-ui-ops/references/audit-patterns/token-waste-detection.md +196 -0
- package/skills/adia-ui-ops/references/deploy-playbooks.md +259 -0
- package/skills/adia-ui-ops/references/doc-types/adr-pattern.md +210 -0
- package/skills/adia-ui-ops/references/doc-types/architecture-md.md +190 -0
- package/skills/adia-ui-ops/references/doc-types/changelog.md +183 -0
- package/skills/adia-ui-ops/references/doc-types/decisions-log.md +146 -0
- package/skills/adia-ui-ops/references/doc-types/plan-roadmap.md +182 -0
- package/skills/adia-ui-ops/references/doc-types/postmortem-pattern.md +206 -0
- package/skills/adia-ui-ops/references/genres/prose-and-writing.md +149 -0
- package/skills/adia-ui-ops/references/guidance/context-budget.md +137 -0
- package/skills/adia-ui-ops/references/guidance/llm-doc-writing.md +116 -0
- package/skills/adia-ui-ops/references/guidance/reliability-dial.md +186 -0
- package/skills/adia-ui-ops/references/recipes/adr-introduction.md +211 -0
- package/skills/adia-ui-ops/references/recipes/audit-existing-repo.md +234 -0
- package/skills/adia-ui-ops/references/recipes/cold-start-harvest.md +263 -0
- package/skills/adia-ui-ops/references/recipes/concurrent-learnings-merge.md +158 -0
- package/skills/adia-ui-ops/references/recipes/continuous-learning-loop.md +169 -0
- package/skills/adia-ui-ops/references/recipes/external-reference-verification.md +158 -0
- package/skills/adia-ui-ops/references/recipes/findings-index-readout.md +126 -0
- package/skills/adia-ui-ops/references/recipes/greenfield-setup.md +252 -0
- package/skills/adia-ui-ops/references/recipes/harvest-repo-brain.md +169 -0
- package/skills/adia-ui-ops/references/recipes/import-repo-brain-harvest.md +153 -0
- package/skills/adia-ui-ops/references/recipes/memory-organization.md +182 -0
- package/skills/adia-ui-ops/references/recipes/recommend-then-validate.md +199 -0
- package/skills/adia-ui-ops/references/recipes/self-healing-hooks.md +366 -0
- package/skills/adia-ui-ops/references/recipes/skill-stewardship-loop.md +113 -0
- package/skills/adia-ui-ops/references/standards/agents-md-spec.md +138 -0
- package/skills/adia-ui-ops/references/standards/claude-md-convention.md +123 -0
- package/skills/adia-ui-ops/references/standards/cross-tool-matrix.md +85 -0
- package/skills/adia-ui-ops/references/standards/readme-conventions.md +232 -0
- package/skills/adia-ui-ops/references/teach-protocol.md +215 -0
- package/skills/adia-ui-ops/scripts/audit-ops-roster.mjs +104 -0
- package/skills/adia-ui-ops/skill.json +65 -0
- package/skills/adia-ui-release/CHANGELOG.md +43 -0
- package/skills/adia-ui-release/SKILL.md +34 -6
- package/skills/adia-ui-release/references/independent-package-release.md +129 -0
- package/skills/adia-ui-release/references/recovery-paths.md +49 -2
- package/skills/adia-ui-release/scripts/dispatch-publish.mjs +68 -5
- package/skills/adia-ui-release/scripts/insert-stub.mjs +5 -3
- package/skills/adia-ui-release/scripts/make-ledger.mjs +22 -1
- package/skills/adia-ui-release/scripts/package-paths.mjs +44 -0
- package/skills/adia-ui-release/scripts/promote-unreleased.mjs +3 -2
- package/skills/adia-ui-release/scripts/release-pack.mjs +36 -7
- package/skills/adia-ui-release/scripts/tag-lockstep.mjs +10 -2
- package/skills/adia-ui-release/skill.json +9 -7
- package/skills/dogfood-sweep/CHANGELOG.md +37 -0
- package/skills/dogfood-sweep/README.md +105 -0
- package/skills/dogfood-sweep/SKILL.md +1000 -0
- package/skills/dogfood-sweep/analyze.mjs +600 -0
- package/skills/dogfood-sweep/skill.json +31 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Reference: Teach Protocol — Absorbing new knowledge into the adia-ui-ops skill
|
|
2
|
+
|
|
3
|
+
**Authored:** 2026-05-22 (Phase 4 of skills-rollup-roadmap; instantiation N=5 of the extensibility pattern).
|
|
4
|
+
**Why authored:** As the AdiaUI substrate accumulates new audit patterns, doc-type conventions, deploy quirks, and recipe workflows, each absorption was previously a one-off improvisation. This protocol gives every future "make sure `adia-ui-ops` knows about [pattern]" request a deterministic landing path.
|
|
5
|
+
|
|
6
|
+
**Ecosystem context:** This reference is the 5th instantiation of the extensibility pattern documented in the family's `VISION-extensibility` memo. The vision 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 verbatim where possible. The canonical N=1 instance is the `adia-ui-kit` skill's `references/teach-protocol.md`; this file is N=5.
|
|
7
|
+
|
|
8
|
+
**Used by:** the `adia-ui-ops` skill, when an agent receives one of these triggers:
|
|
9
|
+
|
|
10
|
+
- "make sure `adia-ui-ops` knows about [the new audit pattern / doc-type / deploy step]"
|
|
11
|
+
- "train `adia-ui-ops` on [the new exe.dev quirk / lockfile drift class / staleness signal]"
|
|
12
|
+
- "the skill should know about [the post-§N pattern]"
|
|
13
|
+
- "absorb this lesson into adia-ui-ops"
|
|
14
|
+
- "teach the skill about [the new doc-type convention]"
|
|
15
|
+
|
|
16
|
+
**Companion:** `references/audit-cadence.md` (the 3-phase invocation contract that every audit-class landing must satisfy), `references/deploy-playbooks.md` (when the new knowledge is exe.dev-level), and `scripts/audit-ops-roster.mjs` (run after any §Teach landing).
|
|
17
|
+
|
|
18
|
+
**Anti-companion:** `docs/journal/YYYY/MM/<date>.md` (arc-specific stories belong in the journal, not the skill — see decision tree Branch G).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## When to Use
|
|
23
|
+
|
|
24
|
+
Trigger phrases (from the §Teach section in SKILL.md):
|
|
25
|
+
|
|
26
|
+
- "make sure `adia-ui-ops` 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/lesson/feedback] into adia-ui-ops"
|
|
31
|
+
- "update the skill to reflect [the new audit pattern / the new doc-type / the new playbook step]"
|
|
32
|
+
|
|
33
|
+
The phrases are universal across all extensible skills; the **landing target** is what's specific to this skill.
|
|
34
|
+
|
|
35
|
+
## Core Principles
|
|
36
|
+
|
|
37
|
+
### 1. The skill is a CITATION layer, not a KNOWLEDGE layer
|
|
38
|
+
|
|
39
|
+
Per-pattern facts live in `references/audit-patterns/<name>.md`. Per-doc-type conventions live in `references/doc-types/<type>.md`. Per-host deploy quirks live in `references/deploy-playbooks.md`. The skill cites by path; it does NOT duplicate the rule body in SKILL.md prose.
|
|
40
|
+
|
|
41
|
+
**Rule of thumb:** if you catch yourself writing "the orphan-detection audit checks X" in SKILL.md, stop. Is that fact in `references/audit-patterns/orphan-detection.md` already? If yes, cite the path. If no, the fact should land in the reference file first, THEN SKILL.md cites it via §ColdStartTriage table.
|
|
42
|
+
|
|
43
|
+
### 2. Trigger surface is universal; landing targets are skill-specific
|
|
44
|
+
|
|
45
|
+
The activation phrases — "train X on Y", "make sure X knows about Z", "absorb this into X" — are the same regardless of which skill X is. The **landing targets** vary per this skill's references/ topology (`audit-patterns/`, `doc-types/`, `recipes/`, `guidance/`, `standards/`, `deploy-playbooks.md`).
|
|
46
|
+
|
|
47
|
+
### 3. The negative case (Branch G) is load-bearing
|
|
48
|
+
|
|
49
|
+
Arc-specific stories ("how I diagnosed the 2026-05-19 ui-kit.exe.xyz outage") belong in `docs/journal/`, not in the skill. The skill is procedural knowledge that will be true tomorrow; arc stories are history that's already finished. Skip the §Teach landing entirely when the lesson is one-off.
|
|
50
|
+
|
|
51
|
+
### 4. Preserve subdirectory taxonomy
|
|
52
|
+
|
|
53
|
+
ops-repo's references/ taxonomy (`audit-patterns/` vs `doc-types/` vs `recipes/` vs `guidance/` vs `standards/`) was preserved verbatim during the v1.0.0 absorption because it's well-organized. New knowledge should fit one of these buckets; only invent a new top-level subdirectory when no existing one fits and you have ≥3 sibling files to seed it.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## The 7-branch decision tree
|
|
58
|
+
|
|
59
|
+
Match the incoming knowledge to one of the seven branches. Most lands in `references/`; one lands inline in SKILL.md; one lands OUT of the skill entirely.
|
|
60
|
+
|
|
61
|
+
### Branch A — New audit pattern → `references/audit-patterns/<name>.md`
|
|
62
|
+
|
|
63
|
+
**When:** A new class of repo-state drift, staleness signal, or hygiene check that isn't covered by the 16 existing patterns.
|
|
64
|
+
|
|
65
|
+
**Examples:**
|
|
66
|
+
- "Audits should catch yaml description-length drift" → `audit-patterns/yaml-description-length.md`
|
|
67
|
+
- "We need a check for components missing `.examples.html`" → `audit-patterns/missing-examples-page.md`
|
|
68
|
+
|
|
69
|
+
**Landing procedure:**
|
|
70
|
+
1. Author the pattern file with sections: Trigger / What it catches / Detection script / Apply-mode fix / Trip-wire CI gate / Cross-references.
|
|
71
|
+
2. Add a row to `references/audit-cadence.md` §Route table (with the Promise number(s) it satisfies).
|
|
72
|
+
3. Add a row to `references/audit-cadence.md` §Audit categories table.
|
|
73
|
+
4. If the pattern needs a script, add it to `scripts/` of this skill or `scripts/skills/` (ecosystem-wide).
|
|
74
|
+
5. Add a trigger keyword to SKILL.md frontmatter `trigger:` cluster.
|
|
75
|
+
|
|
76
|
+
### Branch B — New doc-type convention → `references/doc-types/<type>.md`
|
|
77
|
+
|
|
78
|
+
**When:** The substrate adopts a new canonical doc shape (ADR template variant, postmortem section, new runbook format, etc.).
|
|
79
|
+
|
|
80
|
+
**Examples:**
|
|
81
|
+
- "ADRs now require a `Trade-offs Considered:` section" → patch `doc-types/adr-pattern.md`
|
|
82
|
+
- "We're adopting `INVESTIGATION.md` for cross-incident analysis" → new `doc-types/investigation-md.md`
|
|
83
|
+
|
|
84
|
+
**Landing procedure:**
|
|
85
|
+
1. Author or patch the doc-type file with sections: Purpose / Required fields / Optional fields / Example skeleton / Tooling support / Cross-references.
|
|
86
|
+
2. If new doc-type, add a row to `references/audit-cadence.md` §Route table.
|
|
87
|
+
3. If the convention is codified in an ADR, link the ADR.
|
|
88
|
+
|
|
89
|
+
### Branch C — New recipe / multi-step workflow → `references/recipes/<name>.md`
|
|
90
|
+
|
|
91
|
+
**When:** A reproducible multi-step procedure (provisioning, cold-start harvest, two-agent fix pattern, etc.) that isn't a single audit or deploy step.
|
|
92
|
+
|
|
93
|
+
**Examples:**
|
|
94
|
+
- "Document the 'migrate `docs/` to `.brain/`' procedure" → new `recipes/migrate-to-brain.md`
|
|
95
|
+
- "The 'recommend-then-validate' pattern needs a written-down version" → already in `recipes/recommend-then-validate.md`
|
|
96
|
+
|
|
97
|
+
**Landing procedure:**
|
|
98
|
+
1. Author the recipe with sections: When to use / Prerequisites / Step-by-step (numbered with exact commands) / Verification / Common pitfalls / Cross-references.
|
|
99
|
+
2. Add a row to `references/audit-cadence.md` §Route table.
|
|
100
|
+
|
|
101
|
+
### Branch D — New deploy playbook step → patch `references/deploy-playbooks.md`
|
|
102
|
+
|
|
103
|
+
**When:** exe.dev platform quirk, new VM state to handle, new service archetype, secret-rotation variant.
|
|
104
|
+
|
|
105
|
+
**Examples:**
|
|
106
|
+
- "Caddy v3 changed the reload behavior" → patch `deploy-playbooks.md` §Playbook-deploy + §Common failures
|
|
107
|
+
- "New service `chat-ui.exe.xyz` came online" → patch §Current deployments
|
|
108
|
+
|
|
109
|
+
**Landing procedure:**
|
|
110
|
+
1. Patch the relevant §Playbook section (don't author a new file unless the procedure is entirely new).
|
|
111
|
+
2. Update §Current deployments if a new host is on the matrix.
|
|
112
|
+
3. Update §Common failures if a new symptom→cause→fix triple is known.
|
|
113
|
+
|
|
114
|
+
### Branch E — New invariant / posture → inline SKILL.md §Posture or §FirstPrinciples
|
|
115
|
+
|
|
116
|
+
**When:** A cross-cutting rule that affects how the skill is invoked (not a per-pattern fact).
|
|
117
|
+
|
|
118
|
+
**Examples:**
|
|
119
|
+
- "Apply-mode is the default; analysis-only is opt-in" → already inline as §Posture bullet
|
|
120
|
+
- "AGENTS.md ceiling is now 250 lines" → patch SKILL.md §FirstPrinciples (and `audit-cadence.md` §Verification)
|
|
121
|
+
|
|
122
|
+
**Landing procedure:**
|
|
123
|
+
1. Inline patch to SKILL.md §Posture (small) or §FirstPrinciples (large).
|
|
124
|
+
2. Add the corresponding trip-wire to `audit-cadence.md` §Verification.
|
|
125
|
+
|
|
126
|
+
### Branch F — New guidance / cross-cut → `references/guidance/<name>.md`
|
|
127
|
+
|
|
128
|
+
**When:** Doc-writing advice, context-budget heuristics, reliability-dial tuning, prose-vs-code authorial guidance.
|
|
129
|
+
|
|
130
|
+
**Examples:**
|
|
131
|
+
- "How to write good ADR titles" → patch `guidance/llm-doc-writing.md`
|
|
132
|
+
- "Reliability dial settings for a SOC2-bound repo" → patch `guidance/reliability-dial.md`
|
|
133
|
+
|
|
134
|
+
**Landing procedure:**
|
|
135
|
+
1. Patch the relevant guidance file.
|
|
136
|
+
2. Cross-reference from `audit-cadence.md` §Route if it's user-facing advice.
|
|
137
|
+
|
|
138
|
+
### Branch G (NEGATIVE) — Arc-specific story → `docs/journal/YYYY/MM/<date>.md`
|
|
139
|
+
|
|
140
|
+
**When:** A one-off audit-arc story, a specific incident postmortem, "how I fixed the ui-kit.exe.xyz outage on 2026-05-19" — anything tied to a specific moment in time.
|
|
141
|
+
|
|
142
|
+
**Examples:**
|
|
143
|
+
- "Yesterday's audit caught 47 broken links" → journal §N, not skill
|
|
144
|
+
- "How we recovered from the §76 git-add-A absorption trap" → journal + Hermes skill, not adia-ui-ops
|
|
145
|
+
|
|
146
|
+
**Landing procedure:**
|
|
147
|
+
1. Write the journal §N entry. Done — do NOT modify the skill.
|
|
148
|
+
2. If the arc surfaces a *durable* pattern, follow up with a Branch A landing AFTER the journal entry.
|
|
149
|
+
|
|
150
|
+
**Why this matters:** the skill is what's true tomorrow. Arc stories age out; patterns persist. Conflating them bloats the skill with stale prose.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## The 5-step landing procedure (universal)
|
|
155
|
+
|
|
156
|
+
Regardless of which branch matches, follow these 5 steps:
|
|
157
|
+
|
|
158
|
+
1. **Classify the branch** — pick A-G from the tree above. If two could fit, pick the more specific (Branch A over Branch E for an audit-specific thing).
|
|
159
|
+
2. **Author the content** — write the reference file or inline patch. Use existing siblings as templates for shape.
|
|
160
|
+
3. **Wire the citations** — add the row to `audit-cadence.md` §Route + §Audit categories (if A); add trigger keyword to SKILL.md frontmatter; cross-link from sibling references where relevant.
|
|
161
|
+
4. **Run the gates** — `node .agents/skills/adia-ui-ops/scripts/audit-ops-roster.mjs` must pass 4 axes; `node scripts/skills/audit-skill-hygiene.mjs` 0 findings; `node scripts/check-links.mjs` on staged files clean.
|
|
162
|
+
5. **Bump version + CHANGELOG** — PATCH for content additions; MINOR for new branches or new top-level subdirectories; document the landing in CHANGELOG.md with branch letter.
|
|
163
|
+
|
|
164
|
+
## 7 anti-patterns (the negative space)
|
|
165
|
+
|
|
166
|
+
Things to NOT do during §Teach landings:
|
|
167
|
+
|
|
168
|
+
1. **Don't duplicate audit-pattern body into SKILL.md.** The skill cites by path; the body lives in `audit-patterns/<name>.md`. Inline prose in SKILL.md bloats cold-start and creates two-places-to-update drift.
|
|
169
|
+
2. **Don't author a "miscellaneous patterns" reference file.** If a pattern doesn't fit `audit-patterns/`, `doc-types/`, `recipes/`, `guidance/`, or `standards/`, the classification is wrong — re-read the tree.
|
|
170
|
+
3. **Don't add to `audit-cadence.md` §Route without a destination file.** Every row must point at a real file. Future-promise rows ("coming soon") are zombie entries.
|
|
171
|
+
4. **Don't author new top-level subdirectories under references/ for single-file additions.** Six top-level dirs are enough; seed a new one only when you have ≥3 sibling files.
|
|
172
|
+
5. **Don't conflate ops with release.** Cutting versions, tagging, npm publish → `adia-ui-release`. Deploying built artifacts to VMs → `adia-ui-ops` mode 1. The hand-off boundary is the build artifact.
|
|
173
|
+
6. **Don't conflate ops with authoring.** Audit work is curatorial (find drift, propose fixes); authoring work is generative (write new ADRs, new RFCs). When in doubt, separate the cycle.
|
|
174
|
+
7. **Don't skip the §Teach trigger keyword in frontmatter.** New landing branches need the trigger keyword wired so future activations work.
|
|
175
|
+
|
|
176
|
+
## Worked examples (calibration)
|
|
177
|
+
|
|
178
|
+
### Example 1 — "Make sure adia-ui-ops knows about the EXE deploy CI gate"
|
|
179
|
+
|
|
180
|
+
**Branch:** D (deploy playbook step) — patch `deploy-playbooks.md` §Playbook-deploy with the new CI gate command, and patch §Common failures with the gate's failure modes. Add `EXE deploy CI gate` to SKILL.md frontmatter trigger cluster. CHANGELOG entry "Branch D landing — EXE deploy CI gate awareness".
|
|
181
|
+
|
|
182
|
+
### Example 2 — "Train adia-ui-ops on the new audit-history-ledger semantic"
|
|
183
|
+
|
|
184
|
+
**Branch:** A (audit pattern) — `audit-patterns/audit-history-ledger.md` exists already; patch it. Update `audit-cadence.md` §Route + §Audit categories rows if the semantic changed. CHANGELOG entry "Branch A landing — audit-history-ledger v2 semantic".
|
|
185
|
+
|
|
186
|
+
### Example 3 — "Absorb the recommend-then-validate two-agent pattern"
|
|
187
|
+
|
|
188
|
+
**Branch:** C (recipe) — `recipes/recommend-then-validate.md` exists already. If the pattern evolves, patch the recipe and cross-link any peer skill. CHANGELOG entry "Branch C landing — recommend-then-validate v2".
|
|
189
|
+
|
|
190
|
+
### Example 4 — "Teach the skill that ADRs now require a Trade-offs section"
|
|
191
|
+
|
|
192
|
+
**Branch:** B (doc-type) — patch `doc-types/adr-pattern.md` Required fields. If the convention is codified in an ADR (e.g., ADR-0035), link it. CHANGELOG entry "Branch B landing — adr-pattern Required-fields update".
|
|
193
|
+
|
|
194
|
+
### Example 5 — "The skill should know the chat-ui repo's AGENTS.md ceiling moved to 300 lines"
|
|
195
|
+
|
|
196
|
+
**Branch:** E (invariant) — patch SKILL.md §FirstPrinciples + `audit-cadence.md` §Verification (Token-optimized row). CHANGELOG entry "Branch E landing — AGENTS.md ceiling 200→300 for chat-ui scope".
|
|
197
|
+
|
|
198
|
+
### Example 6 — "Document the cold-start harvest workflow"
|
|
199
|
+
|
|
200
|
+
**Branch:** C (recipe) — `recipes/cold-start-harvest.md` exists already. If the workflow has new steps (e.g., now uses `audit-skill-hygiene.mjs`), patch the recipe. CHANGELOG entry "Branch C landing — cold-start-harvest v2 with audit-skill-hygiene step".
|
|
201
|
+
|
|
202
|
+
### Example 7 (NEGATIVE) — "How I recovered from the 2026-05-22 §76 git-add-A absorption trap"
|
|
203
|
+
|
|
204
|
+
**Branch:** G (negative) — `docs/journal/2026/05/2026-05-22.md` §N. Do NOT modify adia-ui-ops. The Hermes skill `multi-agent-git-staging-discipline` already captures the procedural lesson at the right home. No CHANGELOG entry on adia-ui-ops.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Cross-references
|
|
209
|
+
|
|
210
|
+
- The family's `VISION-extensibility` memo — the universal pattern this file instantiates.
|
|
211
|
+
- The `adia-ui-kit` skill's `references/teach-protocol.md` is the canonical N=1 instance.
|
|
212
|
+
- Sibling forge skills with the same §Teach binding: [`adia-ui-release`](../../adia-ui-release/references/teach-protocol.md) (N=2), [`adia-ui-authoring`](../../adia-ui-authoring/references/teach-protocol.md) (N=3), [`adia-ui-a2ui`](../../adia-ui-a2ui/references/teach-protocol.md) (N=4). This is N=5.
|
|
213
|
+
- `references/audit-cadence.md` — the 3-phase contract every audit-class landing must satisfy
|
|
214
|
+
- `references/deploy-playbooks.md` — the destination for Branch D landings
|
|
215
|
+
- `scripts/audit-ops-roster.mjs` — run after every §Teach landing
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// audit-ops-roster.mjs — §SelfAudit enforcement for adia-ui-ops.
|
|
3
|
+
// Axes 1–8 via the forge plugin's shared audit-axes.mjs (bin/lib/);
|
|
4
|
+
// Axis 9 = absorbed-skill roster currency.
|
|
5
|
+
//
|
|
6
|
+
// SoT: packages/plugins/adia-ui-forge/skills/adia-ui-ops/scripts/ (ADR-0040);
|
|
7
|
+
// the .agents/skills/adia-ui-ops path is a symlink into the plugin.
|
|
8
|
+
//
|
|
9
|
+
// Usage (from monorepo root):
|
|
10
|
+
// node "${CLAUDE_PLUGIN_ROOT}/skills/adia-ui-ops/scripts/audit-ops-roster.mjs"
|
|
11
|
+
// …--json (machine-readable)
|
|
12
|
+
// …--strict (non-zero exit on drift)
|
|
13
|
+
|
|
14
|
+
import fs from 'node:fs';
|
|
15
|
+
import path from 'node:path';
|
|
16
|
+
import process from 'node:process';
|
|
17
|
+
import {
|
|
18
|
+
runUniversalAxes,
|
|
19
|
+
formatResults,
|
|
20
|
+
} from '../../../bin/lib/audit-axes.mjs';
|
|
21
|
+
|
|
22
|
+
const REPO = process.cwd();
|
|
23
|
+
const SKILL_DIR = path.join(REPO, '.agents/skills/adia-ui-ops');
|
|
24
|
+
const SKILL_MD = path.join(SKILL_DIR, 'SKILL.md');
|
|
25
|
+
const SKILL_JSON = path.join(SKILL_DIR, 'skill.json');
|
|
26
|
+
const SKILLS_ROOT = path.join(REPO, '.agents/skills');
|
|
27
|
+
|
|
28
|
+
// [name, expected-redirect-path or null if already-gone]
|
|
29
|
+
const ABSORBED = [
|
|
30
|
+
['exe-dev-ops', '.agents/skills/exe-dev-ops/SKILL.md'],
|
|
31
|
+
['ops-repo', '.agents/skills/ops-repo/SKILL.md'],
|
|
32
|
+
['github-release', null],
|
|
33
|
+
['lockstep-release', null],
|
|
34
|
+
['stale-audit', null],
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
const CLEAN_STATUSES = ['absorbed-clean', 'absorbed-clean-deleted', 'redirect-ok'];
|
|
38
|
+
|
|
39
|
+
function parseArgs(argv) {
|
|
40
|
+
return { json: argv.includes('--json'), strict: argv.includes('--strict') };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function axis9_opsRosterCurrency() {
|
|
44
|
+
const findings = [];
|
|
45
|
+
for (const [name, redirectPath] of ABSORBED) {
|
|
46
|
+
if (redirectPath === null) {
|
|
47
|
+
const dir = path.join(SKILLS_ROOT, name);
|
|
48
|
+
if (fs.existsSync(dir)) {
|
|
49
|
+
findings.push({ type: 'unexpected-directory', message: `${name}/ exists but was claimed absorbed-and-gone`, name });
|
|
50
|
+
} else {
|
|
51
|
+
findings.push({ type: 'absorbed-clean', message: `${name}: no directory — correct`, name });
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
const full = path.join(REPO, redirectPath);
|
|
55
|
+
if (!fs.existsSync(full)) {
|
|
56
|
+
const dir = path.dirname(full);
|
|
57
|
+
findings.push({
|
|
58
|
+
type: fs.existsSync(dir) ? 'redirect-missing' : 'absorbed-clean-deleted',
|
|
59
|
+
message: fs.existsSync(dir)
|
|
60
|
+
? `${name}: expected redirect at ${redirectPath} — not found`
|
|
61
|
+
: `${name}: fully deleted post-soak`,
|
|
62
|
+
name,
|
|
63
|
+
});
|
|
64
|
+
} else {
|
|
65
|
+
const txt = fs.readFileSync(full, 'utf8');
|
|
66
|
+
findings.push(
|
|
67
|
+
/status:\s*redirect/m.test(txt)
|
|
68
|
+
? { type: 'redirect-ok', message: `${name}: redirect ok`, name }
|
|
69
|
+
: { type: 'redirect-not-tagged', message: `${name}: ${redirectPath} lacks 'status: redirect'`, name }
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const driftCount = findings.filter(f => !CLEAN_STATUSES.includes(f.type)).length;
|
|
75
|
+
return {
|
|
76
|
+
axis: 'opsRosterCurrency',
|
|
77
|
+
axis_num: 9,
|
|
78
|
+
status: driftCount > 0 ? 'drift' : 'ok',
|
|
79
|
+
findings,
|
|
80
|
+
summary: driftCount > 0 ? `${driftCount} absorbed-skill issue(s)` : 'all absorbed-skill entries clean',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function main() {
|
|
85
|
+
const args = parseArgs(process.argv.slice(2));
|
|
86
|
+
const ctx = { skillDir: SKILL_DIR, skillMd: SKILL_MD, skillJson: SKILL_JSON, repoRoot: REPO };
|
|
87
|
+
const { results: universal } = runUniversalAxes(ctx);
|
|
88
|
+
const axis9 = axis9_opsRosterCurrency();
|
|
89
|
+
const allResults = [...universal, axis9];
|
|
90
|
+
const driftCount = allResults.filter(r => r.status === 'drift').length;
|
|
91
|
+
|
|
92
|
+
if (args.json) {
|
|
93
|
+
console.log(JSON.stringify({ results: allResults, driftCount }, null, 2));
|
|
94
|
+
if (args.strict && driftCount > 0) process.exit(1);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
console.log(`[audit-ops-roster] adia-ui-ops §SelfAudit — ${driftCount} drifting axis/axes`);
|
|
99
|
+
console.log(formatResults(allResults));
|
|
100
|
+
if (driftCount === 0) console.log('\n✓ All clean.');
|
|
101
|
+
if (args.strict && driftCount > 0) process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
main();
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "adia-ui-ops",
|
|
3
|
+
"version": "1.2.4",
|
|
4
|
+
"description": "Operator skill for the AdiaUI substrate — exe.dev VM deployment + service ops AND repo memory-layer audit + curation. Use whenever the user wants to DEPLOY TO EXE.DEV / DIAGNOSE A *.exe.xyz HOST / ROTATE KEYS / PROVISION A NEW VM / AUDIT THE REPO BRAIN / SWEEP STALE CONTENT IN .brain/ / SET UP AGENTS.md / HARVEST MEMORY ENTRIES / RUN DOCS-CURRENCY AUDIT. Triggers on \"deploy to ui-kit.exe.xyz\", \"rotate SSH keys on exe.dev\", \"port 8000 unbound\", \"provision a new VM at <host>.exe.xyz\", \"set up AGENTS.md\", \"audit the .brain folder\", \"harvest a memory entry\", \"exe.dev deploy workflow\", \"memory layer needs a dedup pass\", \"run the docs-currency audit\", \"audit our docs\". Does NOT trigger for: bare \"deploy this\" without exe.dev context, cutting releases (use adia-ui-release), authoring code (use adia-ui-authoring). Absorbs exe-dev-ops + ops-repo + github-release + lockstep-release + stale-audit.",
|
|
5
|
+
"status": "stable",
|
|
6
|
+
"authors": ["kim.granlund@gmail.com"],
|
|
7
|
+
"codeowners": [],
|
|
8
|
+
"tags": ["adiaui", "ops", "infrastructure", "exe.dev", "deployment", "vm-service", "repo-brain", "memory-layer", "audit", "stale-audit", "AGENTS.md", "ADR", "postmortem", "runbook", "doc-curation", "harness-discipline"],
|
|
9
|
+
"depends_on": [],
|
|
10
|
+
"peer_skills": ["adia-ui-kit", "adia-ui-authoring", "adia-ui-release", "adia-ui-a2ui", "dogfood-sweep"],
|
|
11
|
+
"files": [
|
|
12
|
+
"SKILL.md",
|
|
13
|
+
"CHANGELOG.md",
|
|
14
|
+
"skill.json",
|
|
15
|
+
"references/INDEX.md",
|
|
16
|
+
"references/audit-cadence.md",
|
|
17
|
+
"references/deploy-playbooks.md",
|
|
18
|
+
"references/teach-protocol.md",
|
|
19
|
+
"references/audit-patterns/archive-link-sweep.md",
|
|
20
|
+
"references/audit-patterns/audit-history-ledger.md",
|
|
21
|
+
"references/audit-patterns/browser-bundle-node-imports.md",
|
|
22
|
+
"references/audit-patterns/changelog-unreleased-bloat.md",
|
|
23
|
+
"references/audit-patterns/coverage-gaps.md",
|
|
24
|
+
"references/audit-patterns/entry-file-coverage.md",
|
|
25
|
+
"references/audit-patterns/format-hygiene.md",
|
|
26
|
+
"references/audit-patterns/lockstep-versioning.md",
|
|
27
|
+
"references/audit-patterns/memory-fragmentation.md",
|
|
28
|
+
"references/audit-patterns/orphan-detection.md",
|
|
29
|
+
"references/audit-patterns/pointer-validation.md",
|
|
30
|
+
"references/audit-patterns/redundancy-detection.md",
|
|
31
|
+
"references/audit-patterns/spec-dating-sweep.md",
|
|
32
|
+
"references/audit-patterns/stale-content.md",
|
|
33
|
+
"references/audit-patterns/staleness-tooling.md",
|
|
34
|
+
"references/audit-patterns/token-waste-detection.md",
|
|
35
|
+
"references/doc-types/adr-pattern.md",
|
|
36
|
+
"references/doc-types/architecture-md.md",
|
|
37
|
+
"references/doc-types/changelog.md",
|
|
38
|
+
"references/doc-types/decisions-log.md",
|
|
39
|
+
"references/doc-types/plan-roadmap.md",
|
|
40
|
+
"references/doc-types/postmortem-pattern.md",
|
|
41
|
+
"references/genres/prose-and-writing.md",
|
|
42
|
+
"references/guidance/context-budget.md",
|
|
43
|
+
"references/guidance/llm-doc-writing.md",
|
|
44
|
+
"references/guidance/reliability-dial.md",
|
|
45
|
+
"references/recipes/adr-introduction.md",
|
|
46
|
+
"references/recipes/audit-existing-repo.md",
|
|
47
|
+
"references/recipes/cold-start-harvest.md",
|
|
48
|
+
"references/recipes/concurrent-learnings-merge.md",
|
|
49
|
+
"references/recipes/continuous-learning-loop.md",
|
|
50
|
+
"references/recipes/external-reference-verification.md",
|
|
51
|
+
"references/recipes/findings-index-readout.md",
|
|
52
|
+
"references/recipes/greenfield-setup.md",
|
|
53
|
+
"references/recipes/harvest-repo-brain.md",
|
|
54
|
+
"references/recipes/import-repo-brain-harvest.md",
|
|
55
|
+
"references/recipes/memory-organization.md",
|
|
56
|
+
"references/recipes/recommend-then-validate.md",
|
|
57
|
+
"references/recipes/self-healing-hooks.md",
|
|
58
|
+
"references/recipes/skill-stewardship-loop.md",
|
|
59
|
+
"references/standards/agents-md-spec.md",
|
|
60
|
+
"references/standards/claude-md-convention.md",
|
|
61
|
+
"references/standards/cross-tool-matrix.md",
|
|
62
|
+
"references/standards/readme-conventions.md",
|
|
63
|
+
"scripts/audit-ops-roster.mjs"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# Changelog — `adia-ui-release` skill
|
|
2
2
|
|
|
3
|
+
## [0.2.2] — 2026-06-10
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- **`make-ledger.mjs` no longer ships placeholders.** Auto-fill `repoSlug` from `git remote get-url origin` (was the literal `<org>/<repo>` — CodeRabbit-flagged on the v0.7.17 ledger); dropped the angle-bracket placeholder in the `dispatched` default; warn on real-write when TODO fields (`verification` / `notes` / `dispatched`) would ship. Substrate fix (branch A of the §Teach tree); root-cause fix for the nit point-patched in the v0.7.17 ledger (gen-ui-kit #102).
|
|
7
|
+
|
|
8
|
+
## [0.2.1] — 2026-06-08
|
|
9
|
+
|
|
10
|
+
**Two release-tooling fixes that bit the v0.7.14 lockstep cut.** Both are substrate fixes to the bundled scripts (branch A of the §Teach decision tree); no mode/capability change.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Package name-vs-path-form inconsistency in the standalone CHANGELOG helpers.** The 6 a2ui packages live on disk under `packages/a2ui/<x>/` but carry the flat npm-name `a2ui-<x>` everywhere else in the tooling (`release-pack.mjs` / `dispatch-publish.mjs` / `tag-lockstep.mjs` all use the NAME form). `promote-unreleased.mjs` + `insert-stub.mjs` joined `packages/<arg>/CHANGELOG.md` with the raw arg, so calling them with the name form silently 404'd (`CHANGELOG.md not found at packages/a2ui-corpus/`) — it failed for all 6 a2ui packages at the v0.7.14 cut. **Both helpers now accept BOTH forms** via a new shared `scripts/package-paths.mjs` (`resolvePackageChangelog` / `resolvePackageDir`): try `packages/<arg>` first (path form, backward-compatible), and when that directory is absent fall back to `packages/a2ui/<x>` for an `a2ui-<x>` arg. Verified: name-form `a2ui-corpus` and path-form `a2ui/corpus` now resolve identically; non-a2ui packages unchanged; unknown packages still give a legible not-found.
|
|
15
|
+
- **Batch tag-push triggered ZERO publish workflows.** Pushing all 10 tags in one `git push origin <10 tags>` fires a single `create` event for the whole ref-set, which GitHub Actions routinely drops — so no `publish-<pkg>.yml` ran at the v0.7.14 cut (recovered by hand via `gh workflow run`). **`release-pack.mjs` Step 8 now pushes per-package tags one-at-a-time** (umbrella last), and **Step 9 runs `dispatch-publish.mjs --verify-triggered`** — a new mode that checks whether each `publish-<pkg>.yml` already ran for its `<pkg>-vX.Y.Z` tag and re-dispatches ONLY the misses (idempotent; safe after a partial trigger; `--dry` previews without calling `gh`). The `tag-lockstep.mjs` push hint now prints the per-tag loop + the verify-triggered recovery command instead of the batch push.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **`scripts/package-paths.mjs`** (new) — shared name↔path-form package resolution for the CHANGELOG helpers. Pure Node, stdlib only.
|
|
20
|
+
- **`references/recovery-paths.md` §Scenario 7 — "Tags pushed but ZERO publish workflows triggered (the batch-tag-push skip)"** — shape, root cause (the GitHub batched-create-event drop), the v0.7.14 canonical case, the `--verify-triggered` recovery, the per-tag-push prevention, and the ledger fragment. Added to the §Decision flowchart; scenario count 6 → 7.
|
|
21
|
+
|
|
22
|
+
### Wiring
|
|
23
|
+
|
|
24
|
+
- `skill.json` — `version` 0.2.0 → 0.2.1 (PATCH — bug fixes); `scripts/package-paths.mjs` added to `files`.
|
|
25
|
+
- `SKILL.md` frontmatter `version` 0.2.0 → 0.2.1 (lockstep with `skill.json`); `package-paths.mjs` added to §FileMap.
|
|
26
|
+
|
|
27
|
+
## [0.2.0] — 2026-06-07
|
|
28
|
+
|
|
29
|
+
**New capability — the two release CLASSES (class-A lockstep cut + class-B independent-package release).** Folds in the "two release classes" training (ADR-0040 Phase 1b), adapted to forge's portable voice. The skill now distinguishes the **class-A lockstep cut** (the whole set bumps together — modes 1–4) from a **class-B independent-package release** (a package versioned independently of the lockstep set, excluded from the lockstep gate, no umbrella tag, no demo-site deploy — new **mode 12**). The @adia-ai monorepo's `packages/plugins/*` plugins (`adia-ui-factory` / `adia-ui-forge`) are the clearly-labeled worked example throughout; the framing stays portable (an independently-versioned package *outside* the lockstep).
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- **`references/independent-package-release.md`** (new) — the class-B procedure: the two-class comparison table, the three new-package onboarding trip-wires (lockfile · release-trip-wire package registry · CHANGELOG bracket form — all **substrate** fixes, branch A of the §Teach decision tree), the step-by-step cut, the verify-against-npm target, and the marketplace cut-over. `@adia-ai` specifics labeled as the worked example; no hard `@adia-ai`-only / absolute-path / `.brain`-runtime assumptions in executable content.
|
|
34
|
+
- **SKILL.md** — **mode 12 (Independent-package release)** in the mode menu + the §Where-are-you-starting-from table; a §IndependentPackageRelease section mirroring §MigrationGuideAuthoring (the class-A vs class-B split + the three trip-wires + marketplace cut-over, with the plugins as the worked example); a class-A/class-B framing note atop §ReleaseInvariants; the mode-12 real-product verify-target row in the §PEV table (verify each package's **independent** version on the npm registry — NOT "all 9 + demo site"); §Recon classification step 10 + the mode-12 classify bullet; the `independent-package-release.md` destination added to the §Teach decision-tree branch list and to §FileMap.
|
|
35
|
+
|
|
36
|
+
### Coordination notes carried in (portable voice)
|
|
37
|
+
|
|
38
|
+
- **PR-merge gate** — land the package(s) on `main` via PR; resolve **every** review thread before an admin merge (an admin merge over unresolved threads is the failure this guards against).
|
|
39
|
+
- **Push tags from a clean worktree** — if the shared working tree is on a peer's branch, push the per-package tags from a throwaway worktree on `origin/main`.
|
|
40
|
+
|
|
41
|
+
### Wiring
|
|
42
|
+
|
|
43
|
+
- `skill.json` — `version` 0.1.0 → 0.2.0 (MINOR — new capability); `independent-package-release.md` added to `files`; `description` extended with the independent-package / plugin trigger surface.
|
|
44
|
+
- SKILL.md frontmatter `version` 0.1.0 → 0.2.0 (kept in lockstep with `skill.json`).
|
|
45
|
+
|
|
3
46
|
## [0.1.0] stable — 2026-06-03
|
|
4
47
|
|
|
5
48
|
**Initial cut in the `adia-ui-forge` plugin.** Faithful, de-repo'd, self-contained port of the @adia-ai monorepo's maintainer `adia-ui-release` skill, with the former `adia-ui-migration` skill folded in as the producer-side migration-guide-authoring section. Preserves the release-engineering depth (the gate roster, recovery paths, peer-in-flight discipline, ledger schema, notes craft) — this is a port, not a rewrite.
|
|
@@ -9,7 +9,7 @@ description: >-
|
|
|
9
9
|
registry + production endpoint + GH release), not self-checks. NOT for
|
|
10
10
|
consumer-side migration (sweeping a downstream app → adia-ui-factory),
|
|
11
11
|
long-running VM ops, or composing / modifying UI.
|
|
12
|
-
version: 0.
|
|
12
|
+
version: 0.2.2
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
# `adia-ui-release` — Release Engineer for an @adia-ai-style Lockstep Monorepo
|
|
@@ -18,7 +18,7 @@ version: 0.1.0
|
|
|
18
18
|
|
|
19
19
|
> **COLD-START FAST-PATH (read first when invoked with no concrete task).**
|
|
20
20
|
>
|
|
21
|
-
> If the user just activated the skill with no concrete request — e.g. `use adia-ui-release`, `load the release skill`, `the skill is loaded, now what?`, or any bare-activation phrasing without a version number, a release commit, or a recovery symptom — **jump directly to `## What this skill can do — pick your mode` below and render it verbatim**. Then ask one short prompt: _"Tell me which mode + which version (e.g. `1, 0.6.22`) and I'll load the matching reference bundles."_ Do NOT begin §Recon, do NOT load any `references/*.md` bundle, do NOT assume a happy-path cycle. The user is asking _what the skill offers_, not asking the skill to _act_. Plan-Execute-Verify (
|
|
21
|
+
> If the user just activated the skill with no concrete request — e.g. `use adia-ui-release`, `load the release skill`, `the skill is loaded, now what?`, or any bare-activation phrasing without a version number, a release commit, or a recovery symptom — **jump directly to `## What this skill can do — pick your mode` below and render it verbatim**. Then ask one short prompt: _"Tell me which mode + which version (e.g. `1, 0.6.22`) and I'll load the matching reference bundles."_ Do NOT begin §Recon, do NOT load any `references/*.md` bundle, do NOT assume a happy-path cycle. The user is asking _what the skill offers_, not asking the skill to _act_. Plan-Execute-Verify (`§PEV`) still governs once a mode is picked.
|
|
22
22
|
>
|
|
23
23
|
> If the user activated the skill **AND** has named a concrete version / mode / symptom — skip this fast-path, follow §Posture, and route to the matching mode.
|
|
24
24
|
|
|
@@ -56,6 +56,7 @@ When in doubt, follow §Posture below.
|
|
|
56
56
|
| 9 | **Authoring discipline only** | Just author CHANGELOG / Slack / GH-release notes from a diff — no cutting |
|
|
57
57
|
| 10 | 📚 **Teach the skill new knowledge** | Operator/peer wants the skill to absorb a new gate, recovery path, notes template, ledger field, deploy step, peer-coordination pattern, or migration recipe — load the §Teach decision tree |
|
|
58
58
|
| 11 | **Author a migration guide** | The cut breaks an API (MINOR) — author the `MIGRATION GUIDE.md` section + sweep in-repo surfaces (the **producer** side of migration) |
|
|
59
|
+
| 12 | **Independent-package release** | Ship a package versioned **independently** of the lockstep set (**excluded from the lockstep gate**, no umbrella tag, no demo-site deploy) — NOT the lockstep cut. Loads `independent-package-release.md` |
|
|
59
60
|
|
|
60
61
|
If your mode isn't listed, reply with `freeform: <your situation>` and the skill will branch into §Recon (gather state, classify, recommend a mode).
|
|
61
62
|
|
|
@@ -74,6 +75,7 @@ Pick the row that matches your starting state. The "Loads" column lists what the
|
|
|
74
75
|
| You just want a Slack post / GH-release body | 9 | `notes-authoring.md` |
|
|
75
76
|
| You want rollup notes across many versions | 5 | `rollup-notes.md` |
|
|
76
77
|
| The cut breaks an API (MINOR) — author the guide | 11 | `migration-guide-authoring.md` |
|
|
78
|
+
| Releasing a package versioned independently of the lockstep set | 12 | `independent-package-release.md` — class-B procedure + onboarding trip-wires + marketplace cut-over |
|
|
77
79
|
| Teaching the skill new knowledge ("make adia-ui-release aware of X") | 10 | `teach-protocol.md` — decision tree + 5-step landing + worked examples + anti-patterns |
|
|
78
80
|
| Bare activation, no concrete task | — | Nothing — render this menu and stop |
|
|
79
81
|
|
|
@@ -132,6 +134,7 @@ The release is not done until the verify-target confirms the ecosystem outside t
|
|
|
132
134
|
| 9 Notes-only | The GH release page is visible at `https://github.com/<repo>/releases/tag/v0.X.Y` |
|
|
133
135
|
| 10 §Teach landing | `audit-gate-roster.mjs --strict` reports 0 drift |
|
|
134
136
|
| 11 Migration guide | Every breaking item in the cut's CHANGELOG has a guide subsection; the in-repo sweep-verification grep reports 0 legacy hits; the breaking cut's demo/structural gates pass |
|
|
137
|
+
| 12 Independent-package release | `npm view @adia-ai/<pkg> version` returns the new **independent** version for EACH package (NOT "all 9 + demo site") AND, if a marketplace exists, its manifest references npm. Verify against the registry, never the workflow's reported success |
|
|
135
138
|
|
|
136
139
|
The pre-flight gate sequence before any cut is the target monorepo's full roster (the @adia-ai example is in `cycle-happy-path.md §Step 3.1` + `gates-catalog.md`). If a gate fails, **the failure is the artifact**. Fix at the source, re-run the narrowest gate, then re-run the full sequence. Don't declare "released" until the registry + production endpoint + GH release page confirm it. Internal gates are necessary; they are never sufficient.
|
|
137
140
|
|
|
@@ -145,11 +148,13 @@ The pre-flight gate sequence before any cut is the target monorepo's full roster
|
|
|
145
148
|
|
|
146
149
|
These hold across every release in an @adia-ai-style lockstep monorepo. Violating any of them produces a defective release. (The package counts / tag counts below are the @adia-ai monorepo's **worked example** — substitute your monorepo's own package set.)
|
|
147
150
|
|
|
151
|
+
> **These govern the class-A lockstep cut (the primary path — modes 1–4).** A monorepo can also host packages versioned **independently** of the lockstep set — a **class-B independent-package release** (mode 12): versioned independently, EXCLUDED from the lockstep gate, no umbrella tag, no demo-site deploy. See **mode 12** / `references/independent-package-release.md` for the class-B invariants + the new-package onboarding trip-wires (lockfile · release-trip-wire package registry · CHANGELOG bracket form) + marketplace cut-over. *(Worked example: the @adia-ai monorepo's `packages/plugins/*` plugins — `adia-ui-factory` / `adia-ui-forge`.)*
|
|
152
|
+
|
|
148
153
|
1. **Lockstep version coherence** — every `@adia-ai/*` package in the release set bumps together. In the @adia-ai monorepo that's 9 packages (`web-components`, `web-modules`, `llm`, `a2ui-compose`, `a2ui-corpus`, `a2ui-mcp`, `a2ui-retrieval`, `a2ui-runtime`, `a2ui-validator`), enforced by `check:lockstep`.
|
|
149
154
|
2. **Internal `@adia-ai/*` dep ranges hold at `^0.X.0` during PATCH cuts** — only MINOR cuts bump the internal-range floor. (The "PATCH-cut asymmetry.")
|
|
150
155
|
3. **Tag at HEAD, not at the bump commit** — post-bump fixes / tests / doc updates belong in the tarball. The release window's last commit is the tag point. Exception: batch push (each version tags at its own release-commit SHA).
|
|
151
156
|
4. **One umbrella tag + one per-package tag per cut** — `vX.Y.Z` + `<pkg>-vX.Y.Z` per package. The publish workflows trigger off the per-package tags; the umbrella is convention. (10 tags in the @adia-ai 9-package example.)
|
|
152
|
-
5. **The release trip-wire (F-N1, `check:release --all-pending`) must be per-package clean** — the umbrella tag's "doesn't match `<pkg>-v<version>`" error is expected and ignored. Warns on per-package tags require an enrichment pass (see `changelog-discipline.md`
|
|
157
|
+
5. **The release trip-wire (F-N1, `check:release --all-pending`) must be per-package clean** — the umbrella tag's "doesn't match `<pkg>-v<version>`" error is expected and ignored. Warns on per-package tags require an enrichment pass (see `changelog-discipline.md` `§F-N1 diff-coverage enrichment`).
|
|
153
158
|
6. **`npm dist-tag latest` is set by publish order** — for batch push, publish the older version's workflows + WAIT for completion BEFORE dispatching the newer version's. Otherwise `latest` lands on the older version.
|
|
154
159
|
7. **Audit-history ledger is non-negotiable** — every cycle writes `.brain/audit-history/YYYY-MM-DD-release-vX.Y.Z.json`. Future cycles read past ledgers.
|
|
155
160
|
8. **Site deploy reflects committed state** — the site build runs from the working tree, so peer-in-flight uncommitted files would leak into the deployed site if not stashed. Stash discipline is the same one used at release-commit time.
|
|
@@ -172,6 +177,25 @@ Additive cuts need no migration section — note "additive; no consumer sweep" i
|
|
|
172
177
|
|
|
173
178
|
---
|
|
174
179
|
|
|
180
|
+
## §IndependentPackageRelease — the class-B cut (mode 12)
|
|
181
|
+
|
|
182
|
+
Some packages in a lockstep monorepo are versioned **independently** of the lockstep set — their release cadence is deliberately decoupled. Shipping one is a **class-B independent-package release**, distinct from the class-A lockstep cut (modes 1–4):
|
|
183
|
+
|
|
184
|
+
- **Class A — lockstep cut (modes 1–4)** — the whole set bumps together, enforced by the lockstep gate, one umbrella tag + per-package tags, cross-package `dist-tag` ordering, demo-site deploy. §ReleaseInvariants govern it.
|
|
185
|
+
- **Class B — independent-package release (this mode, mode 12)** — each package on its own version line, **excluded from the lockstep gate** (the gate skips it by design), **no umbrella tag** (per-package tags only; versions differ), **no `dist-tag` cross-package race** (independent versions), **no demo-site deploy**. It still publishes via a tag-triggered per-package workflow and still verifies against the **npm registry** (never the workflow's reported "success").
|
|
186
|
+
|
|
187
|
+
A package **new to the release tooling** hits three onboarding trip-wires the established set long since passed — **lockfile** (new workspace package absent from the lockfile), **release-trip-wire package registry** (an unregistered tag fails the pre-push hook), and **CHANGELOG bracket form** (the trip-wire requires Keep-a-Changelog `## [<version>]`). These are **substrate** fixes (release scripts / lockfile / CHANGELOG) — per the §Teach decision tree, branch A — landed once as a normal PR *before* tagging. If a plugin marketplace exists, a class-B cut ends with a **marketplace cut-over** (point the manifest's `source` at npm; remove vendored copies).
|
|
188
|
+
|
|
189
|
+
**Load the full procedure** via the mode-12 row: `independent-package-release.md` (the two-class comparison table, the three onboarding trip-wires, the step-by-step procedure, the verify-against-npm target, and the marketplace cut-over).
|
|
190
|
+
|
|
191
|
+
> **Worked example.** The @adia-ai monorepo's two Claude Code plugins —
|
|
192
|
+
> `@adia-ai/adia-ui-factory` and `@adia-ai/adia-ui-forge` — live under
|
|
193
|
+
> `packages/plugins/*`, version independently (factory `0.2.x`, forge `0.1.x`),
|
|
194
|
+
> and are excluded from the 9-package lockstep by design. They are this mode's
|
|
195
|
+
> worked example.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
175
199
|
## §LoadingProtocol — progressive context construction
|
|
176
200
|
|
|
177
201
|
The skill seed (`SKILL.md` + `skill.json` + `CHANGELOG.md`) is the only content loaded on activation. Reference bundles load ONLY when the matched mode declares them, per the table in §Where are you starting from above. See `skill.json files` for the canonical reference list.
|
|
@@ -193,6 +217,7 @@ If the user said `freeform: <situation>` or otherwise didn't pick a mode, run th
|
|
|
193
217
|
7. Check working-tree CHANGELOG heads for `## [Unreleased]` blocks
|
|
194
218
|
8. Check uncommitted source files — would they be IN a release commit?
|
|
195
219
|
9. Is this a breaking cut (removed/renamed API symbol)? → mode 11 owes a migration-guide section.
|
|
220
|
+
10. Is the package being released versioned **independently** of the lockstep set (excluded from the lockstep gate)? → **mode 12** (class-B independent-package release), not a lockstep cut.
|
|
196
221
|
|
|
197
222
|
Then classify:
|
|
198
223
|
|
|
@@ -202,6 +227,7 @@ Then classify:
|
|
|
202
227
|
- **Mode 1** (cut & ship) — fits a normal cycle, no special signal
|
|
203
228
|
- **Mode 6** (just verify) — operator only wants a smoke check
|
|
204
229
|
- **Mode 11** (migration guide) — the cut is breaking (MINOR) and no `MIGRATION GUIDE.md` section exists yet for the version
|
|
230
|
+
- **Mode 12** (independent-package release) — the package is versioned independently of the lockstep set (excluded from the lockstep gate); ship it on its own version line, no umbrella tag, no demo-site deploy
|
|
205
231
|
- **Otherwise** — surface the ambiguity to the operator; recommend routing through Investigation (mode 8).
|
|
206
232
|
|
|
207
233
|
After classifying, load the mode's declared reference bundle and proceed per its checklist.
|
|
@@ -212,13 +238,13 @@ After classifying, load the mode's declared reference bundle and proceed per its
|
|
|
212
238
|
|
|
213
239
|
This section is the binding for requests of the shape "make sure `adia-ui-release` knows about X" / "train the skill on Y" / "absorb this release-pattern into adia-ui-release" / "the skill should be aware of Z".
|
|
214
240
|
|
|
215
|
-
§Teach is the **extensibility posture** — narrower than the cut-&-ship modes (1-4), distinct from the verification mode (6), the recovery mode (7), the notes-only mode (9),
|
|
241
|
+
§Teach is the **extensibility posture** — narrower than the cut-&-ship modes (1-4), distinct from the verification mode (6), the recovery mode (7), the notes-only mode (9), the migration-guide mode (11), and the independent-package mode (12). Use it when another agent — release operator, peer skill author, dev-ops author — hands the release skill new knowledge to integrate.
|
|
216
242
|
|
|
217
243
|
**Load the full procedure** via the mode-10 row: `teach-protocol.md`.
|
|
218
244
|
|
|
219
245
|
### The procedure in 30 seconds
|
|
220
246
|
|
|
221
|
-
1. **Run the decision tree** — does the new knowledge belong in the substrate (script source — NOT a skill landing), `gates-catalog.md` (new gate), `recovery-paths.md` (new failure mode), `notes-authoring.md` or `rollup-notes.md` (notes-template variant), `ledger-discipline.md` (new ledger field), `exe-deploy.md` (new deploy step), `multi-agent-baseline.md` (new peer-coordination pattern), `migration-guide-authoring.md` (new producer-side migration recipe / manual-review class), INLINE in SKILL.md (methodology / new §SelfAudit axis / new mode), or the audit-history ledger + journal (cycle-specific arc story — NOT the skill)? The reference file branches every case with worked examples (including the negative case).
|
|
247
|
+
1. **Run the decision tree** — does the new knowledge belong in the substrate (script source — NOT a skill landing), `gates-catalog.md` (new gate), `recovery-paths.md` (new failure mode), `notes-authoring.md` or `rollup-notes.md` (notes-template variant), `ledger-discipline.md` (new ledger field), `exe-deploy.md` (new deploy step), `multi-agent-baseline.md` (new peer-coordination pattern), `migration-guide-authoring.md` (new producer-side migration recipe / manual-review class), `independent-package-release.md` (new class-B onboarding trip-wire / marketplace step), INLINE in SKILL.md (methodology / new §SelfAudit axis / new mode), or the audit-history ledger + journal (cycle-specific arc story — NOT the skill)? The reference file branches every case with worked examples (including the negative case).
|
|
222
248
|
2. **Five-step landing procedure** — audit before patching → author the patch → wire the activation surface → version + CHANGELOG → verify with `audit-gate-roster.mjs`.
|
|
223
249
|
3. **Anti-patterns** to avoid: append-only landing, substrate duplication (re-stating what a `check:*` script does), orphan triggers, capability menu lies, MINOR + PATCH bundling, hygiene-debt deferral, one-way thinking (failing to route content to a sibling — `adia-ui-authoring` for authoring-side hygiene, `ops-postmortem` for incident write-ups, the consumer/app-author plugin for the consumer side of migration).
|
|
224
250
|
|
|
@@ -248,7 +274,7 @@ node "${CLAUDE_PLUGIN_ROOT}/skills/adia-ui-release/scripts/audit-gate-roster.mjs
|
|
|
248
274
|
|
|
249
275
|
Path resolution: the script resolves its catalog via `${CLAUDE_PLUGIN_ROOT}`, falling back to a path relative to the script; run it from the target monorepo root (or pass `--repo <root>`).
|
|
250
276
|
|
|
251
|
-
§SelfAudit checks the SKILL's invariants;
|
|
277
|
+
§SelfAudit checks the SKILL's invariants; `§PEV` checks the OUTPUT against reality. Both are required — see `§Plan-Execute-Verify` above.
|
|
252
278
|
|
|
253
279
|
---
|
|
254
280
|
|
|
@@ -270,11 +296,13 @@ skills/adia-ui-release/
|
|
|
270
296
|
│ ├── exe-deploy.md
|
|
271
297
|
│ ├── ledger-discipline.md
|
|
272
298
|
│ ├── migration-guide-authoring.md (producer side of migrations — fold-in)
|
|
299
|
+
│ ├── independent-package-release.md (class-B cut — independently-versioned package)
|
|
273
300
|
│ └── teach-protocol.md
|
|
274
301
|
├── scripts/ (CLI helpers — pure Node, stdlib only)
|
|
275
302
|
│ ├── bump.mjs
|
|
276
303
|
│ ├── promote-unreleased.mjs
|
|
277
304
|
│ ├── insert-stub.mjs
|
|
305
|
+
│ ├── package-paths.mjs (name↔path-form package resolution — shared by the CHANGELOG helpers)
|
|
278
306
|
│ ├── tag-lockstep.mjs
|
|
279
307
|
│ ├── dispatch-publish.mjs
|
|
280
308
|
│ ├── make-ledger.mjs
|