specpulse 1.0.6__py3-none-any.whl → 1.2.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 +809 -617
- specpulse/core/specpulse.py +1140 -1105
- specpulse/resources/commands/claude/sp-continue.md +203 -0
- specpulse/resources/commands/claude/sp-decompose.md +227 -0
- specpulse/resources/commands/claude/sp-plan.md +220 -0
- 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/sp-task.md +315 -0
- specpulse/resources/commands/gemini/sp-continue.toml +56 -0
- specpulse/resources/commands/gemini/sp-decompose.toml +54 -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 +53 -1
- specpulse/resources/scripts/sp-pulse-decompose.py +66 -0
- specpulse/resources/scripts/sp-pulse-decompose.sh +56 -0
- 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/decomposition/api-contract.yaml +22 -0
- specpulse/resources/templates/decomposition/integration-plan.md +134 -0
- specpulse/resources/templates/decomposition/interface.ts +20 -0
- specpulse/resources/templates/decomposition/microservices.md +34 -0
- specpulse/resources/templates/decomposition/service-plan.md +168 -0
- 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.2.0.dist-info}/METADATA +95 -36
- specpulse-1.2.0.dist-info/RECORD +50 -0
- specpulse/resources/commands/claude/plan.md +0 -184
- specpulse/resources/commands/claude/pulse.md +0 -91
- specpulse/resources/commands/claude/task.md +0 -237
- 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.2.0.dist-info}/WHEEL +0 -0
- {specpulse-1.0.6.dist-info → specpulse-1.2.0.dist-info}/entry_points.txt +0 -0
- {specpulse-1.0.6.dist-info → specpulse-1.2.0.dist-info}/licenses/LICENSE +0 -0
- {specpulse-1.0.6.dist-info → specpulse-1.2.0.dist-info}/top_level.txt +0 -0
@@ -1,164 +1,165 @@
|
|
1
|
-
<!-- SpecPulse Task List Template v3.0 - AI-Optimized -->
|
2
|
-
<!-- AI Instructions: Generate from implementation plan using constitutional gates -->
|
3
|
-
|
4
|
-
# Task List: {{ feature_name }}
|
5
|
-
|
6
|
-
## Metadata
|
7
|
-
- **Plan Reference**: SPEC-{{ feature_id }}
|
8
|
-
- **Total Tasks**: {{ task_count }}
|
9
|
-
- **Estimated Duration**: {{ total_duration }}
|
10
|
-
- **Parallel Groups**: {{ parallel_groups }}
|
11
|
-
|
12
|
-
## Task Organization
|
13
|
-
|
14
|
-
{% for group in parallel_groups %}
|
15
|
-
### Parallel Group {{ loop.index }}
|
16
|
-
*These tasks can be executed simultaneously*
|
17
|
-
|
18
|
-
{% for task in group.tasks %}
|
19
|
-
#### {{ task.id }}: {{ task.name }}
|
20
|
-
- **Type**: {{ task.type }}
|
21
|
-
- **Priority**: {{ task.priority }}
|
22
|
-
- **Estimate**: {{ task.estimate }}
|
23
|
-
- **Dependencies**: {{ task.dependencies | join(", ") | default("None") }}
|
24
|
-
- **Description**: {{ task.description }}
|
25
|
-
- **Acceptance**: {{ task.acceptance }}
|
26
|
-
- **Files**: {{ task.files | join(", ") }}
|
27
|
-
- **Assignable**: {{ task.assignable }}
|
28
|
-
{% endfor %}
|
29
|
-
{% endfor %}
|
30
|
-
|
31
|
-
### Sequential Tasks
|
32
|
-
*These tasks must be completed in order*
|
33
|
-
|
34
|
-
{% for task in sequential_tasks %}
|
35
|
-
#### {{ task.id }}: {{ task.name }}
|
36
|
-
- **Dependencies**: {{ task.dependencies | join(", ") }}
|
37
|
-
- **Type**: {{ task.type }}
|
38
|
-
- **Priority**: {{ task.priority }}
|
39
|
-
- **Estimate**: {{ task.estimate }}
|
40
|
-
- **Description**: {{ task.description }}
|
41
|
-
- **Acceptance**: {{ task.acceptance }}
|
42
|
-
{% endfor %}
|
43
|
-
|
44
|
-
### Critical Path
|
45
|
-
*Tasks that directly impact timeline*
|
46
|
-
|
47
|
-
{% for path in critical_path %}
|
48
|
-
{{ loop.index }}. {{ path.tasks | join("
|
49
|
-
{% endfor %}
|
50
|
-
- Estimated critical path duration: {{ critical_path_duration }}
|
51
|
-
|
52
|
-
## Constitutional Gates Compliance
|
53
|
-
|
54
|
-
### Pre-Implementation Validation
|
55
|
-
{% for gate in constitutional_gates %}
|
56
|
-
#### {{ gate.name }}
|
57
|
-
- [ ] {{ gate.check_1 }}
|
58
|
-
- [ ] {{ gate.check_2 }}
|
59
|
-
- [ ] {{ gate.check_3 }}
|
60
|
-
- [ ] {{ gate.check_4 }}
|
61
|
-
**Status**: {{ gate.status | default("PENDING") }}
|
62
|
-
{% endfor %}
|
63
|
-
|
64
|
-
## Task Details by Category
|
65
|
-
|
66
|
-
{% for category in task_categories %}
|
67
|
-
### {{ category.name }} Tasks {% if category.parallel %}[P]{% endif %}
|
68
|
-
{% for task in category.tasks %}
|
69
|
-
- [ ] {{ task.id }}: {{ task.name }}
|
70
|
-
{% endfor %}
|
71
|
-
{% endfor %}
|
72
|
-
|
73
|
-
## Execution Schedule
|
74
|
-
|
75
|
-
{% for phase in execution_schedule %}
|
76
|
-
### {{ phase.name }}
|
77
|
-
{% for time_block in phase.time_blocks %}
|
78
|
-
- {{ time_block.timing }}: {{ time_block.tasks | join(", ") }}{% if time_block.parallel %} (parallel){% endif %}
|
79
|
-
{% endfor %}
|
80
|
-
{% endfor %}
|
81
|
-
|
82
|
-
## Progress Tracking
|
83
|
-
```yaml
|
84
|
-
status:
|
85
|
-
total: {{ task_count }}
|
86
|
-
completed: 0
|
87
|
-
in_progress: 0
|
88
|
-
blocked: 0
|
89
|
-
|
90
|
-
metrics:
|
91
|
-
velocity: {{ velocity | default("2-3 tasks/day") }}
|
92
|
-
estimated_completion: {{ estimated_completion }}
|
93
|
-
blockers: []
|
94
|
-
|
95
|
-
parallel_groups:
|
96
|
-
{% for group in parallel_groups %}
|
97
|
-
- name: "{{ group.name }}"
|
98
|
-
tasks: [{{ group.tasks | map(attribute='id') | join(", ") }}]
|
99
|
-
can_start: {{ group.can_start }}
|
100
|
-
{% endfor %}
|
101
|
-
|
102
|
-
sequential_tasks:
|
103
|
-
{% for task in sequential_tasks %}
|
104
|
-
- name: "{{ task.name }}"
|
105
|
-
id: {{ task.id }}
|
106
|
-
dependencies: [{{ task.dependencies | join(", ") }}]
|
107
|
-
{% endfor %}
|
108
|
-
```
|
109
|
-
|
110
|
-
## Task Execution
|
111
|
-
|
112
|
-
###
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
{
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
## AI Integration Notes
|
144
|
-
|
145
|
-
### Constitutional Gates
|
146
|
-
- All tasks MUST pass constitutional compliance before implementation
|
147
|
-
- Use `/validate` command to check compliance status
|
148
|
-
- Mark gates as completed only after actual validation
|
149
|
-
|
150
|
-
### Progress Tracking
|
151
|
-
- Update task status in real-time using
|
152
|
-
- Document blockers immediately
|
153
|
-
- Use velocity metrics to refine future estimates
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
-
|
158
|
-
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
**
|
163
|
-
**
|
1
|
+
<!-- SpecPulse Task List Template v3.0 - AI-Optimized -->
|
2
|
+
<!-- AI Instructions: Generate from implementation plan using constitutional gates -->
|
3
|
+
|
4
|
+
# Task List: {{ feature_name }}
|
5
|
+
|
6
|
+
## Metadata
|
7
|
+
- **Plan Reference**: SPEC-{{ feature_id }}
|
8
|
+
- **Total Tasks**: {{ task_count }}
|
9
|
+
- **Estimated Duration**: {{ total_duration }}
|
10
|
+
- **Parallel Groups**: {{ parallel_groups }}
|
11
|
+
|
12
|
+
## Task Organization
|
13
|
+
|
14
|
+
{% for group in parallel_groups %}
|
15
|
+
### Parallel Group {{ loop.index }}
|
16
|
+
*These tasks can be executed simultaneously*
|
17
|
+
|
18
|
+
{% for task in group.tasks %}
|
19
|
+
#### {{ task.id }}: {{ task.name }}
|
20
|
+
- **Type**: {{ task.type }}
|
21
|
+
- **Priority**: {{ task.priority }}
|
22
|
+
- **Estimate**: {{ task.estimate }}
|
23
|
+
- **Dependencies**: {{ task.dependencies | join(", ") | default("None") }}
|
24
|
+
- **Description**: {{ task.description }}
|
25
|
+
- **Acceptance**: {{ task.acceptance }}
|
26
|
+
- **Files**: {{ task.files | join(", ") }}
|
27
|
+
- **Assignable**: {{ task.assignable }}
|
28
|
+
{% endfor %}
|
29
|
+
{% endfor %}
|
30
|
+
|
31
|
+
### Sequential Tasks
|
32
|
+
*These tasks must be completed in order*
|
33
|
+
|
34
|
+
{% for task in sequential_tasks %}
|
35
|
+
#### {{ task.id }}: {{ task.name }}
|
36
|
+
- **Dependencies**: {{ task.dependencies | join(", ") }}
|
37
|
+
- **Type**: {{ task.type }}
|
38
|
+
- **Priority**: {{ task.priority }}
|
39
|
+
- **Estimate**: {{ task.estimate }}
|
40
|
+
- **Description**: {{ task.description }}
|
41
|
+
- **Acceptance**: {{ task.acceptance }}
|
42
|
+
{% endfor %}
|
43
|
+
|
44
|
+
### Critical Path
|
45
|
+
*Tasks that directly impact timeline*
|
46
|
+
|
47
|
+
{% for path in critical_path %}
|
48
|
+
{{ loop.index }}. {{ path.tasks | join(" -> ") }}
|
49
|
+
{% endfor %}
|
50
|
+
- Estimated critical path duration: {{ critical_path_duration }}
|
51
|
+
|
52
|
+
## Constitutional Gates Compliance
|
53
|
+
|
54
|
+
### Pre-Implementation Validation
|
55
|
+
{% for gate in constitutional_gates %}
|
56
|
+
#### {{ gate.name }}
|
57
|
+
- [ ] {{ gate.check_1 }}
|
58
|
+
- [ ] {{ gate.check_2 }}
|
59
|
+
- [ ] {{ gate.check_3 }}
|
60
|
+
- [ ] {{ gate.check_4 }}
|
61
|
+
**Status**: {{ gate.status | default("PENDING") }}
|
62
|
+
{% endfor %}
|
63
|
+
|
64
|
+
## Task Details by Category
|
65
|
+
|
66
|
+
{% for category in task_categories %}
|
67
|
+
### {{ category.name }} Tasks {% if category.parallel %}[P]{% endif %}
|
68
|
+
{% for task in category.tasks %}
|
69
|
+
- [ ] {{ task.id }}: {{ task.name }}
|
70
|
+
{% endfor %}
|
71
|
+
{% endfor %}
|
72
|
+
|
73
|
+
## Execution Schedule
|
74
|
+
|
75
|
+
{% for phase in execution_schedule %}
|
76
|
+
### {{ phase.name }}
|
77
|
+
{% for time_block in phase.time_blocks %}
|
78
|
+
- {{ time_block.timing }}: {{ time_block.tasks | join(", ") }}{% if time_block.parallel %} (parallel){% endif %}
|
79
|
+
{% endfor %}
|
80
|
+
{% endfor %}
|
81
|
+
|
82
|
+
## Progress Tracking
|
83
|
+
```yaml
|
84
|
+
status:
|
85
|
+
total: {{ task_count }}
|
86
|
+
completed: 0
|
87
|
+
in_progress: 0
|
88
|
+
blocked: 0
|
89
|
+
|
90
|
+
metrics:
|
91
|
+
velocity: {{ velocity | default("2-3 tasks/day") }}
|
92
|
+
estimated_completion: {{ estimated_completion }}
|
93
|
+
blockers: []
|
94
|
+
|
95
|
+
parallel_groups:
|
96
|
+
{% for group in parallel_groups %}
|
97
|
+
- name: "{{ group.name }}"
|
98
|
+
tasks: [{{ group.tasks | map(attribute='id') | join(", ") }}]
|
99
|
+
can_start: {{ group.can_start }}
|
100
|
+
{% endfor %}
|
101
|
+
|
102
|
+
sequential_tasks:
|
103
|
+
{% for task in sequential_tasks %}
|
104
|
+
- name: "{{ task.name }}"
|
105
|
+
id: {{ task.id }}
|
106
|
+
dependencies: [{{ task.dependencies | join(", ") }}]
|
107
|
+
{% endfor %}
|
108
|
+
```
|
109
|
+
|
110
|
+
## Task Execution Guidelines
|
111
|
+
|
112
|
+
### AI-Assisted Development Process
|
113
|
+
All task execution should be handled by AI assistants (Claude or Gemini) following the SpecPulse methodology:
|
114
|
+
|
115
|
+
1. **Task Selection**: AI assistants should select tasks based on:
|
116
|
+
- Dependency order (sequential tasks first)
|
117
|
+
- Parallel execution opportunities
|
118
|
+
- Current context and feature priorities
|
119
|
+
- Resource availability
|
120
|
+
|
121
|
+
2. **Implementation Process**: For each task:
|
122
|
+
```markdown
|
123
|
+
## Task: {{ task.id }} - {{ task.name }}
|
124
|
+
|
125
|
+
**Status**: [ ] Pending / [x] Completed / [-] In Progress / [!] Blocked
|
126
|
+
**Dependencies**: {{ task.dependencies | join(", ") | default("None") }}
|
127
|
+
**Acceptance**: {{ task.acceptance }}
|
128
|
+
```
|
129
|
+
|
130
|
+
3. **Parallel Execution Strategy**: When tasks can be executed in parallel:
|
131
|
+
- AI assistants should work on multiple tasks simultaneously
|
132
|
+
- Coordinate task completion status
|
133
|
+
- Handle cross-task dependencies
|
134
|
+
- Maintain code consistency
|
135
|
+
|
136
|
+
### Task Dependencies Management
|
137
|
+
|
138
|
+
- **Sequential Dependencies**: Tasks must be completed in specific order
|
139
|
+
- **Parallel Opportunities**: Independent tasks can be worked on simultaneously
|
140
|
+
- **Dependency Resolution**: AI should resolve conflicts and blocking issues
|
141
|
+
- **Progress Coordination**: Multiple AI assistants should coordinate task completion
|
142
|
+
|
143
|
+
## AI Integration Notes
|
144
|
+
|
145
|
+
### Constitutional Gates
|
146
|
+
- All tasks MUST pass constitutional compliance before implementation
|
147
|
+
- Use `/sp-validate` command to check compliance status
|
148
|
+
- Mark gates as completed only after actual validation
|
149
|
+
|
150
|
+
### Progress Tracking
|
151
|
+
- Update task status in real-time using markdown checkboxes: `[ ]` → `[-]` → `[x]`
|
152
|
+
- Document blockers immediately with `[!]` status and resolution notes
|
153
|
+
- Use velocity metrics to refine future estimates
|
154
|
+
- Coordinate with other AI assistants for parallel task execution
|
155
|
+
|
156
|
+
### Quality Assurance
|
157
|
+
- Each task requires specific acceptance criteria
|
158
|
+
- Test-first development mandated by Article III
|
159
|
+
- Integration tests required before deployment
|
160
|
+
|
161
|
+
---
|
162
|
+
**Generated by**: {{ ai_assistant }} on {{ date }}
|
163
|
+
**Feature**: {{ feature_name }}
|
164
|
+
**Constitutional Gates**: {{ constitutional_status | default("PENDING VALIDATION") }}
|
164
165
|
**Next Steps**: Execute tasks following constitutional order
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: specpulse
|
3
|
-
Version: 1.0
|
3
|
+
Version: 1.2.0
|
4
4
|
Summary: Specification-Driven Development Framework
|
5
5
|
Home-page: https://github.com/specpulse
|
6
6
|
Author: SpecPulse
|
@@ -66,12 +66,13 @@ Dynamic: requires-python
|
|
66
66
|
|
67
67
|
SpecPulse revolutionizes AI-assisted development by enforcing a **specification-first approach**. Instead of jumping straight into code, SpecPulse ensures every feature starts with clear specifications, validated plans, and tracked tasks - guaranteeing quality from day one.
|
68
68
|
|
69
|
-
> **Latest Update (v1.0
|
70
|
-
> -
|
71
|
-
> -
|
72
|
-
> -
|
73
|
-
> -
|
74
|
-
> -
|
69
|
+
> **Latest Update (v1.2.0)**:
|
70
|
+
> - 🔀 **Microservice Decomposition**: New `/sp-decompose` command to break large specs into services
|
71
|
+
> - 🏗️ **Service-Based Planning**: Automatic service-specific plans and integration plans
|
72
|
+
> - 📊 **Service Task Management**: Task prefixes per service (AUTH-T001, USER-T001, INT-T001)
|
73
|
+
> - 🎯 **Smart Workflow Detection**: Automatic monolithic vs decomposed architecture handling
|
74
|
+
> - 📝 **Rich Templates**: New templates for services, APIs, interfaces, and integration
|
75
|
+
> - 🔧 **Previous (v1.1.0)**: Command prefix system, multi-spec workflow, versioned files
|
75
76
|
|
76
77
|
### Why SpecPulse?
|
77
78
|
|
@@ -126,21 +127,26 @@ specpulse init --ai gemini
|
|
126
127
|
|
127
128
|
```bash
|
128
129
|
# Initialize a new feature
|
129
|
-
/pulse user-authentication
|
130
|
+
/sp-pulse user-authentication
|
130
131
|
# Creates structure for 001-user-authentication feature
|
131
132
|
|
132
133
|
# Create the specification
|
133
|
-
/spec create user login with OAuth2 and email/password
|
134
|
-
# Or just: /spec (for interactive mode)
|
134
|
+
/sp-spec create user login with OAuth2 and email/password
|
135
|
+
# Or just: /sp-spec (for interactive mode)
|
136
|
+
|
137
|
+
# [NEW] Decompose large specs into microservices (optional)
|
138
|
+
/sp-decompose 001
|
139
|
+
# Creates service boundaries, API contracts, and interfaces
|
135
140
|
|
136
141
|
# Generate implementation plan
|
137
|
-
/plan generate
|
138
|
-
#
|
142
|
+
/sp-plan generate
|
143
|
+
# For decomposed: Creates service-specific plans + integration plan
|
144
|
+
# For monolithic: Creates single comprehensive plan
|
139
145
|
|
140
146
|
# Break down into tasks
|
141
|
-
/task breakdown
|
142
|
-
#
|
143
|
-
#
|
147
|
+
/sp-task breakdown
|
148
|
+
# For decomposed: Creates AUTH-T001, USER-T001, INT-T001 tasks
|
149
|
+
# For monolithic: Creates T001, T002, T003 tasks
|
144
150
|
```
|
145
151
|
|
146
152
|
### Step 4: Validate & Ship
|
@@ -149,6 +155,13 @@ specpulse init --ai gemini
|
|
149
155
|
# Validate everything
|
150
156
|
specpulse validate
|
151
157
|
|
158
|
+
# [NEW] Decompose specifications
|
159
|
+
specpulse decompose 001
|
160
|
+
# Or with options:
|
161
|
+
specpulse decompose --microservices
|
162
|
+
specpulse decompose --apis
|
163
|
+
specpulse decompose --interfaces
|
164
|
+
|
152
165
|
# Run diagnostics
|
153
166
|
specpulse doctor
|
154
167
|
|
@@ -264,23 +277,24 @@ Claude and Gemini use slash commands that accept arguments via `$ARGUMENTS`:
|
|
264
277
|
- **Unicode Support**: Full international character support (≤, ≥, →, ←)
|
265
278
|
|
266
279
|
```bash
|
267
|
-
/pulse user-authentication # Start new feature with name
|
268
|
-
/spec create OAuth2 login # Create specification with description
|
269
|
-
/spec update # Update existing specification
|
270
|
-
/spec validate # Validate specification completeness
|
271
|
-
/
|
272
|
-
/plan
|
273
|
-
/
|
274
|
-
/task
|
275
|
-
/task
|
280
|
+
/sp-pulse user-authentication # Start new feature with name
|
281
|
+
/sp-spec create OAuth2 login # Create specification with description
|
282
|
+
/sp-spec update # Update existing specification
|
283
|
+
/sp-spec validate # Validate specification completeness
|
284
|
+
/sp-decompose 001 # [NEW] Decompose spec into microservices
|
285
|
+
/sp-plan generate # Generate plan(s) - detects decomposition
|
286
|
+
/sp-plan validate # Validate plan against constitution
|
287
|
+
/sp-task breakdown # Create task list(s) - per service if decomposed
|
288
|
+
/sp-task update # Update task statuses
|
289
|
+
/sp-task status # Show current progress
|
290
|
+
/sp-task execute AUTH-T001 # [NEW] Execute service-specific task
|
276
291
|
```
|
277
292
|
|
278
293
|
**Behind the Scenes:**
|
279
294
|
- Commands capture arguments using `$ARGUMENTS` variable
|
280
295
|
- **Multi-platform scripts** in `resources/scripts/` folder process the arguments:
|
281
|
-
- `pulse-*.py` - Python scripts (universal)
|
282
|
-
- `pulse-*.
|
283
|
-
- `pulse-*.sh` - Bash scripts (Linux/macOS)
|
296
|
+
- `sp-pulse-*.py` - Python scripts (universal)
|
297
|
+
- `sp-pulse-*.sh` - Bash scripts (Linux/macOS)
|
284
298
|
- AI reads templates from `resources/templates/` folder
|
285
299
|
- Results are saved in `specs/`, `plans/`, `tasks/` folders
|
286
300
|
- Memory system tracks progress in `memory/` folder
|
@@ -309,6 +323,39 @@ Claude and Gemini use slash commands that accept arguments via `$ARGUMENTS`:
|
|
309
323
|
| **Technical Debt** | Accumulates | **Tracked & Managed** |
|
310
324
|
| **Documentation** | Often outdated | **Always current** |
|
311
325
|
|
326
|
+
## 🎯 Microservice Decomposition (NEW)
|
327
|
+
|
328
|
+
For large, complex specifications, SpecPulse can automatically decompose them into microservices:
|
329
|
+
|
330
|
+
```bash
|
331
|
+
# Decompose a specification
|
332
|
+
/sp-decompose 001
|
333
|
+
```
|
334
|
+
|
335
|
+
This creates:
|
336
|
+
- **Service Boundaries**: Using Domain-Driven Design principles
|
337
|
+
- **API Contracts**: OpenAPI 3.0 specifications for each service
|
338
|
+
- **Interface Definitions**: TypeScript/Java/Go interfaces
|
339
|
+
- **Integration Map**: Service communication architecture
|
340
|
+
- **Migration Plan**: Strategy for breaking down monoliths
|
341
|
+
|
342
|
+
### Workflow Adaptation
|
343
|
+
|
344
|
+
SpecPulse automatically adapts based on architecture:
|
345
|
+
|
346
|
+
**Monolithic Flow:**
|
347
|
+
```
|
348
|
+
spec-001.md → plan-001.md → task-001.md (T001, T002...)
|
349
|
+
```
|
350
|
+
|
351
|
+
**Decomposed Flow:**
|
352
|
+
```
|
353
|
+
spec-001.md → decomposition/ → service plans → service tasks
|
354
|
+
├── microservices.md ├── auth-service-plan.md ├── AUTH-T001
|
355
|
+
├── api-contracts/ ├── user-service-plan.md ├── USER-T001
|
356
|
+
└── interfaces/ └── integration-plan.md └── INT-T001
|
357
|
+
```
|
358
|
+
|
312
359
|
## 🏗️ Project Structure
|
313
360
|
|
314
361
|
```
|
@@ -325,19 +372,31 @@ my-project/
|
|
325
372
|
│ └── decisions.md # Architecture Decision Records
|
326
373
|
├── specs/ # Feature specifications
|
327
374
|
│ └── 001-feature/
|
328
|
-
│
|
375
|
+
│ ├── spec-001.md
|
376
|
+
│ └── decomposition/ # [NEW] Microservice decomposition
|
377
|
+
│ ├── microservices.md
|
378
|
+
│ ├── api-contracts/
|
379
|
+
│ └── interfaces/
|
329
380
|
├── plans/ # Implementation plans
|
330
381
|
│ └── 001-feature/
|
331
|
-
│
|
382
|
+
│ ├── plan-001.md # Monolithic plan
|
383
|
+
│ # OR for decomposed:
|
384
|
+
│ ├── auth-service-plan.md
|
385
|
+
│ ├── user-service-plan.md
|
386
|
+
│ └── integration-plan.md
|
332
387
|
├── tasks/ # Task breakdowns
|
333
388
|
│ └── 001-feature/
|
334
|
-
│
|
389
|
+
│ ├── task-001.md # Monolithic tasks
|
390
|
+
│ # OR for decomposed:
|
391
|
+
│ ├── auth-service-tasks.md
|
392
|
+
│ ├── user-service-tasks.md
|
393
|
+
│ └── integration-tasks.md
|
335
394
|
├── templates/ # Customizable templates
|
336
395
|
├── scripts/ # Shell scripts for AI execution
|
337
|
-
│ ├── pulse-init.sh # Feature initialization
|
338
|
-
│ ├── pulse-spec.sh # Specification creation
|
339
|
-
│ ├── pulse-plan.sh # Plan generation
|
340
|
-
│ └── pulse-task.sh # Task breakdown
|
396
|
+
│ ├── sp-pulse-init.sh # Feature initialization
|
397
|
+
│ ├── sp-pulse-spec.sh # Specification creation
|
398
|
+
│ ├── sp-pulse-plan.sh # Plan generation
|
399
|
+
│ └── sp-pulse-task.sh # Task breakdown
|
341
400
|
└── PULSE.md # Project manifest
|
342
401
|
```
|
343
402
|
|
@@ -349,7 +408,7 @@ Create project-specific templates:
|
|
349
408
|
|
350
409
|
```bash
|
351
410
|
# Copy and modify templates
|
352
|
-
cp templates/spec.md templates/custom-spec.md
|
411
|
+
cp templates/spec-001.md templates/custom-spec.md
|
353
412
|
# Edit to match your needs
|
354
413
|
```
|
355
414
|
|
@@ -413,7 +472,7 @@ specpulse validate --component constitution
|
|
413
472
|
**Solution**: Check template path in config.yaml
|
414
473
|
|
415
474
|
### AI Commands Not Working
|
416
|
-
**Problem**: `/pulse` commands not recognized
|
475
|
+
**Problem**: `/sp-pulse` commands not recognized
|
417
476
|
**Solution**: Ensure you ran `specpulse init --ai claude` or `--ai gemini`
|
418
477
|
|
419
478
|
</details>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
specpulse/__init__.py,sha256=S9i2N7RizTFgCe7PsAehlM3Ba_FtbAQPxCDSKcO_tbQ,270
|
2
|
+
specpulse/cli/__init__.py,sha256=DpX6FoRJtSNjudsmZ3mTih_RIaWyiIgxew4-f8mOmFY,70
|
3
|
+
specpulse/cli/main.py,sha256=dzUiUW7vmRRv_scaahgnywA-EQge-ntIm0vBckRsBew,31389
|
4
|
+
specpulse/core/__init__.py,sha256=VKHGdPDM38QM9yDIq05jxol4q8WFlFAeltOzYLsPuto,132
|
5
|
+
specpulse/core/specpulse.py,sha256=glEYB-AiXN6wTKgVc3Yu0BHjUMByNBzcjMds7CA-FBo,32717
|
6
|
+
specpulse/core/validator.py,sha256=dnaNUx7tj8V2K1TE6WPwrNWEiCpqC_b_DKryq6-A7Hk,12057
|
7
|
+
specpulse/resources/commands/claude/sp-continue.md,sha256=3_vikDSNRN0slNtKQGWl9dWEgkT-Q7nFpUxHKnzBCKs,5175
|
8
|
+
specpulse/resources/commands/claude/sp-decompose.md,sha256=bYn1KHYvab64ajgPkWw4aiJMKkucxAwhWmaLtaclX_8,7657
|
9
|
+
specpulse/resources/commands/claude/sp-plan.md,sha256=kQ5-WgpJAI21VHYemrTvE6HVmF12d7I9FDjA4e8CeJc,7760
|
10
|
+
specpulse/resources/commands/claude/sp-pulse.md,sha256=IjoB2NeoTIjJEATcxG0mCfagRuzlRb7CwHawiotAIjk,5023
|
11
|
+
specpulse/resources/commands/claude/sp-spec.md,sha256=i3NmQbzbWlFSlu9jJpg6j3TyfW2TCAoMH9qVtJvIWW0,6242
|
12
|
+
specpulse/resources/commands/claude/sp-status.md,sha256=pUcFsYdmvAPTA1BdRjiN-AWi9I8IN4GiEErjfK4wNOU,4633
|
13
|
+
specpulse/resources/commands/claude/sp-task.md,sha256=j-2hbxq-wLxcwBu2mQbO2HhGXkoiwLmgXyiGwTX1q_w,10920
|
14
|
+
specpulse/resources/commands/gemini/sp-continue.toml,sha256=_iyo_g9IV0-FtIpiVknKNaegmhyc3DHb41lvfpf7anU,1784
|
15
|
+
specpulse/resources/commands/gemini/sp-decompose.toml,sha256=uQdx0tavjUGRns9yNaz9Hlbk6eCip801bi-ijH88Rj4,1495
|
16
|
+
specpulse/resources/commands/gemini/sp-plan.toml,sha256=ROG9G3V9VGahHmQqdxs2znQgnrYx_8Hg4Wu3Yzp0Fpo,2271
|
17
|
+
specpulse/resources/commands/gemini/sp-pulse.toml,sha256=YFpp1V_jCnP1mODU-9jpXyoGW61oSX-Y1YXewDCYYac,1307
|
18
|
+
specpulse/resources/commands/gemini/sp-spec.toml,sha256=0U5BIiCMGaXDvp4KoXEKu08VpL54iCiMMuoVoxRG1BE,2284
|
19
|
+
specpulse/resources/commands/gemini/sp-status.toml,sha256=PNZvCwwbzTYyA5Bm2M4SYw1ndz0vRqCkqT-_3pYJ_Qs,1979
|
20
|
+
specpulse/resources/commands/gemini/sp-task.toml,sha256=fuQkdK8wI279wy_qAOKGqxJQqIQc5C9xCDf7oNoCah8,2663
|
21
|
+
specpulse/resources/memory/constitution.md,sha256=34M0dMDzeE9JfAaNjK1S9uxVSD1I8KIaEtb8C3_7Ru8,8341
|
22
|
+
specpulse/resources/memory/context.md,sha256=B-6m5f4WP8x_VXp0S9fbqm8tHH-2PZ7d9VWzW934hpo,1957
|
23
|
+
specpulse/resources/memory/decisions.md,sha256=ZwzVyOPB2mIzwveWpGmedej7ncI81GALg8WVy6AeZA4,686
|
24
|
+
specpulse/resources/scripts/sp-pulse-decompose.py,sha256=CH360Rp3dRprNnwd_XeNblfcGYjhW8dyfF9v3K8bDaM,2013
|
25
|
+
specpulse/resources/scripts/sp-pulse-decompose.sh,sha256=EN8iF02pij4yse3of3fgO8ZI6YKFUV7Z7f4epEmaKXI,1431
|
26
|
+
specpulse/resources/scripts/sp-pulse-init.py,sha256=-_L9TOr1zKCSJOS8dBUbeKOkWBlR5I6kB5ZUuEF3GBQ,6688
|
27
|
+
specpulse/resources/scripts/sp-pulse-init.sh,sha256=Be3ogbKQCy2WMONC22Ht-15gxgQS0sB7U74EoSrDnMU,3164
|
28
|
+
specpulse/resources/scripts/sp-pulse-plan.py,sha256=PYyvVPP0Wo-6VAAnRAeesfv6gV2qegs6nEWwLeqBTj4,8614
|
29
|
+
specpulse/resources/scripts/sp-pulse-plan.sh,sha256=0G6WMDV2ChO4kkulgEL49qZFg7adwf3-lqeH3Rvs7T4,4199
|
30
|
+
specpulse/resources/scripts/sp-pulse-spec.py,sha256=IzThoWPcfgApJ_FeTGoA54_LEoWahQkgLeEHpHx0bKs,7485
|
31
|
+
specpulse/resources/scripts/sp-pulse-spec.sh,sha256=TVA1ktylZZy_9yj-4inncP1_FoVp8vteP5kaWelLeks,4194
|
32
|
+
specpulse/resources/scripts/sp-pulse-task.py,sha256=hVi7E81azLWqRuzEYtzz_uIJKahfh-mGu8zxOvwjsVY,10826
|
33
|
+
specpulse/resources/scripts/sp-pulse-task.sh,sha256=RmV6fIVIssK9QR4jAKzHhghrl4voG7PpXXC0yPi6_Rk,5039
|
34
|
+
specpulse/resources/templates/plan.md,sha256=KSCB5HvYRjqrM-VTe7nwJgR1MjGI748YE2BJtn41g4Q,6689
|
35
|
+
specpulse/resources/templates/spec.md,sha256=yVWn2LhZn0IMLJ9XuBjPWSWNS4GYJFowRrqRMT2wJf4,3748
|
36
|
+
specpulse/resources/templates/task.md,sha256=mGRlE4WD2E1Lh5gGr7kyOEmoXDbjLhUVMG9D7ZGCpmw,5357
|
37
|
+
specpulse/resources/templates/decomposition/api-contract.yaml,sha256=bi-Gkm_YN-ghequB2qDg9ZZ3xHFdWngZ9RXODyP0EG8,322
|
38
|
+
specpulse/resources/templates/decomposition/integration-plan.md,sha256=BDi2aJ0THf-XbdrBZVOPS8g4QV409i9W__razgFU4LE,2618
|
39
|
+
specpulse/resources/templates/decomposition/interface.ts,sha256=hctQVneU8If19dP3b1_pQG-1P0qrr2HTa1JJZFn6x3w,324
|
40
|
+
specpulse/resources/templates/decomposition/microservices.md,sha256=YqCcRPRAF1AlntuptG6QuaP9FJ4Tz8dHIV00ZvKE-lk,787
|
41
|
+
specpulse/resources/templates/decomposition/service-plan.md,sha256=YCAu0-jRKNQ-GJQa_qlqTYMfzPXPd9-GxKob0fHABfU,3001
|
42
|
+
specpulse/utils/__init__.py,sha256=VTGRDsVLl2JIXYyHB9Sidxj5acY_W-LJI2MMtY1pwb0,122
|
43
|
+
specpulse/utils/console.py,sha256=xn4Koc1_ph61bvBTlvPOwAbqZ5ac7TZ51xTWJbwG0sc,12973
|
44
|
+
specpulse/utils/git_utils.py,sha256=RzJBZoyWp5on1_wq2lY1bs__UJsGKSDpAUeDKFdRYlQ,6095
|
45
|
+
specpulse-1.2.0.dist-info/licenses/LICENSE,sha256=ImSFezK-Phy0oTBqZipcajsJfPZT8mmg8m3jkgNdNhA,1066
|
46
|
+
specpulse-1.2.0.dist-info/METADATA,sha256=w5JwHZzcqxWgAQDShF2DG-lnT3wsAXTWdGIcM4RI94k,18950
|
47
|
+
specpulse-1.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
48
|
+
specpulse-1.2.0.dist-info/entry_points.txt,sha256=GwMaCKWSCFZlJMrTNavEYrnREynIS6dM3B0ILxnaouA,83
|
49
|
+
specpulse-1.2.0.dist-info/top_level.txt,sha256=pEfkFil5xe38J00OHrBrJ07xpbm6bRnGhI8B07O9KeI,10
|
50
|
+
specpulse-1.2.0.dist-info/RECORD,,
|