@leeovery/claude-technical-workflows 2.1.39 → 2.1.41
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 +1 -1
- package/agents/implementation-analysis-architecture.md +2 -2
- package/agents/implementation-analysis-duplication.md +2 -2
- package/agents/implementation-analysis-standards.md +2 -2
- package/agents/implementation-analysis-synthesizer.md +3 -3
- package/agents/implementation-analysis-task-writer.md +1 -1
- package/agents/implementation-task-executor.md +3 -0
- package/agents/planning-phase-designer.md +8 -6
- package/agents/planning-task-designer.md +8 -6
- package/agents/review-findings-synthesizer.md +2 -2
- package/agents/review-task-verifier.md +1 -1
- package/hooks/workflows/compact-recovery.sh +1 -1
- package/hooks/workflows/session-cleanup.sh +1 -1
- package/hooks/workflows/session-env.sh +10 -2
- package/hooks/workflows/write-session-state.sh +2 -2
- package/package.json +1 -1
- package/skills/begin-implementation/SKILL.md +5 -5
- package/skills/begin-planning/SKILL.md +2 -1
- package/skills/begin-review/SKILL.md +1 -1
- package/skills/continue-feature/references/detect-phase.md +5 -5
- package/skills/continue-feature/references/invoke-implementation.md +2 -2
- package/skills/continue-feature/references/invoke-planning.md +2 -2
- package/skills/continue-feature/references/invoke-review.md +2 -2
- package/skills/continue-feature/references/invoke-specification.md +3 -3
- package/skills/continue-feature/scripts/discovery.sh +5 -5
- package/skills/link-dependencies/SKILL.md +5 -5
- package/skills/migrate/SKILL.md +1 -1
- package/skills/migrate/scripts/migrate.sh +56 -25
- package/skills/migrate/scripts/migrations/011-rename-workflow-directory.sh +73 -0
- package/skills/migrate/scripts/migrations/012-environment-setup-to-state.sh +23 -0
- package/skills/start-discussion/SKILL.md +2 -2
- package/skills/start-discussion/references/gather-context-research.md +1 -1
- package/skills/start-discussion/references/handle-selection.md +1 -1
- package/skills/start-discussion/references/invoke-skill.md +3 -3
- package/skills/start-discussion/references/research-analysis.md +3 -3
- package/skills/start-discussion/scripts/discovery.sh +3 -3
- package/skills/start-feature/SKILL.md +5 -5
- package/skills/start-feature/references/phase-bridge.md +1 -1
- package/skills/start-implementation/SKILL.md +6 -6
- package/skills/start-implementation/scripts/discovery.sh +4 -4
- package/skills/start-planning/SKILL.md +5 -3
- package/skills/start-planning/references/display-state.md +31 -1
- package/skills/start-planning/references/invoke-skill.md +3 -3
- package/skills/start-planning/scripts/discovery.sh +32 -3
- package/skills/start-research/SKILL.md +1 -1
- package/skills/start-research/references/invoke-skill.md +1 -1
- package/skills/start-review/SKILL.md +1 -1
- package/skills/start-review/references/invoke-skill.md +4 -4
- package/skills/start-review/scripts/discovery.sh +5 -5
- package/skills/start-specification/SKILL.md +1 -1
- package/skills/start-specification/references/analysis-flow.md +2 -2
- package/skills/start-specification/references/confirm-continue.md +3 -3
- package/skills/start-specification/references/confirm-create.md +2 -2
- package/skills/start-specification/references/confirm-refine.md +1 -1
- package/skills/start-specification/references/confirm-unify.md +2 -2
- package/skills/start-specification/references/display-analyze.md +1 -1
- package/skills/start-specification/references/display-groupings.md +3 -3
- package/skills/start-specification/references/display-specs-menu.md +1 -1
- package/skills/start-specification/references/handoffs/continue-concluded.md +4 -4
- package/skills/start-specification/references/handoffs/continue.md +4 -4
- package/skills/start-specification/references/handoffs/create-with-incorporation.md +5 -5
- package/skills/start-specification/references/handoffs/create.md +4 -4
- package/skills/start-specification/references/handoffs/unify-with-incorporation.md +6 -6
- package/skills/start-specification/references/handoffs/unify.md +4 -4
- package/skills/start-specification/scripts/discovery.sh +3 -3
- package/skills/status/SKILL.md +1 -1
- package/skills/status/scripts/discovery.sh +5 -5
- package/skills/technical-discussion/SKILL.md +3 -3
- package/skills/technical-discussion/references/template.md +2 -2
- package/skills/technical-implementation/SKILL.md +11 -10
- package/skills/technical-implementation/references/analysis-loop.md +45 -9
- package/skills/technical-implementation/references/environment-setup.md +3 -3
- package/skills/technical-implementation/references/invoke-task-writer.md +1 -1
- package/skills/technical-implementation/references/task-loop.md +1 -1
- package/skills/technical-planning/SKILL.md +8 -7
- package/skills/technical-planning/references/analyze-task-graph.md +1 -1
- package/skills/technical-planning/references/author-tasks.md +5 -5
- package/skills/technical-planning/references/define-phases.md +5 -2
- package/skills/technical-planning/references/define-tasks.md +6 -3
- package/skills/technical-planning/references/invoke-review-integrity.md +1 -1
- package/skills/technical-planning/references/invoke-review-traceability.md +1 -1
- package/skills/technical-planning/references/output-formats/local-markdown/about.md +2 -2
- package/skills/technical-planning/references/output-formats/local-markdown/authoring.md +2 -2
- package/skills/technical-planning/references/output-formats/local-markdown/reading.md +3 -3
- package/skills/technical-planning/references/output-formats/local-markdown/updating.md +1 -1
- package/skills/technical-planning/references/phase-design/bugfix.md +75 -0
- package/skills/technical-planning/references/phase-design/feature.md +77 -0
- package/skills/technical-planning/references/phase-design/greenfield.md +75 -0
- package/skills/technical-planning/references/phase-design.md +7 -57
- package/skills/technical-planning/references/plan-index-schema.md +3 -1
- package/skills/technical-planning/references/review-integrity.md +1 -1
- package/skills/technical-planning/references/review-traceability.md +1 -1
- package/skills/technical-planning/references/task-design/bugfix.md +65 -0
- package/skills/technical-planning/references/task-design/feature.md +61 -0
- package/skills/technical-planning/references/task-design/greenfield.md +47 -0
- package/skills/technical-planning/references/task-design.md +6 -39
- package/skills/technical-planning/references/verify-source-material.md +2 -2
- package/skills/technical-research/SKILL.md +2 -2
- package/skills/technical-research/references/interview.md +2 -2
- package/skills/technical-review/SKILL.md +1 -1
- package/skills/technical-review/references/invoke-review-synthesizer.md +3 -3
- package/skills/technical-review/references/invoke-review-task-writer.md +2 -2
- package/skills/technical-review/references/invoke-task-verifiers.md +3 -3
- package/skills/technical-review/references/produce-review.md +1 -1
- package/skills/technical-review/references/review-actions-loop.md +7 -5
- package/skills/technical-specification/SKILL.md +5 -5
- package/skills/technical-specification/references/dependencies.md +2 -2
- package/skills/technical-specification/references/review-tracking-format.md +1 -1
- package/skills/technical-specification/references/specification-format.md +1 -1
- package/skills/technical-specification/references/verify-source-material.md +2 -2
- package/skills/view-plan/SKILL.md +2 -2
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# 011-rename-workflow-directory.sh
|
|
4
|
+
#
|
|
5
|
+
# Moves docs/workflow/ → .workflows/ at project root.
|
|
6
|
+
# Workflow artefacts aren't documentation — the dot-prefixed directory
|
|
7
|
+
# better communicates their role as planning artefacts.
|
|
8
|
+
#
|
|
9
|
+
# Steps:
|
|
10
|
+
# 1. Skip if docs/workflow/ doesn't exist (fresh install or already migrated)
|
|
11
|
+
# 2. Create .workflows/ if needed
|
|
12
|
+
# 3. Move all contents preserving structure (including .state/, .cache/)
|
|
13
|
+
# 4. Update .gitignore: docs/workflow/.cache/ → .workflows/.cache/
|
|
14
|
+
# 5. Remove docs/workflow/ and docs/ if empty
|
|
15
|
+
#
|
|
16
|
+
# Idempotent: safe to run multiple times.
|
|
17
|
+
#
|
|
18
|
+
# This script is sourced by migrate.sh and has access to:
|
|
19
|
+
# - report_update "filepath" "description"
|
|
20
|
+
# - report_skip "filepath"
|
|
21
|
+
|
|
22
|
+
OLD_DIR="docs/workflow"
|
|
23
|
+
NEW_DIR=".workflows"
|
|
24
|
+
GITIGNORE=".gitignore"
|
|
25
|
+
OLD_GITIGNORE_ENTRY="docs/workflow/.cache/"
|
|
26
|
+
NEW_GITIGNORE_ENTRY=".workflows/.cache/"
|
|
27
|
+
|
|
28
|
+
# --- Step 1: Skip if nothing to migrate ---
|
|
29
|
+
|
|
30
|
+
if [ ! -d "$OLD_DIR" ]; then
|
|
31
|
+
report_skip "$OLD_DIR (not found)"
|
|
32
|
+
else
|
|
33
|
+
# --- Step 2: Create destination ---
|
|
34
|
+
mkdir -p "$NEW_DIR"
|
|
35
|
+
|
|
36
|
+
# --- Step 3: Move contents ---
|
|
37
|
+
# Use find to get all top-level items (including hidden dirs like .state/, .cache/)
|
|
38
|
+
for item in "$OLD_DIR"/* "$OLD_DIR"/.*; do
|
|
39
|
+
basename_item=$(basename "$item")
|
|
40
|
+
# Skip . and ..
|
|
41
|
+
[ "$basename_item" = "." ] || [ "$basename_item" = ".." ] && continue
|
|
42
|
+
# Skip if glob didn't match anything
|
|
43
|
+
[ ! -e "$item" ] && continue
|
|
44
|
+
|
|
45
|
+
if [ -e "$NEW_DIR/$basename_item" ]; then
|
|
46
|
+
report_skip "$basename_item (already exists at destination)"
|
|
47
|
+
else
|
|
48
|
+
mv "$item" "$NEW_DIR/$basename_item"
|
|
49
|
+
report_update "$NEW_DIR/$basename_item" "moved from $OLD_DIR/"
|
|
50
|
+
fi
|
|
51
|
+
done
|
|
52
|
+
|
|
53
|
+
# --- Step 4: Remove old directory ---
|
|
54
|
+
rmdir "$OLD_DIR" 2>/dev/null && report_update "$OLD_DIR" "removed empty directory" || true
|
|
55
|
+
|
|
56
|
+
# Remove docs/ if empty
|
|
57
|
+
if [ -d "docs" ]; then
|
|
58
|
+
rmdir "docs" 2>/dev/null && report_update "docs" "removed empty directory" || true
|
|
59
|
+
fi
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# --- Step 5: Update .gitignore ---
|
|
63
|
+
|
|
64
|
+
if [ -f "$GITIGNORE" ] && grep -qF "$OLD_GITIGNORE_ENTRY" "$GITIGNORE"; then
|
|
65
|
+
# Replace old entry with new
|
|
66
|
+
awk -v old="$OLD_GITIGNORE_ENTRY" -v new="$NEW_GITIGNORE_ENTRY" '{
|
|
67
|
+
if ($0 == old) print new; else print
|
|
68
|
+
}' "$GITIGNORE" > "${GITIGNORE}.tmp"
|
|
69
|
+
mv "${GITIGNORE}.tmp" "$GITIGNORE"
|
|
70
|
+
report_update "$GITIGNORE" "updated .cache/ path"
|
|
71
|
+
elif [ -f "$GITIGNORE" ] && grep -qxF "$NEW_GITIGNORE_ENTRY" "$GITIGNORE"; then
|
|
72
|
+
report_skip "$GITIGNORE (already has new entry)"
|
|
73
|
+
fi
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# 012-environment-setup-to-state.sh
|
|
4
|
+
#
|
|
5
|
+
# Moves environment-setup.md into .state/ directory.
|
|
6
|
+
# This file is project state, not a workflow artifact.
|
|
7
|
+
#
|
|
8
|
+
# Idempotent: safe to run multiple times.
|
|
9
|
+
#
|
|
10
|
+
# This script is sourced by migrate.sh and has access to:
|
|
11
|
+
# - report_update "filepath" "description"
|
|
12
|
+
# - report_skip "filepath"
|
|
13
|
+
|
|
14
|
+
OLD_FILE=".workflows/environment-setup.md"
|
|
15
|
+
NEW_FILE=".workflows/.state/environment-setup.md"
|
|
16
|
+
|
|
17
|
+
if [ -f "$OLD_FILE" ]; then
|
|
18
|
+
mkdir -p "$(dirname "$NEW_FILE")"
|
|
19
|
+
mv "$OLD_FILE" "$NEW_FILE"
|
|
20
|
+
report_update "$NEW_FILE" "moved from workflows root"
|
|
21
|
+
elif [ -f "$NEW_FILE" ]; then
|
|
22
|
+
report_skip "$NEW_FILE (already in .state/)"
|
|
23
|
+
fi
|
|
@@ -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(.claude/skills/start-discussion/scripts/discovery.sh), Bash(mkdir -p
|
|
5
|
+
allowed-tools: Bash(.claude/skills/start-discussion/scripts/discovery.sh), Bash(mkdir -p .workflows/.state), Bash(rm .workflows/.state/research-analysis.md), Bash(.claude/hooks/workflows/write-session-state.sh)
|
|
6
6
|
hooks:
|
|
7
7
|
PreToolUse:
|
|
8
8
|
- hooks:
|
|
@@ -180,7 +180,7 @@ Saving session state so Claude can pick up where it left off if the conversation
|
|
|
180
180
|
.claude/hooks/workflows/write-session-state.sh \
|
|
181
181
|
"{topic}" \
|
|
182
182
|
"skills/technical-discussion/SKILL.md" \
|
|
183
|
-
"
|
|
183
|
+
".workflows/discussion/{topic}.md"
|
|
184
184
|
```
|
|
185
185
|
|
|
186
186
|
Load **[invoke-skill.md](references/invoke-skill.md)** and follow its instructions as written.
|
|
@@ -11,7 +11,7 @@ Summarise the selected research topic in 2-5 lines, drawing from the source, sum
|
|
|
11
11
|
```
|
|
12
12
|
New discussion: {topic}
|
|
13
13
|
|
|
14
|
-
Based on research:
|
|
14
|
+
Based on research: .workflows/research/{filename}.md (lines {start}-{end})
|
|
15
15
|
|
|
16
16
|
{2-5 line summary of the topic and what needs discussing}
|
|
17
17
|
|
|
@@ -11,10 +11,10 @@ Invoke the [technical-discussion](../../technical-discussion/SKILL.md) skill for
|
|
|
11
11
|
**Example handoff (from research):**
|
|
12
12
|
```
|
|
13
13
|
Discussion session for: {topic}
|
|
14
|
-
Output:
|
|
14
|
+
Output: .workflows/discussion/{topic}.md
|
|
15
15
|
|
|
16
16
|
Research reference:
|
|
17
|
-
Source:
|
|
17
|
+
Source: .workflows/research/{filename}.md (lines {start}-{end})
|
|
18
18
|
Summary: {the 1-2 sentence summary from the research analysis}
|
|
19
19
|
|
|
20
20
|
Invoke the technical-discussion skill.
|
|
@@ -24,7 +24,7 @@ Invoke the technical-discussion skill.
|
|
|
24
24
|
```
|
|
25
25
|
Discussion session for: {topic}
|
|
26
26
|
Source: {existing discussion | fresh}
|
|
27
|
-
Output:
|
|
27
|
+
Output: .workflows/discussion/{topic}.md
|
|
28
28
|
|
|
29
29
|
Invoke the technical-discussion skill.
|
|
30
30
|
```
|
|
@@ -14,7 +14,7 @@ Use `cache.status` from discovery to determine the approach:
|
|
|
14
14
|
Using cached research analysis (unchanged since {cache.generated})
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Load the topics from
|
|
17
|
+
Load the topics from `.workflows/.state/research-analysis.md` and proceed.
|
|
18
18
|
|
|
19
19
|
#### If cache.status is "stale" or "none"
|
|
20
20
|
|
|
@@ -40,10 +40,10 @@ Read each research file and extract key themes and potential discussion topics.
|
|
|
40
40
|
|
|
41
41
|
Ensure the cache directory exists:
|
|
42
42
|
```bash
|
|
43
|
-
mkdir -p
|
|
43
|
+
mkdir -p .workflows/.state
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
Create/update
|
|
46
|
+
Create/update `.workflows/.state/research-analysis.md`:
|
|
47
47
|
|
|
48
48
|
```markdown
|
|
49
49
|
---
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
set -eo pipefail
|
|
10
10
|
|
|
11
|
-
RESEARCH_DIR="
|
|
12
|
-
DISCUSSION_DIR="
|
|
13
|
-
CACHE_FILE="
|
|
11
|
+
RESEARCH_DIR=".workflows/research"
|
|
12
|
+
DISCUSSION_DIR=".workflows/discussion"
|
|
13
|
+
CACHE_FILE=".workflows/.state/research-analysis.md"
|
|
14
14
|
|
|
15
15
|
# Helper: Extract a frontmatter field value from a file
|
|
16
16
|
# Usage: extract_field <file> <field_name>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: start-feature
|
|
3
3
|
description: "Start a new feature through the full pipeline. Gathers context via structured interview, creates a discussion, then bridges to continue-feature for specification, planning, and implementation."
|
|
4
4
|
disable-model-invocation: true
|
|
5
|
-
allowed-tools: Bash(ls
|
|
5
|
+
allowed-tools: Bash(ls .workflows/discussion/), Bash(.claude/hooks/workflows/write-session-state.sh)
|
|
6
6
|
hooks:
|
|
7
7
|
PreToolUse:
|
|
8
8
|
- hooks:
|
|
@@ -45,7 +45,7 @@ Invoke the `/migrate` skill and assess its output.
|
|
|
45
45
|
Context refresh (compaction) summarizes the conversation, losing procedural detail. When you detect a context refresh has occurred — the conversation feels abruptly shorter, you lack memory of recent steps, or a summary precedes this message — follow this recovery protocol:
|
|
46
46
|
|
|
47
47
|
1. **Re-read this skill file completely.** Do not rely on your summary of it. The full process, steps, and rules must be reloaded.
|
|
48
|
-
2. **Identify the topic.** Check conversation history for the topic name. If unknown, check
|
|
48
|
+
2. **Identify the topic.** Check conversation history for the topic name. If unknown, check `.workflows/discussion/` for recently modified files via `git log --oneline -5`.
|
|
49
49
|
3. **Determine current step from artifacts:**
|
|
50
50
|
- No discussion file exists → resume at **Step 1**
|
|
51
51
|
- Discussion exists with `status: in-progress` → resume at **Step 3** (re-invoke technical-discussion)
|
|
@@ -73,7 +73,7 @@ Based on the feature description, suggest a topic name:
|
|
|
73
73
|
```
|
|
74
74
|
Suggested topic name: {suggested-topic:(kebabcase)}
|
|
75
75
|
|
|
76
|
-
This will create:
|
|
76
|
+
This will create: .workflows/discussion/{suggested-topic}.md
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
> *Output the next fenced block as markdown (not a code block):*
|
|
@@ -92,7 +92,7 @@ Is this name okay?
|
|
|
92
92
|
Once the topic name is confirmed, check for naming conflicts:
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
|
-
ls
|
|
95
|
+
ls .workflows/discussion/
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
If a discussion with the same name exists, inform the user:
|
|
@@ -130,7 +130,7 @@ Saving session state so Claude can pick up where it left off and continue the fe
|
|
|
130
130
|
.claude/hooks/workflows/write-session-state.sh \
|
|
131
131
|
"{topic}" \
|
|
132
132
|
"skills/technical-discussion/SKILL.md" \
|
|
133
|
-
"
|
|
133
|
+
".workflows/discussion/{topic}.md" \
|
|
134
134
|
--pipeline "This session is part of the feature pipeline. After the discussion concludes, load and follow the phase bridge at skills/start-feature/references/phase-bridge.md for topic '{topic}'."
|
|
135
135
|
```
|
|
136
136
|
|
|
@@ -26,7 +26,7 @@ continue the feature pipeline from specification onwards.
|
|
|
26
26
|
- Topic: {topic}
|
|
27
27
|
- Completed phase: discussion
|
|
28
28
|
- Expected next phase: specification
|
|
29
|
-
- Discussion:
|
|
29
|
+
- Discussion: .workflows/discussion/{topic}.md
|
|
30
30
|
|
|
31
31
|
## How to proceed
|
|
32
32
|
|
|
@@ -119,7 +119,7 @@ No plans exist yet.
|
|
|
119
119
|
```
|
|
120
120
|
Implementation Overview
|
|
121
121
|
|
|
122
|
-
No plans found in
|
|
122
|
+
No plans found in .workflows/planning/
|
|
123
123
|
|
|
124
124
|
The implementation phase requires a plan.
|
|
125
125
|
Run /start-planning first to create a plan from a specification.
|
|
@@ -369,7 +369,7 @@ Environment: No special setup required.
|
|
|
369
369
|
> *Output the next fenced block as a code block:*
|
|
370
370
|
|
|
371
371
|
```
|
|
372
|
-
Environment setup file found:
|
|
372
|
+
Environment setup file found: .workflows/environment-setup.md
|
|
373
373
|
```
|
|
374
374
|
→ Proceed to **Step 6**.
|
|
375
375
|
|
|
@@ -384,8 +384,8 @@ Are there any environment setup instructions I should follow before implementati
|
|
|
384
384
|
|
|
385
385
|
**STOP.** Wait for user response.
|
|
386
386
|
|
|
387
|
-
- If the user provides instructions, save them to
|
|
388
|
-
- If the user says no/none, create
|
|
387
|
+
- If the user provides instructions, save them to `.workflows/environment-setup.md`, commit and push
|
|
388
|
+
- If the user says no/none, create `.workflows/environment-setup.md` with "No special setup required." and commit
|
|
389
389
|
|
|
390
390
|
→ Proceed to **Step 6**.
|
|
391
391
|
|
|
@@ -405,7 +405,7 @@ Saving session state so Claude can pick up where it left off if the conversation
|
|
|
405
405
|
.claude/hooks/workflows/write-session-state.sh \
|
|
406
406
|
"{topic}" \
|
|
407
407
|
"skills/technical-implementation/SKILL.md" \
|
|
408
|
-
"
|
|
408
|
+
".workflows/implementation/{topic}/tracking.md"
|
|
409
409
|
```
|
|
410
410
|
|
|
411
411
|
After completing the steps above, this skill's purpose is fulfilled.
|
|
@@ -415,7 +415,7 @@ Invoke the [technical-implementation](../technical-implementation/SKILL.md) skil
|
|
|
415
415
|
**Example handoff:**
|
|
416
416
|
```
|
|
417
417
|
Implementation session for: {topic}
|
|
418
|
-
Plan:
|
|
418
|
+
Plan: .workflows/planning/{topic}/plan.md
|
|
419
419
|
Format: {format}
|
|
420
420
|
Plan ID: {plan_id} (if applicable)
|
|
421
421
|
Specification: {specification} (exists: {true|false})
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
|
|
8
8
|
set -eo pipefail
|
|
9
9
|
|
|
10
|
-
PLAN_DIR="
|
|
11
|
-
SPEC_DIR="
|
|
12
|
-
IMPL_DIR="
|
|
13
|
-
ENVIRONMENT_FILE="
|
|
10
|
+
PLAN_DIR=".workflows/planning"
|
|
11
|
+
SPEC_DIR=".workflows/specification"
|
|
12
|
+
IMPL_DIR=".workflows/implementation"
|
|
13
|
+
ENVIRONMENT_FILE=".workflows/environment-setup.md"
|
|
14
14
|
|
|
15
15
|
# Helper: Extract a frontmatter field value from a file
|
|
16
16
|
# Usage: extract_field <file> <field_name>
|
|
@@ -74,11 +74,13 @@ Parse the discovery output to understand:
|
|
|
74
74
|
|
|
75
75
|
**From `specifications` section:**
|
|
76
76
|
- `exists` - whether any specifications exist
|
|
77
|
-
- `feature` - list of feature specs (name, status, has_plan, plan_status)
|
|
77
|
+
- `feature` - list of feature specs (name, status, has_plan, plan_status, has_impl, impl_status)
|
|
78
78
|
- `crosscutting` - list of cross-cutting specs (name, status)
|
|
79
79
|
- `counts.feature` - total feature specifications
|
|
80
80
|
- `counts.feature_ready` - feature specs ready for planning (concluded + no plan)
|
|
81
81
|
- `counts.feature_with_plan` - feature specs that already have plans
|
|
82
|
+
- `counts.feature_actionable_with_plan` - specs with plans that are NOT fully implemented
|
|
83
|
+
- `counts.feature_implemented` - specs with `impl_status: completed`
|
|
82
84
|
- `counts.crosscutting` - total cross-cutting specifications
|
|
83
85
|
|
|
84
86
|
**From `plans` section:**
|
|
@@ -108,7 +110,7 @@ No specifications exist yet.
|
|
|
108
110
|
```
|
|
109
111
|
Planning Overview
|
|
110
112
|
|
|
111
|
-
No specifications found in
|
|
113
|
+
No specifications found in .workflows/specification/
|
|
112
114
|
|
|
113
115
|
The planning phase requires a concluded specification.
|
|
114
116
|
Run /start-specification first.
|
|
@@ -195,7 +197,7 @@ Saving session state so Claude can pick up where it left off if the conversation
|
|
|
195
197
|
.claude/hooks/workflows/write-session-state.sh \
|
|
196
198
|
"{topic}" \
|
|
197
199
|
"skills/technical-planning/SKILL.md" \
|
|
198
|
-
"
|
|
200
|
+
".workflows/planning/{topic}/plan.md"
|
|
199
201
|
```
|
|
200
202
|
|
|
201
203
|
Load **[invoke-skill.md](references/invoke-skill.md)** and follow its instructions as written.
|
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
|
|
7
7
|
Present everything discovered to help the user make an informed choice.
|
|
8
8
|
|
|
9
|
+
**Actionable vs. non-actionable:**
|
|
10
|
+
|
|
11
|
+
A specification is **actionable** for planning if:
|
|
12
|
+
- It is a feature spec (not cross-cutting)
|
|
13
|
+
- Its status is `concluded`
|
|
14
|
+
- It does NOT have `impl_status: completed` (already fully implemented)
|
|
15
|
+
|
|
16
|
+
Specs with `impl_status: completed` have finished the full workflow and should not be offered for planning work.
|
|
17
|
+
|
|
9
18
|
**Present the full state:**
|
|
10
19
|
|
|
11
20
|
> *Output the next fenced block as a code block:*
|
|
@@ -18,16 +27,31 @@ Planning Overview
|
|
|
18
27
|
1. {topic:(titlecase)}
|
|
19
28
|
└─ Plan: @if(has_plan) {plan_status:[in-progress|concluded]} @else (no plan) @endif
|
|
20
29
|
└─ Spec: concluded
|
|
30
|
+
@if(has_impl && impl_status != completed) └─ Impl: {impl_status} @endif
|
|
21
31
|
|
|
22
32
|
2. ...
|
|
23
33
|
```
|
|
24
34
|
|
|
25
35
|
**Tree rules:**
|
|
26
36
|
|
|
27
|
-
Each numbered item shows a feature specification that is actionable:
|
|
37
|
+
Each numbered item shows a feature specification that is **actionable** (not fully implemented):
|
|
28
38
|
- Concluded spec with no plan → `Plan: (no plan)`
|
|
29
39
|
- Has a plan with `plan_status: planning` → `Plan: in-progress`
|
|
30
40
|
- Has a plan with `plan_status: concluded` → `Plan: concluded`
|
|
41
|
+
- Has implementation tracking (but not completed) → show `Impl: {impl_status}`
|
|
42
|
+
|
|
43
|
+
Do NOT include specs with `impl_status: completed` in the numbered list — they go in the "Completed specifications" section.
|
|
44
|
+
|
|
45
|
+
**If completed specifications exist** (impl_status: completed), show them in a separate code block:
|
|
46
|
+
|
|
47
|
+
> *Output the next fenced block as a code block:*
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Completed specifications:
|
|
51
|
+
These specifications have been fully implemented.
|
|
52
|
+
|
|
53
|
+
• {topic} (implementation completed)
|
|
54
|
+
```
|
|
31
55
|
|
|
32
56
|
**If non-plannable specifications exist**, show them in a separate code block:
|
|
33
57
|
|
|
@@ -52,6 +76,10 @@ Key:
|
|
|
52
76
|
in-progress — planning work is ongoing
|
|
53
77
|
concluded — plan is complete
|
|
54
78
|
|
|
79
|
+
Impl status:
|
|
80
|
+
in-progress — implementation work is ongoing
|
|
81
|
+
completed — implementation is finished
|
|
82
|
+
|
|
55
83
|
Spec type:
|
|
56
84
|
cross-cutting — architectural policy, not directly plannable
|
|
57
85
|
feature — plannable feature specification
|
|
@@ -68,6 +96,8 @@ The verb in the menu depends on the plan state:
|
|
|
68
96
|
- Plan is `in-progress` → **Continue**
|
|
69
97
|
- Plan is `concluded` → **Review**
|
|
70
98
|
|
|
99
|
+
Do NOT include specs with `impl_status: completed` in the menu.
|
|
100
|
+
|
|
71
101
|
> *Output the next fenced block as markdown (not a code block):*
|
|
72
102
|
|
|
73
103
|
```
|
|
@@ -11,7 +11,7 @@ Invoke the [technical-planning](../../technical-planning/SKILL.md) skill for you
|
|
|
11
11
|
**Example handoff (fresh plan):**
|
|
12
12
|
```
|
|
13
13
|
Planning session for: {topic}
|
|
14
|
-
Specification:
|
|
14
|
+
Specification: .workflows/specification/{topic}/specification.md
|
|
15
15
|
Additional context: {summary of user's answers from Step 5}
|
|
16
16
|
Cross-cutting references: {list of applicable cross-cutting specs with brief summaries, or "none"}
|
|
17
17
|
Recommended output format: {common_format from discovery if non-empty, otherwise "none"}
|
|
@@ -22,8 +22,8 @@ Invoke the technical-planning skill.
|
|
|
22
22
|
**Example handoff (continue/review existing plan):**
|
|
23
23
|
```
|
|
24
24
|
Planning session for: {topic}
|
|
25
|
-
Specification:
|
|
26
|
-
Existing plan:
|
|
25
|
+
Specification: .workflows/specification/{topic}/specification.md
|
|
26
|
+
Existing plan: .workflows/planning/{topic}/plan.md
|
|
27
27
|
|
|
28
28
|
Invoke the technical-planning skill.
|
|
29
29
|
```
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
set -eo pipefail
|
|
10
10
|
|
|
11
|
-
SPEC_DIR="
|
|
12
|
-
PLAN_DIR="
|
|
11
|
+
SPEC_DIR=".workflows/specification"
|
|
12
|
+
PLAN_DIR=".workflows/planning"
|
|
13
|
+
IMPL_DIR=".workflows/implementation"
|
|
13
14
|
|
|
14
15
|
# Helper: Extract a frontmatter field value from a file
|
|
15
16
|
# Usage: extract_field <file> <field_name>
|
|
@@ -41,6 +42,8 @@ echo "specifications:"
|
|
|
41
42
|
feature_count=0
|
|
42
43
|
feature_ready_count=0
|
|
43
44
|
feature_with_plan_count=0
|
|
45
|
+
feature_actionable_with_plan_count=0
|
|
46
|
+
feature_implemented_count=0
|
|
44
47
|
crosscutting_count=0
|
|
45
48
|
|
|
46
49
|
if [ -d "$SPEC_DIR" ] && [ -n "$(ls -A "$SPEC_DIR" 2>/dev/null)" ]; then
|
|
@@ -69,12 +72,25 @@ if [ -d "$SPEC_DIR" ] && [ -n "$(ls -A "$SPEC_DIR" 2>/dev/null)" ]; then
|
|
|
69
72
|
plan_status=${plan_status:-"unknown"}
|
|
70
73
|
fi
|
|
71
74
|
|
|
75
|
+
# Check if implementation tracking exists and its status
|
|
76
|
+
has_impl="false"
|
|
77
|
+
impl_status=""
|
|
78
|
+
if [ -f "$IMPL_DIR/${name}/tracking.md" ]; then
|
|
79
|
+
has_impl="true"
|
|
80
|
+
impl_status=$(extract_field "$IMPL_DIR/${name}/tracking.md" "status")
|
|
81
|
+
impl_status=${impl_status:-"unknown"}
|
|
82
|
+
fi
|
|
83
|
+
|
|
72
84
|
echo " - name: \"$name\""
|
|
73
85
|
echo " status: \"$status\""
|
|
74
86
|
echo " has_plan: $has_plan"
|
|
75
87
|
if [ "$has_plan" = "true" ]; then
|
|
76
88
|
echo " plan_status: \"$plan_status\""
|
|
77
89
|
fi
|
|
90
|
+
echo " has_impl: $has_impl"
|
|
91
|
+
if [ "$has_impl" = "true" ]; then
|
|
92
|
+
echo " impl_status: \"$impl_status\""
|
|
93
|
+
fi
|
|
78
94
|
|
|
79
95
|
feature_count=$((feature_count + 1))
|
|
80
96
|
# "concluded" specs without plans are ready for planning
|
|
@@ -83,6 +99,14 @@ if [ -d "$SPEC_DIR" ] && [ -n "$(ls -A "$SPEC_DIR" 2>/dev/null)" ]; then
|
|
|
83
99
|
fi
|
|
84
100
|
if [ "$has_plan" = "true" ]; then
|
|
85
101
|
feature_with_plan_count=$((feature_with_plan_count + 1))
|
|
102
|
+
# Track specs with plans that are still actionable (not fully implemented)
|
|
103
|
+
if [ "$impl_status" != "completed" ]; then
|
|
104
|
+
feature_actionable_with_plan_count=$((feature_actionable_with_plan_count + 1))
|
|
105
|
+
fi
|
|
106
|
+
fi
|
|
107
|
+
# Track fully implemented specs
|
|
108
|
+
if [ "$impl_status" = "completed" ]; then
|
|
109
|
+
feature_implemented_count=$((feature_implemented_count + 1))
|
|
86
110
|
fi
|
|
87
111
|
done
|
|
88
112
|
|
|
@@ -120,6 +144,8 @@ if [ -d "$SPEC_DIR" ] && [ -n "$(ls -A "$SPEC_DIR" 2>/dev/null)" ]; then
|
|
|
120
144
|
echo " feature: $feature_count"
|
|
121
145
|
echo " feature_ready: $feature_ready_count"
|
|
122
146
|
echo " feature_with_plan: $feature_with_plan_count"
|
|
147
|
+
echo " feature_actionable_with_plan: $feature_actionable_with_plan_count"
|
|
148
|
+
echo " feature_implemented: $feature_implemented_count"
|
|
123
149
|
echo " crosscutting: $crosscutting_count"
|
|
124
150
|
else
|
|
125
151
|
echo " exists: false"
|
|
@@ -129,6 +155,8 @@ else
|
|
|
129
155
|
echo " feature: 0"
|
|
130
156
|
echo " feature_ready: 0"
|
|
131
157
|
echo " feature_with_plan: 0"
|
|
158
|
+
echo " feature_actionable_with_plan: 0"
|
|
159
|
+
echo " feature_implemented: 0"
|
|
132
160
|
echo " crosscutting: 0"
|
|
133
161
|
fi
|
|
134
162
|
|
|
@@ -206,9 +234,10 @@ echo " has_specifications: $specs_exist"
|
|
|
206
234
|
echo " has_plans: $plans_exist"
|
|
207
235
|
|
|
208
236
|
# Determine workflow state for routing
|
|
237
|
+
# Actionable = ready for new plan OR has plan that's not fully implemented
|
|
209
238
|
if [ "$specs_exist" = "false" ]; then
|
|
210
239
|
echo " scenario: \"no_specs\""
|
|
211
|
-
elif [ "$feature_ready_count" -eq 0 ] && [ "$
|
|
240
|
+
elif [ "$feature_ready_count" -eq 0 ] && [ "$feature_actionable_with_plan_count" -eq 0 ]; then
|
|
212
241
|
echo " scenario: \"nothing_actionable\""
|
|
213
242
|
else
|
|
214
243
|
echo " scenario: \"has_options\""
|
|
@@ -78,7 +78,7 @@ Saving session state so Claude can pick up where it left off if the conversation
|
|
|
78
78
|
.claude/hooks/workflows/write-session-state.sh \
|
|
79
79
|
"{topic}" \
|
|
80
80
|
"skills/technical-research/SKILL.md" \
|
|
81
|
-
"
|
|
81
|
+
".workflows/research/{topic}.md"
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
Load **[invoke-skill.md](references/invoke-skill.md)** and follow its instructions as written.
|
|
@@ -11,7 +11,7 @@ Invoke the [technical-research](../../technical-research/SKILL.md) skill for you
|
|
|
11
11
|
**Example handoff:**
|
|
12
12
|
```
|
|
13
13
|
Research session for: {topic}
|
|
14
|
-
Output:
|
|
14
|
+
Output: .workflows/research/exploration.md
|
|
15
15
|
|
|
16
16
|
Context:
|
|
17
17
|
- Prompted by: {problem, opportunity, or curiosity}
|
|
@@ -107,7 +107,7 @@ No plans exist yet.
|
|
|
107
107
|
```
|
|
108
108
|
Review Overview
|
|
109
109
|
|
|
110
|
-
No plans found in
|
|
110
|
+
No plans found in .workflows/planning/
|
|
111
111
|
|
|
112
112
|
The review phase requires a completed implementation based on a plan.
|
|
113
113
|
Run /start-planning first to create a plan, then /start-implementation
|
|
@@ -18,7 +18,7 @@ Saving session state so Claude can pick up where it left off if the conversation
|
|
|
18
18
|
.claude/hooks/workflows/write-session-state.sh \
|
|
19
19
|
"{topic}" \
|
|
20
20
|
"skills/technical-review/SKILL.md" \
|
|
21
|
-
"
|
|
21
|
+
".workflows/review/{scope}/r{N}/review.md"
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
---
|
|
@@ -34,13 +34,13 @@ Each plan is reviewed independently. When multiple plans are selected, pass all
|
|
|
34
34
|
Review session
|
|
35
35
|
Plans to review:
|
|
36
36
|
- topic: {topic-1}
|
|
37
|
-
plan:
|
|
37
|
+
plan: .workflows/planning/{topic-1}/plan.md
|
|
38
38
|
format: {format}
|
|
39
39
|
plan_id: {plan_id} (if applicable)
|
|
40
40
|
specification: {specification} (exists: {true|false})
|
|
41
41
|
review_version: r{N}
|
|
42
42
|
- topic: {topic-2}
|
|
43
|
-
plan:
|
|
43
|
+
plan: .workflows/planning/{topic-2}/plan.md
|
|
44
44
|
format: {format}
|
|
45
45
|
specification: {specification} (exists: {true|false})
|
|
46
46
|
review_version: r{N}
|
|
@@ -52,7 +52,7 @@ Invoke the technical-review skill.
|
|
|
52
52
|
```
|
|
53
53
|
Analysis session for: {topic}
|
|
54
54
|
Review mode: analysis-only
|
|
55
|
-
Review path:
|
|
55
|
+
Review path: .workflows/review/{topic}/r{N}/
|
|
56
56
|
Format: {format}
|
|
57
57
|
Specification: {spec path}
|
|
58
58
|
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
|
|
8
8
|
set -eo pipefail
|
|
9
9
|
|
|
10
|
-
PLAN_DIR="
|
|
11
|
-
SPEC_DIR="
|
|
12
|
-
REVIEW_DIR="
|
|
13
|
-
IMPL_DIR="
|
|
10
|
+
PLAN_DIR=".workflows/planning"
|
|
11
|
+
SPEC_DIR=".workflows/specification"
|
|
12
|
+
REVIEW_DIR=".workflows/review"
|
|
13
|
+
IMPL_DIR=".workflows/implementation"
|
|
14
14
|
|
|
15
15
|
# Helper: Extract a frontmatter field value from a file
|
|
16
16
|
# Usage: extract_field <file> <field_name>
|
|
@@ -78,7 +78,7 @@ if [ -d "$PLAN_DIR" ] && [ -n "$(ls -A "$PLAN_DIR" 2>/dev/null)" ]; then
|
|
|
78
78
|
fi
|
|
79
79
|
|
|
80
80
|
# Check implementation status
|
|
81
|
-
impl_tracking="
|
|
81
|
+
impl_tracking=".workflows/implementation/${name}/tracking.md"
|
|
82
82
|
impl_status="none"
|
|
83
83
|
if [ -f "$impl_tracking" ]; then
|
|
84
84
|
impl_status_val=$(extract_field "$impl_tracking" "status")
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: start-specification
|
|
3
3
|
description: "Start a specification session from concluded 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(.claude/skills/start-specification/scripts/discovery.sh), Bash(mkdir -p
|
|
5
|
+
allowed-tools: Bash(.claude/skills/start-specification/scripts/discovery.sh), Bash(mkdir -p .workflows/.state), Bash(rm .workflows/.state/discussion-consolidation-analysis.md), Bash(.claude/hooks/workflows/write-session-state.sh)
|
|
6
6
|
hooks:
|
|
7
7
|
PreToolUse:
|
|
8
8
|
- hooks:
|
|
@@ -65,10 +65,10 @@ When forming groupings:
|
|
|
65
65
|
|
|
66
66
|
Create the cache directory if needed:
|
|
67
67
|
```bash
|
|
68
|
-
mkdir -p
|
|
68
|
+
mkdir -p .workflows/.state
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
Write to
|
|
71
|
+
Write to `.workflows/.state/discussion-consolidation-analysis.md`:
|
|
72
72
|
|
|
73
73
|
```markdown
|
|
74
74
|
---
|