specweave 0.21.2 → 0.21.3
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.
- package/CLAUDE.md +232 -5
- package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts +98 -0
- package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/IssueStateManager.js +146 -0
- package/dist/plugins/specweave-github/lib/IssueStateManager.js.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +6 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
- package/dist/src/cli/commands/check-hooks.d.ts +11 -0
- package/dist/src/cli/commands/check-hooks.d.ts.map +1 -0
- package/dist/src/cli/commands/check-hooks.js +144 -0
- package/dist/src/cli/commands/check-hooks.js.map +1 -0
- package/dist/src/cli/commands/cicd-monitor.js +3 -3
- package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
- package/dist/src/cli/commands/import-docs.js +2 -2
- package/dist/src/cli/commands/import-docs.js.map +1 -1
- package/dist/src/cli/commands/init-multiproject.js +4 -4
- package/dist/src/cli/commands/init-multiproject.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js +3 -3
- package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
- package/dist/src/cli/commands/plan/agent-invoker.d.ts +79 -0
- package/dist/src/cli/commands/plan/agent-invoker.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/agent-invoker.js +383 -0
- package/dist/src/cli/commands/plan/agent-invoker.js.map +1 -0
- package/dist/src/cli/commands/plan/increment-detector.d.ts +27 -0
- package/dist/src/cli/commands/plan/increment-detector.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/increment-detector.js +159 -0
- package/dist/src/cli/commands/plan/increment-detector.js.map +1 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +45 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.js +229 -0
- package/dist/src/cli/commands/plan/plan-orchestrator.js.map +1 -0
- package/dist/src/cli/commands/plan/plan-validator.d.ts +36 -0
- package/dist/src/cli/commands/plan/plan-validator.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/plan-validator.js +174 -0
- package/dist/src/cli/commands/plan/plan-validator.js.map +1 -0
- package/dist/src/cli/commands/plan/types.d.ts +170 -0
- package/dist/src/cli/commands/plan/types.d.ts.map +1 -0
- package/dist/src/cli/commands/plan/types.js +42 -0
- package/dist/src/cli/commands/plan/types.js.map +1 -0
- package/dist/src/cli/commands/plan-command.d.ts +16 -0
- package/dist/src/cli/commands/plan-command.d.ts.map +1 -0
- package/dist/src/cli/commands/plan-command.js +127 -0
- package/dist/src/cli/commands/plan-command.js.map +1 -0
- package/dist/src/cli/commands/switch-project.js +3 -3
- package/dist/src/cli/commands/switch-project.js.map +1 -1
- package/dist/src/cli/commands/validate-parent-repo.js +1 -1
- package/dist/src/cli/commands/validate-parent-repo.js.map +1 -1
- package/dist/src/config/ConfigManager.d.ts +69 -0
- package/dist/src/config/ConfigManager.d.ts.map +1 -0
- package/dist/src/config/ConfigManager.js +130 -0
- package/dist/src/config/ConfigManager.js.map +1 -0
- package/dist/src/config/types.d.ts +1357 -0
- package/dist/src/config/types.d.ts.map +1 -0
- package/dist/src/config/types.js +67 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/core/brownfield/importer.d.ts +1 -1
- package/dist/src/core/brownfield/importer.d.ts.map +1 -1
- package/dist/src/core/brownfield/importer.js +3 -3
- package/dist/src/core/brownfield/importer.js.map +1 -1
- package/dist/src/core/cicd/config-loader.d.ts +1 -1
- package/dist/src/core/cicd/config-loader.d.ts.map +1 -1
- package/dist/src/core/cicd/index.d.ts +6 -6
- package/dist/src/core/cicd/index.d.ts.map +1 -1
- package/dist/src/core/cicd/index.js +6 -6
- package/dist/src/core/cicd/index.js.map +1 -1
- package/dist/src/core/cicd/monitor-service.d.ts +3 -3
- package/dist/src/core/cicd/monitor-service.d.ts.map +1 -1
- package/dist/src/core/cicd/monitor-service.js +3 -3
- package/dist/src/core/cicd/monitor-service.js.map +1 -1
- package/dist/src/core/cicd/notifier.d.ts +1 -1
- package/dist/src/core/cicd/notifier.d.ts.map +1 -1
- package/dist/src/core/cicd/state-manager.d.ts +1 -1
- package/dist/src/core/cicd/state-manager.d.ts.map +1 -1
- package/dist/src/core/cicd/state-manager.js +1 -1
- package/dist/src/core/cicd/state-manager.js.map +1 -1
- package/dist/src/core/cicd/workflow-monitor.d.ts +1 -1
- package/dist/src/core/cicd/workflow-monitor.d.ts.map +1 -1
- package/dist/src/core/cicd/workflow-monitor.js +1 -1
- package/dist/src/core/cicd/workflow-monitor.js.map +1 -1
- package/dist/src/core/cost-tracker.d.ts +2 -2
- package/dist/src/core/cost-tracker.d.ts.map +1 -1
- package/dist/src/core/cost-tracker.js +1 -1
- package/dist/src/core/cost-tracker.js.map +1 -1
- package/dist/src/core/hooks/HealthReporter.d.ts +55 -0
- package/dist/src/core/hooks/HealthReporter.d.ts.map +1 -0
- package/dist/src/core/hooks/HealthReporter.js +268 -0
- package/dist/src/core/hooks/HealthReporter.js.map +1 -0
- package/dist/src/core/hooks/HookAutoFixer.d.ts +41 -0
- package/dist/src/core/hooks/HookAutoFixer.d.ts.map +1 -0
- package/dist/src/core/hooks/HookAutoFixer.js +222 -0
- package/dist/src/core/hooks/HookAutoFixer.js.map +1 -0
- package/dist/src/core/hooks/HookExecutor.d.ts +57 -0
- package/dist/src/core/hooks/HookExecutor.d.ts.map +1 -0
- package/dist/src/core/hooks/HookExecutor.js +287 -0
- package/dist/src/core/hooks/HookExecutor.js.map +1 -0
- package/dist/src/core/hooks/HookHealthChecker.d.ts +51 -0
- package/dist/src/core/hooks/HookHealthChecker.d.ts.map +1 -0
- package/dist/src/core/hooks/HookHealthChecker.js +212 -0
- package/dist/src/core/hooks/HookHealthChecker.js.map +1 -0
- package/dist/src/core/hooks/HookScanner.d.ts +65 -0
- package/dist/src/core/hooks/HookScanner.d.ts.map +1 -0
- package/dist/src/core/hooks/HookScanner.js +214 -0
- package/dist/src/core/hooks/HookScanner.js.map +1 -0
- package/dist/src/core/hooks/types.d.ts +281 -0
- package/dist/src/core/hooks/types.d.ts.map +1 -0
- package/dist/src/core/hooks/types.js +10 -0
- package/dist/src/core/hooks/types.js.map +1 -0
- package/dist/src/core/iac/index.d.ts +10 -0
- package/dist/src/core/iac/index.d.ts.map +1 -0
- package/dist/src/core/iac/index.js +11 -0
- package/dist/src/core/iac/index.js.map +1 -0
- package/dist/src/core/iac/template-engine.d.ts +77 -0
- package/dist/src/core/iac/template-engine.d.ts.map +1 -0
- package/dist/src/core/iac/template-engine.js +182 -0
- package/dist/src/core/iac/template-engine.js.map +1 -0
- package/dist/src/core/increment/ac-status-manager.d.ts +115 -0
- package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -0
- package/dist/src/core/increment/ac-status-manager.js +343 -0
- package/dist/src/core/increment/ac-status-manager.js.map +1 -0
- package/dist/src/core/increment/auto-transition-manager.d.ts +60 -0
- package/dist/src/core/increment/auto-transition-manager.d.ts.map +1 -0
- package/dist/src/core/increment/auto-transition-manager.js +192 -0
- package/dist/src/core/increment/auto-transition-manager.js.map +1 -0
- package/dist/src/core/increment/limits.d.ts +1 -1
- package/dist/src/core/increment/limits.d.ts.map +1 -1
- package/dist/src/core/increment/limits.js +2 -2
- package/dist/src/core/increment/limits.js.map +1 -1
- package/dist/src/core/increment/spec-sync-manager.d.ts +177 -0
- package/dist/src/core/increment/spec-sync-manager.d.ts.map +1 -0
- package/dist/src/core/increment/spec-sync-manager.js +496 -0
- package/dist/src/core/increment/spec-sync-manager.js.map +1 -0
- package/dist/src/core/increment/status-auto-transition.d.ts +46 -0
- package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -0
- package/dist/src/core/increment/status-auto-transition.js +178 -0
- package/dist/src/core/increment/status-auto-transition.js.map +1 -0
- package/dist/src/core/increment/task-state-manager.d.ts +75 -0
- package/dist/src/core/increment/task-state-manager.d.ts.map +1 -0
- package/dist/src/core/increment/task-state-manager.js +117 -0
- package/dist/src/core/increment/task-state-manager.js.map +1 -0
- package/dist/src/core/living-docs/CodeValidator.d.ts +68 -0
- package/dist/src/core/living-docs/CodeValidator.d.ts.map +1 -0
- package/dist/src/core/living-docs/CodeValidator.js +160 -0
- package/dist/src/core/living-docs/CodeValidator.js.map +1 -0
- package/dist/src/core/living-docs/CompletionPropagator.d.ts +84 -0
- package/dist/src/core/living-docs/CompletionPropagator.d.ts.map +1 -0
- package/dist/src/core/living-docs/CompletionPropagator.js +205 -0
- package/dist/src/core/living-docs/CompletionPropagator.js.map +1 -0
- package/dist/src/core/living-docs/ProjectDetector.d.ts +29 -0
- package/dist/src/core/living-docs/ProjectDetector.d.ts.map +1 -0
- package/dist/src/core/living-docs/ProjectDetector.js +94 -0
- package/dist/src/core/living-docs/ProjectDetector.js.map +1 -0
- package/dist/src/core/living-docs/SpecDistributor.d.ts +55 -0
- package/dist/src/core/living-docs/SpecDistributor.d.ts.map +1 -0
- package/dist/src/core/living-docs/SpecDistributor.js +216 -0
- package/dist/src/core/living-docs/SpecDistributor.js.map +1 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts +116 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts.map +1 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.js +356 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.js.map +1 -0
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js +2 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/index.d.ts +1 -1
- package/dist/src/core/living-docs/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/index.js +5 -1
- package/dist/src/core/living-docs/index.js.map +1 -1
- package/dist/src/core/living-docs/types.d.ts +70 -300
- package/dist/src/core/living-docs/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/types.js +2 -10
- package/dist/src/core/living-docs/types.js.map +1 -1
- package/dist/src/core/project-manager.d.ts +1 -1
- package/dist/src/core/project-manager.d.ts.map +1 -1
- package/dist/src/core/project-manager.js +2 -2
- package/dist/src/core/project-manager.js.map +1 -1
- package/dist/src/core/qa/quality-gate-decider.d.ts +1 -1
- package/dist/src/core/qa/quality-gate-decider.d.ts.map +1 -1
- package/dist/src/core/qa/risk-calculator.d.ts +1 -1
- package/dist/src/core/qa/risk-calculator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/setup-summary.d.ts +1 -1
- package/dist/src/core/repo-structure/setup-summary.d.ts.map +1 -1
- package/dist/src/core/rfc-generator-v2.d.ts +1 -1
- package/dist/src/core/rfc-generator-v2.d.ts.map +1 -1
- package/dist/src/core/rfc-generator-v2.js +1 -1
- package/dist/src/core/rfc-generator-v2.js.map +1 -1
- package/dist/src/core/serverless/context-detector.d.ts +12 -0
- package/dist/src/core/serverless/context-detector.d.ts.map +1 -0
- package/dist/src/core/serverless/context-detector.js +213 -0
- package/dist/src/core/serverless/context-detector.js.map +1 -0
- package/dist/src/core/serverless/cost-comparison.d.ts +73 -0
- package/dist/src/core/serverless/cost-comparison.d.ts.map +1 -0
- package/dist/src/core/serverless/cost-comparison.js +198 -0
- package/dist/src/core/serverless/cost-comparison.js.map +1 -0
- package/dist/src/core/serverless/cost-estimator.d.ts +69 -0
- package/dist/src/core/serverless/cost-estimator.d.ts.map +1 -0
- package/dist/src/core/serverless/cost-estimator.js +127 -0
- package/dist/src/core/serverless/cost-estimator.js.map +1 -0
- package/dist/src/core/serverless/cost-optimizer.d.ts +57 -0
- package/dist/src/core/serverless/cost-optimizer.d.ts.map +1 -0
- package/dist/src/core/serverless/cost-optimizer.js +221 -0
- package/dist/src/core/serverless/cost-optimizer.js.map +1 -0
- package/dist/src/core/serverless/index.d.ts +20 -0
- package/dist/src/core/serverless/index.d.ts.map +1 -0
- package/dist/src/core/serverless/index.js +26 -0
- package/dist/src/core/serverless/index.js.map +1 -0
- package/dist/src/core/serverless/learning-path-recommender.d.ts +152 -0
- package/dist/src/core/serverless/learning-path-recommender.d.ts.map +1 -0
- package/dist/src/core/serverless/learning-path-recommender.js +389 -0
- package/dist/src/core/serverless/learning-path-recommender.js.map +1 -0
- package/dist/src/core/serverless/platform-data-loader.d.ts +22 -0
- package/dist/src/core/serverless/platform-data-loader.d.ts.map +1 -0
- package/dist/src/core/serverless/platform-data-loader.js +49 -0
- package/dist/src/core/serverless/platform-data-loader.js.map +1 -0
- package/dist/src/core/serverless/platform-selector.d.ts +20 -0
- package/dist/src/core/serverless/platform-selector.d.ts.map +1 -0
- package/dist/src/core/serverless/platform-selector.js +279 -0
- package/dist/src/core/serverless/platform-selector.js.map +1 -0
- package/dist/src/core/serverless/recommendation-formatter.d.ts +24 -0
- package/dist/src/core/serverless/recommendation-formatter.d.ts.map +1 -0
- package/dist/src/core/serverless/recommendation-formatter.js +70 -0
- package/dist/src/core/serverless/recommendation-formatter.js.map +1 -0
- package/dist/src/core/serverless/suitability-analyzer.d.ts +22 -0
- package/dist/src/core/serverless/suitability-analyzer.d.ts.map +1 -0
- package/dist/src/core/serverless/suitability-analyzer.js +262 -0
- package/dist/src/core/serverless/suitability-analyzer.js.map +1 -0
- package/dist/src/core/serverless/types.d.ts +96 -0
- package/dist/src/core/serverless/types.d.ts.map +1 -0
- package/dist/src/core/serverless/types.js +5 -0
- package/dist/src/core/serverless/types.js.map +1 -0
- package/dist/src/core/sync/bidirectional-engine.d.ts +1 -1
- package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts +1 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
- package/dist/src/core/sync/profile-manager.d.ts +1 -1
- package/dist/src/core/sync/profile-manager.d.ts.map +1 -1
- package/dist/src/core/sync/profile-selector.d.ts +1 -1
- package/dist/src/core/sync/profile-selector.d.ts.map +1 -1
- package/dist/src/core/sync/profile-selector.js +1 -1
- package/dist/src/core/sync/profile-selector.js.map +1 -1
- package/dist/src/core/sync/project-context.d.ts +1 -1
- package/dist/src/core/sync/project-context.d.ts.map +1 -1
- package/dist/src/core/sync/rate-limiter.d.ts +1 -1
- package/dist/src/core/sync/rate-limiter.d.ts.map +1 -1
- package/dist/src/core/sync/status-sync-engine.d.ts +2 -2
- package/dist/src/core/sync/status-sync-engine.d.ts.map +1 -1
- package/dist/src/core/sync/status-sync-engine.js +2 -2
- package/dist/src/core/sync/status-sync-engine.js.map +1 -1
- package/dist/src/core/sync/time-range-selector.d.ts +1 -1
- package/dist/src/core/sync/time-range-selector.d.ts.map +1 -1
- package/dist/src/core/sync/time-range-selector.js +1 -1
- package/dist/src/core/sync/time-range-selector.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +27 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/increment-metadata.js +45 -1
- package/dist/src/core/types/increment-metadata.js.map +1 -1
- package/dist/src/core/types/sync-profile.d.ts +2 -0
- package/dist/src/core/types/sync-profile.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.js.map +1 -1
- package/dist/src/core/validation/increment-structure-validator.d.ts +47 -0
- package/dist/src/core/validation/increment-structure-validator.d.ts.map +1 -0
- package/dist/src/core/validation/increment-structure-validator.js +187 -0
- package/dist/src/core/validation/increment-structure-validator.js.map +1 -0
- package/dist/src/core/validation/three-file-validator.d.ts +82 -0
- package/dist/src/core/validation/three-file-validator.d.ts.map +1 -0
- package/dist/src/core/validation/three-file-validator.js +320 -0
- package/dist/src/core/validation/three-file-validator.js.map +1 -0
- package/dist/src/core/workflow/phase-detector.d.ts +103 -0
- package/dist/src/core/workflow/phase-detector.d.ts.map +1 -0
- package/dist/src/core/workflow/phase-detector.js +704 -0
- package/dist/src/core/workflow/phase-detector.js.map +1 -0
- package/dist/src/core/workflow/types.d.ts +153 -0
- package/dist/src/core/workflow/types.d.ts.map +1 -0
- package/dist/src/core/workflow/types.js +47 -0
- package/dist/src/core/workflow/types.js.map +1 -0
- package/dist/src/init/InitFlow.d.ts +37 -0
- package/dist/src/init/InitFlow.d.ts.map +1 -0
- package/dist/src/init/InitFlow.js +209 -0
- package/dist/src/init/InitFlow.js.map +1 -0
- package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts +107 -0
- package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts.map +1 -0
- package/dist/src/init/architecture/ArchitectureDecisionEngine.js +405 -0
- package/dist/src/init/architecture/ArchitectureDecisionEngine.js.map +1 -0
- package/dist/src/init/architecture/CloudCreditsDatabase.d.ts +11 -0
- package/dist/src/init/architecture/CloudCreditsDatabase.d.ts.map +1 -0
- package/dist/src/init/architecture/CloudCreditsDatabase.js +92 -0
- package/dist/src/init/architecture/CloudCreditsDatabase.js.map +1 -0
- package/dist/src/init/architecture/types.d.ts +251 -0
- package/dist/src/init/architecture/types.d.ts.map +1 -0
- package/dist/src/init/architecture/types.js +54 -0
- package/dist/src/init/architecture/types.js.map +1 -0
- package/dist/src/init/compliance/ComplianceDetector.d.ts +17 -0
- package/dist/src/init/compliance/ComplianceDetector.d.ts.map +1 -0
- package/dist/src/init/compliance/ComplianceDetector.js +64 -0
- package/dist/src/init/compliance/ComplianceDetector.js.map +1 -0
- package/dist/src/init/compliance/standards-database.d.ts +48 -0
- package/dist/src/init/compliance/standards-database.d.ts.map +1 -0
- package/dist/src/init/compliance/standards-database.js +506 -0
- package/dist/src/init/compliance/standards-database.js.map +1 -0
- package/dist/src/init/compliance/types.d.ts +91 -0
- package/dist/src/init/compliance/types.d.ts.map +1 -0
- package/dist/src/init/compliance/types.js +43 -0
- package/dist/src/init/compliance/types.js.map +1 -0
- package/dist/src/init/repo/GitHubAPIClient.d.ts +51 -0
- package/dist/src/init/repo/GitHubAPIClient.d.ts.map +1 -0
- package/dist/src/init/repo/GitHubAPIClient.js +144 -0
- package/dist/src/init/repo/GitHubAPIClient.js.map +1 -0
- package/dist/src/init/repo/RepositorySelector.d.ts +45 -0
- package/dist/src/init/repo/RepositorySelector.d.ts.map +1 -0
- package/dist/src/init/repo/RepositorySelector.js +106 -0
- package/dist/src/init/repo/RepositorySelector.js.map +1 -0
- package/dist/src/init/repo/types.d.ts +95 -0
- package/dist/src/init/repo/types.d.ts.map +1 -0
- package/dist/src/init/repo/types.js +25 -0
- package/dist/src/init/repo/types.js.map +1 -0
- package/dist/src/init/research/CompetitorAnalyzer.d.ts +79 -0
- package/dist/src/init/research/CompetitorAnalyzer.d.ts.map +1 -0
- package/dist/src/init/research/CompetitorAnalyzer.js +265 -0
- package/dist/src/init/research/CompetitorAnalyzer.js.map +1 -0
- package/dist/src/init/research/MarketDetector.d.ts +62 -0
- package/dist/src/init/research/MarketDetector.d.ts.map +1 -0
- package/dist/src/init/research/MarketDetector.js +247 -0
- package/dist/src/init/research/MarketDetector.js.map +1 -0
- package/dist/src/init/research/OpportunityScorer.d.ts +58 -0
- package/dist/src/init/research/OpportunityScorer.d.ts.map +1 -0
- package/dist/src/init/research/OpportunityScorer.js +194 -0
- package/dist/src/init/research/OpportunityScorer.js.map +1 -0
- package/dist/src/init/research/QuestionGenerator.d.ts +68 -0
- package/dist/src/init/research/QuestionGenerator.d.ts.map +1 -0
- package/dist/src/init/research/QuestionGenerator.js +244 -0
- package/dist/src/init/research/QuestionGenerator.js.map +1 -0
- package/dist/src/init/research/ReportGenerator.d.ts +36 -0
- package/dist/src/init/research/ReportGenerator.d.ts.map +1 -0
- package/dist/src/init/research/ReportGenerator.js +125 -0
- package/dist/src/init/research/ReportGenerator.js.map +1 -0
- package/dist/src/init/research/VisionAnalyzer.d.ts +129 -0
- package/dist/src/init/research/VisionAnalyzer.d.ts.map +1 -0
- package/dist/src/init/research/VisionAnalyzer.js +212 -0
- package/dist/src/init/research/VisionAnalyzer.js.map +1 -0
- package/dist/src/init/research/keyword-extractor.d.ts +78 -0
- package/dist/src/init/research/keyword-extractor.d.ts.map +1 -0
- package/dist/src/init/research/keyword-extractor.js +230 -0
- package/dist/src/init/research/keyword-extractor.js.map +1 -0
- package/dist/src/init/research/src/config/ConfigManager.d.ts +14 -0
- package/dist/src/init/research/src/config/ConfigManager.d.ts.map +1 -0
- package/dist/src/init/research/src/config/ConfigManager.js +45 -0
- package/dist/src/init/research/src/config/ConfigManager.js.map +1 -0
- package/dist/src/init/research/src/config/types.d.ts +102 -0
- package/dist/src/init/research/src/config/types.d.ts.map +1 -0
- package/dist/src/init/research/src/config/types.js +24 -0
- package/dist/src/init/research/src/config/types.js.map +1 -0
- package/dist/src/init/research/types.d.ts +183 -0
- package/dist/src/init/research/types.d.ts.map +1 -0
- package/dist/src/init/research/types.js +65 -0
- package/dist/src/init/research/types.js.map +1 -0
- package/dist/src/init/team/ServerlessSavingsCalculator.d.ts +136 -0
- package/dist/src/init/team/ServerlessSavingsCalculator.d.ts.map +1 -0
- package/dist/src/init/team/ServerlessSavingsCalculator.js +360 -0
- package/dist/src/init/team/ServerlessSavingsCalculator.js.map +1 -0
- package/dist/src/init/team/TeamRecommender.d.ts +122 -0
- package/dist/src/init/team/TeamRecommender.d.ts.map +1 -0
- package/dist/src/init/team/TeamRecommender.js +405 -0
- package/dist/src/init/team/TeamRecommender.js.map +1 -0
- package/dist/src/init/team/types.d.ts +95 -0
- package/dist/src/init/team/types.d.ts.map +1 -0
- package/dist/src/init/team/types.js +23 -0
- package/dist/src/init/team/types.js.map +1 -0
- package/dist/src/integrations/jira/jira-mapper.d.ts +1 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
- package/dist/src/types/cost-tracking.d.ts +1 -1
- package/dist/src/types/cost-tracking.d.ts.map +1 -1
- package/dist/src/utils/cost-reporter.d.ts +2 -2
- package/dist/src/utils/cost-reporter.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/config-generator.d.ts +1 -1
- package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/config-generator.js +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.js +4 -4
- package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
- package/dist/src/utils/docs-preview/index.d.ts +6 -6
- package/dist/src/utils/docs-preview/index.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/index.js +6 -6
- package/dist/src/utils/docs-preview/index.js.map +1 -1
- package/dist/src/utils/docs-preview/package-installer.d.ts +1 -1
- package/dist/src/utils/docs-preview/package-installer.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/package-installer.js +1 -1
- package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
- package/dist/src/utils/docs-preview/server-manager.d.ts +1 -1
- package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/server-manager.js +1 -1
- package/dist/src/utils/docs-preview/server-manager.js.map +1 -1
- package/dist/src/utils/docs-preview/sidebar-builder.d.ts +1 -1
- package/dist/src/utils/docs-preview/sidebar-builder.d.ts.map +1 -1
- package/dist/src/utils/generate-skills-index.d.ts +1 -1
- package/dist/src/utils/generate-skills-index.js +1 -1
- package/dist/src/utils/project-detection.js +1 -1
- package/dist/src/utils/project-detection.js.map +1 -1
- package/package.json +9 -3
- package/plugins/specweave/agents/architect/AGENT.md +605 -0
- package/plugins/specweave/agents/infrastructure/AGENT.md +760 -0
- package/plugins/specweave/agents/pm/AGENT.md +14 -13
- package/plugins/specweave/commands/specweave-check-hooks.md +186 -0
- package/plugins/specweave/commands/specweave-plan.md +151 -0
- package/plugins/specweave/commands/specweave-sync-acs.md +342 -0
- package/plugins/specweave/commands/specweave-validate.md +60 -11
- package/plugins/specweave/hooks/lib/update-status-line.sh +8 -4
- package/plugins/specweave/hooks/post-increment-change.sh +4 -0
- package/plugins/specweave/hooks/post-increment-completion.sh +7 -1
- package/plugins/specweave/hooks/post-increment-planning.sh +4 -0
- package/plugins/specweave/hooks/post-increment-status-change.sh +4 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +78 -0
- package/plugins/specweave/iac-templates/aws-lambda/README.md.hbs +280 -0
- package/plugins/specweave/iac-templates/aws-lambda/defaults.json +118 -0
- package/plugins/specweave/iac-templates/aws-lambda/environments/dev.defaults.json +46 -0
- package/plugins/specweave/iac-templates/aws-lambda/environments/prod.defaults.json +67 -0
- package/plugins/specweave/iac-templates/aws-lambda/environments/staging.defaults.json +47 -0
- package/plugins/specweave/iac-templates/aws-lambda/main.tf.hbs +241 -0
- package/plugins/specweave/iac-templates/aws-lambda/outputs.tf.hbs +61 -0
- package/plugins/specweave/iac-templates/aws-lambda/provider.tf.hbs +15 -0
- package/plugins/specweave/iac-templates/aws-lambda/variables.tf.hbs +88 -0
- package/plugins/specweave/iac-templates/azure-functions/README.md.hbs +315 -0
- package/plugins/specweave/iac-templates/azure-functions/defaults.json +65 -0
- package/plugins/specweave/iac-templates/azure-functions/environments/dev.defaults.json +30 -0
- package/plugins/specweave/iac-templates/azure-functions/environments/prod.defaults.json +34 -0
- package/plugins/specweave/iac-templates/azure-functions/environments/staging.defaults.json +31 -0
- package/plugins/specweave/iac-templates/azure-functions/iam.tf.hbs +34 -0
- package/plugins/specweave/iac-templates/azure-functions/main.tf.hbs +247 -0
- package/plugins/specweave/iac-templates/azure-functions/outputs.tf.hbs +72 -0
- package/plugins/specweave/iac-templates/azure-functions/provider.tf.hbs +14 -0
- package/plugins/specweave/iac-templates/azure-functions/variables.tf.hbs +64 -0
- package/plugins/specweave/iac-templates/firebase/README.md.hbs +487 -0
- package/plugins/specweave/iac-templates/firebase/defaults.json +55 -0
- package/plugins/specweave/iac-templates/firebase/environments/dev.defaults.json +44 -0
- package/plugins/specweave/iac-templates/firebase/environments/prod.defaults.json +52 -0
- package/plugins/specweave/iac-templates/firebase/environments/staging.defaults.json +43 -0
- package/plugins/specweave/iac-templates/firebase/iam.tf.hbs +75 -0
- package/plugins/specweave/iac-templates/firebase/main.tf.hbs +297 -0
- package/plugins/specweave/iac-templates/firebase/outputs.tf.hbs +67 -0
- package/plugins/specweave/iac-templates/firebase/provider.tf.hbs +26 -0
- package/plugins/specweave/iac-templates/firebase/variables.tf.hbs +68 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/README.md.hbs +330 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/defaults.json +69 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/dev.defaults.json +33 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/prod.defaults.json +40 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/staging.defaults.json +33 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/iam.tf.hbs +54 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/main.tf.hbs +211 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/outputs.tf.hbs +44 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/provider.tf.hbs +14 -0
- package/plugins/specweave/iac-templates/gcp-cloud-functions/variables.tf.hbs +82 -0
- package/plugins/specweave/iac-templates/supabase/README.md.hbs +534 -0
- package/plugins/specweave/iac-templates/supabase/defaults.json +69 -0
- package/plugins/specweave/iac-templates/supabase/environments/dev.defaults.json +55 -0
- package/plugins/specweave/iac-templates/supabase/environments/prod.defaults.json +75 -0
- package/plugins/specweave/iac-templates/supabase/environments/staging.defaults.json +54 -0
- package/plugins/specweave/iac-templates/supabase/iam.tf.hbs +146 -0
- package/plugins/specweave/iac-templates/supabase/main.tf.hbs +310 -0
- package/plugins/specweave/iac-templates/supabase/outputs.tf.hbs +74 -0
- package/plugins/specweave/iac-templates/supabase/provider.tf.hbs +19 -0
- package/plugins/specweave/iac-templates/supabase/variables.tf.hbs +78 -0
- package/plugins/specweave/knowledge-base/serverless/FRESHNESS.md +69 -0
- package/plugins/specweave/knowledge-base/serverless/learning-paths.json +865 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/aws-lambda.json +41 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/azure-functions.json +41 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/firebase.json +46 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/gcp-cloud-functions.json +41 -0
- package/plugins/specweave/knowledge-base/serverless/platforms/supabase.json +41 -0
- package/plugins/specweave/knowledge-base/serverless/schema.json +155 -0
- package/plugins/specweave/lib/hooks/auto-transition.js +50 -0
- package/plugins/specweave/lib/hooks/auto-transition.ts +84 -0
- package/plugins/specweave/lib/hooks/invoke-translator-skill.js +1 -1
- package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +1 -1
- package/plugins/specweave/lib/hooks/sync-living-docs.js +4 -31
- package/plugins/specweave/lib/hooks/{sync-living-docs.ts → sync-living-docs.ts.DISABLED} +9 -48
- package/plugins/specweave/lib/hooks/translate-file.js +1 -1
- package/plugins/specweave/lib/hooks/translate-file.ts +1 -1
- package/plugins/specweave/lib/hooks/update-ac-status.js +24 -75
- package/plugins/specweave/lib/hooks/update-ac-status.ts +46 -135
- package/plugins/specweave/lib/hooks/update-tasks-md.js +115 -3
- package/plugins/specweave/lib/hooks/update-tasks-md.ts +182 -10
- package/plugins/specweave/lib/utils/validate-dev-setup.sh +133 -0
- package/plugins/specweave/skills/increment-planner/SKILL.md +25 -15
- package/plugins/specweave/skills/serverless-recommender/SKILL.md +368 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/iam.tf.hbs +137 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/main.tf.hbs +216 -0
- package/plugins/specweave-github/lib/IssueStateManager.js +117 -0
- package/plugins/specweave-github/lib/IssueStateManager.ts +231 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.js +7 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.ts +11 -0
- package/plugins/specweave-ui/.mcp.json +0 -10
- package/plugins/specweave-ui/README.md +26 -26
- package/plugins/specweave-ui/skills/browser-automation/SKILL.md +31 -18
- package/src/templates/tasks.md.template +51 -33
- package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts +0 -89
- package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js +0 -226
- package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts +0 -60
- package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js +0 -201
- package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts +0 -42
- package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js +0 -123
- package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts +0 -45
- package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js +0 -132
- package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts +0 -33
- package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-parser.js +0 -419
- package/dist/plugins/specweave/lib/hooks/reflection-parser.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts +0 -56
- package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js +0 -239
- package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts +0 -64
- package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/reflection-storage.js +0 -305
- package/dist/plugins/specweave/lib/hooks/reflection-storage.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts +0 -43
- package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/run-self-reflection.js +0 -203
- package/dist/plugins/specweave/lib/hooks/run-self-reflection.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +0 -32
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +0 -405
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/translate-file.d.ts +0 -59
- package/dist/plugins/specweave/lib/hooks/translate-file.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/translate-file.js +0 -350
- package/dist/plugins/specweave/lib/hooks/translate-file.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts +0 -13
- package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/translate-living-docs.js +0 -175
- package/dist/plugins/specweave/lib/hooks/translate-living-docs.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts +0 -164
- package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/types/reflection-types.js +0 -73
- package/dist/plugins/specweave/lib/hooks/types/reflection-types.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +0 -21
- package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/update-ac-status.js +0 -162
- package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +0 -1
- package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts +0 -29
- package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts.map +0 -1
- package/dist/plugins/specweave/lib/hooks/update-tasks-md.js +0 -203
- package/dist/plugins/specweave/lib/hooks/update-tasks-md.js.map +0 -1
- package/dist/src/core/living-docs/spec-distributor.d.ts +0 -180
- package/dist/src/core/living-docs/spec-distributor.d.ts.map +0 -1
- package/dist/src/core/living-docs/spec-distributor.js +0 -1840
- package/dist/src/core/living-docs/spec-distributor.js.map +0 -1
|
@@ -146,20 +146,162 @@ function parseTaskStatus(lines: string[]): TaskMatch[] {
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
/**
|
|
149
|
-
* Detect which tasks are completed (
|
|
150
|
-
*
|
|
149
|
+
* Detect which tasks are completed (STRICT VALIDATION)
|
|
150
|
+
*
|
|
151
|
+
* Detection strategies (ALL must be true):
|
|
152
|
+
* 1. Task header has "✅ COMPLETE" marker AND
|
|
153
|
+
* all implementation checkboxes are marked [x]
|
|
154
|
+
* 2. OR: Task header has "Status: [x] Completed" (legacy format)
|
|
155
|
+
*
|
|
156
|
+
* This prevents inconsistencies where header says COMPLETE but checkboxes
|
|
157
|
+
* are unchecked. Both must match for a task to be considered complete.
|
|
158
|
+
*
|
|
159
|
+
* @see .specweave/increments/0037/reports/ULTRATHINK-COMPLETE-MARKER-VS-CHECKBOXES.md
|
|
151
160
|
*/
|
|
152
161
|
function detectCompletedTasks(lines: string[]): string[] {
|
|
153
|
-
// For now, this is a placeholder - we'll mark tasks as complete
|
|
154
|
-
// if they have implementation sections or "COMPLETE" markers
|
|
155
162
|
const completedTasks: string[] = [];
|
|
163
|
+
const warnings: string[] = [];
|
|
164
|
+
const taskPattern = /^###\s+(T-\d+[-A-Z]*):?\s+(.+)/;
|
|
165
|
+
|
|
166
|
+
for (let i = 0; i < lines.length; i++) {
|
|
167
|
+
const line = lines[i];
|
|
168
|
+
const taskMatch = line.match(taskPattern);
|
|
169
|
+
|
|
170
|
+
if (!taskMatch) continue;
|
|
171
|
+
|
|
172
|
+
const taskId = taskMatch[1];
|
|
173
|
+
const taskTitle = taskMatch[2];
|
|
174
|
+
const hasCompleteMarker = taskTitle.includes('✅ COMPLETE');
|
|
156
175
|
|
|
157
|
-
|
|
158
|
-
|
|
176
|
+
// Get implementation section
|
|
177
|
+
const taskEndIndex = findNextTaskStart(lines, i + 1);
|
|
178
|
+
const implementationSection = findImplementationSection(lines, i, taskEndIndex);
|
|
179
|
+
|
|
180
|
+
let allCheckboxesComplete = false;
|
|
181
|
+
if (implementationSection) {
|
|
182
|
+
allCheckboxesComplete = checkAllCheckboxesComplete(implementationSection);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// STRICT VALIDATION: Require BOTH header AND checkboxes to match
|
|
186
|
+
if (hasCompleteMarker && implementationSection) {
|
|
187
|
+
if (allCheckboxesComplete) {
|
|
188
|
+
// ✅ CONSISTENT: Header says COMPLETE and all checkboxes checked
|
|
189
|
+
if (!completedTasks.includes(taskId)) {
|
|
190
|
+
completedTasks.push(taskId);
|
|
191
|
+
}
|
|
192
|
+
} else {
|
|
193
|
+
// ⚠️ INCONSISTENT: Header says COMPLETE but checkboxes incomplete
|
|
194
|
+
warnings.push(`${taskId}: Header has ✅ COMPLETE but not all checkboxes checked`);
|
|
195
|
+
}
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// If no implementation section, trust the header marker
|
|
200
|
+
if (hasCompleteMarker && !implementationSection) {
|
|
201
|
+
if (!completedTasks.includes(taskId)) {
|
|
202
|
+
completedTasks.push(taskId);
|
|
203
|
+
}
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Warn if checkboxes all complete but header missing marker
|
|
208
|
+
if (!hasCompleteMarker && implementationSection && allCheckboxesComplete) {
|
|
209
|
+
warnings.push(`${taskId}: All checkboxes checked but header missing ✅ COMPLETE`);
|
|
210
|
+
// Still count as complete (checkboxes are source of truth for work done)
|
|
211
|
+
if (!completedTasks.includes(taskId)) {
|
|
212
|
+
completedTasks.push(taskId);
|
|
213
|
+
}
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Strategy 2: Check for "Status: [x] Completed" (legacy format)
|
|
218
|
+
for (let j = i + 1; j < Math.min(i + 10, taskEndIndex); j++) {
|
|
219
|
+
const statusLine = lines[j];
|
|
220
|
+
if (statusLine.includes('**Status**:') && statusLine.includes('[x] Completed')) {
|
|
221
|
+
if (!completedTasks.includes(taskId)) {
|
|
222
|
+
completedTasks.push(taskId);
|
|
223
|
+
}
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Report warnings if any
|
|
230
|
+
if (warnings.length > 0) {
|
|
231
|
+
console.warn('\n⚠️ Task Consistency Warnings:');
|
|
232
|
+
warnings.forEach(w => console.warn(` ${w}`));
|
|
233
|
+
console.warn('');
|
|
234
|
+
}
|
|
159
235
|
|
|
160
236
|
return completedTasks;
|
|
161
237
|
}
|
|
162
238
|
|
|
239
|
+
/**
|
|
240
|
+
* Find the next task header start index
|
|
241
|
+
*/
|
|
242
|
+
function findNextTaskStart(lines: string[], startIndex: number): number {
|
|
243
|
+
const taskPattern = /^###\s+T-\d+/;
|
|
244
|
+
|
|
245
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
246
|
+
if (taskPattern.test(lines[i])) {
|
|
247
|
+
return i;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return lines.length;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Find the Implementation section within a task
|
|
256
|
+
*/
|
|
257
|
+
function findImplementationSection(lines: string[], taskStartIndex: number, taskEndIndex: number): string[] | null {
|
|
258
|
+
let inImplementation = false;
|
|
259
|
+
const implementationLines: string[] = [];
|
|
260
|
+
|
|
261
|
+
for (let i = taskStartIndex; i < taskEndIndex; i++) {
|
|
262
|
+
const line = lines[i];
|
|
263
|
+
|
|
264
|
+
if (line.includes('**Implementation**:')) {
|
|
265
|
+
inImplementation = true;
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (inImplementation) {
|
|
270
|
+
// Stop at next section header (**, ---, or ###)
|
|
271
|
+
if (line.trim().startsWith('**') && !line.startsWith('- [')) {
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
if (line.trim().startsWith('---')) {
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
if (line.trim().startsWith('###')) {
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
implementationLines.push(line);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return implementationLines.length > 0 ? implementationLines : null;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Check if all checkboxes in implementation section are complete
|
|
290
|
+
*/
|
|
291
|
+
function checkAllCheckboxesComplete(implementationLines: string[]): boolean {
|
|
292
|
+
const checkboxes = implementationLines.filter(line => line.includes('- ['));
|
|
293
|
+
|
|
294
|
+
if (checkboxes.length === 0) {
|
|
295
|
+
return false; // No checkboxes = can't determine completion
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// All checkboxes must be [x], none can be [ ]
|
|
299
|
+
const allComplete = checkboxes.every(line => line.includes('- [x]'));
|
|
300
|
+
const noneIncomplete = checkboxes.every(line => !line.includes('- [ ]'));
|
|
301
|
+
|
|
302
|
+
return allComplete && noneIncomplete;
|
|
303
|
+
}
|
|
304
|
+
|
|
163
305
|
/**
|
|
164
306
|
* Mark a specific task as complete
|
|
165
307
|
*/
|
|
@@ -195,22 +337,52 @@ function countTotalTasks(lines: string[]): number {
|
|
|
195
337
|
|
|
196
338
|
/**
|
|
197
339
|
* Count completed tasks
|
|
340
|
+
*
|
|
341
|
+
* Recognizes multiple completion indicators:
|
|
342
|
+
* 1. "✅ COMPLETE" marker in task header
|
|
343
|
+
* 2. "**Status**: [x] Completed" line
|
|
344
|
+
* 3. All implementation checkboxes marked [x]
|
|
198
345
|
*/
|
|
199
346
|
function countCompletedTasks(lines: string[]): number {
|
|
200
347
|
let count = 0;
|
|
201
|
-
const taskPattern = /^###\s+(T-?\d+[-A-Z]*):?\s
|
|
348
|
+
const taskPattern = /^###\s+(T-?\d+[-A-Z]*):?\s+(.+)/;
|
|
202
349
|
|
|
203
350
|
for (let i = 0; i < lines.length; i++) {
|
|
204
351
|
const line = lines[i];
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
352
|
+
const taskMatch = line.match(taskPattern);
|
|
353
|
+
|
|
354
|
+
if (taskMatch) {
|
|
355
|
+
const taskTitle = taskMatch[2];
|
|
356
|
+
|
|
357
|
+
// Strategy 1: Check for ✅ COMPLETE marker in header
|
|
358
|
+
if (taskTitle.includes('✅ COMPLETE')) {
|
|
359
|
+
count++;
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Strategy 2: Check for Status: [x] Completed
|
|
364
|
+
let found = false;
|
|
365
|
+
for (let j = i + 1; j < Math.min(i + 10, lines.length); j++) {
|
|
208
366
|
const nextLine = lines[j];
|
|
209
367
|
if (nextLine.includes('**Status**:') && nextLine.includes('[x] Completed')) {
|
|
210
368
|
count++;
|
|
369
|
+
found = true;
|
|
211
370
|
break;
|
|
212
371
|
}
|
|
213
372
|
}
|
|
373
|
+
|
|
374
|
+
if (found) continue;
|
|
375
|
+
|
|
376
|
+
// Strategy 3: Check if all implementation checkboxes are [x]
|
|
377
|
+
const taskEndIndex = findNextTaskStart(lines, i + 1);
|
|
378
|
+
const implementationSection = findImplementationSection(lines, i, taskEndIndex);
|
|
379
|
+
|
|
380
|
+
if (implementationSection) {
|
|
381
|
+
const allCheckboxesComplete = checkAllCheckboxesComplete(implementationSection);
|
|
382
|
+
if (allCheckboxesComplete) {
|
|
383
|
+
count++;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
214
386
|
}
|
|
215
387
|
}
|
|
216
388
|
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Lightweight Developer Setup Validator for Hooks
|
|
3
|
+
#
|
|
4
|
+
# This script is sourced by hooks to validate that the marketplace symlink
|
|
5
|
+
# is correctly configured for local development, preventing hook errors.
|
|
6
|
+
#
|
|
7
|
+
# Usage in hooks:
|
|
8
|
+
# source "$(dirname "$0")/../lib/utils/validate-dev-setup.sh"
|
|
9
|
+
# validate_marketplace_setup_quiet || exit 0 # Skip hook if setup invalid
|
|
10
|
+
|
|
11
|
+
# Global variables set by validation
|
|
12
|
+
MARKETPLACE_SETUP_VALID=0
|
|
13
|
+
MARKETPLACE_SETUP_ERROR=""
|
|
14
|
+
|
|
15
|
+
# Validate marketplace setup (quiet mode - for hooks)
|
|
16
|
+
# Returns: 0 if valid, 1 if invalid
|
|
17
|
+
# Sets: MARKETPLACE_SETUP_VALID, MARKETPLACE_SETUP_ERROR
|
|
18
|
+
validate_marketplace_setup_quiet() {
|
|
19
|
+
# Only validate in development mode
|
|
20
|
+
if [[ ! -f "$(git rev-parse --show-toplevel 2>/dev/null)/package.json" ]]; then
|
|
21
|
+
MARKETPLACE_SETUP_VALID=1
|
|
22
|
+
return 0 # Not in a repo, assume valid
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
# Check if we're in the SpecWeave repository
|
|
26
|
+
local repo_root
|
|
27
|
+
repo_root="$(git rev-parse --show-toplevel 2>/dev/null)" || {
|
|
28
|
+
MARKETPLACE_SETUP_VALID=1
|
|
29
|
+
return 0 # Not in git repo, assume valid
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if [[ ! -f "$repo_root/package.json" ]]; then
|
|
33
|
+
MARKETPLACE_SETUP_VALID=1
|
|
34
|
+
return 0
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# Check if this is the SpecWeave repository
|
|
38
|
+
if ! grep -q '"name": "specweave"' "$repo_root/package.json" 2>/dev/null; then
|
|
39
|
+
MARKETPLACE_SETUP_VALID=1
|
|
40
|
+
return 0 # Not SpecWeave repo, assume valid (user project)
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# This IS the SpecWeave repository - validate marketplace setup
|
|
44
|
+
local marketplace_path="$HOME/.claude/plugins/marketplaces/specweave"
|
|
45
|
+
|
|
46
|
+
# Check if marketplace exists
|
|
47
|
+
if [[ ! -e "$marketplace_path" ]]; then
|
|
48
|
+
MARKETPLACE_SETUP_VALID=0
|
|
49
|
+
MARKETPLACE_SETUP_ERROR="Marketplace directory does not exist"
|
|
50
|
+
return 1
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# Check if it's a symlink
|
|
54
|
+
if [[ ! -L "$marketplace_path" ]]; then
|
|
55
|
+
MARKETPLACE_SETUP_VALID=0
|
|
56
|
+
MARKETPLACE_SETUP_ERROR="Marketplace is a regular directory, not a symlink"
|
|
57
|
+
return 1
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# Check if symlink points to this repository
|
|
61
|
+
local symlink_target
|
|
62
|
+
symlink_target="$(readlink "$marketplace_path")"
|
|
63
|
+
|
|
64
|
+
if [[ "$symlink_target" != "$repo_root" ]]; then
|
|
65
|
+
# Try resolving to absolute path in case symlink is relative
|
|
66
|
+
local resolved_target
|
|
67
|
+
resolved_target="$(cd "$(dirname "$marketplace_path")" && cd "$symlink_target" && pwd)" || {
|
|
68
|
+
MARKETPLACE_SETUP_VALID=0
|
|
69
|
+
MARKETPLACE_SETUP_ERROR="Symlink target cannot be resolved"
|
|
70
|
+
return 1
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if [[ "$resolved_target" != "$repo_root" ]]; then
|
|
74
|
+
MARKETPLACE_SETUP_VALID=0
|
|
75
|
+
MARKETPLACE_SETUP_ERROR="Symlink points to wrong repository"
|
|
76
|
+
return 1
|
|
77
|
+
fi
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# All checks passed
|
|
81
|
+
MARKETPLACE_SETUP_VALID=1
|
|
82
|
+
return 0
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
# Validate marketplace setup (verbose mode - for scripts)
|
|
86
|
+
# Prints detailed error messages
|
|
87
|
+
# Returns: 0 if valid, 1 if invalid
|
|
88
|
+
validate_marketplace_setup_verbose() {
|
|
89
|
+
if validate_marketplace_setup_quiet; then
|
|
90
|
+
return 0
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
# Print error
|
|
94
|
+
echo "❌ Invalid marketplace setup: $MARKETPLACE_SETUP_ERROR" >&2
|
|
95
|
+
echo "" >&2
|
|
96
|
+
echo "Fix by running:" >&2
|
|
97
|
+
echo " ./scripts/setup-dev-plugins.sh" >&2
|
|
98
|
+
echo "" >&2
|
|
99
|
+
echo "Or manually:" >&2
|
|
100
|
+
echo " rm -rf ~/.claude/plugins/marketplaces/specweave" >&2
|
|
101
|
+
echo " ln -s \$(pwd) ~/.claude/plugins/marketplaces/specweave" >&2
|
|
102
|
+
echo "" >&2
|
|
103
|
+
|
|
104
|
+
return 1
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# Quick check for hooks - returns true if running in user project
|
|
108
|
+
is_user_project() {
|
|
109
|
+
local repo_root
|
|
110
|
+
repo_root="$(git rev-parse --show-toplevel 2>/dev/null)" || return 0
|
|
111
|
+
|
|
112
|
+
if [[ ! -f "$repo_root/package.json" ]]; then
|
|
113
|
+
return 0 # No package.json, assume user project
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
# Check if this is NOT the SpecWeave repository
|
|
117
|
+
if ! grep -q '"name": "specweave"' "$repo_root/package.json" 2>/dev/null; then
|
|
118
|
+
return 0 # User project
|
|
119
|
+
fi
|
|
120
|
+
|
|
121
|
+
return 1 # SpecWeave repository
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
# Print warning about marketplace setup (for hooks)
|
|
125
|
+
warn_marketplace_setup() {
|
|
126
|
+
if [[ "${SPECWEAVE_SUPPRESS_WARNINGS:-}" == "true" ]]; then
|
|
127
|
+
return 0
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
echo "⚠️ Warning: Marketplace setup issue detected" >&2
|
|
131
|
+
echo " Run: ./scripts/validate-local-dev-setup.sh" >&2
|
|
132
|
+
echo "" >&2
|
|
133
|
+
}
|
|
@@ -230,7 +230,9 @@ const teamPath = projectManager.getTeamPath(); // team/{activeProject.id}/
|
|
|
230
230
|
**In PM Agent Instructions**:
|
|
231
231
|
- DO NOT hardcode `.specweave/docs/internal/specs/`
|
|
232
232
|
- USE ProjectManager to get correct path for active project
|
|
233
|
-
-
|
|
233
|
+
- Living docs are created via `/specweave:sync-docs update` (not manually):
|
|
234
|
+
- Feature overviews: `.specweave/docs/internal/specs/_features/FS-{number}/FEATURE.md`
|
|
235
|
+
- User stories: `.specweave/docs/internal/specs/{project}/FS-{number}/us-{id}-{slug}.md`
|
|
234
236
|
|
|
235
237
|
---
|
|
236
238
|
|
|
@@ -271,9 +273,10 @@ Task(
|
|
|
271
273
|
You MUST create living Spec (living docs - source of truth) AND optionally create increment spec.md:
|
|
272
274
|
|
|
273
275
|
1. Spec (living docs - SOURCE OF TRUTH, permanent):
|
|
274
|
-
- IMPORTANT:
|
|
275
|
-
-
|
|
276
|
-
|
|
276
|
+
- IMPORTANT: Living docs are created via `/specweave:sync-docs update` (not manually)
|
|
277
|
+
- Structure (v0.18.0+ - three-layer architecture):
|
|
278
|
+
* Feature overview: `.specweave/docs/internal/specs/_features/FS-{number}/FEATURE.md`
|
|
279
|
+
* User stories: `.specweave/docs/internal/specs/{project}/FS-{number}/us-*.md`
|
|
277
280
|
- This is the COMPLETE, PERMANENT source of truth
|
|
278
281
|
- Include ALL of:
|
|
279
282
|
* User stories (US-001, US-002, etc.) with full details
|
|
@@ -300,7 +303,7 @@ Task(
|
|
|
300
303
|
3. Increment spec.md (optional, can duplicate living spec):
|
|
301
304
|
- Create .specweave/increments/{number}-{name}/spec.md
|
|
302
305
|
- This CAN duplicate content from living spec.md (temporary reference - that's OK!)
|
|
303
|
-
- OR it can just reference the spec: \"See
|
|
306
|
+
- OR it can just reference the spec: \"See [FS-{number}](../../docs/internal/specs/_features/FS-{number}/FEATURE.md) for complete requirements\"
|
|
304
307
|
- Increment spec.md may be deleted after increment completes
|
|
305
308
|
- Living spec.md persists as permanent documentation
|
|
306
309
|
|
|
@@ -379,7 +382,7 @@ Task(
|
|
|
379
382
|
Wait for test-aware-planner agent to complete!
|
|
380
383
|
↓
|
|
381
384
|
STEP 6: Validate Living Docs and Increment Files
|
|
382
|
-
├─ Check
|
|
385
|
+
├─ Check `.specweave/docs/internal/specs/_features/FS-{number}/FEATURE.md` exists (SOURCE OF TRUTH)
|
|
383
386
|
├─ Check living spec.md contains ALL user stories, requirements, AC-IDs (with AC-IDs)
|
|
384
387
|
├─ Check .specweave/docs/internal/architecture/adr/ has ≥3 ADRs
|
|
385
388
|
├─ Check strategy docs (if created) are high-level only (no detailed user stories)
|
|
@@ -395,19 +398,26 @@ STEP 6: Validate Living Docs and Increment Files
|
|
|
395
398
|
|
|
396
399
|
#### Living Spec (Living Docs - Source of Truth) ✅
|
|
397
400
|
```
|
|
398
|
-
.specweave/docs/internal/specs/
|
|
399
|
-
|
|
401
|
+
.specweave/docs/internal/specs/
|
|
402
|
+
├── _features/ # ← Cross-project feature overviews (v0.18.0+)
|
|
403
|
+
│ └── FS-{number}/
|
|
404
|
+
│ └── FEATURE.md # ← Feature summary (created via sync-docs)
|
|
405
|
+
└── {project-id}/ # ← Project-specific user stories
|
|
406
|
+
└── FS-{number}/
|
|
407
|
+
├── README.md # ← Project context
|
|
408
|
+
└── us-*.md # ← User story details (created via sync-docs)
|
|
400
409
|
# COMPLETE user stories, AC, requirements
|
|
401
410
|
# This is the PERMANENT source of truth
|
|
402
411
|
# Can be linked to Jira/ADO/GitHub Issues
|
|
403
412
|
# Persists after increment completes
|
|
404
413
|
|
|
405
|
-
# Examples (v0.
|
|
406
|
-
#
|
|
407
|
-
#
|
|
408
|
-
#
|
|
409
|
-
#
|
|
414
|
+
# Examples (v0.18.0+ Three-Layer):
|
|
415
|
+
# Feature overview: specs/_features/FS-001/FEATURE.md
|
|
416
|
+
# User stories: specs/specweave/FS-001/us-001-user-auth.md, us-002-password-reset.md
|
|
417
|
+
# specs/mobile/FS-002/us-001-push-notifications.md
|
|
418
|
+
# specs/backend/FS-003/us-001-api-auth.md
|
|
410
419
|
|
|
420
|
+
# OLD (v0.17.x): specs/{project}/spec-{number}-{name}.md ← DEPRECATED
|
|
411
421
|
# OLD (v0.8.0-v0.16.10): projects/default/specs/... ← DEPRECATED
|
|
412
422
|
```
|
|
413
423
|
|
|
@@ -465,7 +475,7 @@ STEP 6: Validate Living Docs and Increment Files
|
|
|
465
475
|
Before completing feature planning, verify:
|
|
466
476
|
|
|
467
477
|
**Living Spec (Living Docs - Source of Truth, Mandatory)**:
|
|
468
|
-
- [ ] `.specweave/docs/internal/specs/
|
|
478
|
+
- [ ] `.specweave/docs/internal/specs/_features/FS-{number}/FEATURE.md` exists (created via sync-docs)
|
|
469
479
|
- [ ] Living spec.md contains ALL user stories (US-001, US-002, etc.) with full details
|
|
470
480
|
- [ ] Living spec.md contains ALL acceptance criteria (AC-US1-01, etc.)
|
|
471
481
|
- [ ] Living spec.md contains ALL requirements (FR-001, NFR-001, etc.)
|
|
@@ -485,7 +495,7 @@ Before completing feature planning, verify:
|
|
|
485
495
|
- [ ] Diagrams created for module (system-context, system-container)
|
|
486
496
|
|
|
487
497
|
**Increment spec.md (Optional - can duplicate living spec)**:
|
|
488
|
-
- [ ] `spec.md` either duplicates living spec.md OR references it ("See
|
|
498
|
+
- [ ] `spec.md` either duplicates living spec.md OR references it ("See [FS-{number}](../../docs/internal/specs/_features/FS-{number}/FEATURE.md)")
|
|
489
499
|
- [ ] If duplicated, content matches living spec.md
|
|
490
500
|
|
|
491
501
|
**Increment plan.md (Mandatory)**:
|