specpulse 1.4.0__py3-none-any.whl → 1.4.2__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.
Files changed (31) hide show
  1. specpulse/__init__.py +1 -1
  2. specpulse/cli/main.py +30 -8
  3. specpulse/core/specpulse.py +328 -3
  4. specpulse/core/validator.py +115 -5
  5. specpulse/resources/commands/gemini/sp-pulse.toml +80 -23
  6. specpulse/resources/commands/gemini/sp-spec.toml +90 -45
  7. specpulse/resources/scripts/sp-pulse-decompose.ps1 +74 -0
  8. specpulse/resources/scripts/sp-pulse-execute.ps1 +177 -0
  9. specpulse/resources/scripts/sp-pulse-init.ps1 +36 -11
  10. specpulse/resources/scripts/sp-pulse-init.sh +29 -8
  11. specpulse/resources/scripts/sp-pulse-plan.sh +42 -17
  12. specpulse/resources/scripts/sp-pulse-spec.sh +49 -25
  13. specpulse/resources/scripts/sp-pulse-task.sh +49 -17
  14. specpulse/resources/templates/decomposition/api-contract.yaml +344 -12
  15. specpulse/resources/templates/decomposition/integration-plan.md +249 -97
  16. specpulse/resources/templates/decomposition/interface.ts +244 -13
  17. specpulse/resources/templates/decomposition/microservice.md +151 -0
  18. specpulse/resources/templates/decomposition/service-plan.md +187 -155
  19. specpulse/resources/templates/plan.md +134 -225
  20. specpulse/resources/templates/spec.md +94 -125
  21. specpulse/resources/templates/task.md +216 -161
  22. specpulse/utils/console.py +54 -6
  23. specpulse/utils/git_utils.py +47 -4
  24. specpulse/utils/version_check.py +15 -2
  25. {specpulse-1.4.0.dist-info → specpulse-1.4.2.dist-info}/METADATA +36 -17
  26. {specpulse-1.4.0.dist-info → specpulse-1.4.2.dist-info}/RECORD +30 -28
  27. specpulse/resources/templates/decomposition/microservices.md +0 -35
  28. {specpulse-1.4.0.dist-info → specpulse-1.4.2.dist-info}/WHEEL +0 -0
  29. {specpulse-1.4.0.dist-info → specpulse-1.4.2.dist-info}/entry_points.txt +0 -0
  30. {specpulse-1.4.0.dist-info → specpulse-1.4.2.dist-info}/licenses/LICENSE +0 -0
  31. {specpulse-1.4.0.dist-info → specpulse-1.4.2.dist-info}/top_level.txt +0 -0
@@ -1,165 +1,220 @@
1
- <!-- SpecPulse Task List Template v3.0 - AI-Optimized -->
2
- <!-- AI Instructions: Generate from implementation plan using SDD 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
- ## SDD Gates Compliance
53
-
54
- ### Pre-Implementation Validation
55
- {% for gate in SDD_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 %}
1
+ # Task Breakdown: {{feature_name}}
2
+
3
+ ## Feature Overview
4
+ - **Feature ID**: {{feature_id}}
5
+ - **Specification**: SPEC-{{spec_id}}
6
+ - **Plan**: PLAN-{{plan_id}}
7
+ - **Created**: {{date}}
8
+
9
+ ## Task Summary
10
+ Total Tasks: {{total_tasks}}
11
+ Estimated Effort: {{estimated_effort}}
12
+ Priority: {{priority}}
13
+
14
+ ## Task Status Legend
15
+ - [ ] Pending
16
+ - [>] In Progress
17
+ - [x] Completed
18
+ - [!] Blocked
19
+
20
+ ## Phase 0: Foundation Tasks
21
+
22
+ ### T001: Project Setup
23
+ **Complexity**: Simple
24
+ **Estimate**: 1 hour
25
+ **Status**: [ ] Pending
26
+
27
+ **Description**: Initialize project structure and configuration
28
+ **Acceptance Criteria**:
29
+ - [ ] Project scaffolding created
30
+ - [ ] Configuration files in place
31
+ - [ ] Build system configured
32
+
33
+ **Technical Notes**:
34
+ - Use standard project template
35
+ - Ensure all paths are relative
81
36
 
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
- ```
37
+ ---
38
+
39
+ ### T002: Development Environment
40
+ **Complexity**: Simple
41
+ **Estimate**: 2 hours
42
+ **Status**: [ ] Pending
43
+
44
+ **Description**: Set up development environment and dependencies
45
+ **Acceptance Criteria**:
46
+ - [ ] All dependencies installed
47
+ - [ ] Environment variables configured
48
+ - [ ] Development server runs successfully
49
+
50
+ **Technical Notes**:
51
+ - Document any special setup requirements
52
+ - Create setup script if needed
53
+
54
+ ---
55
+
56
+ ## Phase 1: Core Implementation Tasks
57
+
58
+ ### T003: Data Models
59
+ **Complexity**: Medium
60
+ **Estimate**: 4 hours
61
+ **Status**: [ ] Pending
62
+
63
+ **Description**: Create data models and database schema
64
+ **Acceptance Criteria**:
65
+ - [ ] Models defined with proper types
66
+ - [ ] Relationships established
67
+ - [ ] Migrations created and tested
68
+
69
+ **Technical Notes**:
70
+ - Follow existing naming conventions
71
+ - Add appropriate indexes
72
+
73
+ ---
74
+
75
+ ### T004: Business Logic
76
+ **Complexity**: Complex
77
+ **Estimate**: 8 hours
78
+ **Status**: [ ] Pending
79
+
80
+ **Description**: Implement core business logic
81
+ **Acceptance Criteria**:
82
+ - [ ] All business rules implemented
83
+ - [ ] Edge cases handled
84
+ - [ ] Unit tests written and passing
85
+
86
+ **Technical Notes**:
87
+ - Ensure proper error handling
88
+ - Follow SOLID principles
89
+
90
+ ---
91
+
92
+ ### T005: API Endpoints
93
+ **Complexity**: Medium
94
+ **Estimate**: 6 hours
95
+ **Status**: [ ] Pending
96
+
97
+ **Description**: Create API endpoints for feature
98
+ **Acceptance Criteria**:
99
+ - [ ] All endpoints implemented
100
+ - [ ] Request/response validation
101
+ - [ ] API documentation updated
102
+
103
+ **Technical Notes**:
104
+ - Follow RESTful conventions
105
+ - Implement proper status codes
106
+
107
+ ---
108
+
109
+ ## Phase 2: Enhancement Tasks
110
+
111
+ ### T006: Error Handling
112
+ **Complexity**: Medium
113
+ **Estimate**: 3 hours
114
+ **Status**: [ ] Pending
115
+
116
+ **Description**: Implement comprehensive error handling
117
+ **Acceptance Criteria**:
118
+ - [ ] All errors caught and logged
119
+ - [ ] User-friendly error messages
120
+ - [ ] Error recovery mechanisms
109
121
 
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
- ### SDD Gates
146
- - All tasks MUST pass SDD 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
- - Testing strategy based on Principle 6: Quality Assurance
159
- - Appropriate tests for your project type
122
+ **Technical Notes**:
123
+ - Use centralized error handling
124
+ - Log errors with context
160
125
 
161
126
  ---
162
- **Generated by**: {{ ai_assistant }} on {{ date }}
163
- **Feature**: {{ feature_name }}
164
- **SDD Gates**: {{ SDD_status | default("PENDING VALIDATION") }}
165
- **Next Steps**: Execute tasks following SDD order
127
+
128
+ ### T007: Performance Optimization
129
+ **Complexity**: Medium
130
+ **Estimate**: 4 hours
131
+ **Status**: [ ] Pending
132
+
133
+ **Description**: Optimize performance bottlenecks
134
+ **Acceptance Criteria**:
135
+ - [ ] Database queries optimized
136
+ - [ ] Caching implemented where needed
137
+ - [ ] Load testing completed
138
+
139
+ **Technical Notes**:
140
+ - Profile before optimizing
141
+ - Document optimization decisions
142
+
143
+ ---
144
+
145
+ ## Phase 3: Testing & Documentation
146
+
147
+ ### T008: Integration Testing
148
+ **Complexity**: Medium
149
+ **Estimate**: 4 hours
150
+ **Status**: [ ] Pending
151
+
152
+ **Description**: Write and run integration tests
153
+ **Acceptance Criteria**:
154
+ - [ ] All happy paths tested
155
+ - [ ] Error scenarios tested
156
+ - [ ] Tests automated in CI/CD
157
+
158
+ **Technical Notes**:
159
+ - Use existing test framework
160
+ - Mock external dependencies
161
+
162
+ ---
163
+
164
+ ### T009: Documentation
165
+ **Complexity**: Simple
166
+ **Estimate**: 2 hours
167
+ **Status**: [ ] Pending
168
+
169
+ **Description**: Complete feature documentation
170
+ **Acceptance Criteria**:
171
+ - [ ] API documentation complete
172
+ - [ ] User guide written
173
+ - [ ] Code comments added
174
+
175
+ **Technical Notes**:
176
+ - Follow documentation standards
177
+ - Include examples
178
+
179
+ ---
180
+
181
+ ### T010: Deployment
182
+ **Complexity**: Simple
183
+ **Estimate**: 2 hours
184
+ **Status**: [ ] Pending
185
+
186
+ **Description**: Deploy feature to production
187
+ **Acceptance Criteria**:
188
+ - [ ] Deployed successfully
189
+ - [ ] Monitoring configured
190
+ - [ ] Rollback plan tested
191
+
192
+ **Technical Notes**:
193
+ - Follow deployment checklist
194
+ - Verify in staging first
195
+
196
+ ---
197
+
198
+ ## Dependencies
199
+ - T003 depends on T001 and T002
200
+ - T004 depends on T003
201
+ - T005 depends on T004
202
+ - T006-T007 can be done in parallel after T005
203
+ - T008 depends on all implementation tasks
204
+ - T009 can be done in parallel with testing
205
+ - T010 depends on all other tasks
206
+
207
+ ## Progress Tracking
208
+ ```
209
+ [##########----------] 50% Complete
210
+ Completed: 5/10
211
+ In Progress: 1/10
212
+ Pending: 4/10
213
+ Blocked: 0/10
214
+ ```
215
+
216
+ ## Notes
217
+ <!-- Additional task notes -->
218
+ - Review with team before starting
219
+ - Update estimates based on actual effort
220
+ - Log any blockers immediately
@@ -131,9 +131,17 @@ class Console:
131
131
 
132
132
  def spinner(self, message: str):
133
133
  """Show a loading spinner"""
134
- # Simplified version for Windows compatibility
134
+ # Return a context manager for compatibility
135
+ class SpinnerContext:
136
+ def __enter__(self):
137
+ return self
138
+ def __exit__(self, *args):
139
+ pass
140
+ def update(self, message):
141
+ pass
142
+
135
143
  self.console.print(f"[bold cyan]{message}...[/bold cyan]")
136
- return None
144
+ return SpinnerContext()
137
145
 
138
146
  def animated_text(self, text: str, delay: float = 0.03):
139
147
  """Print text with typewriter effect"""
@@ -216,6 +224,42 @@ class Console:
216
224
  box=box.DOUBLE
217
225
  )
218
226
  self.console.print(panel)
227
+
228
+ def type_effect(self, text: str, delay: float = 0.05):
229
+ """Display text with typing effect"""
230
+ for char in text:
231
+ self.console.print(char, end="")
232
+ import time
233
+ time.sleep(delay)
234
+ self.console.print()
235
+
236
+ def interactive_menu(self, title: str, options: List[str]) -> int:
237
+ """Display interactive menu and get user choice"""
238
+ self.header(title)
239
+ for i, option in enumerate(options, 1):
240
+ self.console.print(f"[bright_yellow]{i}.[/bright_yellow] {option}")
241
+
242
+ while True:
243
+ try:
244
+ choice = int(input("\nSelect option: "))
245
+ if 1 <= choice <= len(options):
246
+ return choice - 1
247
+ except (ValueError, KeyboardInterrupt):
248
+ pass
249
+ self.error("Invalid choice. Please try again.")
250
+
251
+ def animation_wave(self, text: str = "Processing", duration: float = 2.0):
252
+ """Display wave animation"""
253
+ import time
254
+ frames = ["⚪⚫⚫⚫", "⚫⚪⚫⚫", "⚫⚫⚪⚫", "⚫⚫⚫⚪", "⚫⚫⚪⚫", "⚫⚪⚫⚫"]
255
+ start_time = time.time()
256
+ i = 0
257
+
258
+ with self.console.status(f"[bold green]{text}...", spinner="dots") as status:
259
+ while time.time() - start_time < duration:
260
+ status.update(f"[bold green]{text}... {frames[i % len(frames)]}")
261
+ time.sleep(0.2)
262
+ i += 1
219
263
 
220
264
  def validation_results(self, results: Dict[str, bool]):
221
265
  """Display validation results with visual indicators"""
@@ -305,17 +349,21 @@ class Console:
305
349
  def gradient_text(self, text: str, colors: List[str] = None):
306
350
  """Print text with gradient colors"""
307
351
  if not colors:
308
- colors = ["bright_red", "bright_yellow", "bright_green",
352
+ colors = ["bright_red", "bright_yellow", "bright_green",
309
353
  "bright_cyan", "bright_blue", "bright_magenta"]
310
-
354
+
311
355
  words = text.split()
312
356
  colored_words = []
313
-
357
+
314
358
  for i, word in enumerate(words):
315
359
  color = colors[i % len(colors)]
316
360
  colored_words.append(f"[{color}]{word}[/{color}]")
317
-
361
+
318
362
  self.console.print(" ".join(colored_words))
363
+
364
+ def tree_structure(self, data: Dict[str, Any], title: str = "Project Structure"):
365
+ """Display tree structure - alias for tree method"""
366
+ return self.tree(title, data)
319
367
 
320
368
  def celebration(self):
321
369
  """Show celebration animation"""
@@ -29,10 +29,24 @@ class GitUtils:
29
29
  except FileNotFoundError:
30
30
  return False, "Git is not installed or not in PATH"
31
31
 
32
- def check_git_installed(self) -> bool:
32
+ @staticmethod
33
+ def check_git_installed() -> bool:
34
+ """Check if git is installed (static method)"""
35
+ try:
36
+ result = subprocess.run(
37
+ ["git", "--version"],
38
+ capture_output=True,
39
+ text=True,
40
+ check=True
41
+ )
42
+ return True
43
+ except (subprocess.CalledProcessError, FileNotFoundError):
44
+ return False
45
+
46
+ @staticmethod
47
+ def is_git_installed() -> bool:
33
48
  """Check if git is installed"""
34
- success, _ = self._run_git_command("--version")
35
- return success
49
+ return GitUtils.check_git_installed()
36
50
 
37
51
  def is_git_repo(self, path: Optional[Path] = None) -> bool:
38
52
  """Check if directory is a git repository"""
@@ -175,4 +189,33 @@ class GitUtils:
175
189
  success, output = self._run_git_command("tag", "-l")
176
190
  if success:
177
191
  return output.split('\n') if output else []
178
- return []
192
+ return []
193
+
194
+ # Additional methods for test compatibility
195
+ def is_repo(self) -> bool:
196
+ """Check if current directory is a git repository"""
197
+ return (self.repo_path / ".git").exists()
198
+
199
+ def add_all_files(self) -> bool:
200
+ """Add all files to staging area"""
201
+ return self.add_files()
202
+
203
+ def get_commits(self, limit: int = 10) -> List[str]:
204
+ """Get recent commits"""
205
+ return self.get_log(limit)
206
+
207
+ def stash(self) -> bool:
208
+ """Stash current changes"""
209
+ success, _ = self._run_git_command("stash")
210
+ return success
211
+
212
+ def stash_pop(self) -> bool:
213
+ """Pop stashed changes"""
214
+ success, _ = self._run_git_command("stash", "pop")
215
+ return success
216
+
217
+ def merge(self, branch: str) -> bool:
218
+ """Merge branch into current branch"""
219
+ success, _ = self._run_git_command("merge", branch)
220
+ return success
221
+
@@ -78,11 +78,24 @@ def get_update_message(current: str, latest: str, is_major: bool) -> str:
78
78
  Returns:
79
79
  Formatted update message
80
80
  """
81
+ # Determine update type
82
+ curr_parts = current.split('.')
83
+ latest_parts = latest.split('.')
84
+
85
+ update_type = "patch"
86
+ if len(curr_parts) >= 2 and len(latest_parts) >= 2:
87
+ if curr_parts[0] != latest_parts[0]:
88
+ update_type = "major"
89
+ elif curr_parts[1] != latest_parts[1]:
90
+ update_type = "minor"
91
+ else:
92
+ update_type = "patch"
93
+
81
94
  if is_major:
82
- urgency = "[!] MAJOR"
95
+ urgency = f"[!] MAJOR ({update_type} update)"
83
96
  color = "bright_red"
84
97
  else:
85
- urgency = "[i]"
98
+ urgency = f"[i] {update_type.upper()}"
86
99
  color = "yellow"
87
100
 
88
101
  message = f"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specpulse
3
- Version: 1.4.0
3
+ Version: 1.4.2
4
4
  Summary: Specification-Driven Development Framework
5
5
  Home-page: https://github.com/specpulse
6
6
  Author: SpecPulse
@@ -67,13 +67,22 @@ Dynamic: requires-python
67
67
 
68
68
  SpecPulse is a universal **Specification-Driven Development (SDD)** framework that works with ANY software project - web apps, mobile apps, desktop software, games, APIs, ML projects, and more. It ensures every feature starts with clear specifications, validated plans, and tracked tasks.
69
69
 
70
- > **Latest Update (v1.4.0)** - Complete Framework Revolution:
70
+ > **Latest Update (v1.4.2)** - Template System Enhancement:
71
+ > - 📁 **Physical Template Files**: Templates now exist as physical files for AI tools to read
72
+ > - 🔧 **Complete PowerShell Support**: Added PowerShell scripts matching all Bash functionality
73
+ > - 📝 **Enhanced Decomposition Templates**: Full microservice decomposition template support
74
+ >
75
+ > **v1.4.1** - Bug Fix Release:
76
+ > - 🐛 **Fixed Version Display**: Corrected `--version` command showing old version
77
+ >
78
+ > **v1.4.0** - Complete Framework Revolution:
71
79
  > - 🚀 **Universal SDD Framework**: Transformed from Constitutional to Specification-Driven Development
72
80
  > - 🎯 **No Technology Restrictions**: Support for ANY technology stack - web, mobile, desktop, games, ML
73
- > - 🧪 **86% Test Coverage**: Complete test suite rewrite with 98.3% success rate
81
+ > - 🧪 **Comprehensive Testing**: Full test suite with extensive coverage
74
82
  > - ✨ **9 Universal Principles**: Flexible principles replacing rigid articles
75
83
  > - 🔄 **Major API Updates**: All methods renamed from `constitution` to `sdd_compliance`
76
84
  > - 📝 **Enhanced Documentation**: Complete overhaul of docs and templates
85
+ > - 🏗️ **Hybrid Template System**: Templates exist as both files and embedded code
77
86
 
78
87
  ### Why SpecPulse?
79
88
 
@@ -276,10 +285,11 @@ Stop guessing what users want:
276
285
  Claude and Gemini use slash commands that accept arguments via `$ARGUMENTS`:
277
286
 
278
287
  **Script Execution:**
279
- - **All Platforms**: Bash (.sh) scripts only
280
- - **Requirements**: Bash shell required (Git Bash on Windows, native on Linux/macOS)
288
+ - **Cross-Platform Scripts**: Bash (.sh) and PowerShell (.ps1) scripts included
289
+ - **Requirements**: Bash shell (Git Bash on Windows) or PowerShell
281
290
  - **Universal Compatibility**: Works whether installed via PyPI or source code
282
291
  - **Unicode Support**: Full international character support (≤, ≥, →, ←)
292
+ - **Template System**: Templates exist as physical files in `resources/templates/` for AI tools to read
283
293
 
284
294
  ```bash
285
295
  /sp-pulse user-authentication # Start new feature with name
@@ -301,14 +311,15 @@ Claude and Gemini use slash commands that accept arguments via `$ARGUMENTS`:
301
311
  - Commands capture arguments using `$ARGUMENTS` variable
302
312
  - **Shell scripts** in `resources/scripts/` folder process the arguments:
303
313
  - `sp-pulse-*.sh` - Bash scripts (all platforms)
304
- - AI reads templates from `resources/templates/` folder
314
+ - `sp-pulse-*.ps1` - PowerShell scripts (Windows native)
315
+ - Templates are **physical files** in `resources/templates/` and also embedded in code
305
316
  - Results are saved in `specs/`, `plans/`, `tasks/` folders
306
317
  - Memory system tracks progress in `memory/` folder
307
318
 
308
319
  **🔒 Important Security Rules:**
309
320
  - **Protected Directories** (Read-Only after init):
310
- - `templates/` - Original template files
311
- - `scripts/` - Shell scripts
321
+ - `templates/` - Generated template files (created on init)
322
+ - `scripts/` - Shell and PowerShell scripts
312
323
  - `commands/` - AI command definitions
313
324
  - `.claude/` and `.gemini/` - AI configurations
314
325
  - **Editable Directories**:
@@ -316,7 +327,7 @@ Claude and Gemini use slash commands that accept arguments via `$ARGUMENTS`:
316
327
  - `plans/` - Implementation plans (AI creates/edits here)
317
328
  - `tasks/` - Task breakdowns (AI creates/edits here)
318
329
  - `memory/` - Project context and decisions
319
- - **Workflow**: Templates are COPIED to working directories, never modified directly
330
+ - **Workflow**: Templates are used as references, content is generated in working directories
320
331
 
321
332
  **Claude vs Gemini:**
322
333
  - **Claude**: Uses Markdown command files (`.claude/commands/*.md`) with YAML frontmatter
@@ -466,12 +477,20 @@ my-project/
466
477
  │ ├── auth-service-tasks.md
467
478
  │ ├── user-service-tasks.md
468
479
  │ └── integration-tasks.md
469
- ├── templates/ # Customizable templates
470
- ├── scripts/ # Shell scripts for AI execution
471
- │ ├── sp-pulse-init.sh # Feature initialization
472
- │ ├── sp-pulse-spec.sh # Specification creation
473
- │ ├── sp-pulse-plan.sh # Plan generation
474
- └── sp-pulse-task.sh # Task breakdown
480
+ ├── templates/ # Generated templates (created on init)
481
+ ├── scripts/ # Cross-platform scripts for AI execution
482
+ │ ├── sp-pulse-init.sh # Feature initialization (Bash)
483
+ │ ├── sp-pulse-init.ps1 # Feature initialization (PowerShell)
484
+ │ ├── sp-pulse-spec.sh # Specification creation (Bash)
485
+ ├── sp-pulse-spec.ps1 # Specification creation (PowerShell)
486
+ │ ├── sp-pulse-plan.sh # Plan generation (Bash)
487
+ │ ├── sp-pulse-plan.ps1 # Plan generation (PowerShell)
488
+ │ ├── sp-pulse-task.sh # Task breakdown (Bash)
489
+ │ ├── sp-pulse-task.ps1 # Task breakdown (PowerShell)
490
+ │ ├── sp-pulse-decompose.sh # Microservice decomposition (Bash)
491
+ │ ├── sp-pulse-decompose.ps1 # Microservice decomposition (PowerShell)
492
+ │ ├── sp-pulse-execute.sh # Continuous task execution (Bash)
493
+ │ └── sp-pulse-execute.ps1 # Continuous task execution (PowerShell)
475
494
  └── PULSE.md # Project manifest
476
495
  ```
477
496
 
@@ -621,8 +640,8 @@ MIT License - see [LICENSE](LICENSE) file for details.
621
640
  ## 🚦 Project Status
622
641
 
623
642
  [![Build Status](https://img.shields.io/badge/build-passing-brightgreen)](https://github.com/specpulse/specpulse)
624
- [![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen)](https://github.com/specpulse/specpulse)
625
- [![Tests](https://img.shields.io/badge/tests-37%2B%20passed-brightgreen)](https://github.com/specpulse/specpulse)
643
+ [![Coverage](https://img.shields.io/badge/coverage-improving-yellow)](https://github.com/specpulse/specpulse)
644
+ [![Tests](https://img.shields.io/badge/tests-core%20passing-brightgreen)](https://github.com/specpulse/specpulse)
626
645
  [![Maintainability](https://img.shields.io/badge/maintainability-A-brightgreen)](https://github.com/specpulse/specpulse)
627
646
 
628
647
  ---