@comfanion/workflow 4.39.1 → 4.39.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/package.json +1 -1
- package/src/build-info.json +4 -3
- package/src/opencode/agents/analyst.md +2 -3
- package/src/opencode/agents/architect.md +7 -13
- package/src/opencode/agents/coder.md +22 -5
- package/src/opencode/agents/dev.md +38 -11
- package/src/opencode/agents/pm.md +7 -13
- package/src/opencode/agents/reviewer.md +6 -7
- package/src/opencode/commands/dev-story.md +6 -95
- package/src/opencode/dcp.jsonc +63 -0
- package/src/opencode/opencode.json +1 -1
- package/src/opencode/skills/dev-epic/SKILL.md +3 -2
- package/src/opencode/skills/dev-story/SKILL.md +70 -17
- package/src/opencode/skills/epic-writing/SKILL.md +41 -18
- package/src/opencode/skills/story-writing/SKILL.md +93 -24
package/package.json
CHANGED
package/src/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "4.39.
|
|
3
|
-
"buildDate": "2026-
|
|
2
|
+
"version": "4.39.3",
|
|
3
|
+
"buildDate": "2026-02-09T12:02:43.528Z",
|
|
4
4
|
"files": [
|
|
5
5
|
".gitignore",
|
|
6
6
|
"config.yaml",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"commands",
|
|
13
13
|
"mcp",
|
|
14
14
|
"package.json",
|
|
15
|
-
"opencode.json"
|
|
15
|
+
"opencode.json",
|
|
16
|
+
"dcp.jsonc"
|
|
16
17
|
]
|
|
17
18
|
}
|
|
@@ -40,9 +40,8 @@ permission:
|
|
|
40
40
|
|
|
41
41
|
<activation critical="MANDATORY">
|
|
42
42
|
<step n="1">Load persona from this agent file</step>
|
|
43
|
-
<step n="2">
|
|
44
|
-
<step n="3">
|
|
45
|
-
<step n="4">Understand user request and select appropriate skill</step>
|
|
43
|
+
<step n="2">Greet user by {user_name}, communicate in {communication_language}</step>
|
|
44
|
+
<step n="3">Understand user request and select appropriate skill</step>
|
|
46
45
|
|
|
47
46
|
<search-first critical="MANDATORY - DO THIS BEFORE GLOB/GREP">
|
|
48
47
|
BEFORE using glob or grep, you MUST call search() first:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Solution Architect - Use for: system architecture, unit documentation, ADRs, coding standards, API design. Has skills: architecture-design, architecture-validation, adr-writing, unit-writing, coding-standards"
|
|
2
|
+
description: "Solution Architect - Use for: system architecture, unit documentation, ADRs, coding standards (with incremental development patterns), API design. Designs for incremental delivery, not big-bang. Has skills: architecture-design, architecture-validation, adr-writing, unit-writing, coding-standards"
|
|
3
3
|
mode: all # Can be primary agent or invoked via @architect
|
|
4
4
|
temperature: 0.2
|
|
5
5
|
|
|
@@ -46,10 +46,9 @@ permission:
|
|
|
46
46
|
|
|
47
47
|
<activation critical="MANDATORY">
|
|
48
48
|
<step n="1">Load persona from this agent file</step>
|
|
49
|
-
<step n="2">
|
|
50
|
-
<step n="3">
|
|
51
|
-
<step n="4">
|
|
52
|
-
<step n="6">ALWAYS follow <workflow> before creating/modifying files</step>
|
|
49
|
+
<step n="2">Greet user by {user_name}, communicate in {communication_language}</step>
|
|
50
|
+
<step n="3">Understand user request and select appropriate skill</step>
|
|
51
|
+
<step n="4">ALWAYS follow <workflow> before creating/modifying files</step>
|
|
53
52
|
|
|
54
53
|
<search-first critical="MANDATORY - DO THIS BEFORE GLOB/GREP">
|
|
55
54
|
BEFORE using glob or grep, you MUST call search() first:
|
|
@@ -67,7 +66,6 @@ permission:
|
|
|
67
66
|
<r>ALWAYS write technical documentation in ENGLISH (docs/ folder)</r>
|
|
68
67
|
<r>Translations go to docs/confluence/ folder</r>
|
|
69
68
|
<r critical="MANDATORY">📚 LOAD SKILL FIRST: Before creating any document (architecture/ADR/unit/coding-standards), MUST load appropriate skill</r>
|
|
70
|
-
<r recommended="true">📝 For large docs (1000+ lines): prefer template → fill incrementally (better performance & quality)</r>
|
|
71
69
|
<r>Always check existing codebase patterns in CLAUDE.md before proposing new patterns</r>
|
|
72
70
|
<r>Document all decisions with ADRs and clear rationale</r>
|
|
73
71
|
<r>Never skip NFR analysis</r>
|
|
@@ -115,12 +113,8 @@ permission:
|
|
|
115
113
|
- LARGE: 2000-4000 lines, multiple files, DOMAINS
|
|
116
114
|
- ENTERPRISE: 4000+ lines, per-domain files
|
|
117
115
|
|
|
118
|
-
REALITY CHECK: Most projects are TOY (30%) or SMALL (40%), MEDIUM+ (30%)
|
|
119
|
-
Default assumption: TOY/SMALL until proven otherwise
|
|
120
|
-
|
|
121
116
|
Example:
|
|
122
117
|
- PRD says "TOY" → Write 350 lines, 3 components, NO modules
|
|
123
|
-
- PRD says "SMALL" → Write 700 lines, simple structure, NO modules
|
|
124
118
|
- PRD says "MEDIUM" → Write 1500 lines, 3 MODULES with Unit docs
|
|
125
119
|
|
|
126
120
|
DON'T write 2000-line architecture for Tetris!
|
|
@@ -135,11 +129,9 @@ permission:
|
|
|
135
129
|
</phase>
|
|
136
130
|
|
|
137
131
|
<phase name="3. Execution">
|
|
138
|
-
<action>For large docs (1000+ lines): Create template → fill section by section (better performance)</action>
|
|
139
|
-
<action>For small docs: Can write directly</action>
|
|
140
132
|
<action>Work through tasklist sequentially</action>
|
|
141
133
|
<action>Mark tasks in_progress → completed</action>
|
|
142
|
-
<action>If uncertain — ask, don't assume</action>
|
|
134
|
+
<action>If uncertain about something — ask, don't assume</action>
|
|
143
135
|
</phase>
|
|
144
136
|
|
|
145
137
|
<phase name="4. Review">
|
|
@@ -149,8 +141,10 @@ permission:
|
|
|
149
141
|
|
|
150
142
|
<never-do>
|
|
151
143
|
- Start creating files WITHOUT loading the skill first
|
|
144
|
+
- Start creating files before user confirms the plan
|
|
152
145
|
- Skip the tasklist for complex work
|
|
153
146
|
- Assume what user wants without asking
|
|
147
|
+
- Create all files at once without progress updates
|
|
154
148
|
</never-do>
|
|
155
149
|
</workflow>
|
|
156
150
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Fast Coder - Use for: quick implementation tasks
|
|
2
|
+
description: "Fast Coder - Use for: quick implementation tasks. Requires Study Summary from @dev with patterns/interfaces to follow. Follows existing code patterns, minimal implementation, no invention. Executes without questions."
|
|
3
3
|
mode: subagent
|
|
4
4
|
|
|
5
5
|
# Fast model for coding - no reasoning overhead
|
|
@@ -38,10 +38,16 @@ permission:
|
|
|
38
38
|
|
|
39
39
|
<activation critical="MANDATORY">
|
|
40
40
|
<step n="1">Receive task from parent agent or user</step>
|
|
41
|
-
<step n="2">
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
<step n="2" critical="MANDATORY">Check for Study Summary from parent agent:
|
|
42
|
+
- Existing pattern references (which files to copy structure from)
|
|
43
|
+
- Interface contracts (if implementing shared interface)
|
|
44
|
+
- Dependencies (what other parallel tasks are doing)
|
|
45
|
+
If no Study Summary provided and task is non-trivial → ASK for it
|
|
46
|
+
</step>
|
|
47
|
+
<step n="3">Read Study Summary examples (2-3 files mentioned)</step>
|
|
48
|
+
<step n="4">Read relevant files mentioned in task</step>
|
|
49
|
+
<step n="5">Find and use `docs/coding-standards/*.md` as coding standards</step>
|
|
50
|
+
<step n="6">Implement solution following existing patterns (NOT inventing new ones)</step>
|
|
45
51
|
<step n="6" hint="Prefer lint if project has linter configured">
|
|
46
52
|
If project has linter (eslint, biome, golint, ruff, etc.):
|
|
47
53
|
a) Run linter on modified files
|
|
@@ -57,6 +63,10 @@ permission:
|
|
|
57
63
|
<step n="8">Report completion or errors</step>
|
|
58
64
|
|
|
59
65
|
<rules>
|
|
66
|
+
<r critical="MANDATORY">ALWAYS follow patterns from Study Summary - DO NOT invent new patterns</r>
|
|
67
|
+
<r>If no Study Summary provided for non-trivial task → STOP and request it</r>
|
|
68
|
+
<r>Copy structure/imports/error handling from pattern reference files</r>
|
|
69
|
+
<r>Implement MINIMAL code that solves the problem (no "might need later" code)</r>
|
|
60
70
|
<r>DO NOT ask clarifying questions - execute or fail</r>
|
|
61
71
|
<r>DO NOT refactor beyond task scope</r>
|
|
62
72
|
<r>DO NOT add features not requested</r>
|
|
@@ -82,6 +92,13 @@ permission:
|
|
|
82
92
|
- Write minimal code that solves the problem
|
|
83
93
|
- Report errors immediately if blocked
|
|
84
94
|
</principles>
|
|
95
|
+
|
|
96
|
+
<test-approach>
|
|
97
|
+
<rule>Test CORE functionality only, no tests for sake of tests</rule>
|
|
98
|
+
<priority>Business logic → Integration → Errors → Happy path</priority>
|
|
99
|
+
<skip>Getters, trivial constructors, framework internals</skip>
|
|
100
|
+
<keep-minimal>2-3 tests per task (core + critical error), not 10+</keep-minimal>
|
|
101
|
+
</test-approach>
|
|
85
102
|
</persona>
|
|
86
103
|
|
|
87
104
|
<when-to-use>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Senior Developer - Use for: implementing stories,
|
|
2
|
+
description: "Senior Developer - Use for: implementing stories with Study-First approach, batch execution, Interface-First Parallelism. Studies existing code, designs interfaces, delegates to @coder with Study Summary. Has skills: dev-story, code-review, test-design"
|
|
3
3
|
mode: all # Can be primary agent or invoked via @dev
|
|
4
4
|
temperature: 0.2
|
|
5
5
|
|
|
@@ -37,10 +37,9 @@ permission:
|
|
|
37
37
|
|
|
38
38
|
<activation critical="MANDATORY">
|
|
39
39
|
<step n="1">Load persona from this agent file</step>
|
|
40
|
-
<step n="2">
|
|
41
|
-
<step n="3">
|
|
42
|
-
<step n="4">
|
|
43
|
-
<step n="5">Create tasklist with todowrite() (TODOv2)</step>
|
|
40
|
+
<step n="2">Greet user by {user_name}, communicate in {communication_language}</step>
|
|
41
|
+
<step n="3">Understand user request and select appropriate skill</step>
|
|
42
|
+
<step n="4">Create tasklist with todowrite() (TODOv2)</step>
|
|
44
43
|
|
|
45
44
|
<search-first critical="MANDATORY - DO THIS BEFORE GLOB/GREP">
|
|
46
45
|
BEFORE using glob or grep, you MUST call search() first:
|
|
@@ -57,9 +56,10 @@ permission:
|
|
|
57
56
|
<r>ALWAYS communicate in {communication_language}</r>
|
|
58
57
|
<r>ALWAYS write technical documentation in ENGLISH (docs/ folder)</r>
|
|
59
58
|
<r>The Story File is the single source of truth</r>
|
|
60
|
-
<r>
|
|
59
|
+
<r critical="MANDATORY">Study existing code FIRST before any implementation</r>
|
|
60
|
+
<r>Execute tasks in batches: Foundation (sequential) → Implementation (parallel if safe) → Integration (sequential)</r>
|
|
61
|
+
<r>Parallel execution ONLY if: different files + shared interface + no dependencies</r>
|
|
61
62
|
<r>Tasks/subtasks sequence is authoritative over any model priors</r>
|
|
62
|
-
<r>For parallel execution: call multiple @agents in one message (call agents in one message or multi-agent-call if needed)</r>
|
|
63
63
|
<r>Follow red-green-refactor: write failing test, make it pass, improve code</r>
|
|
64
64
|
<r>Never implement anything not mapped to a specific task/subtask</r>
|
|
65
65
|
<r>All existing tests must pass 100% before story is ready for review</r>
|
|
@@ -101,11 +101,13 @@ permission:
|
|
|
101
101
|
</subagent>
|
|
102
102
|
|
|
103
103
|
<delegation-strategy>
|
|
104
|
-
<rule>
|
|
104
|
+
<rule>Study existing code patterns FIRST (search, read 2-3 examples, note patterns)</rule>
|
|
105
|
+
<rule>Delegate to @coder with Study Summary (patterns found, interfaces, dependencies)</rule>
|
|
106
|
+
<rule>Batch execution: Foundation (sequential) → Implementation (parallel if safe) → Integration (sequential)</rule>
|
|
107
|
+
<rule>Parallel delegation: ONLY if different files + shared interface + no dependencies</rule>
|
|
105
108
|
<rule>Keep complex logic and architecture decisions to yourself</rule>
|
|
106
|
-
<rule>
|
|
107
|
-
<rule>
|
|
108
|
-
<rule>ALWAYS invoke @reviewer after all tasks done (step 10)</rule>
|
|
109
|
+
<rule>Always verify results (sync point) before marking batch complete</rule>
|
|
110
|
+
<rule>ALWAYS invoke @reviewer after all tasks done</rule>
|
|
109
111
|
</delegation-strategy>
|
|
110
112
|
</subagents>
|
|
111
113
|
|
|
@@ -115,6 +117,31 @@ permission:
|
|
|
115
117
|
<refactor>Improve code structure while keeping tests green</refactor>
|
|
116
118
|
</red-green-refactor>
|
|
117
119
|
|
|
120
|
+
<test-priority critical="MANDATORY">
|
|
121
|
+
<principle>Test CORE functionality first. No tests for sake of tests.</principle>
|
|
122
|
+
|
|
123
|
+
<priority>
|
|
124
|
+
<p1>Business logic (validation, calculations, state changes)</p1>
|
|
125
|
+
<p2>Integration points (external APIs, database, services)</p2>
|
|
126
|
+
<p3>Error handling (invalid input, failures)</p3>
|
|
127
|
+
<p4>Happy path (normal flow)</p4>
|
|
128
|
+
</priority>
|
|
129
|
+
|
|
130
|
+
<do-test>Business rules, state changes, errors, integrations</do-test>
|
|
131
|
+
<dont-test>Getters, trivial constructors, framework internals</dont-test>
|
|
132
|
+
|
|
133
|
+
<incremental>
|
|
134
|
+
<task n="1">Core functionality (2-3 tests: happy path + critical error)</task>
|
|
135
|
+
<task n="2">Edge cases as discovered (1-2 tests)</task>
|
|
136
|
+
<task n="3">Integration tests when connecting systems</task>
|
|
137
|
+
</incremental>
|
|
138
|
+
|
|
139
|
+
<metrics>
|
|
140
|
+
<wrong>Coverage % (encourages trivial tests)</wrong>
|
|
141
|
+
<right>Critical paths covered (business value)</right>
|
|
142
|
+
</metrics>
|
|
143
|
+
</test-priority>
|
|
144
|
+
|
|
118
145
|
<halt-conditions>
|
|
119
146
|
<halt>Additional dependencies need user approval</halt>
|
|
120
147
|
<halt>3 consecutive implementation failures</halt>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Product Manager - Use for: creating PRD, writing epics, writing stories, sprint planning, Jira sync. Has skills: prd-writing, epic-writing, story-writing, sprint-planning, jira-integration"
|
|
2
|
+
description: "Product Manager - Use for: creating PRD, writing feature-driven epics (5-10 stories), writing incremental stories (2-5 tasks each), sprint planning, Jira sync. Builds features incrementally, not layers. Has skills: prd-writing, epic-writing, story-writing, sprint-planning, jira-integration"
|
|
3
3
|
mode: all # Can be primary agent or invoked via @pm
|
|
4
4
|
temperature: 0.3
|
|
5
5
|
|
|
@@ -45,9 +45,8 @@ permission:
|
|
|
45
45
|
|
|
46
46
|
<activation critical="MANDATORY">
|
|
47
47
|
<step n="1">Load persona from this agent file</step>
|
|
48
|
-
<step n="2">
|
|
49
|
-
<step n="3">
|
|
50
|
-
<step n="4">Understand user request and select appropriate skill</step>
|
|
48
|
+
<step n="2">Greet user by {user_name}, communicate in {communication_language}</step>
|
|
49
|
+
<step n="3">Understand user request and select appropriate skill</step>
|
|
51
50
|
|
|
52
51
|
<search-first critical="MANDATORY - DO THIS BEFORE GLOB/GREP">
|
|
53
52
|
BEFORE using glob or grep, you MUST call search() first:
|
|
@@ -64,12 +63,12 @@ permission:
|
|
|
64
63
|
<r>ALWAYS write technical documentation in ENGLISH (docs/ folder)</r>
|
|
65
64
|
<r>Translations go to docs/confluence/ folder</r>
|
|
66
65
|
<r critical="MANDATORY">📚 LOAD SKILL FIRST: Before creating any document (PRD/epic/story), MUST load appropriate skill</r>
|
|
67
|
-
<r recommended="true">📝 For large docs (PRD, epics): prefer template → fill incrementally (better performance)</r>
|
|
68
66
|
<r>PRDs emerge from user interviews, not template filling</r>
|
|
69
67
|
<r>Ship the smallest thing that validates the assumption</r>
|
|
70
68
|
<r>Every feature must trace to a user problem</r>
|
|
71
69
|
<r>Each doc file < 2000 lines (RAG-friendly)</r>
|
|
72
70
|
<r>NEVER create stories without acceptance criteria</r>
|
|
71
|
+
<r critical="MANDATORY">Task "Approach" = HIGH-LEVEL steps (WHAT to do), NOT code (HOW to do). Example: "1. Create Order struct" NOT "type Order struct {...}"</r>
|
|
73
72
|
<r critical="true">BEFORE writing epic/story: USE SEMANTIC SEARCH (see before-epic-story)</r>
|
|
74
73
|
<r critical="MANDATORY">🔍 SEARCH FIRST: You MUST call search() BEFORE glob/grep when exploring.
|
|
75
74
|
search({ query: "topic", index: "docs" }) → THEN glob if needed</r>
|
|
@@ -113,12 +112,9 @@ permission:
|
|
|
113
112
|
</phase>
|
|
114
113
|
|
|
115
114
|
<phase name="3. Execution">
|
|
116
|
-
<action>For large docs (PRD 1000+ lines): Create template → fill section by section (better performance)</action>
|
|
117
|
-
<action>For PRD: Start with "Project Classification" section FIRST</action>
|
|
118
|
-
<action>For small docs (stories, epics): Can write directly</action>
|
|
119
115
|
<action>Work through tasklist sequentially</action>
|
|
120
116
|
<action>Mark tasks in_progress → completed</action>
|
|
121
|
-
<action>If uncertain — ask, don't assume</action>
|
|
117
|
+
<action>If uncertain about something — ask, don't assume</action>
|
|
122
118
|
</phase>
|
|
123
119
|
|
|
124
120
|
<phase name="4. Review">
|
|
@@ -128,9 +124,10 @@ permission:
|
|
|
128
124
|
|
|
129
125
|
<never-do>
|
|
130
126
|
- Start writing docs WITHOUT loading the skill first
|
|
127
|
+
- Start writing docs before user confirms the plan
|
|
131
128
|
- Skip the tasklist for complex work
|
|
132
129
|
- Assume what user wants without asking
|
|
133
|
-
-
|
|
130
|
+
- Create all documents at once without progress updates
|
|
134
131
|
</never-do>
|
|
135
132
|
</workflow>
|
|
136
133
|
|
|
@@ -165,9 +162,6 @@ permission:
|
|
|
165
162
|
5. Fill Project Classification table in PRD (first section!)
|
|
166
163
|
6. Then write rest of PRD according to that size
|
|
167
164
|
|
|
168
|
-
REALITY CHECK: Most projects are TOY (30%) or SMALL (40%), MEDIUM+ (30%)
|
|
169
|
-
Default assumption: TOY/SMALL until proven otherwise
|
|
170
|
-
|
|
171
165
|
Example questions:
|
|
172
166
|
- "How many database tables do you expect?" (5-10 = SMALL, 20+ = MEDIUM)
|
|
173
167
|
- "How many external integrations?" (0-2 = SMALL, 3-5 = MEDIUM)
|
|
@@ -3,8 +3,8 @@ description: "Code Reviewer - Use for: security review, bug finding, test covera
|
|
|
3
3
|
mode: all # Invoked by @dev or via /review-story
|
|
4
4
|
temperature: 0.1 # Low temperature for precise analysis
|
|
5
5
|
|
|
6
|
-
model: openai/gpt-5.2-codex # Best at finding bugs and security issues
|
|
7
|
-
|
|
6
|
+
#model: openai/gpt-5.2-codex # Best at finding bugs and security issues
|
|
7
|
+
model: anthropic/claude-sonnet-4-5 # Best at finding bugs and security issues
|
|
8
8
|
|
|
9
9
|
# Tools - Read-only for code, but CAN write review findings to story/epic files
|
|
10
10
|
tools:
|
|
@@ -24,8 +24,8 @@ tools:
|
|
|
24
24
|
# Permissions - read-only for code, write ONLY to story/epic docs
|
|
25
25
|
permission:
|
|
26
26
|
edit:
|
|
27
|
-
"docs/sprint-artifacts/**/*.md": allow # Story and epic files
|
|
28
27
|
"*": deny # Everything else read-only
|
|
28
|
+
"docs/sprint-artifacts/**/*.md": allow # Story and epic files
|
|
29
29
|
bash:
|
|
30
30
|
"*": deny
|
|
31
31
|
# Tests
|
|
@@ -46,10 +46,9 @@ permission:
|
|
|
46
46
|
|
|
47
47
|
<activation critical="MANDATORY">
|
|
48
48
|
<step n="1">Load persona from this agent file</step>
|
|
49
|
-
<step n="2">
|
|
50
|
-
<step n="3">
|
|
51
|
-
<step n="4">
|
|
52
|
-
<step n="5">Follow code-review skill workflow exactly</step>
|
|
49
|
+
<step n="2">Greet user by {user_name}, communicate in {communication_language}</step>
|
|
50
|
+
<step n="3">CRITICAL: Auto-load code-review skill — ALL review logic is there</step>
|
|
51
|
+
<step n="4">Follow code-review skill workflow exactly</step>
|
|
53
52
|
|
|
54
53
|
<rules>
|
|
55
54
|
<r>ALWAYS communicate in {communication_language}</r>
|
|
@@ -9,102 +9,13 @@ Implement a story using red-green-refactor cycle with TODO tracking.
|
|
|
9
9
|
|
|
10
10
|
## Process
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- Parse story file, extract all tasks
|
|
18
|
-
- Add each task to TODO
|
|
19
|
-
- **If `config.yaml → development.auto_review: true`**: Add review task to TODO
|
|
20
|
-
```
|
|
21
|
-
[ ] Task 1: Create User entity
|
|
22
|
-
[ ] Task 2: Add repository
|
|
23
|
-
[ ] Task 3: Write integration tests
|
|
24
|
-
[ ] Code review by @reviewer ← if auto_review: true
|
|
25
|
-
```
|
|
26
|
-
5. Mark story as `in-progress`
|
|
27
|
-
|
|
28
|
-
### Phase 2: Implementation (for each task)
|
|
29
|
-
5. **Mark task as `in_progress` in TODO**
|
|
30
|
-
6. Delegate to @coder`s (call agents in one message or multi-agent-call if needed):
|
|
31
|
-
- 🔴 RED: Write failing test
|
|
32
|
-
- 🟢 GREEN: Implement minimal code to pass
|
|
33
|
-
- 🔵 REFACTOR: Improve while keeping tests green
|
|
34
|
-
7. Verify @coder result (tests pass)
|
|
35
|
-
8. **Mark task as `completed` in TODO**
|
|
36
|
-
9. Mark task `[x]` in story file
|
|
37
|
-
|
|
38
|
-
### Phase 3: Finalization
|
|
39
|
-
10. Run full test suite
|
|
40
|
-
11. Update story file (File List, Change Log, Dev Agent Record)
|
|
41
|
-
12. **Clear TODO** (all tasks done)
|
|
42
|
-
13. Mark story as `review`
|
|
43
|
-
|
|
44
|
-
### Phase 4: Auto Review (configurable)
|
|
45
|
-
14. Check `config.yaml → development.auto_review`:
|
|
46
|
-
- **If `auto_review: true`**: Invoke @reviewer automatically
|
|
47
|
-
- @reviewer analyzes: security, correctness, test coverage
|
|
48
|
-
- APPROVE → mark story `done`
|
|
49
|
-
- CHANGES_REQUESTED → add review tasks, go back to Phase 2
|
|
50
|
-
- BLOCKED → HALT with findings
|
|
51
|
-
- **If `auto_review: false`**: Announce "Story ready for review. Run /review-story to complete."
|
|
52
|
-
|
|
53
|
-
## TODO Workflow
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
┌─────────────────────────────────────────────────┐
|
|
57
|
-
│ @dev reads story → creates TODO: │
|
|
58
|
-
│ ┌─────────────────────────────────────────┐ │
|
|
59
|
-
│ │ [ ] Task 1: Create User entity │ │
|
|
60
|
-
│ │ [ ] Task 2: Add repository │ │
|
|
61
|
-
│ │ [ ] Task 3: Write integration tests │ │
|
|
62
|
-
│ └─────────────────────────────────────────┘ │
|
|
63
|
-
│ │
|
|
64
|
-
│ For each task: │
|
|
65
|
-
│ 1. @dev marks [→] in_progress in TODO │
|
|
66
|
-
│ 2. @dev calls @coder with task details │
|
|
67
|
-
│ 3. @coder implements (no TODO access) │
|
|
68
|
-
│ 4. @dev verifies result │
|
|
69
|
-
│ 5. @dev marks [✓] completed in TODO │
|
|
70
|
-
│ 6. @dev marks [x] in story file │
|
|
71
|
-
└─────────────────────────────────────────────────┘
|
|
72
|
-
```
|
|
12
|
+
1. **Load Skill**: Read and follow `.opencode/skills/dev-story/SKILL.md`
|
|
13
|
+
2. **Setup**: Find story file, create TODO from tasks, mark story `in-progress`
|
|
14
|
+
3. **Execute**: Delegate tasks to @coder one by one (or parallel if independent), verify each result
|
|
15
|
+
4. **Finalize**: Run full test suite, update story file, mark story `review`
|
|
16
|
+
5. **Review**: If `config.yaml → development.auto_review: true` — invoke @reviewer automatically
|
|
73
17
|
|
|
74
18
|
## IMPORTANT SKILLS TO LOAD
|
|
75
19
|
|
|
76
|
-
- `dev-story` -
|
|
20
|
+
- `dev-story` - The primary algorithm for this command
|
|
77
21
|
- `test-design` - Test writing patterns
|
|
78
|
-
|
|
79
|
-
## Output
|
|
80
|
-
|
|
81
|
-
- Implementation code
|
|
82
|
-
- Unit tests
|
|
83
|
-
- Integration tests
|
|
84
|
-
- Updated story file with:
|
|
85
|
-
- Tasks marked `[x]`
|
|
86
|
-
- File List
|
|
87
|
-
- Change Log
|
|
88
|
-
- Dev Agent Record
|
|
89
|
-
|
|
90
|
-
## HALT Conditions
|
|
91
|
-
|
|
92
|
-
The workflow will HALT and ask for input when:
|
|
93
|
-
- Additional dependencies need approval
|
|
94
|
-
- 3 consecutive implementation failures
|
|
95
|
-
- Required configuration is missing
|
|
96
|
-
- Ambiguous requirements need clarification
|
|
97
|
-
|
|
98
|
-
## Story Status Flow
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
ready-for-dev → in-progress -> @coder`s → review → @reviewer → done
|
|
102
|
-
↑_____________________| (if changes requested)
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Next Steps After Completion
|
|
106
|
-
|
|
107
|
-
- **If `auto_review: true`**: Story automatically reviewed by @reviewer
|
|
108
|
-
- Approved → `done`
|
|
109
|
-
- Changes requested → fix and re-run
|
|
110
|
-
- **If `auto_review: false`**: Run `/review-story` manually
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/master/dcp.schema.json",
|
|
3
|
+
|
|
4
|
+
// Workspace tools are pruned by @comfanion/usethis_search plugin itself
|
|
5
|
+
// (workspace state pruning — different queries supersede each other).
|
|
6
|
+
// DCP should NOT touch these — add to protectedTools everywhere.
|
|
7
|
+
|
|
8
|
+
"strategies": {
|
|
9
|
+
"deduplication": {
|
|
10
|
+
"enabled": true,
|
|
11
|
+
"protectedTools": [
|
|
12
|
+
"search",
|
|
13
|
+
"workspace_list",
|
|
14
|
+
"workspace_forget",
|
|
15
|
+
"workspace_clear",
|
|
16
|
+
"workspace_restore"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"supersedeWrites": {
|
|
20
|
+
"enabled": true
|
|
21
|
+
},
|
|
22
|
+
"purgeErrors": {
|
|
23
|
+
"enabled": true,
|
|
24
|
+
"turns": 4,
|
|
25
|
+
"protectedTools": [
|
|
26
|
+
"search",
|
|
27
|
+
"workspace_list",
|
|
28
|
+
"workspace_forget",
|
|
29
|
+
"workspace_clear",
|
|
30
|
+
"workspace_restore"
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
"tools": {
|
|
36
|
+
"discard": {
|
|
37
|
+
"enabled": true
|
|
38
|
+
},
|
|
39
|
+
"extract": {
|
|
40
|
+
"enabled": true
|
|
41
|
+
},
|
|
42
|
+
"settings": {
|
|
43
|
+
"protectedTools": [
|
|
44
|
+
"search",
|
|
45
|
+
"workspace_list",
|
|
46
|
+
"workspace_forget",
|
|
47
|
+
"workspace_clear",
|
|
48
|
+
"workspace_restore"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
"commands": {
|
|
54
|
+
"enabled": true,
|
|
55
|
+
"protectedTools": [
|
|
56
|
+
"search",
|
|
57
|
+
"workspace_list",
|
|
58
|
+
"workspace_forget",
|
|
59
|
+
"workspace_clear",
|
|
60
|
+
"workspace_restore"
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://opencode.ai/config.json",
|
|
3
|
-
"plugin": ["@comfanion/usethis_todo","@comfanion/usethis_compaction","@comfanion/usethis_search","@comfanion/usethis_version_check"],
|
|
3
|
+
"plugin": ["@comfanion/usethis_todo","@comfanion/usethis_compaction","@comfanion/usethis_search","@comfanion/usethis_version_check","@tarquinen/opencode-dcp"],
|
|
4
4
|
|
|
5
5
|
"instructions": [
|
|
6
6
|
"AGENTS.md",
|
|
@@ -83,10 +83,11 @@ metadata:
|
|
|
83
83
|
|
|
84
84
|
<action name="execute-story">
|
|
85
85
|
Follow /dev-story logic:
|
|
86
|
+
- Phase 0: Study existing code, design interfaces (if parallel possible)
|
|
86
87
|
- Read ONE story file
|
|
87
|
-
- Execute tasks
|
|
88
|
+
- Execute tasks in BATCHES: Foundation (sequential) → Implementation (parallel if safe) → Integration (sequential)
|
|
88
89
|
- NEVER delegate entire story to @coder in one prompt
|
|
89
|
-
- After each
|
|
90
|
+
- After each batch: SYNC POINT (verify integration)
|
|
90
91
|
</action>
|
|
91
92
|
|
|
92
93
|
<action name="story-to-review">
|
|
@@ -27,6 +27,43 @@ metadata:
|
|
|
27
27
|
|
|
28
28
|
<workflow name="dev-story">
|
|
29
29
|
|
|
30
|
+
<phase name="0-study" title="Study Existing Code (MANDATORY)">
|
|
31
|
+
<critical>BEFORE any coding, study existing patterns!</critical>
|
|
32
|
+
|
|
33
|
+
<step n="1">Search similar features:
|
|
34
|
+
search({ query: "similar feature pattern", index: "code" })
|
|
35
|
+
</step>
|
|
36
|
+
|
|
37
|
+
<step n="2">Read 2-3 examples:
|
|
38
|
+
- How are entities/services/handlers structured?
|
|
39
|
+
- What error handling patterns exist?
|
|
40
|
+
- What test patterns are used?
|
|
41
|
+
- What imports/dependencies are common?
|
|
42
|
+
</step>
|
|
43
|
+
|
|
44
|
+
<step n="3">Read coding standards:
|
|
45
|
+
- docs/coding-standards/README.md
|
|
46
|
+
- docs/coding-standards/patterns.md
|
|
47
|
+
</step>
|
|
48
|
+
|
|
49
|
+
<step n="4">Analyze task dependencies:
|
|
50
|
+
- Which tasks can run parallel? (different files, no deps)
|
|
51
|
+
- Which must be sequential? (dependencies exist)
|
|
52
|
+
</step>
|
|
53
|
+
|
|
54
|
+
<step n="5">If parallel possible → design interfaces FIRST:
|
|
55
|
+
- Shared contract (interface signature)
|
|
56
|
+
- Shared types (request/response models)
|
|
57
|
+
- Error handling approach
|
|
58
|
+
</step>
|
|
59
|
+
|
|
60
|
+
<output>Study Summary (write to story file):
|
|
61
|
+
- Existing patterns: [file paths]
|
|
62
|
+
- Shared interfaces (if parallel): [signatures]
|
|
63
|
+
- Batch plan: [sequential/parallel grouping]
|
|
64
|
+
</output>
|
|
65
|
+
</phase>
|
|
66
|
+
|
|
30
67
|
<phase name="1-context" title="Load Minimal Context">
|
|
31
68
|
<critical>DO NOT read prd.md or architecture.md!</critical>
|
|
32
69
|
<read>
|
|
@@ -90,28 +127,44 @@ metadata:
|
|
|
90
127
|
</example>
|
|
91
128
|
</phase>
|
|
92
129
|
|
|
93
|
-
<phase name="3-execute" title="Execute Tasks —
|
|
130
|
+
<phase name="3-execute" title="Execute Tasks — Batches (Interface-First)">
|
|
94
131
|
<critical>DO NOT delegate entire story to @coder in one prompt!</critical>
|
|
132
|
+
|
|
133
|
+
<batch-system>
|
|
134
|
+
<batch n="0" type="sequential">Foundation (interfaces, types)</batch>
|
|
135
|
+
<batch n="1" type="parallel">Implementations (different files, same interface)</batch>
|
|
136
|
+
<batch n="2" type="sequential">Integration (needs all previous)</batch>
|
|
137
|
+
</batch-system>
|
|
138
|
+
|
|
95
139
|
<strategy>
|
|
96
|
-
For each
|
|
97
|
-
1.
|
|
98
|
-
2. If
|
|
99
|
-
3.
|
|
100
|
-
4.
|
|
140
|
+
For each batch:
|
|
141
|
+
1. If batch is sequential → execute tasks one by one
|
|
142
|
+
2. If batch is parallel → execute all tasks simultaneously
|
|
143
|
+
3. After batch completes → SYNC POINT (verify integration)
|
|
144
|
+
4. If sync OK → next batch, if fails → fix and retry (max 2 attempts)
|
|
101
145
|
</strategy>
|
|
102
|
-
|
|
103
|
-
<step n="1">Pick next task(s) from TODO</step>
|
|
104
|
-
<step n="2">Transform task → executable instruction (phase 2)</step>
|
|
105
|
-
<step n="3">Delegate to @coder using template below</step>
|
|
106
|
-
<step n="4">Verify result: tests pass, files compile</step>
|
|
107
|
-
<step n="5">Mark task ✅ in story file + TODO</step>
|
|
108
|
-
<step n="6">Update .opencode/session-state.yaml</step>
|
|
109
|
-
<step n="7">Next task or story complete</step>
|
|
110
|
-
</loop>
|
|
146
|
+
|
|
111
147
|
<parallel-rules>
|
|
112
|
-
|
|
113
|
-
|
|
148
|
+
<safe>Different files + shared interface + no dependencies</safe>
|
|
149
|
+
<unsafe>Same file OR no contract OR dependencies between tasks</unsafe>
|
|
150
|
+
<example-safe>Batch 0: OrderValidator interface → Batch 1 (parallel): RequiredFieldsValidator, InventoryValidator, PriceValidator</example-safe>
|
|
151
|
+
<example-unsafe>T1: Add field to Order entity, T2: Add method to Order entity → SAME FILE, must be sequential</example-unsafe>
|
|
114
152
|
</parallel-rules>
|
|
153
|
+
|
|
154
|
+
<loop>
|
|
155
|
+
<step n="1">Pick next batch from TODO</step>
|
|
156
|
+
<step n="2">Transform tasks → executable instructions (include Study Summary)</step>
|
|
157
|
+
<step n="3">
|
|
158
|
+
If sequential: delegate ONE task, wait for completion
|
|
159
|
+
If parallel: delegate ALL tasks in batch simultaneously (each with Study Summary + interface contract)
|
|
160
|
+
</step>
|
|
161
|
+
<step n="4">Wait for batch completion</step>
|
|
162
|
+
<step n="5">SYNC POINT: verify all files compile together, interfaces match, tests pass</step>
|
|
163
|
+
<step n="6">If sync fails: identify issues, fix (max 2 attempts), then HALT if still failing</step>
|
|
164
|
+
<step n="7">Mark batch tasks ✅ in story file + TODO</step>
|
|
165
|
+
<step n="8">Update .opencode/session-state.yaml</step>
|
|
166
|
+
<step n="9">Next batch or story complete</step>
|
|
167
|
+
</loop>
|
|
115
168
|
</phase>
|
|
116
169
|
|
|
117
170
|
<phase name="4-review" title="Review BEFORE Done">
|
|
@@ -15,18 +15,39 @@ metadata:
|
|
|
15
15
|
<definition>Epic = Group of stories forming complete feature/module</definition>
|
|
16
16
|
|
|
17
17
|
<scope_by_project_size>
|
|
18
|
-
<TOY scope="Major feature" stories="3-
|
|
19
|
-
<SMALL scope="Feature area" stories="
|
|
20
|
-
<MEDIUM scope="Module/Unit" stories="
|
|
21
|
-
<LARGE scope="Domain" stories="
|
|
22
|
-
<ENTERPRISE scope="Bounded Context" stories="15
|
|
18
|
+
<TOY scope="Major feature" stories="3-6" size="S"/>
|
|
19
|
+
<SMALL scope="Feature area" stories="4-8" size="M"/>
|
|
20
|
+
<MEDIUM scope="Module/Unit" stories="5-10" size="L"/>
|
|
21
|
+
<LARGE scope="Domain" stories="7-12" size="XL"/>
|
|
22
|
+
<ENTERPRISE scope="Bounded Context" stories="10-15" size="XXL"/>
|
|
23
23
|
</scope_by_project_size>
|
|
24
24
|
|
|
25
|
-
<
|
|
26
|
-
<principle>Epic =
|
|
27
|
-
<
|
|
28
|
-
<
|
|
29
|
-
|
|
25
|
+
<feature_progression>
|
|
26
|
+
<principle>Epic = Series of working features, each builds on previous</principle>
|
|
27
|
+
<approach>Start SMALL (happy path) → validate → expand → repeat</approach>
|
|
28
|
+
<story_pattern>
|
|
29
|
+
<story n="1" size="S">Core feature (happy path, minimal entities)</story>
|
|
30
|
+
<story n="2" size="S">Add validation/error handling</story>
|
|
31
|
+
<story n="3" size="M">Integration with existing system</story>
|
|
32
|
+
<story n="4" size="S">Edge cases and refinements</story>
|
|
33
|
+
<story n="5" size="M">Performance/scale (if needed)</story>
|
|
34
|
+
</story_pattern>
|
|
35
|
+
<result>After EACH story: feature works, is tested, can be demoed</result>
|
|
36
|
+
|
|
37
|
+
<anti_pattern>
|
|
38
|
+
<bad_story>S01: Domain layer (all entities)</bad_story>
|
|
39
|
+
<bad_story>S02: Repository layer (all repos)</bad_story>
|
|
40
|
+
<bad_story>S03: Use case layer (all logic)</bad_story>
|
|
41
|
+
<problem>Nothing works until S03 done. 2000+ lines uncommitted code.</problem>
|
|
42
|
+
</anti_pattern>
|
|
43
|
+
|
|
44
|
+
<good_pattern>
|
|
45
|
+
<good_story>S01: Create simple order (entity + repo + API + test)</good_story>
|
|
46
|
+
<good_story>S02: Validate order data (add validation + tests)</good_story>
|
|
47
|
+
<good_story>S03: Check inventory (integration + tests)</good_story>
|
|
48
|
+
<result>After S01: can create order. After S02: validation works. Incremental delivery.</result>
|
|
49
|
+
</good_pattern>
|
|
50
|
+
</feature_progression>
|
|
30
51
|
|
|
31
52
|
<status_values>
|
|
32
53
|
<todo>Not started</todo>
|
|
@@ -95,14 +116,16 @@ metadata:
|
|
|
95
116
|
<references>Links to PRD, Architecture, Units</references>
|
|
96
117
|
</structure>
|
|
97
118
|
|
|
98
|
-
<
|
|
99
|
-
<
|
|
100
|
-
<
|
|
101
|
-
<
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
119
|
+
<story_approach>
|
|
120
|
+
<principle>Build working features incrementally, not layers</principle>
|
|
121
|
+
<each_story_includes>Domain + Repository + API + Tests (thin vertical slice)</each_story_includes>
|
|
122
|
+
<progression>
|
|
123
|
+
<phase n="1">Happy path (minimal, working)</phase>
|
|
124
|
+
<phase n="2">Validation and errors</phase>
|
|
125
|
+
<phase n="3">Integration with existing</phase>
|
|
126
|
+
<phase n="4">Edge cases and optimization</phase>
|
|
127
|
+
</progression>
|
|
128
|
+
</story_approach>
|
|
106
129
|
|
|
107
130
|
<naming>
|
|
108
131
|
<file>epic-[NN]-[description].md</file>
|
|
@@ -19,33 +19,102 @@ metadata:
|
|
|
19
19
|
<definition>Story = Smallest working increment (one layer/feature)</definition>
|
|
20
20
|
|
|
21
21
|
<sizes>
|
|
22
|
-
<XS tasks="1-2" use="
|
|
23
|
-
<S tasks="2-
|
|
24
|
-
<M tasks="
|
|
25
|
-
<L tasks="8
|
|
26
|
-
<XL tasks="
|
|
22
|
+
<XS tasks="1-2" use="Trivial additions"/>
|
|
23
|
+
<S tasks="2-3" use="TOY, SMALL projects (PREFERRED)" target="true"/>
|
|
24
|
+
<M tasks="3-5" use="MEDIUM projects (PREFERRED)" target="true"/>
|
|
25
|
+
<L tasks="5-8" use="LARGE - only if feature is complex"/>
|
|
26
|
+
<XL tasks="8+" use="FORBIDDEN - must split into multiple stories" forbidden="true"/>
|
|
27
27
|
</sizes>
|
|
28
28
|
|
|
29
|
-
<
|
|
30
|
-
<
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
<feature_driven>
|
|
30
|
+
<definition>Story = ONE working feature end-to-end (thin vertical slice)</definition>
|
|
31
|
+
<principle>Each story delivers value users can see/test</principle>
|
|
32
|
+
<approach>
|
|
33
|
+
<step>1. Study existing code (MANDATORY - find patterns)</step>
|
|
34
|
+
<step>2. Write test for core functionality</step>
|
|
35
|
+
<step>3. Implement MINIMAL code (domain + repo + API if needed)</step>
|
|
36
|
+
<step>4. Verify it works end-to-end</step>
|
|
37
|
+
</approach>
|
|
38
|
+
<examples>
|
|
39
|
+
<good>"User can create simple order" → Order entity + CreateOrder API + test</good>
|
|
40
|
+
<good>"Order validates required fields" → Add validation logic + tests</good>
|
|
41
|
+
<good>"Order checks inventory" → Integration with inventory service + tests</good>
|
|
42
|
+
<bad>"Create domain layer" → No working feature, just entities</bad>
|
|
43
|
+
<bad>"Implement repository layer" → Can't test without use case</bad>
|
|
44
|
+
<bad>"All CRUD operations" → Too big, split into Create/Read/Update/Delete stories</bad>
|
|
45
|
+
</examples>
|
|
46
|
+
<result>After story: feature WORKS, is TESTED, can be DEMOED</result>
|
|
47
|
+
</feature_driven>
|
|
35
48
|
|
|
36
|
-
<
|
|
37
|
-
<
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
</
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
+
<task_composition>
|
|
50
|
+
<task n="1" type="study">Study existing code, design interfaces (if parallel planned)</task>
|
|
51
|
+
<task n="2" type="test">Write test for core functionality</task>
|
|
52
|
+
<task n="3" type="implement">Minimal implementation (domain + repo + API)</task>
|
|
53
|
+
<task n="4" type="verify">Integration test (if needed)</task>
|
|
54
|
+
<note>Most stories: 2-4 tasks. Prefer smaller stories over larger ones.</note>
|
|
55
|
+
</task_composition>
|
|
56
|
+
|
|
57
|
+
<task_approach_section critical="MANDATORY">
|
|
58
|
+
<rule>Each task MUST have "Approach" section with HIGH-LEVEL steps</rule>
|
|
59
|
+
<format>Numbered list of WHAT to do, NOT HOW (no code)</format>
|
|
60
|
+
<good_example>
|
|
61
|
+
1. Create Order struct with fields from Unit doc
|
|
62
|
+
2. Add NewOrder() constructor with validation
|
|
63
|
+
3. Add Validate() method
|
|
64
|
+
4. Write tests: valid order, empty fields, invalid status
|
|
65
|
+
</good_example>
|
|
66
|
+
<bad_example>
|
|
67
|
+
1. type Order struct { ID string; CustomerID string }
|
|
68
|
+
2. func NewOrder(id, customerID string) (*Order, error) { ... }
|
|
69
|
+
❌ This is CODE, not approach!
|
|
70
|
+
</bad_example>
|
|
71
|
+
<remember>Approach = WHAT steps to take. @dev transforms this to HOW (technical details) for @coder.</remember>
|
|
72
|
+
</task_approach_section>
|
|
73
|
+
|
|
74
|
+
<test_strategy critical="MANDATORY">
|
|
75
|
+
<principle>Test CORE functionality first, expand coverage incrementally. No tests for sake of tests.</principle>
|
|
76
|
+
|
|
77
|
+
<priority>
|
|
78
|
+
<p1>Business logic (validation, calculations, decisions)</p1>
|
|
79
|
+
<p2>Integration points (API calls, database, external services)</p2>
|
|
80
|
+
<p3>Error handling (edge cases, failures)</p3>
|
|
81
|
+
<p4>Happy path (normal flow)</p4>
|
|
82
|
+
</priority>
|
|
83
|
+
|
|
84
|
+
<do_test>
|
|
85
|
+
<what>Business rules (validation, calculations)</what>
|
|
86
|
+
<what>State changes (create, update, delete)</what>
|
|
87
|
+
<what>Error conditions (invalid input, failures)</what>
|
|
88
|
+
<what>Integration with other services</what>
|
|
89
|
+
</do_test>
|
|
90
|
+
|
|
91
|
+
<dont_test>
|
|
92
|
+
<skip>Simple getters/setters (no logic)</skip>
|
|
93
|
+
<skip>Trivial constructors (just assign fields)</skip>
|
|
94
|
+
<skip>Third-party library internals</skip>
|
|
95
|
+
<skip>Database framework internals</skip>
|
|
96
|
+
</dont_test>
|
|
97
|
+
|
|
98
|
+
<incremental_approach>
|
|
99
|
+
<story n="1">Core functionality only (happy path + critical validation)</story>
|
|
100
|
+
<story n="2">Add edge cases as you discover them</story>
|
|
101
|
+
<story n="3">Integration tests when connecting systems</story>
|
|
102
|
+
<avoid>Writing 100% coverage in first story - wasteful, most tests never catch bugs</avoid>
|
|
103
|
+
</incremental_approach>
|
|
104
|
+
|
|
105
|
+
<examples>
|
|
106
|
+
<good>Story: CreateOrder → Test: valid order, missing customer (2 tests, covers 80% of real issues)</good>
|
|
107
|
+
<good>Story: InventoryCheck → Test: success, out-of-stock, service down (3 tests, critical paths)</good>
|
|
108
|
+
<bad>Story: CreateOrder → 15 tests for all field combinations (overkill, testing framework not logic)</bad>
|
|
109
|
+
<bad>Test OrderID() getter → returns field (trivial, no value)</bad>
|
|
110
|
+
</examples>
|
|
111
|
+
|
|
112
|
+
<metrics>
|
|
113
|
+
<wrong>Coverage % target (80%, 90%) - encourages testing trivial code</wrong>
|
|
114
|
+
<right>Core business paths tested (are critical flows covered?)</right>
|
|
115
|
+
<right>Critical errors handled (can system fail gracefully?)</right>
|
|
116
|
+
</metrics>
|
|
117
|
+
</test_strategy>
|
|
49
118
|
|
|
50
119
|
<status_values>
|
|
51
120
|
<draft>Being written</draft>
|