superpowers-opencode-fork-dev-test 1.0.0 → 1.0.1

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.
Files changed (38) hide show
  1. package/.opencode/plugins/superpowers.js +219 -0
  2. package/README.md +28 -1
  3. package/package.json +2 -3
  4. package/skills/brainstorming/SKILL.md +0 -54
  5. package/skills/dispatching-parallel-agents/SKILL.md +0 -180
  6. package/skills/executing-plans/SKILL.md +0 -76
  7. package/skills/finishing-a-development-branch/SKILL.md +0 -200
  8. package/skills/receiving-code-review/SKILL.md +0 -213
  9. package/skills/requesting-code-review/SKILL.md +0 -105
  10. package/skills/requesting-code-review/code-reviewer.md +0 -146
  11. package/skills/subagent-driven-development/SKILL.md +0 -240
  12. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +0 -20
  13. package/skills/subagent-driven-development/implementer-prompt.md +0 -78
  14. package/skills/subagent-driven-development/spec-reviewer-prompt.md +0 -61
  15. package/skills/systematic-debugging/CREATION-LOG.md +0 -119
  16. package/skills/systematic-debugging/SKILL.md +0 -296
  17. package/skills/systematic-debugging/condition-based-waiting-example.ts +0 -158
  18. package/skills/systematic-debugging/condition-based-waiting.md +0 -115
  19. package/skills/systematic-debugging/defense-in-depth.md +0 -122
  20. package/skills/systematic-debugging/find-polluter.sh +0 -63
  21. package/skills/systematic-debugging/root-cause-tracing.md +0 -169
  22. package/skills/systematic-debugging/test-academic.md +0 -14
  23. package/skills/systematic-debugging/test-pressure-1.md +0 -58
  24. package/skills/systematic-debugging/test-pressure-2.md +0 -68
  25. package/skills/systematic-debugging/test-pressure-3.md +0 -69
  26. package/skills/test-driven-development/SKILL.md +0 -371
  27. package/skills/test-driven-development/testing-anti-patterns.md +0 -299
  28. package/skills/using-git-worktrees/SKILL.md +0 -217
  29. package/skills/using-superpowers/SKILL.md +0 -87
  30. package/skills/verification-before-completion/SKILL.md +0 -139
  31. package/skills/writing-plans/SKILL.md +0 -116
  32. package/skills/writing-skills/SKILL.md +0 -655
  33. package/skills/writing-skills/anthropic-best-practices.md +0 -1150
  34. package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  35. package/skills/writing-skills/graphviz-conventions.dot +0 -172
  36. package/skills/writing-skills/persuasion-principles.md +0 -187
  37. package/skills/writing-skills/render-graphs.js +0 -168
  38. package/skills/writing-skills/testing-skills-with-subagents.md +0 -384
@@ -83,7 +83,226 @@ ${toolMapping}
83
83
  </EXTREMELY_IMPORTANT>`;
84
84
  };
85
85
 
86
+ // Platform detection: only run on Linux or macOS
87
+ const platform = os.platform();
88
+ const isLinux = platform === 'linux';
89
+ const isMacOS = platform === 'darwin';
90
+ const isSupportedPlatform = isLinux || isMacOS;
91
+
92
+ // Client detection: only run in OpenCode
93
+ const isOpencode = client?.app?.name === 'opencode';
94
+
95
+ // Helper to read configuration from directory/opencode.json
96
+ const readConfig = () => {
97
+ const configPath = path.join(directory, 'opencode.json');
98
+
99
+ if (!fs.existsSync(configPath)) {
100
+ return {
101
+ superpowers: {
102
+ autoupdate: true,
103
+ autoupdate_notify: true
104
+ }
105
+ };
106
+ }
107
+
108
+ try {
109
+ const configContent = fs.readFileSync(configPath, 'utf8');
110
+ const config = JSON.parse(configContent);
111
+
112
+ return {
113
+ superpowers: {
114
+ autoupdate: config.superpowers?.autoupdate ?? true,
115
+ autoupdate_notify: config.superpowers?.autoupdate_notify ?? true
116
+ }
117
+ };
118
+ } catch (error) {
119
+ client.app.log('superpowers: Failed to parse opencode.json, using defaults');
120
+ return {
121
+ superpowers: {
122
+ autoupdate: true,
123
+ autoupdate_notify: true
124
+ }
125
+ };
126
+ }
127
+ };
128
+
129
+ // Helper to check if superpowers was manually installed
130
+ const isManualInstall = (superpowersDir) => {
131
+ const gitConfigPath = path.join(superpowersDir, '.git', 'config');
132
+
133
+ if (!fs.existsSync(gitConfigPath)) {
134
+ return false;
135
+ }
136
+
137
+ try {
138
+ const gitConfig = fs.readFileSync(gitConfigPath, 'utf8');
139
+ const expectedUrls = [
140
+ 'https://github.com/obra/superpowers.git',
141
+ 'git+https://github.com/obra/superpowers.git'
142
+ ];
143
+
144
+ const isExpectedUrl = expectedUrls.some(url => gitConfig.includes(url));
145
+ return !isExpectedUrl;
146
+ } catch (error) {
147
+ return false;
148
+ }
149
+ };
150
+
151
+ // Autoinstall handler - entry point for all autoinstall logic
152
+ const handleAutoinstall = async () => {
153
+ // Exit early on unsupported platforms
154
+ if (!isSupportedPlatform) {
155
+ client.app.log('superpowers: Skipping autoinstall - unsupported platform:', platform);
156
+ return;
157
+ }
158
+
159
+ // Exit early if not running in OpenCode
160
+ if (!isOpencode) {
161
+ client.app.log('superpowers: Skipping autoinstall - not running in OpenCode');
162
+ return;
163
+ }
164
+
165
+ // Read configuration from directory/opencode.json
166
+ const config = readConfig();
167
+
168
+ client.app.log('superpowers: Autoinstall starting...');
169
+ client.app.log('superpowers: Config directory:', configDir);
170
+
171
+ const superpowersDir = path.join(configDir, 'superpowers');
172
+ const pluginSymlinkPath = path.join(configDir, 'plugins/superpowers.js');
173
+ const skillsSymlinkPath = path.join(configDir, 'skills/superpowers');
174
+ const targetPluginPath = path.join(superpowersDir, '.opencode/plugins/superpowers.js');
175
+ const targetSkillsPath = path.join(superpowersDir, 'skills');
176
+
177
+ // Task 4: Implement git clone if not exists
178
+ if (!fs.existsSync(superpowersDir)) {
179
+ client.app.log('superpowers: Superpowers directory not found, cloning repository...');
180
+ try {
181
+ await $`git clone git+https://github.com/obra/superpowers.git ${superpowersDir}`;
182
+ client.app.log('superpowers: Successfully cloned superpowers repository');
183
+ } catch (error) {
184
+ if (error.message.includes('git')) {
185
+ client.app.log('superpowers: Error: Git is not installed. Please install git to continue.');
186
+ } else {
187
+ client.app.log('superpowers: Failed to clone repository:', error.message);
188
+ }
189
+ return;
190
+ }
191
+ } else {
192
+ client.app.log('superpowers: Superpowers directory exists at', superpowersDir);
193
+ }
194
+
195
+ // Task 5: Implement symlink creation/removal (idempotent)
196
+ const createSymlink = (source, target) => {
197
+ try {
198
+ // Remove existing symlink or file if it exists
199
+ if (fs.existsSync(target) || fs.lstatSync(target).isSymbolicLink()) {
200
+ client.app.log('superpowers: Removing existing symlink at', target);
201
+ fs.unlinkSync(target);
202
+ }
203
+ } catch (error) {
204
+ // Ignore errors if target doesn't exist
205
+ }
206
+
207
+ // Ensure parent directory exists
208
+ const parentDir = path.dirname(target);
209
+ if (!fs.existsSync(parentDir)) {
210
+ client.app.log('superpowers: Creating parent directory', parentDir);
211
+ fs.mkdirSync(parentDir, { recursive: true });
212
+ }
213
+
214
+ // Create symlink
215
+ try {
216
+ fs.symlinkSync(source, target);
217
+ client.app.log('superpowers: Created symlink', target, '→', source);
218
+ } catch (error) {
219
+ client.app.log('superpowers: Failed to create symlink', target, '→', source, ':', error.message);
220
+ }
221
+ };
222
+
223
+ createSymlink(targetPluginPath, pluginSymlinkPath);
224
+ createSymlink(targetSkillsPath, skillsSymlinkPath);
225
+
226
+ // Task 6: Implement update detection and pull
227
+ const checkForUpdates = async () => {
228
+ const gitDir = path.join(superpowersDir, '.git');
229
+
230
+ if (!fs.existsSync(gitDir)) {
231
+ client.app.log('superpowers: Not a git repository, skipping update check');
232
+ return;
233
+ }
234
+
235
+ // Check for manual install
236
+ if (isManualInstall(superpowersDir)) {
237
+ client.app.log('superpowers: Manual installation detected, skipping auto-update');
238
+ return;
239
+ }
240
+
241
+ // Check autoupdate config
242
+ if (!config.superpowers.autoupdate) {
243
+ return;
244
+ }
245
+
246
+ if (config.superpowers.autoupdate_notify) {
247
+ client.app.log('superpowers: Checking for updates...');
248
+ }
249
+
250
+ try {
251
+ // Git fetch with timeout
252
+ await Promise.race([
253
+ $`git -C ${superpowersDir} fetch origin`,
254
+ new Promise((_, reject) =>
255
+ setTimeout(() => reject(new Error('Timeout')), 30000)
256
+ )
257
+ ]);
258
+
259
+ // Check if local branch is behind remote
260
+ const localRev = await $`git -C ${superpowersDir} rev-parse HEAD`;
261
+ const remoteRev = await $`git -C ${superpowersDir} rev-parse @{u}`;
262
+
263
+ if (localRev.stdout.trim() !== remoteRev.stdout.trim()) {
264
+ if (config.superpowers.autoupdate_notify) {
265
+ client.app.log('superpowers: Updates available, pulling changes...');
266
+ }
267
+ await $`git -C ${superpowersDir} pull`;
268
+
269
+ // Get the current version/tag
270
+ try {
271
+ const tag = await $`git -C ${superpowersDir} describe --tags --abbrev=0 2>/dev/null`;
272
+ if (config.superpowers.autoupdate_notify) {
273
+ client.app.log('superpowers: Updated to version:', tag.stdout.trim());
274
+ }
275
+ } catch {
276
+ if (config.superpowers.autoupdate_notify) {
277
+ client.app.log('superpowers: Updated successfully (no tag available)');
278
+ }
279
+ }
280
+ } else {
281
+ if (config.superpowers.autoupdate_notify) {
282
+ client.app.log('superpowers: Already up to date');
283
+ }
284
+ }
285
+ } catch (error) {
286
+ if (error.message === 'Timeout') {
287
+ client.app.log('superpowers: Update check timed out, continuing...');
288
+ } else {
289
+ client.app.log('superpowers: Update check failed:', error.message);
290
+ }
291
+ }
292
+ };
293
+
294
+ // Run update check in background (non-blocking)
295
+ setImmediate(() => {
296
+ checkForUpdates();
297
+ });
298
+ };
299
+
86
300
  return {
301
+ // Autoinstall entry point - triggers on new sessions
302
+ 'session.created': async () => {
303
+ await handleAutoinstall();
304
+ },
305
+
87
306
  // Use system prompt transform to inject bootstrap (fixes #226 agent reset bug)
88
307
  'experimental.chat.system.transform': async (_input, output) => {
89
308
  const bootstrap = getBootstrapContent();
package/README.md CHANGED
@@ -26,7 +26,7 @@ Thanks!
26
26
 
27
27
  ## Installation
28
28
 
29
- **Note:** Installation differs by platform. Claude Code has a built-in plugin system. Codex and OpenCode require manual setup.
29
+ **Note:** Installation differs by platform. Claude Code has a built-in plugin system. Codex requires manual setup. OpenCode supports both automatic and manual installation.
30
30
 
31
31
  ### Claude Code (via Plugin Marketplace)
32
32
 
@@ -69,6 +69,20 @@ Fetch and follow instructions from https://raw.githubusercontent.com/obra/superp
69
69
 
70
70
  ### OpenCode
71
71
 
72
+ **Quick Install (npm):**
73
+
74
+ Add to your opencode.json:
75
+
76
+ ```json
77
+ {
78
+ "plugin": ["superpowers-opencode-fork-dev-test"]
79
+ }
80
+ ```
81
+
82
+ Superpowers autoinstalls in the background. **Note:** Autoinstall works on Linux and macOS only.
83
+
84
+ **Manual Installation:**
85
+
72
86
  Tell OpenCode:
73
87
 
74
88
  ```
@@ -143,12 +157,25 @@ See `skills/writing-skills/SKILL.md` for the complete guide.
143
157
 
144
158
  ## Updating
145
159
 
160
+ ### Claude Code
146
161
  Skills update automatically when you update the plugin:
147
162
 
148
163
  ```bash
149
164
  /plugin update superpowers
150
165
  ```
151
166
 
167
+ ### OpenCode
168
+ With the npm plugin, updates are handled automatically. Superpowers checks for updates on startup and pulls them in the background (unless disabled in config).
169
+
170
+ For manual installation, update by running:
171
+
172
+ ```bash
173
+ cd ~/.config/opencode/superpowers
174
+ git pull
175
+ ```
176
+
177
+ Then restart OpenCode.
178
+
152
179
  ## License
153
180
 
154
181
  MIT License - see LICENSE file for details
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superpowers-opencode-fork-dev-test",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Superpowers plugin for OpenCode.ai - Complete software development workflow with composable skills",
5
5
  "type": "module",
6
6
  "main": ".opencode/plugins/superpowers.js",
@@ -11,8 +11,7 @@
11
11
  }
12
12
  },
13
13
  "files": [
14
- ".opencode/plugins/superpowers.js",
15
- "skills/"
14
+ ".opencode/plugins/superpowers.js"
16
15
  ],
17
16
  "scripts": {
18
17
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -1,54 +0,0 @@
1
- ---
2
- name: brainstorming
3
- description: "You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation."
4
- ---
5
-
6
- # Brainstorming Ideas Into Designs
7
-
8
- ## Overview
9
-
10
- Help turn ideas into fully formed designs and specs through natural collaborative dialogue.
11
-
12
- Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you're building, present the design in small sections (200-300 words), checking after each section whether it looks right so far.
13
-
14
- ## The Process
15
-
16
- **Understanding the idea:**
17
- - Check out the current project state first (files, docs, recent commits)
18
- - Ask questions one at a time to refine the idea
19
- - Prefer multiple choice questions when possible, but open-ended is fine too
20
- - Only one question per message - if a topic needs more exploration, break it into multiple questions
21
- - Focus on understanding: purpose, constraints, success criteria
22
-
23
- **Exploring approaches:**
24
- - Propose 2-3 different approaches with trade-offs
25
- - Present options conversationally with your recommendation and reasoning
26
- - Lead with your recommended option and explain why
27
-
28
- **Presenting the design:**
29
- - Once you believe you understand what you're building, present the design
30
- - Break it into sections of 200-300 words
31
- - Ask after each section whether it looks right so far
32
- - Cover: architecture, components, data flow, error handling, testing
33
- - Be ready to go back and clarify if something doesn't make sense
34
-
35
- ## After the Design
36
-
37
- **Documentation:**
38
- - Write the validated design to `docs/plans/YYYY-MM-DD-<topic>-design.md`
39
- - Use elements-of-style:writing-clearly-and-concisely skill if available
40
- - Commit the design document to git
41
-
42
- **Implementation (if continuing):**
43
- - Ask: "Ready to set up for implementation?"
44
- - Use superpowers:using-git-worktrees to create isolated workspace
45
- - Use superpowers:writing-plans to create detailed implementation plan
46
-
47
- ## Key Principles
48
-
49
- - **One question at a time** - Don't overwhelm with multiple questions
50
- - **Multiple choice preferred** - Easier to answer than open-ended when possible
51
- - **YAGNI ruthlessly** - Remove unnecessary features from all designs
52
- - **Explore alternatives** - Always propose 2-3 approaches before settling
53
- - **Incremental validation** - Present design in sections, validate each
54
- - **Be flexible** - Go back and clarify when something doesn't make sense
@@ -1,180 +0,0 @@
1
- ---
2
- name: dispatching-parallel-agents
3
- description: Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
4
- ---
5
-
6
- # Dispatching Parallel Agents
7
-
8
- ## Overview
9
-
10
- When you have multiple unrelated failures (different test files, different subsystems, different bugs), investigating them sequentially wastes time. Each investigation is independent and can happen in parallel.
11
-
12
- **Core principle:** Dispatch one agent per independent problem domain. Let them work concurrently.
13
-
14
- ## When to Use
15
-
16
- ```dot
17
- digraph when_to_use {
18
- "Multiple failures?" [shape=diamond];
19
- "Are they independent?" [shape=diamond];
20
- "Single agent investigates all" [shape=box];
21
- "One agent per problem domain" [shape=box];
22
- "Can they work in parallel?" [shape=diamond];
23
- "Sequential agents" [shape=box];
24
- "Parallel dispatch" [shape=box];
25
-
26
- "Multiple failures?" -> "Are they independent?" [label="yes"];
27
- "Are they independent?" -> "Single agent investigates all" [label="no - related"];
28
- "Are they independent?" -> "Can they work in parallel?" [label="yes"];
29
- "Can they work in parallel?" -> "Parallel dispatch" [label="yes"];
30
- "Can they work in parallel?" -> "Sequential agents" [label="no - shared state"];
31
- }
32
- ```
33
-
34
- **Use when:**
35
- - 3+ test files failing with different root causes
36
- - Multiple subsystems broken independently
37
- - Each problem can be understood without context from others
38
- - No shared state between investigations
39
-
40
- **Don't use when:**
41
- - Failures are related (fix one might fix others)
42
- - Need to understand full system state
43
- - Agents would interfere with each other
44
-
45
- ## The Pattern
46
-
47
- ### 1. Identify Independent Domains
48
-
49
- Group failures by what's broken:
50
- - File A tests: Tool approval flow
51
- - File B tests: Batch completion behavior
52
- - File C tests: Abort functionality
53
-
54
- Each domain is independent - fixing tool approval doesn't affect abort tests.
55
-
56
- ### 2. Create Focused Agent Tasks
57
-
58
- Each agent gets:
59
- - **Specific scope:** One test file or subsystem
60
- - **Clear goal:** Make these tests pass
61
- - **Constraints:** Don't change other code
62
- - **Expected output:** Summary of what you found and fixed
63
-
64
- ### 3. Dispatch in Parallel
65
-
66
- ```typescript
67
- // In Claude Code / AI environment
68
- Task("Fix agent-tool-abort.test.ts failures")
69
- Task("Fix batch-completion-behavior.test.ts failures")
70
- Task("Fix tool-approval-race-conditions.test.ts failures")
71
- // All three run concurrently
72
- ```
73
-
74
- ### 4. Review and Integrate
75
-
76
- When agents return:
77
- - Read each summary
78
- - Verify fixes don't conflict
79
- - Run full test suite
80
- - Integrate all changes
81
-
82
- ## Agent Prompt Structure
83
-
84
- Good agent prompts are:
85
- 1. **Focused** - One clear problem domain
86
- 2. **Self-contained** - All context needed to understand the problem
87
- 3. **Specific about output** - What should the agent return?
88
-
89
- ```markdown
90
- Fix the 3 failing tests in src/agents/agent-tool-abort.test.ts:
91
-
92
- 1. "should abort tool with partial output capture" - expects 'interrupted at' in message
93
- 2. "should handle mixed completed and aborted tools" - fast tool aborted instead of completed
94
- 3. "should properly track pendingToolCount" - expects 3 results but gets 0
95
-
96
- These are timing/race condition issues. Your task:
97
-
98
- 1. Read the test file and understand what each test verifies
99
- 2. Identify root cause - timing issues or actual bugs?
100
- 3. Fix by:
101
- - Replacing arbitrary timeouts with event-based waiting
102
- - Fixing bugs in abort implementation if found
103
- - Adjusting test expectations if testing changed behavior
104
-
105
- Do NOT just increase timeouts - find the real issue.
106
-
107
- Return: Summary of what you found and what you fixed.
108
- ```
109
-
110
- ## Common Mistakes
111
-
112
- **❌ Too broad:** "Fix all the tests" - agent gets lost
113
- **✅ Specific:** "Fix agent-tool-abort.test.ts" - focused scope
114
-
115
- **❌ No context:** "Fix the race condition" - agent doesn't know where
116
- **✅ Context:** Paste the error messages and test names
117
-
118
- **❌ No constraints:** Agent might refactor everything
119
- **✅ Constraints:** "Do NOT change production code" or "Fix tests only"
120
-
121
- **❌ Vague output:** "Fix it" - you don't know what changed
122
- **✅ Specific:** "Return summary of root cause and changes"
123
-
124
- ## When NOT to Use
125
-
126
- **Related failures:** Fixing one might fix others - investigate together first
127
- **Need full context:** Understanding requires seeing entire system
128
- **Exploratory debugging:** You don't know what's broken yet
129
- **Shared state:** Agents would interfere (editing same files, using same resources)
130
-
131
- ## Real Example from Session
132
-
133
- **Scenario:** 6 test failures across 3 files after major refactoring
134
-
135
- **Failures:**
136
- - agent-tool-abort.test.ts: 3 failures (timing issues)
137
- - batch-completion-behavior.test.ts: 2 failures (tools not executing)
138
- - tool-approval-race-conditions.test.ts: 1 failure (execution count = 0)
139
-
140
- **Decision:** Independent domains - abort logic separate from batch completion separate from race conditions
141
-
142
- **Dispatch:**
143
- ```
144
- Agent 1 → Fix agent-tool-abort.test.ts
145
- Agent 2 → Fix batch-completion-behavior.test.ts
146
- Agent 3 → Fix tool-approval-race-conditions.test.ts
147
- ```
148
-
149
- **Results:**
150
- - Agent 1: Replaced timeouts with event-based waiting
151
- - Agent 2: Fixed event structure bug (threadId in wrong place)
152
- - Agent 3: Added wait for async tool execution to complete
153
-
154
- **Integration:** All fixes independent, no conflicts, full suite green
155
-
156
- **Time saved:** 3 problems solved in parallel vs sequentially
157
-
158
- ## Key Benefits
159
-
160
- 1. **Parallelization** - Multiple investigations happen simultaneously
161
- 2. **Focus** - Each agent has narrow scope, less context to track
162
- 3. **Independence** - Agents don't interfere with each other
163
- 4. **Speed** - 3 problems solved in time of 1
164
-
165
- ## Verification
166
-
167
- After agents return:
168
- 1. **Review each summary** - Understand what changed
169
- 2. **Check for conflicts** - Did agents edit same code?
170
- 3. **Run full suite** - Verify all fixes work together
171
- 4. **Spot check** - Agents can make systematic errors
172
-
173
- ## Real-World Impact
174
-
175
- From debugging session (2025-10-03):
176
- - 6 failures across 3 files
177
- - 3 agents dispatched in parallel
178
- - All investigations completed concurrently
179
- - All fixes integrated successfully
180
- - Zero conflicts between agent changes
@@ -1,76 +0,0 @@
1
- ---
2
- name: executing-plans
3
- description: Use when you have a written implementation plan to execute in a separate session with review checkpoints
4
- ---
5
-
6
- # Executing Plans
7
-
8
- ## Overview
9
-
10
- Load plan, review critically, execute tasks in batches, report for review between batches.
11
-
12
- **Core principle:** Batch execution with checkpoints for architect review.
13
-
14
- **Announce at start:** "I'm using the executing-plans skill to implement this plan."
15
-
16
- ## The Process
17
-
18
- ### Step 1: Load and Review Plan
19
- 1. Read plan file
20
- 2. Review critically - identify any questions or concerns about the plan
21
- 3. If concerns: Raise them with your human partner before starting
22
- 4. If no concerns: Create TodoWrite and proceed
23
-
24
- ### Step 2: Execute Batch
25
- **Default: First 3 tasks**
26
-
27
- For each task:
28
- 1. Mark as in_progress
29
- 2. Follow each step exactly (plan has bite-sized steps)
30
- 3. Run verifications as specified
31
- 4. Mark as completed
32
-
33
- ### Step 3: Report
34
- When batch complete:
35
- - Show what was implemented
36
- - Show verification output
37
- - Say: "Ready for feedback."
38
-
39
- ### Step 4: Continue
40
- Based on feedback:
41
- - Apply changes if needed
42
- - Execute next batch
43
- - Repeat until complete
44
-
45
- ### Step 5: Complete Development
46
-
47
- After all tasks complete and verified:
48
- - Announce: "I'm using the finishing-a-development-branch skill to complete this work."
49
- - **REQUIRED SUB-SKILL:** Use superpowers:finishing-a-development-branch
50
- - Follow that skill to verify tests, present options, execute choice
51
-
52
- ## When to Stop and Ask for Help
53
-
54
- **STOP executing immediately when:**
55
- - Hit a blocker mid-batch (missing dependency, test fails, instruction unclear)
56
- - Plan has critical gaps preventing starting
57
- - You don't understand an instruction
58
- - Verification fails repeatedly
59
-
60
- **Ask for clarification rather than guessing.**
61
-
62
- ## When to Revisit Earlier Steps
63
-
64
- **Return to Review (Step 1) when:**
65
- - Partner updates the plan based on your feedback
66
- - Fundamental approach needs rethinking
67
-
68
- **Don't force through blockers** - stop and ask.
69
-
70
- ## Remember
71
- - Review plan critically first
72
- - Follow plan steps exactly
73
- - Don't skip verifications
74
- - Reference skills when plan says to
75
- - Between batches: just report and wait
76
- - Stop when blocked, don't guess