@nklisch/pi-agile-workflow 0.15.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 +10 -0
- package/.codex-plugin/plugin.json +28 -0
- package/CHANGELOG.md +591 -0
- package/README.md +107 -0
- package/docs/ARCHITECTURE.md +716 -0
- package/docs/MIGRATION.md +419 -0
- package/docs/PRINCIPLES.md +464 -0
- package/docs/ROADMAP.md +95 -0
- package/docs/SPEC.md +855 -0
- package/docs/VISION.md +106 -0
- package/extensions/agile-workflow.test.ts +419 -0
- package/extensions/agile-workflow.ts +467 -0
- package/hooks/hooks.json +52 -0
- package/hooks/scripts/prompt-context.py +628 -0
- package/hooks/scripts/substrate-maintainer.py +359 -0
- package/hooks/scripts/test_prompt_context.py +757 -0
- package/package.json +30 -0
- package/scripts/install-work-view.sh +165 -0
- package/scripts/tests/agent-metadata.test.sh +75 -0
- package/scripts/tests/bump-version.test.sh +552 -0
- package/scripts/tests/channel-parity.test.sh +117 -0
- package/scripts/tests/convert-content-integrity.test.sh +246 -0
- package/scripts/tests/convert-install-routing.test.sh +159 -0
- package/scripts/tests/install-work-view.test.sh +411 -0
- package/scripts/tests/pi-package-metadata.test.sh +119 -0
- package/scripts/tests/work-board-shim.test.sh +239 -0
- package/scripts/tests/work-view-dist-version.test.sh +105 -0
- package/scripts/work-board.sh +64 -0
- package/scripts/work-view.sh +423 -0
- package/skills/autopilot/SKILL.md +330 -0
- package/skills/autopilot/agents/openai.yaml +6 -0
- package/skills/board/SKILL.md +62 -0
- package/skills/board/agents/openai.yaml +6 -0
- package/skills/bold-refactor/SKILL.md +244 -0
- package/skills/bold-refactor/agents/openai.yaml +6 -0
- package/skills/bug-scan/SKILL.md +378 -0
- package/skills/bug-scan/agents/openai.yaml +6 -0
- package/skills/bug-scan/references/async-promises.md +119 -0
- package/skills/bug-scan/references/concurrency-races.md +148 -0
- package/skills/bug-scan/references/data-layer.md +167 -0
- package/skills/bug-scan/references/error-handling.md +197 -0
- package/skills/bug-scan/references/gate-item-template.md +94 -0
- package/skills/bug-scan/references/language-footguns.md +219 -0
- package/skills/bug-scan/references/parked-item-template.md +103 -0
- package/skills/bug-scan/references/report-template.md +115 -0
- package/skills/bug-scan/references/resource-leaks.md +199 -0
- package/skills/bug-scan/references/state-closures.md +148 -0
- package/skills/bug-scan/references/time-numbers.md +158 -0
- package/skills/convert/SKILL.md +1463 -0
- package/skills/convert/agents/openai.yaml +6 -0
- package/skills/convert/references/legacy-overlap-migration.md +179 -0
- package/skills/deep-code-scan/SKILL.md +378 -0
- package/skills/deep-code-scan/agents/openai.yaml +6 -0
- package/skills/deep-code-scan/references/artifact-ledger.md +148 -0
- package/skills/deep-code-scan/references/consolidation.md +91 -0
- package/skills/deep-code-scan/references/decomposition.md +127 -0
- package/skills/deep-code-scan/references/item-templates.md +263 -0
- package/skills/deep-code-scan/references/lane-catalog.md +129 -0
- package/skills/deep-code-scan/references/review-gauntlet.md +108 -0
- package/skills/deep-code-scan/references/scanner-brief.md +152 -0
- package/skills/e2e-test-design/SKILL.md +517 -0
- package/skills/e2e-test-design/references/anti-tautology.md +261 -0
- package/skills/e2e-test-design/references/service-mocks.md +234 -0
- package/skills/e2e-test-design/references/test-taxonomy.md +211 -0
- package/skills/epic-design/SKILL.md +476 -0
- package/skills/epicize/SKILL.md +210 -0
- package/skills/epicize/agents/openai.yaml +6 -0
- package/skills/feature-design/SKILL.md +472 -0
- package/skills/fix/SKILL.md +173 -0
- package/skills/gate-cruft/SKILL.md +258 -0
- package/skills/gate-docs/SKILL.md +278 -0
- package/skills/gate-patterns/SKILL.md +389 -0
- package/skills/gate-refactor/SKILL.md +408 -0
- package/skills/gate-security/SKILL.md +275 -0
- package/skills/gate-tests/SKILL.md +367 -0
- package/skills/groom/SKILL.md +162 -0
- package/skills/groom/agents/openai.yaml +6 -0
- package/skills/ideate/SKILL.md +185 -0
- package/skills/ideate/agents/openai.yaml +6 -0
- package/skills/implement/SKILL.md +288 -0
- package/skills/implement-orchestrator/SKILL.md +604 -0
- package/skills/park/SKILL.md +111 -0
- package/skills/perf-design/SKILL.md +427 -0
- package/skills/perf-scout/SKILL.md +404 -0
- package/skills/perf-scout/agents/openai.yaml +6 -0
- package/skills/perf-scout/references/algorithmic-and-data-structures.md +126 -0
- package/skills/perf-scout/references/approximation-and-precomputation.md +136 -0
- package/skills/perf-scout/references/caching-and-memoization.md +123 -0
- package/skills/perf-scout/references/compiler-runtime-and-language.md +136 -0
- package/skills/perf-scout/references/database-and-storage-internals.md +144 -0
- package/skills/perf-scout/references/distributed-systems.md +150 -0
- package/skills/perf-scout/references/game-engine-and-realtime.md +136 -0
- package/skills/perf-scout/references/gpu-and-accelerators.md +130 -0
- package/skills/perf-scout/references/idea-ranking.md +75 -0
- package/skills/perf-scout/references/io-and-batching.md +135 -0
- package/skills/perf-scout/references/memory-and-data-locality.md +137 -0
- package/skills/perf-scout/references/parallelism-and-vectorization.md +126 -0
- package/skills/perf-scout/references/parked-item-template.md +117 -0
- package/skills/perf-scout/references/peer-review-pass.md +150 -0
- package/skills/perf-scout/references/report-template.md +148 -0
- package/skills/principles/SKILL.md +678 -0
- package/skills/principles/references/models.md +191 -0
- package/skills/principles/references/subagents.md +158 -0
- package/skills/prose-author/SKILL.md +185 -0
- package/skills/refactor-conventions-creator/SKILL.md +359 -0
- package/skills/refactor-conventions-creator/agents/openai.yaml +6 -0
- package/skills/refactor-conventions-creator/references/common-structures.md +91 -0
- package/skills/refactor-conventions-creator/references/common-styles.md +90 -0
- package/skills/refactor-design/SKILL.md +384 -0
- package/skills/release-deploy/SKILL.md +667 -0
- package/skills/release-deploy/agents/openai.yaml +6 -0
- package/skills/research/SKILL.md +166 -0
- package/skills/research/agents/openai.yaml +6 -0
- package/skills/review/SKILL.md +267 -0
- package/skills/review/references/deep-review.md +98 -0
- package/skills/review/references/review-lenses.md +68 -0
- package/skills/review/references/substrate-side-effects.md +161 -0
- package/skills/review/references/target-resolution.md +52 -0
- package/skills/scope/SKILL.md +486 -0
- package/work-view/Cargo.lock +486 -0
- package/work-view/Cargo.toml +9 -0
- package/work-view/crates/cli/.work-view-version +1 -0
- package/work-view/crates/cli/Cargo.toml +18 -0
- package/work-view/crates/cli/src/actionable.rs +500 -0
- package/work-view/crates/cli/src/args.rs +792 -0
- package/work-view/crates/cli/src/board/assets/board.css +855 -0
- package/work-view/crates/cli/src/board/assets/board.js +259 -0
- package/work-view/crates/cli/src/board/assets/card.js +139 -0
- package/work-view/crates/cli/src/board/assets/components.css +290 -0
- package/work-view/crates/cli/src/board/assets/dependency.js +1193 -0
- package/work-view/crates/cli/src/board/assets/detail.js +256 -0
- package/work-view/crates/cli/src/board/assets/filters.js +389 -0
- package/work-view/crates/cli/src/board/assets/index.html +77 -0
- package/work-view/crates/cli/src/board/assets/kanban.js +231 -0
- package/work-view/crates/cli/src/board/assets/markdown.js +260 -0
- package/work-view/crates/cli/src/board/assets/motion.css +131 -0
- package/work-view/crates/cli/src/board/assets/state.js +245 -0
- package/work-view/crates/cli/src/board/assets/table.js +304 -0
- package/work-view/crates/cli/src/board/assets/tokens.css +602 -0
- package/work-view/crates/cli/src/board/assets/views.js +41 -0
- package/work-view/crates/cli/src/board/assets.rs +162 -0
- package/work-view/crates/cli/src/board/feed.rs +204 -0
- package/work-view/crates/cli/src/board/mod.rs +246 -0
- package/work-view/crates/cli/src/board/open.rs +144 -0
- package/work-view/crates/cli/src/board/server.rs +407 -0
- package/work-view/crates/cli/src/main.rs +195 -0
- package/work-view/crates/cli/src/render.rs +354 -0
- package/work-view/crates/cli/src/scope.rs +157 -0
- package/work-view/crates/cli/src/stale.rs +581 -0
- package/work-view/crates/cli/tests/board-js/dependency-table.test.mjs +64 -0
- package/work-view/crates/cli/tests/board-js/expanded-browsing.test.mjs +79 -0
- package/work-view/crates/cli/tests/board-js/harness-smoke.test.mjs +11 -0
- package/work-view/crates/cli/tests/board-js/harness.mjs +437 -0
- package/work-view/crates/cli/tests/board-js/kanban-detail.test.mjs +75 -0
- package/work-view/crates/cli/tests/board-js/markdown-filter.test.mjs +60 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/CONVENTIONS.md +3 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/epics/epic-alpha.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/features/feat-a.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/features/feat-b.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/stories/story-alpha-1.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/active/stories/story-research-1.md +19 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/archive/feat-done.md +16 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/archive/feat-shipped.md +18 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/backlog/idea-backlog.md +7 -0
- package/work-view/crates/cli/tests/fixtures/golden/.work/releases/v1.0/v1.0.md +16 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/CONVENTIONS.md +6 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/active/features/feat-dep-done.md +17 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/active/features/feat-design-ready.md +17 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/active/features/feat-impl-ready.md +17 -0
- package/work-view/crates/cli/tests/fixtures/ready-drafting/.work/active/stories/story-review-ready.md +17 -0
- package/work-view/crates/cli/tests/fixtures/with-malformed/.work/CONVENTIONS.md +4 -0
- package/work-view/crates/cli/tests/fixtures/with-malformed/.work/active/epics/malformed-no-closing-fence.md +8 -0
- package/work-view/crates/cli/tests/fixtures/with-malformed/.work/active/features/good-item.md +16 -0
- package/work-view/crates/cli/tests/integration.rs +2833 -0
- package/work-view/crates/core/Cargo.toml +13 -0
- package/work-view/crates/core/src/error.rs +61 -0
- package/work-view/crates/core/src/filter.rs +804 -0
- package/work-view/crates/core/src/graph.rs +324 -0
- package/work-view/crates/core/src/index.rs +590 -0
- package/work-view/crates/core/src/lib.rs +54 -0
- package/work-view/crates/core/src/model.rs +202 -0
- package/work-view/crates/core/src/parse.rs +494 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/CONVENTIONS.md +15 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/epics/epic-core.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/features/feat-parser.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/features/feat-query.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/stories/malformed-no-id.md +15 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/stories/story-parse-unit.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/active/stories/story-security-gate.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/archive/feat-old.md +16 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/archive/feat-parser.md +17 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/backlog/idea-future-board.md +7 -0
- package/work-view/crates/core/tests/fixtures/golden/.work/releases/v1.0/v1.0.md +16 -0
- package/work-view/crates/core/tests/fixtures/precedence/.work/CONVENTIONS.md +10 -0
- package/work-view/crates/core/tests/fixtures/precedence/.work/archive/dup-item.md +18 -0
- package/work-view/crates/core/tests/fixtures/precedence/.work/releases/v2.0/dup-item.md +18 -0
- package/work-view/crates/core/tests/integration.rs +541 -0
- package/work-view/dist/.gitattributes +1 -0
- package/work-view/dist/README.md +42 -0
- package/work-view/dist/aarch64-apple-darwin/work-view +0 -0
- package/work-view/dist/aarch64-unknown-linux-musl/work-view +0 -0
- package/work-view/dist/x86_64-apple-darwin/work-view +0 -0
- package/work-view/dist/x86_64-unknown-linux-musl/work-view +0 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
# MIGRATION: agile-workflow
|
|
2
|
+
|
|
3
|
+
How `/agile-workflow:convert` bootstraps the substrate across four project
|
|
4
|
+
shapes: an existing `workflow`-plugin-formatted repo, an ad-hoc-tracked
|
|
5
|
+
repo, an untracked repo, and a greenfield repo. For each shape, this doc
|
|
6
|
+
specifies what `convert` reads, what it asks the user, what it produces,
|
|
7
|
+
what it leaves alone, and where it commits.
|
|
8
|
+
|
|
9
|
+
`convert` is interactive at boundaries. It scans, proposes, asks, then
|
|
10
|
+
commits the migration as a single git commit so the user can revert
|
|
11
|
+
cleanly if a read was wrong. Treat the source layout as ground truth for
|
|
12
|
+
*content*; treat the user as ground truth for *intent*.
|
|
13
|
+
|
|
14
|
+
## Project shape detection
|
|
15
|
+
|
|
16
|
+
`convert` runs detection signals in this order. The first match wins.
|
|
17
|
+
|
|
18
|
+
| Shape | Signal |
|
|
19
|
+
|---|---|
|
|
20
|
+
| `workflow`-plugin | `docs/designs/` exists OR `docs/ROADMAP.md` exists OR `docs/PROGRESS.md` exists |
|
|
21
|
+
| ad-hoc-tracked | `TODO.md`, `BACKLOG.md`, `NOTES.md`, or `tasks/` directory exists at repo root |
|
|
22
|
+
| no-tracking | Repo has source code (any non-empty `src/`, `lib/`, `app/`, or language-specific equivalent) but no detected tracking files |
|
|
23
|
+
| greenfield | No source code OR only `README.md` and config files |
|
|
24
|
+
|
|
25
|
+
The user can override detection with `convert --shape <shape>` if the
|
|
26
|
+
heuristic is wrong (rare).
|
|
27
|
+
|
|
28
|
+
## Foundation docs handling (all shapes)
|
|
29
|
+
|
|
30
|
+
`convert` requires foundation docs at minimum (`docs/VISION.md` or
|
|
31
|
+
`docs/SPEC.md`). If absent:
|
|
32
|
+
|
|
33
|
+
- Halts with the message: *"No foundation docs found at `docs/VISION.md`
|
|
34
|
+
or `docs/SPEC.md`. Run `/agile-workflow:ideate` first to produce
|
|
35
|
+
foundation docs, then re-run `/agile-workflow:convert`."*
|
|
36
|
+
|
|
37
|
+
If foundation docs exist, `convert` reads them (does not modify) and uses
|
|
38
|
+
their content to inform initial item seeding decisions. Foundation docs
|
|
39
|
+
roll forward only when items get scoped or implemented; `convert` itself
|
|
40
|
+
never edits them.
|
|
41
|
+
|
|
42
|
+
## Conventions interview (all shapes)
|
|
43
|
+
|
|
44
|
+
`convert` runs an interactive interview to populate `.work/CONVENTIONS.md`.
|
|
45
|
+
Questions, in order:
|
|
46
|
+
|
|
47
|
+
1. **Release mapping** — `branch-held | tag-based | release-branch | none`.
|
|
48
|
+
Default offered: `tag-based`. Asked every time; never inferred silently.
|
|
49
|
+
2. **Tag taxonomy** — `convert` proposes a starter set based on detected
|
|
50
|
+
project type (e.g., `[security, perf, refactor, content, infra]`)
|
|
51
|
+
and asks the user to confirm or edit. Project-specific tags get
|
|
52
|
+
one-line semantics each.
|
|
53
|
+
3. **Slug conventions** — defaults to `kebab-case` with parent-prefix for
|
|
54
|
+
children. User can override.
|
|
55
|
+
4. **Stage overrides** — none by default. User can declare custom stages
|
|
56
|
+
here if they have a strong reason.
|
|
57
|
+
5. **Gate config** — defaults to
|
|
58
|
+
`gates_for_release: [security, tests, cruft, docs, patterns]`,
|
|
59
|
+
the default `gate_finding_routing` map, and default
|
|
60
|
+
`gate_refactor_scan_library_roots`. User can reorder or omit gates,
|
|
61
|
+
override finding routing, or point `gate-refactor` at shared scan-rule roots
|
|
62
|
+
per project.
|
|
63
|
+
|
|
64
|
+
Answers land in `.work/CONVENTIONS.md` in the format specified by SPEC.md.
|
|
65
|
+
|
|
66
|
+
## Path A: Workflow plugin → agile-workflow
|
|
67
|
+
|
|
68
|
+
### What convert reads
|
|
69
|
+
|
|
70
|
+
| Source | Used for |
|
|
71
|
+
|---|---|
|
|
72
|
+
| `docs/designs/<name>.md` | In-flight features. The design content becomes the feature item's body. |
|
|
73
|
+
| `docs/designs/completed/<name>.md` | Done features. The design content becomes the body of an archived or retro-released item. |
|
|
74
|
+
| `docs/ROADMAP.md` | Phase decomposition. Each phase becomes an epic at `stage: drafting` (if no children built yet) or `stage: implementing` (if some children done). Phase ordering becomes epic-level `depends_on` chain. |
|
|
75
|
+
| `docs/PROGRESS.md` | Resume hints. Deviation logs become notes in the relevant items' bodies. |
|
|
76
|
+
| `docs/VISION.md`, `docs/SPEC.md`, `docs/ARCHITECTURE.md` | Read-only. Used as standing context. |
|
|
77
|
+
| `git log docs/designs/` | Recency signals — recently edited designs are likely in flight. |
|
|
78
|
+
|
|
79
|
+
### What convert asks the user
|
|
80
|
+
|
|
81
|
+
- Confirm the inferred mapping for each `docs/designs/<name>.md` →
|
|
82
|
+
feature item: "This will become `feature-<slug>` at
|
|
83
|
+
`stage: implementing`. Confirm or rename?"
|
|
84
|
+
- Confirm the retro-release strategy for `docs/designs/completed/`:
|
|
85
|
+
*"Synthesize `.work/releases/v0/` containing all completed designs as
|
|
86
|
+
done features (default), or move them straight to `.work/archive/`?"*
|
|
87
|
+
- Confirm the inferred epic-level dependencies from `ROADMAP.md` phase
|
|
88
|
+
ordering: "Phase 2 depends on Phase 1 — yes? Phase 4 depends on
|
|
89
|
+
Phase 3 — yes? (etc.)"
|
|
90
|
+
|
|
91
|
+
### What convert produces
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
.work/
|
|
95
|
+
├── active/
|
|
96
|
+
│ ├── epics/<phase-slug>.md from ROADMAP.md phases
|
|
97
|
+
│ ├── features/<design-slug>.md from docs/designs/<name>.md (open)
|
|
98
|
+
│ └── stories/ (empty initially; populated via design)
|
|
99
|
+
├── backlog/ (empty initially)
|
|
100
|
+
├── releases/
|
|
101
|
+
│ └── v0/<design-slug>.md from docs/designs/completed/ (retro-release default)
|
|
102
|
+
├── archive/ (or here, if user opted out of retro-release)
|
|
103
|
+
├── bin/work-view
|
|
104
|
+
└── CONVENTIONS.md
|
|
105
|
+
AGENTS.md (canonical agile-workflow section)
|
|
106
|
+
CLAUDE.md -> AGENTS.md (or shim if symlinks are unavailable)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
The retro-release `v0` carries all previously-completed work as a single
|
|
110
|
+
archived bundle. Its release item has `stage: released` and a `created`
|
|
111
|
+
date matching the earliest design in the set. This preserves continuity
|
|
112
|
+
without falsely implying those items shipped together.
|
|
113
|
+
|
|
114
|
+
### What convert leaves alone
|
|
115
|
+
|
|
116
|
+
- `docs/designs/` and `docs/designs/completed/` — the source files stay
|
|
117
|
+
untouched after migration. They become read-only history. The user can
|
|
118
|
+
delete them after verifying the migration via the report.
|
|
119
|
+
- `docs/ROADMAP.md` — left in place as historical context. The substrate
|
|
120
|
+
no longer reads it; epics in `.work/active/epics/` are the new source
|
|
121
|
+
of truth. The user can delete it if desired.
|
|
122
|
+
- `docs/PROGRESS.md` — left in place as historical context. The substrate
|
|
123
|
+
is the new progress source. Delete if desired.
|
|
124
|
+
- All foundation docs (VISION/SPEC/ARCHITECTURE/etc.)
|
|
125
|
+
- Source code, tests, configuration
|
|
126
|
+
|
|
127
|
+
### Commit shape
|
|
128
|
+
|
|
129
|
+
A single git commit titled `chore: bootstrap agile-workflow substrate`
|
|
130
|
+
containing:
|
|
131
|
+
- New `.work/` skeleton with seeded items
|
|
132
|
+
- New or updated `AGENTS.md` agile-workflow section
|
|
133
|
+
- `CLAUDE.md` compatibility symlink or shim
|
|
134
|
+
- `MIGRATION_REPORT.md` at repo root
|
|
135
|
+
|
|
136
|
+
The user can revert this single commit cleanly if the read was wrong.
|
|
137
|
+
|
|
138
|
+
## Path B: Ad-hoc tracking → agile-workflow
|
|
139
|
+
|
|
140
|
+
### What convert reads
|
|
141
|
+
|
|
142
|
+
| Source | Used for |
|
|
143
|
+
|---|---|
|
|
144
|
+
| `TODO.md` | Each `- [ ]` line becomes a backlog item; each `- [x]` line is reported but not seeded (user can request archive item creation if they want continuity) |
|
|
145
|
+
| `BACKLOG.md` | Same as TODO.md but with bullet items |
|
|
146
|
+
| `NOTES.md`, `tasks/*.md` | Each section heading or each file becomes a backlog item with the section/file body as the idea description |
|
|
147
|
+
| Foundation docs | Read-only, standing context |
|
|
148
|
+
|
|
149
|
+
No epic decomposition is inferred. No dependencies are inferred. The user
|
|
150
|
+
runs `/agile-workflow:epicize` after `convert` to decompose foundation
|
|
151
|
+
docs into epics; backlog items remain in backlog until the user runs
|
|
152
|
+
`/agile-workflow:scope` on them.
|
|
153
|
+
|
|
154
|
+
### What convert asks the user
|
|
155
|
+
|
|
156
|
+
- Confirm the count and shape: *"Found 23 items in `TODO.md`. Seed all
|
|
157
|
+
as backlog items, or filter? (Showing first 5 to confirm formatting.)"*
|
|
158
|
+
- For each `tasks/<file>.md`: *"Seed `tasks/foo.md` as backlog item
|
|
159
|
+
`idea-foo`?"*
|
|
160
|
+
- Whether to delete the source files after migration (default: no)
|
|
161
|
+
|
|
162
|
+
### What convert produces
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
.work/
|
|
166
|
+
├── active/ empty initially
|
|
167
|
+
├── backlog/<idea-slug>.md one per item from sources
|
|
168
|
+
├── releases/ empty
|
|
169
|
+
├── archive/ empty
|
|
170
|
+
├── bin/work-view
|
|
171
|
+
└── CONVENTIONS.md
|
|
172
|
+
AGENTS.md
|
|
173
|
+
CLAUDE.md -> AGENTS.md (or shim)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Each backlog item has minimal frontmatter: `id`, `created`, `tags` (empty
|
|
177
|
+
or inferred from source structure if user opts in). Body is the idea
|
|
178
|
+
description from the source.
|
|
179
|
+
|
|
180
|
+
### What convert leaves alone
|
|
181
|
+
|
|
182
|
+
- `TODO.md`, `BACKLOG.md`, `NOTES.md`, `tasks/` — left in place by default.
|
|
183
|
+
User can delete after verifying.
|
|
184
|
+
- Foundation docs, source code, tests, config
|
|
185
|
+
|
|
186
|
+
### Commit shape
|
|
187
|
+
|
|
188
|
+
Same single-commit pattern as Path A.
|
|
189
|
+
|
|
190
|
+
## Path C: No tracking → agile-workflow
|
|
191
|
+
|
|
192
|
+
### What convert reads
|
|
193
|
+
|
|
194
|
+
| Source | Used for |
|
|
195
|
+
|---|---|
|
|
196
|
+
| Foundation docs | Read-only, standing context |
|
|
197
|
+
| Source code structure | Light scan for likely-epic boundaries (top-level `src/` modules), but does not auto-create epics |
|
|
198
|
+
| `git log` recent activity | Identifies recently active areas as candidates for backlog seeding (offered to user) |
|
|
199
|
+
|
|
200
|
+
### What convert asks the user
|
|
201
|
+
|
|
202
|
+
- *"No tracking system detected. Bootstrap an empty substrate, or seed
|
|
203
|
+
initial backlog items based on recent git activity?"*
|
|
204
|
+
- If user opts to seed from git: *"Found 3 areas with recent commits:
|
|
205
|
+
src/auth (12 commits last 2wk), src/payments (8 commits), src/admin
|
|
206
|
+
(3 commits). Seed any as backlog ideas to revisit?"*
|
|
207
|
+
|
|
208
|
+
### What convert produces
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
.work/
|
|
212
|
+
├── active/ empty
|
|
213
|
+
├── backlog/ empty (or sparse seed if user opted in)
|
|
214
|
+
├── releases/ empty
|
|
215
|
+
├── archive/ empty
|
|
216
|
+
├── bin/work-view
|
|
217
|
+
└── CONVENTIONS.md
|
|
218
|
+
AGENTS.md
|
|
219
|
+
CLAUDE.md -> AGENTS.md (or shim)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
The substrate is empty but bootstrapped. Subsequent work flows through
|
|
223
|
+
`scope` (for direct work) or `park` (for capture) as normal.
|
|
224
|
+
|
|
225
|
+
### Commit shape
|
|
226
|
+
|
|
227
|
+
Same single-commit pattern.
|
|
228
|
+
|
|
229
|
+
## Path D: Greenfield → agile-workflow
|
|
230
|
+
|
|
231
|
+
### What convert reads
|
|
232
|
+
|
|
233
|
+
- Foundation docs (must exist; halts if not, instructing user to run
|
|
234
|
+
`/agile-workflow:ideate` first)
|
|
235
|
+
|
|
236
|
+
### What convert asks the user
|
|
237
|
+
|
|
238
|
+
- Conventions interview (release mapping, tag taxonomy, gate config)
|
|
239
|
+
- *"Run `/agile-workflow:epicize` next to decompose foundation docs into
|
|
240
|
+
epics?"* — after substrate is bootstrapped
|
|
241
|
+
|
|
242
|
+
### What convert produces
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
.work/
|
|
246
|
+
├── active/ empty
|
|
247
|
+
├── backlog/ empty
|
|
248
|
+
├── releases/ empty
|
|
249
|
+
├── archive/ empty
|
|
250
|
+
├── bin/work-view
|
|
251
|
+
└── CONVENTIONS.md
|
|
252
|
+
AGENTS.md
|
|
253
|
+
CLAUDE.md -> AGENTS.md (or shim)
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Empty but ready. The expected next step is `/agile-workflow:epicize` to
|
|
257
|
+
seed the initial epic set from foundation docs.
|
|
258
|
+
|
|
259
|
+
### Commit shape
|
|
260
|
+
|
|
261
|
+
Same single-commit pattern.
|
|
262
|
+
|
|
263
|
+
## MIGRATION_REPORT.md
|
|
264
|
+
|
|
265
|
+
After every `convert` run, a `MIGRATION_REPORT.md` is written at the
|
|
266
|
+
project root (NOT in `docs/`, since it's transient). The user reviews
|
|
267
|
+
this to confirm the migration was correct.
|
|
268
|
+
|
|
269
|
+
Format:
|
|
270
|
+
|
|
271
|
+
```markdown
|
|
272
|
+
# Migration Report — agile-workflow bootstrap
|
|
273
|
+
|
|
274
|
+
**Date:** 2026-05-09
|
|
275
|
+
**Source shape:** workflow-plugin
|
|
276
|
+
**Destination:** .work/ substrate
|
|
277
|
+
|
|
278
|
+
## Foundation docs detected
|
|
279
|
+
- docs/VISION.md (preserved)
|
|
280
|
+
- docs/SPEC.md (preserved)
|
|
281
|
+
- docs/ARCHITECTURE.md (preserved)
|
|
282
|
+
|
|
283
|
+
## Items seeded
|
|
284
|
+
|
|
285
|
+
### Epics (from docs/ROADMAP.md)
|
|
286
|
+
- epic-uploads-architecture (stage: implementing, depends_on: [])
|
|
287
|
+
- epic-rate-limits (stage: drafting, depends_on: [epic-uploads-architecture])
|
|
288
|
+
- epic-admin-dashboard (stage: drafting, depends_on: [epic-rate-limits])
|
|
289
|
+
|
|
290
|
+
### Features (from docs/designs/)
|
|
291
|
+
- feature-uploads-retry (stage: implementing, parent: epic-uploads-architecture)
|
|
292
|
+
- feature-quota-tracking (stage: implementing, parent: epic-rate-limits)
|
|
293
|
+
|
|
294
|
+
### Retro-release (from docs/designs/completed/)
|
|
295
|
+
- releases/v0/feature-auth-core (stage: done, release_binding: v0)
|
|
296
|
+
- releases/v0/feature-storage-layer (stage: done, release_binding: v0)
|
|
297
|
+
- releases/v0/release-v0 (stage: released)
|
|
298
|
+
|
|
299
|
+
### Backlog (none — workflow-plugin source had no backlog files)
|
|
300
|
+
|
|
301
|
+
## Files left in place (review and delete if desired)
|
|
302
|
+
- docs/designs/ (history; substrate now owns design content)
|
|
303
|
+
- docs/designs/completed/ (history; retro-released to releases/v0/)
|
|
304
|
+
- docs/ROADMAP.md (replaced by epics in .work/active/epics/)
|
|
305
|
+
- docs/PROGRESS.md (replaced by substrate state)
|
|
306
|
+
|
|
307
|
+
## Conventions chosen
|
|
308
|
+
- Release mapping: tag-based
|
|
309
|
+
- Tag taxonomy: [content, security, perf, refactor, infra]
|
|
310
|
+
- Gate order: security → tests → cruft → docs → patterns
|
|
311
|
+
|
|
312
|
+
## Next steps
|
|
313
|
+
1. Review the seeded items in .work/active/
|
|
314
|
+
2. Verify epic dependencies match your intent
|
|
315
|
+
3. Delete legacy docs/designs/ etc. once verified
|
|
316
|
+
4. Start an autopilot goal for `epic-uploads-architecture` to drain the first
|
|
317
|
+
epic, or pick up an in-flight feature manually
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
The report stays at repo root through the user's review. Once verified,
|
|
321
|
+
the user deletes it (or commits its deletion).
|
|
322
|
+
|
|
323
|
+
## Idempotency: convert --update
|
|
324
|
+
|
|
325
|
+
`convert --update` re-runs in a substrate-bootstrapped repo to refresh
|
|
326
|
+
plugin-shipped artifacts.
|
|
327
|
+
|
|
328
|
+
### What --update refreshes
|
|
329
|
+
|
|
330
|
+
- `AGENTS.md` agile-workflow section — overwritten with the current plugin's
|
|
331
|
+
slim version between markers, but only after `.agents/rules/agile-workflow.md`
|
|
332
|
+
is written and verified (the content-integrity gate applies to the slim, so the
|
|
333
|
+
managed-section overwrite can never drop dense rule content)
|
|
334
|
+
- `.agents/rules/agile-workflow.md` — the plugin-managed dense rules
|
|
335
|
+
(tag semantics, test integrity, advisory review, entry points), refreshed
|
|
336
|
+
between `<!-- agile-workflow:rules:start/end -->` markers; other
|
|
337
|
+
`.agents/rules/*.md` (user-owned and migrated legacy rules) are preserved
|
|
338
|
+
- `.work/bin/work-view` — overwritten with the current plugin's script
|
|
339
|
+
- `CLAUDE.md` compatibility — converted to a symlink to `AGENTS.md`, or to a
|
|
340
|
+
shim if symlinks are unavailable
|
|
341
|
+
- Legacy `.claude/rules/*.md` — migrated via the content-integrity gate: each
|
|
342
|
+
Markdown-aware block routes to its canonical home (structural patterns →
|
|
343
|
+
`.agents/skills/patterns/`, rule prose → `.agents/rules/<name>.md`), every
|
|
344
|
+
block is verified to have landed, then the legacy path is replaced with a shim
|
|
345
|
+
- `hooks/hooks.json` — already in the plugin, but if the plugin's hook
|
|
346
|
+
scripts changed, the user is alerted to restart their agent session
|
|
347
|
+
|
|
348
|
+
### What --update preserves
|
|
349
|
+
|
|
350
|
+
- `.work/CONVENTIONS.md` — user-owned, never touched by `--update`
|
|
351
|
+
- `.work/active/`, `.work/backlog/`, `.work/releases/`, `.work/archive/`
|
|
352
|
+
— substrate state is sacred
|
|
353
|
+
- The rest of `AGENTS.md` outside the markers
|
|
354
|
+
- Any user edits to foundation docs
|
|
355
|
+
|
|
356
|
+
### Conflict handling
|
|
357
|
+
|
|
358
|
+
If the user manually edited inside the AGENTS.md markers, `--update`
|
|
359
|
+
warns and asks whether to overwrite. Default: do not overwrite — show
|
|
360
|
+
the diff and let the user merge manually.
|
|
361
|
+
|
|
362
|
+
If an existing regular `CLAUDE.md` contains content not yet present in
|
|
363
|
+
`AGENTS.md`, `--update` imports that content into `AGENTS.md` before replacing
|
|
364
|
+
`CLAUDE.md` with the compatibility symlink or shim.
|
|
365
|
+
|
|
366
|
+
If an older `.claude/rules/*.md` contains content not yet migrated, `--update`
|
|
367
|
+
runs the **content-integrity gate** before any destructive step: it parses the
|
|
368
|
+
file into Markdown-aware blocks, classifies each as a structural pattern (→
|
|
369
|
+
`.agents/skills/patterns/`), rule prose (→ `.agents/rules/<name>.md`), or
|
|
370
|
+
ambiguous, builds a block-level preservation manifest, and verifies every block
|
|
371
|
+
landed at its canonical destination. Only when every block is accounted for is
|
|
372
|
+
the legacy path replaced with a shim; an ambiguous block leaves the source in
|
|
373
|
+
place rather than risk loss. Verify-before-destroy: the replacement must exist
|
|
374
|
+
and hold the content before the source is removed.
|
|
375
|
+
|
|
376
|
+
If `.work/CONVENTIONS.md` is missing on `--update`, that's a corruption
|
|
377
|
+
signal — `convert --update` halts and instructs the user to either
|
|
378
|
+
restore from git or re-run `convert` (without `--update`) to bootstrap
|
|
379
|
+
afresh.
|
|
380
|
+
|
|
381
|
+
## Failure recovery
|
|
382
|
+
|
|
383
|
+
If `convert` fails partway through:
|
|
384
|
+
|
|
385
|
+
- The single-commit pattern means an interrupted run leaves the repo
|
|
386
|
+
in its pre-migration state. Re-running `convert` from clean is safe.
|
|
387
|
+
- If the user notices errors AFTER the commit lands, `git revert HEAD`
|
|
388
|
+
removes the migration cleanly. Source files are preserved by all
|
|
389
|
+
paths, so re-running with adjustments is straightforward.
|
|
390
|
+
- If items were partially seeded but the conventions interview failed,
|
|
391
|
+
`convert` leaves no `.work/CONVENTIONS.md` — subsequent operational
|
|
392
|
+
skills will halt with "no substrate found," signaling that the
|
|
393
|
+
bootstrap is incomplete.
|
|
394
|
+
|
|
395
|
+
## Failure modes worth flagging in the conventions interview
|
|
396
|
+
|
|
397
|
+
- **No release mapping declared** (user picked `none`). Effect:
|
|
398
|
+
`/release-deploy` cannot ship — it will halt and instruct the user
|
|
399
|
+
to declare a mapping. This is fine for projects that don't ship
|
|
400
|
+
versioned software (internal tools, research codebases); the user
|
|
401
|
+
acknowledges this trade-off.
|
|
402
|
+
- **Empty tag taxonomy.** Effect: tag-based skill routing degrades.
|
|
403
|
+
`feature-design` always runs for features (no `[refactor]` or `[perf]` tag
|
|
404
|
+
to route to specialized skills). This is a starter trade-off — the user can
|
|
405
|
+
add tags later by editing CONVENTIONS.md.
|
|
406
|
+
- **Custom stage names.** Effect: every skill must read CONVENTIONS.md
|
|
407
|
+
to know the project's stage names; the rules file's stage flow
|
|
408
|
+
diagrams become aspirational rather than authoritative. Discouraged
|
|
409
|
+
unless the project genuinely needs it.
|
|
410
|
+
|
|
411
|
+
`convert`'s interview surfaces these consequences before the user
|
|
412
|
+
locks in their choices.
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
After convert succeeds, the substrate is real and the next skill in
|
|
417
|
+
the workflow (typically `/agile-workflow:epicize` for greenfield, or
|
|
418
|
+
direct operational skills for migrations from existing projects) can
|
|
419
|
+
proceed.
|