@leeovery/claude-technical-workflows 2.0.49 → 2.0.51

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.
@@ -60,18 +60,20 @@ This outputs structured YAML. Parse it to understand:
60
60
 
61
61
  **From `specifications` section:**
62
62
  - `exists` - whether any specifications exist
63
- - `feature` - list of feature specs (name, status, has_plan)
63
+ - `feature` - list of feature specs (name, status, has_plan, plan_status)
64
64
  - `crosscutting` - list of cross-cutting specs (name, status)
65
65
  - `counts.feature` - total feature specifications
66
66
  - `counts.feature_ready` - feature specs ready for planning (concluded + no plan)
67
+ - `counts.feature_with_plan` - feature specs that already have plans
67
68
  - `counts.crosscutting` - total cross-cutting specifications
68
69
 
69
70
  **From `plans` section:**
70
71
  - `exists` - whether any plans exist
71
72
  - `files` - each plan's name, format, status, and plan_id (if present)
73
+ - `common_format` - the output format if all existing plans share the same one; empty string otherwise
72
74
 
73
75
  **From `state` section:**
74
- - `scenario` - one of: `"no_specs"`, `"no_ready_specs"`, `"single_ready_spec"`, `"multiple_ready_specs"`
76
+ - `scenario` - one of: `"no_specs"`, `"nothing_actionable"`, `"has_options"`
75
77
 
76
78
  **IMPORTANT**: Use ONLY this script for discovery. Do NOT run additional bash commands (ls, head, cat, etc.) to gather state - the script provides everything needed.
77
79
 
@@ -95,18 +97,20 @@ The planning phase requires a concluded specification. Please run /start-specifi
95
97
 
96
98
  **STOP.** Wait for user to acknowledge before ending.
97
99
 
98
- #### If scenario is "no_ready_specs"
100
+ #### If scenario is "nothing_actionable"
99
101
 
100
- Specifications exist but none are ready for planning (either still in-progress, or already have plans).
102
+ Specifications exist but none are actionable all are still in-progress and no plans exist to continue.
101
103
 
102
104
  → Proceed to **Step 3** to show the state.
103
105
 
104
- #### If scenario is "single_ready_spec" or "multiple_ready_specs"
106
+ #### If scenario is "has_options"
105
107
 
106
- Specifications are ready for planning.
108
+ At least one specification is ready for planning, or an existing plan can be continued or reviewed.
107
109
 
108
110
  → Proceed to **Step 3** to present options.
109
111
 
112
+ ---
113
+
110
114
  ## Step 3: Present Workflow State and Options
111
115
 
112
116
  Present everything discovered to help the user make an informed choice.
@@ -114,47 +118,55 @@ Present everything discovered to help the user make an informed choice.
114
118
  **Present the full state:**
115
119
 
116
120
  ```
117
- Workflow Status: Planning Phase
118
-
119
- Feature specifications:
120
- 1. · {topic-1} (in-progress) - not ready
121
- 2. ✓ {topic-2} (concluded) - ready for planning
122
- 3. - {topic-3} (concluded) → plan exists
121
+ Planning Phase
123
122
 
124
- Cross-cutting specifications (reference context):
125
- - {caching-strategy} (concluded)
126
- - {rate-limiting} (concluded)
123
+ Available:
124
+ 1. + {topic-2} - create new plan
125
+ 2. {topic-3} - continue in-progress plan
126
+ 3. > {topic-4} - review concluded plan
127
127
 
128
- Existing plans:
129
- - {topic-3}.md (in-progress, {format})
128
+ Not plannable specifications:
129
+ · {topic-1} [feature, in-progress]
130
+ · {caching-strategy} [cross-cutting, concluded]
131
+ · {rate-limiting} [cross-cutting, in-progress]
130
132
  ```
131
133
 
132
- **Legend:**
133
- - `·` = not ready for planning (still in-progress)
134
- - `✓` = ready for planning (concluded, no plan yet)
135
- - `-` = already has a plan
134
+ **Formatting rules:**
135
+
136
+ Available (numbered, selectable):
137
+ - **`+`** concluded spec with no plan yet
138
+ - **`▶`** — has a plan with `plan_status: planning`
139
+ - **`>`** — has a plan with `plan_status: concluded`
140
+
141
+ Not plannable specifications (no number, not selectable — `[type, status]` format):
142
+ - **`·`** — feature specs still in-progress, or cross-cutting specifications
143
+ - Feature specs: `[feature, in-progress]`
144
+ - Cross-cutting specs: `[cross-cutting, {status}]`
136
145
 
137
- **Then present options based on what's ready:**
146
+ Omit either section entirely if it has no entries.
138
147
 
139
- **If multiple specs ready for planning:**
148
+ **Then prompt based on what's actionable:**
149
+
150
+ **If multiple actionable items:**
140
151
  ```
141
- Which specification would you like to plan? (Enter a number or name)
152
+ Select a specification (enter number):
142
153
  ```
143
154
 
144
155
  **STOP.** Wait for user response.
145
156
 
146
- **If single spec ready for planning (auto-select):**
157
+ **If single actionable item (auto-select):**
147
158
  ```
148
- Auto-selecting: {topic} (only ready specification)
159
+ Auto-selecting: {topic} (only actionable specification)
149
160
  ```
161
+
150
162
  → Proceed directly to **Step 4**.
151
163
 
152
- **If no specs ready for planning:**
164
+ **If nothing actionable:**
153
165
  ```
154
- No specifications ready for planning.
166
+ No plannable specifications.
155
167
 
156
168
  To proceed:
157
- - Complete any "in-progress" specifications with /start-specification
169
+ - Complete any in-progress specifications with /start-specification
158
170
  - Or create a new specification first
159
171
  ```
160
172
 
@@ -164,7 +176,23 @@ To proceed:
164
176
 
165
177
  ---
166
178
 
167
- ## Step 4: Gather Additional Context
179
+ ## Step 4: Route by Plan State
180
+
181
+ Check whether the selected specification already has a plan (from `has_plan` in discovery output).
182
+
183
+ #### If no existing plan (fresh start)
184
+
185
+ → Proceed to **Step 5** to gather context before invoking the skill.
186
+
187
+ #### If existing plan (continue or review)
188
+
189
+ The plan already has its context from when it was created. Skip context gathering.
190
+
191
+ → Go directly to **Step 7** to invoke the skill.
192
+
193
+ ---
194
+
195
+ ## Step 5: Gather Additional Context
168
196
 
169
197
  Ask:
170
198
  - Any additional context or priorities to consider?
@@ -172,46 +200,72 @@ Ask:
172
200
 
173
201
  **STOP.** Wait for user response.
174
202
 
175
- → Proceed to **Step 5**.
203
+ → Proceed to **Step 6**.
176
204
 
177
205
  ---
178
206
 
179
- ## Step 5: Surface Cross-Cutting Context
207
+ ## Step 6: Surface Cross-Cutting Context
180
208
 
181
- If any **concluded cross-cutting specifications** exist (from `specifications.crosscutting` in discovery), surface them as reference context for planning:
209
+ **If no cross-cutting specifications exist**: Skip this step. Proceed to **Step 7**.
182
210
 
183
- 1. **List applicable cross-cutting specs**:
184
- - Read each cross-cutting specification
185
- - Identify which ones are relevant to the feature being planned
186
- - Relevance is determined by topic overlap (e.g., caching strategy applies if the feature involves data retrieval or API calls)
211
+ Read each cross-cutting specification from `specifications.crosscutting` in the discovery output.
187
212
 
188
- 2. **Summarize for handoff**:
189
- ```
190
- Cross-cutting specifications to reference:
191
- - caching-strategy.md: [brief summary of key decisions]
192
- - rate-limiting.md: [brief summary of key decisions]
193
- ```
213
+ ### 6a: Warn about in-progress cross-cutting specs
194
214
 
195
- These specifications contain validated architectural decisions that should inform the plan. The planning skill will incorporate these as a "Cross-Cutting References" section in the plan.
215
+ If any **in-progress** cross-cutting specifications exist, check whether they could be relevant to the feature being planned (by topic overlap e.g., a caching strategy is relevant if the feature involves data retrieval or API calls).
196
216
 
197
- **If no cross-cutting specifications exist**: Skip this step.
217
+ If any are relevant:
198
218
 
199
- → Proceed to **Step 6**.
219
+ ```
220
+ Note: The following cross-cutting specifications are still in-progress:
221
+ · {rate-limiting} - in-progress
222
+
223
+ These may contain architectural decisions relevant to this plan. You can:
224
+ - Continue planning without them
225
+ - Stop and complete them first (/start-specification)
226
+ ```
227
+
228
+ **STOP.** Wait for user response.
229
+
230
+ If the user chooses to stop, end here. If they choose to continue, proceed.
231
+
232
+ ### 6b: Summarize concluded cross-cutting specs
233
+
234
+ If any **concluded** cross-cutting specifications exist, identify which are relevant to the feature being planned and summarize for handoff:
235
+
236
+ ```
237
+ Cross-cutting specifications to reference:
238
+ - caching-strategy.md: [brief summary of key decisions]
239
+ ```
240
+
241
+ These specifications contain validated architectural decisions that should inform the plan. The planning skill will incorporate these as a "Cross-Cutting References" section in the plan.
242
+
243
+ → Proceed to **Step 7**.
200
244
 
201
245
  ---
202
246
 
203
- ## Step 6: Invoke the Skill
247
+ ## Step 7: Invoke the Skill
204
248
 
205
249
  After completing the steps above, this command's purpose is fulfilled.
206
250
 
207
251
  Invoke the [technical-planning](../../skills/technical-planning/SKILL.md) skill for your next instructions. Do not act on the gathered information until the skill is loaded - it contains the instructions for how to proceed.
208
252
 
209
- **Example handoff:**
253
+ **Example handoff (fresh plan):**
210
254
  ```
211
255
  Planning session for: {topic}
212
256
  Specification: docs/workflow/specification/{topic}.md
213
- Additional context: {summary of user's answers from Step 4}
257
+ Additional context: {summary of user's answers from Step 5}
214
258
  Cross-cutting references: {list of applicable cross-cutting specs with brief summaries, or "none"}
259
+ Recommended output format: {common_format from discovery if non-empty, otherwise "none"}
260
+
261
+ Invoke the technical-planning skill.
262
+ ```
263
+
264
+ **Example handoff (continue/review existing plan):**
265
+ ```
266
+ Planning session for: {topic}
267
+ Specification: docs/workflow/specification/{topic}.md
268
+ Existing plan: docs/workflow/planning/{topic}.md
215
269
 
216
270
  Invoke the technical-planning skill.
217
271
  ```
@@ -120,25 +120,31 @@ At least one concluded discussion exists.
120
120
  Show the current state clearly. Use this EXACT format:
121
121
 
122
122
  ```
123
- Workflow Status: Specification Phase
123
+ Specification Phase
124
124
 
125
- Discussions:
126
- {topic-1} - concluded - ready
127
- {topic-2} - concluded - ready
128
- {topic-3} - concluded - spec: {spec_status}
129
- · {topic-4} - in-progress - not ready
125
+ Available discussions:
126
+ + {topic-1} - create new spec
127
+ + {topic-2} - create new spec
128
+ {topic-3} - continue in-progress spec
129
+ > {topic-4} - review concluded spec
130
130
 
131
- Specifications:
132
- {spec-1} (active) - sources: {topic-1}
133
- • {spec-2} (superseded → {other-spec}) - sources: {topic-x}
131
+ Not specifiable discussions:
132
+ · {topic-5} [in-progress]
133
+
134
+ Existing specifications:
135
+ • {spec-1} [active] - sources: {topic-1}
136
+ • {spec-2} [superseded → {other-spec}] - sources: {topic-x}
134
137
 
135
138
  {N} concluded discussions available.
136
139
  ```
137
140
 
138
141
  **Legend:**
139
- - `✓` = concluded, no spec yet (ready to specify)
140
- - `○` = concluded, has individual spec (shows spec status: in-progress or concluded)
141
- - `·` = in-progress (not ready)
142
+ - `+` = concluded, no spec yet (create new)
143
+ - `▶` = concluded, has in-progress spec (continue)
144
+ - `>` = concluded, has concluded spec (review)
145
+ - `·` = in-progress (not specifiable)
146
+
147
+ Omit either discussions section if it has no entries.
142
148
 
143
149
  #### Routing Based on State
144
150
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leeovery/claude-technical-workflows",
3
- "version": "2.0.49",
3
+ "version": "2.0.51",
4
4
  "description": "Technical workflow skills & commands for Claude Code",
5
5
  "license": "MIT",
6
6
  "author": "Lee Overy <me@leeovery.com>",
@@ -40,6 +40,7 @@ echo "specifications:"
40
40
 
41
41
  feature_count=0
42
42
  feature_ready_count=0
43
+ feature_with_plan_count=0
43
44
  crosscutting_count=0
44
45
 
45
46
  if [ -d "$SPEC_DIR" ] && [ -n "$(ls -A "$SPEC_DIR" 2>/dev/null)" ]; then
@@ -59,21 +60,30 @@ if [ -d "$SPEC_DIR" ] && [ -n "$(ls -A "$SPEC_DIR" 2>/dev/null)" ]; then
59
60
  # Skip cross-cutting specs in this pass
60
61
  [ "$spec_type" = "cross-cutting" ] && continue
61
62
 
62
- # Check if plan exists
63
+ # Check if plan exists and its status
63
64
  has_plan="false"
65
+ plan_status=""
64
66
  if [ -f "$PLAN_DIR/${name}.md" ]; then
65
67
  has_plan="true"
68
+ plan_status=$(extract_field "$PLAN_DIR/${name}.md" "status")
69
+ plan_status=${plan_status:-"unknown"}
66
70
  fi
67
71
 
68
72
  echo " - name: \"$name\""
69
73
  echo " status: \"$status\""
70
74
  echo " has_plan: $has_plan"
75
+ if [ "$has_plan" = "true" ]; then
76
+ echo " plan_status: \"$plan_status\""
77
+ fi
71
78
 
72
79
  feature_count=$((feature_count + 1))
73
80
  # "concluded" specs without plans are ready for planning
74
81
  if [ "$status" = "concluded" ] && [ "$has_plan" = "false" ]; then
75
82
  feature_ready_count=$((feature_ready_count + 1))
76
83
  fi
84
+ if [ "$has_plan" = "true" ]; then
85
+ feature_with_plan_count=$((feature_with_plan_count + 1))
86
+ fi
77
87
  done
78
88
 
79
89
  if [ "$feature_count" -eq 0 ]; then
@@ -109,6 +119,7 @@ if [ -d "$SPEC_DIR" ] && [ -n "$(ls -A "$SPEC_DIR" 2>/dev/null)" ]; then
109
119
  echo " counts:"
110
120
  echo " feature: $feature_count"
111
121
  echo " feature_ready: $feature_ready_count"
122
+ echo " feature_with_plan: $feature_with_plan_count"
112
123
  echo " crosscutting: $crosscutting_count"
113
124
  else
114
125
  echo " exists: false"
@@ -117,6 +128,7 @@ else
117
128
  echo " counts:"
118
129
  echo " feature: 0"
119
130
  echo " feature_ready: 0"
131
+ echo " feature_with_plan: 0"
120
132
  echo " crosscutting: 0"
121
133
  fi
122
134
 
@@ -127,6 +139,9 @@ echo ""
127
139
  #
128
140
  echo "plans:"
129
141
 
142
+ plan_format_seen=""
143
+ plan_format_unanimous="true"
144
+
130
145
  if [ -d "$PLAN_DIR" ] && [ -n "$(ls -A "$PLAN_DIR" 2>/dev/null)" ]; then
131
146
  echo " exists: true"
132
147
  echo " files:"
@@ -137,6 +152,15 @@ if [ -d "$PLAN_DIR" ] && [ -n "$(ls -A "$PLAN_DIR" 2>/dev/null)" ]; then
137
152
  name=$(basename "$file" .md)
138
153
  format=$(extract_field "$file" "format")
139
154
  format=${format:-"MISSING"}
155
+
156
+ if [ "$format" != "MISSING" ]; then
157
+ if [ -z "$plan_format_seen" ]; then
158
+ plan_format_seen="$format"
159
+ elif [ "$plan_format_seen" != "$format" ]; then
160
+ plan_format_unanimous="false"
161
+ fi
162
+ fi
163
+
140
164
  status=$(extract_field "$file" "status")
141
165
  status=${status:-"unknown"}
142
166
  plan_id=$(extract_field "$file" "plan_id")
@@ -148,9 +172,16 @@ if [ -d "$PLAN_DIR" ] && [ -n "$(ls -A "$PLAN_DIR" 2>/dev/null)" ]; then
148
172
  echo " plan_id: \"$plan_id\""
149
173
  fi
150
174
  done
175
+
176
+ if [ "$plan_format_unanimous" = "true" ] && [ -n "$plan_format_seen" ]; then
177
+ echo " common_format: \"$plan_format_seen\""
178
+ else
179
+ echo " common_format: \"\""
180
+ fi
151
181
  else
152
182
  echo " exists: false"
153
183
  echo " files: []"
184
+ echo " common_format: \"\""
154
185
  fi
155
186
 
156
187
  echo ""
@@ -177,10 +208,8 @@ echo " has_plans: $plans_exist"
177
208
  # Determine workflow state for routing
178
209
  if [ "$specs_exist" = "false" ]; then
179
210
  echo " scenario: \"no_specs\""
180
- elif [ "$feature_ready_count" -eq 0 ]; then
181
- echo " scenario: \"no_ready_specs\""
182
- elif [ "$feature_ready_count" -eq 1 ]; then
183
- echo " scenario: \"single_ready_spec\""
211
+ elif [ "$feature_ready_count" -eq 0 ] && [ "$feature_with_plan_count" -eq 0 ]; then
212
+ echo " scenario: \"nothing_actionable\""
184
213
  else
185
- echo " scenario: \"multiple_ready_specs\""
214
+ echo " scenario: \"has_options\""
186
215
  fi
@@ -22,6 +22,7 @@ Either way: Transform specifications into actionable phases, tasks, and acceptan
22
22
  - **Specification content** (required) - The validated decisions and requirements to plan from
23
23
  - **Topic name** (optional) - Will derive from specification if not provided
24
24
  - **Output format preference** (optional) - Will ask if not specified
25
+ - **Recommended output format** (optional) - A format suggestion for consistency with existing plans
25
26
  - **Cross-cutting references** (optional) - Cross-cutting specifications that inform technical decisions in this plan
26
27
 
27
28
  **Before proceeding**, verify the required input is available and unambiguous. If anything is missing or unclear, **STOP** — do not proceed until resolved.
@@ -97,7 +98,21 @@ Read **[output-formats.md](references/output-formats.md)**, find the entry match
97
98
 
98
99
  #### If no Plan Index File exists
99
100
 
100
- First, choose the Output Format. Present the formats from **[output-formats.md](references/output-formats.md)** to the user — including description, pros, cons, and "best for". Number each format and ask the user to pick.
101
+ First, choose the Output Format.
102
+
103
+ **If a recommended output format was provided** (non-empty, not "none"):
104
+
105
+ Present the recommendation:
106
+
107
+ > "Existing plans use **{format}**. Use the same format for consistency?
108
+ > - **yes** — use {format}
109
+ > - **no** — see all available formats"
110
+
111
+ **STOP.** Wait for user choice. If declined, fall through to the full list below.
112
+
113
+ **If no recommendation, or user declined:**
114
+
115
+ Present the formats from **[output-formats.md](references/output-formats.md)** to the user — including description, pros, cons, and "best for". Number each format and ask the user to pick.
101
116
 
102
117
  **STOP.** Wait for the user to choose.
103
118
 
@@ -88,6 +88,17 @@ Present the task list to the user for review.
88
88
 
89
89
  Work through each task in the phase's task table, in order.
90
90
 
91
+ ### Parallel authoring (optional optimization)
92
+
93
+ After the first `pending` task in a phase is approved, you may invoke multiple Step B agents concurrently for tasks you judge to be independent — where the authored detail of one would not inform the other. This is an invocation optimization only; the approval flow is unchanged:
94
+
95
+ - Present tasks one at a time, in order
96
+ - Each task still requires explicit user approval before logging
97
+ - If user feedback on a presented task changes context that could affect any already-authored task waiting to be presented, discard those results and re-invoke Step B
98
+ - When uncertain about independence, default to sequential — it is always safe
99
+
100
+ Never parallelize the first `pending` task in a phase. Never parallelize across phases.
101
+
91
102
  #### If the task status is `authored`
92
103
 
93
104
  Already written. Present a brief summary: