@leeovery/claude-technical-workflows 2.1.7 → 2.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -265,14 +265,6 @@ agents/
265
265
  ├── planning-task-author.md # Write full task detail
266
266
  └── planning-dependency-grapher.md # Analyze task dependencies and priorities
267
267
 
268
- scripts/ # Helper scripts for skills
269
- ├── migrate.sh # Migration orchestrator
270
- ├── discovery-for-discussion.sh # Discovery for discussion skill
271
- ├── discovery-for-specification.sh # Discovery for specification skill
272
- ├── discovery-for-planning.sh # Discovery for planning skill
273
- ├── discovery-for-implementation-and-review.sh # Discovery for impl/review
274
- └── migrations/ # Individual migration scripts (numbered)
275
-
276
268
  tests/
277
269
  └── scripts/ # Shell script tests for discovery and migrations
278
270
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leeovery/claude-technical-workflows",
3
- "version": "2.1.7",
3
+ "version": "2.1.9",
4
4
  "description": "Technical workflow skills & commands for Claude Code",
5
5
  "license": "MIT",
6
6
  "author": "Lee Overy <me@leeovery.com>",
@@ -12,7 +12,7 @@
12
12
  "scripts": {
13
13
  "postinstall": "claude-manager add",
14
14
  "preuninstall": "npx --yes --package=@leeovery/claude-manager claude-manager remove",
15
- "test:scripts:discovery": "bash tests/scripts/test-discovery-for-discussion.sh && bash tests/scripts/test-discovery-for-specification.sh && bash tests/scripts/test-discovery-for-planning.sh && bash tests/scripts/test-discovery-for-implementation-and-review.sh",
15
+ "test:scripts:discovery": "bash tests/scripts/test-discovery-for-discussion.sh && bash tests/scripts/test-discovery-for-specification.sh && bash tests/scripts/test-discovery-for-planning.sh && bash tests/scripts/test-discovery-for-implementation.sh && bash tests/scripts/test-discovery-for-review.sh",
16
16
  "test:scripts:migration": "bash tests/scripts/test-migration-001.sh && bash tests/scripts/test-migration-002.sh && bash tests/scripts/test-migration-003.sh"
17
17
  },
18
18
  "dependencies": {
@@ -22,7 +22,6 @@
22
22
  "skills",
23
23
  "commands",
24
24
  "agents",
25
- "hooks",
26
- "scripts"
25
+ "hooks"
27
26
  ]
28
27
  }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: migrate
3
3
  description: "Run migrations to keep workflow files in sync with the current system design. This skill is mandatory before running any workflow skill."
4
- allowed-tools: Bash(../../scripts/migrate.sh)
4
+ allowed-tools: Bash(./scripts/migrate.sh)
5
5
  ---
6
6
 
7
7
  # Migrate
@@ -13,7 +13,7 @@ Keeps your workflow files up to date with how the system is designed to work. Ru
13
13
  Run the migration script:
14
14
 
15
15
  ```bash
16
- ../../scripts/migrate.sh
16
+ ./scripts/migrate.sh
17
17
  ```
18
18
 
19
19
  ### If files were updated
@@ -2,7 +2,7 @@
2
2
  name: start-discussion
3
3
  description: "Start a technical discussion. Discovers research and existing discussions, offers multiple entry paths, and invokes the technical-discussion skill."
4
4
  disable-model-invocation: true
5
- allowed-tools: Bash(../../scripts/discovery-for-discussion.sh), Bash(mkdir -p docs/workflow/.cache), Bash(rm docs/workflow/.cache/research-analysis.md)
5
+ allowed-tools: Bash(.claude/skills/start-discussion/scripts/discovery.sh), Bash(./scripts/discovery.sh), Bash(mkdir -p docs/workflow/.cache), Bash(rm docs/workflow/.cache/research-analysis.md)
6
6
  ---
7
7
 
8
8
  Invoke the **technical-discussion** skill for this conversation.
@@ -50,15 +50,19 @@ Invoke the `/migrate` skill and assess its output.
50
50
 
51
51
  ---
52
52
 
53
- ## Step 1: Run Discovery Script
53
+ ## Step 1: Discovery State
54
54
 
55
- Run the discovery script to gather current state:
55
+ !`.claude/skills/start-discussion/scripts/discovery.sh`
56
+
57
+ If the above shows a script invocation rather than YAML output, the dynamic content preprocessor did not run. Execute the script before continuing:
56
58
 
57
59
  ```bash
58
- ../../scripts/discovery-for-discussion.sh
60
+ ./scripts/discovery.sh
59
61
  ```
60
62
 
61
- This outputs structured YAML. Parse it to understand:
63
+ If YAML content is already displayed, it has been run on your behalf.
64
+
65
+ Parse the discovery output to understand:
62
66
 
63
67
  **From `research` section:**
64
68
  - `exists` - whether research files exist
@@ -2,7 +2,7 @@
2
2
  name: start-implementation
3
3
  description: "Start an implementation session from an existing plan. Discovers available plans, checks environment setup, and invokes the technical-implementation skill."
4
4
  disable-model-invocation: true
5
- allowed-tools: Bash(../../scripts/discovery-for-implementation-and-review.sh)
5
+ allowed-tools: Bash(.claude/skills/start-implementation/scripts/discovery.sh), Bash(./scripts/discovery.sh)
6
6
  ---
7
7
 
8
8
  Invoke the **technical-implementation** skill for this conversation.
@@ -50,15 +50,19 @@ Invoke the `/migrate` skill and assess its output.
50
50
 
51
51
  ---
52
52
 
53
- ## Step 1: Run Discovery Script
53
+ ## Step 1: Discovery State
54
54
 
55
- Run the discovery script to gather current state:
55
+ !`.claude/skills/start-implementation/scripts/discovery.sh`
56
+
57
+ If the above shows a script invocation rather than YAML output, the dynamic content preprocessor did not run. Execute the script before continuing:
56
58
 
57
59
  ```bash
58
- ../../scripts/discovery-for-implementation-and-review.sh
60
+ ./scripts/discovery.sh
59
61
  ```
60
62
 
61
- This outputs structured YAML. Parse it to understand:
63
+ If YAML content is already displayed, it has been run on your behalf.
64
+
65
+ Parse the discovery output to understand:
62
66
 
63
67
  **From `plans` section:**
64
68
  - `exists` - whether any plans exist
@@ -1,8 +1,8 @@
1
1
  #!/bin/bash
2
2
  #
3
- # Discovers the current state of plans for /start-implementation and /start-review commands.
3
+ # Discovers the current state of plans for /start-implementation command.
4
4
  #
5
- # Outputs structured YAML that the commands can consume directly.
5
+ # Outputs structured YAML that the command can consume directly.
6
6
  #
7
7
 
8
8
  set -eo pipefail
@@ -2,7 +2,7 @@
2
2
  name: start-planning
3
3
  description: "Start a planning session from an existing specification. Discovers available specifications, gathers context, and invokes the technical-planning skill."
4
4
  disable-model-invocation: true
5
- allowed-tools: Bash(../../scripts/discovery-for-planning.sh)
5
+ allowed-tools: Bash(.claude/skills/start-planning/scripts/discovery.sh), Bash(./scripts/discovery.sh)
6
6
  ---
7
7
 
8
8
  Invoke the **technical-planning** skill for this conversation.
@@ -50,15 +50,19 @@ Invoke the `/migrate` skill and assess its output.
50
50
 
51
51
  ---
52
52
 
53
- ## Step 1: Run Discovery Script
53
+ ## Step 1: Discovery State
54
54
 
55
- Run the discovery script to gather current state:
55
+ !`.claude/skills/start-planning/scripts/discovery.sh`
56
+
57
+ If the above shows a script invocation rather than YAML output, the dynamic content preprocessor did not run. Execute the script before continuing:
56
58
 
57
59
  ```bash
58
- ../../scripts/discovery-for-planning.sh
60
+ ./scripts/discovery.sh
59
61
  ```
60
62
 
61
- This outputs structured YAML. Parse it to understand:
63
+ If YAML content is already displayed, it has been run on your behalf.
64
+
65
+ Parse the discovery output to understand:
62
66
 
63
67
  **From `specifications` section:**
64
68
  - `exists` - whether any specifications exist
@@ -19,7 +19,7 @@ This is **Phase 1** of the six-phase workflow:
19
19
  | 5. Implementation | DOING - tests first, then code | |
20
20
  | 6. Review | VALIDATING - check work against artifacts | |
21
21
 
22
- **Stay in your lane**: Explore freely. This is the time for broad thinking, feasibility checks, and learning. Don't jump to formal discussions or specifications yet.
22
+ **Stay in your lane**: Explore freely. This is the time for broad thinking, feasibility checks, and learning. Surface options and tradeoffs — don't make decisions. When a topic converges toward a conclusion, that's a signal it's ready for discussion phase, not a cue to start deciding. Park it and move on.
23
23
 
24
24
  ---
25
25
 
@@ -2,7 +2,7 @@
2
2
  name: start-review
3
3
  description: "Start a review session from an existing plan and implementation. Discovers available plans, validates implementation exists, and invokes the technical-review skill."
4
4
  disable-model-invocation: true
5
- allowed-tools: Bash(../../scripts/discovery-for-implementation-and-review.sh)
5
+ allowed-tools: Bash(.claude/skills/start-review/scripts/discovery.sh), Bash(./scripts/discovery.sh)
6
6
  ---
7
7
 
8
8
  Invoke the **technical-review** skill for this conversation.
@@ -50,15 +50,19 @@ Invoke the `/migrate` skill and assess its output.
50
50
 
51
51
  ---
52
52
 
53
- ## Step 1: Run Discovery Script
53
+ ## Step 1: Discovery State
54
54
 
55
- Run the discovery script to gather current state:
55
+ !`.claude/skills/start-review/scripts/discovery.sh`
56
+
57
+ If the above shows a script invocation rather than YAML output, the dynamic content preprocessor did not run. Execute the script before continuing:
56
58
 
57
59
  ```bash
58
- ../../scripts/discovery-for-implementation-and-review.sh
60
+ ./scripts/discovery.sh
59
61
  ```
60
62
 
61
- This outputs structured YAML. Parse it to understand:
63
+ If YAML content is already displayed, it has been run on your behalf.
64
+
65
+ Parse the discovery output to understand:
62
66
 
63
67
  **From `plans` section:**
64
68
  - `exists` - whether any plans exist
@@ -0,0 +1,114 @@
1
+ #!/bin/bash
2
+ #
3
+ # Discovers the current state of plans for /start-review command.
4
+ #
5
+ # Outputs structured YAML that the command can consume directly.
6
+ #
7
+
8
+ set -eo pipefail
9
+
10
+ PLAN_DIR="docs/workflow/planning"
11
+ SPEC_DIR="docs/workflow/specification"
12
+
13
+ # Helper: Extract a frontmatter field value from a file
14
+ # Usage: extract_field <file> <field_name>
15
+ extract_field() {
16
+ local file="$1"
17
+ local field="$2"
18
+ local value=""
19
+
20
+ # Extract from YAML frontmatter (file must start with ---)
21
+ if head -1 "$file" 2>/dev/null | grep -q "^---$"; then
22
+ value=$(sed -n '2,/^---$/p' "$file" 2>/dev/null | \
23
+ grep -i -m1 "^${field}:" | \
24
+ sed -E "s/^${field}:[[:space:]]*//i" || true)
25
+ fi
26
+
27
+ echo "$value"
28
+ }
29
+
30
+ # Helper: Extract frontmatter content (between first pair of --- delimiters)
31
+ extract_frontmatter() {
32
+ local file="$1"
33
+ awk 'BEGIN{c=0} /^---$/{c++; if(c==2) exit; next} c==1{print}' "$file" 2>/dev/null
34
+ }
35
+
36
+
37
+ # Start YAML output
38
+ echo "# Review Command State Discovery"
39
+ echo "# Generated: $(date -Iseconds)"
40
+ echo ""
41
+
42
+ #
43
+ # PLANS
44
+ #
45
+ echo "plans:"
46
+
47
+ plan_count=0
48
+
49
+ if [ -d "$PLAN_DIR" ] && [ -n "$(ls -A "$PLAN_DIR" 2>/dev/null)" ]; then
50
+ echo " exists: true"
51
+ echo " files:"
52
+
53
+ for file in "$PLAN_DIR"/*.md; do
54
+ [ -f "$file" ] || continue
55
+
56
+ name=$(basename "$file" .md)
57
+ topic=$(extract_field "$file" "topic")
58
+ topic=${topic:-"$name"}
59
+ status=$(extract_field "$file" "status")
60
+ status=${status:-"unknown"}
61
+ date=$(extract_field "$file" "date")
62
+ date=${date:-"unknown"}
63
+ format=$(extract_field "$file" "format")
64
+ format=${format:-"MISSING"}
65
+ specification=$(extract_field "$file" "specification")
66
+ specification=${specification:-"${name}.md"}
67
+ plan_id=$(extract_field "$file" "plan_id")
68
+
69
+ # Check if linked specification exists
70
+ spec_exists="false"
71
+ spec_file="$SPEC_DIR/$specification"
72
+ if [ -f "$spec_file" ]; then
73
+ spec_exists="true"
74
+ fi
75
+
76
+ echo " - name: \"$name\""
77
+ echo " topic: \"$topic\""
78
+ echo " status: \"$status\""
79
+ echo " date: \"$date\""
80
+ echo " format: \"$format\""
81
+ echo " specification: \"$specification\""
82
+ echo " specification_exists: $spec_exists"
83
+ if [ -n "$plan_id" ]; then
84
+ echo " plan_id: \"$plan_id\""
85
+ fi
86
+
87
+ plan_count=$((plan_count + 1))
88
+ done
89
+
90
+ echo " count: $plan_count"
91
+ else
92
+ echo " exists: false"
93
+ echo " files: []"
94
+ echo " count: 0"
95
+ fi
96
+
97
+ echo ""
98
+
99
+ #
100
+ # WORKFLOW STATE SUMMARY
101
+ #
102
+ echo "state:"
103
+
104
+ echo " has_plans: $([ "$plan_count" -gt 0 ] && echo "true" || echo "false")"
105
+ echo " plan_count: $plan_count"
106
+
107
+ # Determine workflow state for routing
108
+ if [ "$plan_count" -eq 0 ]; then
109
+ echo " scenario: \"no_plans\""
110
+ elif [ "$plan_count" -eq 1 ]; then
111
+ echo " scenario: \"single_plan\""
112
+ else
113
+ echo " scenario: \"multiple_plans\""
114
+ fi
@@ -2,7 +2,7 @@
2
2
  name: start-specification
3
3
  description: "Start a specification session from existing discussions. Discovers available discussions, offers consolidation assessment for multiple discussions, and invokes the technical-specification skill."
4
4
  disable-model-invocation: true
5
- allowed-tools: Bash(../../scripts/discovery-for-specification.sh), Bash(mkdir -p docs/workflow/.cache), Bash(rm docs/workflow/.cache/discussion-consolidation-analysis.md)
5
+ allowed-tools: Bash(.claude/skills/start-specification/scripts/discovery.sh), Bash(./scripts/discovery.sh), Bash(mkdir -p docs/workflow/.cache), Bash(rm docs/workflow/.cache/discussion-consolidation-analysis.md)
6
6
  ---
7
7
 
8
8
  Invoke the **technical-specification** skill for this conversation.
@@ -50,15 +50,19 @@ Invoke the `/migrate` skill and assess its output.
50
50
 
51
51
  ---
52
52
 
53
- ## Step 1: Run Discovery Script
53
+ ## Step 1: Discovery State
54
54
 
55
- Run the discovery script to gather current state:
55
+ !`.claude/skills/start-specification/scripts/discovery.sh`
56
+
57
+ If the above shows a script invocation rather than YAML output, the dynamic content preprocessor did not run. Execute the script before continuing:
56
58
 
57
59
  ```bash
58
- ../../scripts/discovery-for-specification.sh
60
+ ./scripts/discovery.sh
59
61
  ```
60
62
 
61
- This outputs structured YAML. Parse it to understand:
63
+ If YAML content is already displayed, it has been run on your behalf.
64
+
65
+ Parse the discovery output to understand:
62
66
 
63
67
  **From `discussions` array:**
64
68
  - Each discussion's name, status, and whether it has an individual specification
@@ -65,6 +65,57 @@ Don't constrain yourself. Research goes wherever it needs to go.
65
65
 
66
66
  **Be honest**: If something seems flawed or risky, say so. Challenge assumptions.
67
67
 
68
+ **Explore, don't decide**: Your job is to surface options, tradeoffs, and understanding — not to pick winners. Synthesis is welcome ("the tradeoffs are X, Y, Z"), conclusions are not ("therefore we should do Y"). Decisions belong in the discussion phase.
69
+
70
+ ## Convergence Awareness
71
+
72
+ Research threads naturally converge. As you explore a topic, options narrow, tradeoffs clarify, and opinions start forming. This is healthy — but it's also a signal.
73
+
74
+ ### Recognizing convergence
75
+
76
+ Watch for these signs that a thread is moving from exploration toward decision-making:
77
+
78
+ - "We should..." or "The best approach is..." language (from you or the user)
79
+ - Options narrowing to a clear frontrunner with well-understood tradeoffs
80
+ - The same conclusion being reached from multiple angles
81
+ - Discussion shifting from "what are the options?" to "which option?"
82
+ - You or the user starting to advocate for a particular approach
83
+
84
+ ### What to do
85
+
86
+ When you notice convergence, **flag it and give the user options**:
87
+
88
+ > "This thread seems to be converging — we've explored {topic} enough that the tradeoffs are clear and it's approaching decision territory.
89
+ >
90
+ > - **`p`/`park`** — Mark as discussion-ready and move to another topic
91
+ > - **`k`/`keep`** — Keep digging, there's more to understand
92
+ > - **`s`/`something else`** — Your call"
93
+
94
+ **Never decide for the user.** Even if the answer seems obvious, flag it and ask.
95
+
96
+ ### If the user parks it
97
+
98
+ Document the convergence point in the research file using this marker:
99
+
100
+ ```markdown
101
+ > **Discussion-ready**: {Brief summary of what was explored and why it's ready for decision-making. Key tradeoffs or options identified.}
102
+ ```
103
+
104
+ Then continue with whatever's next — another topic, a different angle, or wrapping up the session.
105
+
106
+ ### If the user keeps digging
107
+
108
+ Continue exploring. The convergence signal isn't a stop sign — it's an awareness check. The user might want to stress-test the emerging conclusion, explore edge cases, or understand the problem more deeply before moving on. That's valid research work.
109
+
110
+ ### Synthesis vs decision
111
+
112
+ This distinction matters:
113
+
114
+ - **Synthesis** (research): "There are three viable approaches. A is simplest but limited. B scales better but costs more. C is future-proof but complex."
115
+ - **Decision** (discussion): "We should go with B because scaling matters more than simplicity for this project."
116
+
117
+ Synthesis is your job. Decisions are not. Present the landscape, don't pick the destination.
118
+
68
119
  ## Questioning
69
120
 
70
121
  For structured questioning, use the interview reference (`references/interview.md`). Good research questions:
File without changes