@comfanion/workflow 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/README.md +185 -0
- package/bin/cli.js +406 -0
- package/package.json +50 -0
- package/src/build-info.json +16 -0
- package/src/opencode/ARCHITECTURE.md +255 -0
- package/src/opencode/FLOW.yaml +900 -0
- package/src/opencode/agents/analyst.md +141 -0
- package/src/opencode/agents/architect.md +177 -0
- package/src/opencode/agents/change-manager.md +263 -0
- package/src/opencode/agents/dev.md +171 -0
- package/src/opencode/agents/module-docs.md +628 -0
- package/src/opencode/agents/pm.md +157 -0
- package/src/opencode/agents/researcher.md +254 -0
- package/src/opencode/agents/sm.md +184 -0
- package/src/opencode/agents/workflow-orchestrator.md +249 -0
- package/src/opencode/checklists/architecture-checklist.md +166 -0
- package/src/opencode/checklists/code-review-checklist.md +151 -0
- package/src/opencode/checklists/prd-checklist.md +140 -0
- package/src/opencode/checklists/requirements-checklist.md +86 -0
- package/src/opencode/checklists/story-checklist.md +137 -0
- package/src/opencode/commands/architecture.md +68 -0
- package/src/opencode/commands/archive.md +146 -0
- package/src/opencode/commands/change.md +169 -0
- package/src/opencode/commands/clarify.md +132 -0
- package/src/opencode/commands/code-review.md +96 -0
- package/src/opencode/commands/coding-standards.md +102 -0
- package/src/opencode/commands/dev-story.md +80 -0
- package/src/opencode/commands/diagram.md +152 -0
- package/src/opencode/commands/epics.md +52 -0
- package/src/opencode/commands/help.md +139 -0
- package/src/opencode/commands/jira-sync.md +58 -0
- package/src/opencode/commands/module-docs.md +158 -0
- package/src/opencode/commands/prd.md +63 -0
- package/src/opencode/commands/quick.md +166 -0
- package/src/opencode/commands/requirements.md +49 -0
- package/src/opencode/commands/research.md +113 -0
- package/src/opencode/commands/sprint-plan.md +59 -0
- package/src/opencode/commands/stories.md +61 -0
- package/src/opencode/commands/validate.md +84 -0
- package/src/opencode/commands/workflow-status.md +150 -0
- package/src/opencode/config.yaml +223 -0
- package/src/opencode/opencode.json +36 -0
- package/src/opencode/skills/acceptance-criteria/SKILL.md +212 -0
- package/src/opencode/skills/adr-writing/SKILL.md +241 -0
- package/src/opencode/skills/architecture-design/SKILL.md +183 -0
- package/src/opencode/skills/architecture-validation/SKILL.md +199 -0
- package/src/opencode/skills/archiving/SKILL.md +191 -0
- package/src/opencode/skills/changelog/SKILL.md +280 -0
- package/src/opencode/skills/code-review/SKILL.md +193 -0
- package/src/opencode/skills/coding-standards/SKILL.md +430 -0
- package/src/opencode/skills/diagram-creation/SKILL.md +273 -0
- package/src/opencode/skills/doc-todo/SKILL.md +325 -0
- package/src/opencode/skills/epic-writing/SKILL.md +291 -0
- package/src/opencode/skills/jira-integration/SKILL.md +560 -0
- package/src/opencode/skills/methodologies/SKILL.md +376 -0
- package/src/opencode/skills/module-documentation/SKILL.md +214 -0
- package/src/opencode/skills/prd-validation/SKILL.md +164 -0
- package/src/opencode/skills/prd-writing/SKILL.md +104 -0
- package/src/opencode/skills/requirements-gathering/SKILL.md +132 -0
- package/src/opencode/skills/requirements-validation/SKILL.md +141 -0
- package/src/opencode/skills/research-methodology/SKILL.md +140 -0
- package/src/opencode/skills/sprint-planning/SKILL.md +217 -0
- package/src/opencode/skills/story-writing/SKILL.md +574 -0
- package/src/opencode/skills/test-design/SKILL.md +313 -0
- package/src/opencode/skills/translation/SKILL.md +411 -0
- package/src/opencode/templates/CHANGELOG.md +82 -0
- package/src/opencode/templates/adr-template.md +115 -0
- package/src/opencode/templates/architecture-template.md +362 -0
- package/src/opencode/templates/change-proposal-template.md +186 -0
- package/src/opencode/templates/epic-template.md +151 -0
- package/src/opencode/templates/git-workflow-template.md +384 -0
- package/src/opencode/templates/integration-tests-template.md +265 -0
- package/src/opencode/templates/jira-cache-template.yaml +103 -0
- package/src/opencode/templates/module-index-template.md +139 -0
- package/src/opencode/templates/module-test-cases-template.md +230 -0
- package/src/opencode/templates/prd-acceptance-criteria-template.md +124 -0
- package/src/opencode/templates/prd-template.md +479 -0
- package/src/opencode/templates/requirements-template.md +132 -0
- package/src/opencode/templates/sprint-status-template.yaml +84 -0
- package/src/opencode/templates/story-template.md +437 -0
- package/src/opencode/templates/testing-standards-template.md +359 -0
- package/src/opencode/workflows/dev-story/instructions.md +529 -0
- package/src/repo-structure/.gitattributes +64 -0
- package/src/repo-structure/CONTRIBUTING.md +182 -0
- package/src/repo-structure/README.md +77 -0
- package/src/repo-structure/docs/README.md +62 -0
- package/src/repo-structure/docs/api/README.md +43 -0
- package/src/repo-structure/docs/architecture/README.md +36 -0
- package/src/repo-structure/docs/architecture/adr/README.md +53 -0
- package/src/repo-structure/docs/architecture/diagrams/README.md +59 -0
- package/src/repo-structure/docs/coding-standards/README.md +52 -0
- package/src/repo-structure/docs/confluence/README.md +43 -0
- package/src/repo-structure/docs/requirements/README.md +28 -0
- package/src/repo-structure/docs/sprint-artifacts/README.md +76 -0
- package/src/repo-structure/docs/sprint-artifacts/backlog/README.md +24 -0
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
# Dev Story Workflow
|
|
2
|
+
|
|
3
|
+
Execute a story by implementing tasks/subtasks, writing tests, validating, and updating the story file per acceptance criteria.
|
|
4
|
+
|
|
5
|
+
## Critical Rules
|
|
6
|
+
|
|
7
|
+
- **Story File is the single source of truth** - tasks sequence is authoritative
|
|
8
|
+
- **Respect task dependencies** - never start blocked tasks
|
|
9
|
+
- **Methodology from config.yaml** - TDD or STUB approach
|
|
10
|
+
- **Tests are MANDATORY validation** - each task has tests that MUST pass
|
|
11
|
+
- **Continue until COMPLETE** - do not stop for "milestones"
|
|
12
|
+
- **NEVER lie about tests** - tests must actually exist and pass
|
|
13
|
+
|
|
14
|
+
## Methodology Selection
|
|
15
|
+
|
|
16
|
+
Read from `config.yaml → development.methodology`:
|
|
17
|
+
|
|
18
|
+
| Methodology | Flow | Validation |
|
|
19
|
+
|-------------|------|------------|
|
|
20
|
+
| **TDD** | Interface → Test (RED) → Impl (GREEN) → Refactor | Test must FAIL first, then PASS |
|
|
21
|
+
| **STUB** | Interface → Stub → Test → Real Impl | Test against stub, then real |
|
|
22
|
+
|
|
23
|
+
## Workflow Steps
|
|
24
|
+
|
|
25
|
+
### Step 1: Find and Load Story
|
|
26
|
+
|
|
27
|
+
```xml
|
|
28
|
+
<step n="1" goal="Find next ready story and load it">
|
|
29
|
+
|
|
30
|
+
<!-- MODE 1: Jira link provided -->
|
|
31
|
+
<check if="jira_link is provided">
|
|
32
|
+
<action>Extract Jira key from link</action>
|
|
33
|
+
<action>Load jira-cache.yaml</action>
|
|
34
|
+
<action>Lookup story by Jira key</action>
|
|
35
|
+
<check if="found in cache">
|
|
36
|
+
<action>Get local_doc path from cache</action>
|
|
37
|
+
<action>Get branch name from cache</action>
|
|
38
|
+
<output>
|
|
39
|
+
📋 Jira: {{jira_key}} - {{summary}}
|
|
40
|
+
📄 Local: {{local_doc}}
|
|
41
|
+
🌿 Branch: {{branch}}
|
|
42
|
+
</output>
|
|
43
|
+
</check>
|
|
44
|
+
<check if="not in cache">
|
|
45
|
+
<action>Fetch from Jira API</action>
|
|
46
|
+
<action>Find matching local doc by summary</action>
|
|
47
|
+
<ask>Link {{jira_key}} to which local doc?</ask>
|
|
48
|
+
</check>
|
|
49
|
+
<goto anchor="parse_story" />
|
|
50
|
+
</check>
|
|
51
|
+
|
|
52
|
+
<!-- MODE 2: Local path provided -->
|
|
53
|
+
<check if="story_path is provided">
|
|
54
|
+
<action>Use story_path directly</action>
|
|
55
|
+
<action>Check jira-cache.yaml for Jira link</action>
|
|
56
|
+
<check if="jira linked">
|
|
57
|
+
<output>📋 Jira: {{jira_key}} linked</output>
|
|
58
|
+
</check>
|
|
59
|
+
<goto anchor="parse_story" />
|
|
60
|
+
</check>
|
|
61
|
+
|
|
62
|
+
<!-- MODE 3: Auto-find next story -->
|
|
63
|
+
<check if="no input provided">
|
|
64
|
+
<action>Load jira-cache.yaml</action>
|
|
65
|
+
<check if="jira.control_development enabled">
|
|
66
|
+
<action>Find stories with status = "planned" or "in_progress"</action>
|
|
67
|
+
<output>
|
|
68
|
+
📋 Ready for development:
|
|
69
|
+
|
|
70
|
+
| # | Jira | Story | Status | Branch |
|
|
71
|
+
|---|------|-------|--------|--------|
|
|
72
|
+
| 1 | PROJ-S01 | Product Aggregate | planned | - |
|
|
73
|
+
| 2 | PROJ-S02 | Product Repository | in_progress | feature/... |
|
|
74
|
+
</output>
|
|
75
|
+
<ask>Which story to work on? (number or Jira key)</ask>
|
|
76
|
+
</check>
|
|
77
|
+
<check else="no jira control">
|
|
78
|
+
<action>Load sprint-status.yaml</action>
|
|
79
|
+
<action>Find FIRST story with status = "ready-for-dev"</action>
|
|
80
|
+
</check>
|
|
81
|
+
</check>
|
|
82
|
+
|
|
83
|
+
<anchor id="parse_story" />
|
|
84
|
+
<action>Read COMPLETE story file</action>
|
|
85
|
+
<action>Parse sections: Story, AC, Tasks, Dev Notes, Jira Metadata</action>
|
|
86
|
+
<action>Identify first incomplete task</action>
|
|
87
|
+
<action if="no incomplete tasks">COMPLETE - goto Step 7</action>
|
|
88
|
+
</step>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Step 1b: Jira Setup (if control_development)
|
|
92
|
+
|
|
93
|
+
```xml
|
|
94
|
+
<step n="1b" goal="Setup Jira task and branch">
|
|
95
|
+
<check if="jira.control_development enabled AND story has jira_key">
|
|
96
|
+
|
|
97
|
+
<!-- Transition to In Progress -->
|
|
98
|
+
<check if="jira status != in_progress">
|
|
99
|
+
<action>Transition Jira issue to "In Progress"</action>
|
|
100
|
+
<action>Update cache</action>
|
|
101
|
+
<output>📋 Jira {{jira_key}} → In Progress</output>
|
|
102
|
+
</check>
|
|
103
|
+
|
|
104
|
+
<!-- Create/checkout branch -->
|
|
105
|
+
<check if="branch not exists">
|
|
106
|
+
<action>Generate branch name from config pattern</action>
|
|
107
|
+
<action>Create branch from epic branch or main</action>
|
|
108
|
+
<action>Link branch to Jira issue</action>
|
|
109
|
+
<action>Update cache</action>
|
|
110
|
+
<output>🌿 Branch created: {{branch}}</output>
|
|
111
|
+
</check>
|
|
112
|
+
<check if="branch exists">
|
|
113
|
+
<action>Checkout existing branch</action>
|
|
114
|
+
<output>🌿 Switched to: {{branch}}</output>
|
|
115
|
+
</check>
|
|
116
|
+
|
|
117
|
+
<!-- Store task context -->
|
|
118
|
+
<action>Store in session: jira_key, branch, transitions</action>
|
|
119
|
+
</check>
|
|
120
|
+
</step>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Step 2: Load Context
|
|
124
|
+
|
|
125
|
+
```xml
|
|
126
|
+
<step n="2" goal="Load project context and story information">
|
|
127
|
+
<action>Load project-context.md if exists</action>
|
|
128
|
+
<action>Load CLAUDE.md for coding standards</action>
|
|
129
|
+
<action>Extract developer guidance from Dev Notes section</action>
|
|
130
|
+
<action>Note architecture requirements and technical specifications</action>
|
|
131
|
+
|
|
132
|
+
<output>✅ **Context Loaded**
|
|
133
|
+
- Story: {{story_title}}
|
|
134
|
+
- First task: {{first_incomplete_task}}
|
|
135
|
+
- Architecture guidance available: {{has_architecture}}
|
|
136
|
+
- Coding standards loaded: {{has_claude_md}}
|
|
137
|
+
</output>
|
|
138
|
+
</step>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Step 3: Mark Story In-Progress
|
|
142
|
+
|
|
143
|
+
```xml
|
|
144
|
+
<step n="3" goal="Mark story in-progress">
|
|
145
|
+
<check if="sprint_status file exists">
|
|
146
|
+
<action>Update story status to "in-progress"</action>
|
|
147
|
+
<output>🚀 Starting work on story {{story_key}}</output>
|
|
148
|
+
</check>
|
|
149
|
+
|
|
150
|
+
<action>Update Status section in story file to "in-progress"</action>
|
|
151
|
+
</step>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Step 4: Implement Task (Respect Dependencies)
|
|
155
|
+
|
|
156
|
+
```xml
|
|
157
|
+
<step n="4" goal="Implement task following red-green-refactor cycle, respecting dependencies">
|
|
158
|
+
<critical>RESPECT TASK DEPENDENCIES - never start a task if dependencies are incomplete</critical>
|
|
159
|
+
|
|
160
|
+
<!-- DEPENDENCY CHECK -->
|
|
161
|
+
<phase name="DEPENDENCY_CHECK">
|
|
162
|
+
<action>Parse task summary table from story file</action>
|
|
163
|
+
<action>Read "Depends On" column for current task</action>
|
|
164
|
+
<check if="dependencies exist AND any dependency not marked ✅">
|
|
165
|
+
<action>SKIP this task</action>
|
|
166
|
+
<action>Find next task with all dependencies satisfied</action>
|
|
167
|
+
<output>⏸️ Task {{task_id}} blocked by incomplete dependencies: {{blocking_tasks}}</output>
|
|
168
|
+
</check>
|
|
169
|
+
<check if="all dependencies complete OR no dependencies">
|
|
170
|
+
<action>Proceed with task implementation</action>
|
|
171
|
+
<output>✅ Task {{task_id}} dependencies satisfied, starting implementation</output>
|
|
172
|
+
</check>
|
|
173
|
+
</phase>
|
|
174
|
+
|
|
175
|
+
<!-- PARALLEL OPPORTUNITY CHECK -->
|
|
176
|
+
<phase name="PARALLEL_CHECK">
|
|
177
|
+
<action>Identify other tasks with same satisfied dependencies</action>
|
|
178
|
+
<output if="parallel tasks exist">
|
|
179
|
+
💡 **Parallel Opportunity:** Tasks {{parallel_tasks}} can be done together (same deps)
|
|
180
|
+
</output>
|
|
181
|
+
</phase>
|
|
182
|
+
|
|
183
|
+
<!-- LOAD METHODOLOGY FROM CONFIG -->
|
|
184
|
+
<phase name="METHODOLOGY">
|
|
185
|
+
<action>Read config.yaml → development.methodology</action>
|
|
186
|
+
<output>📋 Methodology: {{methodology}} (TDD | STUB)</output>
|
|
187
|
+
</phase>
|
|
188
|
+
|
|
189
|
+
<!-- TDD METHODOLOGY -->
|
|
190
|
+
<check if="methodology is TDD">
|
|
191
|
+
<phase name="TDD-1-INTERFACE">
|
|
192
|
+
<action>Define interface/contract if task requires</action>
|
|
193
|
+
<action>Ensure interface compiles</action>
|
|
194
|
+
</phase>
|
|
195
|
+
|
|
196
|
+
<phase name="TDD-2-RED">
|
|
197
|
+
<action>Write test for task deliverables</action>
|
|
198
|
+
<action>Run test - MUST FAIL (RED)</action>
|
|
199
|
+
<check if="test passes">
|
|
200
|
+
<halt>ERROR: Test should fail! Implementation exists before test.</halt>
|
|
201
|
+
</check>
|
|
202
|
+
<output>🔴 RED: Test failing as expected</output>
|
|
203
|
+
</phase>
|
|
204
|
+
|
|
205
|
+
<phase name="TDD-3-GREEN">
|
|
206
|
+
<action>Implement MINIMAL code to pass test</action>
|
|
207
|
+
<action>Run test - MUST PASS (GREEN)</action>
|
|
208
|
+
<check if="test fails">
|
|
209
|
+
<action>Fix implementation until test passes</action>
|
|
210
|
+
</check>
|
|
211
|
+
<output>🟢 GREEN: Test passing</output>
|
|
212
|
+
</phase>
|
|
213
|
+
|
|
214
|
+
<phase name="TDD-4-REFACTOR">
|
|
215
|
+
<action>Refactor code (improve structure)</action>
|
|
216
|
+
<action>Run test - MUST STILL PASS</action>
|
|
217
|
+
<output>🔵 REFACTOR: Clean code, tests green</output>
|
|
218
|
+
</phase>
|
|
219
|
+
</check>
|
|
220
|
+
|
|
221
|
+
<!-- STUB METHODOLOGY -->
|
|
222
|
+
<check if="methodology is STUB">
|
|
223
|
+
<phase name="STUB-1-INTERFACE">
|
|
224
|
+
<action>Define interface/contract</action>
|
|
225
|
+
<action>Ensure interface compiles</action>
|
|
226
|
+
</phase>
|
|
227
|
+
|
|
228
|
+
<phase name="STUB-2-STUB">
|
|
229
|
+
<action>Write stub implementation (mock data)</action>
|
|
230
|
+
<action>Stub returns expected data shapes</action>
|
|
231
|
+
<output>🧪 STUB: Mock implementation ready</output>
|
|
232
|
+
</phase>
|
|
233
|
+
|
|
234
|
+
<phase name="STUB-3-TEST">
|
|
235
|
+
<action>Write tests against stub</action>
|
|
236
|
+
<action>Run test - MUST PASS with stub</action>
|
|
237
|
+
<output>✅ Tests pass with stub</output>
|
|
238
|
+
</phase>
|
|
239
|
+
|
|
240
|
+
<phase name="STUB-4-REAL">
|
|
241
|
+
<action>Replace stub with real implementation</action>
|
|
242
|
+
<action>Run test - MUST STILL PASS</action>
|
|
243
|
+
<check if="test fails">
|
|
244
|
+
<action>Fix real implementation until test passes</action>
|
|
245
|
+
</check>
|
|
246
|
+
<output>🟢 REAL: Tests pass with real implementation</output>
|
|
247
|
+
</phase>
|
|
248
|
+
</check>
|
|
249
|
+
|
|
250
|
+
<!-- TASK VALIDATION (MANDATORY FOR ALL TASKS) -->
|
|
251
|
+
<phase name="TASK_VALIDATION" critical="MANDATORY">
|
|
252
|
+
<action>Locate "Validation Test" section in task</action>
|
|
253
|
+
<check if="validation test defined">
|
|
254
|
+
<action>Run ALL validation tests listed</action>
|
|
255
|
+
<check if="any test fails">
|
|
256
|
+
<halt>❌ TASK FAILED: Validation tests not passing</halt>
|
|
257
|
+
</check>
|
|
258
|
+
<output>✅ All validation tests pass</output>
|
|
259
|
+
</check>
|
|
260
|
+
<check if="no validation test">
|
|
261
|
+
<halt>❌ ERROR: Task missing validation test</halt>
|
|
262
|
+
</check>
|
|
263
|
+
</phase>
|
|
264
|
+
|
|
265
|
+
<!-- TODO PLACEHOLDERS FOR FUTURE WORK -->
|
|
266
|
+
<phase name="TODO_PLACEHOLDERS">
|
|
267
|
+
<action>Check config.yaml → development.todo.enabled</action>
|
|
268
|
+
<check if="todo enabled">
|
|
269
|
+
<action>Review "TODO Placeholders" section in story</action>
|
|
270
|
+
<action>Review "Related Future Work" table</action>
|
|
271
|
+
|
|
272
|
+
<!-- Add TODOs for next tasks -->
|
|
273
|
+
<check if="current task has dependent tasks (Blocks: T{n})">
|
|
274
|
+
<action>Add TODO comment at integration point</action>
|
|
275
|
+
<example>
|
|
276
|
+
// TODO(TASK:T{n}): {description from next task}
|
|
277
|
+
// Implement in next task, current code provides interface
|
|
278
|
+
// See: story file #T{n}
|
|
279
|
+
</example>
|
|
280
|
+
</check>
|
|
281
|
+
|
|
282
|
+
<!-- Add TODOs for future stories -->
|
|
283
|
+
<check if="story references future stories">
|
|
284
|
+
<action>Add TODO comment where future story will extend</action>
|
|
285
|
+
<example>
|
|
286
|
+
// TODO(STORY:{MODULE}-S{epic}-{nn}): {description}
|
|
287
|
+
// Current implementation is basic, enhanced in {story-id}
|
|
288
|
+
// See: docs/sprint-artifacts/.../story-{id}.md
|
|
289
|
+
</example>
|
|
290
|
+
</check>
|
|
291
|
+
|
|
292
|
+
<!-- Add TODOs for future epics -->
|
|
293
|
+
<check if="story references future epics">
|
|
294
|
+
<action>Add TODO comment for architectural evolution</action>
|
|
295
|
+
<example>
|
|
296
|
+
// TODO(EPIC:{MODULE}-E{nn}): {description}
|
|
297
|
+
// Current sync approach, will be async in {epic-id}
|
|
298
|
+
// See: docs/sprint-artifacts/.../epic-{id}.md
|
|
299
|
+
</example>
|
|
300
|
+
</check>
|
|
301
|
+
|
|
302
|
+
<!-- Add TODOs for technical debt -->
|
|
303
|
+
<check if="implementation has known limitations">
|
|
304
|
+
<action>Add TODO comment for tech debt</action>
|
|
305
|
+
<example>
|
|
306
|
+
// TODO(TECH_DEBT): {description}
|
|
307
|
+
// Known limitation: {what}
|
|
308
|
+
// Improvement: {how}
|
|
309
|
+
</example>
|
|
310
|
+
</check>
|
|
311
|
+
|
|
312
|
+
<!-- Add TODOs for backlog items -->
|
|
313
|
+
<check if="implementation could be improved but not planned">
|
|
314
|
+
<action>Add TODO comment for backlog</action>
|
|
315
|
+
<example>
|
|
316
|
+
// TODO(BACKLOG): {description}
|
|
317
|
+
// Nice to have: {improvement idea}
|
|
318
|
+
</example>
|
|
319
|
+
</check>
|
|
320
|
+
|
|
321
|
+
<!-- Add FIXME for known bugs -->
|
|
322
|
+
<check if="known bug or issue discovered">
|
|
323
|
+
<action>Add FIXME comment</action>
|
|
324
|
+
<example>
|
|
325
|
+
// FIXME(BUG:{ticket-id}): {description}
|
|
326
|
+
// Ticket: {url}
|
|
327
|
+
</example>
|
|
328
|
+
</check>
|
|
329
|
+
|
|
330
|
+
<!-- Add HACK for temporary workarounds -->
|
|
331
|
+
<check if="temporary workaround implemented">
|
|
332
|
+
<action>Add HACK comment</action>
|
|
333
|
+
<example>
|
|
334
|
+
// HACK: {description}
|
|
335
|
+
// Temporary until: {condition}
|
|
336
|
+
// Remove when: {story/epic id}
|
|
337
|
+
</example>
|
|
338
|
+
</check>
|
|
339
|
+
|
|
340
|
+
<output>📝 TODO placeholders added for future work</output>
|
|
341
|
+
</check>
|
|
342
|
+
</phase>
|
|
343
|
+
|
|
344
|
+
<halt-conditions>
|
|
345
|
+
<halt if="task dependencies not satisfied">Cannot start - dependencies incomplete</halt>
|
|
346
|
+
<halt if="new dependencies required beyond story specs">Additional dependencies need user approval</halt>
|
|
347
|
+
<halt if="3 consecutive implementation failures">Request guidance</halt>
|
|
348
|
+
<halt if="required configuration missing">Cannot proceed without necessary configuration</halt>
|
|
349
|
+
</halt-conditions>
|
|
350
|
+
|
|
351
|
+
<critical>NEVER implement anything not mapped to a specific task</critical>
|
|
352
|
+
<critical>NEVER skip dependency checks</critical>
|
|
353
|
+
</step>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Step 4b: Update Task Status
|
|
357
|
+
|
|
358
|
+
```xml
|
|
359
|
+
<step n="4b" goal="Update task status in summary table">
|
|
360
|
+
<action>Find task row in summary table</action>
|
|
361
|
+
<action>Update Status column: ⬜ → 🔄 (when starting) → ✅ (when complete)</action>
|
|
362
|
+
|
|
363
|
+
<output>
|
|
364
|
+
| ID | Task | Est | Depends On | Status |
|
|
365
|
+
|----|------|-----|------------|--------|
|
|
366
|
+
| T1 | ... | 1h | - | ✅ |
|
|
367
|
+
| T2 | ... | 1.5h | T1 | 🔄 | ← Current
|
|
368
|
+
| T3 | ... | 1h | T1 | ⬜ | ← Can run parallel with T2
|
|
369
|
+
</output>
|
|
370
|
+
</step>
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Step 5: Run Validations
|
|
374
|
+
|
|
375
|
+
```xml
|
|
376
|
+
<step n="5" goal="Run validations and tests">
|
|
377
|
+
<action>Determine test framework from project structure</action>
|
|
378
|
+
<action>Run all existing tests to ensure no regressions</action>
|
|
379
|
+
<action>Run new tests to verify implementation</action>
|
|
380
|
+
<action>Run linting and code quality checks if configured</action>
|
|
381
|
+
<action>Validate implementation meets story acceptance criteria</action>
|
|
382
|
+
|
|
383
|
+
<check if="regression tests fail">
|
|
384
|
+
<action>STOP and fix before continuing</action>
|
|
385
|
+
<action>Identify breaking changes</action>
|
|
386
|
+
</check>
|
|
387
|
+
|
|
388
|
+
<check if="new tests fail">
|
|
389
|
+
<action>STOP and fix before continuing</action>
|
|
390
|
+
<action>Ensure implementation correctness</action>
|
|
391
|
+
</check>
|
|
392
|
+
</step>
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### Step 6: Mark Task Complete
|
|
396
|
+
|
|
397
|
+
```xml
|
|
398
|
+
<step n="6" goal="Validate and mark task complete ONLY when fully done">
|
|
399
|
+
<critical>NEVER mark a task complete unless ALL conditions are met</critical>
|
|
400
|
+
|
|
401
|
+
<!-- VALIDATION GATES -->
|
|
402
|
+
<validation>
|
|
403
|
+
<check>Verify ALL tests for this task ACTUALLY EXIST and PASS 100%</check>
|
|
404
|
+
<check>Confirm implementation matches EXACTLY what task specifies</check>
|
|
405
|
+
<check>Validate related acceptance criteria are satisfied</check>
|
|
406
|
+
<check>Run full test suite - NO regressions</check>
|
|
407
|
+
</validation>
|
|
408
|
+
|
|
409
|
+
<check if="ALL validation gates pass">
|
|
410
|
+
<action>Mark task checkbox with [x]</action>
|
|
411
|
+
<action>Update File List with all new/modified/deleted files</action>
|
|
412
|
+
<action>Add completion notes to Dev Agent Record</action>
|
|
413
|
+
<action>Add entry to Change Log</action>
|
|
414
|
+
<action>Save story file</action>
|
|
415
|
+
</check>
|
|
416
|
+
|
|
417
|
+
<check if="ANY validation fails">
|
|
418
|
+
<action>DO NOT mark task complete</action>
|
|
419
|
+
<action>Fix issues first</action>
|
|
420
|
+
<action>HALT if unable to fix</action>
|
|
421
|
+
</check>
|
|
422
|
+
|
|
423
|
+
<check if="more tasks remain">
|
|
424
|
+
<goto step="4">Next task</goto>
|
|
425
|
+
</check>
|
|
426
|
+
|
|
427
|
+
<check if="no tasks remain">
|
|
428
|
+
<goto step="7">Completion</goto>
|
|
429
|
+
</check>
|
|
430
|
+
</step>
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Step 7: Story Completion (Session End)
|
|
434
|
+
|
|
435
|
+
```xml
|
|
436
|
+
<step n="7" goal="Story completion and mark for review">
|
|
437
|
+
<action>Verify ALL tasks marked ✅</action>
|
|
438
|
+
<action>Run full regression suite</action>
|
|
439
|
+
<action>Confirm File List includes every changed file</action>
|
|
440
|
+
|
|
441
|
+
<!-- SESSION END: Update changelogs with summary -->
|
|
442
|
+
<phase name="SESSION_END_CHANGELOG" critical="MANDATORY">
|
|
443
|
+
<note>Update changelog ONCE at session end, summarizing all work</note>
|
|
444
|
+
|
|
445
|
+
<!-- Story changelog: one summary entry -->
|
|
446
|
+
<action>Add ONE entry to story Changelog summarizing session work</action>
|
|
447
|
+
<example>
|
|
448
|
+
| 2.0 | {{date}} | @dev | Complete: T1-T7 done; All tests pass; Files: 12 created, 3 modified |
|
|
449
|
+
</example>
|
|
450
|
+
|
|
451
|
+
<!-- Repo CHANGELOG.md: grouped entries -->
|
|
452
|
+
<action>Update repository CHANGELOG.md [Unreleased] section</action>
|
|
453
|
+
<action>Group all story changes by category</action>
|
|
454
|
+
<example>
|
|
455
|
+
### Added
|
|
456
|
+
- Add product catalog API with CRUD operations (CATALOG-S05-03)
|
|
457
|
+
- Add product validation with custom rules (CATALOG-S05-03)
|
|
458
|
+
|
|
459
|
+
### Changed
|
|
460
|
+
- Change price precision from float to decimal (CATALOG-S05-03)
|
|
461
|
+
</example>
|
|
462
|
+
</phase>
|
|
463
|
+
|
|
464
|
+
<!-- Definition of Done -->
|
|
465
|
+
<validation name="definition-of-done">
|
|
466
|
+
<check>All tasks/subtasks marked complete [x]</check>
|
|
467
|
+
<check>Implementation satisfies every Acceptance Criterion</check>
|
|
468
|
+
<check>Unit tests for core functionality added/updated</check>
|
|
469
|
+
<check>Integration tests added when required</check>
|
|
470
|
+
<check>All tests pass (no regressions)</check>
|
|
471
|
+
<check>Code quality checks pass</check>
|
|
472
|
+
<check>File List complete</check>
|
|
473
|
+
<check>Dev Agent Record has implementation notes</check>
|
|
474
|
+
<check>Change Log has summary</check>
|
|
475
|
+
</validation>
|
|
476
|
+
|
|
477
|
+
<action>Update story Status to "review"</action>
|
|
478
|
+
|
|
479
|
+
<check if="sprint_status file exists">
|
|
480
|
+
<action>Update story status to "review" in sprint-status.yaml</action>
|
|
481
|
+
</check>
|
|
482
|
+
|
|
483
|
+
<output>✅ **Story Complete - Ready for Review**
|
|
484
|
+
|
|
485
|
+
Story: {{story_key}}
|
|
486
|
+
Status: review
|
|
487
|
+
|
|
488
|
+
**Summary:**
|
|
489
|
+
- Tasks completed: {{completed_tasks_count}}
|
|
490
|
+
- Tests added: {{new_tests_count}}
|
|
491
|
+
- Files changed: {{changed_files_count}}
|
|
492
|
+
|
|
493
|
+
**Next Steps:**
|
|
494
|
+
- Run `code-review` workflow for peer review
|
|
495
|
+
- After approval, mark story as "done"
|
|
496
|
+
</output>
|
|
497
|
+
</step>
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
## Story File Sections Updated
|
|
501
|
+
|
|
502
|
+
| Section | When Updated |
|
|
503
|
+
|---------|--------------|
|
|
504
|
+
| Tasks/Subtasks `[ ]` → `[x]` | After each task completion |
|
|
505
|
+
| Dev Agent Record | Implementation notes, debug log |
|
|
506
|
+
| File List | All new/modified/deleted files |
|
|
507
|
+
| Change Log | Summary of changes with date |
|
|
508
|
+
| Status | draft → in-progress → review → done |
|
|
509
|
+
|
|
510
|
+
## HALT Conditions
|
|
511
|
+
|
|
512
|
+
- Additional dependencies need user approval
|
|
513
|
+
- 3 consecutive implementation failures
|
|
514
|
+
- Required configuration is missing
|
|
515
|
+
- Ambiguous requirements need clarification
|
|
516
|
+
- Cannot access story file
|
|
517
|
+
|
|
518
|
+
## Definition of Done Checklist
|
|
519
|
+
|
|
520
|
+
- [ ] All tasks/subtasks marked complete
|
|
521
|
+
- [ ] Implementation satisfies every AC
|
|
522
|
+
- [ ] Unit tests added for core functionality
|
|
523
|
+
- [ ] Integration tests added when required
|
|
524
|
+
- [ ] All tests pass (no regressions)
|
|
525
|
+
- [ ] Code quality checks pass
|
|
526
|
+
- [ ] File List includes all changes
|
|
527
|
+
- [ ] Dev Agent Record complete
|
|
528
|
+
- [ ] Change Log updated
|
|
529
|
+
- [ ] Status set to "review"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Auto detect text files and perform LF normalization
|
|
2
|
+
* text=auto
|
|
3
|
+
|
|
4
|
+
# Documents
|
|
5
|
+
*.md text
|
|
6
|
+
*.txt text
|
|
7
|
+
*.yaml text
|
|
8
|
+
*.yml text
|
|
9
|
+
*.json text
|
|
10
|
+
*.xml text
|
|
11
|
+
|
|
12
|
+
# Scripts
|
|
13
|
+
*.sh text eol=lf
|
|
14
|
+
*.bash text eol=lf
|
|
15
|
+
|
|
16
|
+
# Source code (add your language)
|
|
17
|
+
*.js text
|
|
18
|
+
*.ts text
|
|
19
|
+
*.jsx text
|
|
20
|
+
*.tsx text
|
|
21
|
+
*.py text
|
|
22
|
+
*.rb text
|
|
23
|
+
*.java text
|
|
24
|
+
*.kt text
|
|
25
|
+
*.swift text
|
|
26
|
+
*.rs text
|
|
27
|
+
*.go text
|
|
28
|
+
*.php text
|
|
29
|
+
*.c text
|
|
30
|
+
*.cpp text
|
|
31
|
+
*.h text
|
|
32
|
+
*.cs text
|
|
33
|
+
|
|
34
|
+
# Config
|
|
35
|
+
*.config text
|
|
36
|
+
*.conf text
|
|
37
|
+
*.ini text
|
|
38
|
+
*.env text
|
|
39
|
+
|
|
40
|
+
# Binary files
|
|
41
|
+
*.png binary
|
|
42
|
+
*.jpg binary
|
|
43
|
+
*.jpeg binary
|
|
44
|
+
*.gif binary
|
|
45
|
+
*.ico binary
|
|
46
|
+
*.webp binary
|
|
47
|
+
*.pdf binary
|
|
48
|
+
*.zip binary
|
|
49
|
+
*.tar binary
|
|
50
|
+
*.gz binary
|
|
51
|
+
*.woff binary
|
|
52
|
+
*.woff2 binary
|
|
53
|
+
*.ttf binary
|
|
54
|
+
*.eot binary
|
|
55
|
+
|
|
56
|
+
# Lock files (exact)
|
|
57
|
+
package-lock.json -diff
|
|
58
|
+
yarn.lock -diff
|
|
59
|
+
pnpm-lock.yaml -diff
|
|
60
|
+
Gemfile.lock -diff
|
|
61
|
+
poetry.lock -diff
|
|
62
|
+
|
|
63
|
+
# Generated (don't merge)
|
|
64
|
+
*.generated.* merge=ours
|