specweave 0.22.13 ā 0.23.0
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-plugin/README.md +2 -2
- package/CLAUDE.md +447 -52
- package/README.md +33 -10
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +1 -1
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.js +1 -1
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +4 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-sync.js +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.d.ts +9 -0
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +10 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +1 -1
- package/dist/plugins/specweave-github/lib/progress-comment-builder.js +2 -2
- package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +1 -1
- package/dist/plugins/specweave-github/lib/types.d.ts +1 -1
- package/dist/src/cli/commands/import-external.d.ts +22 -0
- package/dist/src/cli/commands/import-external.d.ts.map +1 -0
- package/dist/src/cli/commands/import-external.js +282 -0
- package/dist/src/cli/commands/import-external.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +359 -1
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/helpers/github-repo-selector.d.ts +59 -0
- package/dist/src/cli/helpers/github-repo-selector.d.ts.map +1 -0
- package/dist/src/cli/helpers/github-repo-selector.js +265 -0
- package/dist/src/cli/helpers/github-repo-selector.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +41 -24
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/config/import-config.d.ts +69 -0
- package/dist/src/config/import-config.d.ts.map +1 -0
- package/dist/src/config/import-config.js +136 -0
- package/dist/src/config/import-config.js.map +1 -0
- package/dist/src/config/types.d.ts +26 -26
- package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -1
- package/dist/src/core/increment/ac-status-manager.js +4 -2
- package/dist/src/core/increment/ac-status-manager.js.map +1 -1
- package/dist/src/core/increment/completion-validator.d.ts +30 -1
- package/dist/src/core/increment/completion-validator.d.ts.map +1 -1
- package/dist/src/core/increment/completion-validator.js +151 -3
- package/dist/src/core/increment/completion-validator.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.d.ts +25 -0
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +130 -3
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.d.ts +37 -0
- package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.js +262 -18
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.d.ts +17 -0
- package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.js +25 -0
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +16 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +56 -1
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/task-project-specific-generator.d.ts +2 -2
- package/dist/src/core/living-docs/task-project-specific-generator.js +2 -2
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts +2 -2
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.js +3 -15
- package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js +3 -6
- package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
- package/dist/src/core/spec-content-sync.d.ts +4 -1
- package/dist/src/core/spec-content-sync.d.ts.map +1 -1
- package/dist/src/core/spec-content-sync.js +139 -4
- package/dist/src/core/spec-content-sync.js.map +1 -1
- package/dist/src/core/spec-task-mapper.d.ts.map +1 -1
- package/dist/src/core/spec-task-mapper.js +9 -8
- package/dist/src/core/spec-task-mapper.js.map +1 -1
- package/dist/src/core/status-line-validator.d.ts +63 -0
- package/dist/src/core/status-line-validator.d.ts.map +1 -0
- package/dist/src/core/status-line-validator.js +253 -0
- package/dist/src/core/status-line-validator.js.map +1 -0
- package/dist/src/core/sync/bidirectional-engine.d.ts +10 -1
- package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
- package/dist/src/core/sync/bidirectional-engine.js +10 -1
- package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
- package/dist/src/core/sync/profile-manager.d.ts.map +1 -1
- package/dist/src/core/sync/profile-manager.js +3 -0
- package/dist/src/core/sync/profile-manager.js.map +1 -1
- package/dist/src/core/sync/project-context.d.ts.map +1 -1
- package/dist/src/core/sync/project-context.js +3 -0
- package/dist/src/core/sync/project-context.js.map +1 -1
- package/dist/src/core/sync/status-sync-engine.d.ts +1 -1
- package/dist/src/core/sync/status-sync-engine.js +1 -1
- package/dist/src/core/sync/sync-event-logger.d.ts +15 -1
- package/dist/src/core/sync/sync-event-logger.d.ts.map +1 -1
- package/dist/src/core/sync/sync-event-logger.js +39 -1
- package/dist/src/core/sync/sync-event-logger.js.map +1 -1
- package/dist/src/core/types/origin-metadata.d.ts +153 -0
- package/dist/src/core/types/origin-metadata.d.ts.map +1 -0
- package/dist/src/core/types/origin-metadata.js +166 -0
- package/dist/src/core/types/origin-metadata.js.map +1 -0
- package/dist/src/core/types/sync-config-validator.d.ts +57 -0
- package/dist/src/core/types/sync-config-validator.d.ts.map +1 -0
- package/dist/src/core/types/sync-config-validator.js +116 -0
- package/dist/src/core/types/sync-config-validator.js.map +1 -0
- package/dist/src/core/types/sync-profile.d.ts +8 -2
- 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/types/sync-settings.d.ts +73 -0
- package/dist/src/core/types/sync-settings.d.ts.map +1 -0
- package/dist/src/core/types/sync-settings.js +90 -0
- package/dist/src/core/types/sync-settings.js.map +1 -0
- package/dist/src/core/utils/permission-checker.d.ts +100 -0
- package/dist/src/core/utils/permission-checker.d.ts.map +1 -0
- package/dist/src/core/utils/permission-checker.js +166 -0
- package/dist/src/core/utils/permission-checker.js.map +1 -0
- package/dist/src/generators/spec/spec-parser.js +3 -3
- package/dist/src/generators/spec/spec-parser.js.map +1 -1
- package/dist/src/generators/spec/task-parser.js +4 -4
- package/dist/src/generators/spec/task-parser.js.map +1 -1
- package/dist/src/id-generators/task-id-generator.d.ts +96 -0
- package/dist/src/id-generators/task-id-generator.d.ts.map +1 -0
- package/dist/src/id-generators/task-id-generator.js +143 -0
- package/dist/src/id-generators/task-id-generator.js.map +1 -0
- package/dist/src/id-generators/us-id-generator.d.ts +96 -0
- package/dist/src/id-generators/us-id-generator.d.ts.map +1 -0
- package/dist/src/id-generators/us-id-generator.js +143 -0
- package/dist/src/id-generators/us-id-generator.js.map +1 -0
- package/dist/src/importers/ado-importer.d.ts +43 -0
- package/dist/src/importers/ado-importer.d.ts.map +1 -0
- package/dist/src/importers/ado-importer.js +234 -0
- package/dist/src/importers/ado-importer.js.map +1 -0
- package/dist/src/importers/duplicate-detector.d.ts +107 -0
- package/dist/src/importers/duplicate-detector.d.ts.map +1 -0
- package/dist/src/importers/duplicate-detector.js +189 -0
- package/dist/src/importers/duplicate-detector.js.map +1 -0
- package/dist/src/importers/external-importer.d.ts +96 -0
- package/dist/src/importers/external-importer.d.ts.map +1 -0
- package/dist/src/importers/external-importer.js +13 -0
- package/dist/src/importers/external-importer.js.map +1 -0
- package/dist/src/importers/github-importer.d.ts +37 -0
- package/dist/src/importers/github-importer.d.ts.map +1 -0
- package/dist/src/importers/github-importer.js +161 -0
- package/dist/src/importers/github-importer.js.map +1 -0
- package/dist/src/importers/import-coordinator.d.ts +105 -0
- package/dist/src/importers/import-coordinator.d.ts.map +1 -0
- package/dist/src/importers/import-coordinator.js +224 -0
- package/dist/src/importers/import-coordinator.js.map +1 -0
- package/dist/src/importers/item-converter.d.ts +96 -0
- package/dist/src/importers/item-converter.d.ts.map +1 -0
- package/dist/src/importers/item-converter.js +246 -0
- package/dist/src/importers/item-converter.js.map +1 -0
- package/dist/src/importers/jira-importer.d.ts +42 -0
- package/dist/src/importers/jira-importer.d.ts.map +1 -0
- package/dist/src/importers/jira-importer.js +221 -0
- package/dist/src/importers/jira-importer.js.map +1 -0
- package/dist/src/importers/rate-limiter.d.ts +128 -0
- package/dist/src/importers/rate-limiter.d.ts.map +1 -0
- package/dist/src/importers/rate-limiter.js +200 -0
- package/dist/src/importers/rate-limiter.js.map +1 -0
- package/dist/src/init/compliance/types.d.ts +2 -2
- package/dist/src/init/repo/types.d.ts +2 -2
- package/dist/src/integrations/ado/ado-client.d.ts +6 -0
- package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
- package/dist/src/integrations/ado/ado-client.js +23 -0
- package/dist/src/integrations/ado/ado-client.js.map +1 -1
- package/dist/src/integrations/jira/jira-client.d.ts +6 -0
- package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-client.js +38 -0
- package/dist/src/integrations/jira/jira-client.js.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts +1 -1
- package/dist/src/integrations/jira/jira-mapper.js +1 -1
- package/dist/src/living-docs/fs-id-allocator.d.ts +149 -0
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -0
- package/dist/src/living-docs/fs-id-allocator.js +325 -0
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -0
- package/dist/src/living-docs/id-registry.d.ts +124 -0
- package/dist/src/living-docs/id-registry.d.ts.map +1 -0
- package/dist/src/living-docs/id-registry.js +230 -0
- package/dist/src/living-docs/id-registry.js.map +1 -0
- package/dist/src/progress/us-progress-tracker.d.ts +68 -0
- package/dist/src/progress/us-progress-tracker.d.ts.map +1 -0
- package/dist/src/progress/us-progress-tracker.js +120 -0
- package/dist/src/progress/us-progress-tracker.js.map +1 -0
- package/dist/src/sync/external-item-sync-service.d.ts +150 -0
- package/dist/src/sync/external-item-sync-service.d.ts.map +1 -0
- package/dist/src/sync/external-item-sync-service.js +241 -0
- package/dist/src/sync/external-item-sync-service.js.map +1 -0
- package/dist/src/sync/format-preservation-sync.d.ts +90 -0
- package/dist/src/sync/format-preservation-sync.d.ts.map +1 -0
- package/dist/src/sync/format-preservation-sync.js +173 -0
- package/dist/src/sync/format-preservation-sync.js.map +1 -0
- package/dist/src/sync/index.d.ts +8 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +6 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/sync-coordinator.d.ts +49 -0
- package/dist/src/sync/sync-coordinator.d.ts.map +1 -0
- package/dist/src/sync/sync-coordinator.js +248 -0
- package/dist/src/sync/sync-coordinator.js.map +1 -0
- package/dist/src/sync/sync-metadata.d.ts +75 -0
- package/dist/src/sync/sync-metadata.d.ts.map +1 -0
- package/dist/src/sync/sync-metadata.js +100 -0
- package/dist/src/sync/sync-metadata.js.map +1 -0
- package/dist/src/types/living-docs-us-file.d.ts +63 -0
- package/dist/src/types/living-docs-us-file.d.ts.map +1 -0
- package/dist/src/types/living-docs-us-file.js +27 -0
- package/dist/src/types/living-docs-us-file.js.map +1 -0
- package/dist/src/validators/format-preservation-validator.d.ts +127 -0
- package/dist/src/validators/format-preservation-validator.d.ts.map +1 -0
- package/dist/src/validators/format-preservation-validator.js +187 -0
- package/dist/src/validators/format-preservation-validator.js.map +1 -0
- package/package.json +3 -2
- package/plugins/specweave/.claude-plugin/plugin.json +36 -2
- package/plugins/specweave/agents/architect/AGENT.md +11 -2
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +81 -25
- package/plugins/specweave/commands/specweave-archive-features.md +11 -1
- package/plugins/specweave/commands/specweave-import-external.md +407 -0
- package/plugins/specweave/commands/specweave-progress.md +45 -97
- package/plugins/specweave/hooks/post-edit-spec.sh +41 -0
- package/plugins/specweave/hooks/post-increment-completion.sh +168 -26
- package/plugins/specweave/hooks/post-increment-planning.sh +148 -4
- package/plugins/specweave/hooks/post-spec-update.sh +0 -0
- package/plugins/specweave/hooks/post-task-completion.sh +75 -5
- package/plugins/specweave/hooks/post-write-spec.sh +37 -0
- package/plugins/specweave/lib/hooks/auto-transition.js +1 -1
- package/plugins/specweave/lib/hooks/auto-transition.ts +1 -1
- 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-cache.js +294 -0
- package/plugins/specweave/lib/hooks/sync-living-docs.js +67 -2
- package/plugins/specweave/lib/hooks/sync-us-tasks.js +200 -14
- 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 +1 -1
- package/plugins/specweave/lib/hooks/update-ac-status.ts +1 -1
- package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.d.ts +115 -0
- package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js +345 -0
- package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.d.ts +106 -0
- package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js +220 -0
- package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.d.ts +60 -0
- package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js +192 -0
- package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.d.ts +52 -0
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +276 -0
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.d.ts +163 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +541 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +157 -0
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.js +191 -0
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.js.map +1 -0
- package/plugins/specweave/lib/vendor/generators/spec/task-parser.d.ts +95 -0
- package/plugins/specweave/lib/vendor/generators/spec/task-parser.js +301 -0
- package/plugins/specweave/lib/vendor/generators/spec/task-parser.js.map +1 -0
- package/plugins/specweave/lib/vendor/utils/logger.d.ts +48 -0
- package/plugins/specweave/lib/vendor/utils/logger.js +53 -0
- package/plugins/specweave/lib/vendor/utils/logger.js.map +1 -0
- package/plugins/specweave/lib/vendor/utils/translation.d.ts +187 -0
- package/plugins/specweave/lib/vendor/utils/translation.js +414 -0
- package/plugins/specweave/lib/vendor/utils/translation.js.map +1 -0
- package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -1
- package/plugins/specweave-ado/lib/conflict-resolver.ts +1 -1
- package/plugins/specweave-alternatives/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-backend/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-confluent/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-docs/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-docs-preview/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-figma/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-frontend/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-github/commands/specweave-github-update-user-story.md +1 -1
- package/plugins/specweave-github/hooks/post-task-completion.sh +37 -22
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +1 -1
- package/plugins/specweave-github/lib/enhanced-github-sync.js +1 -1
- package/plugins/specweave-github/lib/enhanced-github-sync.ts +1 -1
- package/plugins/specweave-github/lib/github-spec-content-sync.js +2 -1
- package/plugins/specweave-github/lib/github-spec-content-sync.ts +4 -1
- package/plugins/specweave-github/lib/github-spec-sync.js +1 -1
- package/plugins/specweave-github/lib/github-spec-sync.ts +1 -1
- package/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
- package/plugins/specweave-github/lib/github-sync-bidirectional.ts +10 -1
- package/plugins/specweave-github/lib/progress-comment-builder.js +1 -1
- package/plugins/specweave-github/lib/progress-comment-builder.ts +2 -2
- package/plugins/specweave-github/lib/types.ts +1 -1
- package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +1 -1
- package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
- package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ml/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-payments/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-testing/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-tooling/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ui/.claude-plugin/plugin.json +1 -1
- package/src/templates/.env.example +5 -0
- package/src/templates/config-permissions-guide.md +413 -0
- package/src/templates/config.json.template +68 -0
- package/src/templates/tasks.md.template +180 -201
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -170
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +0 -5442
|
@@ -12,18 +12,74 @@ import fs from 'fs/promises';
|
|
|
12
12
|
import path from 'path';
|
|
13
13
|
import matter from 'gray-matter';
|
|
14
14
|
import { detectSpecIdentifier } from './spec-identifier-detector.js';
|
|
15
|
+
import { consoleLogger } from '../utils/logger.js';
|
|
16
|
+
/**
|
|
17
|
+
* Parse individual User Story file to extract ACs and tasks
|
|
18
|
+
*/
|
|
19
|
+
async function parseUserStoryFile(usFilePath, usId, logger = consoleLogger) {
|
|
20
|
+
try {
|
|
21
|
+
const content = await fs.readFile(usFilePath, 'utf-8');
|
|
22
|
+
const { data: frontmatter } = matter(content);
|
|
23
|
+
// Extract title from frontmatter or heading
|
|
24
|
+
let title = frontmatter.title || '';
|
|
25
|
+
if (!title) {
|
|
26
|
+
const titleMatch = content.match(/^#\s+US-\d+:\s*(.+)$/m);
|
|
27
|
+
title = titleMatch ? titleMatch[1].trim() : '';
|
|
28
|
+
}
|
|
29
|
+
// Remove "Priority: XX" suffix from title if present
|
|
30
|
+
title = title.replace(/\s*\(Priority:.*?\)\s*$/, '').trim();
|
|
31
|
+
const acceptanceCriteria = [];
|
|
32
|
+
// Extract US number from ID (US-001 ā 001, US-1 ā 1)
|
|
33
|
+
const usNumberMatch = usId.match(/US-(\d+)/);
|
|
34
|
+
if (!usNumberMatch) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const usNumber = usNumberMatch[1];
|
|
38
|
+
const usNumberPattern = usNumber.replace(/^0+/, ''); // Remove leading zeros
|
|
39
|
+
// Find acceptance criteria section
|
|
40
|
+
const acSectionMatch = content.match(/##\s+Acceptance Criteria\s*\n([\s\S]*?)(?=\n##|\n---|\z)/);
|
|
41
|
+
if (acSectionMatch) {
|
|
42
|
+
const acSection = acSectionMatch[1];
|
|
43
|
+
// Match ACs: - [x] **AC-US1-01**: Description
|
|
44
|
+
const acRegex = new RegExp(`- \\[([ x])\\] \\*\\*AC-US0*${usNumberPattern}-(\\d+)\\*\\*:\\s*([^\\n]+)`, 'g');
|
|
45
|
+
const acMatches = [...acSection.matchAll(acRegex)];
|
|
46
|
+
for (const acMatch of acMatches) {
|
|
47
|
+
const completed = acMatch[1] === 'x';
|
|
48
|
+
const acNumber = acMatch[2];
|
|
49
|
+
const acDescription = acMatch[3].trim();
|
|
50
|
+
acceptanceCriteria.push({
|
|
51
|
+
id: `AC-US${usNumberPattern}-${acNumber}`, // Use normalized pattern without leading zeros
|
|
52
|
+
description: acDescription,
|
|
53
|
+
completed,
|
|
54
|
+
priority: frontmatter.priority || undefined,
|
|
55
|
+
testable: true, // Assume testable by default
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
id: usId,
|
|
61
|
+
title,
|
|
62
|
+
acceptanceCriteria,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
logger.error(`Failed to parse US file ${usFilePath}:`, error);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
15
70
|
/**
|
|
16
71
|
* Parse spec.md to extract content
|
|
17
72
|
*/
|
|
18
|
-
export async function parseSpecContent(specPath) {
|
|
73
|
+
export async function parseSpecContent(specPath, options = {}) {
|
|
74
|
+
const logger = options.logger ?? consoleLogger;
|
|
19
75
|
try {
|
|
20
76
|
const content = await fs.readFile(specPath, 'utf-8');
|
|
21
77
|
const { data: frontmatter } = matter(content);
|
|
22
78
|
// Extract title (first heading)
|
|
23
79
|
const titleMatch = content.match(/^#\s+(.+)$/m);
|
|
24
80
|
let title = titleMatch ? titleMatch[1].replace(/^SPEC-\d+:\s*/, '') : 'Untitled';
|
|
25
|
-
// Remove ID prefix from title if present
|
|
26
|
-
title = title.replace(/^\[?[A-Z]{2,4}-[A-Z0-9-]+\]
|
|
81
|
+
// Remove ID prefix from title if present (supports [FS-043], FS-043:, FS-043 formats)
|
|
82
|
+
title = title.replace(/^\[?[A-Z]{2,4}-[A-Z0-9-]+\]?:?\s*/, '');
|
|
27
83
|
// Extract project from path
|
|
28
84
|
// .specweave/docs/internal/specs/{project}/{spec-id}.md
|
|
29
85
|
const pathParts = specPath.split(path.sep);
|
|
@@ -69,6 +125,7 @@ export async function parseSpecContent(specPath) {
|
|
|
69
125
|
metadata.adoFeature = adoMatch[1].trim();
|
|
70
126
|
// Parse user stories
|
|
71
127
|
const userStories = [];
|
|
128
|
+
// STRATEGY 1: Try inline format first (backward compatibility)
|
|
72
129
|
// Match user story patterns: **US-001**: Title
|
|
73
130
|
const userStoryRegex = /\*\*US-(\d+)\*\*:\s*(.+)/g;
|
|
74
131
|
const usMatches = [...content.matchAll(userStoryRegex)];
|
|
@@ -101,6 +158,84 @@ export async function parseSpecContent(specPath) {
|
|
|
101
158
|
acceptanceCriteria,
|
|
102
159
|
});
|
|
103
160
|
}
|
|
161
|
+
// STRATEGY 2: If no inline USs found, look for linked US files
|
|
162
|
+
// Match: - [US-001: Title](path/to/file.md)
|
|
163
|
+
if (userStories.length === 0) {
|
|
164
|
+
const linkedUsRegex = /- \[US-(\d+):\s*([^\]]+)\]\(([^)]+)\)/g;
|
|
165
|
+
const linkedUsMatches = [...content.matchAll(linkedUsRegex)];
|
|
166
|
+
for (const linkedMatch of linkedUsMatches) {
|
|
167
|
+
const usNumber = linkedMatch[1];
|
|
168
|
+
const usId = `US-${usNumber}`;
|
|
169
|
+
const usTitle = linkedMatch[2].trim();
|
|
170
|
+
const relativePath = linkedMatch[3];
|
|
171
|
+
// Resolve relative path from spec file location
|
|
172
|
+
const specDir = path.dirname(specPath);
|
|
173
|
+
const usFilePath = path.resolve(specDir, relativePath);
|
|
174
|
+
// Check if file exists
|
|
175
|
+
try {
|
|
176
|
+
await fs.access(usFilePath);
|
|
177
|
+
// Parse the linked US file
|
|
178
|
+
const parsedUs = await parseUserStoryFile(usFilePath, usId, logger);
|
|
179
|
+
if (parsedUs) {
|
|
180
|
+
// Use title from link if US file doesn't have one
|
|
181
|
+
if (!parsedUs.title) {
|
|
182
|
+
parsedUs.title = usTitle;
|
|
183
|
+
}
|
|
184
|
+
userStories.push(parsedUs);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// Fallback: create minimal US without ACs
|
|
188
|
+
userStories.push({
|
|
189
|
+
id: usId,
|
|
190
|
+
title: usTitle,
|
|
191
|
+
acceptanceCriteria: [],
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
// File doesn't exist or can't be read, create minimal US
|
|
197
|
+
userStories.push({
|
|
198
|
+
id: usId,
|
|
199
|
+
title: usTitle,
|
|
200
|
+
acceptanceCriteria: [],
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// STRATEGY 3: If still no USs found, look for heading format: ### US-001: Title
|
|
206
|
+
if (userStories.length === 0) {
|
|
207
|
+
const headingUsRegex = /^###\s+US-(\d+):\s*(.+)$/gm;
|
|
208
|
+
const headingUsMatches = [...content.matchAll(headingUsRegex)];
|
|
209
|
+
for (const headingMatch of headingUsMatches) {
|
|
210
|
+
const usNumber = headingMatch[1];
|
|
211
|
+
const usId = `US-${usNumber}`;
|
|
212
|
+
const usTitle = headingMatch[2].trim();
|
|
213
|
+
// Find acceptance criteria for this user story
|
|
214
|
+
// Support both AC-US001-01 and AC-US1-01 formats
|
|
215
|
+
const usNumberPattern = usNumber.replace(/^0+/, ''); // Remove leading zeros
|
|
216
|
+
const acRegex = new RegExp(`- \\[([ x])\\] \\*\\*AC-US0*${usNumberPattern}-(\\d+)\\*\\*:\\s*([^(\\n]+)(?:\\(([^)]+)\\))?`, 'g');
|
|
217
|
+
const acceptanceCriteria = [];
|
|
218
|
+
const acMatches = [...content.matchAll(acRegex)];
|
|
219
|
+
for (const acMatch of acMatches) {
|
|
220
|
+
const completed = acMatch[1] === 'x';
|
|
221
|
+
const acNumber = acMatch[2];
|
|
222
|
+
const acDescription = acMatch[3].trim();
|
|
223
|
+
const acMetadata = acMatch[4] || '';
|
|
224
|
+
acceptanceCriteria.push({
|
|
225
|
+
id: `AC-US${usNumber}-${acNumber}`,
|
|
226
|
+
description: acDescription,
|
|
227
|
+
completed,
|
|
228
|
+
priority: acMetadata.includes('P1') ? 'P1' : acMetadata.includes('P2') ? 'P2' : undefined,
|
|
229
|
+
testable: acMetadata.includes('testable'),
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
userStories.push({
|
|
233
|
+
id: usId,
|
|
234
|
+
title: usTitle,
|
|
235
|
+
acceptanceCriteria,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
104
239
|
return {
|
|
105
240
|
identifier,
|
|
106
241
|
id: identifier.display, // Legacy field for backward compatibility
|
|
@@ -112,7 +247,7 @@ export async function parseSpecContent(specPath) {
|
|
|
112
247
|
};
|
|
113
248
|
}
|
|
114
249
|
catch (error) {
|
|
115
|
-
|
|
250
|
+
logger.error('Failed to parse spec:', error);
|
|
116
251
|
return null;
|
|
117
252
|
}
|
|
118
253
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-content-sync.js","sourceRoot":"","sources":["../../../src/core/spec-content-sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spec-content-sync.js","sourceRoot":"","sources":["../../../src/core/spec-content-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-task-mapper.d.ts","sourceRoot":"","sources":["../../../src/core/spec-task-mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"spec-task-mapper.d.ts","sourceRoot":"","sources":["../../../src/core/spec-task-mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAgDtE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAmDnE;AAWD;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,SAAS,EAAE,GACvB,sBAAsB,EAAE,CAa1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAyDjC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,GACvB,SAAS,EAAE,CAeb;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,EACxB,YAAY,CAAC,EAAE,IAAI,GAClB,IAAI,EAAE,CASR;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB"}
|
|
@@ -12,17 +12,18 @@ import fs from 'fs/promises';
|
|
|
12
12
|
export async function parseSpec(specPath) {
|
|
13
13
|
const content = await fs.readFile(specPath, 'utf-8');
|
|
14
14
|
const userStories = [];
|
|
15
|
-
// Match user story patterns:
|
|
16
|
-
// **US-001**: As a developer, I want...
|
|
17
|
-
const userStoryRegex = /\*\*US-(\d+)\*\*:\s*(.+)/g;
|
|
15
|
+
// Match user story patterns (T-029: Support E suffix for external IDs):
|
|
16
|
+
// **US-001**: As a developer, I want... OR **US-001E**: External story...
|
|
17
|
+
const userStoryRegex = /\*\*US-(\d+)(E?)\*\*:\s*(.+)/g;
|
|
18
18
|
const matches = [...content.matchAll(userStoryRegex)];
|
|
19
19
|
for (const match of matches) {
|
|
20
20
|
const usNumber = match[1];
|
|
21
|
-
const
|
|
22
|
-
const
|
|
21
|
+
const usESuffix = match[2]; // Will be 'E' or ''
|
|
22
|
+
const usId = `US-${usNumber}${usESuffix}`;
|
|
23
|
+
const title = match[3].trim();
|
|
23
24
|
// Find acceptance criteria for this user story
|
|
24
|
-
// Pattern: - [x] **AC-US1-01**: Description
|
|
25
|
-
const acRegex = new RegExp(`- \\[([ x])\\] \\*\\*AC-US${usNumber}-(\\d+)\\*\\*:\\s*([^(]+)(?:\\(([^)]+)\\))?`, 'g');
|
|
25
|
+
// Pattern: - [x] **AC-US1-01**: Description OR - [x] **AC-US1E-01**: External AC
|
|
26
|
+
const acRegex = new RegExp(`- \\[([ x])\\] \\*\\*AC-US${usNumber}${usESuffix}-(\\d+)\\*\\*:\\s*([^(]+)(?:\\(([^)]+)\\))?`, 'g');
|
|
26
27
|
const acceptanceCriteria = [];
|
|
27
28
|
const acMatches = [...content.matchAll(acRegex)];
|
|
28
29
|
for (const acMatch of acMatches) {
|
|
@@ -31,7 +32,7 @@ export async function parseSpec(specPath) {
|
|
|
31
32
|
const description = acMatch[3].trim();
|
|
32
33
|
const metadata = acMatch[4] || '';
|
|
33
34
|
acceptanceCriteria.push({
|
|
34
|
-
id: `AC-US${usNumber}-${acNumber}`,
|
|
35
|
+
id: `AC-US${usNumber}${usESuffix}-${acNumber}`,
|
|
35
36
|
description,
|
|
36
37
|
priority: metadata.includes('P1') ? 'P1' : metadata.includes('P2') ? 'P2' : undefined,
|
|
37
38
|
testable: metadata.includes('testable'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-task-mapper.js","sourceRoot":"","sources":["../../../src/core/spec-task-mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AA2C7B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,WAAW,GAAgB,EAAE,CAAC;IAEpC,
|
|
1
|
+
{"version":3,"file":"spec-task-mapper.js","sourceRoot":"","sources":["../../../src/core/spec-task-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status Line Validator
|
|
3
|
+
*
|
|
4
|
+
* Detects and reports when status line cache is out of sync with tasks.md.
|
|
5
|
+
*
|
|
6
|
+
* Critical for ensuring status line always reflects reality.
|
|
7
|
+
*/
|
|
8
|
+
import { Logger } from '../utils/logger.js';
|
|
9
|
+
export interface ValidationResult {
|
|
10
|
+
isValid: boolean;
|
|
11
|
+
incrementId: string;
|
|
12
|
+
actual: {
|
|
13
|
+
completedTasks: number;
|
|
14
|
+
totalTasks: number;
|
|
15
|
+
percentage: number;
|
|
16
|
+
};
|
|
17
|
+
frontmatter: {
|
|
18
|
+
completedTasks: number;
|
|
19
|
+
totalTasks: number;
|
|
20
|
+
};
|
|
21
|
+
cache: {
|
|
22
|
+
completedTasks: number;
|
|
23
|
+
totalTasks: number;
|
|
24
|
+
percentage: number;
|
|
25
|
+
lastUpdate: string;
|
|
26
|
+
};
|
|
27
|
+
issues: string[];
|
|
28
|
+
}
|
|
29
|
+
export declare class StatusLineValidator {
|
|
30
|
+
private logger;
|
|
31
|
+
constructor(options?: {
|
|
32
|
+
logger?: Logger;
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Validate status line for a specific increment
|
|
36
|
+
*/
|
|
37
|
+
validateIncrement(projectRoot: string, incrementId: string): Promise<ValidationResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Validate all active increments
|
|
40
|
+
*/
|
|
41
|
+
validateAll(projectRoot: string): Promise<ValidationResult[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Count actual task completions by parsing tasks.md
|
|
44
|
+
*/
|
|
45
|
+
private countActualCompletions;
|
|
46
|
+
/**
|
|
47
|
+
* Parse frontmatter from tasks.md
|
|
48
|
+
*/
|
|
49
|
+
private parseFrontmatter;
|
|
50
|
+
/**
|
|
51
|
+
* Read status line cache
|
|
52
|
+
*/
|
|
53
|
+
private readCache;
|
|
54
|
+
/**
|
|
55
|
+
* Generate validation report
|
|
56
|
+
*/
|
|
57
|
+
generateReport(results: ValidationResult[]): string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* CLI entry point for validation
|
|
61
|
+
*/
|
|
62
|
+
export declare function main(): Promise<void>;
|
|
63
|
+
//# sourceMappingURL=status-line-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-line-validator.d.ts","sourceRoot":"","sources":["../../../src/core/status-line-validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,WAAW,EAAE;QACX,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,EAAE;QACL,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAI7C;;OAEG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC;IA+E5B;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAkCnE;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8C9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;YACW,SAAS;IAqCvB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM;CAqDpD;AAED;;GAEG;AACH,wBAAsB,IAAI,kBAyBzB"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status Line Validator
|
|
3
|
+
*
|
|
4
|
+
* Detects and reports when status line cache is out of sync with tasks.md.
|
|
5
|
+
*
|
|
6
|
+
* Critical for ensuring status line always reflects reality.
|
|
7
|
+
*/
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { consoleLogger } from '../utils/logger.js';
|
|
11
|
+
export class StatusLineValidator {
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
this.logger = options.logger ?? consoleLogger;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validate status line for a specific increment
|
|
17
|
+
*/
|
|
18
|
+
async validateIncrement(projectRoot, incrementId) {
|
|
19
|
+
const issues = [];
|
|
20
|
+
// Read tasks.md
|
|
21
|
+
const tasksPath = path.join(projectRoot, '.specweave', 'increments', incrementId, 'tasks.md');
|
|
22
|
+
if (!await fs.pathExists(tasksPath)) {
|
|
23
|
+
throw new Error(`tasks.md not found: ${tasksPath}`);
|
|
24
|
+
}
|
|
25
|
+
const tasksContent = await fs.readFile(tasksPath, 'utf-8');
|
|
26
|
+
// Count actual task completions
|
|
27
|
+
const actual = this.countActualCompletions(tasksContent);
|
|
28
|
+
// Parse frontmatter
|
|
29
|
+
const frontmatter = this.parseFrontmatter(tasksContent);
|
|
30
|
+
// Read status line cache
|
|
31
|
+
const cachePath = path.join(projectRoot, '.specweave', 'state', 'status-line.json');
|
|
32
|
+
const cache = await this.readCache(cachePath, incrementId);
|
|
33
|
+
// Validate consistency
|
|
34
|
+
if (actual.completedTasks !== frontmatter.completedTasks) {
|
|
35
|
+
issues.push(`Frontmatter desync: actual=${actual.completedTasks}, frontmatter=${frontmatter.completedTasks}`);
|
|
36
|
+
}
|
|
37
|
+
if (actual.totalTasks !== frontmatter.totalTasks) {
|
|
38
|
+
issues.push(`Total tasks mismatch: actual=${actual.totalTasks}, frontmatter=${frontmatter.totalTasks}`);
|
|
39
|
+
}
|
|
40
|
+
// Only validate cache if this is the current increment
|
|
41
|
+
// Status line cache only stores ONE current increment at a time
|
|
42
|
+
const isCurrentIncrement = cache.completedTasks > 0 || cache.totalTasks > 0;
|
|
43
|
+
if (isCurrentIncrement) {
|
|
44
|
+
if (actual.completedTasks !== cache.completedTasks) {
|
|
45
|
+
issues.push(`Cache desync: actual=${actual.completedTasks}, cache=${cache.completedTasks}`);
|
|
46
|
+
}
|
|
47
|
+
if (actual.percentage !== cache.percentage) {
|
|
48
|
+
issues.push(`Percentage desync: actual=${actual.percentage}%, cache=${cache.percentage}%`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Check cache staleness (> 24 hours old) - only for current increment
|
|
52
|
+
if (isCurrentIncrement) {
|
|
53
|
+
const cacheAge = Date.now() - new Date(cache.lastUpdate).getTime();
|
|
54
|
+
const hoursSinceUpdate = cacheAge / (1000 * 60 * 60);
|
|
55
|
+
if (hoursSinceUpdate > 24) {
|
|
56
|
+
issues.push(`Cache stale: last updated ${Math.round(hoursSinceUpdate)} hours ago`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
isValid: issues.length === 0,
|
|
61
|
+
incrementId,
|
|
62
|
+
actual,
|
|
63
|
+
frontmatter,
|
|
64
|
+
cache,
|
|
65
|
+
issues
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate all active increments
|
|
70
|
+
*/
|
|
71
|
+
async validateAll(projectRoot) {
|
|
72
|
+
const incrementsDir = path.join(projectRoot, '.specweave', 'increments');
|
|
73
|
+
if (!await fs.pathExists(incrementsDir)) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const results = [];
|
|
77
|
+
const entries = await fs.readdir(incrementsDir, { withFileTypes: true });
|
|
78
|
+
for (const entry of entries) {
|
|
79
|
+
if (!entry.isDirectory())
|
|
80
|
+
continue;
|
|
81
|
+
const specPath = path.join(incrementsDir, entry.name, 'spec.md');
|
|
82
|
+
if (!await fs.pathExists(specPath))
|
|
83
|
+
continue;
|
|
84
|
+
const specContent = await fs.readFile(specPath, 'utf-8');
|
|
85
|
+
const statusMatch = specContent.match(/^status:\s*(\w+)/m);
|
|
86
|
+
const status = statusMatch ? statusMatch[1] : null;
|
|
87
|
+
// Only validate active/planning increments
|
|
88
|
+
if (status === 'active' || status === 'planning') {
|
|
89
|
+
try {
|
|
90
|
+
const result = await this.validateIncrement(projectRoot, entry.name);
|
|
91
|
+
results.push(result);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
this.logger.error(`Failed to validate ${entry.name}:`, error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return results;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Count actual task completions by parsing tasks.md
|
|
102
|
+
*/
|
|
103
|
+
countActualCompletions(content) {
|
|
104
|
+
const lines = content.split('\n');
|
|
105
|
+
// Count total tasks (### T- headings)
|
|
106
|
+
const totalTasks = lines.filter(line => /^###\s+T-\d+/.test(line)).length;
|
|
107
|
+
// Count completed tasks (multiple formats)
|
|
108
|
+
let completedTasks = 0;
|
|
109
|
+
for (let i = 0; i < lines.length; i++) {
|
|
110
|
+
const line = lines[i];
|
|
111
|
+
// Check for task heading
|
|
112
|
+
if (/^###\s+T-\d+/.test(line)) {
|
|
113
|
+
// Look ahead for status line (within next 10 lines)
|
|
114
|
+
for (let j = i + 1; j < Math.min(i + 10, lines.length); j++) {
|
|
115
|
+
const statusLine = lines[j];
|
|
116
|
+
// Format 1: **Status**: [x] completed
|
|
117
|
+
if (/\*\*Status\*\*:\s*\[x\]\s*completed/i.test(statusLine)) {
|
|
118
|
+
completedTasks++;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
// Format 2: ā
COMPLETE in task title
|
|
122
|
+
if (line.includes('ā
COMPLETE')) {
|
|
123
|
+
completedTasks++;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
// Stop at next task or section
|
|
127
|
+
if (/^###\s+T-\d+/.test(statusLine) || /^##\s+/.test(statusLine)) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const percentage = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0;
|
|
134
|
+
return { completedTasks, totalTasks, percentage };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Parse frontmatter from tasks.md
|
|
138
|
+
*/
|
|
139
|
+
parseFrontmatter(content) {
|
|
140
|
+
const completedMatch = content.match(/^completed:\s*(\d+)/m);
|
|
141
|
+
const totalMatch = content.match(/^total_tasks:\s*(\d+)/m);
|
|
142
|
+
return {
|
|
143
|
+
completedTasks: completedMatch ? parseInt(completedMatch[1], 10) : 0,
|
|
144
|
+
totalTasks: totalMatch ? parseInt(totalMatch[1], 10) : 0
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Read status line cache
|
|
149
|
+
*/
|
|
150
|
+
async readCache(cachePath, incrementId) {
|
|
151
|
+
if (!await fs.pathExists(cachePath)) {
|
|
152
|
+
return {
|
|
153
|
+
completedTasks: 0,
|
|
154
|
+
totalTasks: 0,
|
|
155
|
+
percentage: 0,
|
|
156
|
+
lastUpdate: new Date(0).toISOString()
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const cache = await fs.readJson(cachePath);
|
|
160
|
+
if (!cache.current || cache.current.id !== incrementId) {
|
|
161
|
+
return {
|
|
162
|
+
completedTasks: 0,
|
|
163
|
+
totalTasks: 0,
|
|
164
|
+
percentage: 0,
|
|
165
|
+
lastUpdate: cache.lastUpdate || new Date(0).toISOString()
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
completedTasks: cache.current.completed || 0,
|
|
170
|
+
totalTasks: cache.current.total || 0,
|
|
171
|
+
percentage: cache.current.percentage || 0,
|
|
172
|
+
lastUpdate: cache.lastUpdate || new Date(0).toISOString()
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Generate validation report
|
|
177
|
+
*/
|
|
178
|
+
generateReport(results) {
|
|
179
|
+
const lines = [];
|
|
180
|
+
lines.push('# Status Line Validation Report');
|
|
181
|
+
lines.push('');
|
|
182
|
+
lines.push(`Generated: ${new Date().toISOString()}`);
|
|
183
|
+
lines.push('');
|
|
184
|
+
const validCount = results.filter(r => r.isValid).length;
|
|
185
|
+
const invalidCount = results.filter(r => !r.isValid).length;
|
|
186
|
+
lines.push(`## Summary`);
|
|
187
|
+
lines.push('');
|
|
188
|
+
lines.push(`- Total increments checked: ${results.length}`);
|
|
189
|
+
lines.push(`- Valid: ${validCount}`);
|
|
190
|
+
lines.push(`- Invalid: ${invalidCount}`);
|
|
191
|
+
lines.push('');
|
|
192
|
+
if (invalidCount > 0) {
|
|
193
|
+
lines.push('## Issues Found');
|
|
194
|
+
lines.push('');
|
|
195
|
+
for (const result of results) {
|
|
196
|
+
if (!result.isValid) {
|
|
197
|
+
lines.push(`### ${result.incrementId}`);
|
|
198
|
+
lines.push('');
|
|
199
|
+
lines.push('| Metric | Actual | Frontmatter | Cache |');
|
|
200
|
+
lines.push('|--------|--------|-------------|-------|');
|
|
201
|
+
lines.push(`| Completed | ${result.actual.completedTasks} | ${result.frontmatter.completedTasks} | ${result.cache.completedTasks} |`);
|
|
202
|
+
lines.push(`| Total | ${result.actual.totalTasks} | ${result.frontmatter.totalTasks} | ${result.cache.totalTasks} |`);
|
|
203
|
+
lines.push(`| Percentage | ${result.actual.percentage}% | - | ${result.cache.percentage}% |`);
|
|
204
|
+
lines.push('');
|
|
205
|
+
lines.push('**Issues:**');
|
|
206
|
+
for (const issue of result.issues) {
|
|
207
|
+
lines.push(`- ${issue}`);
|
|
208
|
+
}
|
|
209
|
+
lines.push('');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
lines.push('## All Status Lines Valid ā
');
|
|
215
|
+
lines.push('');
|
|
216
|
+
lines.push('No desynchronization detected.');
|
|
217
|
+
}
|
|
218
|
+
return lines.join('\n');
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* CLI entry point for validation
|
|
223
|
+
*/
|
|
224
|
+
export async function main() {
|
|
225
|
+
const validator = new StatusLineValidator();
|
|
226
|
+
const projectRoot = process.cwd();
|
|
227
|
+
console.log('š Validating status line synchronization...\n');
|
|
228
|
+
const results = await validator.validateAll(projectRoot);
|
|
229
|
+
if (results.length === 0) {
|
|
230
|
+
console.log('ā¹ļø No active increments found.');
|
|
231
|
+
process.exit(0);
|
|
232
|
+
}
|
|
233
|
+
const report = validator.generateReport(results);
|
|
234
|
+
console.log(report);
|
|
235
|
+
const hasIssues = results.some(r => !r.isValid);
|
|
236
|
+
if (hasIssues) {
|
|
237
|
+
console.log('\nā Validation failed! Status line is out of sync.');
|
|
238
|
+
console.log('Run: bash plugins/specweave/hooks/lib/update-status-line.sh');
|
|
239
|
+
process.exit(1);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
console.log('\nā
All status lines valid!');
|
|
243
|
+
process.exit(0);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Run if executed directly
|
|
247
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
248
|
+
main().catch(error => {
|
|
249
|
+
console.error('Fatal error:', error);
|
|
250
|
+
process.exit(1);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=status-line-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-line-validator.js","sourceRoot":"","sources":["../../../src/core/status-line-validator.ts"],"names":[],"mappings":"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"}
|