@leeovery/claude-technical-workflows 2.1.40 → 2.1.42
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 +6 -21
- 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/write-session-state.sh +1 -1
- 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/output-formats/tick/authoring.md +3 -15
- 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
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
# ./scripts/migrate.sh
|
|
10
10
|
#
|
|
11
11
|
# Tracking:
|
|
12
|
-
# Migrations are tracked in
|
|
12
|
+
# Migrations are tracked in .workflows/.state/migrations
|
|
13
13
|
# Format: "migration_id" per line (e.g., "001", "002")
|
|
14
14
|
# The orchestrator checks/records migration IDs — individual scripts don't track.
|
|
15
15
|
# Delete the log file to force re-running all migrations.
|
|
@@ -24,28 +24,65 @@ set -eo pipefail
|
|
|
24
24
|
|
|
25
25
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
26
26
|
MIGRATIONS_DIR="$SCRIPT_DIR/migrations"
|
|
27
|
-
TRACKING_FILE="docs/workflow/.state/migrations"
|
|
28
27
|
|
|
29
|
-
#
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
# === LEGACY TRACKING SUPPORT (remove after 2026-06) ===
|
|
29
|
+
#
|
|
30
|
+
# Handles tracking file discovery across historical locations and formats.
|
|
31
|
+
# Once all users have run migration 011, replace this section with:
|
|
32
|
+
# TRACKING_FILE=".workflows/.state/migrations"
|
|
33
|
+
# mkdir -p "$(dirname "$TRACKING_FILE")"
|
|
34
|
+
|
|
35
|
+
find_tracking_file() {
|
|
36
|
+
for candidate in \
|
|
37
|
+
".workflows/.state/migrations" \
|
|
38
|
+
"docs/workflow/.state/migrations" \
|
|
39
|
+
"docs/workflow/.cache/migrations" \
|
|
40
|
+
"docs/workflow/.cache/migrations.log"
|
|
41
|
+
do
|
|
42
|
+
[ -f "$candidate" ] && echo "$candidate" && return
|
|
43
|
+
done
|
|
44
|
+
echo ".workflows/.state/migrations"
|
|
45
|
+
}
|
|
33
46
|
|
|
34
|
-
|
|
35
|
-
|
|
47
|
+
normalize_tracking_format() {
|
|
48
|
+
local file="$1"
|
|
49
|
+
[ ! -f "$file" ] && return
|
|
50
|
+
# Old: "docs/workflow/discussion/auth.md: 001" → New: "001"
|
|
51
|
+
if grep -q ': [0-9]' "$file" 2>/dev/null; then
|
|
52
|
+
grep -oE '[0-9]+$' "$file" | sort -u > "${file}.tmp"
|
|
53
|
+
mv "${file}.tmp" "$file"
|
|
54
|
+
fi
|
|
55
|
+
}
|
|
36
56
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
57
|
+
stabilize_tracking_location() {
|
|
58
|
+
local file="$1"
|
|
59
|
+
local stable="docs/workflow/.state/migrations"
|
|
60
|
+
# If tracking is at a legacy .cache/ location, move to .state/ so it survives migration 010
|
|
61
|
+
case "$file" in
|
|
62
|
+
docs/workflow/.cache/*)
|
|
63
|
+
mkdir -p "$(dirname "$stable")"
|
|
64
|
+
mv "$file" "$stable"
|
|
65
|
+
echo "$stable"
|
|
66
|
+
;;
|
|
67
|
+
*)
|
|
68
|
+
echo "$file"
|
|
69
|
+
;;
|
|
70
|
+
esac
|
|
71
|
+
}
|
|
45
72
|
|
|
46
|
-
|
|
73
|
+
TRACKING_FILE=$(find_tracking_file)
|
|
74
|
+
normalize_tracking_format "$TRACKING_FILE"
|
|
75
|
+
TRACKING_FILE=$(stabilize_tracking_location "$TRACKING_FILE")
|
|
76
|
+
mkdir -p "$(dirname "$TRACKING_FILE")"
|
|
47
77
|
touch "$TRACKING_FILE"
|
|
48
78
|
|
|
79
|
+
# === END LEGACY TRACKING SUPPORT ===
|
|
80
|
+
|
|
81
|
+
# Track counts for final report
|
|
82
|
+
FILES_UPDATED=0
|
|
83
|
+
FILES_SKIPPED=0
|
|
84
|
+
MIGRATIONS_RUN=0
|
|
85
|
+
|
|
49
86
|
#
|
|
50
87
|
# Helper function: Report a file update (for migration scripts to call)
|
|
51
88
|
# Usage: report_update "filepath" "description"
|
|
@@ -88,14 +125,6 @@ if [ ${#MIGRATION_SCRIPTS[@]} -eq 0 ]; then
|
|
|
88
125
|
exit 0
|
|
89
126
|
fi
|
|
90
127
|
|
|
91
|
-
# One-time: convert old per-file format to per-migration format
|
|
92
|
-
# Old: "docs/workflow/discussion/auth.md: 001" → extracts "001"
|
|
93
|
-
# New: "001" → already correct
|
|
94
|
-
if grep -q ': [0-9]' "$TRACKING_FILE" 2>/dev/null; then
|
|
95
|
-
grep -oE '[0-9]+$' "$TRACKING_FILE" | sort -u > "${TRACKING_FILE}.tmp"
|
|
96
|
-
mv "${TRACKING_FILE}.tmp" "$TRACKING_FILE"
|
|
97
|
-
fi
|
|
98
|
-
|
|
99
128
|
for script in "${MIGRATION_SCRIPTS[@]}"; do
|
|
100
129
|
# Extract migration ID from filename (e.g., "001" from "001-discussion-frontmatter.sh")
|
|
101
130
|
migration_id=$(basename "$script" .sh | grep -oE '^[0-9]+')
|
|
@@ -115,6 +144,8 @@ for script in "${MIGRATION_SCRIPTS[@]}"; do
|
|
|
115
144
|
# shellcheck source=/dev/null
|
|
116
145
|
source "$script"
|
|
117
146
|
|
|
147
|
+
# Re-find tracking file (migration 011 moves it)
|
|
148
|
+
TRACKING_FILE=$(find_tracking_file)
|
|
118
149
|
echo "$migration_id" >> "$TRACKING_FILE"
|
|
119
150
|
MIGRATIONS_RUN=$((MIGRATIONS_RUN + 1))
|
|
120
151
|
done
|
|
@@ -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}
|