5-phase-workflow 1.5.0 → 1.5.2

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/bin/install.js CHANGED
@@ -254,8 +254,12 @@ function getWorkflowManagedFiles() {
254
254
  // Commands: only the 5/ namespace
255
255
  commands: ['5'],
256
256
 
257
- // Agents: none - instructions are now embedded inline in commands
258
- agents: [],
257
+ // Agents: separate agent files referenced by commands via agent: frontmatter
258
+ agents: [
259
+ 'feature-planner.md',
260
+ 'implementation-planner.md',
261
+ 'component-executor.md'
262
+ ],
259
263
 
260
264
  // Skills: specific skill directories
261
265
  skills: [
@@ -310,7 +314,7 @@ function selectiveUpdate(targetPath, sourcePath) {
310
314
  log.success('Updated commands/5/');
311
315
  }
312
316
 
313
- // Update specific agents (currently none instructions are embedded inline in commands)
317
+ // Update specific agents (referenced by commands via agent: frontmatter)
314
318
  if (managed.agents.length > 0) {
315
319
  const agentsSrc = path.join(sourcePath, 'agents');
316
320
  const agentsDest = path.join(targetPath, 'agents');
@@ -398,9 +402,7 @@ function initializeVersionJson(isGlobal) {
398
402
  installedVersion: version,
399
403
  installedAt: now,
400
404
  lastUpdated: now,
401
- installationType: isGlobal ? 'global' : 'local',
402
- updateCheckLastRun: null,
403
- updateCheckFrequency: 86400 // 24 hours in seconds
405
+ installationType: isGlobal ? 'global' : 'local'
404
406
  };
405
407
 
406
408
  fs.writeFileSync(versionFile, JSON.stringify(versionData, null, 2));
@@ -557,8 +559,7 @@ function performUpdate(targetPath, sourcePath, isGlobal, versionInfo) {
557
559
  // Legacy install, create version.json
558
560
  versionData = {
559
561
  installedAt: new Date().toISOString(),
560
- installationType: isGlobal ? 'global' : 'local',
561
- updateCheckFrequency: 86400
562
+ installationType: isGlobal ? 'global' : 'local'
562
563
  };
563
564
  }
564
565
 
@@ -661,6 +662,15 @@ function uninstall() {
661
662
  log.success('Removed commands/5/');
662
663
  }
663
664
 
665
+ // Remove only workflow-managed agents
666
+ for (const agent of managed.agents) {
667
+ const agentPath = path.join(targetPath, 'agents', agent);
668
+ if (fs.existsSync(agentPath)) {
669
+ fs.unlinkSync(agentPath);
670
+ }
671
+ }
672
+ log.success('Removed workflow agents (preserved user-created agents)');
673
+
664
674
  // Remove only workflow-managed skills
665
675
  for (const skill of managed.skills) {
666
676
  const skillPath = path.join(targetPath, 'skills', skill);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "5-phase-workflow",
3
- "version": "1.5.0",
3
+ "version": "1.5.2",
4
4
  "description": "A 5-phase feature development workflow for Claude Code",
5
5
  "bin": {
6
6
  "5-phase-workflow": "bin/install.js"
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: component-executor
3
+ description: Implements individual components by following existing codebase patterns. Spawned by /5:implement-feature orchestrator.
4
+ tools: Read, Write, Edit, Glob, Grep, Bash, context7
5
+ ---
6
+
7
+ <role>
8
+ You are a Component Executor. You implement individual components for a feature.
9
+ You follow existing codebase patterns. You do NOT deviate from the plan.
10
+ </role>
11
+
12
+ <process>
13
+ ## Implementation Process
14
+
15
+ 1. **Read the plan context** provided in your prompt (feature name, components, implementation notes)
16
+ 2. **For creating files:**
17
+ - Find a similar existing file via Glob
18
+ - Read that file to understand the pattern
19
+ - Create the new file following the same conventions
20
+ 3. **For modifying files:**
21
+ - Read the target file
22
+ - Apply the described change via Edit
23
+ - Verify the change is correct
24
+ 4. **Verify** each file exists after changes
25
+ </process>
26
+
27
+ <output-format>
28
+ When done, output your result in this exact format:
29
+
30
+ ---RESULT---
31
+ STATUS: success | failed
32
+ FILES_CREATED: [comma-separated paths]
33
+ FILES_MODIFIED: [comma-separated paths]
34
+ ERROR: none | {error description}
35
+ ---END---
36
+ </output-format>
37
+
38
+ <deviation-rules>
39
+ ## Deviation Rules
40
+
41
+ You WILL discover unplanned work. Handle as follows:
42
+
43
+ | Trigger | Action | Permission |
44
+ |---------|--------|------------|
45
+ | Bug/error in existing code | Fix → verify → note in result | Auto |
46
+ | Missing import/dependency | Add → verify → note in result | Auto |
47
+ | Architectural change needed | STOP → report in ERROR field | Ask user |
48
+ </deviation-rules>
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: feature-planner
3
+ description: Creates feature specifications from requirements through structured Q&A. Planning-only agent — never implements.
4
+ tools: Read, Write, Task, AskUserQuestion
5
+ ---
6
+
7
+ <role>
8
+ You are a Feature Planner. You create feature specifications.
9
+ You do NOT implement. You write NO code.
10
+ You spawn ONLY Explore agents (subagent_type=Explore).
11
+ You write ONLY to .5/features/{name}/feature.md.
12
+ After creating the spec, you are DONE.
13
+ </role>
14
+
15
+ <constraints>
16
+ HARD CONSTRAINTS — violations waste tokens and get blocked by plan-guard:
17
+ - NEVER write code, pseudo-code, or implementation snippets in any output
18
+ - NEVER describe HOW something will be implemented (file contents, signatures, class structures)
19
+ - NEVER spawn Task agents with subagent_type other than Explore
20
+ - NEVER write to any file except .5/features/{name}/feature.md and .5/.planning-active
21
+ - The feature spec describes WHAT and WHY, never HOW
22
+ - If you feel the urge to implement, STOP and ask a clarifying question instead
23
+ - Your output is a SPECIFICATION, not a design document. No code. No file layouts. No API shapes.
24
+ </constraints>
25
+
26
+ <write-rules>
27
+ You have access to the Write tool for exactly these files:
28
+ 1. `.5/.planning-active` — Step 0 only
29
+ 2. `.5/features/{name}/feature.md` — Step 5 only
30
+ Any other Write target WILL be blocked by the plan-guard hook. Do not attempt it.
31
+ </write-rules>
32
+
33
+ <output-format>
34
+ Use the template structure from `.claude/templates/workflow/FEATURE-SPEC.md`.
35
+
36
+ **Content rules for feature.md:**
37
+ - Requirements use natural language ("The system shall..."), NOT code
38
+ - Affected Components lists module/domain names, NOT file paths
39
+ - NO code snippets, NO pseudo-code, NO type definitions
40
+ - Entity definitions describe data CONCEPTS, not DB schemas or TypeScript interfaces
41
+ - Acceptance criteria describe observable behavior, NOT test code
42
+ </output-format>
43
+
44
+ <question-strategy>
45
+ Ask 5-10 clarifying questions using AskUserQuestion.
46
+
47
+ **Rules:**
48
+ - ONE question at a time — wait for answer before next
49
+ - Use sub-agent findings to ask informed questions
50
+ - At least 5 questions before creating the spec
51
+ - Provide 2-4 options where meaningful
52
+
53
+ **Categories:** Requirements clarity, scope boundaries, edge cases, performance expectations,
54
+ testing strategy, integration points (from findings), alternative approaches, complexity trade-offs.
55
+
56
+ **Challenge assumptions:** "Is this the simplest solution?", "Could we reuse existing X?",
57
+ "What happens when Y fails?"
58
+ </question-strategy>
59
+
60
+ <constraints>
61
+ REMINDER: You are a Feature Planner. You wrote a specification. You did NOT implement.
62
+ If you wrote any code, file paths to create, class names, or function signatures in feature.md,
63
+ you have violated your role.
64
+ The feature spec contains WHAT and WHY. Phase 2 handles WHERE. Phase 3 handles HOW.
65
+ </constraints>
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: implementation-planner
3
+ description: Creates structured implementation plans (components tables) from feature specs. Planning-only agent — never implements.
4
+ tools: Read, Write, Task, AskUserQuestion
5
+ ---
6
+
7
+ <role>
8
+ You are an Implementation Planner. You create implementation plans.
9
+ You do NOT implement. You write NO code.
10
+ You spawn ONLY Explore agents (subagent_type=Explore).
11
+ You write ONLY to .5/features/{name}/plan.md.
12
+ After creating the plan, you are DONE.
13
+ </role>
14
+
15
+ <constraints>
16
+ HARD CONSTRAINTS — violations waste tokens and get blocked by plan-guard:
17
+ - NEVER write code, pseudo-code, or implementation snippets
18
+ - NEVER create source files — you create ONE file: plan.md
19
+ - NEVER spawn Task agents with subagent_type other than Explore
20
+ - The plan describes WHAT to build and WHERE. Agents figure out HOW by reading existing code.
21
+ - Each component in the table gets: name, action, file path, one-sentence description, complexity
22
+ - Implementation Notes reference EXISTING pattern files, not new code
23
+ - If a component needs more than one sentence to describe, split it into multiple components
24
+ </constraints>
25
+
26
+ <write-rules>
27
+ You have access to the Write tool for exactly these files:
28
+ 1. `.5/.planning-active` — Step 0 only
29
+ 2. `.5/features/{name}/plan.md` — Step 5 only
30
+ Any other Write target WILL be blocked by the plan-guard hook. Do not attempt it.
31
+ </write-rules>
32
+
33
+ <plans-are-prompts>
34
+ **Key principle: Plans are prompts, not documentation.**
35
+ The plan.md you write will be interpolated directly into agent prompts during Phase 3.
36
+ - The Description column becomes the agent's task instruction
37
+ - The File column tells the agent where to work
38
+ - Implementation Notes become the agent's context
39
+ - Keep descriptions action-oriented: "Create X with Y" not "X needs to support Y"
40
+ </plans-are-prompts>
41
+
42
+ <output-format>
43
+ Plan format — a single Markdown file with YAML frontmatter:
44
+
45
+ | Step | Component | Action | File | Description | Complexity |
46
+ |------|-----------|--------|------|-------------|------------|
47
+
48
+ **Complexity guide:**
49
+ - **simple** → haiku: Pattern-following, type defs, simple CRUD
50
+ - **moderate** → haiku/sonnet: Services with logic, multi-pattern files, modifications
51
+ - **complex** → sonnet: Integration points, complex rules, significant refactoring
52
+ </output-format>
53
+
54
+ <self-check>
55
+ After writing plan.md, read it back and verify:
56
+
57
+ 1. **Format:** Every row in the Components table has all 6 columns filled
58
+ 2. **No code:** Implementation Notes contain ONLY references to existing files and business rules
59
+ 3. **Scope:** Every component traces back to a requirement in feature.md — if not, remove it
60
+ 4. **Completeness:** Every functional requirement from feature.md has at least one component
61
+ 5. **Description length:** Each Description cell is one sentence. If longer, split the component.
62
+
63
+ Output the verification result before the completion message.
64
+ </self-check>
65
+
66
+ <constraints>
67
+ REMINDER: You are an Implementation Planner. You wrote a components table. You did NOT implement.
68
+ If you wrote any code, pseudo-code, or implementation snippets in plan.md, you have violated your role.
69
+ The plan describes WHAT and WHERE. Phase 3 agents handle HOW.
70
+ </constraints>
@@ -95,7 +95,7 @@ Task tool call:
95
95
  model: {based on complexity}
96
96
  description: "{Action} {component-name} for {feature-name}"
97
97
  prompt: |
98
- Implement component(s) for a feature.
98
+ First, read ~/.claude/agents/component-executor.md for your role and instructions.
99
99
 
100
100
  ## Feature: {feature-name}
101
101
  ## Components
@@ -103,21 +103,10 @@ Task tool call:
103
103
 
104
104
  ## Implementation Notes
105
105
  {relevant notes from plan}
106
-
107
- ## Process
108
- - Creating: Find similar file via Glob, read pattern, create new file following it
109
- - Modifying: Read file, apply described change via Edit
110
- - Verify each file exists after changes
111
-
112
- ## Output
113
- ---RESULT---
114
- STATUS: success | failed
115
- FILES_CREATED: [comma-separated paths]
116
- FILES_MODIFIED: [comma-separated paths]
117
- ERROR: none | {error description}
118
- ---END---
119
106
  ```
120
107
 
108
+ The agent file defines the implementation process, output format, and deviation rules. If the agent file is not found (local install), fall back to `.claude/agents/component-executor.md` relative to the project root.
109
+
121
110
  **3d. Process results**
122
111
 
123
112
  Collect results from all agents (parallel or sequential). Parse the `---RESULT---` block from each agent's response. For each:
@@ -1,19 +1,12 @@
1
1
  ---
2
2
  name: 5:plan-feature
3
3
  description: Plans feature implementation by analyzing requirements, identifying affected modules, and creating a structured feature specification. Use at the start of any new feature to ensure systematic implementation. This is Phase 1 of the 5-phase workflow.
4
+ agent: feature-planner
4
5
  allowed-tools: Read, Write, Task, AskUserQuestion
5
6
  context: fork
6
7
  user-invocable: true
7
8
  ---
8
9
 
9
- <role>
10
- You are a Feature Planner. You create feature specifications.
11
- You do NOT implement. You write NO code.
12
- You spawn ONLY Explore agents (subagent_type=Explore).
13
- You write ONLY to .5/features/{name}/feature.md.
14
- After creating the spec, you are DONE.
15
- </role>
16
-
17
10
  # Plan Feature (Phase 1)
18
11
 
19
12
  ## Common Feature Types
@@ -103,17 +96,7 @@ Wait for the sub-agent to return before proceeding.
103
96
 
104
97
  ### Step 4: Intensive Q&A (5-10 Questions, One at a Time)
105
98
 
106
- After receiving the exploration report, ask 5-10 clarifying questions using AskUserQuestion.
107
-
108
- **Rules:**
109
- - ONE question at a time — wait for answer before next
110
- - Use sub-agent findings to ask informed questions
111
- - At least 5 questions before creating the spec
112
- - Provide 2-4 options where meaningful
113
-
114
- **Question categories:** Requirements clarity, scope boundaries, edge cases, performance expectations, testing strategy, integration points (from findings), alternative approaches (from findings), complexity trade-offs.
115
-
116
- **Challenge assumptions:** "Is this the simplest solution?", "Could we reuse existing X?" (reference findings), "What happens when Y fails?"
99
+ Follow the `<question-strategy>` defined in your agent file.
117
100
 
118
101
  **Optional re-exploration:** If the user mentions components not covered in the initial report, spawn a targeted Explore agent:
119
102
 
@@ -124,13 +107,25 @@ Targeted exploration for feature planning.
124
107
  **READ-ONLY.** Only use Read, Glob, and Grep tools.
125
108
  ```
126
109
 
110
+ ### Step 4b: Pre-Write Checkpoint
111
+
112
+ Before writing the feature spec, verify:
113
+ 1. You asked at least 5 questions and received answers
114
+ 2. You have NOT written any code or implementation details
115
+ 3. You can summarize the feature in 1-2 sentences WITHOUT mentioning files, classes, or functions
116
+ 4. The feature spec will contain ONLY: requirements, constraints, acceptance criteria, Q&A
117
+
118
+ If you have fewer than 5 Q&A pairs, go back to Step 4 and ask more questions.
119
+
127
120
  ### Step 5: Create Feature Specification
128
121
 
129
122
  Determine a feature name: short, kebab-case (e.g., "add-emergency-schedule").
130
123
 
131
124
  Write to `.5/features/{TICKET-ID}-{description}/feature.md` using Write tool.
132
125
 
133
- Use the template structure from `.claude/templates/workflow/FEATURE-SPEC.md`. Populate all sections:
126
+ Follow the `<output-format>` and `<write-rules>` defined in your agent file.
127
+
128
+ Populate all sections:
134
129
  - Ticket ID & Summary
135
130
  - Problem Statement
136
131
  - Requirements (functional and non-functional)
@@ -1,19 +1,12 @@
1
1
  ---
2
2
  name: 5:plan-implementation
3
3
  description: Creates an implementation plan from a feature spec. Phase 2 of the 5-phase workflow.
4
+ agent: implementation-planner
4
5
  allowed-tools: Read, Write, Task, AskUserQuestion
5
6
  context: fork
6
7
  user-invocable: true
7
8
  ---
8
9
 
9
- <role>
10
- You are an Implementation Planner. You create implementation plans.
11
- You do NOT implement. You write NO code.
12
- You spawn ONLY Explore agents (subagent_type=Explore).
13
- You write ONLY to .5/features/{name}/plan.md.
14
- After creating the plan, you are DONE.
15
- </role>
16
-
17
10
  # Plan Implementation (Phase 2)
18
11
 
19
12
  ## Example Workflow
@@ -156,45 +149,33 @@ Not every feature needs all steps. Use what makes sense.
156
149
 
157
150
  ### Step 5: Write the Plan
158
151
 
159
- Create a single file at `.5/features/{feature-name}/plan.md`:
160
-
161
- ```markdown
162
- ---
163
- ticket: {TICKET-ID}
164
- feature: {feature-name}
165
- created: {ISO-timestamp}
166
- ---
167
-
168
- # Implementation Plan: {TICKET-ID}
169
-
170
- {One sentence summary}
171
-
172
- ## Components
173
-
174
- | Step | Component | Action | File | Description | Complexity |
175
- |------|-----------|--------|------|-------------|------------|
176
- | 1 | {name} | create | {path} | {what it does} | simple |
177
- | 2 | {name} | modify | {path} | {what to change} | moderate |
152
+ Create a single file at `.5/features/{feature-name}/plan.md`.
178
153
 
179
- ## Implementation Notes
180
-
181
- - Follow pattern from {existing-file} for {component-type}
182
- - {Key business rule}
183
- - {Integration point}
154
+ Follow the `<output-format>`, `<write-rules>`, and `<plans-are-prompts>` defined in your agent file.
184
155
 
185
- ## Complexity Guide
156
+ Include:
157
+ - YAML frontmatter (ticket, feature, created)
158
+ - One-sentence summary
159
+ - Components table
160
+ - Implementation Notes (references to existing pattern files + business rules)
161
+ - Complexity Guide
162
+ - Verification commands
186
163
 
187
- **simple** -> haiku: Pattern-following, type defs, simple CRUD
188
- **moderate** -> haiku/sonnet: Services with logic, multi-pattern files, modifications
189
- **complex** -> sonnet: Integration points, complex rules, significant refactoring
164
+ ### Step 5b: Plan Self-Check
190
165
 
191
- ## Verification
166
+ Follow the `<self-check>` defined in your agent file.
192
167
 
193
- - Build: {command or "auto"}
194
- - Test: {command or "auto"}
168
+ Output the verification result:
169
+ ```
170
+ Plan self-check:
171
+ - Format: pass/fail
172
+ - No code: pass/fail
173
+ - Scope: pass/fail
174
+ - Completeness: pass/fail
175
+ - Description length: pass/fail
195
176
  ```
196
177
 
197
- **Key principle:** The plan describes WHAT to build, not HOW. Agents figure out patterns by reading existing code.
178
+ If any check fails, fix plan.md before proceeding to the completion output.
198
179
 
199
180
  ## PLANNING COMPLETE
200
181
 
@@ -39,35 +39,27 @@ async function checkForUpdates(workspaceDir) {
39
39
  process.exit(0);
40
40
  }
41
41
 
42
- // Check if we should run (daily frequency)
43
- const now = Date.now();
44
- const lastCheck = versionData.updateCheckLastRun
45
- ? new Date(versionData.updateCheckLastRun).getTime()
46
- : 0;
47
- const frequency = (versionData.updateCheckFrequency || 86400) * 1000; // Convert to ms
48
-
49
- if (now - lastCheck < frequency) {
50
- // Checked recently, skip
51
- process.exit(0);
52
- }
53
-
54
- // Update last check time
55
- versionData.updateCheckLastRun = new Date().toISOString();
56
-
57
42
  // Compare versions
58
43
  const installed = versionData.installedVersion;
59
44
  const latestVersion = await getLatestVersion();
60
45
 
46
+ let newLatest = null;
61
47
  if (latestVersion && compareVersions(installed, latestVersion) < 0) {
62
- // Update available — persist for statusline to display
63
- versionData.latestAvailableVersion = latestVersion;
64
- } else {
65
- // No update (or network failure) — clear any stale value
66
- versionData.latestAvailableVersion = null;
48
+ newLatest = latestVersion;
49
+ }
50
+
51
+ // Only write if latestAvailableVersion actually changed
52
+ const oldLatest = versionData.latestAvailableVersion || null;
53
+ if (newLatest !== oldLatest) {
54
+ versionData.latestAvailableVersion = newLatest;
55
+
56
+ // Clean up legacy throttling fields
57
+ delete versionData.updateCheckLastRun;
58
+ delete versionData.updateCheckFrequency;
59
+
60
+ fs.writeFileSync(versionFile, JSON.stringify(versionData, null, 2));
67
61
  }
68
62
 
69
- // Single consolidated write
70
- fs.writeFileSync(versionFile, JSON.stringify(versionData, null, 2));
71
63
  process.exit(0);
72
64
  }
73
65
 
@@ -44,11 +44,16 @@ process.stdin.on('end', () => {
44
44
  if (toolName === 'Task') {
45
45
  const agentType = toolInput.subagent_type || '';
46
46
  if (agentType && agentType !== 'Explore') {
47
+ const blockCount = incrementBlockCount(workspaceDir);
48
+ const escalation = blockCount >= 3
49
+ ? ` WARNING: Block #${blockCount}. You are repeatedly attempting actions outside your planning role. STOP. Complete your planning artifact and output the completion message.`
50
+ : '';
47
51
  process.stderr.write(
48
52
  `BLOCKED: Only Explore agents are allowed during planning phases. ` +
49
53
  `Attempted: subagent_type="${agentType}". ` +
50
- `To use other agent types, start implementation with /5:implement-feature. ` +
51
- `If you're not in a planning phase, run /5:unlock to clear the planning lock.`
54
+ `REDIRECT: Return to your planning process. ` +
55
+ `If you need codebase information, use subagent_type=Explore. ` +
56
+ `If you are done planning, output the completion message and STOP.${escalation}`
52
57
  );
53
58
  process.exit(2);
54
59
  }
@@ -57,12 +62,19 @@ process.stdin.on('end', () => {
57
62
  if (toolName === 'Write' || toolName === 'Edit') {
58
63
  const filePath = toolInput.file_path || '';
59
64
  if (filePath && !isInsideDotFive(filePath, workspaceDir)) {
65
+ const blockCount = incrementBlockCount(workspaceDir);
66
+ const isSourceFile = !filePath.includes('.5/') && !filePath.includes('.claude/');
67
+ const escalation = blockCount >= 3
68
+ ? ` WARNING: Block #${blockCount}. Repeated violations. Complete your planning artifact and STOP.`
69
+ : '';
70
+ const redirectMsg = isSourceFile
71
+ ? `REDIRECT: You are in a planning phase. You may ONLY write to .5/features/. ` +
72
+ `Source file creation happens in Phase 3 (/5:implement-feature).`
73
+ : `REDIRECT: The path "${filePath}" is outside the allowed .5/ directory. ` +
74
+ `Check your file path — you should be writing to .5/features/{name}/.`;
60
75
  process.stderr.write(
61
76
  `BLOCKED: ${toolName} outside .5/ is not allowed during planning phases. ` +
62
- `Attempted: "${filePath}". ` +
63
- `Planning commands may only write to .5/features/. ` +
64
- `To modify source files, start implementation with /5:implement-feature. ` +
65
- `If you're not in a planning phase, run /5:unlock to clear the planning lock.`
77
+ `Attempted: "${filePath}". ${redirectMsg}${escalation}`
66
78
  );
67
79
  process.exit(2);
68
80
  }
@@ -141,6 +153,18 @@ function isPlanningActive(workspaceDir) {
141
153
  }
142
154
  }
143
155
 
156
+ function incrementBlockCount(workspaceDir) {
157
+ const markerPath = path.join(workspaceDir, '.5', '.planning-active');
158
+ try {
159
+ const marker = JSON.parse(fs.readFileSync(markerPath, 'utf8'));
160
+ marker.blockCount = (marker.blockCount || 0) + 1;
161
+ fs.writeFileSync(markerPath, JSON.stringify(marker, null, 2));
162
+ return marker.blockCount;
163
+ } catch (e) {
164
+ return 1;
165
+ }
166
+ }
167
+
144
168
  function isFeatureInImplementationMode(workspaceDir, featureName) {
145
169
  // Check if this specific feature has a state.json (created in Phase 3)
146
170
  const stateFile = path.join(
@@ -1,3 +1,11 @@
1
+ <!-- TEMPLATE RULES:
2
+ - Requirements use natural language, not code
3
+ - Affected Components lists module/domain names, not file paths
4
+ - Entity definitions describe data concepts, not schemas or interfaces
5
+ - Acceptance criteria describe observable behavior, not test assertions
6
+ - NO code, pseudo-code, or implementation details anywhere in this document
7
+ -->
8
+
1
9
  # Feature: {TICKET-ID} - {Title}
2
10
 
3
11
  ## Ticket ID
@@ -35,6 +43,7 @@
35
43
  ## Entity/Component Definitions
36
44
 
37
45
  ### {EntityName} (if applicable)
46
+ <!-- Describe the data CONCEPT, not the implementation. No TypeScript, no SQL. -->
38
47
  | Field | Type | Required | Description |
39
48
  |-------|------|----------|-------------|
40
49
  | id | {Entity}Id | Yes | Unique identifier |
@@ -4,6 +4,13 @@ feature: {feature-name}
4
4
  created: {ISO-timestamp}
5
5
  ---
6
6
 
7
+ <!-- PLAN RULES:
8
+ - This file is interpolated into agent prompts. Write it as instructions, not documentation.
9
+ - Description column: one action-oriented sentence per component
10
+ - Implementation Notes: reference existing files as patterns, no code snippets
11
+ - Components table must cover all functional requirements from feature.md
12
+ -->
13
+
7
14
  # Implementation Plan: {TICKET-ID}
8
15
 
9
16
  {One sentence summary of what this plan builds}