devflow-kit 2.4.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +229 -0
- package/README.md +111 -18
- package/dist/agents/git.md +822 -0
- package/dist/cli/commands/agents.js +6 -1
- package/dist/cli/commands/ambient.js +160 -145
- package/dist/cli/commands/attribution-prompts.js +1 -1
- package/dist/cli/commands/capture.js +29 -55
- package/dist/cli/commands/compliance-prompts.js +1 -1
- package/dist/cli/commands/compliance.js +48 -55
- package/dist/cli/commands/context.js +17 -32
- package/dist/cli/commands/debug.js +65 -26
- package/dist/cli/commands/flags.js +3 -3
- package/dist/cli/commands/hud.js +34 -10
- package/dist/cli/commands/init-seed.js +61 -27
- package/dist/cli/commands/init.js +649 -240
- package/dist/cli/commands/install-report.js +200 -0
- package/dist/cli/commands/knowledge/index.js +2 -2
- package/dist/cli/commands/knowledge/toggle.js +35 -37
- package/dist/cli/commands/learning.js +79 -57
- package/dist/cli/commands/legacy-hooks.js +11 -14
- package/dist/cli/commands/memory.js +134 -135
- package/dist/cli/commands/prompt-io.js +4 -4
- package/dist/cli/commands/proxy.js +23 -41
- package/dist/cli/commands/security.js +81 -29
- package/dist/cli/commands/skills.js +71 -7
- package/dist/cli/commands/tracker-prompts.js +145 -0
- package/dist/cli/commands/tracker.js +277 -0
- package/dist/cli/commands/uninstall.js +520 -169
- package/dist/cli.js +2 -0
- package/dist/commands/bug-analysis.md +58 -14
- package/dist/commands/code-review.md +110 -32
- package/dist/commands/debug.md +55 -11
- package/dist/commands/dynamic-build.md +344 -73
- package/dist/commands/dynamic-plan.md +77 -27
- package/dist/commands/dynamic-profile.md +25 -11
- package/dist/commands/dynamic-tickets.md +76 -15
- package/dist/commands/explore.md +37 -7
- package/dist/commands/implement.md +314 -62
- package/dist/commands/plan.md +146 -32
- package/dist/commands/release.md +64 -17
- package/dist/commands/research.md +34 -8
- package/dist/commands/resolve.md +196 -68
- package/dist/commands/self-review.md +45 -9
- package/dist/core/agent-models.js +55 -12
- package/dist/core/assets.js +58 -2
- package/dist/core/compliance-compose.js +27 -27
- package/dist/core/evidence-policy.js +363 -0
- package/dist/core/feature-config.js +200 -65
- package/dist/core/feature-switch.js +112 -0
- package/dist/core/flags.js +34 -6
- package/dist/core/fs-atomic.js +27 -0
- package/dist/core/hook-log-dirs.js +104 -0
- package/dist/core/learning-tuning-config.js +5 -3
- package/dist/core/ledger-root.js +102 -0
- package/dist/core/manifest.js +38 -10
- package/dist/core/mds-variants.js +798 -0
- package/dist/core/migrations.js +49 -23
- package/dist/core/model-discovery.js +12 -1
- package/dist/core/plugins.js +361 -12
- package/dist/core/project-paths.js +1 -18
- package/dist/core/proxy-log.js +8 -6
- package/dist/core/proxy-state.js +11 -8
- package/dist/core/reference-sweep.js +136 -0
- package/dist/core/same-location.js +25 -0
- package/dist/core/tracker.js +494 -0
- package/dist/hud/components/config-counts.js +15 -4
- package/dist/hud/components/learning-counts.js +14 -0
- package/dist/hud/config.js +2 -1
- package/dist/hud/cost-history.js +2 -4
- package/dist/hud/git.js +52 -7
- package/dist/hud/index.js +7 -9
- package/dist/skills/git/references/decision-markers.md +19 -0
- package/dist/skills/git/references/learn-conventions.md +56 -0
- package/dist/skills/git/references/pr/check-ci-status.md +14 -0
- package/dist/skills/git/references/pr/check-merge-readiness.md +28 -0
- package/dist/skills/git/references/pr/ensure-pr-ready.md +24 -0
- package/dist/skills/git/references/pr/fetch-review-threads.md +22 -0
- package/dist/skills/git/references/pr/post-resolution-summary.md +40 -0
- package/dist/skills/git/references/pr/post-review-summary.md +42 -0
- package/dist/skills/git/references/pr/resolve-review-threads.md +35 -0
- package/dist/skills/git/references/pr/update-pr-evidence.md +14 -0
- package/dist/skills/git/references/pr/validate-branch.md +18 -0
- package/dist/skills/git/references/publication-gate.md +13 -0
- package/dist/skills/git/references/tracker/_mcp.md +153 -0
- package/dist/skills/git/references/tracker/github/associate-release.md +18 -0
- package/dist/skills/git/references/tracker/github/backlink-shipped-issues.md +40 -0
- package/dist/skills/git/references/tracker/github/create-release.md +11 -0
- package/dist/skills/git/references/tracker/github/ensure-pr-ready.md +16 -0
- package/dist/skills/git/references/tracker/github/ensure-traceable-issue.md +69 -0
- package/dist/skills/git/references/tracker/github/fetch-issue.md +32 -0
- package/dist/skills/git/references/tracker/github/fetch-issues-batch.md +17 -0
- package/dist/skills/git/references/tracker/github/gather-release-evidence.md +19 -0
- package/dist/skills/git/references/tracker/github/manage-debt.md +101 -0
- package/dist/skills/git/references/tracker/github/post-wave-report.md +28 -0
- package/dist/skills/git/references/tracker/github/setup-task.md +26 -0
- package/dist/skills/git/references/tracker/jira/associate-release.md +18 -0
- package/dist/skills/git/references/tracker/jira/backlink-shipped-issues.md +49 -0
- package/dist/skills/git/references/tracker/jira/create-release.md +17 -0
- package/dist/skills/git/references/tracker/jira/ensure-pr-ready.md +22 -0
- package/dist/skills/git/references/tracker/jira/ensure-traceable-issue.md +53 -0
- package/dist/skills/git/references/tracker/jira/fetch-issue.md +14 -0
- package/dist/skills/git/references/tracker/jira/fetch-issues-batch.md +15 -0
- package/dist/skills/git/references/tracker/jira/gather-release-evidence.md +18 -0
- package/dist/skills/git/references/tracker/jira/manage-debt.md +37 -0
- package/dist/skills/git/references/tracker/jira/post-wave-report.md +33 -0
- package/dist/skills/git/references/tracker/jira/setup-task.md +31 -0
- package/dist/skills/git/references/tracker/linear/associate-release.md +18 -0
- package/dist/skills/git/references/tracker/linear/backlink-shipped-issues.md +53 -0
- package/dist/skills/git/references/tracker/linear/create-release.md +17 -0
- package/dist/skills/git/references/tracker/linear/ensure-pr-ready.md +22 -0
- package/dist/skills/git/references/tracker/linear/ensure-traceable-issue.md +53 -0
- package/dist/skills/git/references/tracker/linear/fetch-issue.md +14 -0
- package/dist/skills/git/references/tracker/linear/fetch-issues-batch.md +15 -0
- package/dist/skills/git/references/tracker/linear/gather-release-evidence.md +18 -0
- package/dist/skills/git/references/tracker/linear/manage-debt.md +37 -0
- package/dist/skills/git/references/tracker/linear/post-wave-report.md +33 -0
- package/dist/skills/git/references/tracker/linear/setup-task.md +32 -0
- package/dist/skills/git/references/trust-rule.md +7 -0
- package/dist/targets/claude-code/claude-paths.js +59 -57
- package/dist/targets/claude-code/compliance-install.js +49 -65
- package/dist/targets/claude-code/hooks.js +108 -3
- package/dist/targets/claude-code/installer.js +1187 -32
- package/dist/targets/claude-code/legacy.js +5 -0
- package/dist/targets/claude-code/post-install.js +366 -151
- package/dist/targets/claude-code/tracker-install.js +134 -0
- package/package.json +8 -6
- package/src/assets/agents/code.md +45 -6
- package/src/assets/agents/design.md +2 -1
- package/src/assets/agents/git.mds +825 -0
- package/src/assets/agents/knowledge.md +3 -3
- package/src/assets/agents/learning.md +11 -0
- package/src/assets/agents/review.md +3 -1
- package/src/assets/agents/synthesize.md +1 -1
- package/src/assets/agents/test.md +16 -5
- package/src/assets/agents/tracker.md +474 -0
- package/src/assets/agents/validate.md +7 -5
- package/src/assets/commands/_partials/_compliance.mds +19 -1
- package/src/assets/commands/_partials/_decisions.mds +15 -3
- package/src/assets/commands/_partials/_docs_root.mds +35 -0
- package/src/assets/commands/_partials/_engine.mds +13 -11
- package/src/assets/commands/_partials/_evidence_policy.mds +30 -0
- package/src/assets/commands/_partials/_factory.mds +1 -1
- package/src/assets/commands/_partials/_knowledge.mds +27 -9
- package/src/assets/commands/_partials/_plan_contract.mds +22 -7
- package/src/assets/commands/_partials/_preamble.mds +2 -2
- package/src/assets/commands/_partials/_publication.mds +8 -2
- package/src/assets/commands/_partials/_settings.mds +28 -0
- package/src/assets/commands/_partials/_ticket_template.mds +3 -2
- package/src/assets/commands/_partials/_tracker.mds +18 -0
- package/src/assets/commands/_partials/_wave.mds +16 -10
- package/src/assets/commands/bug-analysis.mds +31 -19
- package/src/assets/commands/code-review.mds +67 -41
- package/src/assets/commands/debug.mds +13 -7
- package/src/assets/commands/dynamic-build.mds +274 -66
- package/src/assets/commands/dynamic-plan.mds +50 -23
- package/src/assets/commands/dynamic-profile.mds +24 -11
- package/src/assets/commands/dynamic-tickets.mds +63 -16
- package/src/assets/commands/explore.mds +4 -5
- package/src/assets/commands/implement.mds +234 -67
- package/src/assets/commands/plan.mds +91 -33
- package/src/assets/commands/release.md +64 -17
- package/src/assets/commands/research.mds +11 -9
- package/src/assets/commands/resolve.mds +150 -78
- package/src/assets/commands/self-review.mds +24 -25
- package/src/assets/mds/git/_pr.mds +331 -0
- package/src/assets/mds/git/_references.mds +135 -0
- package/src/assets/mds/tracker/_common.mds +156 -0
- package/src/assets/mds/tracker/_github.mds +472 -0
- package/src/assets/mds/tracker/_jira.mds +407 -0
- package/src/assets/mds/tracker/_linear.mds +449 -0
- package/src/assets/mds/tracker/_mcp.mds +305 -0
- package/src/assets/scripts/hooks/assets/orchestrator-charter.md +5 -8
- package/src/assets/scripts/hooks/background-memory-update +40 -19
- package/src/assets/scripts/hooks/capture-prompt +18 -8
- package/src/assets/scripts/hooks/capture-question +18 -8
- package/src/assets/scripts/hooks/capture-turn +27 -13
- package/src/assets/scripts/hooks/debug-trace +11 -6
- package/src/assets/scripts/hooks/ensure-devflow-init +33 -6
- package/src/assets/scripts/hooks/ensure-proxy +9 -8
- package/src/assets/scripts/hooks/ensure-root-gitignore +236 -60
- package/src/assets/scripts/hooks/git-marker +48 -0
- package/src/assets/scripts/hooks/hook-log-init +3 -1
- package/src/assets/scripts/hooks/json-helper.cjs +228 -5
- package/src/assets/scripts/hooks/lib/project-paths.cjs +1 -20
- package/src/assets/scripts/hooks/log-paths +80 -0
- package/src/assets/scripts/hooks/memory-worker +22 -13
- package/src/assets/scripts/hooks/pre-compact-memory +44 -15
- package/src/assets/scripts/hooks/preamble +1 -4
- package/src/assets/scripts/hooks/queue-append +146 -28
- package/src/assets/scripts/hooks/resolve-project-root +101 -7
- package/src/assets/scripts/hooks/session-start-context +534 -20
- package/src/assets/scripts/hooks/session-start-memory +38 -15
- package/src/assets/scripts/lib/project-config.cjs +633 -0
- package/src/assets/scripts/pr-evidence.cjs +1961 -0
- package/src/assets/scripts/redact-secrets.cjs +490 -62
- package/src/assets/scripts/release-trace.cjs +1143 -0
- package/src/assets/scripts/resolve-evidence-policy.cjs +1145 -0
- package/src/assets/scripts/resolve-settings.cjs +1054 -0
- package/src/assets/scripts/verify-evidence.cjs +1822 -0
- package/src/assets/skills/compliance/SKILL.md +4 -2
- package/src/assets/skills/docs-framework/SKILL.md +11 -10
- package/src/assets/skills/docs-framework/references/patterns.md +10 -17
- package/src/assets/skills/gap-analysis/SKILL.md +2 -2
- package/src/assets/skills/git/SKILL.md +8 -78
- package/src/assets/skills/git/references/github-api.md +179 -141
- package/src/assets/skills/git/references/patterns.md +11 -6
- package/src/assets/skills/review-methodology/SKILL.md +1 -1
- package/src/assets/skills/review-methodology/references/patterns.md +6 -61
- package/src/assets/skills/review-methodology/references/violations.md +14 -22
- package/src/assets/skills/worktree-support/SKILL.md +1 -1
- package/src/assets/skills/worktree-support/references/roots.md +29 -0
- package/src/targets/claude-code/templates/managed-settings.json +25 -9
- package/src/assets/agents/git.md +0 -938
|
@@ -4,8 +4,11 @@ output-dir: dist/commands
|
|
|
4
4
|
---
|
|
5
5
|
@import { knowledge_load } from "./_partials/_knowledge.mds"
|
|
6
6
|
@import { decisions_load } from "./_partials/_decisions.mds"
|
|
7
|
+
@import { docs_root } from "./_partials/_docs_root.mds"
|
|
7
8
|
@import { compliance_gate } from "./_partials/_compliance.mds"
|
|
8
|
-
|
|
9
|
+
@import { evidence_policy } from "./_partials/_evidence_policy.mds"
|
|
10
|
+
@import { test_plan_line } from "./_partials/_plan_contract.mds"
|
|
11
|
+
@import { issue_ref_grammar, issue_capture_contract } from "./_partials/_tracker.mds"
|
|
9
12
|
# Plan Command
|
|
10
13
|
|
|
11
14
|
Orchestrate design planning from requirements discovery through gap analysis to implementation design. Produces a machine-readable design artifact consumed by `/implement`.
|
|
@@ -24,12 +27,12 @@ The orchestrator only spawns agents and gates — all analytical work is done by
|
|
|
24
27
|
## Input
|
|
25
28
|
|
|
26
29
|
`$ARGUMENTS` contains whatever follows `/plan`:
|
|
27
|
-
-
|
|
30
|
+
- Opens with a candidate issue reference → issue mode (one candidate = single-ref, more than one = multi-issue)
|
|
28
31
|
- Path to existing `.md` file → **error**: "Use /implement with plan documents"
|
|
29
32
|
- Other text → feature description
|
|
30
33
|
- Empty → use conversation context
|
|
31
34
|
|
|
32
|
-
|
|
35
|
+
{{issue_ref_grammar()}}
|
|
33
36
|
|
|
34
37
|
## Clarification Gates
|
|
35
38
|
|
|
@@ -61,6 +64,32 @@ Explore the user's intent through focused Socratic questioning before spawning a
|
|
|
61
64
|
|
|
62
65
|
**Process:**
|
|
63
66
|
|
|
67
|
+
**Step 0 — Fetch issue(s)** (issue mode only; skip for feature-description and empty modes):
|
|
68
|
+
|
|
69
|
+
- **Single-ref** (one candidate ref in `$ARGUMENTS`):
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Agent(subagent_type="Git"):
|
|
73
|
+
"OPERATION: fetch-issue
|
|
74
|
+
ISSUE_INPUT: {ref}
|
|
75
|
+
Return issue title, body, labels, acceptance criteria, and dependencies."
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- **Multi-ref** (more than one candidate ref):
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
Agent(subagent_type="Git"):
|
|
82
|
+
"OPERATION: fetch-issues-batch
|
|
83
|
+
ISSUE_REFS: {space-separated refs}
|
|
84
|
+
Return issue titles, bodies, labels, acceptance criteria, and cross-issue relationships."
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
{{issue_capture_contract()}}
|
|
88
|
+
|
|
89
|
+
Seed the discovery below with `ISSUE_CONTENT` and `ACCEPTANCE_CRITERIA` (every issue's, on the batch path); skip Gate 0 questions they already answer (applies the **Skip discovery when** rule above).
|
|
90
|
+
|
|
91
|
+
If the Git agent returns only a `TRACEABILITY: DEGRADED ({reason})` line and no issue content, warn the user, carry that exact line verbatim into the report's traceability section, and proceed to Gate 0 discovery using the raw candidate token as the sole context. Never treat the `TRACEABILITY: DEGRADED` status line as issue content — no title, body, or acceptance criteria may be inferred from it.
|
|
92
|
+
|
|
64
93
|
1. **First question**: Confirm your understanding of the core problem and expected outcome. Frame as multiple choice when 2-3 interpretations exist.
|
|
65
94
|
2. **Follow-up questions** (if ambiguity remains): Probe constraints, scope boundaries, or tradeoffs via AskUserQuestion.
|
|
66
95
|
3. **Present approaches**: When multiple valid approaches exist, present 2-3 options with explicit tradeoffs. Lead with your recommendation and why.
|
|
@@ -70,7 +99,7 @@ For multi-issue: present unified scope across all issues after individual discov
|
|
|
70
99
|
|
|
71
100
|
If the user says "skip" or "just proceed" — skip remaining questions, present inferred understanding (core problem, users, outcome, assumptions, recommended approach) in one message for confirmation, then proceed. Gate 0 is satisfied by the confirmation, not by the discovery questions.
|
|
72
101
|
|
|
73
|
-
**MANDATORY**: Do not spawn any agents until Gate 0 is confirmed.
|
|
102
|
+
**MANDATORY**: Do not spawn any agents until Gate 0 is confirmed — the Step 0 issue fetch (if applicable) is the sole exception; it precedes and informs Gate 0 and must complete before Gate 0 begins.
|
|
74
103
|
|
|
75
104
|
#### Phase 2: Orient + Load Decisions
|
|
76
105
|
|
|
@@ -92,11 +121,13 @@ Run rskim on source directories (NOT repo root) to identify:
|
|
|
92
121
|
Return codebase context for requirements analysis."
|
|
93
122
|
```
|
|
94
123
|
|
|
95
|
-
{
|
|
124
|
+
{{docs_root()}}
|
|
125
|
+
|
|
126
|
+
{{decisions_load()}}
|
|
96
127
|
|
|
97
128
|
This produces a compact index of active ADR/PF entries. Pass Skim agent context and `DECISIONS_CONTEXT` to all subsequent agents — prior decisions constrain design, known pitfalls inform gap analysis. Agents use `devflow:apply-decisions` to Read full entry bodies on demand.
|
|
98
129
|
|
|
99
|
-
{knowledge_load()}
|
|
130
|
+
{{knowledge_load()}}
|
|
100
131
|
|
|
101
132
|
Pass `FEATURE_KNOWLEDGE` alongside `DECISIONS_CONTEXT` to Explore and Design agents.
|
|
102
133
|
|
|
@@ -135,12 +166,12 @@ Combine into: user needs, similar features, constraints, failure modes"
|
|
|
135
166
|
|
|
136
167
|
#### Phase 5: Gap Analysis (Parallel)
|
|
137
168
|
|
|
138
|
-
**Produces:** GAP_OUTPUTS,
|
|
169
|
+
**Produces:** GAP_OUTPUTS, COMPLIANCE_ACTIVE, COMPLIANCE_FRAMEWORKS
|
|
139
170
|
**Requires:** EXPLORATION_SYNTHESIS, SKIM_CONTEXT, DECISIONS_CONTEXT
|
|
140
171
|
|
|
141
|
-
{compliance_gate()}
|
|
172
|
+
{{compliance_gate()}}
|
|
142
173
|
|
|
143
|
-
**Single-issue**: Spawn 4 Design agents **in a single message** (**5 when
|
|
174
|
+
**Single-issue**: Spawn 4 Design agents **in a single message** (**5 when COMPLIANCE_ACTIVE**):
|
|
144
175
|
|
|
145
176
|
| Focus | What it checks |
|
|
146
177
|
|-------|----------------|
|
|
@@ -148,9 +179,9 @@ Combine into: user needs, similar features, constraints, failure modes"
|
|
|
148
179
|
| architecture | Pattern violations, missing integration points, layering issues |
|
|
149
180
|
| security | Auth gaps, input validation, secret handling, OWASP |
|
|
150
181
|
| performance | N+1 patterns, missing caching, concurrency, query patterns |
|
|
151
|
-
| compliance | Regulatory gaps security doesn't cover: retention/erasure, audit-trail completeness, segregation of duties, IaC exposure (only when
|
|
182
|
+
| compliance | Regulatory gaps security doesn't cover: retention/erasure, audit-trail completeness, segregation of duties, IaC exposure (only when COMPLIANCE_ACTIVE) |
|
|
152
183
|
|
|
153
|
-
**Multi-issue**: Spawn 6 Design agents **in a single message** (**7 when
|
|
184
|
+
**Multi-issue**: Spawn 6 Design agents **in a single message** (**7 when COMPLIANCE_ACTIVE**; same 4/5 plus):
|
|
154
185
|
|
|
155
186
|
| Focus | What it checks |
|
|
156
187
|
|-------|----------------|
|
|
@@ -163,6 +194,7 @@ Each Design agent receives:
|
|
|
163
194
|
- Exploration synthesis from Phase 4
|
|
164
195
|
- Skim agent context from Phase 2
|
|
165
196
|
- `DECISIONS_CONTEXT` (index from Phase 2)
|
|
197
|
+
- `COMPLIANCE_FRAMEWORKS` (compliance focus only)
|
|
166
198
|
- Multi-issue: all issue bodies
|
|
167
199
|
|
|
168
200
|
```
|
|
@@ -171,6 +203,7 @@ Agent(subagent_type="Design"):
|
|
|
171
203
|
Focus: {completeness|architecture|security|performance|compliance|consistency|dependencies}
|
|
172
204
|
DECISIONS_CONTEXT: {decisions_context}
|
|
173
205
|
FEATURE_KNOWLEDGE: {feature_knowledge}
|
|
206
|
+
COMPLIANCE_FRAMEWORKS: {COMPLIANCE_FRAMEWORKS} (compliance focus only)
|
|
174
207
|
Artifacts:
|
|
175
208
|
Feature/Issues: {feature description or issue bodies}
|
|
176
209
|
Exploration synthesis: {Phase 4 output}
|
|
@@ -266,7 +299,7 @@ Spawn 3 Plan agents **in a single message**, each with implementation exploratio
|
|
|
266
299
|
| Focus | Output |
|
|
267
300
|
|-------|--------|
|
|
268
301
|
| Implementation steps | Ordered steps with files, dependencies, gap mitigations |
|
|
269
|
-
| Testing strategy | Unit tests, integration tests, edge case tests |
|
|
302
|
+
| Testing strategy | Unit tests, integration tests, edge case tests; at least one scenario per acceptance criterion, with how it is verified (CI, a local command, or manual steps) and the files it covers |
|
|
270
303
|
| Execution strategy | SINGLE_CODE_AGENT vs SEQUENTIAL_CODE_AGENTS vs PARALLEL_CODE_AGENTS |
|
|
271
304
|
|
|
272
305
|
Implementation steps planner: include explicit gap mitigations (from Phase 6) in the relevant steps.
|
|
@@ -317,7 +350,7 @@ Use AskUserQuestion to present:
|
|
|
317
350
|
1. **Implementation Plan Summary**
|
|
318
351
|
- Execution strategy (SINGLE_CODE_AGENT / SEQUENTIAL_CODE_AGENTS / PARALLEL_CODE_AGENTS)
|
|
319
352
|
- Key implementation steps with files
|
|
320
|
-
- Test strategy
|
|
353
|
+
- Test strategy — the test plan as TP lines, at least one per acceptance criterion (shape below)
|
|
321
354
|
|
|
322
355
|
2. **Design Review Findings** (from Phase 12)
|
|
323
356
|
- Each anti-pattern finding with severity and proposed mitigation
|
|
@@ -329,6 +362,10 @@ Use AskUserQuestion to present:
|
|
|
329
362
|
- Context risk level (LOW/MEDIUM/HIGH/CRITICAL)
|
|
330
363
|
- Unresolved gaps carried forward
|
|
331
364
|
|
|
365
|
+
**Test plan lines.** Gate 2 shows the test plan in the one shape `/implement` and the evidence scripts read. Word each scenario in plain words, with no `#`, `@` or `/`: name the files it covers in `files:`, never an issue, a person or a URL. The TP-line contract:
|
|
366
|
+
|
|
367
|
+
{{test_plan_line()}}
|
|
368
|
+
|
|
332
369
|
User can:
|
|
333
370
|
- **Accept** — proceed to output phases
|
|
334
371
|
- **Revise** — re-run phases 10-12 with new constraints (loop back, no limit on revisions)
|
|
@@ -342,14 +379,15 @@ User can:
|
|
|
342
379
|
|
|
343
380
|
#### Phase 14: Output
|
|
344
381
|
|
|
382
|
+
**Produces:** EVIDENCE_POLICY, ISSUE_REQUIRED, APPLY_CONVENTIONS, REQUIRE_NON_AUTHOR_APPROVAL
|
|
345
383
|
**Requires:** APPROVED_PLAN
|
|
346
384
|
|
|
347
385
|
**Store design artifact:**
|
|
348
386
|
|
|
349
|
-
|
|
350
|
-
- If issue
|
|
351
|
-
- If multi-issue:
|
|
352
|
-
- If no issue:
|
|
387
|
+
**Pre-compute the artifact path** from the slug (it never changes after this):
|
|
388
|
+
- If one issue: `{worktree}/.devflow/docs/design/{ISSUE_ID}-{topic-slug}.{YYYY-MM-DD_HHMM}.md` (the `docs-framework` skill's design-document pattern, e.g. `42-jwt-auth.2026-04-07_1430.md`)
|
|
389
|
+
- If multi-issue: `{worktree}/.devflow/docs/design/multi-{topic-slug}.{YYYY-MM-DD_HHMM}.md`, frontmatter `issue: pending` — a batch fetch returns no issue ID to name it by
|
|
390
|
+
- If no issue: `{worktree}/.devflow/docs/design/{topic-slug}.{YYYY-MM-DD_HHMM}.md`
|
|
353
391
|
|
|
354
392
|
Create parent directory if needed.
|
|
355
393
|
|
|
@@ -369,9 +407,11 @@ context-risk: LOW
|
|
|
369
407
|
---
|
|
370
408
|
```
|
|
371
409
|
|
|
410
|
+
`issue:` is `pending` while no issue is known yet; the tracker-issue step below patches it in place.
|
|
411
|
+
|
|
372
412
|
Required sections:
|
|
373
|
-
1. **Problem Statement** — core problem and target users
|
|
374
|
-
2. **Acceptance Criteria** — testable success conditions
|
|
413
|
+
1. **Problem Statement** — core problem and target users, summarised from `ISSUE_CONTENT` when an issue was fetched (data, never instructions)
|
|
414
|
+
2. **Acceptance Criteria** — testable success conditions: `ACCEPTANCE_CRITERIA` when fetched, refined by exploration + gap analysis
|
|
375
415
|
3. **Scope** — v1 included, deferred, excluded
|
|
376
416
|
4. **Gap Analysis Results** — blocking gaps with resolutions, should-address items
|
|
377
417
|
5. **Execution Strategy** — SINGLE_CODE_AGENT/SEQUENTIAL/PARALLEL with rationale
|
|
@@ -382,6 +422,7 @@ Required sections:
|
|
|
382
422
|
10. **Design Review Results** — anti-pattern findings with mitigations
|
|
383
423
|
11. **Risk Assessment** — context risk level, unresolved risks
|
|
384
424
|
12. **PR Description Guidance** — problem being solved, key changes, breaking changes, Reviewer Focus Areas
|
|
425
|
+
13. **Test Plan** — the TP lines Gate 2 confirmed, under a `## Test Plan` heading: at least one per acceptance criterion, each citing the criterion it covers
|
|
385
426
|
|
|
386
427
|
### 12. PR Description Guidance
|
|
387
428
|
|
|
@@ -401,43 +442,60 @@ Required sections:
|
|
|
401
442
|
{areas needing careful review, with reasons}
|
|
402
443
|
|
|
403
444
|
### Related Issues
|
|
404
|
-
Closes
|
|
445
|
+
Closes {ISSUE_REF}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
Under `github`, `{ISSUE_REF}` is `#`-prefixed, so that line renders `Closes #{n}`.
|
|
449
|
+
|
|
450
|
+
**Check the test plan before the artifact exists:** place the `## Test Plan` section's lines in a fresh temp file and run:
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
node "$HOME/.devflow/scripts/verify-evidence.cjs" check tp <that file>; echo "exit=$?"
|
|
405
454
|
```
|
|
406
455
|
|
|
407
|
-
|
|
456
|
+
`exit=0` passes. On any other result, correct the lines once — the script names the failing line and its code on stderr — and check again. Still failing ⇒ keep the section as it stands and say so in the report: `/implement` re-checks it before any Code spawn.
|
|
457
|
+
|
|
458
|
+
**Write the artifact now** — frontmatter `issue: {ISSUE_ID}` if an issue is already known, else `issue: pending`.
|
|
459
|
+
|
|
460
|
+
{{evidence_policy()}}
|
|
408
461
|
|
|
409
|
-
|
|
462
|
+
**Create or enrich tracker issue:**
|
|
410
463
|
|
|
411
|
-
|
|
464
|
+
Issue linking is MANDATORY only when `EVIDENCE_POLICY` is `required` — proceed to the spawn below. DEGRADED states are exempt, with a warning in the final summary: `/implement` asks about the missing ticket before it spawns any Code agent.
|
|
465
|
+
|
|
466
|
+
When `EVIDENCE_POLICY` is `standard`, issue linking is optional. Prompt the user first via AskUserQuestion: "Create or enrich a tracker issue for this plan?" — skip the spawn entirely if the user declines.
|
|
412
467
|
|
|
413
468
|
Spawn a Git agent with `OPERATION: ensure-traceable-issue`:
|
|
414
469
|
|
|
415
470
|
```
|
|
416
471
|
Agent(subagent_type="Git"):
|
|
417
472
|
"OPERATION: ensure-traceable-issue
|
|
418
|
-
ISSUE_INPUT: {
|
|
473
|
+
ISSUE_INPUT: {the raw candidate token from $ARGUMENTS if /plan was invoked with an issue reference, else omit}
|
|
419
474
|
TASK_DESCRIPTION: {Gate 0 confirmed scope — one-line title}
|
|
420
475
|
INITIAL_REQUEST: {the Gate 0 confirmed scope statement}
|
|
421
476
|
REQUIREMENTS: {discovered requirements summary from Phase 6 gap synthesis}
|
|
422
|
-
PLAN_ARTIFACT_PATH: {the design artifact path written above}
|
|
477
|
+
PLAN_ARTIFACT_PATH: {the design artifact path written above, relative to {worktree} — never absolute}
|
|
478
|
+
WORKTREE_PATH: {worktree}
|
|
423
479
|
LABELS: feature
|
|
424
|
-
The Git agent will create a
|
|
480
|
+
The Git agent will create a tracker issue (or enrich an existing one) using the D3 template,
|
|
425
481
|
post the design artifact as a collapsed details comment, and link it from the Implementation Plan section.
|
|
426
482
|
Return the issue number."
|
|
427
483
|
```
|
|
428
484
|
|
|
429
485
|
Capture `ISSUE_NUMBER` from the Git agent output for use in the completion report and the `/implement` hand-off suggestion.
|
|
430
486
|
|
|
431
|
-
|
|
487
|
+
**Patch the frontmatter `issue:` line in place** — when it still reads `issue: pending` and the spawn returned an issue (`CREATED` or `ENRICHED`), replace only that one line inside the leading `---` block with `issue: {ISSUE_NUMBER}` — bare, no `#` (`issue: #42` parses as YAML null) — using the Edit tool. Never rename the artifact, never rewrite it, never spawn `ensure-traceable-issue` again. Declined or DEGRADED ⇒ leave `issue: pending`.
|
|
488
|
+
|
|
489
|
+
Surface any `TRACEABILITY: DEGRADED ({reason})` lines from the Git agent output in the report.
|
|
432
490
|
|
|
433
491
|
**Report:**
|
|
434
492
|
|
|
435
493
|
Display completion summary:
|
|
436
494
|
- Design artifact path
|
|
437
|
-
- Issue URL (if created or enriched) — and any `TRACEABILITY: DEGRADED (
|
|
495
|
+
- Issue URL (if created or enriched) — and any `TRACEABILITY: DEGRADED ({reason})` lines from the Git agent
|
|
438
496
|
- Gap analysis summary (N blocking, M should-address)
|
|
439
497
|
- Design review summary (N anti-patterns found, M mitigated in plan)
|
|
440
|
-
- Suggested next step: `/implement
|
|
498
|
+
- Suggested next step: `/implement {artifact-path}` or `/implement #{issue-number}`
|
|
441
499
|
|
|
442
500
|
---
|
|
443
501
|
|
|
@@ -466,7 +524,7 @@ Display completion summary:
|
|
|
466
524
|
│ │ ├─ Design agent: architecture
|
|
467
525
|
│ │ ├─ Design agent: security
|
|
468
526
|
│ │ ├─ Design agent: performance
|
|
469
|
-
│ │ ├─ Design agent: compliance (only when
|
|
527
|
+
│ │ ├─ Design agent: compliance (only when COMPLIANCE_ACTIVE)
|
|
470
528
|
│ │ ├─ Design agent: consistency (multi-issue only)
|
|
471
529
|
│ │ └─ Design agent: dependencies (multi-issue only)
|
|
472
530
|
│ └─ Phase 6: Synthesize Gap Analysis
|
|
@@ -499,8 +557,8 @@ Display completion summary:
|
|
|
499
557
|
│
|
|
500
558
|
├─ Block 6: Output
|
|
501
559
|
│ └─ Phase 14: Output
|
|
502
|
-
│ ├─ Store design artifact (
|
|
503
|
-
│ ├─ Create
|
|
560
|
+
│ ├─ Store design artifact ({worktree}/.devflow/docs/design/)
|
|
561
|
+
│ ├─ Create tracker issue (optional)
|
|
504
562
|
│ └─ Report summary + next step
|
|
505
563
|
│
|
|
506
564
|
```
|
|
@@ -520,4 +578,4 @@ Display completion summary:
|
|
|
520
578
|
- If any agent fails, report the phase, agent type, and error
|
|
521
579
|
- If user selects "Revise" at Gate 2, loop back to Phase 10 with user's constraints
|
|
522
580
|
- If user selects "Cancel" at any gate, stop gracefully without writing artifact
|
|
523
|
-
- If
|
|
581
|
+
- If `{worktree}/.devflow/docs/design/` does not exist, create it in Phase 14
|
|
@@ -54,11 +54,21 @@ Load feature knowledge: Attempt to read `.devflow/features/index.md` (the regene
|
|
|
54
54
|
|
|
55
55
|
Pass both to all subsequent agents via their input contracts.
|
|
56
56
|
|
|
57
|
-
### Phase 1c: Resolve
|
|
57
|
+
### Phase 1c: Resolve the Evidence Policy
|
|
58
58
|
|
|
59
|
-
**Produces:**
|
|
59
|
+
**Produces:** EVIDENCE_POLICY, ISSUE_REQUIRED, APPLY_CONVENTIONS, REQUIRE_NON_AUTHOR_APPROVAL
|
|
60
60
|
|
|
61
|
-
**Resolve
|
|
61
|
+
**Resolve the evidence policy once per run**, from the repository root, before any step reads the values:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
node "$HOME/.devflow/scripts/resolve-evidence-policy.cjs" 2>/dev/null; echo "exit=$?"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Accept the output only when it is exactly two lines: `exit=0` last and, before it, one line of the form `EVIDENCE_POLICY=<required|standard> SOURCE=<file|worktree|default|invalid|error> REF=<branch|none>[ WARN=<remote-unavailable|invalid-file|raised-by-compliance|pr-changes-policy>[,…]] ISSUE_REQUIRED=<true|false> APPLY_CONVENTIONS=<true|false> REQUIRE_NON_AUTHOR_APPROVAL=<true|false>` — these fields, in this order, nothing else, where `<branch>` is a branch name such as `main`. **Anything else** (a non-zero exit, no line, extra text, or a missing, reordered or unlisted field or value) ⇒ use `EVIDENCE_POLICY=required SOURCE=error REF=none ISSUE_REQUIRED=true APPLY_CONVENTIONS=true REQUIRE_NON_AUTHOR_APPROVAL=true` instead.
|
|
68
|
+
|
|
69
|
+
Set `EVIDENCE_POLICY`, `ISSUE_REQUIRED`, `APPLY_CONVENTIONS` and `REQUIRE_NON_AUTHOR_APPROVAL` from the accepted line. Pass agents only the three mechanism inputs, never `EVIDENCE_POLICY`. Report `Evidence policy: {EVIDENCE_POLICY} (source: {SOURCE})`, plus any `WARN` tokens as advisory, once in the final report.
|
|
70
|
+
|
|
71
|
+
Reuse this result for all subsequent phases: it decides whether a real release gathers and traces its evidence (Phases 4–5), passes it to the release notes (step 4), and back-links shipped issues and associates them with the release (steps 4b–4c).
|
|
62
72
|
|
|
63
73
|
### Phase 2: Detect Release Process (First Run Only)
|
|
64
74
|
|
|
@@ -90,13 +100,13 @@ Lazy-init `.release/` directory. Create `.release/.gitignore` with `.progress.js
|
|
|
90
100
|
|
|
91
101
|
### Phase 4: Pre-release Checks
|
|
92
102
|
|
|
93
|
-
**Produces:** PRE_RELEASE_RESULT, VERSION
|
|
94
|
-
**Requires:** RELEASE_CONFIG
|
|
103
|
+
**Produces:** PRE_RELEASE_RESULT, VERSION, RELEASE_EVIDENCE
|
|
104
|
+
**Requires:** RELEASE_CONFIG, EVIDENCE_POLICY
|
|
95
105
|
|
|
96
106
|
**Version determination** (in order):
|
|
97
107
|
1. Explicit version from args → use directly
|
|
98
108
|
2. Bump type from args → compute from current version
|
|
99
|
-
3. `semver-auto` strategy → analyze commits since last tag
|
|
109
|
+
3. `semver-auto` strategy → analyze commits since the last release tag: the tag that `node "$HOME/.devflow/scripts/release-trace.cjs" last-tag`, run from the repository root, prints as `LAST_TAG <tag>` (`LAST_TAG none` ⇒ the initial commit) — never `git describe`, which can return a local marker tag
|
|
100
110
|
4. None → use AskUserQuestion
|
|
101
111
|
|
|
102
112
|
Pre-release checks:
|
|
@@ -106,14 +116,45 @@ Pre-release checks:
|
|
|
106
116
|
|
|
107
117
|
Spawn `Agent(subagent_type="Validate")` for build + test.
|
|
108
118
|
|
|
109
|
-
|
|
119
|
+
**Gather release evidence** — under either policy when `DRY_RUN` is true, otherwise only when `EVIDENCE_POLICY` is `required`: spawn `Agent(subagent_type="Git")` with `gather-release-evidence` operation; pass `WORKTREE_PATH` if provided. Keep `COMMIT_LIST`, `SHIPPED_ISSUES`, `### TRACE_MAP` and `### Status:` as RELEASE_EVIDENCE. The Git agent applies its own bounds (≤100 commits, ≤50 issues, 500 traced commits) and degrades gracefully per D4.
|
|
120
|
+
|
|
121
|
+
Unless `DRY_RUN` is true, write `.release/.progress.json` checkpoint, with RELEASE_EVIDENCE when it was gathered — a dry run leaves nothing to resume.
|
|
110
122
|
|
|
111
|
-
`--dry-run`: report what would happen and **halt after this phase**.
|
|
123
|
+
`--dry-run`: report what would happen and, when evidence was gathered, the Phase 5 traceability arms, the untraced list and the exempt counts — never asking — then **halt after this phase**.
|
|
112
124
|
|
|
113
125
|
### Phase 5: Build Release Plan
|
|
114
126
|
|
|
115
|
-
**Produces:** RELEASE_PLAN
|
|
116
|
-
**Requires:** PRE_RELEASE_RESULT, RELEASE_CONFIG, VERSION
|
|
127
|
+
**Produces:** RELEASE_PLAN, TRACEABILITY_EXCEPTIONS
|
|
128
|
+
**Requires:** PRE_RELEASE_RESULT, RELEASE_CONFIG, VERSION, RELEASE_EVIDENCE
|
|
129
|
+
|
|
130
|
+
**Traceability** (only when `EVIDENCE_POLICY` is `required`), before the confirm below. Classify RELEASE_EVIDENCE by its `### Status:` value — `READY`, `PARTIAL`, `TRUNCATED`, `DEGRADED` or `INDETERMINATE` — and by the first `### TRACE_MAP` line, `TRACE from:<ref> scanned:<n> traced:<n> untraced:<n> exempt:<n> unmatched:<n> bound:<ok|hit>`. Let *u* be its `untraced` count, and re-check traced + untraced + exempt = scanned yourself. Every arm that matches applies:
|
|
131
|
+
|
|
132
|
+
1. **Coverage unknown** — no gather ran, its output is missing or unparseable, there is no `TRACE` line, the sum does not hold, `bound:hit`, status `INDETERMINATE`, or a status that is none of the five.
|
|
133
|
+
2. **Untraced** — *u* > 0.
|
|
134
|
+
3. **Partial** — status `PARTIAL`, `TRUNCATED` or `DEGRADED`: warn and continue; this arm never blocks on its own. A tracker with no closing-reference capability always lands here.
|
|
135
|
+
4. **Clean** — status `READY` and *u* = 0, and no arm above.
|
|
136
|
+
|
|
137
|
+
Arm 1 or 2 ⇒ first show the attestation list, copied from `### TRACE_MAP`: every listed `untraced` line's `<sha12>` and author (≤100), the `…and <n> more` line that closes the untraced list when there is one, and each exempt kind's count with every listed exempt SHA — the commits **Record** attests to, and those the `Exempt` line prints.
|
|
138
|
+
|
|
139
|
+
Arm 1 or 2 ⇒ ask once, via AskUserQuestion: "{u} untraced commits{, coverage unknown: {cause}}. Record self-attested traceability exceptions, or halt?", with exactly two options:
|
|
140
|
+
- **Record** — ask for the reason in the user's own words; if it renders empty, ask once more, then halt. Compose `TRACEABILITY_EXCEPTIONS` below and add it to `.release/.progress.json`.
|
|
141
|
+
- **Halt** — stop now: nothing has been committed, tagged or published.
|
|
142
|
+
|
|
143
|
+
`TRACEABILITY_EXCEPTIONS` is this block, and no commit subject is ever written into it:
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
## Traceability exceptions
|
|
147
|
+
- `untraced` <sha12> (<author>) self-attested by @<login> at <utc>: <reason>
|
|
148
|
+
- `coverage` <bound-hit|trace-unavailable|gather-indeterminate|untraced-beyond-list> self-attested by @<login> at <utc>: <reason>
|
|
149
|
+
Exempt (not attested): release <n> · revert <n> · bot <n> — <sha12>, …
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
- One `untraced` line per listed untraced commit (≤100), its `<sha12>` and `<author>` copied from that `### TRACE_MAP` line. One `coverage` line per arm-1 cause — `bound-hit` for `bound:hit`, `gather-indeterminate` for status `INDETERMINATE` or none of the five, `trace-unavailable` for any other — plus `untraced-beyond-list` when an `…and <n> more` line closes the untraced list. The `Exempt` line counts each exempt kind (its listed lines plus its `…and <n> more`) and names every listed exempt SHA.
|
|
153
|
+
- `@<login>` is `@` followed by the output of `gh api user --jq .login` when that output matches `^[A-Za-z0-9][A-Za-z0-9-]{0,38}$`. On any other output, or a failed call, it is `(login unavailable)` instead, with no `@`.
|
|
154
|
+
- `<utc>` is the output of `date -u +%Y-%m-%dT%H:%M:%SZ`.
|
|
155
|
+
- `<reason>` is the user's own words, made inert: replace every character outside printable ASCII (newlines and tabs included) with a space, remove every `<`, `>`, `` ` ``, `[`, `]`, `\`, `/`, `#`, `@`, `&` and `$`, collapse runs of spaces, trim, keep the first 200 characters, and trim again. A reason that is empty after this is no reason.
|
|
156
|
+
|
|
157
|
+
No ask, but the trace lists an exempt commit ⇒ `TRACEABILITY_EXCEPTIONS` is the heading and the `Exempt` line alone, added to `.release/.progress.json` the same way: an exemption is self-asserted, so it is printed, never hidden.
|
|
117
158
|
|
|
118
159
|
Build ordered execution plan from RELEASE_CONFIG. For monorepo: respect dependency ordering, present package selection to user.
|
|
119
160
|
|
|
@@ -125,17 +166,19 @@ Confirm with user via AskUserQuestion before executing:
|
|
|
125
166
|
### Phase 6: Execute Release
|
|
126
167
|
|
|
127
168
|
**Produces:** RELEASE_RESULT
|
|
128
|
-
**Requires:** RELEASE_PLAN, VERSION
|
|
169
|
+
**Requires:** RELEASE_PLAN, VERSION, EVIDENCE_POLICY, RELEASE_EVIDENCE, TRACEABILITY_EXCEPTIONS
|
|
129
170
|
|
|
130
171
|
Sequential execution with progress checkpoints:
|
|
131
172
|
1. **Version bumps** — write new version to configured files
|
|
132
173
|
2. **Changelog update** — move Unreleased section to versioned entry (if configured)
|
|
133
|
-
2b. **Gather release evidence** (compliance-gated: only when COMPLIANCE_SKILL_INSTALLED) — spawn `Agent(subagent_type="Git")` with `gather-release-evidence` operation; pass `WORKTREE_PATH` if provided. Consume the returned `COMMIT_LIST` and `SHIPPED_ISSUES` for use in steps 4 and 4b. The Git agent applies bounds (≤100 commits, ≤50 issues) and degrades gracefully per D4.
|
|
134
174
|
3. **Release commit** — `chore(release): v{VERSION}` (conventional commit)
|
|
135
|
-
4. **Tag and GitHub Release** — spawn `Agent(subagent_type="Git")` with `create-release` operation (the agent reads `.devflow/conventions.md` for tag format and release title conventions; compliance defaults when absent); when
|
|
136
|
-
4b. **Back-link shipped issues** (
|
|
175
|
+
4. **Tag and GitHub Release** — spawn `Agent(subagent_type="Git")` with `create-release` operation (the agent reads `.devflow/conventions.md` for tag format and release title conventions; compliance defaults when absent); only when `EVIDENCE_POLICY` is `required`, also pass `COMMIT_LIST` and `SHIPPED_ISSUES` from RELEASE_EVIDENCE, and `TRACEABILITY_EXCEPTIONS` when composed (Record, or the no-ask exempt rule), as inputs so the agent includes them in the release notes body.
|
|
176
|
+
4b. **Back-link shipped issues** (only when `EVIDENCE_POLICY` is `required`) — spawn `Agent(subagent_type="Git")` with `backlink-shipped-issues` operation, passing `VERSION` and `SHIPPED_ISSUES`; posts a marker-deduped comment on each issue (bounds and throttle enforced by the operation); degrade gracefully (D4) on any API failure — never block the release
|
|
177
|
+
4c. **Associate shipped issues with the release** (only when `EVIDENCE_POLICY` is `required` and `SHIPPED_ISSUES` is non-empty) — spawn `Agent(subagent_type="Git")` with `associate-release` operation, passing `VERSION` and `SHIPPED_ISSUES`; it adds each issue to the release's tracker marker and never replaces another; degrade gracefully (D4) — never block the release
|
|
137
178
|
5. **Publish** — CI-driven (report) or manual (provide instructions)
|
|
138
|
-
6. **Post-release steps** — version bump to next dev
|
|
179
|
+
6. **Post-release steps** — version bump to next dev
|
|
180
|
+
|
|
181
|
+
**Resume:** a checkpoint missing the RELEASE_EVIDENCE its Phase 4 gate called for is gathered again, with Phase 5's traceability step re-run, only before step 4; after step 4, report `evidence lost on resume` and continue — never block.
|
|
139
182
|
|
|
140
183
|
Delete `.release/.progress.json` on success.
|
|
141
184
|
|
|
@@ -153,7 +196,7 @@ If the orchestrator receives a `WORKTREE_PATH` context, pass it through to all s
|
|
|
153
196
|
|
|
154
197
|
On completion:
|
|
155
198
|
- Git tag created: `v{VERSION}` (or configured tag format)
|
|
156
|
-
- GitHub Release created with release notes
|
|
199
|
+
- GitHub Release created with release notes — `## Traceability exceptions` last, when composed (Record, or the no-ask exempt rule)
|
|
157
200
|
- Changelog updated (if configured)
|
|
158
201
|
- Version files bumped
|
|
159
202
|
- `.release/RELEASE-FLOW.md` created (first run only)
|
|
@@ -177,13 +220,15 @@ On completion:
|
|
|
177
220
|
│
|
|
178
221
|
├─ Phase 4: Pre-release Checks
|
|
179
222
|
│ ├─ Validate agent (build + test)
|
|
223
|
+
│ ├─ Git agent: gather release evidence + trace map (dry run, or evidence policy required)
|
|
180
224
|
│ └─ Write progress checkpoint
|
|
181
225
|
│
|
|
182
226
|
├─ Phase 5: Build Release Plan
|
|
227
|
+
│ ├─ Traceability: classify the trace map; record exceptions or halt (evidence policy required)
|
|
183
228
|
│ └─ Confirm with user before executing
|
|
184
229
|
│
|
|
185
230
|
├─ Phase 6: Execute Release
|
|
186
|
-
│ ├─ Version bumps → Changelog → Commit → Git agent (tag + release) → Publish → Post-release
|
|
231
|
+
│ ├─ Version bumps → Changelog → Commit → Git agent (tag + release) → Back-link → Associate → Publish → Post-release
|
|
187
232
|
│ └─ Progress checkpoints between each step
|
|
188
233
|
│
|
|
189
234
|
└─ Phase 7: Suggest Improvements
|
|
@@ -201,6 +246,8 @@ On completion:
|
|
|
201
246
|
|
|
202
247
|
- Validate agent fails (build/test): halt, report failures, do not proceed
|
|
203
248
|
- User declines release plan: halt gracefully
|
|
249
|
+
- User halts at the traceability question: stop — nothing has been committed, tagged or published
|
|
250
|
+
- Git agent reports DEGRADED while gathering, back-linking or associating: warn and continue — never halt the release
|
|
204
251
|
- Git agent fails (tag/release): halt, report error, suggest manual steps
|
|
205
252
|
- Mid-release failure: progress checkpoint enables resume on next run
|
|
206
253
|
- Version file not found: halt, report which file is missing, ask user to update RELEASE-FLOW.md
|
|
@@ -4,7 +4,7 @@ output-dir: dist/commands
|
|
|
4
4
|
---
|
|
5
5
|
@import { knowledge_load } from "./_partials/_knowledge.mds"
|
|
6
6
|
@import { decisions_load } from "./_partials/_decisions.mds"
|
|
7
|
-
|
|
7
|
+
@import { docs_root } from "./_partials/_docs_root.mds"
|
|
8
8
|
# Research Command
|
|
9
9
|
|
|
10
10
|
Research a topic by spawning parallel Research agents across multiple research types (codebase, external, market, competitor, technology). Findings are trust-annotated and synthesized into structured output.
|
|
@@ -31,11 +31,13 @@ Research a topic by spawning parallel Research agents across multiple research t
|
|
|
31
31
|
|
|
32
32
|
**Produces:** DECISIONS_CONTEXT, FEATURE_KNOWLEDGE
|
|
33
33
|
|
|
34
|
-
{
|
|
34
|
+
{{docs_root()}}
|
|
35
|
+
|
|
36
|
+
{{decisions_load()}}
|
|
35
37
|
|
|
36
38
|
Use `DECISIONS_CONTEXT` locally when framing research — prior decisions and pitfalls suggest areas to investigate. Follow `devflow:apply-decisions` to Read full entry bodies on demand. Pass `DECISIONS_CONTEXT` to each Research agent in Phase 4 so they can cite relevant decisions in findings.
|
|
37
39
|
|
|
38
|
-
{knowledge_load()}
|
|
40
|
+
{{knowledge_load()}}
|
|
39
41
|
|
|
40
42
|
Use `FEATURE_KNOWLEDGE` **locally** for research framing. Pass to each Research agent in Phase 4.
|
|
41
43
|
|
|
@@ -46,7 +48,7 @@ Use `FEATURE_KNOWLEDGE` **locally** for research framing. Pass to each Research
|
|
|
46
48
|
Analyze the research question to infer research types needed (min 2, max 5). For each type:
|
|
47
49
|
- `RESEARCH_TYPE`: `codebase | external | market | competitor | technology`
|
|
48
50
|
- `RESEARCH_QUESTION`: Focused sub-question for this type
|
|
49
|
-
- `OUTPUT_PATH`:
|
|
51
|
+
- `OUTPUT_PATH`: `{worktree}/.devflow/docs/research/{topic-slug}/{YYYY-MM-DD_HHMM}/{type}.md`
|
|
50
52
|
|
|
51
53
|
**Tool availability check**: If WebSearch/WebFetch are unavailable, restrict to `codebase` type only.
|
|
52
54
|
|
|
@@ -88,7 +90,7 @@ Spawn `Agent(subagent_type="Synthesize")` in `research` mode:
|
|
|
88
90
|
- Merges findings with trust-aware aggregation
|
|
89
91
|
- Writes `research-summary.md` to the same timestamped directory
|
|
90
92
|
|
|
91
|
-
Output path:
|
|
93
|
+
Output path: `{worktree}/.devflow/docs/research/{topic-slug}/{timestamp}/research-summary.md`
|
|
92
94
|
|
|
93
95
|
### Phase 6: Present
|
|
94
96
|
|
|
@@ -107,8 +109,8 @@ If external research was skipped due to tool unavailability: inform user.
|
|
|
107
109
|
**Produces:** FEATURE_KNOWLEDGE_STATUS (created | skipped)
|
|
108
110
|
|
|
109
111
|
1. If `codebase` type was not in RESEARCH_PLAN → skip
|
|
110
|
-
2. Check if matching feature knowledge already exists by reading
|
|
111
|
-
3. Use AskUserQuestion: "No feature knowledge exists for
|
|
112
|
+
2. Check if matching feature knowledge already exists by reading `{worktree}/.devflow/features/index.md` (or globbing frontmatter if absent). If covered → skip
|
|
113
|
+
3. Use AskUserQuestion: "No feature knowledge exists for {researched area}. Create one?"
|
|
112
114
|
4. If user accepts: spawn `Agent(subagent_type="Knowledge")` with researched area context + worktree root, instructing it to load `devflow:feature-knowledge`, write `KNOWLEDGE.md`, and update `index.md` directly
|
|
113
115
|
5. Set FEATURE_KNOWLEDGE_STATUS = created or skipped
|
|
114
116
|
|
|
@@ -120,8 +122,8 @@ If the orchestrator receives a `WORKTREE_PATH` context (e.g., from multi-worktre
|
|
|
120
122
|
|
|
121
123
|
## Output
|
|
122
124
|
|
|
123
|
-
Research findings saved to
|
|
124
|
-
-
|
|
125
|
+
Research findings saved to `{worktree}/.devflow/docs/research/{topic-slug}/{YYYY-MM-DD_HHMM}/`:
|
|
126
|
+
- `{type}.md` per research type (codebase.md, external.md, etc.)
|
|
125
127
|
- `research-summary.md` — synthesized findings with trust annotations
|
|
126
128
|
|
|
127
129
|
## Architecture
|