specpulse 1.0.6__py3-none-any.whl → 1.1.0__py3-none-any.whl
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.
- specpulse/__init__.py +1 -1
- specpulse/cli/main.py +598 -617
- specpulse/core/specpulse.py +1110 -1105
- specpulse/resources/commands/claude/sp-continue.md +203 -0
- specpulse/resources/commands/claude/{plan.md → sp-plan.md} +53 -38
- specpulse/resources/commands/claude/sp-pulse.md +142 -0
- specpulse/resources/commands/claude/{spec.md → sp-spec.md} +36 -23
- specpulse/resources/commands/claude/sp-status.md +170 -0
- specpulse/resources/commands/claude/{task.md → sp-task.md} +68 -48
- specpulse/resources/commands/gemini/sp-continue.toml +56 -0
- specpulse/resources/commands/gemini/sp-plan.toml +68 -0
- specpulse/resources/commands/gemini/{pulse.toml → sp-pulse.toml} +12 -6
- specpulse/resources/commands/gemini/sp-spec.toml +54 -0
- specpulse/resources/commands/gemini/sp-status.toml +61 -0
- specpulse/resources/commands/gemini/sp-task.toml +79 -0
- specpulse/resources/memory/constitution.md +5 -5
- specpulse/resources/memory/context.md +12 -1
- specpulse/resources/scripts/{pulse-init.py → sp-pulse-init.py} +6 -6
- specpulse/resources/scripts/{pulse-init.sh → sp-pulse-init.sh} +95 -95
- specpulse/resources/scripts/{pulse-plan.py → sp-pulse-plan.py} +32 -7
- specpulse/resources/scripts/{pulse-plan.sh → sp-pulse-plan.sh} +136 -126
- specpulse/resources/scripts/{pulse-spec.py → sp-pulse-spec.py} +26 -6
- specpulse/resources/scripts/{pulse-spec.sh → sp-pulse-spec.sh} +126 -103
- specpulse/resources/scripts/{pulse-task.py → sp-pulse-task.py} +42 -6
- specpulse/resources/scripts/{pulse-task.sh → sp-pulse-task.sh} +32 -16
- specpulse/resources/templates/plan.md +206 -206
- specpulse/resources/templates/spec.md +125 -125
- specpulse/resources/templates/task.md +164 -163
- {specpulse-1.0.6.dist-info → specpulse-1.1.0.dist-info}/METADATA +35 -35
- specpulse-1.1.0.dist-info/RECORD +41 -0
- specpulse/resources/commands/claude/pulse.md +0 -91
- specpulse/resources/commands/gemini/plan.toml +0 -59
- specpulse/resources/commands/gemini/spec.toml +0 -45
- specpulse/resources/commands/gemini/task.toml +0 -69
- specpulse/resources/scripts/pulse-init.ps1 +0 -186
- specpulse/resources/scripts/pulse-plan.ps1 +0 -251
- specpulse/resources/scripts/pulse-spec.ps1 +0 -185
- specpulse/resources/scripts/pulse-task.ps1 +0 -263
- specpulse-1.0.6.dist-info/RECORD +0 -41
- {specpulse-1.0.6.dist-info → specpulse-1.1.0.dist-info}/WHEEL +0 -0
- {specpulse-1.0.6.dist-info → specpulse-1.1.0.dist-info}/entry_points.txt +0 -0
- {specpulse-1.0.6.dist-info → specpulse-1.1.0.dist-info}/licenses/LICENSE +0 -0
- {specpulse-1.0.6.dist-info → specpulse-1.1.0.dist-info}/top_level.txt +0 -0
@@ -46,35 +46,51 @@ if [ -z "$FEATURE_DIR" ]; then
|
|
46
46
|
fi
|
47
47
|
fi
|
48
48
|
|
49
|
-
|
49
|
+
TASK_DIR="$PROJECT_ROOT/tasks/${FEATURE_DIR}"
|
50
|
+
PLAN_DIR="$PROJECT_ROOT/plans/${FEATURE_DIR}"
|
51
|
+
SPEC_DIR="$PROJECT_ROOT/specs/${FEATURE_DIR}"
|
50
52
|
TEMPLATE_FILE="$PROJECT_ROOT/templates/task.md"
|
51
|
-
PLAN_FILE="$PROJECT_ROOT/plans/${FEATURE_DIR}/plan.md"
|
52
|
-
SPEC_FILE="$PROJECT_ROOT/specs/${FEATURE_DIR}/spec.md"
|
53
53
|
|
54
54
|
# Ensure tasks directory exists
|
55
|
-
mkdir -p "$
|
55
|
+
mkdir -p "$TASK_DIR"
|
56
56
|
|
57
|
-
#
|
58
|
-
if [
|
59
|
-
|
57
|
+
# Find latest spec file
|
58
|
+
if [ -d "$SPEC_DIR" ]; then
|
59
|
+
SPEC_FILE=$(find "$SPEC_DIR" -name "spec-*.md" -printf "%T@ %p\n" | sort -n | tail -1 | cut -d' ' -f2-)
|
60
|
+
if [ -z "$SPEC_FILE" ]; then
|
61
|
+
error_exit "No specification files found in $SPEC_DIR. Please create specification first."
|
62
|
+
fi
|
63
|
+
else
|
64
|
+
error_exit "Specifications directory not found: $SPEC_DIR. Please create specification first."
|
60
65
|
fi
|
61
66
|
|
62
|
-
|
63
|
-
|
67
|
+
# Find latest plan file
|
68
|
+
if [ -d "$PLAN_DIR" ]; then
|
69
|
+
PLAN_FILE=$(find "$PLAN_DIR" -name "plan-*.md" -printf "%T@ %p\n" | sort -n | tail -1 | cut -d' ' -f2-)
|
70
|
+
if [ -z "$PLAN_FILE" ]; then
|
71
|
+
error_exit "No plan files found in $PLAN_DIR. Please create plan first."
|
72
|
+
fi
|
73
|
+
else
|
74
|
+
error_exit "Plans directory not found: $PLAN_DIR. Please create plan first."
|
64
75
|
fi
|
65
76
|
|
77
|
+
# Find next available task number or create new one
|
78
|
+
if [ -d "$TASK_DIR" ]; then
|
79
|
+
existing_tasks=$(find "$TASK_DIR" -name "task-*.md" | wc -l)
|
80
|
+
task_number=$((existing_tasks + 1))
|
81
|
+
else
|
82
|
+
task_number=1
|
83
|
+
fi
|
84
|
+
TASK_FILE="$TASK_DIR/task-$(printf "%03d" $task_number).md"
|
85
|
+
|
66
86
|
# Ensure task template exists
|
67
87
|
if [ ! -f "$TEMPLATE_FILE" ]; then
|
68
88
|
error_exit "Template not found: $TEMPLATE_FILE"
|
69
89
|
fi
|
70
90
|
|
71
|
-
# Create task file
|
72
|
-
|
73
|
-
|
74
|
-
cp "$TEMPLATE_FILE" "$TASK_FILE" || error_exit "Failed to copy task template"
|
75
|
-
else
|
76
|
-
log "Task breakdown already exists: $TASK_FILE"
|
77
|
-
fi
|
91
|
+
# Create task file
|
92
|
+
log "Creating task breakdown from template: $TASK_FILE"
|
93
|
+
cp "$TEMPLATE_FILE" "$TASK_FILE" || error_exit "Failed to copy task template"
|
78
94
|
|
79
95
|
# Validate task structure
|
80
96
|
log "Validating task breakdown..."
|
@@ -1,206 +1,206 @@
|
|
1
|
-
<!-- SpecPulse Implementation Plan Template v4.0 - AI-Optimized -->
|
2
|
-
<!-- AI Instructions: Generate plan from specification following constitutional gates -->
|
3
|
-
|
4
|
-
# Implementation Plan: {{ feature_name }}
|
5
|
-
|
6
|
-
## Specification Reference
|
7
|
-
- **Spec ID**: SPEC-{{ feature_id }}
|
8
|
-
- **Branch**: {{ branch_name }}
|
9
|
-
- **Generated**: {{ date }}
|
10
|
-
- **Optimization Focus**: {{ optimization_focus | default("SIMPLICITY") }}
|
11
|
-
|
12
|
-
## Phase -1: Pre-Implementation Gates
|
13
|
-
|
14
|
-
### Constitutional Compliance Check
|
15
|
-
**THIS SECTION MUST BE COMPLETED BEFORE ANY IMPLEMENTATION**
|
16
|
-
|
17
|
-
#### Simplicity Gate (Article VII)
|
18
|
-
- [ ] Using
|
19
|
-
- [ ] No future-proofing without documented need?
|
20
|
-
- [ ] Direct framework usage (no unnecessary wrappers)?
|
21
|
-
- [ ] Single model representation per concept?
|
22
|
-
|
23
|
-
#### Anti-Abstraction Gate (Article VII)
|
24
|
-
- [ ] Using framework features directly?
|
25
|
-
- [ ] No unnecessary abstraction layers?
|
26
|
-
- [ ] Clear, simple interfaces?
|
27
|
-
- [ ] Avoiding premature optimization?
|
28
|
-
|
29
|
-
#### Test-First Gate (Article III)
|
30
|
-
- [ ] Test specifications written?
|
31
|
-
- [ ] Tests reviewed and approved?
|
32
|
-
- [ ] Tests confirmed to FAIL before implementation?
|
33
|
-
- [ ] TDD cycle planned (Red-Green-Refactor)?
|
34
|
-
|
35
|
-
#### Integration-First Gate (Article VIII)
|
36
|
-
- [ ] Contract tests defined?
|
37
|
-
- [ ] Using real services over mocks?
|
38
|
-
- [ ] Production-like test environment planned?
|
39
|
-
- [ ] End-to-end test scenarios identified?
|
40
|
-
|
41
|
-
#### Research Gate (Article VI)
|
42
|
-
- [ ] Library options researched?
|
43
|
-
- [ ] Performance implications documented?
|
44
|
-
- [ ] Security considerations analyzed?
|
45
|
-
- [ ] Trade-offs documented?
|
46
|
-
|
47
|
-
**Gate Status**: {{ gate_status | default("[ ] PENDING") }}
|
48
|
-
|
49
|
-
## Complexity Tracking
|
50
|
-
{% if complexity_exceptions %}
|
51
|
-
{% for exception in complexity_exceptions %}
|
52
|
-
### Exception {{ loop.index }}
|
53
|
-
- **Article**: {{ exception.article }}
|
54
|
-
- **Violation**: {{ exception.violation }}
|
55
|
-
- **Justification**: {{ exception.justification }}
|
56
|
-
- **Mitigation**: {{ exception.mitigation }}
|
57
|
-
{% endfor %}
|
58
|
-
{% else %}
|
59
|
-
No complexity exceptions documented.
|
60
|
-
{% endif %}
|
61
|
-
|
62
|
-
## Technology Stack
|
63
|
-
|
64
|
-
### Core Technologies
|
65
|
-
{% for tech in core_technologies %}
|
66
|
-
- **{{ tech.name }}**: {{ tech.version }} - {{ tech.purpose }}
|
67
|
-
{% endfor %}
|
68
|
-
|
69
|
-
### Dependencies
|
70
|
-
{% for dep in dependencies %}
|
71
|
-
- **{{ dep.name }}**: {{ dep.reason }}
|
72
|
-
{% endfor %}
|
73
|
-
|
74
|
-
## Architecture Overview
|
75
|
-
|
76
|
-
### System Components
|
77
|
-
{% for component in components %}
|
78
|
-
#### {{ component.name }}
|
79
|
-
- **Purpose**: {{ component.purpose }}
|
80
|
-
- **Key Features**: {{ component.features }}
|
81
|
-
- **Dependencies**: {{ component.dependencies | join(", ") }}
|
82
|
-
{% endfor %}
|
83
|
-
|
84
|
-
### Data Models
|
85
|
-
{% for model in data_models %}
|
86
|
-
#### {{ model.name }}
|
87
|
-
- **Fields**: {{ model.fields | join(", ") }}
|
88
|
-
- **Relationships**: {{ model.relationships }}
|
89
|
-
- **Validation**: {{ model.validation }}
|
90
|
-
{% endfor %}
|
91
|
-
|
92
|
-
## Implementation Phases
|
93
|
-
|
94
|
-
### Phase 0: Critical Path (Week {{ phase_0.weeks | default(1) }})
|
95
|
-
{% for task in phase_0.tasks %}
|
96
|
-
- [ ] {{ task.description }}
|
97
|
-
{% endfor %}
|
98
|
-
|
99
|
-
### Phase 1: Foundation (Week {{ phase_1.weeks | default(2) }})
|
100
|
-
{% for task in phase_1.tasks %}
|
101
|
-
- [ ] {{ task.description }}
|
102
|
-
{% endfor %}
|
103
|
-
|
104
|
-
### Phase 2: Core Features (Week {{ phase_2.weeks | default(3) }})
|
105
|
-
{% for task in phase_2.tasks %}
|
106
|
-
- [ ] {{ task.description }}
|
107
|
-
{% endfor %}
|
108
|
-
|
109
|
-
### Phase 3: Polish (Week {{ phase_3.weeks | default(1) }})
|
110
|
-
{% for task in phase_3.tasks %}
|
111
|
-
- [ ] {{ task.description }}
|
112
|
-
{% endfor %}
|
113
|
-
|
114
|
-
## API Contracts
|
115
|
-
|
116
|
-
### Endpoints
|
117
|
-
{% for endpoint in endpoints %}
|
118
|
-
#### {{ endpoint.method }} {{ endpoint.path }}
|
119
|
-
- **Description**: {{ endpoint.description }}
|
120
|
-
- **Request**: {{ endpoint.request }}
|
121
|
-
- **Response**: {{ endpoint.response }}
|
122
|
-
- **Authentication**: {{ endpoint.auth | default("Required") }}
|
123
|
-
{% endfor %}
|
124
|
-
|
125
|
-
### Data Schemas
|
126
|
-
{% for schema in schemas %}
|
127
|
-
#### {{ schema.name }}
|
128
|
-
```json
|
129
|
-
{{ schema.json | indent(4) }}
|
130
|
-
```
|
131
|
-
{% endfor %}
|
132
|
-
|
133
|
-
## Testing Strategy
|
134
|
-
|
135
|
-
### Test Categories
|
136
|
-
- **Unit Tests**: {{ testing.unit.target | default("80% coverage") }}
|
137
|
-
- **Integration Tests**: {{ testing.integration.target | default("Critical paths") }}
|
138
|
-
- **E2E Tests**: {{ testing.e2e.target | default("Key user workflows") }}
|
139
|
-
- **Performance Tests**: {{ testing.performance.target | default("Load testing") }}
|
140
|
-
|
141
|
-
### Test Environment
|
142
|
-
- **Database**: {{ testing.environment.database | default("PostgreSQL") }}
|
143
|
-
- **Services**: {{ testing.environment.services | join(", ") }}
|
144
|
-
- **Test Data**: {{ testing.environment.data_strategy | default("Seed with realistic data") }}
|
145
|
-
|
146
|
-
## Security Considerations
|
147
|
-
|
148
|
-
### Authentication & Authorization
|
149
|
-
- **Method**: {{ security.auth_method | default("JWT tokens") }}
|
150
|
-
- **Roles**: {{ security.roles | join(", ") }}
|
151
|
-
- **Permissions**: {{ security.permissions_model | default("Role-based access control") }}
|
152
|
-
|
153
|
-
### Data Protection
|
154
|
-
- **Encryption**: {{ security.encryption.transit | default("TLS 1.3") }} in transit, {{ security.encryption.at_rest | default("AES-256") }} at rest
|
155
|
-
- **Compliance**: {{ security.compliance | join(", ") }}
|
156
|
-
|
157
|
-
## Deployment Strategy
|
158
|
-
|
159
|
-
### Environments
|
160
|
-
{% for env in environments %}
|
161
|
-
#### {{ env.name }}
|
162
|
-
- **URL**: {{ env.url }}
|
163
|
-
- **Auto-deploy**: {{ env.auto_deploy | default("Manual") }}
|
164
|
-
- **Health Checks**: {{ env.health_checks | default("Basic monitoring") }}
|
165
|
-
{% endfor %}
|
166
|
-
|
167
|
-
### Rollback Plan
|
168
|
-
- **Strategy**: {{ rollback.strategy | default("Blue-green deployment") }}
|
169
|
-
- **Triggers**: {{ rollback.triggers | join(", ") }}
|
170
|
-
- **Recovery Time**: {{ rollback.recovery_time | default("< 5 minutes") }}
|
171
|
-
|
172
|
-
## Success Criteria
|
173
|
-
|
174
|
-
### Must-Have Metrics
|
175
|
-
{% for metric in success_criteria.must %}
|
176
|
-
- {{ metric.name }}: {{ metric.target }} ({{ metric.measurement }})
|
177
|
-
{% endfor %}
|
178
|
-
|
179
|
-
### Should-Have Metrics
|
180
|
-
{% for metric in success_criteria.should %}
|
181
|
-
- {{ metric.name }}: {{ metric.target }} ({{ metric.measurement }})
|
182
|
-
{% endfor %}
|
183
|
-
|
184
|
-
## Risk Assessment
|
185
|
-
|
186
|
-
| Risk | Probability | Impact | Mitigation | Owner |
|
187
|
-
|------|------------|--------|------------|-------|
|
188
|
-
{% for risk in risks %}
|
189
|
-
| {{ risk.description }} | {{ risk.probability }} | {{ risk.impact }} | {{ risk.mitigation }} | {{ risk.owner }} |
|
190
|
-
{% endfor %}
|
191
|
-
|
192
|
-
## Monitoring & Observability
|
193
|
-
|
194
|
-
### Key Metrics
|
195
|
-
{% for metric in monitoring.metrics %}
|
196
|
-
- **{{ metric.name }}**: {{ metric.target }} ({{ metric.unit }})
|
197
|
-
{% endfor %}
|
198
|
-
|
199
|
-
### Alerting
|
200
|
-
- **Critical Alerts**: {{ monitoring.alerts.critical | join(", ") }}
|
201
|
-
- **Warning Alerts**: {{ monitoring.alerts.warnings | join(", ") }}
|
202
|
-
|
203
|
-
---
|
204
|
-
**Generated by**: {{ ai_assistant }} on {{ date }}
|
205
|
-
**Constitutional Gates**: {{ gate_status | default("PENDING") }}
|
206
|
-
**Next Steps**: Use `/task` to break down into executable tasks
|
1
|
+
<!-- SpecPulse Implementation Plan Template v4.0 - AI-Optimized -->
|
2
|
+
<!-- AI Instructions: Generate plan from specification following constitutional gates -->
|
3
|
+
|
4
|
+
# Implementation Plan: {{ feature_name }}
|
5
|
+
|
6
|
+
## Specification Reference
|
7
|
+
- **Spec ID**: SPEC-{{ feature_id }}
|
8
|
+
- **Branch**: {{ branch_name }}
|
9
|
+
- **Generated**: {{ date }}
|
10
|
+
- **Optimization Focus**: {{ optimization_focus | default("SIMPLICITY") }}
|
11
|
+
|
12
|
+
## Phase -1: Pre-Implementation Gates
|
13
|
+
|
14
|
+
### Constitutional Compliance Check
|
15
|
+
**THIS SECTION MUST BE COMPLETED BEFORE ANY IMPLEMENTATION**
|
16
|
+
|
17
|
+
#### Simplicity Gate (Article VII)
|
18
|
+
- [ ] Using 3 or fewer projects/modules for initial implementation?
|
19
|
+
- [ ] No future-proofing without documented need?
|
20
|
+
- [ ] Direct framework usage (no unnecessary wrappers)?
|
21
|
+
- [ ] Single model representation per concept?
|
22
|
+
|
23
|
+
#### Anti-Abstraction Gate (Article VII)
|
24
|
+
- [ ] Using framework features directly?
|
25
|
+
- [ ] No unnecessary abstraction layers?
|
26
|
+
- [ ] Clear, simple interfaces?
|
27
|
+
- [ ] Avoiding premature optimization?
|
28
|
+
|
29
|
+
#### Test-First Gate (Article III)
|
30
|
+
- [ ] Test specifications written?
|
31
|
+
- [ ] Tests reviewed and approved?
|
32
|
+
- [ ] Tests confirmed to FAIL before implementation?
|
33
|
+
- [ ] TDD cycle planned (Red-Green-Refactor)?
|
34
|
+
|
35
|
+
#### Integration-First Gate (Article VIII)
|
36
|
+
- [ ] Contract tests defined?
|
37
|
+
- [ ] Using real services over mocks?
|
38
|
+
- [ ] Production-like test environment planned?
|
39
|
+
- [ ] End-to-end test scenarios identified?
|
40
|
+
|
41
|
+
#### Research Gate (Article VI)
|
42
|
+
- [ ] Library options researched?
|
43
|
+
- [ ] Performance implications documented?
|
44
|
+
- [ ] Security considerations analyzed?
|
45
|
+
- [ ] Trade-offs documented?
|
46
|
+
|
47
|
+
**Gate Status**: {{ gate_status | default("[ ] PENDING") }}
|
48
|
+
|
49
|
+
## Complexity Tracking
|
50
|
+
{% if complexity_exceptions %}
|
51
|
+
{% for exception in complexity_exceptions %}
|
52
|
+
### Exception {{ loop.index }}
|
53
|
+
- **Article**: {{ exception.article }}
|
54
|
+
- **Violation**: {{ exception.violation }}
|
55
|
+
- **Justification**: {{ exception.justification }}
|
56
|
+
- **Mitigation**: {{ exception.mitigation }}
|
57
|
+
{% endfor %}
|
58
|
+
{% else %}
|
59
|
+
No complexity exceptions documented.
|
60
|
+
{% endif %}
|
61
|
+
|
62
|
+
## Technology Stack
|
63
|
+
|
64
|
+
### Core Technologies
|
65
|
+
{% for tech in core_technologies %}
|
66
|
+
- **{{ tech.name }}**: {{ tech.version }} - {{ tech.purpose }}
|
67
|
+
{% endfor %}
|
68
|
+
|
69
|
+
### Dependencies
|
70
|
+
{% for dep in dependencies %}
|
71
|
+
- **{{ dep.name }}**: {{ dep.reason }}
|
72
|
+
{% endfor %}
|
73
|
+
|
74
|
+
## Architecture Overview
|
75
|
+
|
76
|
+
### System Components
|
77
|
+
{% for component in components %}
|
78
|
+
#### {{ component.name }}
|
79
|
+
- **Purpose**: {{ component.purpose }}
|
80
|
+
- **Key Features**: {{ component.features }}
|
81
|
+
- **Dependencies**: {{ component.dependencies | join(", ") }}
|
82
|
+
{% endfor %}
|
83
|
+
|
84
|
+
### Data Models
|
85
|
+
{% for model in data_models %}
|
86
|
+
#### {{ model.name }}
|
87
|
+
- **Fields**: {{ model.fields | join(", ") }}
|
88
|
+
- **Relationships**: {{ model.relationships }}
|
89
|
+
- **Validation**: {{ model.validation }}
|
90
|
+
{% endfor %}
|
91
|
+
|
92
|
+
## Implementation Phases
|
93
|
+
|
94
|
+
### Phase 0: Critical Path (Week {{ phase_0.weeks | default(1) }})
|
95
|
+
{% for task in phase_0.tasks %}
|
96
|
+
- [ ] {{ task.description }}
|
97
|
+
{% endfor %}
|
98
|
+
|
99
|
+
### Phase 1: Foundation (Week {{ phase_1.weeks | default(2) }})
|
100
|
+
{% for task in phase_1.tasks %}
|
101
|
+
- [ ] {{ task.description }}
|
102
|
+
{% endfor %}
|
103
|
+
|
104
|
+
### Phase 2: Core Features (Week {{ phase_2.weeks | default(3) }})
|
105
|
+
{% for task in phase_2.tasks %}
|
106
|
+
- [ ] {{ task.description }}
|
107
|
+
{% endfor %}
|
108
|
+
|
109
|
+
### Phase 3: Polish (Week {{ phase_3.weeks | default(1) }})
|
110
|
+
{% for task in phase_3.tasks %}
|
111
|
+
- [ ] {{ task.description }}
|
112
|
+
{% endfor %}
|
113
|
+
|
114
|
+
## API Contracts
|
115
|
+
|
116
|
+
### Endpoints
|
117
|
+
{% for endpoint in endpoints %}
|
118
|
+
#### {{ endpoint.method }} {{ endpoint.path }}
|
119
|
+
- **Description**: {{ endpoint.description }}
|
120
|
+
- **Request**: {{ endpoint.request }}
|
121
|
+
- **Response**: {{ endpoint.response }}
|
122
|
+
- **Authentication**: {{ endpoint.auth | default("Required") }}
|
123
|
+
{% endfor %}
|
124
|
+
|
125
|
+
### Data Schemas
|
126
|
+
{% for schema in schemas %}
|
127
|
+
#### {{ schema.name }}
|
128
|
+
```json
|
129
|
+
{{ schema.json | indent(4) }}
|
130
|
+
```
|
131
|
+
{% endfor %}
|
132
|
+
|
133
|
+
## Testing Strategy
|
134
|
+
|
135
|
+
### Test Categories
|
136
|
+
- **Unit Tests**: {{ testing.unit.target | default("80% coverage") }}
|
137
|
+
- **Integration Tests**: {{ testing.integration.target | default("Critical paths") }}
|
138
|
+
- **E2E Tests**: {{ testing.e2e.target | default("Key user workflows") }}
|
139
|
+
- **Performance Tests**: {{ testing.performance.target | default("Load testing") }}
|
140
|
+
|
141
|
+
### Test Environment
|
142
|
+
- **Database**: {{ testing.environment.database | default("PostgreSQL") }}
|
143
|
+
- **Services**: {{ testing.environment.services | join(", ") }}
|
144
|
+
- **Test Data**: {{ testing.environment.data_strategy | default("Seed with realistic data") }}
|
145
|
+
|
146
|
+
## Security Considerations
|
147
|
+
|
148
|
+
### Authentication & Authorization
|
149
|
+
- **Method**: {{ security.auth_method | default("JWT tokens") }}
|
150
|
+
- **Roles**: {{ security.roles | join(", ") }}
|
151
|
+
- **Permissions**: {{ security.permissions_model | default("Role-based access control") }}
|
152
|
+
|
153
|
+
### Data Protection
|
154
|
+
- **Encryption**: {{ security.encryption.transit | default("TLS 1.3") }} in transit, {{ security.encryption.at_rest | default("AES-256") }} at rest
|
155
|
+
- **Compliance**: {{ security.compliance | join(", ") }}
|
156
|
+
|
157
|
+
## Deployment Strategy
|
158
|
+
|
159
|
+
### Environments
|
160
|
+
{% for env in environments %}
|
161
|
+
#### {{ env.name }}
|
162
|
+
- **URL**: {{ env.url }}
|
163
|
+
- **Auto-deploy**: {{ env.auto_deploy | default("Manual") }}
|
164
|
+
- **Health Checks**: {{ env.health_checks | default("Basic monitoring") }}
|
165
|
+
{% endfor %}
|
166
|
+
|
167
|
+
### Rollback Plan
|
168
|
+
- **Strategy**: {{ rollback.strategy | default("Blue-green deployment") }}
|
169
|
+
- **Triggers**: {{ rollback.triggers | join(", ") }}
|
170
|
+
- **Recovery Time**: {{ rollback.recovery_time | default("< 5 minutes") }}
|
171
|
+
|
172
|
+
## Success Criteria
|
173
|
+
|
174
|
+
### Must-Have Metrics
|
175
|
+
{% for metric in success_criteria.must %}
|
176
|
+
- {{ metric.name }}: {{ metric.target }} ({{ metric.measurement }})
|
177
|
+
{% endfor %}
|
178
|
+
|
179
|
+
### Should-Have Metrics
|
180
|
+
{% for metric in success_criteria.should %}
|
181
|
+
- {{ metric.name }}: {{ metric.target }} ({{ metric.measurement }})
|
182
|
+
{% endfor %}
|
183
|
+
|
184
|
+
## Risk Assessment
|
185
|
+
|
186
|
+
| Risk | Probability | Impact | Mitigation | Owner |
|
187
|
+
|------|------------|--------|------------|-------|
|
188
|
+
{% for risk in risks %}
|
189
|
+
| {{ risk.description }} | {{ risk.probability }} | {{ risk.impact }} | {{ risk.mitigation }} | {{ risk.owner }} |
|
190
|
+
{% endfor %}
|
191
|
+
|
192
|
+
## Monitoring & Observability
|
193
|
+
|
194
|
+
### Key Metrics
|
195
|
+
{% for metric in monitoring.metrics %}
|
196
|
+
- **{{ metric.name }}**: {{ metric.target }} ({{ metric.unit }})
|
197
|
+
{% endfor %}
|
198
|
+
|
199
|
+
### Alerting
|
200
|
+
- **Critical Alerts**: {{ monitoring.alerts.critical | join(", ") }}
|
201
|
+
- **Warning Alerts**: {{ monitoring.alerts.warnings | join(", ") }}
|
202
|
+
|
203
|
+
---
|
204
|
+
**Generated by**: {{ ai_assistant }} on {{ date }}
|
205
|
+
**Constitutional Gates**: {{ gate_status | default("PENDING") }}
|
206
|
+
**Next Steps**: Use `/sp-task breakdown` to break down into executable tasks
|