ace-task 0.36.1 → 0.36.7
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -0
- data/handbook/guides/task-definition.g.md +47 -13
- data/handbook/templates/task/draft.template.md +6 -6
- data/handbook/workflow-instructions/bug/analyze.wf.md +35 -3
- data/handbook/workflow-instructions/bug/fix.wf.md +13 -0
- data/handbook/workflow-instructions/task/draft.wf.md +43 -34
- data/handbook/workflow-instructions/task/plan.wf.md +12 -1
- data/handbook/workflow-instructions/task/review.wf.md +21 -36
- data/handbook/workflow-instructions/task/work.wf.md +15 -14
- data/lib/ace/task/organisms/task_manager.rb +37 -18
- data/lib/ace/task/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 81fe627b41cbd7329b370ce01458343eb34bb6dd3033772750976ab7fdbf604e
|
|
4
|
+
data.tar.gz: 55d0dd5f43f21cd4b9f83984d703905d1e66c22869fe6791a430ad1d782fdeb8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5683574d4b854a0aeabd3e1b22e32ab7ad2f74f4bca594316c860954d7bce927da95e9142f804c0bf9078f263f69a6960cdda009fe500e545dbee6d7d78316fc
|
|
7
|
+
data.tar.gz: b28b4bec231fe6d4461a2673d3d4cfcb753aaff3e026ca83cb26b2ed053f906ba1382f174c7e09ad8d92911219626d5445b4507f2de9b356515c14d4341ea804
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.36.7] - 2026-04-25
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Removed spike as a first-class task pattern from active ACE task drafting. Drafts must now create real child tasks for each original intention, while `as-task-review` owns the deep analysis, draft reshaping, dependency repair, and skip/split decisions for uncertain families.
|
|
15
|
+
|
|
16
|
+
## [0.36.6] - 2026-04-24
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Redesigned spike-task guidance around evaluation against real parent goals instead of closure mechanics alone. Spike-first parents must now declare `Learning Targets Before Decomposition`, spike subtasks must map those targets explicitly, and spikes rewrite the active in-folder task tree before later review decides lifecycle.
|
|
21
|
+
- Restricted spike mutation scope to the task folder. Spikes must no longer edit package docs, handbook files, or other out-of-folder assets directly; they capture those impacts as new subtasks under the same parent instead.
|
|
22
|
+
|
|
23
|
+
## [0.36.5] - 2026-04-24
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- Tightened spike-task drafting and review guidance again so spikes must declare explicit outcome tasks whose type matches the completion mode, and so `reopen later if needed` is no longer an acceptable post-spike closure.
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- Tightened spike work guidance so a spike cannot be marked done until its declared concrete outcome task exists in addition to the synchronized parent/doc artifacts and rerun parent review.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
- Tightened spike-task workflow guidance so spike drafts must declare a decision-complete Spike Completion Contract naming completion mode, parent sync target, related artifact sync targets, and the final `as-task-review <parent-ref>` rerun.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
- Ensured parent task auto-close for child task closure uses the same `TaskManager#update` flow as explicit task closes, so linked GitHub issues close through one consistent code path.
|
|
36
|
+
- Tightened spike work/review guidance so a spike cannot be considered complete until its parent and declared related task/doc artifacts are synchronized and the parent review has been rerun.
|
|
37
|
+
|
|
38
|
+
## [0.36.4] - 2026-04-24
|
|
39
|
+
|
|
40
|
+
## [0.36.2] - 2026-04-23
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
- Added layer-ownership triage into task bug-work and planning workflows to reduce cross-package misrouting of root-cause fixes.
|
|
45
|
+
- Tightened task planning workflows to improve issue linkage and work-on sequencing with clearer workflow ownership validation.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
- Added layer-ownership triage to bug analysis/fix and task planning/work workflows so agents identify owner, adapter, and symptom packages before implementing cross-package shared-primitive fixes.
|
|
50
|
+
- Tightened the task draft workflow so GitHub issue URL inputs must create the parent or single task with `--github-issue <number>` and sync the linked issue.
|
|
51
|
+
|
|
52
|
+
### Technical
|
|
53
|
+
- Added workflow contract coverage for the layer-ownership triage guidance.
|
|
10
54
|
## [0.36.1] - 2026-04-19
|
|
11
55
|
|
|
12
56
|
### Technical
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
doc-type: guide
|
|
3
3
|
purpose: Guide for writing clear, actionable task definitions in ace-task
|
|
4
4
|
ace-docs:
|
|
5
|
-
last-updated: '2026-
|
|
5
|
+
last-updated: '2026-04-25'
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- markdownlint-disable -->
|
|
9
|
-
# 📑 Writing Clear, Actionable Dev
|
|
9
|
+
# 📑 Writing Clear, Actionable Dev Tasks
|
|
10
10
|
|
|
11
|
-
## A playbook for documentation
|
|
11
|
+
## A playbook for documentation-oriented tickets, with a complete worked example
|
|
12
12
|
|
|
13
13
|
## Introduction & Goal
|
|
14
14
|
|
|
@@ -19,7 +19,7 @@ minimize ambiguity and streamline the process of defining and executing document
|
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
-
## 0. Directory
|
|
22
|
+
## 0. Directory Audit Step ✅
|
|
23
23
|
|
|
24
24
|
**Always start by discovering what actually exists in the repo.**
|
|
25
25
|
|
|
@@ -28,7 +28,7 @@ minimize ambiguity and streamline the process of defining and executing document
|
|
|
28
28
|
3. From that listing, build the deliverable manifest.
|
|
29
29
|
|
|
30
30
|
> **Tip:**
|
|
31
|
-
> • If you don’t have repo access, create a tiny *pre
|
|
31
|
+
> • If you don’t have repo access, create a tiny *pre-ticket* titled “Generate Guide-Audit Manifest”.
|
|
32
32
|
> • Commit the tree output as a comment or markdown file, then reference it in the main ticket.
|
|
33
33
|
|
|
34
34
|
Example audit snippet to embed:
|
|
@@ -45,18 +45,18 @@ guides
|
|
|
45
45
|
|
|
46
46
|
---
|
|
47
47
|
|
|
48
|
-
## 1. Anatomy
|
|
48
|
+
## 1. Anatomy of a Great Task
|
|
49
49
|
|
|
50
|
-
| Section | Purpose | Key
|
|
50
|
+
| Section | Purpose | Key Questions |
|
|
51
51
|
|---------|---------|---------------|
|
|
52
|
-
| **Front
|
|
52
|
+
| **Front-matter** | Helps tooling & humans filter | id (use `task-manager generate-id VERSION` to generate), status, priority, estimate, dependencies |
|
|
53
53
|
| **Objective / Problem** | *Why* are we doing this? | What pain are we fixing? |
|
|
54
|
-
| **Directory Audit (0)** | Source
|
|
54
|
+
| **Directory Audit (0)** | Source-of-truth for scope | Did we include the current tree? |
|
|
55
55
|
| **Scope of Work** | *What* to touch | Which guides/folders? |
|
|
56
56
|
| **Deliverables / Manifest** | Exact files to create / modify / delete | Could a newcomer do it with just this? |
|
|
57
|
-
| **Phases** | Bite
|
|
57
|
+
| **Phases** | Bite-sized plan | Audit → Extract → Refactor → Index |
|
|
58
58
|
| **Implementation Plan** | Divided into Planning Steps (`* [ ]`) for analysis/design and Execution Steps (`- [ ]`) for implementation actions. Consider embedding automated test/verification steps directly. | |
|
|
59
|
-
| **Acceptance Criteria** | Definition of Done | Check
|
|
59
|
+
| **Acceptance Criteria** | Definition of Done | Check-list style `[ ]`. **Can include references to automated checks defined in the Implementation Plan's Planning and Execution sections or be high-level checks themselves.** |
|
|
60
60
|
| **Out of Scope** | Prevent scope creep | What must *not* be touched? |
|
|
61
61
|
| **References & Risks** | Links to style guides, ADRs, **testing standards (like [Embedded Testing Guide](ace-docs/handbook/guides/embedded-testing-guide.g.md))**; mitigations | Any scripts to run? **Use links relative to the project root (e.g., `ace-handbook/handbook/guides/some-guide.g.md`), not relative to the current file (`../guides/some-guide.md`)** |
|
|
62
62
|
|
|
@@ -88,7 +88,7 @@ This distinction supports workflow separation where review/planning phases focus
|
|
|
88
88
|
|
|
89
89
|
---
|
|
90
90
|
|
|
91
|
-
## 3.
|
|
91
|
+
## 3. Full Worked Example
|
|
92
92
|
|
|
93
93
|
A full worked example of a task, "Tailor Guides to Tech Stack," has been moved to a separate file:
|
|
94
94
|
[`ace-task/handbook/templates/release-tasks/example.md`](../templates/release-tasks/example.md)
|
|
@@ -153,4 +153,38 @@ For complex tasks requiring analysis or design decisions, include both sections:
|
|
|
153
153
|
6. Are Planning Steps used for complex tasks requiring analysis/design?
|
|
154
154
|
7. Do visual markers distinguish planning (`* [ ]`) from execution (`- [ ]`) steps?
|
|
155
155
|
|
|
156
|
-
Tick them all → merge the ticket.
|
|
156
|
+
Tick them all → merge the ticket.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Review-first task shaping
|
|
161
|
+
|
|
162
|
+
ACE no longer uses spike as a special task type.
|
|
163
|
+
|
|
164
|
+
### Rules
|
|
165
|
+
|
|
166
|
+
1. The parent owns the umbrella outcome and the child-task map.
|
|
167
|
+
2. Every original intention that matters must exist as a real child task from the start.
|
|
168
|
+
3. If ordering matters, the first child should be the smallest real vertical slice, not a synthetic research-only task.
|
|
169
|
+
4. `as-task-review` is the deep-analysis stage: it may rewrite, split, reorder, skip, or dependency-shape draft subtasks after codebase research.
|
|
170
|
+
5. Do not preserve major uncertainty only in parent prose. If a goal matters enough to protect, give it a child task.
|
|
171
|
+
6. If review later proves a drafted child obsolete or already satisfied, review updates the task family directly instead of relying on a dedicated spike artifact.
|
|
172
|
+
|
|
173
|
+
### Parent responsibility
|
|
174
|
+
|
|
175
|
+
The parent should keep:
|
|
176
|
+
- umbrella objective
|
|
177
|
+
- why the family exists
|
|
178
|
+
- decomposition map of child refs and concerns
|
|
179
|
+
- shared boundaries or references
|
|
180
|
+
|
|
181
|
+
The parent should not hide work that has no child owner.
|
|
182
|
+
|
|
183
|
+
### Child responsibility
|
|
184
|
+
|
|
185
|
+
Each child task should own:
|
|
186
|
+
- one concrete slice of the original intention
|
|
187
|
+
- its own interface contract and success criteria
|
|
188
|
+
- its own verification plan
|
|
189
|
+
|
|
190
|
+
If a single child is trying to answer multiple independent questions, split it before implementation.
|
|
@@ -15,7 +15,7 @@ bundle:
|
|
|
15
15
|
doc-type: template
|
|
16
16
|
purpose: Template for drafting task definitions
|
|
17
17
|
ace-docs:
|
|
18
|
-
last-updated: '2026-
|
|
18
|
+
last-updated: '2026-04-25'
|
|
19
19
|
---
|
|
20
20
|
|
|
21
21
|
# {title}
|
|
@@ -98,7 +98,7 @@ GET/POST/PUT/DELETE /endpoint
|
|
|
98
98
|
<!-- Ask about unclear requirements, edge cases, and user expectations -->
|
|
99
99
|
|
|
100
100
|
- [ ] **Requirement Clarity**: [Question about unclear or ambiguous requirements]
|
|
101
|
-
- [ ] **Edge Case Handling**: [Question about boundary conditions or unusual scenarios]
|
|
101
|
+
- [ ] **Edge Case Handling**: [Question about boundary conditions or unusual scenarios]
|
|
102
102
|
- [ ] **User Experience**: [Question about user expectations, workflows, or interactions]
|
|
103
103
|
- [ ] **Success Definition**: [Question about how success will be measured or validated]
|
|
104
104
|
|
|
@@ -135,7 +135,7 @@ Why are we doing this? Focus on user value and behavioral outcomes.
|
|
|
135
135
|
<!-- Define the behavioral scope - what user experiences and system behaviors are included -->
|
|
136
136
|
|
|
137
137
|
- **User Experience Scope**: [Which user interactions, workflows, and experiences are included]
|
|
138
|
-
- **System Behavior Scope**: [Which system capabilities, responses, and behaviors are included]
|
|
138
|
+
- **System Behavior Scope**: [Which system capabilities, responses, and behaviors are included]
|
|
139
139
|
- **Interface Scope**: [Which APIs, commands, or interfaces are included]
|
|
140
140
|
|
|
141
141
|
### Deliverables
|
|
@@ -143,7 +143,7 @@ Why are we doing this? Focus on user value and behavioral outcomes.
|
|
|
143
143
|
|
|
144
144
|
#### Behavioral Specifications
|
|
145
145
|
- User experience flow definitions
|
|
146
|
-
- System behavior specifications
|
|
146
|
+
- System behavior specifications
|
|
147
147
|
- Interface contract definitions
|
|
148
148
|
|
|
149
149
|
#### Validation Artifacts
|
|
@@ -169,7 +169,7 @@ Why are we doing this? Focus on user value and behavioral outcomes.
|
|
|
169
169
|
<!-- Explicitly exclude implementation concerns to maintain behavioral focus -->
|
|
170
170
|
|
|
171
171
|
- ❌ **Implementation Details**: File structures, code organization, technical architecture
|
|
172
|
-
- ❌ **Technology Decisions**: Tool selections, library choices, framework decisions
|
|
172
|
+
- ❌ **Technology Decisions**: Tool selections, library choices, framework decisions
|
|
173
173
|
- ❌ **Performance Optimization**: Specific performance improvement strategies
|
|
174
174
|
- ❌ **Future Enhancements**: Related features or capabilities not in current scope
|
|
175
175
|
|
|
@@ -177,4 +177,4 @@ Why are we doing this? Focus on user value and behavioral outcomes.
|
|
|
177
177
|
|
|
178
178
|
- Related capture-it output (if applicable)
|
|
179
179
|
- User experience requirements
|
|
180
|
-
- Interface specification examples
|
|
180
|
+
- Interface specification examples
|
|
@@ -156,7 +156,29 @@ Systematically analyze bug reports to identify root cause, verify reproduction,
|
|
|
156
156
|
- Contributing factors (conditions that enable the bug)
|
|
157
157
|
- Impact scope (what else might be affected)
|
|
158
158
|
|
|
159
|
-
### 5.
|
|
159
|
+
### 5. Layer Ownership Triage
|
|
160
|
+
|
|
161
|
+
Before finalizing the fix plan, identify the layer that owns the failing primitive. This is required when the bug crosses package boundaries or involves shared external resources, protocols, command routing, configuration namespaces, or reusable helper APIs.
|
|
162
|
+
|
|
163
|
+
Classify each relevant package/component:
|
|
164
|
+
|
|
165
|
+
- **Owner/creator**: creates, names, persists, routes, or navigates the primitive
|
|
166
|
+
- **Adapter/orchestrator**: coordinates owner APIs for a workflow
|
|
167
|
+
- **Consumer/symptom**: exposes the failure but does not own the primitive
|
|
168
|
+
|
|
169
|
+
Answer these questions in the analysis:
|
|
170
|
+
|
|
171
|
+
- What is the failing primitive or contract?
|
|
172
|
+
- Which package creates or names it?
|
|
173
|
+
- Which package navigates, reuses, or cleans it up?
|
|
174
|
+
- Which package only exposed the symptom?
|
|
175
|
+
- Is there a shared package/API that all callers should use?
|
|
176
|
+
|
|
177
|
+
Default fix rule: fix the owner layer first, then update adapters/consumers only to call the shared behavior. Do not propose a consumer-only fix when an owner layer exists and has not been inspected.
|
|
178
|
+
|
|
179
|
+
Example: if `ace-assign` fails because `ace-t.k5a-fs` is parsed incorrectly as a tmux target, the failing primitive is tmux window naming/targeting. `ace-tmux` owns window creation, naming, and navigation, so the primary fix belongs in `ace-tmux`; `ace-assign` and `ace-overseer` should reuse the shared policy.
|
|
180
|
+
|
|
181
|
+
### 6. Propose Regression Tests
|
|
160
182
|
|
|
161
183
|
**Design tests to catch this bug:**
|
|
162
184
|
|
|
@@ -191,18 +213,20 @@ Systematically analyze bug reports to identify root cause, verify reproduction,
|
|
|
191
213
|
- Scenario: Given [setup], when [action], then [verification]
|
|
192
214
|
```
|
|
193
215
|
|
|
194
|
-
###
|
|
216
|
+
### 7. Create Fix Plan
|
|
195
217
|
|
|
196
218
|
**Document the fix strategy:**
|
|
197
219
|
|
|
198
220
|
1. **Files to modify:**
|
|
199
221
|
- List each file that needs changes
|
|
200
222
|
- Describe the type of change for each
|
|
223
|
+
- Mark each file as owner, adapter/orchestrator, or consumer/symptom when layer ownership triage applies
|
|
201
224
|
|
|
202
225
|
2. **Fix approach:**
|
|
203
226
|
- Describe the technical solution
|
|
204
227
|
- Explain why this approach was chosen
|
|
205
228
|
- Note any alternative approaches considered
|
|
229
|
+
- Explain why the fix is placed in the owner layer, or why no owner-layer change is needed
|
|
206
230
|
|
|
207
231
|
3. **Risks and side effects:**
|
|
208
232
|
- What else might be affected by the fix
|
|
@@ -213,7 +237,7 @@ Systematically analyze bug reports to identify root cause, verify reproduction,
|
|
|
213
237
|
- How to revert if issues arise
|
|
214
238
|
- What to check after reverting
|
|
215
239
|
|
|
216
|
-
###
|
|
240
|
+
### 8. Save Analysis Results
|
|
217
241
|
|
|
218
242
|
**Cache the analysis for fix-bug workflow:**
|
|
219
243
|
|
|
@@ -228,6 +252,14 @@ mkdir -p .ace-local/task/bug-analysis/{session}
|
|
|
228
252
|
# .ace-local/task/bug-analysis/{session}/analysis.yml
|
|
229
253
|
root_cause: "Description of root cause"
|
|
230
254
|
repro_status: confirmed | not_reproducible | intermittent
|
|
255
|
+
layer_ownership:
|
|
256
|
+
primitive: "Shared resource/protocol/API involved, if any"
|
|
257
|
+
owner: "Package/component that owns creation/naming/routing"
|
|
258
|
+
adapters:
|
|
259
|
+
- "Adapter/orchestrator package, if any"
|
|
260
|
+
consumers:
|
|
261
|
+
- "Symptom package, if any"
|
|
262
|
+
fix_layer: "owner | adapter | consumer | not_applicable"
|
|
231
263
|
affected_files:
|
|
232
264
|
- path: path/to/file.rb
|
|
233
265
|
change_summary: "Description of what change is needed"
|
|
@@ -67,6 +67,7 @@ ls .ace-local/task/bug-analysis/
|
|
|
67
67
|
- Load the analysis.yml from the most recent session
|
|
68
68
|
- Review root cause, affected files, and proposed tests
|
|
69
69
|
- Confirm the fix plan with user if needed
|
|
70
|
+
- Review `layer_ownership` when present and verify the planned fix targets the owner layer before adapters or consumers
|
|
70
71
|
|
|
71
72
|
**If no analysis exists:**
|
|
72
73
|
|
|
@@ -74,6 +75,16 @@ ls .ace-local/task/bug-analysis/
|
|
|
74
75
|
- Gather: affected files, root cause, proposed solution
|
|
75
76
|
- Document the fix approach before proceeding
|
|
76
77
|
|
|
78
|
+
**Layer ownership guard:**
|
|
79
|
+
|
|
80
|
+
When the bug crosses package boundaries or involves a shared primitive, classify packages before editing:
|
|
81
|
+
|
|
82
|
+
- **Owner/creator**: creates, names, persists, routes, or navigates the primitive
|
|
83
|
+
- **Adapter/orchestrator**: coordinates owner APIs for a workflow
|
|
84
|
+
- **Consumer/symptom**: exposes the failure but does not own the primitive
|
|
85
|
+
|
|
86
|
+
If the loaded/user-provided plan changes only a consumer/symptom package while an owner layer exists and was not inspected, stop and return to analysis. Do not implement a local workaround before checking the owner package.
|
|
87
|
+
|
|
77
88
|
### 2. Prepare for Fix
|
|
78
89
|
|
|
79
90
|
**Set up the fix branch:**
|
|
@@ -100,12 +111,14 @@ git checkout -b fix/[bug-description]
|
|
|
100
111
|
- Review surrounding code
|
|
101
112
|
- Understand dependencies
|
|
102
113
|
- Check for similar patterns in codebase
|
|
114
|
+
- If the file is a consumer of a shared primitive, inspect the owner package/API before changing local policy
|
|
103
115
|
|
|
104
116
|
2. **Apply the fix:**
|
|
105
117
|
- Make minimal changes to fix the bug
|
|
106
118
|
- Follow existing code style and patterns
|
|
107
119
|
- Add appropriate error handling
|
|
108
120
|
- Include inline comments only if logic is non-obvious
|
|
121
|
+
- Put shared policy in the owner layer and have adapters/consumers call that policy
|
|
109
122
|
|
|
110
123
|
3. **Review the change:**
|
|
111
124
|
- Verify the fix addresses root cause
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-draft
|
|
3
3
|
allowed-tools: Bash, Read
|
|
4
|
-
description: Create behavior-first draft tasks
|
|
5
|
-
and verification plans
|
|
4
|
+
description: Create high-level behavioral specifications that define WHAT the system should do (UX/DX/AX) rather than HOW to implement it. This workflow transforms ideas or requirements into behavior-first draft tasks with clear interface contracts, leaving implementation details for the replan step. This workflow also includes automated idea file management, moving original idea files to organized locations with task number prefixes for clear traceability.
|
|
6
5
|
doc-type: workflow
|
|
7
6
|
purpose: task draft workflow instruction
|
|
8
7
|
ace-docs:
|
|
9
|
-
last-updated: '2026-
|
|
8
|
+
last-updated: '2026-04-25'
|
|
10
9
|
---
|
|
11
10
|
|
|
12
11
|
# Draft Task - Behavior-First Specification
|
|
13
12
|
|
|
14
13
|
## Goal
|
|
15
14
|
|
|
16
|
-
Create high-level behavioral specifications that define WHAT the system should do (UX/DX/AX) rather than HOW to implement it. This workflow transforms ideas or requirements into behavior-first draft tasks with clear interface contracts, leaving implementation details for the replan step.
|
|
15
|
+
Create high-level behavioral specifications that define WHAT the system should do (UX/DX/AX) rather than HOW to implement it. This workflow transforms ideas or requirements into behavior-first draft tasks with clear interface contracts, leaving implementation details for the replan step. This workflow also includes automated idea file management, moving original idea files to organized locations with task number prefixes for clear traceability.
|
|
17
16
|
|
|
18
17
|
## Prerequisites
|
|
19
18
|
|
|
@@ -36,6 +35,11 @@ Create high-level behavioral specifications that define WHAT the system should d
|
|
|
36
35
|
* User stories or experience descriptions
|
|
37
36
|
* Interface specifications or contracts
|
|
38
37
|
* If files are referenced, read their contents
|
|
38
|
+
* If the input is a GitHub issue URL, extract the issue number and treat it
|
|
39
|
+
as task lifecycle metadata. Use that number with `ace-task create
|
|
40
|
+
--github-issue <number>` when creating the parent task or single flat task.
|
|
41
|
+
The issue URL may still appear in the task body as source context, but the
|
|
42
|
+
lifecycle link belongs in task frontmatter as `github_issue`.
|
|
39
43
|
* **Intent mapping from enhanced ideas**: When the source idea contains the
|
|
40
44
|
3-Question Delegation Brief sections (`What I Hope to Accomplish`,
|
|
41
45
|
`What "Complete" Looks Like`, `Success Criteria`), use them as the
|
|
@@ -79,6 +83,7 @@ Create high-level behavioral specifications that define WHAT the system should d
|
|
|
79
83
|
- What users experience: [UX description]
|
|
80
84
|
- Interface contract: [CLI/API/UI examples]
|
|
81
85
|
- Success criteria: [Measurable outcomes]
|
|
86
|
+
- Linked GitHub issue: #[issue-number] (when drafting from a GitHub issue)
|
|
82
87
|
- Status: draft (needs implementation planning)
|
|
83
88
|
|
|
84
89
|
2. [Next Task Title] - [User experience summary]
|
|
@@ -111,6 +116,8 @@ Create high-level behavioral specifications that define WHAT the system should d
|
|
|
111
116
|
* Integration/E2E scenarios when behavior crosses boundaries
|
|
112
117
|
* At least one invalid/failure-path scenario
|
|
113
118
|
* Capture required context files per slice for fresh sessions in `bundle.files`
|
|
119
|
+
* Draft real child subtasks immediately when a parent has multiple original intentions
|
|
120
|
+
* Do not preserve major goals only in parent prose; if an intention matters, it must exist as a real child task/subtask
|
|
114
121
|
|
|
115
122
|
7. **Determine Storage Location and Create Draft Tasks**
|
|
116
123
|
|
|
@@ -127,12 +134,14 @@ Create high-level behavioral specifications that define WHAT the system should d
|
|
|
127
134
|
**Pattern A -- Single flat task (default):**
|
|
128
135
|
```bash
|
|
129
136
|
ace-task create "Task Title" --status draft --estimate "TBD"
|
|
137
|
+
ace-task create "Task Title" --status draft --estimate "TBD" --github-issue 276
|
|
130
138
|
```
|
|
131
139
|
|
|
132
140
|
**Pattern B -- Orchestrator with subtasks:**
|
|
133
141
|
```bash
|
|
134
142
|
# 1. Create the parent task first
|
|
135
143
|
ace-task create "Parent Title" --status draft --estimate "TBD"
|
|
144
|
+
ace-task create "Parent Title" --status draft --estimate "TBD" --github-issue 276
|
|
136
145
|
# Returns: v.X.Y+task.NNN
|
|
137
146
|
|
|
138
147
|
# 2. Add each subtask with --child-of (auto-converts parent to orchestrator)
|
|
@@ -157,36 +166,22 @@ Create high-level behavioral specifications that define WHAT the system should d
|
|
|
157
166
|
* For subtasks, list required shared context files explicitly in EACH subtask's bundle (no implicit inheritance)
|
|
158
167
|
* Include behavioral specification template
|
|
159
168
|
* Focus on behavioral content, leave implementation for replan step
|
|
169
|
+
* When drafting from a GitHub issue:
|
|
170
|
+
* Put `--github-issue <number>` only on the parent/orchestrator or single
|
|
171
|
+
flat task create command unless separate subtasks each own distinct
|
|
172
|
+
GitHub issues.
|
|
173
|
+
* Run `ace-task github-sync <parent-or-task-ref>` after creation so the
|
|
174
|
+
GitHub issue receives the ACE task tracking update.
|
|
160
175
|
|
|
161
|
-
###
|
|
176
|
+
### Review-First Rule for Uncertain Drafts
|
|
162
177
|
|
|
163
|
-
When
|
|
164
|
-
deployment flow), the FIRST subtask should be a time-boxed spike that:
|
|
165
|
-
1. Validates the target architecture end-to-end with a single scenario
|
|
166
|
-
2. Identifies which existing concepts survive and which get removed
|
|
167
|
-
3. Produces a "concept inventory" showing what the final system looks like
|
|
178
|
+
When requirements are uncertain, do not create a special spike task. Draft the real goal subtasks immediately, then let later `as-task-review` do the deep analysis.
|
|
168
179
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
Every spike-first draft must also declare the spike type:
|
|
176
|
-
- **Design-contract spike**: validates target behavior and ownership boundaries, but does not yet claim runnable proof
|
|
177
|
-
- **Proof-of-concept spike**: validates target behavior with runnable proof, not only a design contract
|
|
178
|
-
|
|
179
|
-
For both spike types, the draft must include:
|
|
180
|
-
1. one **Validated End-State Scenario**
|
|
181
|
-
2. one **Concept Inventory** with kept / changed / new / rejected outcomes
|
|
182
|
-
3. one **Adopted Decisions / Rejected Decisions / Deferred Gaps** section
|
|
183
|
-
4. one **Follow-up Tasks After Spike** section naming the next implementation or adoption work that must happen if the spike succeeds
|
|
184
|
-
|
|
185
|
-
For proof-of-concept spikes, the draft must additionally include:
|
|
186
|
-
1. one concrete **Proof Artifact Plan** describing what runnable evidence will prove the spike
|
|
187
|
-
2. success criteria that require the proof artifact, not only the concept inventory
|
|
188
|
-
|
|
189
|
-
Do not treat "we now understand the design" as sufficient spike completion when the spike affects a runtime, UX, or execution-path contract. A useful spike must also leave a clear proof path and explicit next task.
|
|
180
|
+
1. The parent owns the umbrella outcome and decomposition map only.
|
|
181
|
+
2. Each original intention or goal must exist as a real child subtask from the start.
|
|
182
|
+
3. If ordering matters, make the first child the smallest real vertical slice that validates the riskiest path.
|
|
183
|
+
4. Review may later rewrite, split, reorder, skip, or add dependencies between draft subtasks.
|
|
184
|
+
5. Do not preserve uncertainty by inventing a dedicated research-only subtask when normal review can answer it.
|
|
190
185
|
|
|
191
186
|
8. **Complete Behavioral Specifications**
|
|
192
187
|
* For each created draft task, populate with:
|
|
@@ -248,19 +243,20 @@ Do not treat "we now understand the design" as sufficient spike completion when
|
|
|
248
243
|
* **Validation Checklist:**
|
|
249
244
|
* [ ] All behavioral requirements captured as drafts
|
|
250
245
|
* [ ] Task files have status: draft
|
|
246
|
+
* [ ] GitHub issue inputs are linked through `github_issue` frontmatter on the parent/single task
|
|
247
|
+
* [ ] Linked GitHub issue inputs have been synced with `ace-task github-sync <ref>`
|
|
251
248
|
* [ ] Behavioral specifications are complete
|
|
252
249
|
* [ ] Interface contracts are defined
|
|
253
250
|
* [ ] Success criteria are measurable
|
|
254
251
|
* [ ] Vertical slices are defined using task/subtask model (no horizontal-only decomposition)
|
|
252
|
+
* [ ] Every original intention is represented as a real task/subtask, not only parent prose
|
|
255
253
|
* [ ] Verification Plan includes unit/equivalent validation, integration/E2E when needed, and failure path checks
|
|
256
254
|
* [ ] `bundle` frontmatter exists with canonical key order (`presets`, `files`, `commands`)
|
|
257
255
|
* [ ] Required context artifacts are explicitly listed in `bundle.files` for each task/subtask
|
|
258
256
|
* [ ] Draft is decision-complete: no unresolved behavior choices left for implementer
|
|
259
257
|
* [ ] Defaults are explicit where behavior could otherwise be ambiguous
|
|
260
258
|
* [ ] Usage documentation created in `ux/usage.md` (when task changes any API surface)
|
|
261
|
-
* [ ]
|
|
262
|
-
* [ ] Spike tasks include explicit follow-up task(s) after the spike
|
|
263
|
-
* [ ] Proof-of-concept spikes include a runnable proof artifact plan
|
|
259
|
+
* [ ] For uncertain families, the first slice is still a real subtask rather than a dedicated spike
|
|
264
260
|
|
|
265
261
|
12. **Run Quality Pass (Better, Not More)**
|
|
266
262
|
* Perform one concise quality pass before finalizing:
|
|
@@ -354,6 +350,10 @@ All code implementation happens during `ace-bundle wfi://task/work` (status: in-
|
|
|
354
350
|
* All tasks have status: draft
|
|
355
351
|
* No implementation details mixed with behavioral requirements
|
|
356
352
|
* Clear handoff to review-task for readiness validation and promotion to pending
|
|
353
|
+
* **REQUIRED when drafting from a GitHub issue URL:**
|
|
354
|
+
* The parent/orchestrator or single flat task is created with `--github-issue <number>`
|
|
355
|
+
* The task frontmatter contains `github_issue: <number>`
|
|
356
|
+
* `ace-task github-sync <ref>` has updated the linked issue
|
|
357
357
|
* **REQUIRED when drafting from ideas:**
|
|
358
358
|
* All source idea files marked as done via `ace-idea move <id> --to archive`
|
|
359
359
|
* Task references updated to new idea file locations
|
|
@@ -377,6 +377,15 @@ All code implementation happens during `ace-bundle wfi://task/work` (status: in-
|
|
|
377
377
|
**Example 3: Interface-focused requirements**
|
|
378
378
|
> "Draft task for CLI tool: auth-manager with login, logout, and status commands"
|
|
379
379
|
|
|
380
|
+
**Example 4: GitHub issue integration**
|
|
381
|
+
> "Draft a task from https://github.com/cs3b/ace/issues/276"
|
|
382
|
+
|
|
383
|
+
Create the parent or single task with the linked issue number:
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
ace-task create "Task Title" --status draft --estimate "TBD" --github-issue 276
|
|
387
|
+
```
|
|
388
|
+
|
|
380
389
|
---
|
|
381
390
|
|
|
382
391
|
This workflow creates behavior-first specifications that serve as clear contracts for implementation, ensuring user value is defined before technical details are considered.
|
|
@@ -137,6 +137,16 @@ The plan will be consumed by a separate execution agent that has no access to th
|
|
|
137
137
|
- List consumer packages that will need coordinated updates
|
|
138
138
|
- Document the full downstream scope before implementation begins
|
|
139
139
|
|
|
140
|
+
**Layer Ownership Triage:**
|
|
141
|
+
- For tasks involving shared resources, external protocols, command routing, configuration namespaces, or cross-package helpers, identify the owner layer before choosing files to edit.
|
|
142
|
+
- Classify relevant packages/components as:
|
|
143
|
+
- **Owner/creator**: creates, names, persists, routes, or navigates the primitive
|
|
144
|
+
- **Adapter/orchestrator**: coordinates owner APIs for a workflow
|
|
145
|
+
- **Consumer/symptom**: exposes the issue but does not own the primitive
|
|
146
|
+
- Default to implementing shared policy in the owner layer, then update adapters/consumers to call it.
|
|
147
|
+
- Do not plan a consumer-only fix when an owner layer exists and has not been inspected.
|
|
148
|
+
- Example: for tmux window-name failures surfaced by `ace-assign`, inspect `ace-tmux` first because it owns tmux window creation, naming, and navigation.
|
|
149
|
+
|
|
140
150
|
**Document Research Findings:**
|
|
141
151
|
- Summarize key technical insights
|
|
142
152
|
- Note recommended approaches with pros/cons
|
|
@@ -164,6 +174,7 @@ The plan will be consumed by a separate execution agent that has no access to th
|
|
|
164
174
|
- Identify existing files requiring changes
|
|
165
175
|
- Document specific modifications and their impact
|
|
166
176
|
- Plan integration points and interfaces
|
|
177
|
+
- Mark cross-package files as owner, adapter/orchestrator, or consumer/symptom when layer ownership triage applies
|
|
167
178
|
|
|
168
179
|
**Delete Files:**
|
|
169
180
|
- Identify obsolete files to be removed
|
|
@@ -486,4 +497,4 @@ If needed, add **`## Behavioral Gaps`** only after `## Freshness Summary`.
|
|
|
486
497
|
- `ace-test path/to/test_file.rb`
|
|
487
498
|
</template>
|
|
488
499
|
|
|
489
|
-
</documents>
|
|
500
|
+
</documents>
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-review
|
|
3
3
|
allowed-tools: Bash, Read
|
|
4
|
-
description: Review draft tasks for readiness, vertical slice quality, verification
|
|
5
|
-
plans, and promotion to pending
|
|
4
|
+
description: Review draft tasks for readiness, vertical slice quality, verification plans, and promotion to pending
|
|
6
5
|
doc-type: workflow
|
|
7
6
|
purpose: Review draft tasks for readiness and quality before promotion
|
|
8
7
|
ace-docs:
|
|
9
|
-
last-updated: '2026-
|
|
8
|
+
last-updated: '2026-04-25'
|
|
10
9
|
---
|
|
11
10
|
|
|
12
11
|
# Review Task Workflow Instruction
|
|
13
12
|
|
|
14
13
|
## Goal
|
|
15
14
|
|
|
16
|
-
Validate draft behavioral specifications and promote to pending when ready. This workflow acts as the readiness gate between drafting and implementation. It reviews draft tasks for completeness, conducts autonomous research to resolve open questions, generates critical questions for unresolved items, and either promotes validated drafts to `status: pending` or blocks with `needs_review: true` when questions remain.
|
|
15
|
+
Validate draft behavioral specifications and promote to pending when ready. This workflow acts as the readiness gate between drafting and implementation. It reviews draft tasks for completeness, conducts autonomous research to resolve open questions, rewrites draft families when codebase reality differs from the original draft, generates critical questions for unresolved items, and either promotes validated drafts to `status: pending` or blocks with `needs_review: true` when questions remain.
|
|
17
16
|
|
|
18
17
|
## Prerequisites
|
|
19
18
|
|
|
@@ -40,6 +39,7 @@ Validate draft behavioral specifications and promote to pending when ready. This
|
|
|
40
39
|
- Enumerate child subtasks and their current statuses before any promotion
|
|
41
40
|
- Treat every child subtask still in `draft` as an additional review target
|
|
42
41
|
- Review draft subtasks first and defer any parent promotion decision until child review outcomes are known
|
|
42
|
+
- Confirm the parent is acting as umbrella outcome plus decomposition map rather than hiding major work only in parent prose
|
|
43
43
|
- Parse the behavioral specification sections:
|
|
44
44
|
- User Experience (input, process, output)
|
|
45
45
|
- Expected Behavior
|
|
@@ -51,13 +51,19 @@ Validate draft behavioral specifications and promote to pending when ready. This
|
|
|
51
51
|
- Frontmatter `bundle` block (`presets`, `files`, `commands`)
|
|
52
52
|
- Identify gaps, ambiguities, or assumptions that need clarification
|
|
53
53
|
|
|
54
|
-
2. **Autonomous Research Phase:**
|
|
54
|
+
2. **Autonomous Research and Draft Repair Phase:**
|
|
55
55
|
- **Attempt Self-Resolution First:**
|
|
56
56
|
- Search project documentation for answers
|
|
57
57
|
- Analyze similar implementations in codebase
|
|
58
58
|
- Review related tasks and their solutions
|
|
59
59
|
- Check architectural decisions and patterns
|
|
60
60
|
- Consult technical documentation and best practices
|
|
61
|
+
- **Repair draft structure when research changes the shape:**
|
|
62
|
+
- Rewrite draft subtasks when codebase reality or shipped behavior differs from the original draft
|
|
63
|
+
- Split draft subtasks when one child is hiding multiple real goals
|
|
64
|
+
- Add or change normal task dependencies when ordering matters
|
|
65
|
+
- Mark obsolete draft subtasks `skipped` when the goal is already satisfied or no longer valid
|
|
66
|
+
- Update the parent decomposition summary to match the repaired child set
|
|
61
67
|
- **Web Search When Appropriate:**
|
|
62
68
|
- If WebSearch tool is available and needed:
|
|
63
69
|
- Search for industry standards or best practices
|
|
@@ -102,9 +108,10 @@ Validate draft behavioral specifications and promote to pending when ready. This
|
|
|
102
108
|
- [ ] **Scope Boundaries Clear**: In-scope and out-of-scope explicitly stated
|
|
103
109
|
- [ ] **Validation Questions Addressed**: All validation questions either answered or documented as blocking
|
|
104
110
|
- [ ] **Vertical Slice Quality (Task/Subtask)**: Scope is decomposed into end-to-end capability slices (standalone task or orchestrator+subtasks), not horizontal layer-only work
|
|
111
|
+
- [ ] **Original Intention Coverage**: Each major original intention exists as a real child task/subtask instead of being preserved only in parent prose
|
|
105
112
|
- [ ] **Subtask Slice Clarity**: Each subtask has a distinct observable outcome and does not duplicate sibling scope
|
|
106
113
|
- [ ] **Child Readiness Complete** (orchestrators only): Every draft child subtask has been reviewed and either promoted to `pending` or blocked with documented questions
|
|
107
|
-
- [ ] **
|
|
114
|
+
- [ ] **First Slice Is Real Work**: When ordering matters, the first slice is the smallest real capability, not a synthetic research-only task
|
|
108
115
|
- [ ] **Slice Size Signal Present**: Each slice includes advisory size (`small|medium|large`) for planning visibility
|
|
109
116
|
- [ ] **Decision-Complete Spec**: Implementer can execute without inventing missing behavioral decisions
|
|
110
117
|
- [ ] **Defaults Declared**: Ambiguous/unspecified behavior has explicit defaults
|
|
@@ -119,10 +126,7 @@ Validate draft behavioral specifications and promote to pending when ready. This
|
|
|
119
126
|
- [ ] **Operating Modes Covered**: Spec addresses relevant operating modes (dry-run, force, verbose, quiet) or explicitly marks them out-of-scope
|
|
120
127
|
- [ ] **Degenerate Inputs Covered**: Spec considers identity operations (X=Y), empty inputs, and self-referential calls where the same entity appears in both argument positions
|
|
121
128
|
- [ ] **Per-Path Variations Covered**: If spec says "same behavior for X and Y", it enumerates edge cases unique to each path (guard logic, error handling, parameter differences)
|
|
122
|
-
- [ ] **End-State Coherence** (orchestrator subtasks only): Concepts introduced by this subtask
|
|
123
|
-
(new fields, modes, formats) are expected to exist in the final deliverable --
|
|
124
|
-
not be removed by a later subtask. If this subtask adds a concept that a later
|
|
125
|
-
subtask will consolidate away, flag as SCOPE RISK and consider merging subtasks.
|
|
129
|
+
- [ ] **End-State Coherence** (orchestrator subtasks only): Concepts introduced by this subtask are expected to exist in the final deliverable and not be removed by a later sibling rewrite without reasoned review-driven reshaping
|
|
126
130
|
- [ ] **Title Length**: Title is max 80 characters
|
|
127
131
|
- [ ] **Folder Slug**: 3-5 word context slug for folder
|
|
128
132
|
- [ ] **File Slug**: 4-7 word action slug for spec file
|
|
@@ -239,27 +243,6 @@ While review-task primarily serves as the draft-to-pending gate, it can provide
|
|
|
239
243
|
|
|
240
244
|
For non-draft tasks, skip the Readiness Checklist and Promote/Block steps. Focus on content enhancement and question generation only.
|
|
241
245
|
|
|
242
|
-
### Completed Spike Review
|
|
243
|
-
|
|
244
|
-
When the reviewed task is a completed spike, treat spike usefulness as a review target:
|
|
245
|
-
|
|
246
|
-
- Compare the archived spike contract against the shipped public/runtime contract instead of assuming the spike remained accurate.
|
|
247
|
-
- Classify every meaningful difference as exactly one of:
|
|
248
|
-
- **intentional and adopted**
|
|
249
|
-
- **intentional but deferred to follow-up**
|
|
250
|
-
- **spec miss that must be corrected**
|
|
251
|
-
- Verify that the spike left a reusable adoption path:
|
|
252
|
-
- explicit next task(s) exist
|
|
253
|
-
- deferred gaps are named, not implied
|
|
254
|
-
- any promised proof artifact exists if the spike was a proof-of-concept
|
|
255
|
-
- Fail closed on spike usefulness if the spike completed without an explicit follow-up task, even if later implementation succeeded through ad-hoc decisions.
|
|
256
|
-
- In the review summary for completed spikes, explicitly state whether the spike produced:
|
|
257
|
-
- a reusable contract
|
|
258
|
-
- a reusable proof artifact
|
|
259
|
-
- a reusable next-task decision
|
|
260
|
-
|
|
261
|
-
Treat "concept inventory exists" as insufficient by itself for a successful spike review when the spike was meant to guide real runtime or UX work.
|
|
262
|
-
|
|
263
246
|
## Decision Guidance
|
|
264
247
|
|
|
265
248
|
### When to Use This Workflow
|
|
@@ -269,6 +252,7 @@ Treat "concept inventory exists" as insufficient by itself for a successful spik
|
|
|
269
252
|
- Refining draft specifications before implementation
|
|
270
253
|
- Researching answers to open questions on draft tasks
|
|
271
254
|
- Checking if a draft is implementation-ready
|
|
255
|
+
- Reshaping uncertain draft families without inventing a dedicated spike subtask
|
|
272
256
|
|
|
273
257
|
**Don't use review-task when:**
|
|
274
258
|
- Creating new tasks (use draft-task)
|
|
@@ -287,11 +271,11 @@ Treat "concept inventory exists" as insufficient by itself for a successful spik
|
|
|
287
271
|
- Bundle frontmatter (`presets`, `files`, `commands`) validated for completeness
|
|
288
272
|
- Task promoted to pending if ready, or blocked with `needs_review: true`
|
|
289
273
|
- Orchestrator parents are promoted only after draft child subtasks have also passed review
|
|
274
|
+
- Review can rewrite, split, reorder, skip, or dependency-shape draft children when research proves the initial draft wrong
|
|
290
275
|
- Structure and formatting preserved
|
|
291
276
|
- No loss of existing information
|
|
292
277
|
- Clear improvement in task clarity or completeness
|
|
293
278
|
- User receives actionable list of questions to answer (if any)
|
|
294
|
-
- Completed spike reviews identify contract drift and verify explicit follow-up tasks
|
|
295
279
|
|
|
296
280
|
## Task Management Integration
|
|
297
281
|
|
|
@@ -357,10 +341,11 @@ cd .ace-tasks && ace-search "needs_review: true" --content
|
|
|
357
341
|
The review-task workflow serves as the quality gate between specification and implementation:
|
|
358
342
|
|
|
359
343
|
1. **Research-First Approach**: AI agents attempt to find answers through documentation, codebase analysis, and pattern recognition before escalating
|
|
360
|
-
2. **
|
|
361
|
-
3. **
|
|
362
|
-
4. **
|
|
363
|
-
5. **
|
|
344
|
+
2. **Draft Repair Authority**: Review rewrites, splits, reorders, and dependency-shapes uncertain draft families instead of requiring a special spike task type
|
|
345
|
+
3. **Readiness Checklist**: Systematic validation ensures behavioral specs are complete before promotion
|
|
346
|
+
4. **Smart Question Filtering**: Only truly unresolvable questions requiring business/design decisions are escalated
|
|
347
|
+
5. **Persistent Question Tracking**: Questions are saved in task files with `needs_review: true` metadata for easy filtering
|
|
348
|
+
6. **Clear Lifecycle Decision**: Every review results in either promotion to pending or documented blocking questions
|
|
364
349
|
|
|
365
350
|
This approach enables:
|
|
366
351
|
- **Clear Lifecycle Gate**: Draft tasks must pass validation before entering the implementation pipeline
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-work
|
|
3
|
-
description: Execute task implementation against behavioral spec using pre-loaded
|
|
4
|
-
|
|
3
|
+
description: Execute task implementation against behavioral spec using pre-loaded plan
|
|
4
|
+
allowed-tools: Bash, Read, Write
|
|
5
5
|
assign:
|
|
6
6
|
sub-steps:
|
|
7
7
|
- onboard-base
|
|
@@ -16,7 +16,7 @@ assign:
|
|
|
16
16
|
doc-type: workflow
|
|
17
17
|
purpose: Execute task implementation from plan with quality gates
|
|
18
18
|
ace-docs:
|
|
19
|
-
last-updated: '2026-
|
|
19
|
+
last-updated: '2026-04-25'
|
|
20
20
|
---
|
|
21
21
|
|
|
22
22
|
# Work on Task
|
|
@@ -41,7 +41,7 @@ To avoid known `--content` stalls in some environments:
|
|
|
41
41
|
- `ace-task plan <ref>` (path mode, reuse cached plan when available)
|
|
42
42
|
- The most recent plan artifact plus current task spec, documented in the step report
|
|
43
43
|
4. If stalls repeat, add a follow-up fix task and capture evidence in the retrospective.
|
|
44
|
-
5. If implementation reveals the spec
|
|
44
|
+
5. If implementation reveals the spec is materially wrong, stale, or missing an adoption path, stop and either update the spec or add a follow-up task before continuing.
|
|
45
45
|
|
|
46
46
|
## Primary Directive
|
|
47
47
|
|
|
@@ -59,12 +59,13 @@ Work through the plan checklist, step by step:
|
|
|
59
59
|
- If the spec says X, implement X — don't gold-plate, don't simplify away requirements
|
|
60
60
|
- If spec and plan conflict, spec wins — the plan is a HOW, not a WHAT
|
|
61
61
|
- If the spec is ambiguous or incomplete: stop and ask, don't assume
|
|
62
|
-
- If runtime work materially changes a public contract
|
|
62
|
+
- If runtime work materially changes a promised public contract (flags, naming, fallback behavior, proof surface, ownership boundary), do not silently drift. Update the task/spec or create a follow-up task before release or demo cleanup.
|
|
63
|
+
- If implementation reveals the plan targets only a symptom/consumer package for a shared primitive, stop and re-plan at the owner layer before editing. The owner layer is the package that creates, names, persists, routes, or navigates the primitive; adapters and consumers should reuse owner APIs instead of duplicating policy.
|
|
63
64
|
|
|
64
65
|
**Prior implementation awareness:**
|
|
65
|
-
- Before creating new modules, search for existing implementations of the same concern
|
|
66
|
-
- If a sibling task
|
|
67
|
-
- Check dependency task reports and the task folder for prior work artifacts
|
|
66
|
+
- Before creating new modules, search for existing implementations of the same concern
|
|
67
|
+
- If a sibling task produced prototype or exploratory code, refactor and promote it rather than creating parallel "production" versions
|
|
68
|
+
- Check dependency task reports and the task folder for prior work artifacts
|
|
68
69
|
- When plan file paths point to locations where code already exists, integrate rather than duplicate
|
|
69
70
|
|
|
70
71
|
**Execution discipline:**
|
|
@@ -74,20 +75,20 @@ Work through the plan checklist, step by step:
|
|
|
74
75
|
- If a test failure is undiagnosable after one attempt: stop and report
|
|
75
76
|
|
|
76
77
|
**Task lifecycle:**
|
|
77
|
-
- `draft` status: warn the user that the spec hasn't been reviewed, then continue only with explicit confirmation. In unattended/fork contexts where interactive confirmation is not possible, proceed after marking in-progress
|
|
78
|
+
- `draft` status: warn the user that the spec hasn't been reviewed, then continue only with explicit confirmation. In unattended/fork contexts where interactive confirmation is not possible, proceed after marking in-progress -- the assignment creation layer is responsible for blocking draft tasks before they reach this point.
|
|
78
79
|
- Mark in-progress before first change, done after last verification
|
|
79
|
-
- Never modify task frontmatter directly
|
|
80
|
-
- If the
|
|
80
|
+
- Never modify task frontmatter directly -- use `ace-task update <ref> --set key=value`
|
|
81
|
+
- If implementation reveals the reviewed draft structure is materially wrong, update the affected task specs or add follow-up tasks before continuing with misleading assumptions.
|
|
81
82
|
|
|
82
83
|
## Code Conventions
|
|
83
84
|
|
|
84
|
-
- Follow established project patterns
|
|
85
|
+
- Follow established project patterns -- don't introduce new abstractions or styles
|
|
85
86
|
- 2-space indentation (Ruby); keep lines under 120 characters
|
|
86
87
|
- Write tests for all new logic; run `ace-test` before committing
|
|
87
88
|
|
|
88
89
|
## Task Folder
|
|
89
90
|
|
|
90
|
-
**Documents:** Task-specific docs (reports, findings, usage docs) go in the task folder
|
|
91
|
+
**Documents:** Task-specific docs (reports, findings, usage docs) go in the task folder -- never in the project root.
|
|
91
92
|
|
|
92
93
|
**Codemods** (scripts that transform files): create in `{task-folder}/codemods/`, never in `bin/`
|
|
93
94
|
|
|
@@ -97,7 +98,7 @@ Work through the plan checklist, step by step:
|
|
|
97
98
|
|
|
98
99
|
All plan steps checked, all success criteria pass:
|
|
99
100
|
|
|
100
|
-
1. **Verify working tree is clean**
|
|
101
|
+
1. **Verify working tree is clean** -- no uncommitted changes:
|
|
101
102
|
```bash
|
|
102
103
|
git status --short
|
|
103
104
|
```
|
|
@@ -336,10 +336,10 @@ module Ace
|
|
|
336
336
|
parent_dir, recursive: true
|
|
337
337
|
)
|
|
338
338
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
339
|
+
parent = load_parent_from_directory(parent_dir, loader)
|
|
340
|
+
return unless parent
|
|
341
|
+
|
|
342
|
+
archive_parent_via_update(parent)
|
|
343
343
|
end
|
|
344
344
|
|
|
345
345
|
def parse_archive_date(task)
|
|
@@ -387,27 +387,46 @@ module Ace
|
|
|
387
387
|
}
|
|
388
388
|
end
|
|
389
389
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
mover = Ace::Support::Items::Molecules::FolderMover.new(@root_dir)
|
|
398
|
-
new_parent_path = mover.move(parent, to: "archive", date: parse_archive_date(parent))
|
|
399
|
-
new_special_folder = Ace::Support::Items::Atoms::SpecialFolderDetector.detect_in_path(
|
|
400
|
-
new_parent_path, root: @root_dir
|
|
401
|
-
)
|
|
390
|
+
archived_parent = archive_parent_via_update(parent)
|
|
391
|
+
return {
|
|
392
|
+
path: task.path,
|
|
393
|
+
special_folder: task.special_folder,
|
|
394
|
+
id: task.id
|
|
395
|
+
} unless archived_parent
|
|
402
396
|
|
|
403
397
|
@last_update_note = "Archived parent task #{parent.id} because all subtasks are terminal."
|
|
404
398
|
{
|
|
405
|
-
path: File.join(
|
|
406
|
-
special_folder:
|
|
399
|
+
path: File.join(archived_parent.path, File.basename(task.path)),
|
|
400
|
+
special_folder: archived_parent.special_folder,
|
|
407
401
|
id: task.id
|
|
408
402
|
}
|
|
409
403
|
end
|
|
410
404
|
|
|
405
|
+
def archive_parent_via_update(parent)
|
|
406
|
+
previous_note = @last_update_note
|
|
407
|
+
archived_parent = update(
|
|
408
|
+
parent.id,
|
|
409
|
+
set: {"status" => "done"},
|
|
410
|
+
move_to: "archive"
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
if archived_parent && @last_update_note == previous_note
|
|
414
|
+
@last_update_note = "Archived parent task #{parent.id} because all subtasks are terminal."
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
archived_parent
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
def load_parent_from_directory(parent_dir, loader)
|
|
421
|
+
parent_id = File.basename(parent_dir).split("-", 2).first
|
|
422
|
+
return nil unless parent_id
|
|
423
|
+
|
|
424
|
+
parent_special = Ace::Support::Items::Atoms::SpecialFolderDetector.detect_in_path(
|
|
425
|
+
parent_dir, root: @root_dir
|
|
426
|
+
)
|
|
427
|
+
loader.load(parent_dir, id: parent_id, special_folder: parent_special)
|
|
428
|
+
end
|
|
429
|
+
|
|
411
430
|
# Value accessor for FilterApplier
|
|
412
431
|
def task_value_accessor(item, key)
|
|
413
432
|
case key
|
data/lib/ace/task/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ace-task
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.36.
|
|
4
|
+
version: 0.36.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michal Czyz
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-04-
|
|
10
|
+
date: 2026-04-26 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: ace-support-core
|