claude-symphony 0.0.1 → 0.0.2
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 +16 -12
- package/bin/create.js +80 -69
- package/package.json +1 -1
- package/template/.claude/commands/benchmark.md +32 -32
- package/template/.claude/commands/brainstorm.md +33 -33
- package/template/.claude/commands/checkpoint.md +42 -42
- package/template/.claude/commands/codex.md +52 -52
- package/template/.claude/commands/collaborate.md +47 -47
- package/template/.claude/commands/context.md +77 -77
- package/template/.claude/commands/deploy.md +50 -50
- package/template/.claude/commands/fork.md +46 -46
- package/template/.claude/commands/gemini.md +43 -43
- package/template/.claude/commands/handoff.md +42 -42
- package/template/.claude/commands/implement.md +42 -42
- package/template/.claude/commands/init-project.md +25 -25
- package/template/.claude/commands/next.md +67 -67
- package/template/.claude/commands/planning.md +38 -38
- package/template/.claude/commands/qa.md +47 -47
- package/template/.claude/commands/refactor.md +50 -50
- package/template/.claude/commands/research.md +31 -31
- package/template/.claude/commands/restore.md +53 -53
- package/template/.claude/commands/run-stage.md +45 -45
- package/template/.claude/commands/stages.md +49 -49
- package/template/.claude/commands/status.md +41 -41
- package/template/.claude/commands/tasks.md +33 -33
- package/template/.claude/commands/test.md +45 -45
- package/template/.claude/commands/ui-ux.md +31 -31
- package/template/.claude/commands/validate.md +81 -81
- package/template/.claude/hooks/ai-selector.sh +39 -39
- package/template/.claude/hooks/auto-checkpoint.sh +30 -30
- package/template/.claude/hooks/output-validator.sh +45 -45
- package/template/.claude/hooks/post-stage.sh +28 -28
- package/template/.claude/hooks/pre-stage.sh +47 -47
- package/template/.claude/hooks/session-start.sh +27 -27
- package/template/.claude/hooks/statusline.sh +24 -24
- package/template/.claude/hooks/stop.sh +26 -26
- package/template/.claude/settings.json +32 -32
- package/template/.claude/skills/ai-collaboration/README.md +31 -31
- package/template/.claude/skills/ai-collaboration/debate.md +66 -66
- package/template/.claude/skills/ai-collaboration/parallel.md +34 -34
- package/template/.claude/skills/ai-collaboration/prompts/CLAUDE.md +59 -63
- package/template/.claude/skills/auto-checkpoint/README.md +46 -46
- package/template/.claude/skills/auto-checkpoint/prompts/CLAUDE.md +68 -72
- package/template/.claude/skills/auto-checkpoint/rollback.md +95 -95
- package/template/.claude/skills/auto-checkpoint/trigger.md +37 -37
- package/template/.claude/skills/context-compression/README.md +69 -69
- package/template/.claude/skills/context-compression/analyze.md +74 -74
- package/template/.claude/skills/context-compression/compress.md +103 -103
- package/template/.claude/skills/context-compression/prompts/compression.md +78 -78
- package/template/.claude/skills/output-validator/README.md +33 -33
- package/template/.claude/skills/output-validator/prompts/CLAUDE.md +74 -78
- package/template/.claude/skills/output-validator/validate.md +76 -76
- package/template/.claude/skills/smart-handoff/README.md +35 -35
- package/template/.claude/skills/smart-handoff/extract.md +42 -42
- package/template/.claude/skills/smart-handoff/prompts/CLAUDE.md +52 -54
- package/template/.claude/skills/smart-handoff/summarize.md +55 -55
- package/template/.claude/skills/stage-transition/README.md +50 -50
- package/template/.claude/skills/stage-transition/handoff-gen.md +89 -89
- package/template/.claude/skills/stage-transition/prompts/transition.md +74 -74
- package/template/.claude/skills/stage-transition/validate.md +41 -41
- package/template/CLAUDE.md +334 -335
- package/template/config/ai_benchmarking.yaml +22 -22
- package/template/config/ai_collaboration.yaml +18 -18
- package/template/config/ai_logging.yaml +50 -50
- package/template/config/auto_checkpoint.yaml +32 -32
- package/template/config/context.yaml +20 -20
- package/template/config/git.yaml +51 -51
- package/template/config/handoff_intelligence.yaml +23 -23
- package/template/config/mcp_fallbacks.yaml +71 -71
- package/template/config/memory_integration.yaml +23 -23
- package/template/config/model_enforcement.yaml +53 -53
- package/template/config/models.yaml +24 -24
- package/template/config/output_validation.yaml +44 -44
- package/template/config/pipeline.yaml +25 -25
- package/template/config/pipeline_forking.yaml +40 -40
- package/template/config/qa_logging.yaml +67 -67
- package/template/config/smart_rollback.yaml +48 -48
- package/template/config/stage_personas.yaml +154 -154
- package/template/config/workflow.yaml +16 -16
- package/template/scripts/ai-benchmark.sh +41 -41
- package/template/scripts/codex-wrapper.sh +32 -32
- package/template/scripts/context-manager.sh +136 -136
- package/template/scripts/create-checkpoint.sh +34 -34
- package/template/scripts/gemini-wrapper.sh +31 -31
- package/template/scripts/init-project.sh +40 -40
- package/template/scripts/list-stages.sh +30 -30
- package/template/scripts/next-stage.sh +67 -67
- package/template/scripts/output-validate.sh +2 -2
- package/template/scripts/pipeline-fork.sh +68 -68
- package/template/scripts/pre-run-check.sh +84 -84
- package/template/scripts/restore-checkpoint.sh +50 -50
- package/template/scripts/run-stage.sh +44 -44
- package/template/scripts/show-status.sh +30 -30
- package/template/scripts/smart-handoff.sh +70 -70
- package/template/stages/01-brainstorm/CLAUDE.md +70 -74
- package/template/stages/01-brainstorm/README.md +54 -54
- package/template/stages/01-brainstorm/config.yaml +18 -18
- package/template/stages/01-brainstorm/prompts/collaboration.md +24 -24
- package/template/stages/01-brainstorm/prompts/ideation.md +41 -41
- package/template/stages/01-brainstorm/prompts/persona.md +50 -50
- package/template/stages/01-brainstorm/prompts/requirements.md +55 -55
- package/template/stages/01-brainstorm/prompts/validation.md +28 -28
- package/template/stages/01-brainstorm/templates/ideas.md +47 -47
- package/template/stages/01-brainstorm/templates/requirements_analysis.md +61 -61
- package/template/stages/02-research/CLAUDE.md +72 -76
- package/template/stages/02-research/config.yaml +12 -12
- package/template/stages/02-research/prompts/collaboration.md +29 -29
- package/template/stages/02-research/prompts/feasibility.md +38 -38
- package/template/stages/02-research/prompts/market_analysis.md +29 -29
- package/template/stages/02-research/prompts/tech_stack.md +34 -34
- package/template/stages/02-research/prompts/validation.md +29 -29
- package/template/stages/03-planning/CLAUDE.md +88 -92
- package/template/stages/03-planning/config.yaml +10 -10
- package/template/stages/03-planning/prompts/architecture.md +43 -43
- package/template/stages/03-planning/prompts/collaboration.md +34 -34
- package/template/stages/03-planning/prompts/validation.md +34 -34
- package/template/stages/04-ui-ux/CLAUDE.md +68 -72
- package/template/stages/04-ui-ux/config.yaml +5 -5
- package/template/stages/04-ui-ux/prompts/collaboration.md +35 -35
- package/template/stages/04-ui-ux/prompts/validation.md +30 -30
- package/template/stages/05-task-management/CLAUDE.md +81 -85
- package/template/stages/05-task-management/config.yaml +17 -17
- package/template/stages/05-task-management/prompts/collaboration.md +30 -30
- package/template/stages/05-task-management/prompts/validation.md +33 -33
- package/template/stages/05-task-management/templates/notion_integration.md +70 -70
- package/template/stages/05-task-management/templates/parallel_groups.yaml +64 -64
- package/template/stages/05-task-management/templates/task_schema.yaml +33 -33
- package/template/stages/06-implementation/CLAUDE.md +117 -121
- package/template/stages/06-implementation/config.yaml +10 -10
- package/template/stages/06-implementation/prompts/collaboration.md +29 -29
- package/template/stages/06-implementation/prompts/validation.md +36 -36
- package/template/stages/07-refactoring/CLAUDE.md +120 -124
- package/template/stages/07-refactoring/config.yaml +11 -11
- package/template/stages/07-refactoring/prompts/collaboration.md +36 -36
- package/template/stages/07-refactoring/prompts/validation.md +40 -40
- package/template/stages/08-qa/CLAUDE.md +80 -84
- package/template/stages/08-qa/config.yaml +7 -7
- package/template/stages/08-qa/prompts/collaboration.md +34 -34
- package/template/stages/08-qa/prompts/validation.md +41 -41
- package/template/stages/09-testing/CLAUDE.md +86 -90
- package/template/stages/09-testing/config.yaml +10 -10
- package/template/stages/09-testing/prompts/collaboration.md +38 -38
- package/template/stages/09-testing/prompts/validation.md +41 -41
- package/template/stages/10-deployment/CLAUDE.md +86 -90
- package/template/stages/10-deployment/config.yaml +11 -11
- package/template/stages/10-deployment/prompts/collaboration.md +37 -37
- package/template/stages/10-deployment/prompts/validation.md +54 -54
- package/template/stages/10-deployment/templates/github-actions-cd.yaml +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# claude-symphony Output Validator Hook
|
|
3
|
-
#
|
|
3
|
+
# Stage output validation
|
|
4
4
|
|
|
5
5
|
set -e
|
|
6
6
|
|
|
@@ -10,32 +10,32 @@ CONFIG_FILE="$PROJECT_ROOT/config/output_validation.yaml"
|
|
|
10
10
|
PROGRESS_FILE="$PROJECT_ROOT/state/progress.json"
|
|
11
11
|
VALIDATIONS_DIR="$PROJECT_ROOT/state/validations"
|
|
12
12
|
|
|
13
|
-
#
|
|
13
|
+
# Color definitions
|
|
14
14
|
RED='\033[0;31m'
|
|
15
15
|
GREEN='\033[0;32m'
|
|
16
16
|
YELLOW='\033[1;33m'
|
|
17
17
|
BLUE='\033[0;34m'
|
|
18
18
|
NC='\033[0m'
|
|
19
19
|
|
|
20
|
-
#
|
|
20
|
+
# Result icons
|
|
21
21
|
PASS="✅"
|
|
22
22
|
FAIL="❌"
|
|
23
23
|
WARN="⚠️"
|
|
24
24
|
INFO="ℹ️"
|
|
25
25
|
|
|
26
|
-
#
|
|
26
|
+
# Log functions
|
|
27
27
|
log_pass() { echo -e "${GREEN}${PASS}${NC} $1"; }
|
|
28
28
|
log_fail() { echo -e "${RED}${FAIL}${NC} $1"; }
|
|
29
29
|
log_warn() { echo -e "${YELLOW}${WARN}${NC} $1"; }
|
|
30
30
|
log_info() { echo -e "${BLUE}${INFO}${NC} $1"; }
|
|
31
31
|
|
|
32
|
-
#
|
|
32
|
+
# Validation results storage
|
|
33
33
|
TOTAL_CHECKS=0
|
|
34
34
|
PASSED_CHECKS=0
|
|
35
35
|
FAILED_CHECKS=0
|
|
36
36
|
WARNINGS=0
|
|
37
37
|
|
|
38
|
-
#
|
|
38
|
+
# Get current stage
|
|
39
39
|
get_current_stage() {
|
|
40
40
|
if [ -f "$PROGRESS_FILE" ]; then
|
|
41
41
|
cat "$PROGRESS_FILE" 2>/dev/null | grep -o '"current_stage"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4
|
|
@@ -44,7 +44,7 @@ get_current_stage() {
|
|
|
44
44
|
fi
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
#
|
|
47
|
+
# Check file exists
|
|
48
48
|
check_file_exists() {
|
|
49
49
|
local file_path="$1"
|
|
50
50
|
local required="$2"
|
|
@@ -53,23 +53,23 @@ check_file_exists() {
|
|
|
53
53
|
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
|
54
54
|
|
|
55
55
|
if [ -e "$full_path" ]; then
|
|
56
|
-
log_pass "$file_path
|
|
56
|
+
log_pass "$file_path exists"
|
|
57
57
|
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
|
58
58
|
return 0
|
|
59
59
|
else
|
|
60
60
|
if [ "$required" = "true" ]; then
|
|
61
|
-
log_fail "$file_path
|
|
61
|
+
log_fail "$file_path missing"
|
|
62
62
|
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
|
63
63
|
return 1
|
|
64
64
|
else
|
|
65
|
-
log_warn "$file_path
|
|
65
|
+
log_warn "$file_path missing (optional)"
|
|
66
66
|
WARNINGS=$((WARNINGS + 1))
|
|
67
67
|
return 0
|
|
68
68
|
fi
|
|
69
69
|
fi
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
#
|
|
72
|
+
# Check directory exists
|
|
73
73
|
check_directory_exists() {
|
|
74
74
|
local dir_path="$1"
|
|
75
75
|
local full_path="$PROJECT_ROOT/$dir_path"
|
|
@@ -77,17 +77,17 @@ check_directory_exists() {
|
|
|
77
77
|
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
|
78
78
|
|
|
79
79
|
if [ -d "$full_path" ]; then
|
|
80
|
-
log_pass "$dir_path
|
|
80
|
+
log_pass "$dir_path directory exists"
|
|
81
81
|
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
|
82
82
|
return 0
|
|
83
83
|
else
|
|
84
|
-
log_fail "$dir_path
|
|
84
|
+
log_fail "$dir_path directory missing"
|
|
85
85
|
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
|
86
86
|
return 1
|
|
87
87
|
fi
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
#
|
|
90
|
+
# Check file minimum size
|
|
91
91
|
check_file_size() {
|
|
92
92
|
local file_path="$1"
|
|
93
93
|
local min_size="$2"
|
|
@@ -98,18 +98,18 @@ check_file_size() {
|
|
|
98
98
|
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
|
99
99
|
|
|
100
100
|
if [ "$size" -ge "$min_size" ]; then
|
|
101
|
-
log_pass "$file_path
|
|
101
|
+
log_pass "$file_path size met (${size} bytes >= ${min_size})"
|
|
102
102
|
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
|
103
103
|
return 0
|
|
104
104
|
else
|
|
105
|
-
log_fail "$file_path
|
|
105
|
+
log_fail "$file_path size insufficient (${size} bytes < ${min_size})"
|
|
106
106
|
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
|
107
107
|
return 1
|
|
108
108
|
fi
|
|
109
109
|
fi
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
#
|
|
112
|
+
# Check markdown sections
|
|
113
113
|
check_markdown_sections() {
|
|
114
114
|
local file_path="$1"
|
|
115
115
|
shift
|
|
@@ -121,43 +121,43 @@ check_markdown_sections() {
|
|
|
121
121
|
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
|
122
122
|
|
|
123
123
|
if grep -q "^#.*$section" "$full_path" || grep -q "^##.*$section" "$full_path"; then
|
|
124
|
-
log_pass "$file_path: '$section'
|
|
124
|
+
log_pass "$file_path: '$section' section exists"
|
|
125
125
|
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
|
126
126
|
else
|
|
127
|
-
log_fail "$file_path: '$section'
|
|
127
|
+
log_fail "$file_path: '$section' section missing"
|
|
128
128
|
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
|
129
129
|
fi
|
|
130
130
|
done
|
|
131
131
|
fi
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
#
|
|
134
|
+
# Run validation command
|
|
135
135
|
run_validation_command() {
|
|
136
136
|
local name="$1"
|
|
137
137
|
local command="$2"
|
|
138
138
|
local required="$3"
|
|
139
139
|
|
|
140
140
|
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
|
141
|
-
log_info "
|
|
141
|
+
log_info "Running: $name ($command)"
|
|
142
142
|
|
|
143
143
|
if eval "$command" > /dev/null 2>&1; then
|
|
144
|
-
log_pass "$name
|
|
144
|
+
log_pass "$name passed"
|
|
145
145
|
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
|
146
146
|
return 0
|
|
147
147
|
else
|
|
148
148
|
if [ "$required" = "true" ]; then
|
|
149
|
-
log_fail "$name
|
|
149
|
+
log_fail "$name failed"
|
|
150
150
|
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
|
151
151
|
return 1
|
|
152
152
|
else
|
|
153
|
-
log_warn "$name
|
|
153
|
+
log_warn "$name failed (optional)"
|
|
154
154
|
WARNINGS=$((WARNINGS + 1))
|
|
155
155
|
return 0
|
|
156
156
|
fi
|
|
157
157
|
fi
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
#
|
|
160
|
+
# Stage-specific validation
|
|
161
161
|
validate_stage() {
|
|
162
162
|
local stage="$1"
|
|
163
163
|
local stage_dir="$PROJECT_ROOT/stages/$stage"
|
|
@@ -165,11 +165,11 @@ validate_stage() {
|
|
|
165
165
|
|
|
166
166
|
echo ""
|
|
167
167
|
echo "=========================================="
|
|
168
|
-
echo "
|
|
168
|
+
echo " Output Validation: $stage"
|
|
169
169
|
echo "=========================================="
|
|
170
170
|
echo ""
|
|
171
171
|
|
|
172
|
-
# HANDOFF.md
|
|
172
|
+
# HANDOFF.md check (common for all stages)
|
|
173
173
|
check_file_exists "stages/$stage/HANDOFF.md" "true"
|
|
174
174
|
|
|
175
175
|
case "$stage" in
|
|
@@ -177,7 +177,7 @@ validate_stage() {
|
|
|
177
177
|
check_file_exists "stages/$stage/outputs/ideas.md" "true"
|
|
178
178
|
check_file_size "stages/$stage/outputs/ideas.md" 500
|
|
179
179
|
check_file_exists "stages/$stage/outputs/requirements_analysis.md" "true"
|
|
180
|
-
check_markdown_sections "stages/$stage/outputs/requirements_analysis.md" "
|
|
180
|
+
check_markdown_sections "stages/$stage/outputs/requirements_analysis.md" "Functional" "Non-functional"
|
|
181
181
|
;;
|
|
182
182
|
|
|
183
183
|
"02-research")
|
|
@@ -196,7 +196,7 @@ validate_stage() {
|
|
|
196
196
|
check_directory_exists "stages/$stage/outputs/source_code"
|
|
197
197
|
check_file_exists "stages/$stage/outputs/implementation_log.md" "true"
|
|
198
198
|
|
|
199
|
-
#
|
|
199
|
+
# Build validation
|
|
200
200
|
if [ -f "$PROJECT_ROOT/package.json" ]; then
|
|
201
201
|
run_validation_command "lint" "npm run lint --prefix $PROJECT_ROOT" "true"
|
|
202
202
|
run_validation_command "typecheck" "npm run typecheck --prefix $PROJECT_ROOT" "true"
|
|
@@ -208,47 +208,47 @@ validate_stage() {
|
|
|
208
208
|
check_file_exists "stages/$stage/outputs/test_report.md" "true"
|
|
209
209
|
check_file_exists "stages/$stage/outputs/coverage_report.md" "true"
|
|
210
210
|
|
|
211
|
-
#
|
|
211
|
+
# Test validation
|
|
212
212
|
if [ -f "$PROJECT_ROOT/package.json" ]; then
|
|
213
213
|
run_validation_command "test" "npm run test --prefix $PROJECT_ROOT" "true"
|
|
214
214
|
fi
|
|
215
215
|
;;
|
|
216
216
|
|
|
217
217
|
*)
|
|
218
|
-
log_info "
|
|
218
|
+
log_info "No specific validation rules for stage $stage"
|
|
219
219
|
;;
|
|
220
220
|
esac
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
#
|
|
223
|
+
# Print result summary
|
|
224
224
|
print_summary() {
|
|
225
225
|
echo ""
|
|
226
226
|
echo "=========================================="
|
|
227
|
-
echo "
|
|
227
|
+
echo " Validation Result Summary"
|
|
228
228
|
echo "=========================================="
|
|
229
229
|
echo ""
|
|
230
|
-
echo "
|
|
231
|
-
echo -e "${GREEN}
|
|
232
|
-
echo -e "${RED}
|
|
233
|
-
echo -e "${YELLOW}
|
|
230
|
+
echo "Total checks: $TOTAL_CHECKS"
|
|
231
|
+
echo -e "${GREEN}Passed: $PASSED_CHECKS${NC}"
|
|
232
|
+
echo -e "${RED}Failed: $FAILED_CHECKS${NC}"
|
|
233
|
+
echo -e "${YELLOW}Warnings: $WARNINGS${NC}"
|
|
234
234
|
echo ""
|
|
235
235
|
|
|
236
|
-
#
|
|
236
|
+
# Calculate score
|
|
237
237
|
if [ "$TOTAL_CHECKS" -gt 0 ]; then
|
|
238
238
|
local score=$(echo "scale=2; $PASSED_CHECKS / $TOTAL_CHECKS" | bc)
|
|
239
|
-
echo "
|
|
239
|
+
echo "Score: $score"
|
|
240
240
|
|
|
241
241
|
if [ "$FAILED_CHECKS" -eq 0 ]; then
|
|
242
|
-
echo -e "${GREEN}${PASS}
|
|
242
|
+
echo -e "${GREEN}${PASS} Validation passed${NC}"
|
|
243
243
|
return 0
|
|
244
244
|
else
|
|
245
|
-
echo -e "${RED}${FAIL}
|
|
245
|
+
echo -e "${RED}${FAIL} Validation failed - Stage transition blocked${NC}"
|
|
246
246
|
return 1
|
|
247
247
|
fi
|
|
248
248
|
fi
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
#
|
|
251
|
+
# Save results
|
|
252
252
|
save_results() {
|
|
253
253
|
local stage="$1"
|
|
254
254
|
local timestamp=$(date +%Y%m%d_%H%M%S)
|
|
@@ -268,13 +268,13 @@ save_results() {
|
|
|
268
268
|
EOF
|
|
269
269
|
}
|
|
270
270
|
|
|
271
|
-
#
|
|
271
|
+
# Main execution
|
|
272
272
|
main() {
|
|
273
273
|
local stage="${1:-$(get_current_stage)}"
|
|
274
274
|
local verbose="${2:-false}"
|
|
275
275
|
|
|
276
276
|
if [ "$stage" = "unknown" ]; then
|
|
277
|
-
log_fail "
|
|
277
|
+
log_fail "Cannot determine current stage."
|
|
278
278
|
exit 1
|
|
279
279
|
fi
|
|
280
280
|
|
|
@@ -283,7 +283,7 @@ main() {
|
|
|
283
283
|
print_summary
|
|
284
284
|
}
|
|
285
285
|
|
|
286
|
-
#
|
|
286
|
+
# Call main only when executed directly
|
|
287
287
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
288
288
|
main "$@"
|
|
289
289
|
fi
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# post-stage.sh -
|
|
2
|
+
# post-stage.sh - Post-stage completion hook
|
|
3
3
|
# claude-symphony workflow pipeline
|
|
4
4
|
|
|
5
5
|
set -e
|
|
@@ -9,7 +9,7 @@ PROJECT_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
|
9
9
|
PROGRESS_FILE="$PROJECT_ROOT/state/progress.json"
|
|
10
10
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
11
11
|
|
|
12
|
-
#
|
|
12
|
+
# Color definitions
|
|
13
13
|
RED='\033[0;31m'
|
|
14
14
|
GREEN='\033[0;32m'
|
|
15
15
|
YELLOW='\033[1;33m'
|
|
@@ -20,47 +20,47 @@ echo "━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
20
20
|
echo "📋 Post-Stage Hook: $STAGE_ID"
|
|
21
21
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
22
22
|
|
|
23
|
-
# 1.
|
|
23
|
+
# 1. Validate completion criteria
|
|
24
24
|
validate_completion() {
|
|
25
25
|
local stage_dir="$PROJECT_ROOT/stages/$STAGE_ID"
|
|
26
26
|
local config_file="$stage_dir/config.yaml"
|
|
27
27
|
|
|
28
|
-
echo "
|
|
28
|
+
echo "Validating completion criteria..."
|
|
29
29
|
|
|
30
|
-
# outputs
|
|
30
|
+
# Check outputs directory
|
|
31
31
|
if [ -d "$stage_dir/outputs" ]; then
|
|
32
32
|
local output_count=$(ls -1 "$stage_dir/outputs" 2>/dev/null | wc -l)
|
|
33
|
-
echo -e " ${GREEN}✓${NC}
|
|
33
|
+
echo -e " ${GREEN}✓${NC} Output files: $output_count"
|
|
34
34
|
fi
|
|
35
35
|
|
|
36
36
|
return 0
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
# 2. HANDOFF.md
|
|
39
|
+
# 2. HANDOFF.md generation notification
|
|
40
40
|
check_handoff() {
|
|
41
41
|
local handoff_file="$PROJECT_ROOT/stages/$STAGE_ID/HANDOFF.md"
|
|
42
42
|
|
|
43
43
|
if [ ! -f "$handoff_file" ]; then
|
|
44
|
-
echo -e " ${YELLOW}⚠${NC} HANDOFF.md
|
|
45
|
-
echo " /handoff
|
|
44
|
+
echo -e " ${YELLOW}⚠${NC} HANDOFF.md not generated"
|
|
45
|
+
echo " Please run /handoff to generate the handoff document."
|
|
46
46
|
return 1
|
|
47
47
|
fi
|
|
48
48
|
|
|
49
|
-
echo -e " ${GREEN}✓${NC} HANDOFF.md
|
|
49
|
+
echo -e " ${GREEN}✓${NC} HANDOFF.md exists"
|
|
50
50
|
|
|
51
|
-
#
|
|
51
|
+
# Archive handoff
|
|
52
52
|
local archive_name="${STAGE_ID}-$(date +%Y%m%d-%H%M).md"
|
|
53
53
|
cp "$handoff_file" "$PROJECT_ROOT/state/handoffs/$archive_name"
|
|
54
|
-
echo -e " ${GREEN}✓${NC}
|
|
54
|
+
echo -e " ${GREEN}✓${NC} Handoff archived: state/handoffs/$archive_name"
|
|
55
55
|
|
|
56
56
|
return 0
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
# 3. progress.json
|
|
59
|
+
# 3. Update progress.json
|
|
60
60
|
update_progress() {
|
|
61
|
-
echo "
|
|
61
|
+
echo "Updating status..."
|
|
62
62
|
|
|
63
|
-
#
|
|
63
|
+
# Update status with jq
|
|
64
64
|
if command -v jq &> /dev/null; then
|
|
65
65
|
local tmp_file=$(mktemp)
|
|
66
66
|
jq ".stages.\"$STAGE_ID\".status = \"completed\" | \
|
|
@@ -69,27 +69,27 @@ update_progress() {
|
|
|
69
69
|
.pipeline.updated_at = \"$TIMESTAMP\"" \
|
|
70
70
|
"$PROGRESS_FILE" > "$tmp_file" && mv "$tmp_file" "$PROGRESS_FILE"
|
|
71
71
|
|
|
72
|
-
echo -e " ${GREEN}✓${NC} progress.json
|
|
72
|
+
echo -e " ${GREEN}✓${NC} progress.json updated"
|
|
73
73
|
else
|
|
74
|
-
echo -e " ${YELLOW}⚠${NC} jq
|
|
74
|
+
echo -e " ${YELLOW}⚠${NC} jq not installed - Manual update required"
|
|
75
75
|
fi
|
|
76
76
|
|
|
77
77
|
return 0
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
# 4.
|
|
80
|
+
# 4. Checkpoint creation reminder (required stages)
|
|
81
81
|
remind_checkpoint() {
|
|
82
82
|
local stage_num=$(echo "$STAGE_ID" | cut -d'-' -f1)
|
|
83
83
|
|
|
84
84
|
if [ "$stage_num" == "06" ] || [ "$stage_num" == "07" ]; then
|
|
85
85
|
echo ""
|
|
86
|
-
echo -e "${BLUE}📌
|
|
87
|
-
echo "
|
|
88
|
-
echo " /checkpoint \"
|
|
86
|
+
echo -e "${BLUE}📌 Checkpoint Reminder${NC}"
|
|
87
|
+
echo " Checkpoint creation is recommended for this stage."
|
|
88
|
+
echo " Please run /checkpoint \"Stage completed\""
|
|
89
89
|
fi
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
# 5.
|
|
92
|
+
# 5. Show next stage guidance
|
|
93
93
|
show_next_stage() {
|
|
94
94
|
local config_file="$PROJECT_ROOT/stages/$STAGE_ID/config.yaml"
|
|
95
95
|
local next_stage=""
|
|
@@ -102,19 +102,19 @@ show_next_stage() {
|
|
|
102
102
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
103
103
|
|
|
104
104
|
if [ -z "$next_stage" ] || [ "$next_stage" == "null" ]; then
|
|
105
|
-
echo -e "${GREEN}🎉
|
|
106
|
-
echo "
|
|
105
|
+
echo -e "${GREEN}🎉 Pipeline Complete!${NC}"
|
|
106
|
+
echo " All stages have been completed."
|
|
107
107
|
else
|
|
108
|
-
echo -e "${GREEN}✓${NC}
|
|
108
|
+
echo -e "${GREEN}✓${NC} Stage $STAGE_ID completed"
|
|
109
109
|
echo ""
|
|
110
|
-
echo -e "${BLUE}
|
|
111
|
-
echo "
|
|
110
|
+
echo -e "${BLUE}Next stage: $next_stage${NC}"
|
|
111
|
+
echo " Run: /run-stage $next_stage"
|
|
112
112
|
fi
|
|
113
113
|
|
|
114
114
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
#
|
|
117
|
+
# Execute
|
|
118
118
|
echo ""
|
|
119
119
|
validate_completion
|
|
120
120
|
check_handoff
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# pre-stage.sh -
|
|
2
|
+
# pre-stage.sh - Pre-stage execution hook
|
|
3
3
|
# claude-symphony workflow pipeline
|
|
4
4
|
|
|
5
5
|
set -e
|
|
@@ -8,7 +8,7 @@ STAGE_ID="$1"
|
|
|
8
8
|
PROJECT_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
9
9
|
PROGRESS_FILE="$PROJECT_ROOT/state/progress.json"
|
|
10
10
|
|
|
11
|
-
#
|
|
11
|
+
# Color definitions
|
|
12
12
|
RED='\033[0;31m'
|
|
13
13
|
GREEN='\033[0;32m'
|
|
14
14
|
YELLOW='\033[1;33m'
|
|
@@ -21,45 +21,45 @@ echo "━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
21
21
|
echo "🔍 Pre-Stage Hook: $STAGE_ID"
|
|
22
22
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
23
23
|
|
|
24
|
-
# 1.
|
|
24
|
+
# 1. Check if previous stage is completed
|
|
25
25
|
check_prerequisites() {
|
|
26
26
|
local stage_num=$(echo "$STAGE_ID" | cut -d'-' -f1)
|
|
27
27
|
|
|
28
|
-
# 01
|
|
28
|
+
# Stage 01 has no prerequisites
|
|
29
29
|
if [ "$stage_num" == "01" ]; then
|
|
30
|
-
echo -e "${GREEN}✓${NC}
|
|
30
|
+
echo -e "${GREEN}✓${NC} First stage - No prerequisites"
|
|
31
31
|
return 0
|
|
32
32
|
fi
|
|
33
33
|
|
|
34
|
-
#
|
|
34
|
+
# Calculate previous stage number
|
|
35
35
|
local prev_num=$(printf "%02d" $((10#$stage_num - 1)))
|
|
36
36
|
local prev_stage=$(ls "$PROJECT_ROOT/stages/" | grep "^${prev_num}-" | head -1)
|
|
37
37
|
|
|
38
38
|
if [ -z "$prev_stage" ]; then
|
|
39
|
-
echo -e "${RED}✗${NC}
|
|
39
|
+
echo -e "${RED}✗${NC} Cannot find previous stage: $prev_num"
|
|
40
40
|
return 1
|
|
41
41
|
fi
|
|
42
42
|
|
|
43
|
-
#
|
|
43
|
+
# Check previous stage status
|
|
44
44
|
local prev_status=$(jq -r ".stages.\"$prev_stage\".status" "$PROGRESS_FILE" 2>/dev/null || echo "pending")
|
|
45
45
|
|
|
46
46
|
if [ "$prev_status" != "completed" ]; then
|
|
47
|
-
echo -e "${RED}✗${NC}
|
|
48
|
-
echo "
|
|
47
|
+
echo -e "${RED}✗${NC} Previous stage not completed: $prev_stage (status: $prev_status)"
|
|
48
|
+
echo " Please complete the previous stage first."
|
|
49
49
|
return 1
|
|
50
50
|
fi
|
|
51
51
|
|
|
52
|
-
echo -e "${GREEN}✓${NC}
|
|
52
|
+
echo -e "${GREEN}✓${NC} Previous stage completed: $prev_stage"
|
|
53
53
|
return 0
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
# 2. HANDOFF.md
|
|
56
|
+
# 2. Check HANDOFF.md exists
|
|
57
57
|
check_handoff() {
|
|
58
58
|
local stage_num=$(echo "$STAGE_ID" | cut -d'-' -f1)
|
|
59
59
|
|
|
60
|
-
# 01
|
|
60
|
+
# Stage 01 doesn't need handoff
|
|
61
61
|
if [ "$stage_num" == "01" ]; then
|
|
62
|
-
echo -e "${GREEN}✓${NC}
|
|
62
|
+
echo -e "${GREEN}✓${NC} First stage - No handoff needed"
|
|
63
63
|
return 0
|
|
64
64
|
fi
|
|
65
65
|
|
|
@@ -68,62 +68,62 @@ check_handoff() {
|
|
|
68
68
|
local handoff_file="$PROJECT_ROOT/stages/$prev_stage/HANDOFF.md"
|
|
69
69
|
|
|
70
70
|
if [ ! -f "$handoff_file" ]; then
|
|
71
|
-
echo -e "${RED}✗${NC} HANDOFF.md
|
|
72
|
-
echo "
|
|
71
|
+
echo -e "${RED}✗${NC} HANDOFF.md missing: $handoff_file"
|
|
72
|
+
echo " Please run /handoff in the previous stage."
|
|
73
73
|
return 1
|
|
74
74
|
fi
|
|
75
75
|
|
|
76
|
-
echo -e "${GREEN}✓${NC} HANDOFF.md
|
|
76
|
+
echo -e "${GREEN}✓${NC} HANDOFF.md exists: $prev_stage/HANDOFF.md"
|
|
77
77
|
return 0
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
# 3.
|
|
80
|
+
# 3. Check required input files
|
|
81
81
|
check_inputs() {
|
|
82
82
|
local config_file="$PROJECT_ROOT/stages/$STAGE_ID/config.yaml"
|
|
83
83
|
|
|
84
84
|
if [ ! -f "$config_file" ]; then
|
|
85
|
-
echo -e "${YELLOW}⚠${NC} config.yaml
|
|
85
|
+
echo -e "${YELLOW}⚠${NC} config.yaml missing - Skipping input file validation"
|
|
86
86
|
return 0
|
|
87
87
|
fi
|
|
88
88
|
|
|
89
|
-
#
|
|
89
|
+
# Extract required inputs from YAML (simple parsing)
|
|
90
90
|
local inputs=$(grep -A100 "^inputs:" "$config_file" | grep -A50 "required:" | grep "name:" | head -5)
|
|
91
91
|
|
|
92
92
|
if [ -z "$inputs" ]; then
|
|
93
|
-
echo -e "${GREEN}✓${NC}
|
|
93
|
+
echo -e "${GREEN}✓${NC} No required input files"
|
|
94
94
|
return 0
|
|
95
95
|
fi
|
|
96
96
|
|
|
97
|
-
echo "
|
|
98
|
-
#
|
|
99
|
-
echo -e "${GREEN}✓${NC}
|
|
97
|
+
echo "Checking required input files..."
|
|
98
|
+
# In actual implementation, YAML parser recommended
|
|
99
|
+
echo -e "${GREEN}✓${NC} Input file validation complete"
|
|
100
100
|
return 0
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
# 4.
|
|
103
|
+
# 4. Check checkpoint (required stages)
|
|
104
104
|
check_checkpoint() {
|
|
105
105
|
local stage_num=$(echo "$STAGE_ID" | cut -d'-' -f1)
|
|
106
106
|
|
|
107
|
-
# 06, 07
|
|
107
|
+
# Stage 06, 07 check for previous checkpoint
|
|
108
108
|
if [ "$stage_num" == "07" ]; then
|
|
109
109
|
local cp_count=$(jq '.checkpoints | length' "$PROGRESS_FILE" 2>/dev/null || echo "0")
|
|
110
110
|
|
|
111
111
|
if [ "$cp_count" == "0" ]; then
|
|
112
|
-
echo -e "${YELLOW}⚠${NC}
|
|
113
|
-
echo "
|
|
114
|
-
echo " /checkpoint
|
|
112
|
+
echo -e "${YELLOW}⚠${NC} Warning: No checkpoints exist."
|
|
113
|
+
echo " Checkpoint creation before refactoring is recommended."
|
|
114
|
+
echo " Please run /checkpoint"
|
|
115
115
|
else
|
|
116
|
-
echo -e "${GREEN}✓${NC}
|
|
116
|
+
echo -e "${GREEN}✓${NC} Checkpoints exist: $cp_count"
|
|
117
117
|
fi
|
|
118
118
|
fi
|
|
119
119
|
|
|
120
120
|
return 0
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
# 5.
|
|
123
|
+
# 5. Check context status (warning if 50% or below)
|
|
124
124
|
check_context_status() {
|
|
125
125
|
if [ ! -f "$CONTEXT_TRIGGER_FILE" ]; then
|
|
126
|
-
echo -e "${GREEN}✓${NC}
|
|
126
|
+
echo -e "${GREEN}✓${NC} Context status normal"
|
|
127
127
|
return 0
|
|
128
128
|
fi
|
|
129
129
|
|
|
@@ -136,43 +136,43 @@ check_context_status() {
|
|
|
136
136
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
137
137
|
|
|
138
138
|
if [ "$LEVEL" = "critical" ]; then
|
|
139
|
-
echo -e "${RED}⚠️
|
|
139
|
+
echo -e "${RED}⚠️ Context critical state (${REMAINING}% remaining)${NC}"
|
|
140
140
|
echo ""
|
|
141
|
-
echo "
|
|
142
|
-
echo "
|
|
141
|
+
echo "Auto-snapshot has been saved."
|
|
142
|
+
echo "Running /compact or /clear before starting is recommended."
|
|
143
143
|
echo ""
|
|
144
|
-
echo -e "${YELLOW}
|
|
144
|
+
echo -e "${YELLOW}Do you want to continue? (y/n)${NC}"
|
|
145
145
|
else
|
|
146
|
-
echo -e "${YELLOW}⚠️
|
|
146
|
+
echo -e "${YELLOW}⚠️ Context low warning (${REMAINING}% remaining)${NC}"
|
|
147
147
|
echo ""
|
|
148
|
-
echo "
|
|
149
|
-
echo "
|
|
148
|
+
echo "Auto-snapshot has been saved."
|
|
149
|
+
echo "Running /compact is recommended for long work stages."
|
|
150
150
|
echo ""
|
|
151
|
-
echo -e "${CYAN}
|
|
151
|
+
echo -e "${CYAN}Do you want to continue? (y/n)${NC}"
|
|
152
152
|
fi
|
|
153
153
|
|
|
154
154
|
read -r response </dev/tty 2>/dev/null || response="y"
|
|
155
155
|
|
|
156
156
|
if [ "$response" != "y" ] && [ "$response" != "Y" ]; then
|
|
157
157
|
echo ""
|
|
158
|
-
echo "
|
|
159
|
-
echo " → /compact
|
|
160
|
-
echo " →
|
|
158
|
+
echo "Stage start cancelled."
|
|
159
|
+
echo " → Run /compact and try again."
|
|
160
|
+
echo " → Snapshot location: state/context/"
|
|
161
161
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
162
162
|
return 1
|
|
163
163
|
fi
|
|
164
164
|
|
|
165
165
|
echo ""
|
|
166
|
-
echo -e "${GREEN}✓${NC}
|
|
166
|
+
echo -e "${GREEN}✓${NC} User confirmation complete - Proceeding with stage"
|
|
167
167
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
168
168
|
return 0
|
|
169
169
|
fi
|
|
170
170
|
|
|
171
|
-
echo -e "${GREEN}✓${NC}
|
|
171
|
+
echo -e "${GREEN}✓${NC} Context status normal"
|
|
172
172
|
return 0
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
#
|
|
175
|
+
# Execute
|
|
176
176
|
echo ""
|
|
177
177
|
check_context_status || exit 1
|
|
178
178
|
check_prerequisites || exit 1
|
|
@@ -182,5 +182,5 @@ check_checkpoint
|
|
|
182
182
|
|
|
183
183
|
echo ""
|
|
184
184
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
185
|
-
echo -e "${GREEN}✓${NC} Pre-Stage Hook
|
|
185
|
+
echo -e "${GREEN}✓${NC} Pre-Stage Hook complete - Stage execution ready"
|
|
186
186
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|