@evolvehq/docflow 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +74 -45
  2. package/USAGE.md +68 -20
  3. package/package.json +3 -3
  4. package/plugins/docflow/skills/add-convention/agents/openai.yaml +4 -0
  5. package/plugins/docflow/skills/agent-wave/agents/openai.yaml +4 -0
  6. package/{skills → plugins/docflow/skills}/audit/SKILL.md +22 -1
  7. package/plugins/docflow/skills/audit/agents/openai.yaml +4 -0
  8. package/{skills → plugins/docflow/skills}/bootstrap/SKILL.md +65 -3
  9. package/plugins/docflow/skills/bootstrap/agents/openai.yaml +4 -0
  10. package/{skills → plugins/docflow/skills}/bootstrap/templates/CONVENTIONS.md +26 -0
  11. package/plugins/docflow/skills/bootstrap/templates/federation-config.md +17 -0
  12. package/plugins/docflow/skills/bootstrap/templates/federation-index.md +17 -0
  13. package/plugins/docflow/skills/brainstorm/agents/openai.yaml +4 -0
  14. package/{skills → plugins/docflow/skills}/new-adr/SKILL.md +11 -0
  15. package/plugins/docflow/skills/new-adr/agents/openai.yaml +4 -0
  16. package/plugins/docflow/skills/new-plan/agents/openai.yaml +4 -0
  17. package/plugins/docflow/skills/rollup/SKILL.md +65 -0
  18. package/plugins/docflow/skills/rollup/agents/openai.yaml +4 -0
  19. package/plugins/docflow/skills/ship-item/agents/openai.yaml +4 -0
  20. /package/{skills → plugins/docflow/skills}/add-convention/SKILL.md +0 -0
  21. /package/{skills → plugins/docflow/skills}/agent-wave/SKILL.md +0 -0
  22. /package/{skills → plugins/docflow/skills}/bootstrap/templates/AGENTS.md +0 -0
  23. /package/{skills → plugins/docflow/skills}/bootstrap/templates/CLAUDE.md +0 -0
  24. /package/{skills → plugins/docflow/skills}/bootstrap/templates/_agent-CURRENT_FOCUS.md +0 -0
  25. /package/{skills → plugins/docflow/skills}/bootstrap/templates/_agent-HANDOFF.md +0 -0
  26. /package/{skills → plugins/docflow/skills}/bootstrap/templates/_agent-IN_FLIGHT.md +0 -0
  27. /package/{skills → plugins/docflow/skills}/bootstrap/templates/_agent-LOCKS.md +0 -0
  28. /package/{skills → plugins/docflow/skills}/bootstrap/templates/_agent-ROLES.md +0 -0
  29. /package/{skills → plugins/docflow/skills}/bootstrap/templates/_agent-WORKLOG.md +0 -0
  30. /package/{skills → plugins/docflow/skills}/bootstrap/templates/_agent-prompts-autonomous.md +0 -0
  31. /package/{skills → plugins/docflow/skills}/bootstrap/templates/adr-capability.md +0 -0
  32. /package/{skills → plugins/docflow/skills}/bootstrap/templates/adr-technology.md +0 -0
  33. /package/{skills → plugins/docflow/skills}/bootstrap/templates/plan-README.md +0 -0
  34. /package/{skills → plugins/docflow/skills}/brainstorm/SKILL.md +0 -0
  35. /package/{skills → plugins/docflow/skills}/new-plan/SKILL.md +0 -0
  36. /package/{skills → plugins/docflow/skills}/ship-item/SKILL.md +0 -0
package/README.md CHANGED
@@ -10,7 +10,9 @@ It installs a `bootstrap` skill that scaffolds (or retrofits) an
10
10
  `AGENTS.md` conventions into any repository, plus a set of **lifecycle
11
11
  skills** that author, queue, ship, and audit ADRs — so the project can
12
12
  be driven by both humans and coding agents from a small set of canonical
13
- files.
13
+ files. For the formal definition of the conventions — why they help and
14
+ where they fall short — see the
15
+ [methodology](https://evolvehq.github.io/docflow/methodology/).
14
16
 
15
17
  ## Skills
16
18
 
@@ -28,6 +30,7 @@ agent the same skills are invoked as `/skill:<name>` (e.g.
28
30
  | audit | `/audit` | Lint the repo against its own conventions — numbering, INDEX sync, plan coverage, **ADR-privacy leaks**, more. |
29
31
  | brainstorm | `/brainstorm` | Decompose a problem into candidate ADRs + plan items (proposes drafts; writes nothing until approved). |
30
32
  | agent-wave | `/agent-wave` | Orchestrate a wave of parallel worktree subagents over the queue, with checkpoint or continuous supervision. |
33
+ | rollup | `/rollup` | For a multi-repo product: aggregate every member repo's ADRs into one derived, product-wide roll-up (run from the home repo). |
31
34
 
32
35
  The lifecycle skills all **read `CONVENTIONS.md` first** and honour the
33
36
  choices the bootstrap recorded (ADR shape, status lifecycle, integration
@@ -65,10 +68,27 @@ It works equally well on **fresh repos** (scaffolds from zero) and on
65
68
  **existing repos** (retrofits, preserving and merging existing files
66
69
  rather than overwriting them).
67
70
 
71
+ ## Multi-repo products
72
+
73
+ A single product spread across several repositories can run as a
74
+ **federation**. At bootstrap a repo declares whether it is standalone or
75
+ part of a multi-repo product, and whether it is **establishing** a new
76
+ federation or **joining** one — a joining repo only ever writes its own
77
+ back-pointer, never into another repo. You pick a **topology** (central
78
+ decisions repo · distributed · home-repo-plus-local), and the convention
79
+ set keeps numbering contiguous **per repo** while a federation-wide
80
+ identity is the cross-repo key. The `rollup` skill aggregates every
81
+ member's catalogue into one product-wide view, and `audit` gains
82
+ cross-repo checks (membership, identity collisions, dangling references,
83
+ roll-up drift). No tool writes across a repo boundary; consistency is
84
+ declared at the edges and enforced by audit. See the
85
+ [methodology](https://evolvehq.github.io/docflow/methodology/#5-scaling-to-many-repositories)
86
+ for the full model.
87
+
68
88
  ## Install
69
89
 
70
- docflow ships from **one `skills/` tree** to five coding agents — only
71
- the packaging differs. Two surfaces: the scaffolded **output**
90
+ docflow ships from **one skill source** (`plugins/docflow/skills/`) to
91
+ five coding agents — only the packaging differs. Two surfaces: the scaffolded **output**
72
92
  (`AGENTS.md`, the ADR catalogue, `plan/`, `_agent/`) is plain Markdown
73
93
  read natively by any agent that loads `AGENTS.md`; the **skills** are
74
94
  `SKILL.md` files the host discovers.
@@ -78,12 +98,11 @@ read natively by any agent that loads `AGENTS.md`; the **skills** are
78
98
  | Claude Code | native | ✅ | marketplace (below) | `/bootstrap` |
79
99
  | Claude Cowork | native | ✅ | same Claude Code plugin | `/bootstrap` |
80
100
  | pi | native | ✅ | `pi install npm:@evolvehq/docflow` | `/skill:bootstrap` |
81
- | Codex | native | ✅ | copy into `~/.agents/skills/` | `$bootstrap` / `/skills` |
82
- | OpenCode | native | ✅ | reads `.claude`/`.agents`/`.opencode` skills | auto, by description |
101
+ | Codex | native | ✅ | `codex plugin marketplace add EvolveHQ/docflow` | `$bootstrap` / `/skills` |
102
+ | OpenCode | native | ✅ | auto-discovered, or symlink into `~/.config/opencode/skills` | auto, by description |
83
103
 
84
- Handy: `~/.agents/skills/` is read by **both Codex and OpenCode**, and
85
- `~/.claude/skills/` by **both Claude Code and OpenCode** so one install
86
- often serves two agents.
104
+ Handy: OpenCode also reads `~/.claude/skills/` and `~/.agents/skills/`, so
105
+ a shared skills directory can serve it alongside another agent.
87
106
 
88
107
  ### Claude Code — from this marketplace
89
108
 
@@ -109,7 +128,7 @@ pi install git:github.com/EvolveHQ/docflow
109
128
  ```
110
129
 
111
130
  or, once published to npm, `pi install npm:@evolvehq/docflow`. Pi
112
- auto-discovers the `skills/` directory via the `pi` key in
131
+ auto-discovers the skills via the `pi.skills` key in
113
132
  `package.json`. Invoke with `/skill:bootstrap`, `/skill:new-adr`,
114
133
  `/skill:ship-item`, … Pi does **not** auto-trigger skills from their
115
134
  descriptions the way Claude Code does — invoke them explicitly (the
@@ -121,29 +140,36 @@ hierarchical `AGENTS.md` loading — no porting needed.
121
140
 
122
141
  ### Codex (OpenAI)
123
142
 
124
- Codex reads `AGENTS.md` natively and discovers skills from `.agents/skills`.
125
- Copy docflow's skills into a path Codex scans:
143
+ docflow ships a Codex plugin (`.codex-plugin/`), so it's a one-command
144
+ install from this repo's marketplace:
126
145
 
127
146
  ```
128
- # user-wide (all projects), from a clone of this repo:
129
- mkdir -p ~/.agents/skills && cp -r <docflow>/skills/* ~/.agents/skills/
130
- # or from npm:
131
- npm install @evolvehq/docflow
132
- cp -r node_modules/@evolvehq/docflow/skills/* ~/.agents/skills/
147
+ codex plugin marketplace add EvolveHQ/docflow
148
+ codex plugin add docflow@evolvehq
133
149
  ```
134
150
 
135
- On Windows, copy `skills\*` into `%USERPROFILE%\.agents\skills\`. Invoke
136
- with `$bootstrap` / `/skills`, or just describe the task (Codex
137
- auto-triggers from the skill description). The structured assessment
138
- questions fall back to plain `A/B/C` text where there is no select tool.
151
+ Codex reads the scaffolded `AGENTS.md` natively. Invoke with `$bootstrap`
152
+ / `/skills`, or just describe the task (Codex auto-triggers from the skill
153
+ description); the assessment questions fall back to plain `A/B/C` text
154
+ where there is no select tool. Update later with `codex plugin
155
+ marketplace upgrade`.
139
156
 
140
157
  ### OpenCode (sst)
141
158
 
142
- OpenCode scans `.opencode/skills/`, **`.claude/skills/`, and
143
- `.agents/skills/`** (project and global), so a Claude Code or Codex
144
- install is **picked up automatically** or copy `skills/*` into
145
- `~/.config/opencode/skills/` (or per-project `.opencode/skills/`). Skills
146
- auto-load by description.
159
+ OpenCode auto-discovers skills from `.claude/skills`, `.agents/skills`,
160
+ and `.opencode/skills` (project and global) so **if you already run
161
+ docflow on Claude Code or Codex via a shared skills directory, OpenCode
162
+ picks it up with no extra step.** Standalone, symlink the skills into
163
+ OpenCode's global directory (one command, stays in sync with the clone):
164
+
165
+ ```
166
+ git clone https://github.com/EvolveHQ/docflow ~/.docflow-src
167
+ ln -s ~/.docflow-src/plugins/docflow/skills/* ~/.config/opencode/skills/
168
+ ```
169
+
170
+ OpenCode has no marketplace command for `SKILL.md` skills (its plugin
171
+ system is for npm JS plugins), so a shared skills directory is the clean
172
+ path. Skills auto-load by description.
147
173
 
148
174
  ### Claude Code — local development (no install)
149
175
 
@@ -154,12 +180,12 @@ claude --plugin-dir <path-to-this-repo>
154
180
  ### Direct skill clone (no plugin lifecycle)
155
181
 
156
182
  ```
157
- git clone https://github.com/EvolveHQ/docflow ~/.claude/skills/docflow-src
158
- ln -s ~/.claude/skills/docflow-src/skills/bootstrap ~/.claude/skills/bootstrap
183
+ git clone https://github.com/EvolveHQ/docflow ~/.docflow-src
184
+ ln -s ~/.docflow-src/plugins/docflow/skills/* ~/.claude/skills/
159
185
  ```
160
186
 
161
- On Windows, copy `skills/bootstrap/` (and the other `skills/*` dirs you
162
- want) into `%USERPROFILE%\.claude\skills\` instead of symlinking.
187
+ On Windows, copy `plugins\docflow\skills\*` into
188
+ `%USERPROFILE%\.claude\skills\` instead of symlinking.
163
189
 
164
190
  ## Quick start
165
191
 
@@ -208,26 +234,29 @@ to extend or override the templates.
208
234
 
209
235
  ```
210
236
  docflow/
211
- .claude-plugin/
212
- plugin.json # Claude Code plugin manifest
213
- marketplace.json # Claude Code marketplace listing (repo is its own marketplace)
214
- package.json # pi package manifest (pi.skills -> ./skills) + npm metadata
215
- skills/
216
- bootstrap/
217
- SKILL.md # bootstrap: assessment + output sequence + backfill
218
- templates/ # files the bootstrap reads and writes into target repos
219
- new-adr/SKILL.md # lifecycle skills operate on a bootstrapped repo,
220
- new-plan/SKILL.md # read CONVENTIONS.md, honour its choices
221
- ship-item/SKILL.md
222
- add-convention/SKILL.md
223
- audit/SKILL.md
224
- brainstorm/SKILL.md
225
- agent-wave/SKILL.md
237
+ .claude-plugin/marketplace.json # Claude Code / Cowork marketplace (-> ./plugins/docflow)
238
+ .agents/plugins/marketplace.json # Codex marketplace (-> ./plugins/docflow)
239
+ package.json # pi manifest (pi.skills -> ./plugins/docflow/skills) + npm
240
+ plugins/docflow/ # the plugin one source, every target
241
+ .claude-plugin/plugin.json # Claude Code / Cowork plugin manifest
242
+ .codex-plugin/plugin.json # Codex plugin manifest (skills -> ./skills)
243
+ skills/ # the one skill source
244
+ bootstrap/
245
+ SKILL.md # bootstrap: assessment + output sequence + backfill
246
+ templates/ # files the bootstrap reads and writes into target repos
247
+ new-adr/SKILL.md # lifecycle skills — operate on a bootstrapped repo,
248
+ new-plan/SKILL.md # read CONVENTIONS.md, honour its choices
249
+ ship-item/SKILL.md
250
+ add-convention/SKILL.md
251
+ audit/SKILL.md
252
+ brainstorm/SKILL.md
253
+ agent-wave/SKILL.md
254
+ rollup/SKILL.md
226
255
  README.md
227
256
  USAGE.md
228
257
  ```
229
258
 
230
- Only the `bootstrap` skill uses `skills/bootstrap/templates/`. The
259
+ Only the `bootstrap` skill uses `plugins/docflow/skills/bootstrap/templates/`. The
231
260
  lifecycle skills act on the copies the bootstrap wrote into the target
232
261
  repo (e.g. its `adr/0000-template.md`), so they carry no templates of
233
262
  their own.
package/USAGE.md CHANGED
@@ -5,21 +5,59 @@ what each of the 10 assessment questions actually changes in the
5
5
  output, and how to customise or extend the templates. The lifecycle
6
6
  skills are covered in §5a.
7
7
 
8
- For installation, see the [README](README.md).
9
-
10
- ## 1. Triggering the bootstrap skill
11
-
12
- Once the plugin is installed (or `--plugin-dir`'d) into a Claude Code
13
- session, the skill is available in any repo. Three ways to trigger:
14
-
15
- 1. **Slash command:** `/bootstrap`.
16
- 2. **Natural language** matching the skill's description, e.g.
17
- - "set up documentation-led conventions in this repo"
18
- - "bootstrap ADRs and a plan queue"
19
- - "scaffold AGENTS.md and the _agent/ layout"
20
- - "retrofit this existing repo with the documentation conventions"
21
- 3. **From another agent's prompt** name the skill explicitly:
22
- *"invoke the `bootstrap` skill on this repository."*
8
+ ## Install (per platform)
9
+
10
+ docflow runs from **one skill source** (`plugins/docflow/skills/`) on
11
+ five coding agents. The
12
+ scaffolded **output** (`AGENTS.md`, the ADR catalogue, `plan/`, `_agent/`)
13
+ is plain Markdown read natively by any agent that loads `AGENTS.md`; the
14
+ **skills** are `SKILL.md` files the host discovers.
15
+
16
+ | Agent | Install | Invoke |
17
+ |-------|---------|--------|
18
+ | **Claude Code** | `/plugin marketplace add EvolveHQ/docflow` then `/plugin install docflow@evolvehq` | `/bootstrap` |
19
+ | **Claude Cowork** | the **same** Claude Code plugin (`/plugin marketplace add …`) — Cowork shares the plugin system | `/bootstrap` |
20
+ | **pi** | `pi install npm:@evolvehq/docflow` (or `pi install git:github.com/EvolveHQ/docflow`) | `/skill:bootstrap` |
21
+ | **Codex** | `codex plugin marketplace add EvolveHQ/docflow` then `codex plugin add docflow@evolvehq` (native plugin) | `$bootstrap` / `/skills` |
22
+ | **OpenCode** | auto-discovers `.claude`/`.agents`/`.opencode` skills (so a Claude Code / Codex install is picked up), or symlink into `~/.config/opencode/skills` | auto, by description |
23
+
24
+ Notes:
25
+
26
+ - **Codex** ships a native plugin (`.codex-plugin/`), so it's a one-command
27
+ install like Claude Code. **OpenCode** has no marketplace command for
28
+ `SKILL.md` skills (its plugin system is npm JS plugins), so it relies on
29
+ skills-directory auto-discovery or a symlink.
30
+ - A **shared skills directory** can serve two agents: `~/.agents/skills/`
31
+ is read by Codex and OpenCode; `~/.claude/skills/` by Claude Code and
32
+ OpenCode.
33
+ - The scaffolded output needs no porting on any of them — it is read
34
+ natively wherever `AGENTS.md` is the instruction file.
35
+
36
+ See the [README](README.md#install) for the full matrix, Windows paths,
37
+ and local-development options.
38
+
39
+ ## 1. Triggering the skills
40
+
41
+ Once docflow is installed (per the table above), the skills are available
42
+ in any repo. Invocation differs per agent:
43
+
44
+ | Agent | Slash / mention | Auto-trigger from description |
45
+ |-------|-----------------|-------------------------------|
46
+ | Claude Code / Cowork | `/bootstrap`, `/new-adr`, … | yes |
47
+ | pi | `/skill:bootstrap`, `/skill:new-adr`, … | no — invoke explicitly |
48
+ | Codex | `$bootstrap` / `/skills` | yes |
49
+ | OpenCode | (loaded by name) | yes, by description |
50
+
51
+ On agents that **auto-trigger**, natural-language matching the skill's
52
+ description also works, e.g.:
53
+
54
+ - "set up documentation-led conventions in this repo"
55
+ - "bootstrap ADRs and a plan queue"
56
+ - "scaffold AGENTS.md and the _agent/ layout"
57
+ - "retrofit this existing repo with the documentation conventions"
58
+
59
+ Or, on any agent, name the skill explicitly: *"invoke the `bootstrap`
60
+ skill on this repository."*
23
61
 
24
62
  ## 2. The flow
25
63
 
@@ -284,11 +322,11 @@ blocks up front, so G2/G3 rarely fire.)
284
322
 
285
323
  The templates are deliberately small and self-contained. To customise:
286
324
 
287
- - **Edit a template.** Files in `skills/bootstrap/templates/` are read
325
+ - **Edit a template.** Files in `plugins/docflow/skills/bootstrap/templates/` are read
288
326
  verbatim by the `bootstrap` skill, then placeholders are filled from
289
327
  the assessment answers. Change the template, the next bootstrap
290
328
  reflects it.
291
- - **Add a new template.** Put it in `skills/bootstrap/templates/` and
329
+ - **Add a new template.** Put it in `plugins/docflow/skills/bootstrap/templates/` and
292
330
  reference it from `bootstrap/SKILL.md` §Step 5 (Output sequence).
293
331
  - **Tighten a skill's auto-trigger.** Edit the `description:`
294
332
  frontmatter in that skill's `SKILL.md`. Skills match user requests
@@ -296,7 +334,7 @@ The templates are deliberately small and self-contained. To customise:
296
334
  scope. With several skills in one plugin, watch for trigger collision
297
335
  (e.g. "add a convention" vs. "add an ADR") and keep descriptions
298
336
  distinct; the slash commands are the unambiguous entry point.
299
- - **Add a new lifecycle skill.** Create `skills/<name>/SKILL.md`. Follow
337
+ - **Add a new lifecycle skill.** Create `plugins/docflow/skills/<name>/SKILL.md`. Follow
300
338
  the shared pattern: a Step 0 that checks the repo is bootstrapped and
301
339
  reads `CONVENTIONS.md`, then act in a way that honours the recorded
302
340
  choices. Lifecycle skills act on the target repo's own files (e.g. its
@@ -340,10 +378,20 @@ To remove the plugin entirely:
340
378
  /plugin uninstall docflow@evolvehq
341
379
  ```
342
380
 
381
+ **Other agents:**
382
+
383
+ - **Cowork** — same as Claude Code (`/plugin marketplace update` →
384
+ install).
385
+ - **pi** — re-run `pi install npm:@evolvehq/docflow` (or the `git:` form).
386
+ - **Codex** — `codex plugin marketplace upgrade`, then re-add with
387
+ `codex plugin add docflow@evolvehq`.
388
+ - **OpenCode** — if installed via a clone/symlink, `git pull` the clone;
389
+ skills reload on the next session.
390
+
343
391
  ### As the author (you, maintaining this repo)
344
392
 
345
- 1. Edit a skill body (`skills/<name>/SKILL.md`), the bootstrap templates
346
- (`skills/bootstrap/templates/*.md`), or supporting docs.
393
+ 1. Edit a skill body (`plugins/docflow/skills/<name>/SKILL.md`), the bootstrap templates
394
+ (`plugins/docflow/skills/bootstrap/templates/*.md`), or supporting docs.
347
395
  2. Bump the `version` field in `.claude-plugin/plugin.json` following
348
396
  semver — patch for fixes, minor for new questions / templates,
349
397
  major for breaking changes to the skill flow.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evolvehq/docflow",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "ADR-driven documentation workflow: scaffold an Architecture Decision Record (ADR) catalogue, a plan/ queue, and AGENTS.md conventions into any repo, then author, queue, ship, and audit ADRs with lifecycle skills. Works with the pi coding agent and Claude Code.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -21,7 +21,7 @@
21
21
  "evals": "node evals/run.mjs"
22
22
  },
23
23
  "files": [
24
- "skills/",
24
+ "plugins/docflow/skills/",
25
25
  "docs/preview.png",
26
26
  "README.md",
27
27
  "USAGE.md",
@@ -31,7 +31,7 @@
31
31
  "access": "public"
32
32
  },
33
33
  "pi": {
34
- "skills": ["./skills"],
34
+ "skills": ["./plugins/docflow/skills"],
35
35
  "image": "https://raw.githubusercontent.com/EvolveHQ/docflow/main/docs/preview.png"
36
36
  }
37
37
  }
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: add-convention"
3
+ short_description: "Assess whether a convention is worth codifying, then route it to the right home (AGENTS.md, CONVENTIONS.md, GLOSSARY, or an ADR)."
4
+ default_prompt: "Add a convention to this repository."
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: agent-wave"
3
+ short_description: "Orchestrate a wave of parallel worktree subagents over the plan/todo queue."
4
+ default_prompt: "Run the plan queue with a wave of parallel agents."
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: audit
3
- description: Audit a documentation-led repo against its own conventions — contiguous ADR numbering, INDEX sync, plan/ coverage, required sections, status validity, cross-reference resolution, language mandate, ADR-privacy leaks into user-visible code, and cross-worktree collisions (duplicate numbers, duplicate plan ownership, same ADR edited on two branches). Reports a punch list and offers to fix the mechanical issues. Use when the user says "audit the ADRs", "lint the conventions", "check repo consistency", "are the ADRs in sync", or invokes /audit.
3
+ description: Audit a documentation-led repo against its own conventions — contiguous ADR numbering, INDEX sync, plan/ coverage, required sections, status validity, cross-reference resolution, language mandate, ADR-privacy leaks into user-visible code, cross-worktree collisions (duplicate numbers, duplicate plan ownership, same ADR edited on two branches), and — for a multi-repo product — cross-repo federation checks (bidirectional membership, identity collisions, dangling cross-repo references, roll-up drift). Reports a punch list and offers to fix the mechanical issues. Use when the user says "audit the ADRs", "lint the conventions", "check repo consistency", "are the ADRs in sync", or invokes /audit.
4
4
  ---
5
5
 
6
6
  # audit
@@ -15,6 +15,10 @@ This is the enforcement `AGENTS.md` cannot guarantee on its own.
15
15
  cutoff, status lifecycle, integration model, multi-agent mode,
16
16
  language mandate, optional artefacts present (GLOSSARY, domains/),
17
17
  and any Q10 domain hard rules.
18
+ 3. If a `federation.md` exists, this repo is part of a multi-repo
19
+ product. Note whether it is the **home** or a **member** and read the
20
+ recorded identity scheme; the cross-repo checks (check 12) run from
21
+ the home repo.
18
22
 
19
23
  ## Step 1 — Run the checks (read-only)
20
24
 
@@ -62,6 +66,23 @@ relevant):
62
66
  more than one. A `merge=union` would concatenate them silently.
63
67
  Cross-check against `_agent/IN_FLIGHT.md`: every collision should
64
68
  correspond to a reservation/ownership violation recorded there.
69
+ 12. **Cross-repo (federation) checks** — only when a `federation.md`
70
+ exists; run from the **home** repo. Reach each member through the
71
+ local checkout named in `federation-index.md`. A member not checked
72
+ out locally is reported **"unverified this run"** — never silently
73
+ passed, never a hard failure.
74
+ - **Bidirectional membership.** Every repo listed in the member index
75
+ carries a `federation.md` back-pointer to this home, and every repo
76
+ whose back-pointer names this home is listed in the index. Flag
77
+ either half-edge (in-index-without-back-pointer, or
78
+ points-home-but-unlisted).
79
+ - **Identity collisions.** No two ADRs across the federation resolve
80
+ to the same identity under the recorded identity scheme.
81
+ - **Dangling cross-repo references.** Every cross-repo link resolves
82
+ to a real ADR in the named member; flag a target that does not
83
+ exist. (Same-repo relative links are check 7.)
84
+ - **Roll-up drift.** The roll-up agrees with each member's `INDEX.md`
85
+ metadata; flag rows that are stale, missing, or extra.
65
86
 
66
87
  ## Step 2 — Report
67
88
 
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: audit"
3
+ short_description: "Lint the repo against its own conventions — ADR numbering, INDEX sync, plan coverage, privacy leaks, and more."
4
+ default_prompt: "Audit this repository against its documentation conventions."
@@ -53,8 +53,16 @@ questions.
53
53
  CURRENT_FOCUS.md # slim live snapshot
54
54
  HANDOFF.md # fresh-agent entry point
55
55
  prompts/autonomous.md # only if a verify gate exists (see Q8)
56
+ federation.md # multi-repo only (Q11): this repo's back-pointer
57
+ federation-index.md # multi-repo only (Q11): member index — home repo only
56
58
  ```
57
59
 
60
+ For a **multi-repo product** (one product spread across several repos —
61
+ see Q11), two extra files appear: `federation.md`, a small back-pointer
62
+ every member repo carries, and `federation-index.md`, the authoritative
63
+ member list that lives only in the home/establishing repo. A standalone
64
+ repo has neither.
65
+
58
66
  ## Step 3 — Conventions to install
59
67
 
60
68
  1. **ADRs are the source of truth.** One decision per ADR. Splits become
@@ -112,7 +120,7 @@ questions.
112
120
  doubt, ask whether a non-builder would ever see this string — if
113
121
  yes, the ADR reference comes out.
114
122
 
115
- ## Step 4 — Assessment (10 questions)
123
+ ## Step 4 — Assessment (10 questions, plus an optional federation question)
116
124
 
117
125
  **Ask the questions one at a time, not in a batch.** For each question,
118
126
  state a **recommended** option (label it "Recommended") with one short
@@ -125,7 +133,7 @@ option with the literal "(Recommended)" suffix in its label. Otherwise
125
133
  ask in plain text, listing options as A/B/C and naming the recommended
126
134
  one.
127
135
 
128
- After all 10 answers are in, summarise the resulting plan in 5–10
136
+ After the answers are in, summarise the resulting plan in 5–10
129
137
  lines and ask for sign-off before writing any files.
130
138
 
131
139
  1. **Project identity.** Name, one-line description, doc language
@@ -214,6 +222,39 @@ lines and ask for sign-off before writing any files.
214
222
  mandatory user-story personas, separated audit streams?
215
223
  **Recommended: none from day one** — add later when a concrete
216
224
  requirement appears; pre-emptive hard rules accumulate as cruft.
225
+ 11. **Multi-repo product (optional).** Is this repo part of a product
226
+ that spans several repos? **Recommended: No** — most repos are
227
+ standalone; skip the federation setup entirely. If **yes**, two
228
+ sub-answers:
229
+
230
+ **Q11a — Establish or join?** Are you **establishing** a new
231
+ federation (this is the first repo) or **joining** an existing one?
232
+
233
+ **Q11b — Topology (establish only).** Where do product-wide
234
+ decisions live?
235
+ - **A — central decisions repo:** a dedicated repo holds all
236
+ product-wide decisions; code repos reference it, never duplicate.
237
+ - **B — distributed + federation:** each repo owns its own
238
+ decisions; a roll-up aggregates them.
239
+ - **(Recommended) C — home repo + local:** one repo is the home for
240
+ product-wide decisions; each repo also keeps purely-local ones.
241
+
242
+ **Q11c — Identity scheme (establish only).** How are ADRs identified
243
+ across the federation? **(Recommended) repo-prefixed slug**
244
+ `<repo-id>/NNNN-slug` — each repo keeps local contiguous numbering
245
+ with no central coordinator; the slug is the cross-federation key.
246
+ The scheme is recorded in the federation config and applied by the
247
+ authoring skills.
248
+
249
+ **Establish** designates this repo as the home/central repo, writes
250
+ the member index here, and records the topology **and identity
251
+ scheme** in the federation config. **Join** asks for the home pointer — **you confirm it; the
252
+ skill performs no cross-repo read and no host API call** — then
253
+ writes **only this repo's** back-pointer config and inherits the
254
+ topology without re-asking it. Joining never writes into any other
255
+ repo; adding this repo to the member index is a deliberate edit in
256
+ the home repo. A standalone repo (Q11 = No) writes none of these
257
+ files and behaves exactly as a single-repo bootstrap.
217
258
 
218
259
  ## Step 4.5 — Cross-check before sign-off
219
260
 
@@ -232,6 +273,9 @@ plan summary. Surface each, take the correction, then proceed:
232
273
  runs, or downgrade the completion event.
233
274
  - **Q2 single ADR shape + Q7 technology-ADR template requested.**
234
275
  Contradiction — pick one.
276
+ - **Q11 = join but no confirmable home pointer.** Joining needs a
277
+ home/federation pointer you can confirm. If none exists yet, you are
278
+ really *establishing* — switch Q11a to establish.
235
279
 
236
280
  ## Step 5 — Output sequence (after sign-off)
237
281
 
@@ -242,7 +286,9 @@ write it into the repo.
242
286
  1. `CONVENTIONS.md` — from `templates/CONVENTIONS.md`. Spec other files
243
287
  reference. Include the **§Concurrency Guardrails** section only if Q5
244
288
  is mode 2/3 **or** Q4b is PR-based; omit it for single-agent
245
- direct-to-main repos (no numbering race).
289
+ direct-to-main repos (no numbering race). Include the **§Federation
290
+ (multi-repo)** section only if Q11 = yes; fill `<product>` and state
291
+ the chosen identity scheme. Omit it for standalone repos.
246
292
  2. `AGENTS.md` — from `templates/AGENTS.md`. Include the concurrency
247
293
  guardrails hard-rule bullet (G2/G3) under the same condition as the
248
294
  CONVENTIONS section above; omit otherwise.
@@ -276,6 +322,22 @@ write it into the repo.
276
322
  **direct-to-main** variant (`git merge --ff-only` then push) or
277
323
  the **PR-based** variant (`gh pr create --draft` → wait for CI →
278
324
  mark ready → `gh pr merge`). Drop the unused variant.
325
+ 14. **Federation files** — **only if Q11 = yes.** Place both at the
326
+ configured artefact root (repository root by default).
327
+ - **Establish:** write `federation-index.md` (the member index, a
328
+ Markdown table) from `templates/federation-index.md` into this
329
+ repo, seeded with this repo as the home member; and write
330
+ `federation.md` from `templates/federation-config.md` with
331
+ `Role: home`, the chosen topology, and the chosen identity scheme
332
+ (default repo-prefixed slug). Record the identity scheme in both
333
+ files so it is the same on every read.
334
+ - **Join:** write **only** `federation.md` from
335
+ `templates/federation-config.md` with `Role: member`, the
336
+ confirmed home pointer, and the topology **and identity scheme**
337
+ inherited from the federation (read them from the home, do not
338
+ re-ask). Write nothing into any other repo, and do **not** create a
339
+ member index. Tell the user to add this repo to the home repo's
340
+ `federation-index.md` (a deliberate edit there).
279
341
 
280
342
  Commit each file (or logical group) with a Conventional Commit message;
281
343
  no `Co-Authored-By` trailer unless Q6 asked for one.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: bootstrap"
3
+ short_description: "Scaffold (or retrofit) ADR-driven documentation conventions — an ADR catalogue, a plan/ queue, AGENTS.md, and _agent/ coordination — into a repo."
4
+ default_prompt: "Set up documentation-led ADR conventions in this repository."
@@ -167,6 +167,32 @@ once merged:
167
167
  renumbers.
168
168
  -->
169
169
 
170
+ <!-- Federation (multi-repo) — bootstrap INCLUDES this section
171
+ (uncommented) ONLY when this repo is part of a multi-repo product (Q11).
172
+ Standalone repos OMIT it entirely.
173
+
174
+ ## Federation (multi-repo)
175
+
176
+ This repo belongs to the **<product>** federation. Topology and the
177
+ identity scheme are recorded in `federation.md`; the home repo's
178
+ `federation-index.md` is the authoritative member list.
179
+
180
+ - **Numbering is per-repo contiguous.** Each member repo numbers its own
181
+ ADRs contiguously from `0001`; numbers are **not** unique across the
182
+ federation. The cross-federation key is the **identity scheme** recorded
183
+ in `federation.md` — default repo-prefixed slug `<repo-id>/NNNN-slug`.
184
+ - **Cross-repo references use the logical identity**, resolved through the
185
+ member index (`repo-id → location`); they survive a target repo move
186
+ (edit one index row, not the references). **Same-repo references stay
187
+ relative paths** (`adr/NNNN-*.md`).
188
+ - `supersedes:` / `superseded-by:` may point across repos using the
189
+ logical identity.
190
+ - **Membership is declared, not discovered.** A member repo carries a
191
+ `federation.md` back-pointer; adding it to the home's
192
+ `federation-index.md` is a deliberate edit there. The two must agree —
193
+ audit cross-checks both directions.
194
+ -->
195
+
170
196
  ## Audit Trail Policy
171
197
 
172
198
  Every substantive change to an Accepted ADR appends a new row to its
@@ -0,0 +1,17 @@
1
+ # Federation
2
+
3
+ This repo is part of a multi-repo product. Lifecycle skills read this
4
+ back-pointer to resolve cross-repo behaviour. It is the answer to "what
5
+ is my home?"; the home repo's `federation-index.md` is the answer to
6
+ "which repos are in this product?".
7
+
8
+ - **Product:** <product-name>
9
+ - **Topology:** <A — central decisions repo | B — distributed + federation | C — home repo + local>
10
+ - **Identity scheme:** <repo-prefixed slug `<repo-id>/NNNN-slug` (default) | other scheme chosen at establishment>
11
+ - **Home:** <pointer to the home/central repo — URL or path; for the home repo itself, `this repo`>
12
+ - **Role:** <home | member>
13
+ - **Repo id:** <short identifier for this repo, used to qualify its records across the federation>
14
+
15
+ <!-- Hand-maintained. Membership is declared, not auto-discovered: a
16
+ member's bootstrap writes only this file in its own repo; adding the
17
+ repo to the home's federation-index.md is a deliberate edit there. -->
@@ -0,0 +1,17 @@
1
+ # Federation member index
2
+
3
+ Authoritative list of the repos in this product. Lives only in the
4
+ home/central repo. **Hand-maintained:** adding a member is a deliberate
5
+ edit here — no lifecycle skill writes across repos to update it. Lifecycle
6
+ skills read this to enumerate the product's repos.
7
+
8
+ - **Product:** <product-name>
9
+ - **Topology:** <A — central decisions repo | B — distributed + federation | C — home repo + local>
10
+ - **Identity scheme:** <repo-prefixed slug `<repo-id>/NNNN-slug` (default) | other scheme chosen at establishment>
11
+
12
+ | Repo id | Repo | Role | Pointer |
13
+ |---------|------|------|---------|
14
+ | <id> | <this repo> | home | this repo |
15
+
16
+ <!-- Each row should have a matching federation.md back-pointer in the
17
+ named repo, and vice versa. The audit step cross-checks both directions. -->
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: brainstorm"
3
+ short_description: "Decompose a problem into candidate ADRs and plan items with dependency edges; proposes drafts, writes nothing until approved."
4
+ default_prompt: "Break this problem into candidate ADRs and plan items."
@@ -17,6 +17,9 @@ Author one new ADR, consistent with this repo's conventions.
17
17
  status lifecycle, language mandate (if any), whether `domains/`
18
18
  groupings exist, and the multi-agent mode.
19
19
  3. Read `INDEX.md` and `ls adr/` to learn existing numbers and titles.
20
+ 4. If a `federation.md` exists, this repo is part of a multi-repo
21
+ product. Note the **identity scheme** and the **home** it records —
22
+ they govern numbering and cross-repo references below.
20
23
 
21
24
  ## Step 0.5 — Assessment (run first)
22
25
 
@@ -56,6 +59,10 @@ Questions (skip any the request already answers):
56
59
  - **Number.** Next contiguous integer after the highest existing ADR,
57
60
  zero-padded to 4 digits. No gaps, no reuse. For a split repo, keep
58
61
  capability ADRs below the cutoff and technology ADRs at/above it.
62
+ **In a federation** (a `federation.md` exists), number contiguously
63
+ **within this repo** — numbers are not unique across the federation.
64
+ The ADR's federation identity is the recorded scheme applied to this
65
+ number (default repo-prefixed slug `<repo-id>/NNNN-slug`).
59
66
 
60
67
  ## Step 2 — Gather content
61
68
 
@@ -75,6 +82,10 @@ If this ADR replaces an existing one:
75
82
  - Set `supersedes:` on the new ADR and `superseded-by:` on the old.
76
83
  - Advance the old ADR's `status:` to `Superseded`, append a Revision
77
84
  History row noting the successor.
85
+ - **Same-repo** links use relative paths (`adr/NNNN-*.md`). **In a
86
+ federation**, a link to an ADR in another repo uses the logical
87
+ identity (`<repo-id>/NNNN-slug`), resolved via the member index — not
88
+ a relative path.
78
89
  - A pure deprecation (no successor) sets the target to `Deprecated`
79
90
  with a Revision History row — and is usually done directly, not via
80
91
  this skill.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: new-adr"
3
+ short_description: "Author one ADR — next contiguous number, right shape, INDEX wiring, supersede linkage."
4
+ default_prompt: "Record a new architecture decision as an ADR."
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: new-plan"
3
+ short_description: "Queue a unit of work in plan/todo, tracing to an owning ADR."
4
+ default_prompt: "Queue a plan item for an existing ADR."
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: rollup
3
+ description: Generate the federation roll-up catalogue for a multi-repo product — aggregate every member repo's ADR metadata into one derived, product-wide view, run from the home repo. Use when the user says "roll up the federation", "generate the product-wide ADR view", "aggregate ADRs across the repos", "refresh the roll-up", or invokes /rollup. NOT for regenerating a single repo's own INDEX (that happens in place during authoring/ship) and NOT for linting consistency (use the audit skill).
4
+ ---
5
+
6
+ # rollup
7
+
8
+ Aggregate the ADR catalogues of every repo in a multi-repo product into
9
+ one **derived, read-only** product-wide view. The roll-up is regenerated
10
+ from source, never hand-edited — treat it exactly like a repo's own
11
+ `INDEX.md`.
12
+
13
+ ## Step 0 — Preconditions
14
+
15
+ 1. This skill runs in the **home repo** of a federation. Confirm a
16
+ `federation-index.md` (the authoritative member list) and a
17
+ `federation.md` with `Role: home` exist. If they do not, stop: either
18
+ this repo is standalone (nothing to roll up) or it is a member, not the
19
+ home — point the user at the home repo.
20
+ 2. Read `federation.md` to learn the **identity scheme** (default
21
+ repo-prefixed slug `<repo-id>/NNNN-slug`); roll-up rows use it.
22
+
23
+ ## Step 1 — Enumerate members
24
+
25
+ Read `federation-index.md`. For each row, take the `Repo id` and the
26
+ `Pointer` (the path/URL of that member's checkout). The member index is
27
+ the **only** source of membership — do not auto-discover repos.
28
+
29
+ ## Step 2 — Collect each member's catalogue
30
+
31
+ For every member whose checkout is **locally available** at its pointer:
32
+
33
+ - Read that member's `INDEX.md` (its authoritative local catalogue).
34
+ - For each ADR row, capture the number, title, status, date, and
35
+ dependencies, and attach the **owning repo id** and the **federation
36
+ identity** (the scheme from Step 0 applied to the local number).
37
+
38
+ A member's own `INDEX.md` stays authoritative for that member; this skill
39
+ only reads it.
40
+
41
+ ## Step 3 — Handle unreachable members
42
+
43
+ A member named in the index whose checkout is **not locally available** is
44
+ **not** dropped and **not** a failure. Record it in a clearly separated
45
+ "Not aggregated this run" list with its repo id and pointer, so the gap is
46
+ visible rather than silent.
47
+
48
+ ## Step 4 — Write the roll-up
49
+
50
+ Write the aggregate to a derived file in the home repo (e.g. `ROLLUP.md`):
51
+
52
+ - A header stating it is **generated — do not hand-edit**, with the run
53
+ date and the set of members aggregated.
54
+ - One table across the whole product: federation identity, title, status,
55
+ owning repo, date. Group or sort by owning repo for readability.
56
+ - The "Not aggregated this run" list from Step 3.
57
+
58
+ Do not alter any member's `INDEX.md` and do not write into any other repo.
59
+
60
+ ## Step 5 — Report
61
+
62
+ Tell the user how many members were aggregated, how many were skipped as
63
+ unreachable (and which), and the total ADR count in the roll-up. Remind
64
+ them the file is derived: re-run this skill to refresh it rather than
65
+ editing it by hand.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: rollup"
3
+ short_description: "Aggregate every member repo's ADRs into one product-wide federation roll-up (run from the home repo)."
4
+ default_prompt: "Generate the federation roll-up catalogue across the member repos."
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "docflow: ship-item"
3
+ short_description: "Run the completion event for a plan item: verify, integrate, todo→done, advance the owning ADR."
4
+ default_prompt: "Ship the next plan item."