codex-genesis-harness 0.1.1 → 0.1.4
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/.codebase/ARCHITECTURE_REVIEW_COMPLETE.md +216 -0
- package/.codebase/CURRENT_STATE.md +2 -0
- package/.codebase/DOMAIN_MODELS.md +5 -3
- package/.codebase/FILE_NAMING_CLARIFICATION.md +161 -0
- package/.codebase/HARNESS_COMPLETENESS_AUDIT.md +613 -0
- package/.codebase/IMPLEMENTATION_COMPLETE.md +429 -0
- package/.codebase/IMPLEMENTATION_HANDOFF.md +351 -0
- package/.codebase/IMPROVEMENTS_SUMMARY.md +419 -0
- package/.codebase/PHASE3_SKILLS_NAMING_COMPLETE.md +292 -0
- package/.codebase/PHASE_DEPENDENCY_MAP.md +486 -0
- package/.codebase/QUICK_START_SPEC_IMPACT.md +456 -0
- package/.codebase/README.md +139 -0
- package/.codebase/RECOVERY_POINTS.md +438 -0
- package/.codex/skills/genesis-api-sync/SKILL.md +354 -0
- package/.codex/skills/genesis-api-sync/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-api-sync/checklists/api-sync-checklist.md +101 -0
- package/.codex/skills/genesis-api-sync/examples/example.md +68 -0
- package/.codex/skills/genesis-api-sync/templates/api-change-template.md +257 -0
- package/.codex/skills/genesis-debug-guide/SKILL.md +479 -0
- package/.codex/skills/genesis-debug-guide/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-debug-guide/checklists/flaky-test-investigation.md +339 -0
- package/.codex/skills/genesis-debug-guide/checklists/production-bug-debug.md +210 -0
- package/.codex/skills/genesis-debug-guide/checklists/test-failure-debug.md +158 -0
- package/.codex/skills/genesis-debug-guide/examples/example.md +48 -0
- package/.codex/skills/genesis-debug-guide/observability/debug-commands.md +365 -0
- package/.codex/skills/genesis-debug-guide/playbooks/unit-test-failures.md +289 -0
- package/.codex/skills/genesis-debug-guide/templates/debug-investigation-log.md +288 -0
- package/.codex/skills/genesis-docs-automation/SKILL.md +1003 -0
- package/.codex/skills/genesis-docs-automation/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-docs-automation/checklists/docs-validation.md +359 -0
- package/.codex/skills/genesis-docs-automation/checklists/spec-alignment.md +312 -0
- package/.codex/skills/genesis-docs-automation/examples/example.md +59 -0
- package/.codex/skills/genesis-docs-automation/observability/docs-tracking.md +382 -0
- package/.codex/skills/genesis-docs-automation/playbooks/auto-update-flow.md +851 -0
- package/.codex/skills/genesis-docs-automation/playbooks/changelog-generation.md +491 -0
- package/.codex/skills/genesis-docs-automation/templates/changelog-entry-template.md +187 -0
- package/.codex/skills/genesis-docs-automation/templates/handoff-template.md +297 -0
- package/.codex/skills/genesis-harness/SKILL.md +734 -82
- package/.codex/skills/genesis-harness/checklists/bug-fix-qa.md +169 -0
- package/.codex/skills/genesis-harness/checklists/new-feature-qa.md +157 -0
- package/.codex/skills/genesis-harness/checklists/refactor-qa.md +216 -0
- package/.codex/skills/genesis-harness/checklists/requirements-validation.md +211 -0
- package/.codex/skills/genesis-harness/resources/change-impact-matrix-template.md +204 -0
- package/.codex/skills/genesis-harness/resources/foundation-phase-template.md +131 -0
- package/.codex/skills/genesis-harness/resources/phase-00-foundation-template.md +76 -0
- package/.codex/skills/genesis-harness/resources/post-implementation-guide.md +347 -0
- package/.codex/skills/genesis-harness/scripts/check-architecture-boundaries.sh +23 -23
- package/.codex/skills/genesis-harness/scripts/check-docs-sync.sh +24 -24
- package/.codex/skills/genesis-harness/scripts/check-no-debug-logs.sh +21 -21
- package/.codex/skills/genesis-harness/scripts/check-required-planning-files.sh +46 -46
- package/.codex/skills/genesis-harness/scripts/check-spec-changelog.sh +24 -24
- package/.codex/skills/genesis-harness/scripts/check-task-tracking.sh +25 -25
- package/.codex/skills/genesis-harness/scripts/compact-context.sh +54 -0
- package/.codex/skills/genesis-harness/scripts/create-adr.sh +74 -74
- package/.codex/skills/genesis-harness/scripts/create-bug.sh +160 -160
- package/.codex/skills/genesis-harness/scripts/create-feature.sh +217 -217
- package/.codex/skills/genesis-harness/scripts/detect-stack.sh +26 -26
- package/.codex/skills/genesis-harness/scripts/init-planning.sh +750 -719
- package/.codex/skills/genesis-harness/scripts/list-changed-files.sh +12 -12
- package/.codex/skills/genesis-harness/scripts/offload-log.sh +72 -0
- package/.codex/skills/genesis-harness/scripts/run-verification.sh +47 -47
- package/.codex/skills/genesis-harness/scripts/run-verify-loop.sh +75 -0
- package/.codex/skills/genesis-harness/scripts/update-state.sh +33 -33
- package/.codex/skills/genesis-harness-engineering/SKILL.md +159 -0
- package/.codex/skills/genesis-harness-engineering/checklists/checklist.md +48 -0
- package/.codex/skills/genesis-harness-engineering/examples/example.md +57 -0
- package/.codex/skills/genesis-harness-engineering/playbooks/harness-evolution.md +99 -0
- package/.codex/skills/genesis-harness-engineering/templates/harness-change-template.md +37 -0
- package/.codex/skills/genesis-observability-automation/SKILL.md +382 -0
- package/.codex/skills/genesis-observability-automation/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-observability-automation/examples/example.md +86 -0
- package/.codex/skills/genesis-performance-profiling/SKILL.md +510 -0
- package/.codex/skills/genesis-performance-profiling/agents/openai.yaml +6 -0
- package/.codex/skills/genesis-performance-profiling/checklists/optimization-verification.md +199 -0
- package/.codex/skills/genesis-performance-profiling/checklists/performance-baseline.md +183 -0
- package/.codex/skills/genesis-performance-profiling/examples/example.md +234 -0
- package/.codex/skills/genesis-performance-profiling/observability/performance-tracking.md +202 -0
- package/.codex/skills/genesis-performance-profiling/playbooks/load-testing-orchestration.md +593 -0
- package/.codex/skills/genesis-performance-profiling/playbooks/profiling-playbook.md +601 -0
- package/.codex/skills/genesis-performance-profiling/templates/load-test-config-template.md +428 -0
- package/.codex/skills/genesis-performance-profiling/templates/performance-report-template.md +238 -0
- package/.codex/skills/genesis-release-orchestration/SKILL.md +653 -0
- package/.codex/skills/genesis-release-orchestration/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-release-orchestration/checklists/post-deployment-verification.md +274 -0
- package/.codex/skills/genesis-release-orchestration/checklists/pre-release-validation.md +220 -0
- package/.codex/skills/genesis-release-orchestration/examples/example.md +78 -0
- package/.codex/skills/genesis-release-orchestration/observability/release-tracking.md +253 -0
- package/.codex/skills/genesis-release-orchestration/playbooks/canary-deployment-orchestration.md +472 -0
- package/.codex/skills/genesis-release-orchestration/playbooks/semantic-versioning-automation.md +494 -0
- package/.codex/skills/genesis-release-orchestration/templates/deployment-strategy-template.md +303 -0
- package/.codex/skills/genesis-release-orchestration/templates/release-runbook-template.md +420 -0
- package/.codex/skills/genesis-research-first/SKILL.md +237 -0
- package/.codex/skills/genesis-research-first/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-research-first/examples/example.md +85 -0
- package/.codex/skills/genesis-spec-propagation/SKILL.md +534 -0
- package/.codex/skills/genesis-spec-propagation/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-spec-propagation/checklists/phase-update-verification.md +384 -0
- package/.codex/skills/genesis-spec-propagation/checklists/spec-change-detection.md +257 -0
- package/.codex/skills/genesis-spec-propagation/examples/example.md +63 -0
- package/.codex/skills/genesis-spec-propagation/observability/propagation-tracking.md +373 -0
- package/.codex/skills/genesis-spec-propagation/playbooks/breaking-change-propagation.md +692 -0
- package/.codex/skills/genesis-spec-propagation/playbooks/feature-change-propagation.md +434 -0
- package/.codex/skills/genesis-spec-propagation/templates/migration-guide-template.md +407 -0
- package/.codex/skills/spec-impact-engine/SKILL.md +504 -0
- package/.codex/skills/spec-impact-engine/agents/openai.yaml +7 -0
- package/.codex/skills/spec-impact-engine/detect-spec-changes.sh +262 -0
- package/.codex/skills/spec-impact-engine/examples/example.md +98 -0
- package/.codex/skills/spec-impact-engine/templates/impact-report.md +248 -0
- package/.codex/skills/spec-impact-engine/templates/migration-guide.md +223 -0
- package/.codex-plugin/plugin.json +1 -1
- package/README.EN.md +719 -0
- package/README.VI.md +712 -0
- package/README.md +261 -107
- package/VERSION +1 -1
- package/bin/genesis-harness.js +20 -11
- package/package.json +1 -1
- package/scripts/README.md +342 -0
- package/scripts/compact-context.sh +54 -0
- package/scripts/detect-changes.sh +152 -0
- package/scripts/install.sh +50 -41
- package/scripts/offload-log.sh +72 -0
- package/scripts/run-evals.sh +70 -43
- package/scripts/run-verify-loop.sh +75 -0
- package/scripts/uninstall.sh +52 -43
- package/scripts/verify.sh +165 -73
- package/.codex/skills/harness-engineering-skill/SKILL.md +0 -45
- package/.codex/skills/harness-engineering-skill/checklists/checklist.md +0 -8
- package/.codex/skills/harness-engineering-skill/examples/example.md +0 -4
- package/.codex/skills/harness-engineering-skill/templates/harness-change-template.md +0 -8
- /package/.codex/skills/{ai-provider-skill → genesis-ai-provider}/SKILL.md +0 -0
- /package/.codex/skills/{ai-provider-skill → genesis-ai-provider}/agents/openai.yaml +0 -0
- /package/.codex/skills/{ai-provider-skill → genesis-ai-provider}/checklists/checklist.md +0 -0
- /package/.codex/skills/{ai-provider-skill → genesis-ai-provider}/examples/example.md +0 -0
- /package/.codex/skills/{ai-provider-skill → genesis-ai-provider}/templates/provider-contract-template.md +0 -0
- /package/.codex/skills/{api-contract-skill → genesis-api-contract}/SKILL.md +0 -0
- /package/.codex/skills/{api-contract-skill → genesis-api-contract}/agents/openai.yaml +0 -0
- /package/.codex/skills/{api-contract-skill → genesis-api-contract}/checklists/checklist.md +0 -0
- /package/.codex/skills/{api-contract-skill → genesis-api-contract}/examples/example.md +0 -0
- /package/.codex/skills/{api-contract-skill → genesis-api-contract}/templates/api-contract-template.md +0 -0
- /package/.codex/skills/{architecture-skill → genesis-architecture}/SKILL.md +0 -0
- /package/.codex/skills/{architecture-skill → genesis-architecture}/agents/openai.yaml +0 -0
- /package/.codex/skills/{architecture-skill → genesis-architecture}/checklists/checklist.md +0 -0
- /package/.codex/skills/{architecture-skill → genesis-architecture}/examples/example.md +0 -0
- /package/.codex/skills/{architecture-skill → genesis-architecture}/templates/architecture-decision-template.md +0 -0
- /package/.codex/skills/{codebase-map-skill → genesis-codebase-map}/SKILL.md +0 -0
- /package/.codex/skills/{codebase-map-skill → genesis-codebase-map}/agents/openai.yaml +0 -0
- /package/.codex/skills/{codebase-map-skill → genesis-codebase-map}/checklists/checklist.md +0 -0
- /package/.codex/skills/{codebase-map-skill → genesis-codebase-map}/examples/example.md +0 -0
- /package/.codex/skills/{codebase-map-skill → genesis-codebase-map}/templates/map-update-template.md +0 -0
- /package/.codex/skills/{design-spec-skill → genesis-design-spec}/SKILL.md +0 -0
- /package/.codex/skills/{design-spec-skill → genesis-design-spec}/agents/openai.yaml +0 -0
- /package/.codex/skills/{design-spec-skill → genesis-design-spec}/checklists/checklist.md +0 -0
- /package/.codex/skills/{design-spec-skill → genesis-design-spec}/examples/example.md +0 -0
- /package/.codex/skills/{design-spec-skill → genesis-design-spec}/templates/design-spec-template.md +0 -0
- /package/.codex/skills/{docs-skill → genesis-docs}/SKILL.md +0 -0
- /package/.codex/skills/{docs-skill → genesis-docs}/agents/openai.yaml +0 -0
- /package/.codex/skills/{docs-skill → genesis-docs}/checklists/checklist.md +0 -0
- /package/.codex/skills/{docs-skill → genesis-docs}/examples/example.md +0 -0
- /package/.codex/skills/{docs-skill → genesis-docs}/templates/docs-update-template.md +0 -0
- /package/.codex/skills/{harness-engineering-skill → genesis-harness-engineering}/agents/openai.yaml +0 -0
- /package/.codex/skills/{pipeline-orchestration-skill → genesis-pipeline-orchestration}/SKILL.md +0 -0
- /package/.codex/skills/{pipeline-orchestration-skill → genesis-pipeline-orchestration}/agents/openai.yaml +0 -0
- /package/.codex/skills/{pipeline-orchestration-skill → genesis-pipeline-orchestration}/checklists/checklist.md +0 -0
- /package/.codex/skills/{pipeline-orchestration-skill → genesis-pipeline-orchestration}/examples/example.md +0 -0
- /package/.codex/skills/{pipeline-orchestration-skill → genesis-pipeline-orchestration}/templates/orchestration-template.md +0 -0
- /package/.codex/skills/{planning-skill → genesis-planning}/SKILL.md +0 -0
- /package/.codex/skills/{planning-skill → genesis-planning}/agents/openai.yaml +0 -0
- /package/.codex/skills/{planning-skill → genesis-planning}/checklists/checklist.md +0 -0
- /package/.codex/skills/{planning-skill → genesis-planning}/examples/example.md +0 -0
- /package/.codex/skills/{planning-skill → genesis-planning}/templates/plan-template.md +0 -0
- /package/.codex/skills/{release-skill → genesis-release}/SKILL.md +0 -0
- /package/.codex/skills/{release-skill → genesis-release}/agents/openai.yaml +0 -0
- /package/.codex/skills/{release-skill → genesis-release}/checklists/checklist.md +0 -0
- /package/.codex/skills/{release-skill → genesis-release}/examples/example.md +0 -0
- /package/.codex/skills/{release-skill → genesis-release}/templates/release-checklist-template.md +0 -0
- /package/.codex/skills/{research-skill → genesis-research}/SKILL.md +0 -0
- /package/.codex/skills/{research-skill → genesis-research}/agents/openai.yaml +0 -0
- /package/.codex/skills/{research-skill → genesis-research}/checklists/checklist.md +0 -0
- /package/.codex/skills/{research-skill → genesis-research}/examples/example.md +0 -0
- /package/.codex/skills/{research-skill → genesis-research}/templates/research-note-template.md +0 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Spec Impact Engine - Core Detection Script
|
|
3
|
+
# Detects spec changes and calculates downstream impact
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/../../../" && pwd)"
|
|
9
|
+
PLANNING_DIR="$REPO_ROOT/.planning"
|
|
10
|
+
CODEBASE_DIR="$REPO_ROOT/.codebase"
|
|
11
|
+
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
|
|
12
|
+
|
|
13
|
+
# Colors
|
|
14
|
+
RED='\033[0;31m'
|
|
15
|
+
GREEN='\033[0;32m'
|
|
16
|
+
YELLOW='\033[1;33m'
|
|
17
|
+
BLUE='\033[0;34m'
|
|
18
|
+
NC='\033[0m' # No Color
|
|
19
|
+
|
|
20
|
+
# Log functions
|
|
21
|
+
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
22
|
+
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
23
|
+
log_warning() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
24
|
+
log_error() { echo -e "${RED}[✗]${NC} $1"; }
|
|
25
|
+
|
|
26
|
+
# Check if running in git repo
|
|
27
|
+
check_git_repo() {
|
|
28
|
+
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
|
29
|
+
log_error "Not a git repository"
|
|
30
|
+
return 1
|
|
31
|
+
fi
|
|
32
|
+
return 0
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# Get changed files since last commit
|
|
36
|
+
get_changed_files() {
|
|
37
|
+
local changed_docs=""
|
|
38
|
+
|
|
39
|
+
# Check REQUIREMENTS.md
|
|
40
|
+
if git diff --name-only | grep -q "\.planning/REQUIREMENTS\.md"; then
|
|
41
|
+
changed_docs="$changed_docs REQUIREMENTS.md"
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
# Check API_DOCS.md
|
|
45
|
+
if git diff --name-only | grep -q "\.planning/API_DOCS\.md"; then
|
|
46
|
+
changed_docs="$changed_docs API_DOCS.md"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
# Check ARCHITECTURE.md
|
|
50
|
+
if git diff --name-only | grep -q "\.planning/ARCHITECTURE\.md"; then
|
|
51
|
+
changed_docs="$changed_docs ARCHITECTURE.md"
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# Check DESIGN.md
|
|
55
|
+
if git diff --name-only | grep -q "\.planning/DESIGN\.md"; then
|
|
56
|
+
changed_docs="$changed_docs DESIGN.md"
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# Check STACK.md
|
|
60
|
+
if git diff --name-only | grep -q "\.planning/STACK\.md"; then
|
|
61
|
+
changed_docs="$changed_docs STACK.md"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# Check feature specs
|
|
65
|
+
if git diff --name-only | grep -q "\.planning/features/.*/SPEC\.md"; then
|
|
66
|
+
changed_docs="$changed_docs FEATURE_SPECS"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Check bug plans
|
|
70
|
+
if git diff --name-only | grep -q "\.planning/bugs/.*/PLAN\.md"; then
|
|
71
|
+
changed_docs="$changed_docs BUG_PLANS"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
echo "$changed_docs"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Detect breaking changes
|
|
78
|
+
detect_breaking_changes() {
|
|
79
|
+
local file="$1"
|
|
80
|
+
local breaking_changes=""
|
|
81
|
+
|
|
82
|
+
log_info "Analyzing $file for breaking changes..."
|
|
83
|
+
|
|
84
|
+
# API breaking changes patterns
|
|
85
|
+
if [[ "$file" == "API_DOCS.md" ]]; then
|
|
86
|
+
# Check for endpoint signature changes
|
|
87
|
+
if git diff "$PLANNING_DIR/API_DOCS.md" | grep -E "^\-.*GET|POST|PUT|DELETE" > /dev/null; then
|
|
88
|
+
breaking_changes="endpoint_signature_changed"
|
|
89
|
+
log_warning "BREAKING: Endpoint signature changed"
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
# Check for response format changes
|
|
93
|
+
if git diff "$PLANNING_DIR/API_DOCS.md" | grep -E "^\-.*\{.*\}" > /dev/null; then
|
|
94
|
+
breaking_changes="$breaking_changes response_format_changed"
|
|
95
|
+
log_warning "BREAKING: Response format changed"
|
|
96
|
+
fi
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# Database breaking changes
|
|
100
|
+
if [[ "$file" == "ARCHITECTURE.md" ]] || [[ "$file" == "REQUIREMENTS.md" ]]; then
|
|
101
|
+
if git diff "$PLANNING_DIR/$file" | grep -E "^\-.*schema|database|model" > /dev/null; then
|
|
102
|
+
breaking_changes="$breaking_changes schema_changed"
|
|
103
|
+
log_warning "BREAKING: Database schema changed"
|
|
104
|
+
fi
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
echo "$breaking_changes"
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# Identify affected phases
|
|
111
|
+
identify_affected_phases() {
|
|
112
|
+
local change_type="$1"
|
|
113
|
+
local affected_phases=""
|
|
114
|
+
|
|
115
|
+
if [[ -f "$CODEBASE_DIR/PHASE_DEPENDENCY_MAP.md" ]]; then
|
|
116
|
+
log_info "Reading phase dependency map..."
|
|
117
|
+
# This would parse PHASE_DEPENDENCY_MAP.md to find affected phases
|
|
118
|
+
# For now, scan all phase folders
|
|
119
|
+
|
|
120
|
+
for phase_dir in "$PLANNING_DIR"/features/*/; do
|
|
121
|
+
if [[ -f "$phase_dir/SPEC.md" ]]; then
|
|
122
|
+
local phase_name=$(basename "$phase_dir")
|
|
123
|
+
affected_phases="$affected_phases $phase_name"
|
|
124
|
+
fi
|
|
125
|
+
done
|
|
126
|
+
|
|
127
|
+
log_success "Identified $(echo $affected_phases | wc -w) affected phases"
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
echo "$affected_phases"
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
# Calculate impact severity
|
|
134
|
+
calculate_severity() {
|
|
135
|
+
local change_type="$1"
|
|
136
|
+
local severity="low"
|
|
137
|
+
|
|
138
|
+
case "$change_type" in
|
|
139
|
+
*endpoint_signature_changed*)
|
|
140
|
+
severity="high"
|
|
141
|
+
;;
|
|
142
|
+
*response_format_changed*)
|
|
143
|
+
severity="high"
|
|
144
|
+
;;
|
|
145
|
+
*schema_changed*)
|
|
146
|
+
severity="medium"
|
|
147
|
+
;;
|
|
148
|
+
*requirement_changed*)
|
|
149
|
+
severity="medium"
|
|
150
|
+
;;
|
|
151
|
+
*)
|
|
152
|
+
severity="low"
|
|
153
|
+
;;
|
|
154
|
+
esac
|
|
155
|
+
|
|
156
|
+
echo "$severity"
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
# Generate impact report
|
|
160
|
+
generate_impact_report() {
|
|
161
|
+
local changed_file="$1"
|
|
162
|
+
local breaking_changes="$2"
|
|
163
|
+
local affected_phases="$3"
|
|
164
|
+
local severity="$4"
|
|
165
|
+
|
|
166
|
+
local report_file="$CODEBASE_DIR/IMPACT_REPORT_$TIMESTAMP.md"
|
|
167
|
+
|
|
168
|
+
log_info "Generating impact report: $report_file"
|
|
169
|
+
|
|
170
|
+
cat > "$report_file" << EOF
|
|
171
|
+
# Spec Change Impact Report
|
|
172
|
+
|
|
173
|
+
**Date**: $(date '+%Y-%m-%d %H:%M:%S')
|
|
174
|
+
**Changed File**: $changed_file
|
|
175
|
+
**Breaking Changes**: $breaking_changes
|
|
176
|
+
**Severity**: $severity
|
|
177
|
+
|
|
178
|
+
## Summary
|
|
179
|
+
|
|
180
|
+
File \`$changed_file\` was modified.
|
|
181
|
+
|
|
182
|
+
**Change Type(s)**: $breaking_changes
|
|
183
|
+
**Severity Level**: $severity
|
|
184
|
+
|
|
185
|
+
## Affected Phases
|
|
186
|
+
|
|
187
|
+
EOF
|
|
188
|
+
|
|
189
|
+
local phase_count=0
|
|
190
|
+
for phase in $affected_phases; do
|
|
191
|
+
phase_count=$((phase_count + 1))
|
|
192
|
+
echo "- $phase" >> "$report_file"
|
|
193
|
+
done
|
|
194
|
+
|
|
195
|
+
cat >> "$report_file" << EOF
|
|
196
|
+
|
|
197
|
+
**Total Phases Affected**: $phase_count
|
|
198
|
+
|
|
199
|
+
## Recommended Actions
|
|
200
|
+
|
|
201
|
+
1. ✅ Review breaking changes
|
|
202
|
+
2. → Update affected phase specs
|
|
203
|
+
3. → Update test contracts
|
|
204
|
+
4. → Run validation tests
|
|
205
|
+
5. → Generate migration guides
|
|
206
|
+
6. → Update ROADMAP.md if timeline affected
|
|
207
|
+
|
|
208
|
+
## Validation Checklist
|
|
209
|
+
|
|
210
|
+
- [ ] All affected phases reviewed
|
|
211
|
+
- [ ] Phase specs updated
|
|
212
|
+
- [ ] Tests passing
|
|
213
|
+
- [ ] Migration guides created
|
|
214
|
+
- [ ] Timeline recalculated
|
|
215
|
+
- [ ] Team notified
|
|
216
|
+
|
|
217
|
+
## Next Steps
|
|
218
|
+
|
|
219
|
+
Run: \`invoke spec-impact-engine /propagate-spec\`
|
|
220
|
+
|
|
221
|
+
To automatically update all affected downstream phases.
|
|
222
|
+
|
|
223
|
+
EOF
|
|
224
|
+
|
|
225
|
+
log_success "Impact report created: $report_file"
|
|
226
|
+
cat "$report_file"
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
# Main execution
|
|
230
|
+
main() {
|
|
231
|
+
log_info "Starting spec impact analysis..."
|
|
232
|
+
|
|
233
|
+
if ! check_git_repo; then
|
|
234
|
+
log_error "Must be run from a git repository"
|
|
235
|
+
exit 1
|
|
236
|
+
fi
|
|
237
|
+
|
|
238
|
+
local changed_files=$(get_changed_files)
|
|
239
|
+
|
|
240
|
+
if [[ -z "$changed_files" ]]; then
|
|
241
|
+
log_warning "No spec files changed"
|
|
242
|
+
exit 0
|
|
243
|
+
fi
|
|
244
|
+
|
|
245
|
+
log_success "Detected changes: $changed_files"
|
|
246
|
+
|
|
247
|
+
for file in $changed_files; do
|
|
248
|
+
log_info "Processing: $file"
|
|
249
|
+
|
|
250
|
+
local breaking=$(detect_breaking_changes "$file")
|
|
251
|
+
if [[ -n "$breaking" ]]; then
|
|
252
|
+
local affected=$(identify_affected_phases "$breaking")
|
|
253
|
+
local severity=$(calculate_severity "$breaking")
|
|
254
|
+
|
|
255
|
+
generate_impact_report "$file" "$breaking" "$affected" "$severity"
|
|
256
|
+
fi
|
|
257
|
+
done
|
|
258
|
+
|
|
259
|
+
log_success "Spec impact analysis complete"
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
main "$@"
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Example: Detecting Impact of a Breaking API Change
|
|
2
|
+
|
|
3
|
+
## Scenario
|
|
4
|
+
|
|
5
|
+
Phase 1 API contract changes — `GET /api/users/:id` response field `role` (string) is replaced by `roles` (array of strings). This is a breaking change.
|
|
6
|
+
|
|
7
|
+
## Trigger
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
/spec-change .planning/API_DOCS.md
|
|
11
|
+
# spec-impact-engine activates automatically
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Or manually:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
invoke spec-impact-engine
|
|
18
|
+
# Parameters:
|
|
19
|
+
# changed_files: [".planning/API_DOCS.md"]
|
|
20
|
+
# impact_scope: "all"
|
|
21
|
+
# auto_update: true
|
|
22
|
+
# notify: true
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Phase 1: Change Detection
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Analyzing: .planning/API_DOCS.md
|
|
29
|
+
|
|
30
|
+
Detected change:
|
|
31
|
+
Type: BREAKING
|
|
32
|
+
Section: GET /api/users/:id → response
|
|
33
|
+
Old: { name, email, role: string }
|
|
34
|
+
New: { id, name, email, roles: string[] }
|
|
35
|
+
Severity: HIGH
|
|
36
|
+
Reason: Field renamed and type changed (string → array)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Phase 2: Dependency Analysis
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
Building dependency graph from .codebase/PHASE_DEPENDENCY_MAP.md...
|
|
43
|
+
|
|
44
|
+
Phase 2 (Tests): depends on Phase 1 API ← AFFECTED
|
|
45
|
+
Phase 3 (Backend): depends on Phase 1 API ← AFFECTED
|
|
46
|
+
Phase 4 (SDK): depends on Phase 3 ← AFFECTED (transitive)
|
|
47
|
+
Phase 5 (E2E): depends on Phase 4 ← AFFECTED (transitive)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Phase 3: Impact Calculation
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Impact chain (DFS from Phase 1):
|
|
54
|
+
|
|
55
|
+
Phase 2 → MEDIUM: 5 mock assertions use `role` field
|
|
56
|
+
Phase 3 → HIGH: Response builder returns `role`, not `roles[]`
|
|
57
|
+
Phase 4 → MEDIUM: interface User has `role: string`, not `roles: string[]`
|
|
58
|
+
Phase 5 → LOW: 2 E2E scenarios check for role-based access
|
|
59
|
+
|
|
60
|
+
Update order: Phase 2 → Phase 3 → Phase 4 → Phase 5
|
|
61
|
+
Total estimate: ~2 hours
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Phase 4: Auto-Updates Applied
|
|
65
|
+
|
|
66
|
+
- **Phase 2** `tests/api-mocks.test.ts`:
|
|
67
|
+
- `expect(response.role).toBe('admin')` → `expect(response.roles).toContain('admin')`
|
|
68
|
+
- **Phase 3** `contracts/api/GetUser/response.json`:
|
|
69
|
+
- Schema updated: `roles: { type: "array", items: { type: "string" } }`
|
|
70
|
+
- **Phase 4** `types/api.ts`:
|
|
71
|
+
- `role: string` → `roles: string[]`
|
|
72
|
+
- **Phase 5** `playwright/e2e/user-profile.spec.ts`:
|
|
73
|
+
- Updated 2 role-check assertions
|
|
74
|
+
|
|
75
|
+
## Impact Report Generated
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
.codebase/IMPACT_REPORT_2026-05-31_14-30-00.md created:
|
|
79
|
+
- 4 phases affected
|
|
80
|
+
- 8 files auto-updated
|
|
81
|
+
- 2 hours timeline impact
|
|
82
|
+
- Migration guide generated: templates/migration-guide.md
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## SPEC_CHANGELOG.md Entry
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
- 2026-05-31T14:30:00Z | BREAKING | API field role → roles[] in GET /api/users/:id
|
|
89
|
+
Affected: Phase 2, 3, 4, 5 | Auto-updated: yes | Migration guide: IMPACT_REPORT_...
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Outcome
|
|
93
|
+
|
|
94
|
+
- ✅ Breaking change detected immediately
|
|
95
|
+
- ✅ All 4 downstream phases auto-updated
|
|
96
|
+
- ✅ Tests re-run and passing
|
|
97
|
+
- ✅ Migration guide generated
|
|
98
|
+
- ✅ 45 min manual discovery + update → 30 min automated
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# Spec Change Impact Report
|
|
2
|
+
|
|
3
|
+
**Report ID**: IMPACT_{{TIMESTAMP}}
|
|
4
|
+
**Generated**: {{DATE}}
|
|
5
|
+
**Change Source**: {{CHANGED_FILE}}
|
|
6
|
+
**Severity**: {{SEVERITY}} <!-- HIGH | MEDIUM | LOW -->
|
|
7
|
+
**Change Type**: {{CHANGE_TYPE}} <!-- BREAKING | FEATURE | INTERNAL | DOC -->
|
|
8
|
+
**Reporter**: spec-impact-engine v1.0
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Executive Summary
|
|
13
|
+
|
|
14
|
+
{{CHANGE_SUMMARY_ONE_LINER}}
|
|
15
|
+
|
|
16
|
+
| Field | Value |
|
|
17
|
+
|-------|-------|
|
|
18
|
+
| Changed File | `{{CHANGED_FILE}}` |
|
|
19
|
+
| Changed Section | `{{CHANGED_SECTION}}` |
|
|
20
|
+
| Change Type | {{CHANGE_TYPE}} |
|
|
21
|
+
| Severity | {{SEVERITY}} |
|
|
22
|
+
| Phases Affected | {{AFFECTED_PHASE_COUNT}} |
|
|
23
|
+
| Estimated Update Time | {{ESTIMATED_HOURS}} hours |
|
|
24
|
+
| Manual Review Required | {{MANUAL_REVIEW}} |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Change Details
|
|
29
|
+
|
|
30
|
+
### What Changed
|
|
31
|
+
|
|
32
|
+
**Before**:
|
|
33
|
+
```
|
|
34
|
+
{{OLD_VALUE}}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**After**:
|
|
38
|
+
```
|
|
39
|
+
{{NEW_VALUE}}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Why It Changed
|
|
43
|
+
|
|
44
|
+
{{CHANGE_REASON}}
|
|
45
|
+
|
|
46
|
+
### Breaking Status
|
|
47
|
+
|
|
48
|
+
- [ ] **BREAKING** — Existing consumers will break without migration
|
|
49
|
+
- [ ] **FEATURE** — New capability added (backward compatible)
|
|
50
|
+
- [ ] **INTERNAL** — No external impact
|
|
51
|
+
|
|
52
|
+
**Breaking assessment**: {{BREAKING_ASSESSMENT}}
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Affected Phases
|
|
57
|
+
|
|
58
|
+
| Phase | Dependency Type | Impact Level | Action Required | Status |
|
|
59
|
+
|-------|----------------|-------------|----------------|--------|
|
|
60
|
+
| Phase 1 (Contracts) | {{P1_DEP_TYPE}} | {{P1_IMPACT}} | {{P1_ACTION}} | {{P1_STATUS}} |
|
|
61
|
+
| Phase 2 (Tests) | {{P2_DEP_TYPE}} | {{P2_IMPACT}} | {{P2_ACTION}} | {{P2_STATUS}} |
|
|
62
|
+
| Phase 3 (Backend) | {{P3_DEP_TYPE}} | {{P3_IMPACT}} | {{P3_ACTION}} | {{P3_STATUS}} |
|
|
63
|
+
| Phase 4 (SDK) | {{P4_DEP_TYPE}} | {{P4_IMPACT}} | {{P4_ACTION}} | {{P4_STATUS}} |
|
|
64
|
+
| Phase 5 (E2E) | {{P5_DEP_TYPE}} | {{P5_IMPACT}} | {{P5_ACTION}} | {{P5_STATUS}} |
|
|
65
|
+
|
|
66
|
+
**Legend**:
|
|
67
|
+
- Impact: HIGH = code must change, MEDIUM = review needed, LOW = informational, N/A = not affected
|
|
68
|
+
- Status: ⚠️ NEEDS UPDATE | 🔍 REVIEW | ✅ OK | ⛔ BLOCKED
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Detailed Impact Per Phase
|
|
73
|
+
|
|
74
|
+
### Phase 2: Tests
|
|
75
|
+
|
|
76
|
+
**Files affected**:
|
|
77
|
+
- `{{P2_FILE_1}}` — {{P2_CHANGE_DESC_1}}
|
|
78
|
+
- `{{P2_FILE_2}}` — {{P2_CHANGE_DESC_2}}
|
|
79
|
+
|
|
80
|
+
**Actions**:
|
|
81
|
+
- [ ] Update mock data: replace `{{OLD_FIELD}}` with `{{NEW_FIELD}}`
|
|
82
|
+
- [ ] Update assertions: verify response includes `{{NEW_FIELD}}`
|
|
83
|
+
- [ ] Remove obsolete assertions for `{{REMOVED_FIELD}}`
|
|
84
|
+
- [ ] Add test cases for new `{{NEW_BEHAVIOR}}`
|
|
85
|
+
- [ ] Validate: run `npm test -- {{P2_TEST_PATTERN}}`
|
|
86
|
+
|
|
87
|
+
**Estimated time**: {{P2_HOURS}} hours
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### Phase 3: Backend Implementation
|
|
92
|
+
|
|
93
|
+
**Files affected**:
|
|
94
|
+
- `{{P3_FILE_1}}` — {{P3_CHANGE_DESC_1}}
|
|
95
|
+
- `{{P3_FILE_2}}` — {{P3_CHANGE_DESC_2}}
|
|
96
|
+
|
|
97
|
+
**Actions**:
|
|
98
|
+
- [ ] Update API contract schema: `contracts/api/{{ENDPOINT}}/response.json`
|
|
99
|
+
- [ ] Update handler to return `{{NEW_FIELD}}` in response
|
|
100
|
+
- [ ] Add migration note to handler docstring
|
|
101
|
+
- [ ] Validate: run integration tests for `{{ENDPOINT}}`
|
|
102
|
+
|
|
103
|
+
**Estimated time**: {{P3_HOURS}} hours
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### Phase 4: Client SDK
|
|
108
|
+
|
|
109
|
+
**Files affected**:
|
|
110
|
+
- `{{P4_FILE_1}}` — {{P4_CHANGE_DESC_1}}
|
|
111
|
+
|
|
112
|
+
**Actions**:
|
|
113
|
+
- [ ] Update TypeScript interface: `{{INTERFACE_NAME}}`
|
|
114
|
+
- Remove field: `{{REMOVED_FIELD}}: {{OLD_TYPE}}`
|
|
115
|
+
- Add field: `{{NEW_FIELD}}: {{NEW_TYPE}}`
|
|
116
|
+
- [ ] Update serialization/deserialization if needed
|
|
117
|
+
- [ ] Add deprecation warning for removed field (if migration window active)
|
|
118
|
+
- [ ] Validate: run `tsc --noEmit` (no type errors)
|
|
119
|
+
|
|
120
|
+
**Estimated time**: {{P4_HOURS}} hours
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### Phase 5: E2E Tests
|
|
125
|
+
|
|
126
|
+
**Files affected**:
|
|
127
|
+
- `{{P5_FILE_1}}` — {{P5_CHANGE_DESC_1}}
|
|
128
|
+
|
|
129
|
+
**Actions**:
|
|
130
|
+
- [ ] Update scenario that checks `{{REMOVED_FIELD}}`
|
|
131
|
+
- [ ] Add scenario for `{{NEW_FIELD}}` behavior
|
|
132
|
+
- [ ] Validate: run `npx playwright test {{P5_TEST_PATTERN}}`
|
|
133
|
+
|
|
134
|
+
**Estimated time**: {{P5_HOURS}} hours
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Migration Strategy
|
|
139
|
+
|
|
140
|
+
### Recommended Execution Order
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
1. ✅ Phase 1: Contract updated (source of change)
|
|
144
|
+
2. → Phase 2: Update test mocks and assertions (est. {{P2_HOURS}} h)
|
|
145
|
+
3. → Phase 3: Update backend handler + response schema (est. {{P3_HOURS}} h)
|
|
146
|
+
4. → Phase 4: Update client SDK types (est. {{P4_HOURS}} h)
|
|
147
|
+
5. → Phase 5: Update E2E test scenarios (est. {{P5_HOURS}} h)
|
|
148
|
+
|
|
149
|
+
Total estimated: {{TOTAL_HOURS}} hours
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Topological Sort (Dependency Order)
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
Phase 1 → Phase 2 → Phase 3 → Phase 4 → Phase 5
|
|
156
|
+
```
|
|
157
|
+
Phases must be updated in this order to avoid downstream breakage.
|
|
158
|
+
|
|
159
|
+
### Rollback Plan
|
|
160
|
+
|
|
161
|
+
If propagation fails at any phase:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# Rollback Phase 2 only (if Phase 2 update broke tests):
|
|
165
|
+
git revert HEAD -- .planning/features/{{PHASE2_FEATURE}}/
|
|
166
|
+
npm test # verify passing again
|
|
167
|
+
|
|
168
|
+
# Rollback entire change (if cascading failures):
|
|
169
|
+
git revert <propagation-commit>
|
|
170
|
+
# Then manually review the spec change requirement before re-attempting
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Auto-Generated Updates Log
|
|
176
|
+
|
|
177
|
+
| File | Update Type | Status | Timestamp |
|
|
178
|
+
|------|------------|--------|-----------|
|
|
179
|
+
| `{{FILE_1}}` | Mock data updated | {{STATUS_1}} | {{TS_1}} |
|
|
180
|
+
| `{{FILE_2}}` | Type definition updated | {{STATUS_2}} | {{TS_2}} |
|
|
181
|
+
| `{{FILE_3}}` | Contract schema updated | {{STATUS_3}} | {{TS_3}} |
|
|
182
|
+
| `{{FILE_4}}` | Assertion updated | {{STATUS_4}} | {{TS_4}} |
|
|
183
|
+
| `SPEC_CHANGELOG.md` | Entry appended | {{CHANGELOG_STATUS}} | {{CHANGELOG_TS}} |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Validation Results
|
|
188
|
+
|
|
189
|
+
### Pre-Commit Checklist
|
|
190
|
+
|
|
191
|
+
- [ ] **Syntax check**: All updated files are valid JSON/JS/TS
|
|
192
|
+
- [ ] **Contract alignment**: Updated contracts match actual changes
|
|
193
|
+
- [ ] **Test consistency**: Updated tests are semantically correct
|
|
194
|
+
- [ ] **Type safety**: Phase 4 types match Phase 3 API contract
|
|
195
|
+
- [ ] **Cross-phase validation**:
|
|
196
|
+
- [ ] Phase 3 types ⊆ Phase 4 client types
|
|
197
|
+
- [ ] Phase 2 test data matches Phase 3 API contract
|
|
198
|
+
- [ ] Phase 5 tests reference existing Phase 4 client methods
|
|
199
|
+
- [ ] **SPEC_CHANGELOG.md**: Entry added with correct severity
|
|
200
|
+
- [ ] **Migration guide**: Created (required for BREAKING changes)
|
|
201
|
+
|
|
202
|
+
### Test Run Results
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
Phase 2 tests: {{P2_TEST_RESULT}}
|
|
206
|
+
Phase 3 tests: {{P3_TEST_RESULT}}
|
|
207
|
+
Phase 4 type check: {{P4_TYPE_RESULT}}
|
|
208
|
+
Phase 5 tests: {{P5_TEST_RESULT}}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Risk Assessment
|
|
214
|
+
|
|
215
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
216
|
+
|------|-----------|--------|-----------|
|
|
217
|
+
| Phase 4 clients break on `{{REMOVED_FIELD}}` | {{LIKELIHOOD_1}} | {{IMPACT_1}} | {{MITIGATION_1}} |
|
|
218
|
+
| Timeline slippage if Phase 3 complex | {{LIKELIHOOD_2}} | {{IMPACT_2}} | {{MITIGATION_2}} |
|
|
219
|
+
| Circular dependency in phase updates | {{LIKELIHOOD_3}} | {{IMPACT_3}} | {{MITIGATION_3}} |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## SPEC_CHANGELOG.md Entry (Auto-Appended)
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
- {{DATE}} | {{CHANGE_TYPE}} | {{CHANGE_SUMMARY_ONE_LINER}}
|
|
227
|
+
Changed: {{CHANGED_FILE}} → {{CHANGED_SECTION}}
|
|
228
|
+
Affected: Phase {{AFFECTED_PHASES}} | Migration guide: {{MIGRATION_GUIDE_LINK}}
|
|
229
|
+
Auto-updated phases: {{AUTO_UPDATED_PHASES}} | Manual review: {{MANUAL_REVIEW}}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Sign-Off
|
|
235
|
+
|
|
236
|
+
- [ ] **Developer review**: Impact report reviewed and accurate
|
|
237
|
+
- [ ] **Auto-updates validated**: Changes look correct, no unintended modifications
|
|
238
|
+
- [ ] **Tests passing**: All affected phase tests green
|
|
239
|
+
- [ ] **Migration guide complete**: (required if BREAKING)
|
|
240
|
+
- [ ] **Ready to proceed**: All downstream phases aligned
|
|
241
|
+
|
|
242
|
+
**Reviewed by**: ________________________
|
|
243
|
+
**Date**: {{DATE}}
|
|
244
|
+
**Status**: [ ] APPROVED TO PROCEED | [ ] NEEDS REWORK | [ ] ESCALATE
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
*Generated by spec-impact-engine v1.0 | Genesis Codex Harness*
|