@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.
Files changed (111) hide show
  1. package/README.md +6 -21
  2. package/agents/implementation-analysis-architecture.md +2 -2
  3. package/agents/implementation-analysis-duplication.md +2 -2
  4. package/agents/implementation-analysis-standards.md +2 -2
  5. package/agents/implementation-analysis-synthesizer.md +3 -3
  6. package/agents/implementation-analysis-task-writer.md +1 -1
  7. package/agents/implementation-task-executor.md +3 -0
  8. package/agents/planning-phase-designer.md +8 -6
  9. package/agents/planning-task-designer.md +8 -6
  10. package/agents/review-findings-synthesizer.md +2 -2
  11. package/agents/review-task-verifier.md +1 -1
  12. package/hooks/workflows/compact-recovery.sh +1 -1
  13. package/hooks/workflows/session-cleanup.sh +1 -1
  14. package/hooks/workflows/write-session-state.sh +1 -1
  15. package/package.json +1 -1
  16. package/skills/begin-implementation/SKILL.md +5 -5
  17. package/skills/begin-planning/SKILL.md +2 -1
  18. package/skills/begin-review/SKILL.md +1 -1
  19. package/skills/continue-feature/references/detect-phase.md +5 -5
  20. package/skills/continue-feature/references/invoke-implementation.md +2 -2
  21. package/skills/continue-feature/references/invoke-planning.md +2 -2
  22. package/skills/continue-feature/references/invoke-review.md +2 -2
  23. package/skills/continue-feature/references/invoke-specification.md +3 -3
  24. package/skills/continue-feature/scripts/discovery.sh +5 -5
  25. package/skills/link-dependencies/SKILL.md +5 -5
  26. package/skills/migrate/SKILL.md +1 -1
  27. package/skills/migrate/scripts/migrate.sh +56 -25
  28. package/skills/migrate/scripts/migrations/011-rename-workflow-directory.sh +73 -0
  29. package/skills/migrate/scripts/migrations/012-environment-setup-to-state.sh +23 -0
  30. package/skills/start-discussion/SKILL.md +2 -2
  31. package/skills/start-discussion/references/gather-context-research.md +1 -1
  32. package/skills/start-discussion/references/handle-selection.md +1 -1
  33. package/skills/start-discussion/references/invoke-skill.md +3 -3
  34. package/skills/start-discussion/references/research-analysis.md +3 -3
  35. package/skills/start-discussion/scripts/discovery.sh +3 -3
  36. package/skills/start-feature/SKILL.md +5 -5
  37. package/skills/start-feature/references/phase-bridge.md +1 -1
  38. package/skills/start-implementation/SKILL.md +6 -6
  39. package/skills/start-implementation/scripts/discovery.sh +4 -4
  40. package/skills/start-planning/SKILL.md +5 -3
  41. package/skills/start-planning/references/display-state.md +31 -1
  42. package/skills/start-planning/references/invoke-skill.md +3 -3
  43. package/skills/start-planning/scripts/discovery.sh +32 -3
  44. package/skills/start-research/SKILL.md +1 -1
  45. package/skills/start-research/references/invoke-skill.md +1 -1
  46. package/skills/start-review/SKILL.md +1 -1
  47. package/skills/start-review/references/invoke-skill.md +4 -4
  48. package/skills/start-review/scripts/discovery.sh +5 -5
  49. package/skills/start-specification/SKILL.md +1 -1
  50. package/skills/start-specification/references/analysis-flow.md +2 -2
  51. package/skills/start-specification/references/confirm-continue.md +3 -3
  52. package/skills/start-specification/references/confirm-create.md +2 -2
  53. package/skills/start-specification/references/confirm-refine.md +1 -1
  54. package/skills/start-specification/references/confirm-unify.md +2 -2
  55. package/skills/start-specification/references/display-analyze.md +1 -1
  56. package/skills/start-specification/references/display-groupings.md +3 -3
  57. package/skills/start-specification/references/display-specs-menu.md +1 -1
  58. package/skills/start-specification/references/handoffs/continue-concluded.md +4 -4
  59. package/skills/start-specification/references/handoffs/continue.md +4 -4
  60. package/skills/start-specification/references/handoffs/create-with-incorporation.md +5 -5
  61. package/skills/start-specification/references/handoffs/create.md +4 -4
  62. package/skills/start-specification/references/handoffs/unify-with-incorporation.md +6 -6
  63. package/skills/start-specification/references/handoffs/unify.md +4 -4
  64. package/skills/start-specification/scripts/discovery.sh +3 -3
  65. package/skills/status/SKILL.md +1 -1
  66. package/skills/status/scripts/discovery.sh +5 -5
  67. package/skills/technical-discussion/SKILL.md +3 -3
  68. package/skills/technical-discussion/references/template.md +2 -2
  69. package/skills/technical-implementation/SKILL.md +11 -10
  70. package/skills/technical-implementation/references/analysis-loop.md +45 -9
  71. package/skills/technical-implementation/references/environment-setup.md +3 -3
  72. package/skills/technical-implementation/references/invoke-task-writer.md +1 -1
  73. package/skills/technical-implementation/references/task-loop.md +1 -1
  74. package/skills/technical-planning/SKILL.md +8 -7
  75. package/skills/technical-planning/references/analyze-task-graph.md +1 -1
  76. package/skills/technical-planning/references/author-tasks.md +5 -5
  77. package/skills/technical-planning/references/define-phases.md +5 -2
  78. package/skills/technical-planning/references/define-tasks.md +6 -3
  79. package/skills/technical-planning/references/invoke-review-integrity.md +1 -1
  80. package/skills/technical-planning/references/invoke-review-traceability.md +1 -1
  81. package/skills/technical-planning/references/output-formats/local-markdown/about.md +2 -2
  82. package/skills/technical-planning/references/output-formats/local-markdown/authoring.md +2 -2
  83. package/skills/technical-planning/references/output-formats/local-markdown/reading.md +3 -3
  84. package/skills/technical-planning/references/output-formats/local-markdown/updating.md +1 -1
  85. package/skills/technical-planning/references/output-formats/tick/authoring.md +3 -15
  86. package/skills/technical-planning/references/phase-design/bugfix.md +75 -0
  87. package/skills/technical-planning/references/phase-design/feature.md +77 -0
  88. package/skills/technical-planning/references/phase-design/greenfield.md +75 -0
  89. package/skills/technical-planning/references/phase-design.md +7 -57
  90. package/skills/technical-planning/references/plan-index-schema.md +3 -1
  91. package/skills/technical-planning/references/review-integrity.md +1 -1
  92. package/skills/technical-planning/references/review-traceability.md +1 -1
  93. package/skills/technical-planning/references/task-design/bugfix.md +65 -0
  94. package/skills/technical-planning/references/task-design/feature.md +61 -0
  95. package/skills/technical-planning/references/task-design/greenfield.md +47 -0
  96. package/skills/technical-planning/references/task-design.md +6 -39
  97. package/skills/technical-planning/references/verify-source-material.md +2 -2
  98. package/skills/technical-research/SKILL.md +2 -2
  99. package/skills/technical-research/references/interview.md +2 -2
  100. package/skills/technical-review/SKILL.md +1 -1
  101. package/skills/technical-review/references/invoke-review-synthesizer.md +3 -3
  102. package/skills/technical-review/references/invoke-review-task-writer.md +2 -2
  103. package/skills/technical-review/references/invoke-task-verifiers.md +3 -3
  104. package/skills/technical-review/references/produce-review.md +1 -1
  105. package/skills/technical-review/references/review-actions-loop.md +7 -5
  106. package/skills/technical-specification/SKILL.md +5 -5
  107. package/skills/technical-specification/references/dependencies.md +2 -2
  108. package/skills/technical-specification/references/review-tracking-format.md +1 -1
  109. package/skills/technical-specification/references/specification-format.md +1 -1
  110. package/skills/technical-specification/references/verify-source-material.md +2 -2
  111. 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 docs/workflow/.state/migrations
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
- # Track counts for final report
30
- FILES_UPDATED=0
31
- FILES_SKIPPED=0
32
- MIGRATIONS_RUN=0
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
- # Ensure state directory exists
35
- mkdir -p "$(dirname "$TRACKING_FILE")"
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
- # Self-healing: merge entries from old locations into .state/migrations
38
- OLD_CACHE_LOG="docs/workflow/.cache/migrations.log"
39
- OLD_CACHE_FILE="docs/workflow/.cache/migrations"
40
- if [ -f "$OLD_CACHE_LOG" ] || [ -f "$OLD_CACHE_FILE" ]; then
41
- { cat "$OLD_CACHE_LOG" 2>/dev/null || true; cat "$OLD_CACHE_FILE" 2>/dev/null || true; cat "$TRACKING_FILE" 2>/dev/null || true; } | sort -u > "${TRACKING_FILE}.tmp"
42
- mv "${TRACKING_FILE}.tmp" "$TRACKING_FILE"
43
- rm -f "$OLD_CACHE_LOG" "$OLD_CACHE_FILE"
44
- fi
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
- # Touch tracking file if it doesn't exist
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 docs/workflow/.state), Bash(rm docs/workflow/.state/research-analysis.md), Bash(.claude/hooks/workflows/write-session-state.sh)
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
- "docs/workflow/discussion/{topic}.md"
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: docs/workflow/research/{filename}.md (lines {start}-{end})
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
 
@@ -56,7 +56,7 @@ Refreshing analysis...
56
56
 
57
57
  Delete the cache file:
58
58
  ```bash
59
- rm docs/workflow/.state/research-analysis.md
59
+ rm .workflows/.state/research-analysis.md
60
60
  ```
61
61
 
62
62
  → Return to **Step 3** to re-analyze.
@@ -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: docs/workflow/discussion/{topic}.md
14
+ Output: .workflows/discussion/{topic}.md
15
15
 
16
16
  Research reference:
17
- Source: docs/workflow/research/{filename}.md (lines {start}-{end})
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: docs/workflow/discussion/{topic}.md
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 `docs/workflow/.state/research-analysis.md` and proceed.
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 docs/workflow/.state
43
+ mkdir -p .workflows/.state
44
44
  ```
45
45
 
46
- Create/update `docs/workflow/.state/research-analysis.md`:
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="docs/workflow/research"
12
- DISCUSSION_DIR="docs/workflow/discussion"
13
- CACHE_FILE="docs/workflow/.state/research-analysis.md"
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 docs/workflow/discussion/), Bash(.claude/hooks/workflows/write-session-state.sh)
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 `docs/workflow/discussion/` for recently modified files via `git log --oneline -5`.
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: docs/workflow/discussion/{suggested-topic}.md
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 docs/workflow/discussion/
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
- "docs/workflow/discussion/{topic}.md" \
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: docs/workflow/discussion/{topic}.md
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 docs/workflow/planning/
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: docs/workflow/environment-setup.md
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 `docs/workflow/environment-setup.md`, commit and push
388
- - If the user says no/none, create `docs/workflow/environment-setup.md` with "No special setup required." and commit
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
- "docs/workflow/implementation/{topic}/tracking.md"
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: docs/workflow/planning/{topic}/plan.md
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="docs/workflow/planning"
11
- SPEC_DIR="docs/workflow/specification"
12
- IMPL_DIR="docs/workflow/implementation"
13
- ENVIRONMENT_FILE="docs/workflow/environment-setup.md"
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 docs/workflow/specification/
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
- "docs/workflow/planning/{topic}/plan.md"
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: docs/workflow/specification/{topic}/specification.md
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: docs/workflow/specification/{topic}/specification.md
26
- Existing plan: docs/workflow/planning/{topic}/plan.md
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="docs/workflow/specification"
12
- PLAN_DIR="docs/workflow/planning"
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 ] && [ "$feature_with_plan_count" -eq 0 ]; then
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
- "docs/workflow/research/{topic}.md"
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: docs/workflow/research/exploration.md
14
+ Output: .workflows/research/exploration.md
15
15
 
16
16
  Context:
17
17
  - Prompted by: {problem, opportunity, or curiosity}