specpulse 1.3.2__tar.gz → 1.4.0__tar.gz
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-1.3.2 → specpulse-1.4.0}/MANIFEST.in +1 -1
- {specpulse-1.3.2/specpulse.egg-info → specpulse-1.4.0}/PKG-INFO +70 -29
- {specpulse-1.3.2 → specpulse-1.4.0}/README.md +68 -28
- {specpulse-1.3.2 → specpulse-1.4.0}/pyproject.toml +2 -1
- {specpulse-1.3.2 → specpulse-1.4.0}/requirements.txt +2 -1
- {specpulse-1.3.2 → specpulse-1.4.0}/setup.py +1 -1
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/__init__.py +1 -1
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/cli/main.py +46 -9
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/core/specpulse.py +24 -90
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/core/validator.py +38 -34
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/claude/sp-decompose.md +17 -17
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/claude/sp-plan.md +47 -47
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/claude/sp-pulse.md +10 -10
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/claude/sp-spec.md +15 -10
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/claude/sp-task.md +15 -15
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/gemini/sp-plan.toml +17 -17
- specpulse-1.4.0/specpulse/resources/memory/constitution.md +346 -0
- specpulse-1.4.0/specpulse/resources/scripts/sp-pulse-init.ps1 +131 -0
- specpulse-1.4.0/specpulse/resources/scripts/sp-pulse-plan.ps1 +147 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/scripts/sp-pulse-plan.sh +131 -138
- specpulse-1.4.0/specpulse/resources/scripts/sp-pulse-spec.ps1 +126 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/scripts/sp-pulse-spec.sh +3 -14
- specpulse-1.4.0/specpulse/resources/scripts/sp-pulse-task.ps1 +166 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/scripts/sp-pulse-task.sh +12 -24
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/templates/decomposition/integration-plan.md +6 -5
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/templates/decomposition/microservices.md +6 -5
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/templates/decomposition/service-plan.md +6 -5
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/templates/plan.md +229 -205
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/templates/task.md +165 -165
- specpulse-1.4.0/specpulse/utils/version_check.py +128 -0
- {specpulse-1.3.2 → specpulse-1.4.0/specpulse.egg-info}/PKG-INFO +70 -29
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse.egg-info/SOURCES.txt +14 -14
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse.egg-info/requires.txt +1 -0
- specpulse-1.4.0/tests/test_all.py +555 -0
- specpulse-1.4.0/tests/test_cli.py +339 -0
- specpulse-1.4.0/tests/test_cli_fixed.py +309 -0
- specpulse-1.4.0/tests/test_complete_100.py +981 -0
- specpulse-1.4.0/tests/test_complete_coverage.py +598 -0
- specpulse-1.4.0/tests/test_console.py +193 -0
- specpulse-1.4.0/tests/test_coverage_100.py +376 -0
- specpulse-1.4.0/tests/test_final_100.py +996 -0
- specpulse-1.4.0/tests/test_git_utils.py +291 -0
- specpulse-1.4.0/tests/test_integration.py +294 -0
- specpulse-1.4.0/tests/test_specpulse.py +202 -0
- specpulse-1.4.0/tests/test_validator.py +269 -0
- specpulse-1.4.0/tests/test_version_utils.py +129 -0
- specpulse-1.3.2/specpulse/resources/memory/constitution.md +0 -237
- specpulse-1.3.2/tests/test_100_complete.py +0 -358
- specpulse-1.3.2/tests/test_100_coverage.py +0 -275
- specpulse-1.3.2/tests/test_100_percent.py +0 -530
- specpulse-1.3.2/tests/test_cli.py +0 -245
- specpulse-1.3.2/tests/test_complete_coverage.py +0 -814
- specpulse-1.3.2/tests/test_core.py +0 -389
- specpulse-1.3.2/tests/test_coverage_100.py +0 -721
- specpulse-1.3.2/tests/test_decompose.py +0 -272
- specpulse-1.3.2/tests/test_final_100.py +0 -799
- specpulse-1.3.2/tests/test_final_80_percent.py +0 -345
- specpulse-1.3.2/tests/test_final_coverage.py +0 -417
- specpulse-1.3.2/tests/test_final_coverage_push.py +0 -618
- specpulse-1.3.2/tests/test_final_push_100.py +0 -521
- specpulse-1.3.2/tests/test_full_coverage.py +0 -439
- specpulse-1.3.2/tests/test_maximum_coverage.py +0 -391
- specpulse-1.3.2/tests/test_ultimate_coverage.py +0 -424
- specpulse-1.3.2/tests/test_utils.py +0 -403
- specpulse-1.3.2/tests/test_validator.py +0 -483
- {specpulse-1.3.2 → specpulse-1.4.0}/LICENSE +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/setup.cfg +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/cli/__init__.py +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/core/__init__.py +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/claude/sp-continue.md +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/claude/sp-execute.md +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/claude/sp-status.md +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/gemini/sp-continue.toml +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/gemini/sp-decompose.toml +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/gemini/sp-execute.toml +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/gemini/sp-pulse.toml +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/gemini/sp-spec.toml +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/gemini/sp-status.toml +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/commands/gemini/sp-task.toml +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/memory/context.md +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/memory/decisions.md +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/scripts/sp-pulse-decompose.sh +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/scripts/sp-pulse-execute.sh +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/scripts/sp-pulse-init.sh +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/templates/decomposition/api-contract.yaml +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/templates/decomposition/interface.ts +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/resources/templates/spec.md +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/utils/__init__.py +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/utils/console.py +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse/utils/git_utils.py +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse.egg-info/dependency_links.txt +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse.egg-info/entry_points.txt +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse.egg-info/not-zip-safe +0 -0
- {specpulse-1.3.2 → specpulse-1.4.0}/specpulse.egg-info/top_level.txt +0 -0
@@ -2,7 +2,7 @@ include README.md
|
|
2
2
|
include LICENSE
|
3
3
|
include pyproject.toml
|
4
4
|
include requirements.txt
|
5
|
-
recursive-include specpulse/resources *.md *.sh *.toml *.yaml
|
5
|
+
recursive-include specpulse/resources *.md *.sh *.ps1 *.toml *.yaml
|
6
6
|
recursive-include specpulse/resources/templates *
|
7
7
|
recursive-include specpulse/resources/memory *
|
8
8
|
recursive-include specpulse/resources/scripts *
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: specpulse
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.4.0
|
4
4
|
Summary: Specification-Driven Development Framework
|
5
5
|
Home-page: https://github.com/specpulse
|
6
6
|
Author: SpecPulse
|
@@ -32,6 +32,7 @@ Requires-Dist: rich>=13.0
|
|
32
32
|
Requires-Dist: jinja2>=3.0
|
33
33
|
Requires-Dist: gitpython>=3.1
|
34
34
|
Requires-Dist: toml>=0.10
|
35
|
+
Requires-Dist: packaging>=21.0
|
35
36
|
Provides-Extra: dev
|
36
37
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
37
38
|
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
@@ -56,7 +57,7 @@ Dynamic: requires-python
|
|
56
57
|
|
57
58
|
*Build better software faster by putting specifications first and letting AI handle the implementation details.*
|
58
59
|
|
59
|
-
[Installation](#-installation) • [Quick Start](#-quick-start) • [Features](#-features) • [Documentation](#-documentation) • [Contributing](#-contributing)
|
60
|
+
[Installation](#-installation) • [Quick Start](#-quick-start) • [Usage Guide](#-usage-guide) • [Features](#-features) • [Documentation](#-documentation) • [Contributing](#-contributing)
|
60
61
|
|
61
62
|
</div>
|
62
63
|
|
@@ -64,21 +65,22 @@ Dynamic: requires-python
|
|
64
65
|
|
65
66
|
## 🎯 What is SpecPulse?
|
66
67
|
|
67
|
-
SpecPulse
|
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.
|
68
69
|
|
69
|
-
> **Latest Update (v1.
|
70
|
-
> - 🚀 **
|
71
|
-
> -
|
72
|
-
> -
|
73
|
-
> -
|
74
|
-
> - **
|
75
|
-
> - **
|
70
|
+
> **Latest Update (v1.4.0)** - Complete Framework Revolution:
|
71
|
+
> - 🚀 **Universal SDD Framework**: Transformed from Constitutional to Specification-Driven Development
|
72
|
+
> - 🎯 **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
|
74
|
+
> - ✨ **9 Universal Principles**: Flexible principles replacing rigid articles
|
75
|
+
> - 🔄 **Major API Updates**: All methods renamed from `constitution` to `sdd_compliance`
|
76
|
+
> - 📝 **Enhanced Documentation**: Complete overhaul of docs and templates
|
76
77
|
|
77
78
|
### Why SpecPulse?
|
78
79
|
|
80
|
+
- **🎯 Universal**: Works with ANY project type - web, mobile, desktop, games, APIs, ML
|
79
81
|
- **🔍 Clarity First**: No more ambiguous requirements or scope creep
|
80
82
|
- **🤖 AI-Optimized**: Designed specifically for Claude and Gemini workflows
|
81
|
-
- **✅ Quality Gates**: Built-in checks
|
83
|
+
- **✅ Quality Gates**: Built-in checks ensure quality for your specific project type
|
82
84
|
- **📊 Full Traceability**: Every decision, change, and requirement is tracked
|
83
85
|
- **🚀 Faster Delivery**: Structured approach reduces rework and debugging time
|
84
86
|
|
@@ -175,21 +177,21 @@ specpulse sync
|
|
175
177
|
|
176
178
|
## ✨ Features
|
177
179
|
|
178
|
-
### 🏛️
|
180
|
+
### 🏛️ Universal SDD Principles
|
179
181
|
|
180
|
-
Nine
|
182
|
+
Nine principles that enable Specification-Driven Development for ANY project:
|
181
183
|
|
182
|
-
|
|
183
|
-
|
184
|
-
| **
|
185
|
-
| **
|
186
|
-
| **
|
187
|
-
| **
|
188
|
-
| **
|
189
|
-
| **
|
190
|
-
| **
|
191
|
-
| **
|
192
|
-
| **
|
184
|
+
| # | Principle | Purpose | Applies To |
|
185
|
+
|---|-----------|---------|------------|
|
186
|
+
| **1** | Specification First | Start with clear requirements | All projects |
|
187
|
+
| **2** | Incremental Planning | Phased implementation | Web, mobile, desktop, games |
|
188
|
+
| **3** | Task Decomposition | Concrete, executable tasks | Any technology stack |
|
189
|
+
| **4** | Traceable Implementation | Link code to specs | All languages |
|
190
|
+
| **5** | Continuous Validation | Ensure spec alignment | Any framework |
|
191
|
+
| **6** | Quality Assurance | Appropriate testing | GUI, CLI, API, games |
|
192
|
+
| **7** | Architecture Documentation | Record decisions | Any architecture |
|
193
|
+
| **8** | Iterative Refinement | Evolve with learnings | All methodologies |
|
194
|
+
| **9** | Stakeholder Alignment | Shared understanding | Any team size |
|
193
195
|
|
194
196
|
### 🚦 Phase Gates System
|
195
197
|
|
@@ -201,10 +203,10 @@ Before any code is written, features must pass:
|
|
201
203
|
└────────┬────────┘
|
202
204
|
↓
|
203
205
|
┌─────────────────┐
|
204
|
-
│ Phase Gates │ →
|
205
|
-
└────────┬────────┘
|
206
|
-
↓
|
207
|
-
┌─────────────────┐
|
206
|
+
│ Phase Gates │ → SDD compliance check
|
207
|
+
└────────┬────────┘ Quality assurance strategy defined
|
208
|
+
↓ Architecture documented
|
209
|
+
┌─────────────────┐ Stakeholder alignment confirmed
|
208
210
|
│ Implementation │ Research completed
|
209
211
|
└────────┬────────┘
|
210
212
|
↓
|
@@ -253,7 +255,7 @@ memory/
|
|
253
255
|
|
254
256
|
- **Persistent Context**: Never lose track of project state
|
255
257
|
- **Decision History**: Understand why choices were made
|
256
|
-
- **
|
258
|
+
- **SDD Enforcement**: Universal principles for any software project
|
257
259
|
|
258
260
|
### 🔍 [NEEDS CLARIFICATION] Markers
|
259
261
|
|
@@ -573,6 +575,45 @@ pytest tests/
|
|
573
575
|
- **[GitHub Repository](https://github.com/specpulse/specpulse)** - Source code and issues
|
574
576
|
- **Command Reference** - See AI Integration section above for full command list
|
575
577
|
|
578
|
+
## 📚 Usage Guide
|
579
|
+
|
580
|
+
### How to Break Your Project into Features (Pulses)
|
581
|
+
|
582
|
+
A complete guide is available in **[SPECPULSE_USAGE_GUIDE.md](SPECPULSE_USAGE_GUIDE.md)** which covers:
|
583
|
+
- Feature decomposition strategies
|
584
|
+
- Sizing guidelines (3-15 tasks per pulse)
|
585
|
+
- Naming conventions (001-feature-name format)
|
586
|
+
- Real-world examples for different project types
|
587
|
+
- Best practices for feature boundaries
|
588
|
+
|
589
|
+
#### Quick Examples
|
590
|
+
|
591
|
+
**E-Commerce Platform:**
|
592
|
+
```
|
593
|
+
001-user-authentication # Registration, login, sessions
|
594
|
+
002-product-catalog # Products, categories, search
|
595
|
+
003-shopping-cart # Cart management, calculations
|
596
|
+
004-payment-processing # Gateway, transactions, receipts
|
597
|
+
005-order-management # History, tracking, refunds
|
598
|
+
```
|
599
|
+
|
600
|
+
**SaaS Application:**
|
601
|
+
```
|
602
|
+
001-tenant-management # Multi-tenancy, workspaces
|
603
|
+
002-subscription-billing # Plans, payments, invoices
|
604
|
+
003-api-management # Keys, rate limiting, docs
|
605
|
+
004-admin-dashboard # Analytics, reports, settings
|
606
|
+
005-webhook-system # Events, notifications, logs
|
607
|
+
```
|
608
|
+
|
609
|
+
**Key Principles:**
|
610
|
+
- Each pulse should be **independent** and **testable**
|
611
|
+
- Size appropriately for your project type
|
612
|
+
- Use **sequential numbering** (001, 002, 003...)
|
613
|
+
- Follow the **9 universal SDD principles**
|
614
|
+
|
615
|
+
See the full guide for detailed breakdowns and strategies.
|
616
|
+
|
576
617
|
## 📄 License
|
577
618
|
|
578
619
|
MIT License - see [LICENSE](LICENSE) file for details.
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
*Build better software faster by putting specifications first and letting AI handle the implementation details.*
|
13
13
|
|
14
|
-
[Installation](#-installation) • [Quick Start](#-quick-start) • [Features](#-features) • [Documentation](#-documentation) • [Contributing](#-contributing)
|
14
|
+
[Installation](#-installation) • [Quick Start](#-quick-start) • [Usage Guide](#-usage-guide) • [Features](#-features) • [Documentation](#-documentation) • [Contributing](#-contributing)
|
15
15
|
|
16
16
|
</div>
|
17
17
|
|
@@ -19,21 +19,22 @@
|
|
19
19
|
|
20
20
|
## 🎯 What is SpecPulse?
|
21
21
|
|
22
|
-
SpecPulse
|
22
|
+
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.
|
23
23
|
|
24
|
-
> **Latest Update (v1.
|
25
|
-
> - 🚀 **
|
26
|
-
> -
|
27
|
-
> -
|
28
|
-
> -
|
29
|
-
> - **
|
30
|
-
> - **
|
24
|
+
> **Latest Update (v1.4.0)** - Complete Framework Revolution:
|
25
|
+
> - 🚀 **Universal SDD Framework**: Transformed from Constitutional to Specification-Driven Development
|
26
|
+
> - 🎯 **No Technology Restrictions**: Support for ANY technology stack - web, mobile, desktop, games, ML
|
27
|
+
> - 🧪 **86% Test Coverage**: Complete test suite rewrite with 98.3% success rate
|
28
|
+
> - ✨ **9 Universal Principles**: Flexible principles replacing rigid articles
|
29
|
+
> - 🔄 **Major API Updates**: All methods renamed from `constitution` to `sdd_compliance`
|
30
|
+
> - 📝 **Enhanced Documentation**: Complete overhaul of docs and templates
|
31
31
|
|
32
32
|
### Why SpecPulse?
|
33
33
|
|
34
|
+
- **🎯 Universal**: Works with ANY project type - web, mobile, desktop, games, APIs, ML
|
34
35
|
- **🔍 Clarity First**: No more ambiguous requirements or scope creep
|
35
36
|
- **🤖 AI-Optimized**: Designed specifically for Claude and Gemini workflows
|
36
|
-
- **✅ Quality Gates**: Built-in checks
|
37
|
+
- **✅ Quality Gates**: Built-in checks ensure quality for your specific project type
|
37
38
|
- **📊 Full Traceability**: Every decision, change, and requirement is tracked
|
38
39
|
- **🚀 Faster Delivery**: Structured approach reduces rework and debugging time
|
39
40
|
|
@@ -130,21 +131,21 @@ specpulse sync
|
|
130
131
|
|
131
132
|
## ✨ Features
|
132
133
|
|
133
|
-
### 🏛️
|
134
|
+
### 🏛️ Universal SDD Principles
|
134
135
|
|
135
|
-
Nine
|
136
|
+
Nine principles that enable Specification-Driven Development for ANY project:
|
136
137
|
|
137
|
-
|
|
138
|
-
|
139
|
-
| **
|
140
|
-
| **
|
141
|
-
| **
|
142
|
-
| **
|
143
|
-
| **
|
144
|
-
| **
|
145
|
-
| **
|
146
|
-
| **
|
147
|
-
| **
|
138
|
+
| # | Principle | Purpose | Applies To |
|
139
|
+
|---|-----------|---------|------------|
|
140
|
+
| **1** | Specification First | Start with clear requirements | All projects |
|
141
|
+
| **2** | Incremental Planning | Phased implementation | Web, mobile, desktop, games |
|
142
|
+
| **3** | Task Decomposition | Concrete, executable tasks | Any technology stack |
|
143
|
+
| **4** | Traceable Implementation | Link code to specs | All languages |
|
144
|
+
| **5** | Continuous Validation | Ensure spec alignment | Any framework |
|
145
|
+
| **6** | Quality Assurance | Appropriate testing | GUI, CLI, API, games |
|
146
|
+
| **7** | Architecture Documentation | Record decisions | Any architecture |
|
147
|
+
| **8** | Iterative Refinement | Evolve with learnings | All methodologies |
|
148
|
+
| **9** | Stakeholder Alignment | Shared understanding | Any team size |
|
148
149
|
|
149
150
|
### 🚦 Phase Gates System
|
150
151
|
|
@@ -156,10 +157,10 @@ Before any code is written, features must pass:
|
|
156
157
|
└────────┬────────┘
|
157
158
|
↓
|
158
159
|
┌─────────────────┐
|
159
|
-
│ Phase Gates │ →
|
160
|
-
└────────┬────────┘
|
161
|
-
↓
|
162
|
-
┌─────────────────┐
|
160
|
+
│ Phase Gates │ → SDD compliance check
|
161
|
+
└────────┬────────┘ Quality assurance strategy defined
|
162
|
+
↓ Architecture documented
|
163
|
+
┌─────────────────┐ Stakeholder alignment confirmed
|
163
164
|
│ Implementation │ Research completed
|
164
165
|
└────────┬────────┘
|
165
166
|
↓
|
@@ -208,7 +209,7 @@ memory/
|
|
208
209
|
|
209
210
|
- **Persistent Context**: Never lose track of project state
|
210
211
|
- **Decision History**: Understand why choices were made
|
211
|
-
- **
|
212
|
+
- **SDD Enforcement**: Universal principles for any software project
|
212
213
|
|
213
214
|
### 🔍 [NEEDS CLARIFICATION] Markers
|
214
215
|
|
@@ -528,6 +529,45 @@ pytest tests/
|
|
528
529
|
- **[GitHub Repository](https://github.com/specpulse/specpulse)** - Source code and issues
|
529
530
|
- **Command Reference** - See AI Integration section above for full command list
|
530
531
|
|
532
|
+
## 📚 Usage Guide
|
533
|
+
|
534
|
+
### How to Break Your Project into Features (Pulses)
|
535
|
+
|
536
|
+
A complete guide is available in **[SPECPULSE_USAGE_GUIDE.md](SPECPULSE_USAGE_GUIDE.md)** which covers:
|
537
|
+
- Feature decomposition strategies
|
538
|
+
- Sizing guidelines (3-15 tasks per pulse)
|
539
|
+
- Naming conventions (001-feature-name format)
|
540
|
+
- Real-world examples for different project types
|
541
|
+
- Best practices for feature boundaries
|
542
|
+
|
543
|
+
#### Quick Examples
|
544
|
+
|
545
|
+
**E-Commerce Platform:**
|
546
|
+
```
|
547
|
+
001-user-authentication # Registration, login, sessions
|
548
|
+
002-product-catalog # Products, categories, search
|
549
|
+
003-shopping-cart # Cart management, calculations
|
550
|
+
004-payment-processing # Gateway, transactions, receipts
|
551
|
+
005-order-management # History, tracking, refunds
|
552
|
+
```
|
553
|
+
|
554
|
+
**SaaS Application:**
|
555
|
+
```
|
556
|
+
001-tenant-management # Multi-tenancy, workspaces
|
557
|
+
002-subscription-billing # Plans, payments, invoices
|
558
|
+
003-api-management # Keys, rate limiting, docs
|
559
|
+
004-admin-dashboard # Analytics, reports, settings
|
560
|
+
005-webhook-system # Events, notifications, logs
|
561
|
+
```
|
562
|
+
|
563
|
+
**Key Principles:**
|
564
|
+
- Each pulse should be **independent** and **testable**
|
565
|
+
- Size appropriately for your project type
|
566
|
+
- Use **sequential numbering** (001, 002, 003...)
|
567
|
+
- Follow the **9 universal SDD principles**
|
568
|
+
|
569
|
+
See the full guide for detailed breakdowns and strategies.
|
570
|
+
|
531
571
|
## 📄 License
|
532
572
|
|
533
573
|
MIT License - see [LICENSE](LICENSE) file for details.
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "specpulse"
|
7
|
-
version = "1.
|
7
|
+
version = "1.4.0"
|
8
8
|
description = "Specification-Driven Development Framework"
|
9
9
|
readme = "README.md"
|
10
10
|
requires-python = ">=3.11"
|
@@ -45,6 +45,7 @@ dependencies = [
|
|
45
45
|
"jinja2>=3.0",
|
46
46
|
"gitpython>=3.1",
|
47
47
|
"toml>=0.10",
|
48
|
+
"packaging>=21.0",
|
48
49
|
]
|
49
50
|
|
50
51
|
[project.optional-dependencies]
|
@@ -11,7 +11,7 @@ long_description = (this_directory / "README.md").read_text(encoding="utf-8")
|
|
11
11
|
|
12
12
|
setup(
|
13
13
|
name="specpulse",
|
14
|
-
version="1.3.
|
14
|
+
version="1.3.4",
|
15
15
|
author="SpecPulse",
|
16
16
|
author_email="",
|
17
17
|
description="Next-Generation Specification-Driven Development Framework",
|
@@ -17,6 +17,7 @@ from ..core.specpulse import SpecPulse
|
|
17
17
|
from ..core.validator import Validator
|
18
18
|
from ..utils.console import Console
|
19
19
|
from ..utils.git_utils import GitUtils
|
20
|
+
from ..utils.version_check import check_pypi_version, compare_versions, get_update_message, should_check_version
|
20
21
|
|
21
22
|
|
22
23
|
class SpecPulseCLI:
|
@@ -24,7 +25,32 @@ class SpecPulseCLI:
|
|
24
25
|
self.console = Console(no_color=no_color, verbose=verbose)
|
25
26
|
self.specpulse = SpecPulse()
|
26
27
|
self.validator = Validator()
|
27
|
-
|
28
|
+
|
29
|
+
# Check for updates (non-blocking)
|
30
|
+
self._check_for_updates()
|
31
|
+
|
32
|
+
def _check_for_updates(self):
|
33
|
+
"""Check for available updates on PyPI"""
|
34
|
+
try:
|
35
|
+
if not should_check_version():
|
36
|
+
return
|
37
|
+
|
38
|
+
latest = check_pypi_version(timeout=1)
|
39
|
+
if latest:
|
40
|
+
current = __version__
|
41
|
+
is_outdated, is_major = compare_versions(current, latest)
|
42
|
+
|
43
|
+
if is_outdated:
|
44
|
+
message, color = get_update_message(current, latest, is_major)
|
45
|
+
# Only show for init command or when verbose
|
46
|
+
# Don't spam on every command
|
47
|
+
import sys
|
48
|
+
if len(sys.argv) > 1 and sys.argv[1] in ['init', '--version']:
|
49
|
+
self.console.info(message, style=color)
|
50
|
+
except:
|
51
|
+
# Never fail due to version check
|
52
|
+
pass
|
53
|
+
|
28
54
|
def init(self, project_name: Optional[str] = None,
|
29
55
|
here: bool = False,
|
30
56
|
ai: str = "claude",
|
@@ -67,10 +93,11 @@ class SpecPulseCLI:
|
|
67
93
|
".gemini/commands",
|
68
94
|
"memory",
|
69
95
|
"specs",
|
70
|
-
"plans",
|
96
|
+
"plans",
|
71
97
|
"tasks",
|
72
98
|
"scripts",
|
73
|
-
"templates"
|
99
|
+
"templates",
|
100
|
+
"templates/decomposition"
|
74
101
|
]
|
75
102
|
|
76
103
|
# Create directories with progress bar
|
@@ -198,7 +225,17 @@ class SpecPulseCLI:
|
|
198
225
|
task_template = self.specpulse.get_task_template()
|
199
226
|
with open(templates_dir / "task.md", 'w', encoding='utf-8') as f:
|
200
227
|
f.write(task_template)
|
201
|
-
|
228
|
+
|
229
|
+
# Copy decomposition templates
|
230
|
+
decomp_dir = templates_dir / "decomposition"
|
231
|
+
decomp_dir.mkdir(parents=True, exist_ok=True)
|
232
|
+
|
233
|
+
resources_decomp_dir = self.specpulse.resources_dir / "templates" / "decomposition"
|
234
|
+
if resources_decomp_dir.exists():
|
235
|
+
for template_file in resources_decomp_dir.iterdir():
|
236
|
+
if template_file.is_file():
|
237
|
+
shutil.copy2(template_file, decomp_dir / template_file.name)
|
238
|
+
|
202
239
|
self.console.success("Created templates")
|
203
240
|
|
204
241
|
def _create_memory_files(self, project_path: Path):
|
@@ -228,20 +265,20 @@ class SpecPulseCLI:
|
|
228
265
|
resources_scripts_dir = self.specpulse.resources_dir / "scripts"
|
229
266
|
|
230
267
|
# Copy all script files from resources
|
231
|
-
script_extensions = [".sh", ".py"]
|
268
|
+
script_extensions = [".sh", ".ps1", ".py"]
|
232
269
|
scripts_copied = 0
|
233
|
-
|
270
|
+
|
234
271
|
for script_file in resources_scripts_dir.iterdir():
|
235
272
|
if script_file.suffix in script_extensions:
|
236
273
|
dest_path = scripts_dir / script_file.name
|
237
274
|
shutil.copy2(script_file, dest_path)
|
238
|
-
|
275
|
+
|
239
276
|
# Make shell scripts executable
|
240
|
-
if script_file.suffix
|
277
|
+
if script_file.suffix in [".sh", ".ps1"]:
|
241
278
|
try:
|
242
279
|
os.chmod(dest_path, 0o755)
|
243
280
|
except:
|
244
|
-
pass # Windows may not support chmod
|
281
|
+
pass # Windows may not support chmod for .sh files
|
245
282
|
|
246
283
|
scripts_copied += 1
|
247
284
|
|
@@ -41,7 +41,7 @@ class SpecPulse:
|
|
41
41
|
|
42
42
|
def get_spec_template(self) -> str:
|
43
43
|
"""Get specification template from file"""
|
44
|
-
template_path = self.resources_dir / "templates" / "spec
|
44
|
+
template_path = self.resources_dir / "templates" / "spec.md"
|
45
45
|
if template_path.exists():
|
46
46
|
with open(template_path, 'r', encoding='utf-8') as f:
|
47
47
|
return f.read()
|
@@ -125,7 +125,7 @@ FR-001: [Requirement]
|
|
125
125
|
|
126
126
|
def get_plan_template(self) -> str:
|
127
127
|
"""Get implementation plan template from file"""
|
128
|
-
template_path = self.resources_dir / "templates" / "plan
|
128
|
+
template_path = self.resources_dir / "templates" / "plan.md"
|
129
129
|
if template_path.exists():
|
130
130
|
with open(template_path, 'r', encoding='utf-8') as f:
|
131
131
|
return f.read()
|
@@ -294,14 +294,14 @@ indexes:
|
|
294
294
|
- Performance Benchmarks
|
295
295
|
- Security Scenarios
|
296
296
|
|
297
|
-
##
|
297
|
+
## SDD Compliance
|
298
298
|
|
299
299
|
### Principle Validation
|
300
|
-
- [ ]
|
301
|
-
- [ ]
|
302
|
-
- [ ]
|
303
|
-
- [ ]
|
304
|
-
- [ ]
|
300
|
+
- [ ] Specification First: Requirements clearly defined
|
301
|
+
- [ ] Incremental Planning: Phased approach planned
|
302
|
+
- [ ] Task Decomposition: Broken into executable tasks
|
303
|
+
- [ ] Quality Assurance: Appropriate testing strategy
|
304
|
+
- [ ] Architecture Documentation: Decisions recorded
|
305
305
|
|
306
306
|
## Risk Assessment
|
307
307
|
|
@@ -317,7 +317,7 @@ indexes:
|
|
317
317
|
|
318
318
|
## Success Criteria
|
319
319
|
- [ ] All functional requirements implemented
|
320
|
-
- [ ]
|
320
|
+
- [ ] Appropriate test coverage for project type
|
321
321
|
- [ ] Performance targets met
|
322
322
|
- [ ] Security audit passed
|
323
323
|
- [ ] Documentation complete
|
@@ -419,79 +419,9 @@ metrics:
|
|
419
419
|
if template_path.exists():
|
420
420
|
with open(template_path, 'r', encoding='utf-8') as f:
|
421
421
|
return f.read()
|
422
|
-
# Fallback
|
423
|
-
|
424
|
-
|
425
|
-
## Immutable Principles
|
426
|
-
|
427
|
-
### Principle 1: Simplicity First
|
428
|
-
Every solution must start with the simplest approach that could work.
|
429
|
-
Complexity is added only when proven necessary.
|
430
|
-
|
431
|
-
### Principle 2: Test-Driven Development
|
432
|
-
No production code without tests.
|
433
|
-
Tests are written first, implementation follows.
|
434
|
-
|
435
|
-
### Principle 3: Single Responsibility
|
436
|
-
Each module, function, and component does one thing well.
|
437
|
-
If you need "and" to describe it, split it.
|
438
|
-
|
439
|
-
### Principle 4: Documentation as Code
|
440
|
-
Documentation lives with code.
|
441
|
-
If it's not documented, it doesn't exist.
|
442
|
-
|
443
|
-
### Principle 5: Security by Design
|
444
|
-
Security is not an afterthought.
|
445
|
-
Every feature considers security implications from the start.
|
446
|
-
|
447
|
-
## Technical Standards
|
448
|
-
|
449
|
-
### Code Style
|
450
|
-
- Python: PEP 8 with type hints
|
451
|
-
- JavaScript: StandardJS
|
452
|
-
- Go: Official Go formatting
|
453
|
-
|
454
|
-
### Testing Requirements
|
455
|
-
- Minimum 80% code coverage
|
456
|
-
- All API endpoints must have contract tests
|
457
|
-
- Critical paths require E2E tests
|
458
|
-
|
459
|
-
### Performance Targets
|
460
|
-
- API response time: < 200ms (p95)
|
461
|
-
- Page load time: < 2 seconds
|
462
|
-
- Database queries: < 50ms
|
463
|
-
|
464
|
-
### Security Requirements
|
465
|
-
- All data encrypted in transit (TLS 1.3+)
|
466
|
-
- Sensitive data encrypted at rest
|
467
|
-
- Authentication: OAuth 2.0 / JWT
|
468
|
-
- Authorization: RBAC with least privilege
|
469
|
-
|
470
|
-
## Architecture Rules
|
471
|
-
|
472
|
-
### Service Boundaries
|
473
|
-
- Services communicate only through defined APIs
|
474
|
-
- No shared databases between services
|
475
|
-
- Each service owns its data
|
476
|
-
|
477
|
-
### Data Management
|
478
|
-
- Single source of truth for each data type
|
479
|
-
- Event sourcing for audit requirements
|
480
|
-
- CQRS where read/write patterns differ
|
481
|
-
|
482
|
-
### Error Handling
|
483
|
-
- All errors are handled explicitly
|
484
|
-
- User-facing errors are helpful and actionable
|
485
|
-
- System errors are logged with context
|
486
|
-
|
487
|
-
## Amendment Process
|
488
|
-
|
489
|
-
Changes to this constitution require:
|
490
|
-
1. Documented rationale
|
491
|
-
2. Team consensus
|
492
|
-
3. Gradual migration plan
|
493
|
-
4. Update to all affected documentation
|
494
|
-
"""
|
422
|
+
# Fallback - return empty if template not found
|
423
|
+
# Templates should always be loaded from resources/memory/constitution.md
|
424
|
+
return ""
|
495
425
|
|
496
426
|
def get_context_template(self) -> str:
|
497
427
|
"""Get context template from file"""
|
@@ -915,20 +845,24 @@ Validates specifications, plans, or project.
|
|
915
845
|
4. Plan approved → Use `/sp-task breakdown`
|
916
846
|
5. Before implementation → Use `/validate all`
|
917
847
|
|
918
|
-
##
|
848
|
+
## SDD Principles
|
919
849
|
|
920
|
-
|
921
|
-
1.
|
922
|
-
2.
|
923
|
-
3.
|
924
|
-
4.
|
925
|
-
5.
|
850
|
+
Follow these universal principles:
|
851
|
+
1. Specification First
|
852
|
+
2. Incremental Planning
|
853
|
+
3. Task Decomposition
|
854
|
+
4. Traceable Implementation
|
855
|
+
5. Continuous Validation
|
856
|
+
6. Quality Assurance
|
857
|
+
7. Architecture Documentation
|
858
|
+
8. Iterative Refinement
|
859
|
+
9. Stakeholder Alignment
|
926
860
|
|
927
861
|
## Context Management
|
928
862
|
|
929
863
|
- Read `memory/context.md` for project state
|
930
864
|
- Update context after major decisions
|
931
|
-
- Check `memory/constitution.md` for principles
|
865
|
+
- Check `memory/constitution.md` for SDD principles
|
932
866
|
- Reference previous specs for consistency
|
933
867
|
|
934
868
|
## Templates
|