specpulse 1.3.3__py3-none-any.whl → 1.4.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.
Files changed (29) hide show
  1. specpulse/__init__.py +1 -1
  2. specpulse/cli/main.py +32 -6
  3. specpulse/core/specpulse.py +24 -90
  4. specpulse/core/validator.py +38 -34
  5. specpulse/resources/commands/claude/sp-decompose.md +17 -17
  6. specpulse/resources/commands/claude/sp-plan.md +47 -47
  7. specpulse/resources/commands/claude/sp-pulse.md +10 -10
  8. specpulse/resources/commands/claude/sp-spec.md +15 -10
  9. specpulse/resources/commands/claude/sp-task.md +15 -15
  10. specpulse/resources/commands/gemini/sp-plan.toml +17 -17
  11. specpulse/resources/memory/constitution.md +237 -128
  12. specpulse/resources/scripts/sp-pulse-init.ps1 +131 -0
  13. specpulse/resources/scripts/sp-pulse-plan.ps1 +147 -0
  14. specpulse/resources/scripts/sp-pulse-plan.sh +131 -127
  15. specpulse/resources/scripts/sp-pulse-spec.ps1 +126 -0
  16. specpulse/resources/scripts/sp-pulse-task.ps1 +166 -0
  17. specpulse/resources/scripts/sp-pulse-task.sh +6 -6
  18. specpulse/resources/templates/decomposition/integration-plan.md +6 -5
  19. specpulse/resources/templates/decomposition/microservices.md +6 -5
  20. specpulse/resources/templates/decomposition/service-plan.md +6 -5
  21. specpulse/resources/templates/plan.md +229 -205
  22. specpulse/resources/templates/task.md +165 -165
  23. specpulse/utils/version_check.py +128 -0
  24. {specpulse-1.3.3.dist-info → specpulse-1.4.0.dist-info}/METADATA +70 -29
  25. {specpulse-1.3.3.dist-info → specpulse-1.4.0.dist-info}/RECORD +29 -24
  26. {specpulse-1.3.3.dist-info → specpulse-1.4.0.dist-info}/WHEEL +0 -0
  27. {specpulse-1.3.3.dist-info → specpulse-1.4.0.dist-info}/entry_points.txt +0 -0
  28. {specpulse-1.3.3.dist-info → specpulse-1.4.0.dist-info}/licenses/LICENSE +0 -0
  29. {specpulse-1.3.3.dist-info → specpulse-1.4.0.dist-info}/top_level.txt +0 -0
specpulse/__init__.py CHANGED
@@ -3,7 +3,7 @@ SpecPulse: Specification-Driven Development Framework
3
3
  Built for the AI era
4
4
  """
5
5
 
6
- __version__ = "1.3.3"
6
+ __version__ = "1.4.0"
7
7
  __author__ = "SpecPulse"
8
8
  __url__ = "https://github.com/specpulse"
9
9
 
specpulse/cli/main.py CHANGED
@@ -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",
@@ -239,20 +265,20 @@ class SpecPulseCLI:
239
265
  resources_scripts_dir = self.specpulse.resources_dir / "scripts"
240
266
 
241
267
  # Copy all script files from resources
242
- script_extensions = [".sh", ".py"]
268
+ script_extensions = [".sh", ".ps1", ".py"]
243
269
  scripts_copied = 0
244
-
270
+
245
271
  for script_file in resources_scripts_dir.iterdir():
246
272
  if script_file.suffix in script_extensions:
247
273
  dest_path = scripts_dir / script_file.name
248
274
  shutil.copy2(script_file, dest_path)
249
-
275
+
250
276
  # Make shell scripts executable
251
- if script_file.suffix == ".sh":
277
+ if script_file.suffix in [".sh", ".ps1"]:
252
278
  try:
253
279
  os.chmod(dest_path, 0o755)
254
280
  except:
255
- pass # Windows may not support chmod
281
+ pass # Windows may not support chmod for .sh files
256
282
 
257
283
  scripts_copied += 1
258
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-001.md"
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-001.md"
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
- ## Constitution Compliance
297
+ ## SDD Compliance
298
298
 
299
299
  ### Principle Validation
300
- - [ ] Single Responsibility: Each component has one purpose
301
- - [ ] Test-First: Tests written before implementation
302
- - [ ] Documentation: All code is documented
303
- - [ ] Security: Security considered by design
304
- - [ ] Performance: Meets performance targets
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
- - [ ] Test coverage > 80%
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 to embedded template if file not found
423
- return """# Project Constitution
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
- ## Constitution Rules
848
+ ## SDD Principles
919
849
 
920
- Always enforce these principles:
921
- 1. Simplicity first
922
- 2. Test-driven development
923
- 3. Single responsibility
924
- 4. Documentation as code
925
- 5. Security by design
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
@@ -32,8 +32,8 @@ class Validator:
32
32
  # Validate plans
33
33
  self._validate_plans(project_path, fix, verbose)
34
34
 
35
- # Validate constitution compliance
36
- self._validate_constitution_compliance(project_path, verbose)
35
+ # Validate SDD principles compliance
36
+ self._validate_sdd_compliance(project_path, verbose)
37
37
 
38
38
  return self.results
39
39
 
@@ -101,10 +101,10 @@ class Validator:
101
101
 
102
102
  return self.results
103
103
 
104
- def validate_constitution(self, project_path: Path, verbose: bool = False) -> List[Dict]:
105
- """Validate constitution compliance"""
104
+ def validate_sdd_compliance(self, project_path: Path, verbose: bool = False) -> List[Dict]:
105
+ """Validate SDD principles compliance"""
106
106
  self.results = []
107
- self._validate_constitution_compliance(project_path, verbose)
107
+ self._validate_sdd_compliance(project_path, verbose)
108
108
  return self.results
109
109
 
110
110
  def _validate_structure(self, project_path: Path):
@@ -283,27 +283,31 @@ class Validator:
283
283
  "message": "No implementation plans found"
284
284
  })
285
285
 
286
- def _validate_constitution_compliance(self, project_path: Path, verbose: bool):
287
- """Validate compliance with constitution principles"""
286
+ def _validate_sdd_compliance(self, project_path: Path, verbose: bool):
287
+ """Validate compliance with SDD principles"""
288
288
  constitution_path = project_path / "memory" / "constitution.md"
289
289
 
290
290
  if not constitution_path.exists():
291
291
  self.results.append({
292
292
  "status": "error",
293
- "message": "Constitution file not found"
293
+ "message": "SDD principles file (constitution.md) not found"
294
294
  })
295
295
  return
296
296
 
297
297
  with open(constitution_path, 'r', encoding='utf-8') as f:
298
298
  constitution = f.read()
299
299
 
300
- # Check for key principles
300
+ # Check for key SDD principles
301
301
  principles = [
302
- "Simplicity First",
303
- "Test-Driven Development",
304
- "Single Responsibility",
305
- "Documentation as Code",
306
- "Security by Design"
302
+ "Specification First",
303
+ "Incremental Planning",
304
+ "Task Decomposition",
305
+ "Traceable Implementation",
306
+ "Continuous Validation",
307
+ "Quality Assurance",
308
+ "Architecture Documentation",
309
+ "Iterative Refinement",
310
+ "Stakeholder Alignment"
307
311
  ]
308
312
 
309
313
  for principle in principles:
@@ -311,12 +315,12 @@ class Validator:
311
315
  if verbose:
312
316
  self.results.append({
313
317
  "status": "success",
314
- "message": f"Constitution includes: {principle}"
318
+ "message": f"SDD principle found: {principle}"
315
319
  })
316
320
  else:
317
321
  self.results.append({
318
322
  "status": "warning",
319
- "message": f"Constitution missing principle: {principle}"
323
+ "message": f"Missing SDD principle: {principle}"
320
324
  })
321
325
 
322
326
  # Check config for constitution enforcement
@@ -325,15 +329,15 @@ class Validator:
325
329
  with open(config_path, 'r', encoding='utf-8') as f:
326
330
  config = yaml.safe_load(f)
327
331
 
328
- if config.get("constitution", {}).get("enforce", False):
332
+ if config.get("sdd", {}).get("enforce", True):
329
333
  self.results.append({
330
334
  "status": "success",
331
- "message": "Constitution enforcement enabled"
335
+ "message": "SDD principles enforcement enabled"
332
336
  })
333
337
  else:
334
338
  self.results.append({
335
339
  "status": "warning",
336
- "message": "Constitution enforcement disabled"
340
+ "message": "SDD principles enforcement disabled"
337
341
  })
338
342
 
339
343
  def _load_constitution(self, project_root: Path):
@@ -362,7 +366,7 @@ class Validator:
362
366
  self._load_constitution(project_root)
363
367
  return self.constitution is not None
364
368
 
365
- def validate_spec(self, spec_path: Path, verbose: bool = False) -> Dict:
369
+ def validate_spec_file(self, spec_path: Path, verbose: bool = False) -> Dict:
366
370
  """Validate a single specification file"""
367
371
  if not spec_path.exists():
368
372
  return {"status": "error", "message": f"Spec file not found: {spec_path}"}
@@ -381,7 +385,7 @@ class Validator:
381
385
 
382
386
  return result
383
387
 
384
- def validate_plan(self, plan_path: Path, verbose: bool = False) -> Dict:
388
+ def validate_plan_file(self, plan_path: Path, verbose: bool = False) -> Dict:
385
389
  """Validate a single plan file"""
386
390
  if not plan_path.exists():
387
391
  return {"status": "error", "message": f"Plan file not found: {plan_path}"}
@@ -400,7 +404,7 @@ class Validator:
400
404
 
401
405
  return result
402
406
 
403
- def validate_task(self, task_path: Path, verbose: bool = False) -> Dict:
407
+ def validate_task_file(self, task_path: Path, verbose: bool = False) -> Dict:
404
408
  """Validate a single task file"""
405
409
  if not task_path.exists():
406
410
  return {"status": "error", "message": f"Task file not found: {task_path}"}
@@ -417,16 +421,16 @@ class Validator:
417
421
 
418
422
  return result
419
423
 
420
- def validate_constitution_compliance(self, spec_content: str, verbose: bool = False) -> Dict:
421
- """Validate that content complies with constitution"""
424
+ def validate_sdd_principles(self, spec_content: str, verbose: bool = False) -> Dict:
425
+ """Validate that content complies with SDD principles"""
422
426
  result = {"status": "compliant", "violations": []}
423
427
 
424
428
  if not self.constitution:
425
429
  return result
426
430
 
427
- # Check for simplicity principle
428
- if 'complexity' in spec_content.lower() and 'simple' not in spec_content.lower():
429
- result["violations"].append("Simplicity principle: Complex solution without justification")
431
+ # Check for specification clarity
432
+ if '[needs clarification]' in spec_content.lower():
433
+ result["violations"].append("Specification First: Contains unresolved clarifications")
430
434
 
431
435
  if result["violations"]:
432
436
  result["status"] = "non-compliant"
@@ -435,9 +439,9 @@ class Validator:
435
439
 
436
440
  def check_phase_gate(self, gate_name: str, context: Dict) -> bool:
437
441
  """Check if a phase gate passes"""
438
- # Simple gate checking logic
439
- if gate_name == "simplicity":
440
- return context.get("module_count", 0) <= 3
442
+ # Gate checking logic
443
+ if gate_name == "specification":
444
+ return context.get("spec_complete", False)
441
445
  elif gate_name == "test-first":
442
446
  return context.get("tests_written", False)
443
447
  return True
@@ -448,26 +452,26 @@ class Validator:
448
452
  "specs": [],
449
453
  "plans": [],
450
454
  "tasks": [],
451
- "constitution_compliance": True
455
+ "sdd_compliance": True
452
456
  }
453
457
 
454
458
  # Validate specs
455
459
  specs_dir = project_root / "specs"
456
460
  if specs_dir.exists():
457
461
  for spec_file in specs_dir.glob("*/spec*.md"):
458
- results["specs"].append(self.validate_spec(spec_file, verbose))
462
+ results["specs"].append(self.validate_spec_file(spec_file, verbose))
459
463
 
460
464
  # Validate plans
461
465
  plans_dir = project_root / "plans"
462
466
  if plans_dir.exists():
463
467
  for plan_file in plans_dir.glob("*/plan*.md"):
464
- results["plans"].append(self.validate_plan(plan_file, verbose))
468
+ results["plans"].append(self.validate_plan_file(plan_file, verbose))
465
469
 
466
470
  # Validate tasks
467
471
  tasks_dir = project_root / "tasks"
468
472
  if tasks_dir.exists():
469
473
  for task_file in tasks_dir.glob("*/task*.md"):
470
- results["tasks"].append(self.validate_task(task_file, verbose))
474
+ results["tasks"].append(self.validate_task_file(task_file, verbose))
471
475
 
472
476
  return results
473
477
 
@@ -108,8 +108,8 @@ When called with `/sp-decompose $ARGUMENTS`, I will:
108
108
  - Check for circular dependencies
109
109
  - Verify data consistency boundaries
110
110
  - Ensure single responsibility principle
111
- - Validate against constitutional principles:
112
- - Simplicity (≤3 modules per service)
111
+ - Validate against SDD principles:
112
+ - Clear service boundaries
113
113
  - Clear boundaries
114
114
  - Testability
115
115
 
@@ -180,28 +180,28 @@ specs/001-authentication/decomposition/
180
180
  └── migration-plan.md # Decomposition strategy
181
181
  ```
182
182
 
183
- ## Constitutional Compliance
183
+ ## SDD Compliance
184
184
 
185
- **Article I: Simplicity**
186
- - Each service limited to 3 core modules
187
- - Clear, focused responsibilities
188
- - Minimal inter-service dependencies
185
+ **Principle 1: Specification First**
186
+ - Each service has clear specifications
187
+ - Service boundaries well-defined
188
+ - Requirements traced to services
189
189
 
190
- **Article V: Single Responsibility**
191
- - Services own their data
192
- - Clear aggregate boundaries
193
- - Independent deployment capability
190
+ **Principle 3: Task Decomposition**
191
+ - Services broken into manageable tasks
192
+ - Clear service-specific work items
193
+ - Integration tasks identified
194
194
 
195
- **Article VIII: Framework Selection**
196
- - Choose appropriate tech stack per service
197
- - Leverage existing libraries
198
- - Standardize communication protocols
195
+ **Principle 7: Architecture Documentation**
196
+ - Service boundaries documented
197
+ - Technology choices recorded
198
+ - Integration patterns defined
199
199
 
200
200
  ## Integration with SpecPulse Workflow
201
201
 
202
202
  1. **After `/sp-spec create`**:
203
203
  - AI analyzes spec complexity
204
- - Suggests decomposition if >3 modules detected
204
+ - Suggests decomposition if complexity warrants it
205
205
  - User confirms with `/sp-decompose`
206
206
 
207
207
  2. **During decomposition**:
@@ -223,7 +223,7 @@ specs/001-authentication/decomposition/
223
223
  5. **With `/sp-validate`**:
224
224
  - Validates service boundaries
225
225
  - Checks circular dependencies
226
- - Ensures constitutional compliance
226
+ - Ensures SDD compliance
227
227
 
228
228
  ## Error Handling
229
229
 
@@ -11,7 +11,7 @@ allowed_tools:
11
11
 
12
12
  # /sp-plan Command
13
13
 
14
- Generate implementation plans from specifications following SpecPulse methodology with constitutional compliance and AI-optimized templates.
14
+ Generate implementation plans from specifications following SpecPulse methodology with SDD compliance and AI-optimized templates.
15
15
 
16
16
  ## CRITICAL: File Edit Restrictions
17
17
  - **NEVER EDIT**: templates/, scripts/, commands/, .claude/, .gemini/
@@ -36,7 +36,7 @@ When called with `/sp-plan $ARGUMENTS`, I will:
36
36
  - If no context found, ask user to specify feature or run `/sp-pulse` first
37
37
 
38
38
  2. **Parse arguments** and determine action:
39
- - If `validate`: Check plan against constitutional gates
39
+ - If `validate`: Check plan against SDD gates
40
40
  - If `optimize`: Improve existing plan complexity
41
41
  - Otherwise: Generate new plan
42
42
 
@@ -57,12 +57,12 @@ When called with `/sp-plan $ARGUMENTS`, I will:
57
57
  bash scripts/sp-pulse-plan.sh "$FEATURE_DIR"
58
58
  ```
59
59
 
60
- e. **Run Constitutional Phase Gates** (Article VII):
61
- - Simplicity Gate: ≤3 modules justification
62
- - Anti-Abstraction Gate: Direct framework usage
63
- - Test-First Gate: Tests before implementation
64
- - Integration-First Gate: Real services over mocks
65
- - Research Gate: Technology choices documented
60
+ e. **Run SDD Compliance Gates**:
61
+ - Specification First: Requirements clear and traced
62
+ - Incremental Planning: Phased approach defined
63
+ - Task Decomposition: Clear breakdown planned
64
+ - Quality Assurance: Testing strategy defined
65
+ - Architecture Documentation: Decisions recorded
66
66
 
67
67
  f. **Generate AI-optimized plan** by COPYING template from templates/plan.md to plans/XXX-feature/:
68
68
  ```markdown
@@ -91,10 +91,10 @@ When called with `/sp-plan $ARGUMENTS`, I will:
91
91
  * Security considerations
92
92
  * Deployment strategy with rollback plans
93
93
 
94
- h. **Complexity tracking** (Article VII):
95
- - Document all complexity exceptions with justifications
96
- - Create mitigation strategies for each exception
97
- - Track optimization opportunities
94
+ h. **Architecture documentation**:
95
+ - Document all architectural decisions with rationale
96
+ - Create improvement strategies for technical debt
97
+ - Track future enhancement opportunities
98
98
 
99
99
  i. **Version management**: Check existing plan files and create next version (plan-001.md, plan-002.md, etc.)
100
100
  j. **Write NEW plan file** to `plans/XXX-feature/plan-XXX.md`
@@ -107,8 +107,8 @@ When called with `/sp-plan $ARGUMENTS`, I will:
107
107
  ```bash
108
108
  bash scripts/sp-pulse-plan.sh "$FEATURE_DIR"
109
109
  ```
110
- d. Verify all constitutional gates are addressed
111
- e. Check complexity exceptions have proper justifications
110
+ d. Verify all SDD gates are addressed
111
+ e. Check architectural decisions have proper documentation
112
112
  f. Validate test-first approach is documented
113
113
  g. Ensure integration strategy uses real services
114
114
  h. Report detailed validation results
@@ -124,38 +124,38 @@ When called with `/sp-plan $ARGUMENTS`, I will:
124
124
  e. **Generate optimization recommendations**
125
125
  f. **Create new version**: Write optimized plan as next version (plan-XXX.md)
126
126
 
127
- ## Constitutional Phase Gates (Phase -1)
127
+ ## SDD Compliance Gates (Phase -1)
128
128
 
129
129
  **Must pass before implementation:**
130
130
 
131
- ### Article VII: Simplicity Gate
132
- - [ ] Using ≤3 projects/modules for initial implementation
133
- - [ ] No future-proofing without documented need
134
- - [ ] Direct framework usage (no unnecessary wrappers)
135
- - [ ] Single model representation per concept
136
-
137
- ### Article VII: Anti-Abstraction Gate
138
- - [ ] Using framework features directly
139
- - [ ] No unnecessary abstraction layers
140
- - [ ] Clear, simple interfaces
141
- - [ ] Avoiding premature optimization
142
-
143
- ### Article III: Test-First Gate
144
- - [ ] Test specifications written
145
- - [ ] Tests reviewed and approved
146
- - [ ] Tests confirmed to FAIL before implementation
147
- - [ ] TDD cycle planned (Red-Green-Refactor)
148
-
149
- ### Article VIII: Integration-First Gate
150
- - [ ] Contract tests defined
151
- - [ ] Using real services over mocks
152
- - [ ] Production-like test environment planned
153
- - [ ] End-to-end test scenarios identified
154
-
155
- ### Article VI: Research Gate
156
- - [ ] Library options researched
157
- - [ ] Performance implications documented
158
- - [ ] Security considerations analyzed
131
+ ### Principle 1: Specification First
132
+ - [ ] Clear requirements documented
133
+ - [ ] User stories with acceptance criteria
134
+ - [ ] [NEEDS CLARIFICATION] markers used
135
+ - [ ] Functional and non-functional requirements
136
+
137
+ ### Principle 2: Incremental Planning
138
+ - [ ] Work broken into valuable phases
139
+ - [ ] Each phase delivers working software
140
+ - [ ] Milestones and checkpoints defined
141
+ - [ ] Features prioritized by business value
142
+
143
+ ### Principle 3: Task Decomposition
144
+ - [ ] Tasks are specific and actionable
145
+ - [ ] Effort estimates provided
146
+ - [ ] Definition of Done clear
147
+ - [ ] Dependencies identified
148
+
149
+ ### Principle 6: Quality Assurance
150
+ - [ ] Testing strategy appropriate for project
151
+ - [ ] Acceptance criteria testable
152
+ - [ ] Code review process defined
153
+ - [ ] Quality metrics identified
154
+
155
+ ### Principle 7: Architecture Documentation
156
+ - [ ] Technology choices documented
157
+ - [ ] Integration points identified
158
+ - [ ] Technical debt tracked
159
159
  - [ ] Trade-offs documented
160
160
 
161
161
  ## Examples
@@ -184,7 +184,7 @@ User: /sp-plan validate
184
184
  I will run comprehensive validation:
185
185
  ```
186
186
  PLAN_FILE=plans/001-user-authentication/plan.md
187
- CONSTITUTIONAL_GATES_STATUS=COMPLETED
187
+ SDD_GATES_STATUS=COMPLETED
188
188
  MISSING_SECTIONS=0
189
189
  STATUS=validation_complete
190
190
  ```
@@ -199,8 +199,8 @@ I will analyze and recommend complexity reductions.
199
199
 
200
200
  - **AI-optimized templates** with Jinja2-style variables
201
201
  - **Script execution** with Bash
202
- - **Constitutional compliance tracking** with gate status
203
- - **Complexity exception management** with justifications
202
+ - **SDD compliance tracking** with gate status
203
+ - **Architecture decision tracking** with rationale
204
204
  - **Performance and security considerations** integrated
205
205
  - **Integration-first approach** with real service usage
206
206
  - **Detailed validation reporting** with specific recommendations
@@ -209,7 +209,7 @@ I will analyze and recommend complexity reductions.
209
209
  ## Error Handling
210
210
 
211
211
  - Specification existence validation
212
- - Constitutional gate compliance checking
212
+ - SDD gate compliance checking
213
213
  - Template structure validation
214
214
  - Directory structure verification
215
215
  - Feature context auto-discovery