specweave 0.33.5 → 0.34.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 +13 -13
- package/.claude-plugin/marketplace.json +26 -37
- package/CLAUDE.md +427 -70
- package/README.md +34 -31
- package/bin/fix-marketplace-errors.sh +1 -1
- package/bin/install-commands.sh +2 -2
- package/bin/specweave.js +58 -1
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +5 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +14 -4
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -1
- package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +1 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/completion-calculator.js +2 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -1
- package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/duplicate-detector.js +20 -6
- package/dist/plugins/specweave-github/lib/duplicate-detector.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +9 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js +31 -18
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +7 -0
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +47 -11
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js +39 -13
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-issue-updater.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-issue-updater.js +15 -3
- package/dist/plugins/specweave-github/lib/github-issue-updater.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts +7 -0
- package/dist/plugins/specweave-github/lib/github-spec-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-sync.js +17 -4
- package/dist/plugins/specweave-github/lib/github-spec-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +13 -3
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-increment-changes.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js +14 -4
- package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js.map +1 -1
- package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/increment-issue-builder.js +24 -8
- package/dist/plugins/specweave-github/lib/increment-issue-builder.js.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-content-builder.js +21 -18
- package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +3 -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 +20 -19
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
- package/dist/src/cli/cleanup-zombies.js +34 -18
- package/dist/src/cli/cleanup-zombies.js.map +1 -1
- package/dist/src/cli/commands/discrepancies.js +6 -6
- package/dist/src/cli/commands/discrepancies.js.map +1 -1
- package/dist/src/cli/commands/docs.js +1 -1
- package/dist/src/cli/commands/docs.js.map +1 -1
- package/dist/src/cli/commands/import-docs.d.ts +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/import-external.d.ts +1 -1
- package/dist/src/cli/commands/import-external.js +1 -1
- package/dist/src/cli/commands/init-multiproject.d.ts +1 -1
- package/dist/src/cli/commands/init-multiproject.js +3 -3
- package/dist/src/cli/commands/init-multiproject.js.map +1 -1
- package/dist/src/cli/commands/init.js +2 -2
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/living-docs.d.ts +1 -0
- package/dist/src/cli/commands/living-docs.d.ts.map +1 -1
- package/dist/src/cli/commands/living-docs.js +18 -2
- package/dist/src/cli/commands/living-docs.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
- package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
- package/dist/src/cli/commands/next-command.d.ts +1 -1
- package/dist/src/cli/commands/next-command.js +9 -9
- package/dist/src/cli/commands/next-command.js.map +1 -1
- package/dist/src/cli/commands/notifications.js +3 -3
- package/dist/src/cli/commands/notifications.js.map +1 -1
- package/dist/src/cli/commands/plan/increment-detector.js +2 -2
- package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
- package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +2 -2
- package/dist/src/cli/commands/plan/plan-orchestrator.js +2 -2
- package/dist/src/cli/commands/plan/plan-validator.js +2 -2
- package/dist/src/cli/commands/plan/plan-validator.js.map +1 -1
- package/dist/src/cli/commands/plan/types.d.ts +1 -1
- package/dist/src/cli/commands/plan/types.js +1 -1
- package/dist/src/cli/commands/plan-command.d.ts +3 -3
- package/dist/src/cli/commands/plan-command.js +12 -12
- package/dist/src/cli/commands/plan-command.js.map +1 -1
- package/dist/src/cli/commands/project.d.ts +77 -0
- package/dist/src/cli/commands/project.d.ts.map +1 -0
- package/dist/src/cli/commands/project.js +526 -0
- package/dist/src/cli/commands/project.js.map +1 -0
- package/dist/src/cli/commands/save.d.ts +49 -0
- package/dist/src/cli/commands/save.d.ts.map +1 -0
- package/dist/src/cli/commands/save.js +583 -0
- package/dist/src/cli/commands/save.js.map +1 -0
- package/dist/src/cli/commands/sync-spec-commits.js +15 -6
- package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-content.js +15 -6
- package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
- package/dist/src/cli/helpers/init/ado-repo-cloning.js +2 -2
- package/dist/src/cli/helpers/init/ado-repo-cloning.js.map +1 -1
- package/dist/src/cli/helpers/init/bitbucket-repo-cloning.d.ts +1 -1
- package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js +3 -3
- package/dist/src/cli/helpers/init/bitbucket-repo-cloning.js.map +1 -1
- package/dist/src/cli/helpers/init/brownfield-analysis.js +18 -18
- package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -1
- package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/directory-structure.js +3 -0
- package/dist/src/cli/helpers/init/directory-structure.js.map +1 -1
- package/dist/src/cli/helpers/init/external-import.js +18 -18
- package/dist/src/cli/helpers/init/external-import.js.map +1 -1
- package/dist/src/cli/helpers/init/github-repo-cloning.d.ts +1 -1
- package/dist/src/cli/helpers/init/github-repo-cloning.js +3 -3
- package/dist/src/cli/helpers/init/github-repo-cloning.js.map +1 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.js +12 -12
- package/dist/src/cli/helpers/init/living-docs-preflight.js +5 -5
- package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
- package/dist/src/cli/helpers/init/next-steps.js +9 -9
- package/dist/src/cli/helpers/init/next-steps.js.map +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.js +3 -3
- package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
- package/dist/src/cli/helpers/init/translation-config.js +9 -9
- package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
- package/dist/src/cli/helpers/init/types.d.ts +1 -1
- package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.js +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +2 -2
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.js +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
- package/dist/src/cli/update-status-line.js +1 -1
- package/dist/src/cli/update-status-line.js.map +1 -1
- package/dist/src/cli/workers/brownfield-worker.js +1 -1
- package/dist/src/cli/workers/brownfield-worker.js.map +1 -1
- package/dist/src/cli/workers/import-worker.js +1 -1
- package/dist/src/cli/workers/import-worker.js.map +1 -1
- package/dist/src/core/background/brownfield-launcher.js +4 -4
- package/dist/src/core/background/brownfield-launcher.js.map +1 -1
- package/dist/src/core/background/index.d.ts +3 -3
- package/dist/src/core/background/index.js +3 -3
- package/dist/src/core/background/job-launcher.d.ts +1 -1
- package/dist/src/core/background/job-launcher.js +3 -3
- package/dist/src/core/background/job-launcher.js.map +1 -1
- package/dist/src/core/brownfield/importer.js +1 -1
- package/dist/src/core/brownfield/importer.js.map +1 -1
- package/dist/src/core/config/config-manager.d.ts +7 -1
- package/dist/src/core/config/config-manager.d.ts.map +1 -1
- package/dist/src/core/config/config-manager.js +24 -2
- package/dist/src/core/config/config-manager.js.map +1 -1
- package/dist/src/core/config/single-project-migrator.d.ts +110 -0
- package/dist/src/core/config/single-project-migrator.d.ts.map +1 -0
- package/dist/src/core/config/single-project-migrator.js +179 -0
- package/dist/src/core/config/single-project-migrator.js.map +1 -0
- package/dist/src/core/config/types.d.ts +3 -3
- package/dist/src/core/credentials/credentials-manager.d.ts +25 -4
- package/dist/src/core/credentials/credentials-manager.d.ts.map +1 -1
- package/dist/src/core/credentials/credentials-manager.js +54 -15
- package/dist/src/core/credentials/credentials-manager.js.map +1 -1
- package/dist/src/core/deduplication/command-deduplicator.d.ts +4 -4
- package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -1
- package/dist/src/core/deduplication/command-deduplicator.js +3 -3
- package/dist/src/core/external-tools/external-items-counter.d.ts +4 -4
- package/dist/src/core/external-tools/external-items-counter.js +4 -4
- package/dist/src/core/external-tools/external-items-display.js +4 -4
- package/dist/src/core/external-tools/external-items-display.js.map +1 -1
- package/dist/src/core/increment/completion-validator.js +3 -3
- package/dist/src/core/increment/completion-validator.js.map +1 -1
- package/dist/src/core/increment/conflict-resolver.js +2 -2
- package/dist/src/core/increment/conflict-resolver.js.map +1 -1
- package/dist/src/core/increment/desync-detector.d.ts +1 -1
- package/dist/src/core/increment/desync-detector.js +3 -3
- package/dist/src/core/increment/desync-detector.js.map +1 -1
- package/dist/src/core/increment/discipline-checker.js +2 -2
- package/dist/src/core/increment/discipline-checker.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +4 -4
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +53 -2
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +78 -7
- package/dist/src/core/increment/increment-utils.js.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +6 -6
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/increment/metadata-validator.js +1 -1
- package/dist/src/core/increment/metadata-validator.js.map +1 -1
- package/dist/src/core/increment/recent-work-scanner.js +2 -2
- package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
- package/dist/src/core/increment/spec-sync-manager.js +1 -1
- package/dist/src/core/increment/spec-sync-manager.js.map +1 -1
- package/dist/src/core/increment/status-auto-transition.d.ts +68 -1
- package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -1
- package/dist/src/core/increment/status-auto-transition.js +141 -1
- package/dist/src/core/increment/status-auto-transition.js.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.d.ts +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.js +3 -3
- package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.d.ts +12 -0
- package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.js +33 -0
- package/dist/src/core/living-docs/cross-project-sync.js.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.d.ts +3 -3
- package/dist/src/core/living-docs/feature-archiver.js +3 -3
- package/dist/src/core/living-docs/feature-consistency-validator.js +1 -1
- package/dist/src/core/living-docs/feature-consistency-validator.js.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.d.ts +5 -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 +19 -1
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
- package/dist/src/core/living-docs/governance/standards-generator.js +1 -1
- package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts +5 -0
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js +22 -2
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +1 -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 +77 -8
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/project-detector.d.ts +9 -0
- package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
- package/dist/src/core/living-docs/project-detector.js +38 -3
- package/dist/src/core/living-docs/project-detector.js.map +1 -1
- package/dist/src/core/living-docs/suggestions-generator.js +1 -1
- package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
- package/dist/src/core/notifications/command-integration.js +1 -1
- package/dist/src/core/notifications/command-integration.js.map +1 -1
- package/dist/src/core/project/adapters/ado-project-adapter.d.ts +73 -0
- package/dist/src/core/project/adapters/ado-project-adapter.d.ts.map +1 -0
- package/dist/src/core/project/adapters/ado-project-adapter.js +304 -0
- package/dist/src/core/project/adapters/ado-project-adapter.js.map +1 -0
- package/dist/src/core/project/adapters/github-project-adapter.d.ts +76 -0
- package/dist/src/core/project/adapters/github-project-adapter.d.ts.map +1 -0
- package/dist/src/core/project/adapters/github-project-adapter.js +315 -0
- package/dist/src/core/project/adapters/github-project-adapter.js.map +1 -0
- package/dist/src/core/project/adapters/jira-project-adapter.d.ts +69 -0
- package/dist/src/core/project/adapters/jira-project-adapter.d.ts.map +1 -0
- package/dist/src/core/project/adapters/jira-project-adapter.js +241 -0
- package/dist/src/core/project/adapters/jira-project-adapter.js.map +1 -0
- package/dist/src/core/project/project-event-bus.d.ts +72 -0
- package/dist/src/core/project/project-event-bus.d.ts.map +1 -0
- package/dist/src/core/project/project-event-bus.js +150 -0
- package/dist/src/core/project/project-event-bus.js.map +1 -0
- package/dist/src/core/project/project-manager.d.ts +0 -22
- package/dist/src/core/project/project-manager.d.ts.map +1 -1
- package/dist/src/core/project/project-manager.js +5 -275
- package/dist/src/core/project/project-manager.js.map +1 -1
- package/dist/src/core/project/project-registry.d.ts +93 -0
- package/dist/src/core/project/project-registry.d.ts.map +1 -0
- package/dist/src/core/project/project-registry.js +448 -0
- package/dist/src/core/project/project-registry.js.map +1 -0
- package/dist/src/core/project/project-resolution.d.ts +229 -0
- package/dist/src/core/project/project-resolution.d.ts.map +1 -0
- package/dist/src/core/project/project-resolution.js +633 -0
- package/dist/src/core/project/project-resolution.js.map +1 -0
- package/dist/src/core/project/types/project-types.d.ts +214 -0
- package/dist/src/core/project/types/project-types.d.ts.map +1 -0
- package/dist/src/core/project/types/project-types.js +9 -0
- package/dist/src/core/project/types/project-types.js.map +1 -0
- package/dist/src/core/repo-structure/setup-summary.js +2 -2
- package/dist/src/core/repo-structure/setup-summary.js.map +1 -1
- package/dist/src/core/specs/spec-identifier-detector.d.ts.map +1 -1
- package/dist/src/core/specs/spec-identifier-detector.js +8 -5
- package/dist/src/core/specs/spec-identifier-detector.js.map +1 -1
- package/dist/src/core/status-line/status-line-updater.js +1 -1
- package/dist/src/core/status-line/status-line-updater.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +3 -3
- package/dist/src/core/types/increment-metadata.js +3 -3
- package/dist/src/core/types/increment-metadata.js.map +1 -1
- package/dist/src/core/types/sync-profile.d.ts +1 -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/validators/ac-presence-validator.d.ts +4 -4
- package/dist/src/core/validators/ac-presence-validator.js +3 -3
- package/dist/src/core/validators/ac-presence-validator.js.map +1 -1
- package/dist/src/core/workflow/backlog-scanner.d.ts +5 -0
- package/dist/src/core/workflow/backlog-scanner.d.ts.map +1 -1
- package/dist/src/core/workflow/backlog-scanner.js +14 -2
- package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
- package/dist/src/core/workflow/phase-detector.js +17 -17
- package/dist/src/core/workflow/phase-detector.js.map +1 -1
- package/dist/src/core/workflow/types.d.ts +1 -1
- package/dist/src/core/workflow/types.d.ts.map +1 -1
- package/dist/src/core/workflow/workflow-orchestrator.d.ts +1 -1
- package/dist/src/core/workflow/workflow-orchestrator.js +9 -9
- package/dist/src/core/workflow/workflow-orchestrator.js.map +1 -1
- package/dist/src/hooks/scheduler-startup.js +1 -1
- package/dist/src/hooks/scheduler-startup.js.map +1 -1
- package/dist/src/importers/item-converter.js +1 -1
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +17 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.js +20 -12
- package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts +17 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.js +13 -5
- package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
- package/dist/src/living-docs/enterprise-analyzer.js +1 -1
- package/dist/src/living-docs/enterprise-analyzer.js.map +1 -1
- package/dist/src/sync/ado-reconciler.d.ts +5 -0
- package/dist/src/sync/ado-reconciler.d.ts.map +1 -1
- package/dist/src/sync/ado-reconciler.js +16 -4
- package/dist/src/sync/ado-reconciler.js.map +1 -1
- package/dist/src/sync/jira-reconciler.d.ts +3 -0
- package/dist/src/sync/jira-reconciler.d.ts.map +1 -1
- package/dist/src/sync/jira-reconciler.js +12 -5
- package/dist/src/sync/jira-reconciler.js.map +1 -1
- package/dist/src/types/dashboard-cache.d.ts +4 -2
- package/dist/src/types/dashboard-cache.d.ts.map +1 -1
- package/dist/src/types/dashboard-cache.js +1 -1
- package/dist/src/types/dashboard-cache.js.map +1 -1
- package/dist/src/utils/ac-embedder.d.ts +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.js +2 -2
- package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
- package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
- package/dist/src/utils/env-multi-project-parser.d.ts +17 -0
- package/dist/src/utils/env-multi-project-parser.d.ts.map +1 -1
- package/dist/src/utils/env-multi-project-parser.js +26 -1
- package/dist/src/utils/env-multi-project-parser.js.map +1 -1
- package/dist/src/utils/external-tool-drift-detector.d.ts +2 -2
- package/dist/src/utils/external-tool-drift-detector.js +6 -6
- package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
- package/dist/src/utils/notification-constants.js +2 -2
- package/dist/src/utils/notification-constants.js.map +1 -1
- package/dist/src/utils/notification-manager.d.ts +12 -3
- package/dist/src/utils/notification-manager.d.ts.map +1 -1
- package/dist/src/utils/notification-manager.js +51 -49
- package/dist/src/utils/notification-manager.js.map +1 -1
- package/dist/src/utils/platform-utils.d.ts +12 -3
- package/dist/src/utils/platform-utils.d.ts.map +1 -1
- package/dist/src/utils/platform-utils.js +35 -16
- package/dist/src/utils/platform-utils.js.map +1 -1
- package/dist/src/utils/plugin-validator.js +11 -11
- package/dist/src/utils/plugin-validator.js.map +1 -1
- package/dist/src/validators/ac-coverage-validator.d.ts +1 -1
- package/dist/src/validators/ac-coverage-validator.js +1 -1
- package/package.json +3 -1
- package/plugins/PLUGINS-INDEX.md +1 -2
- package/plugins/specweave/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave/COMMANDS.md +49 -49
- package/plugins/specweave/agents/pm/AGENT.md +18 -18
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +7 -7
- package/plugins/specweave/agents/translator/AGENT.md +2 -2
- package/plugins/specweave/commands/{specweave-abandon.md → abandon.md} +20 -20
- package/plugins/specweave/commands/{specweave-analyze-standards.sh → analyze-standards.sh} +4 -4
- package/plugins/specweave/commands/{specweave-archive-features.md → archive-features.md} +7 -7
- package/plugins/specweave/commands/{specweave-archive.md → archive.md} +36 -36
- package/plugins/specweave/commands/{specweave-backlog.md → backlog.md} +24 -24
- package/plugins/specweave/commands/{specweave-check-hooks.md → check-hooks.md} +10 -10
- package/plugins/specweave/commands/{specweave-check-tests.md → check-tests.md} +14 -14
- package/plugins/specweave/commands/{specweave-costs.md → costs.md} +8 -8
- package/plugins/specweave/commands/{specweave-discrepancies.md → discrepancies.md} +15 -15
- package/plugins/specweave/commands/{specweave-discrepancy-to-increment.md → discrepancy-to-increment.md} +10 -10
- package/plugins/specweave/commands/{specweave-do.md → do.md} +37 -39
- package/plugins/specweave/commands/{specweave-done.md → done.md} +23 -23
- package/plugins/specweave/commands/{specweave-embed-acs.md → embed-acs.md} +21 -21
- package/plugins/specweave/commands/{specweave-external.md → external.md} +11 -11
- package/plugins/specweave/commands/{specweave-fix-duplicates.md → fix-duplicates.md} +16 -16
- package/plugins/specweave/commands/{specweave-import-docs.md → import-docs.md} +7 -7
- package/plugins/specweave/commands/{specweave-import-external.md → import-external.md} +9 -9
- package/plugins/specweave/commands/{specweave-increment.md → increment.md} +17 -17
- package/plugins/specweave/commands/{specweave-jobs.md → jobs.md} +28 -28
- package/plugins/specweave/commands/{specweave-judge-llm.md → judge-llm.md} +19 -19
- package/plugins/specweave/commands/{specweave-living-docs.md → living-docs.md} +72 -29
- package/plugins/specweave/commands/migrate-config.md +2 -2
- package/plugins/specweave/commands/{specweave-next.md → next.md} +20 -20
- package/plugins/specweave/commands/{specweave-notifications.md → notifications.md} +11 -11
- package/plugins/specweave/commands/{specweave-organize-docs.md → organize-docs.md} +9 -9
- package/plugins/specweave/commands/{specweave-pause.md → pause.md} +19 -19
- package/plugins/specweave/commands/{specweave-plan.md → plan.md} +19 -19
- package/plugins/specweave/commands/{specweave-progress.md → progress.md} +6 -6
- package/plugins/specweave/commands/{specweave-qa.md → qa.md} +15 -15
- package/plugins/specweave/commands/{specweave-reopen.md → reopen.md} +41 -41
- package/plugins/specweave/commands/{specweave-restore-feature.md → restore-feature.md} +6 -6
- package/plugins/specweave/commands/{specweave-restore.md → restore.md} +26 -26
- package/plugins/specweave/commands/{specweave-resume.md → resume.md} +33 -33
- package/plugins/specweave/commands/revert-wip-limit.md +4 -4
- package/plugins/specweave/commands/{specweave-save.md → save.md} +34 -34
- package/plugins/specweave/commands/{specweave-status.md → status.md} +29 -29
- package/plugins/specweave/commands/{specweave.md → sw.md} +28 -28
- package/plugins/specweave/commands/{specweave-sync-acs.md → sync-acs.md} +12 -12
- package/plugins/specweave/commands/sync-diagnostics.md +5 -5
- package/plugins/specweave/commands/{specweave-sync-docs.md → sync-docs.md} +7 -7
- package/plugins/specweave/commands/{specweave-sync-logs.md → sync-logs.md} +14 -14
- package/plugins/specweave/commands/{specweave-sync-monitor.md → sync-monitor.md} +5 -5
- package/plugins/specweave/commands/{specweave-sync-progress.md → sync-progress.md} +38 -38
- package/plugins/specweave/commands/{specweave-sync-specs.md → sync-specs.md} +17 -17
- package/plugins/specweave/commands/{specweave-sync-status.md → sync-status.md} +16 -16
- package/plugins/specweave/commands/{specweave-sync-tasks.md → sync-tasks.md} +13 -13
- package/plugins/specweave/commands/{specweave-tdd-cycle.md → tdd-cycle.md} +1 -1
- package/plugins/specweave/commands/{specweave-tdd-green.md → tdd-green.md} +1 -1
- package/plugins/specweave/commands/{specweave-tdd-red.md → tdd-red.md} +1 -1
- package/plugins/specweave/commands/{specweave-tdd-refactor.md → tdd-refactor.md} +1 -1
- package/plugins/specweave/commands/{specweave-translate.md → translate.md} +17 -17
- package/plugins/specweave/commands/{specweave-update-scope.md → update-scope.md} +8 -8
- package/plugins/specweave/commands/{specweave-update-status.md → update-status.md} +6 -6
- package/plugins/specweave/commands/{specweave-validate-features.md → validate-features.md} +8 -8
- package/plugins/specweave/commands/{specweave-validate.md → validate.md} +20 -20
- package/plugins/specweave/commands/{specweave-workflow.md → workflow.md} +40 -40
- package/plugins/specweave/hooks/README.md +5 -5
- package/plugins/specweave/hooks/config-env-separator.sh +99 -0
- package/plugins/specweave/hooks/github-metadata-guard.sh +73 -0
- package/plugins/specweave/hooks/hooks.json +32 -2
- package/plugins/specweave/hooks/post-first-increment.sh +2 -2
- package/plugins/specweave/hooks/post-increment-completion.sh +7 -7
- package/plugins/specweave/hooks/post-increment-planning.sh +11 -11
- package/plugins/specweave/hooks/post-increment-status-change.sh +1 -1
- package/plugins/specweave/hooks/post-metadata-change.sh +1 -1
- package/plugins/specweave/hooks/post-spec-update.sh +2 -2
- package/plugins/specweave/hooks/post-task-completion.sh +2 -2
- package/plugins/specweave/hooks/pre-increment-start.sh +7 -7
- package/plugins/specweave/hooks/project-folder-guard.sh +272 -0
- package/plugins/specweave/hooks/spec-project-validator.sh +68 -47
- package/plugins/specweave/hooks/user-prompt-submit.sh +27 -27
- package/plugins/specweave/hooks/v2/guards/completion-guard.sh +2 -2
- package/plugins/specweave/hooks/v2/guards/metadata-json-guard.sh +1 -1
- package/plugins/specweave/hooks/v2/handlers/github-sync-handler.sh +1 -1
- package/plugins/specweave/lib/hooks/consolidated-sync.js +35 -5
- package/plugins/specweave/lib/hooks/invoke-translator-skill.js +2 -2
- package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +2 -2
- package/plugins/specweave/lib/hooks/prepare-reflection-context.js +1 -1
- package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +1 -1
- package/plugins/specweave/lib/hooks/sync-living-docs.js +5 -5
- package/plugins/specweave/lib/hooks/translate-file.d.ts +1 -1
- package/plugins/specweave/lib/hooks/translate-file.js +2 -2
- package/plugins/specweave/lib/hooks/translate-file.ts +3 -3
- package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +1 -1
- package/plugins/specweave/lib/hooks/us-completion-orchestrator.ts +2 -2
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +6 -6
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
- package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.d.ts +113 -0
- package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js +318 -0
- package/plugins/specweave/lib/vendor/core/increment/status-auto-transition.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +3 -3
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.js +3 -3
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.js.map +1 -1
- package/plugins/specweave/scripts/README.md +9 -9
- package/plugins/specweave/scripts/cleanup-state.sh +1 -1
- package/plugins/specweave/scripts/jobs.js +2 -2
- package/plugins/specweave/scripts/progress.js +6 -6
- package/plugins/specweave/scripts/read-costs.sh +3 -3
- package/plugins/specweave/scripts/read-jobs.sh +8 -8
- package/plugins/specweave/scripts/read-progress.sh +17 -10
- package/plugins/specweave/scripts/read-status.sh +7 -7
- package/plugins/specweave/scripts/read-workflow.sh +18 -18
- package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +6 -5
- package/plugins/specweave/scripts/session-watchdog.sh +4 -4
- package/plugins/specweave/scripts/status.js +7 -7
- package/plugins/specweave/scripts/update-dashboard-cache.sh +28 -10
- package/plugins/specweave/skills/SKILLS-INDEX.md +4 -4
- package/plugins/specweave/skills/archive-increments/SKILL.md +15 -15
- package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +5 -5
- package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +4 -4
- package/plugins/specweave/skills/context-loader/SKILL.md +1 -1
- package/plugins/specweave/skills/{specweave-detector → detector}/SKILL.md +5 -5
- package/plugins/specweave/skills/discrepancy-viewer.md +4 -4
- package/plugins/specweave/skills/external-sync-wizard/SKILL.md +24 -24
- package/plugins/specweave/skills/{specweave-framework → framework}/SKILL.md +33 -33
- package/plugins/specweave/skills/increment-planner/SKILL.md +25 -24
- package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +6 -16
- package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -12
- package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +6 -6
- package/plugins/specweave/skills/increment-work-router/SKILL.md +23 -23
- package/plugins/specweave/skills/instant-status/SKILL.md +7 -7
- package/plugins/specweave/skills/plugin-validator/SKILL.md +9 -9
- package/plugins/specweave/skills/pm-closure-validation/SKILL.md +4 -4
- package/plugins/specweave/skills/progress-sync/SKILL.md +51 -51
- package/plugins/specweave/skills/project-kickstarter/SKILL.md +11 -11
- package/plugins/specweave/skills/role-orchestrator/README.md +1 -1
- package/plugins/specweave/skills/role-orchestrator/SKILL.md +4 -4
- package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +17 -17
- package/plugins/specweave/skills/spec-generator/SKILL.md +6 -6
- package/plugins/specweave/skills/tdd-workflow/SKILL.md +21 -21
- package/plugins/specweave/skills/translator/SKILL.md +4 -4
- package/plugins/specweave/skills/umbrella-repo-detector/SKILL.md +5 -5
- package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ado/agents/ado-manager/AGENT.md +4 -4
- package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +4 -4
- package/plugins/specweave-ado/commands/cleanup-duplicates.md +9 -9
- package/plugins/specweave-ado/commands/clone.md +17 -17
- package/plugins/specweave-ado/commands/close.md +10 -10
- package/plugins/specweave-ado/commands/create.md +8 -8
- package/plugins/specweave-ado/commands/import-areas.md +15 -15
- package/plugins/specweave-ado/commands/import-projects.md +12 -12
- package/plugins/specweave-ado/commands/pull.md +25 -25
- package/plugins/specweave-ado/commands/push.md +20 -20
- package/plugins/specweave-ado/commands/reconcile.md +7 -7
- package/plugins/specweave-ado/commands/status.md +7 -7
- package/plugins/specweave-ado/commands/sync.md +17 -17
- package/plugins/specweave-ado/hooks/post-living-docs-update.sh +2 -2
- package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
- package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
- package/plugins/specweave-ado/skills/{specweave-ado-mapper → ado-mapper}/SKILL.md +2 -2
- package/plugins/specweave-ado/skills/ado-multi-project/SKILL.md +6 -6
- package/plugins/specweave-ado/skills/ado-resource-validator/SKILL.md +5 -5
- package/plugins/specweave-ado/skills/ado-sync/SKILL.md +19 -19
- package/plugins/specweave-alternatives/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-alternatives/commands/alternatives-analyze.md +14 -14
- 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-cost-optimizer/commands/cost-analyze.md +1 -1
- package/plugins/specweave-cost-optimizer/commands/cost-optimize.md +1 -1
- package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-diagrams/commands/diagrams-generate.md +1 -1
- package/plugins/specweave-docs/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-docs/commands/build.md +8 -8
- package/plugins/specweave-docs/commands/generate.md +22 -22
- package/plugins/specweave-docs/commands/health.md +10 -10
- package/plugins/specweave-docs/commands/init.md +9 -9
- package/plugins/specweave-docs/commands/organize.md +10 -10
- package/plugins/specweave-docs/commands/validate.md +9 -9
- package/plugins/specweave-docs/commands/view.md +14 -14
- package/plugins/specweave-docs/skills/preview/SKILL.md +11 -11
- package/plugins/specweave-figma/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-figma/commands/figma-import.md +1 -1
- package/plugins/specweave-figma/commands/figma-to-react.md +1 -1
- package/plugins/specweave-figma/commands/figma-tokens.md +1 -1
- package/plugins/specweave-frontend/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-frontend/agents/frontend-architect/README.md +5 -5
- package/plugins/specweave-frontend/commands/component-generate.md +1 -1
- package/plugins/specweave-frontend/commands/design-system-init.md +1 -1
- package/plugins/specweave-frontend/commands/frontend-scaffold.md +1 -1
- package/plugins/specweave-frontend/commands/nextjs-setup.md +1 -1
- package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-github/MULTI-PROJECT-SYNC-ARCHITECTURE.md +4 -4
- package/plugins/specweave-github/SYNC-ARCHITECTURE-FIX-SUMMARY.md +18 -18
- package/plugins/specweave-github/agents/github-manager/AGENT.md +8 -8
- package/plugins/specweave-github/commands/cleanup-duplicates.md +8 -8
- package/plugins/specweave-github/commands/close.md +25 -25
- package/plugins/specweave-github/commands/create.md +17 -17
- package/plugins/specweave-github/commands/pull.md +12 -12
- package/plugins/specweave-github/commands/push.md +12 -12
- package/plugins/specweave-github/commands/reconcile.md +7 -7
- package/plugins/specweave-github/commands/status.md +24 -24
- package/plugins/specweave-github/commands/sync.md +34 -34
- package/plugins/specweave-github/commands/update-user-story.md +6 -6
- package/plugins/specweave-github/hooks/README.md +8 -8
- package/plugins/specweave-github/hooks/post-task-completion.sh +2 -2
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +12 -4
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +16 -4
- package/plugins/specweave-github/lib/completion-calculator.js +3 -1
- package/plugins/specweave-github/lib/completion-calculator.ts +6 -0
- package/plugins/specweave-github/lib/duplicate-detector.js +12 -6
- package/plugins/specweave-github/lib/duplicate-detector.ts +22 -6
- package/plugins/specweave-github/lib/github-board-resolver.js +7 -2
- package/plugins/specweave-github/lib/github-board-resolver.ts +13 -2
- package/plugins/specweave-github/lib/github-client-v2.js +29 -18
- package/plugins/specweave-github/lib/github-client-v2.ts +33 -18
- package/plugins/specweave-github/lib/github-feature-sync.js +41 -11
- package/plugins/specweave-github/lib/github-feature-sync.ts +52 -11
- package/plugins/specweave-github/lib/github-hierarchical-sync.js +6 -1
- package/plugins/specweave-github/lib/github-hierarchical-sync.ts +12 -1
- package/plugins/specweave-github/lib/github-increment-sync-cli.js +35 -17
- package/plugins/specweave-github/lib/github-increment-sync-cli.ts +44 -16
- package/plugins/specweave-github/lib/github-issue-updater.js +8 -3
- package/plugins/specweave-github/lib/github-issue-updater.ts +16 -3
- package/plugins/specweave-github/lib/github-spec-sync.js +14 -4
- package/plugins/specweave-github/lib/github-spec-sync.ts +19 -4
- package/plugins/specweave-github/lib/github-sync-bidirectional.js +8 -3
- package/plugins/specweave-github/lib/github-sync-bidirectional.ts +14 -3
- package/plugins/specweave-github/lib/github-sync-increment-changes.js +9 -4
- package/plugins/specweave-github/lib/github-sync-increment-changes.ts +15 -4
- package/plugins/specweave-github/lib/increment-issue-builder.js +23 -10
- package/plugins/specweave-github/lib/increment-issue-builder.ts +29 -11
- package/plugins/specweave-github/lib/user-story-content-builder.js +19 -16
- package/plugins/specweave-github/lib/user-story-content-builder.ts +24 -19
- package/plugins/specweave-github/lib/user-story-issue-builder.js +10 -13
- package/plugins/specweave-github/lib/user-story-issue-builder.ts +20 -19
- package/plugins/specweave-github/reference/github-specweave-mapping.md +1 -1
- package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +3 -3
- package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +8 -8
- package/plugins/specweave-github/skills/github-sync/SKILL.md +14 -14
- package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-monitor-setup.md → monitor-setup.md} +1 -1
- package/plugins/specweave-infrastructure/commands/{specweave-infrastructure-slo-implement.md → slo-implement.md} +1 -1
- package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +3 -3
- package/plugins/specweave-jira/commands/cleanup-duplicates.md +9 -9
- package/plugins/specweave-jira/commands/close.md +13 -13
- package/plugins/specweave-jira/commands/create.md +8 -8
- package/plugins/specweave-jira/commands/import-boards.md +15 -15
- package/plugins/specweave-jira/commands/import-projects-full.md +15 -15
- package/plugins/specweave-jira/commands/import-projects.md +10 -10
- package/plugins/specweave-jira/commands/pull.md +10 -10
- package/plugins/specweave-jira/commands/push.md +11 -11
- package/plugins/specweave-jira/commands/reconcile.md +7 -7
- package/plugins/specweave-jira/commands/status.md +16 -16
- package/plugins/specweave-jira/commands/sync.md +27 -27
- package/plugins/specweave-jira/skills/{specweave-jira-mapper → jira-mapper}/SKILL.md +2 -2
- package/plugins/specweave-jira/skills/jira-resource-validator/SKILL.md +4 -4
- package/plugins/specweave-jira/skills/jira-sync/SKILL.md +5 -5
- package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +10 -10
- package/plugins/specweave-kafka/README.md +12 -12
- package/plugins/specweave-kafka/commands/deploy.md +5 -5
- package/plugins/specweave-kafka/commands/dev-env.md +2 -2
- package/plugins/specweave-kafka/commands/mcp-configure.md +3 -3
- package/plugins/specweave-kafka/commands/monitor-setup.md +3 -3
- package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +4 -4
- package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +5 -5
- package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +6 -6
- package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-kafka-streams/commands/topology.md +4 -4
- package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ml/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ml/README.md +9 -9
- package/plugins/specweave-ml/commands/{specweave-ml-deploy.md → deploy.md} +1 -1
- package/plugins/specweave-ml/commands/{specweave-ml-evaluate.md → evaluate.md} +1 -1
- package/plugins/specweave-ml/commands/{specweave-ml-explain.md → explain.md} +1 -1
- package/plugins/specweave-ml/commands/{specweave-ml-pipeline.md → pipeline.md} +1 -1
- package/plugins/specweave-ml/skills/automl-optimizer/SKILL.md +1 -1
- package/plugins/specweave-ml/skills/data-visualizer/SKILL.md +1 -1
- package/plugins/specweave-ml/skills/experiment-tracker/SKILL.md +4 -4
- package/plugins/specweave-ml/skills/feature-engineer/SKILL.md +1 -1
- package/plugins/specweave-ml/skills/ml-deployment-helper/SKILL.md +2 -2
- package/plugins/specweave-ml/skills/ml-pipeline-orchestrator/SKILL.md +10 -10
- package/plugins/specweave-ml/skills/model-registry/SKILL.md +1 -1
- package/plugins/specweave-ml/skills/time-series-forecaster/SKILL.md +1 -1
- package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-mobile/README.md +2 -2
- package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +2 -2
- package/plugins/specweave-mobile/skills/react-native-setup/SKILL.md +1 -1
- package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-n8n/commands/workflow-template.md +4 -4
- package/plugins/specweave-payments/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-payments/commands/stripe-setup.md +1 -1
- package/plugins/specweave-payments/commands/subscription-flow.md +1 -1
- package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-plugin-dev/commands/plugin-create.md +1 -1
- package/plugins/specweave-plugin-dev/commands/plugin-publish.md +1 -1
- package/plugins/specweave-plugin-dev/commands/plugin-test.md +1 -1
- package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-release/IMPLEMENTATION.md +14 -14
- package/plugins/specweave-release/README.md +33 -33
- package/plugins/specweave-release/agents/release-manager/AGENT.md +18 -18
- package/plugins/specweave-release/commands/{specweave-release-align.md → align.md} +19 -19
- package/plugins/specweave-release/commands/{specweave-release-init.md → init.md} +19 -19
- package/plugins/specweave-release/commands/{specweave-release-npm.md → npm.md} +14 -14
- package/plugins/specweave-release/commands/{specweave-release-platform.md → platform.md} +17 -17
- package/plugins/specweave-release/commands/{specweave-release-rc.md → rc.md} +37 -37
- package/plugins/specweave-release/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-release/skills/rc-manager/SKILL.md +12 -12
- package/plugins/specweave-release/skills/release-coordinator/SKILL.md +11 -11
- package/plugins/specweave-release/skills/release-strategy-advisor/SKILL.md +4 -4
- package/plugins/specweave-release/skills/version-aligner/SKILL.md +7 -7
- package/plugins/specweave-testing/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-testing/agents/qa-engineer/README.md +5 -5
- package/plugins/specweave-testing/commands/e2e-setup.md +1 -1
- package/plugins/specweave-testing/commands/test-coverage.md +1 -1
- package/plugins/specweave-testing/commands/test-generate.md +1 -1
- package/plugins/specweave-testing/commands/test-init.md +1 -1
- package/plugins/specweave-tooling/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-tooling/commands/{specweave-tooling-skill-create.md → skill-create.md} +1 -1
- package/plugins/specweave-tooling/commands/{specweave-tooling-skill-package.md → skill-package.md} +1 -1
- package/plugins/specweave-tooling/commands/{specweave-tooling-skill-validate.md → skill-validate.md} +1 -1
- package/plugins/specweave-ui/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ui/commands/ui-automate.md +9 -9
- package/plugins/specweave-ui/commands/ui-inspect.md +6 -6
- package/src/templates/AGENTS.md.template +49 -49
- package/src/templates/CLAUDE.md.template +11 -11
- package/dist/src/cli/commands/switch-project.d.ts +0 -13
- package/dist/src/cli/commands/switch-project.d.ts.map +0 -1
- package/dist/src/cli/commands/switch-project.js +0 -78
- package/dist/src/cli/commands/switch-project.js.map +0 -1
- package/plugins/specweave/commands/specweave-init-multiproject.md +0 -146
- package/plugins/specweave-core/.claude-plugin/plugin.json +0 -21
- package/plugins/specweave-core/commands/architecture-review.md +0 -288
- package/plugins/specweave-core/commands/code-review.md +0 -213
- package/plugins/specweave-core/commands/refactor-plan.md +0 -249
- package/plugins/specweave-core/skills/code-quality/SKILL.md +0 -158
- package/plugins/specweave-core/skills/design-patterns/SKILL.md +0 -245
- package/plugins/specweave-core/skills/software-architecture/SKILL.md +0 -84
- /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-1-increment-naming.yaml +0 -0
- /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-2-source-of-truth.yaml +0 -0
- /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-3-increment-discipline.yaml +0 -0
- /package/plugins/specweave/skills/{specweave-framework → framework}/test-cases/test-4-file-placement.yaml +0 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Project Folder Guard (Pre-tool-use Hook)
|
|
3
|
+
# Prevents creation of project folders unless project exists in config.json
|
|
4
|
+
#
|
|
5
|
+
# Triggers: Write tool creating files in .specweave/docs/internal/specs/{project}/
|
|
6
|
+
# Blocks: Project folders not in config.json multiProject.projects
|
|
7
|
+
# Version: 0.35.1+ (Enhanced with example project detection)
|
|
8
|
+
#
|
|
9
|
+
# CRITICAL v0.35.1: Added detection of common example project names
|
|
10
|
+
# These are NEVER allowed unless explicitly configured:
|
|
11
|
+
# - frontend-app, backend-api, mobile-app, shared-lib (common examples)
|
|
12
|
+
# - acme-corp, my-app, myapp (placeholder names)
|
|
13
|
+
# - Comma-separated values like "frontend-app, backend-api"
|
|
14
|
+
# - Placeholder patterns like {{PROJECT_ID}}
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
TOOL_NAME="$1"
|
|
19
|
+
shift
|
|
20
|
+
TOOL_ARGS="$*"
|
|
21
|
+
|
|
22
|
+
# Only check Write tool operations to specs/ folder
|
|
23
|
+
if [ "$TOOL_NAME" != "Write" ]; then
|
|
24
|
+
exit 0
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Extract file_path from tool args (JSON format)
|
|
28
|
+
FILE_PATH=$(echo "$TOOL_ARGS" | jq -r '.file_path // empty')
|
|
29
|
+
|
|
30
|
+
if [ -z "$FILE_PATH" ]; then
|
|
31
|
+
exit 0
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Check if writing to specs folder
|
|
35
|
+
if [[ ! "$FILE_PATH" =~ \.specweave/docs/internal/specs/([^/]+)/ ]]; then
|
|
36
|
+
exit 0
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Extract project name from path
|
|
40
|
+
PROJECT_NAME="${BASH_REMATCH[1]}"
|
|
41
|
+
|
|
42
|
+
# Skip validation for README.md in specs root
|
|
43
|
+
if [ "$PROJECT_NAME" = "README.md" ]; then
|
|
44
|
+
exit 0
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# CRITICAL v0.35.1: Check for template placeholders like {{PROJECT_ID}}
|
|
48
|
+
if [[ "$PROJECT_NAME" =~ \{\{.*\}\} ]]; then
|
|
49
|
+
echo "❌ BLOCKED: Unresolved placeholder detected: '$PROJECT_NAME'"
|
|
50
|
+
echo ""
|
|
51
|
+
echo " Project name contains template placeholder syntax: {{ ... }}"
|
|
52
|
+
echo " This is NOT a valid project name."
|
|
53
|
+
echo ""
|
|
54
|
+
echo " 🔧 Edit spec.md and replace {{...}} with your actual project name"
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
# CRITICAL v0.35.1: Check for comma-separated values (invalid format)
|
|
59
|
+
if [[ "$PROJECT_NAME" =~ , ]]; then
|
|
60
|
+
echo "❌ BLOCKED: Comma-separated project names detected: '$PROJECT_NAME'"
|
|
61
|
+
echo ""
|
|
62
|
+
echo " Each User Story must have exactly ONE project."
|
|
63
|
+
echo " Multiple comma-separated projects are NOT allowed."
|
|
64
|
+
echo ""
|
|
65
|
+
echo " 🔧 Split into separate User Stories, one per project"
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# CRITICAL v0.35.1: Check for parentheses (often seen in examples)
|
|
70
|
+
if [[ "$PROJECT_NAME" =~ \( || "$PROJECT_NAME" =~ \) ]]; then
|
|
71
|
+
echo "❌ BLOCKED: Invalid characters in project name: '$PROJECT_NAME'"
|
|
72
|
+
echo ""
|
|
73
|
+
echo " Project names cannot contain parentheses."
|
|
74
|
+
echo " This looks like an example/documentation string."
|
|
75
|
+
echo ""
|
|
76
|
+
echo " 🔧 Use a valid kebab-case project name (e.g., my-project)"
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# CRITICAL v0.35.1: Check ProjectRegistry FIRST (.specweave/state/projects.json)
|
|
81
|
+
# This is the single source of truth for projects (v0.35.0+)
|
|
82
|
+
REGISTRY_FILE=".specweave/state/projects.json"
|
|
83
|
+
CONFIG_FILE=".specweave/config.json"
|
|
84
|
+
|
|
85
|
+
# CRITICAL v0.35.1: List of known example project names
|
|
86
|
+
# These are blocked UNLESS explicitly registered
|
|
87
|
+
EXAMPLE_PROJECTS="frontend-app backend-api mobile-app shared-lib acme-corp my-app myapp example-project sample-project test-project demo placeholder per default"
|
|
88
|
+
|
|
89
|
+
# Check if project is in example list (case-insensitive)
|
|
90
|
+
PROJECT_NAME_LOWER=$(echo "$PROJECT_NAME" | tr '[:upper:]' '[:lower:]')
|
|
91
|
+
IS_EXAMPLE="false"
|
|
92
|
+
for EXAMPLE in $EXAMPLE_PROJECTS; do
|
|
93
|
+
if [ "$PROJECT_NAME_LOWER" = "$EXAMPLE" ]; then
|
|
94
|
+
IS_EXAMPLE="true"
|
|
95
|
+
break
|
|
96
|
+
fi
|
|
97
|
+
done
|
|
98
|
+
|
|
99
|
+
# PRIMARY: Check ProjectRegistry (projects.json)
|
|
100
|
+
if [ -f "$REGISTRY_FILE" ]; then
|
|
101
|
+
# Get all project IDs from registry
|
|
102
|
+
REGISTRY_PROJECTS=$(jq -r '.projects | keys[]' "$REGISTRY_FILE" 2>/dev/null || echo "")
|
|
103
|
+
|
|
104
|
+
if [ -n "$REGISTRY_PROJECTS" ]; then
|
|
105
|
+
# Check if project exists in registry (case-insensitive)
|
|
106
|
+
PROJECT_IN_REGISTRY="false"
|
|
107
|
+
for REG_PROJECT in $REGISTRY_PROJECTS; do
|
|
108
|
+
REG_PROJECT_LOWER=$(echo "$REG_PROJECT" | tr '[:upper:]' '[:lower:]')
|
|
109
|
+
if [ "$PROJECT_NAME_LOWER" = "$REG_PROJECT_LOWER" ]; then
|
|
110
|
+
PROJECT_IN_REGISTRY="true"
|
|
111
|
+
break
|
|
112
|
+
fi
|
|
113
|
+
done
|
|
114
|
+
|
|
115
|
+
if [ "$PROJECT_IN_REGISTRY" = "true" ]; then
|
|
116
|
+
# Project exists in registry - ALLOW
|
|
117
|
+
exit 0
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
# Project NOT in registry
|
|
121
|
+
VALID_PROJECTS=$(echo "$REGISTRY_PROJECTS" | tr '\n' ', ' | sed 's/,$//')
|
|
122
|
+
|
|
123
|
+
if [ "$IS_EXAMPLE" = "true" ]; then
|
|
124
|
+
echo "❌ BLOCKED: Example project name detected: '$PROJECT_NAME'"
|
|
125
|
+
echo ""
|
|
126
|
+
echo " '$PROJECT_NAME' is a common example/placeholder name used in documentation."
|
|
127
|
+
echo " It was likely extracted from example User Stories in spec.md."
|
|
128
|
+
echo ""
|
|
129
|
+
echo " ⚠️ This is NOT a real project - it's a documentation example!"
|
|
130
|
+
echo ""
|
|
131
|
+
echo " Registered projects: $VALID_PROJECTS"
|
|
132
|
+
echo ""
|
|
133
|
+
echo " 🔧 How to fix:"
|
|
134
|
+
echo " 1. Edit the spec.md file and update **Project**: fields"
|
|
135
|
+
echo " 2. Replace example names with a registered project"
|
|
136
|
+
echo " 3. Re-run the sync command"
|
|
137
|
+
else
|
|
138
|
+
echo "❌ BLOCKED: Project '$PROJECT_NAME' not in registry"
|
|
139
|
+
echo ""
|
|
140
|
+
echo " Project '$PROJECT_NAME' is NOT registered in .specweave/state/projects.json"
|
|
141
|
+
echo ""
|
|
142
|
+
echo " Registered projects: $VALID_PROJECTS"
|
|
143
|
+
echo ""
|
|
144
|
+
echo " 🔧 To add this project:"
|
|
145
|
+
echo " specweave project add $PROJECT_NAME --name \"Project Display Name\""
|
|
146
|
+
fi
|
|
147
|
+
exit 1
|
|
148
|
+
fi
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
# FALLBACK: Check config.json if registry doesn't exist or is empty
|
|
152
|
+
if [ ! -f "$CONFIG_FILE" ]; then
|
|
153
|
+
echo "❌ ERROR: Neither projects.json nor config.json found"
|
|
154
|
+
echo " Cannot validate project folder creation without configuration"
|
|
155
|
+
exit 1
|
|
156
|
+
fi
|
|
157
|
+
|
|
158
|
+
# Check if multi-project mode is enabled
|
|
159
|
+
MULTI_PROJECT_ENABLED=$(jq -r '.multiProject.enabled // false' "$CONFIG_FILE")
|
|
160
|
+
|
|
161
|
+
if [ "$MULTI_PROJECT_ENABLED" != "true" ]; then
|
|
162
|
+
# Single-project mode - only allow configured project name
|
|
163
|
+
ALLOWED_PROJECT=$(jq -r '.project.name // "specweave"' "$CONFIG_FILE")
|
|
164
|
+
|
|
165
|
+
if [ "$PROJECT_NAME" != "$ALLOWED_PROJECT" ]; then
|
|
166
|
+
# Special message for example projects
|
|
167
|
+
if [ "$IS_EXAMPLE" = "true" ]; then
|
|
168
|
+
echo "❌ BLOCKED: Example project name detected: '$PROJECT_NAME'"
|
|
169
|
+
echo ""
|
|
170
|
+
echo " '$PROJECT_NAME' is a common example/placeholder name used in documentation."
|
|
171
|
+
echo " It was likely extracted from example User Stories in spec.md."
|
|
172
|
+
echo ""
|
|
173
|
+
echo " ⚠️ This is NOT a real project - it's a documentation example!"
|
|
174
|
+
echo ""
|
|
175
|
+
echo " 🔧 How to fix:"
|
|
176
|
+
echo " 1. Edit the spec.md file and update **Project**: fields"
|
|
177
|
+
echo " 2. Replace example names with: $ALLOWED_PROJECT"
|
|
178
|
+
echo " 3. Re-run the sync command"
|
|
179
|
+
echo ""
|
|
180
|
+
echo " 📋 Example fix in spec.md:"
|
|
181
|
+
echo " BEFORE: **Project**: $PROJECT_NAME ← EXAMPLE (WRONG)"
|
|
182
|
+
echo " AFTER: **Project**: $ALLOWED_PROJECT ← Your actual project"
|
|
183
|
+
echo ""
|
|
184
|
+
else
|
|
185
|
+
echo "❌ BLOCKED: Project folder creation for '$PROJECT_NAME'"
|
|
186
|
+
echo ""
|
|
187
|
+
echo " This repository is in SINGLE-PROJECT mode."
|
|
188
|
+
echo " Only folder allowed: $ALLOWED_PROJECT"
|
|
189
|
+
echo ""
|
|
190
|
+
echo " Current config (.specweave/config.json):"
|
|
191
|
+
echo " {"
|
|
192
|
+
echo " \"project\": { \"name\": \"$ALLOWED_PROJECT\" },"
|
|
193
|
+
echo " \"multiProject\": { \"enabled\": false }"
|
|
194
|
+
echo " }"
|
|
195
|
+
echo ""
|
|
196
|
+
echo " ⚠️ If '$PROJECT_NAME' is an example/placeholder in spec.md, update it to:"
|
|
197
|
+
echo " **Project**: $ALLOWED_PROJECT"
|
|
198
|
+
echo ""
|
|
199
|
+
echo " 💡 To add new projects:"
|
|
200
|
+
echo " 1. Run: specweave config set multiProject.enabled true"
|
|
201
|
+
echo " 2. Run: specweave config set multiProject.projects.$PROJECT_NAME.id \"$PROJECT_NAME\""
|
|
202
|
+
echo " 3. Re-run your command"
|
|
203
|
+
fi
|
|
204
|
+
exit 1
|
|
205
|
+
fi
|
|
206
|
+
|
|
207
|
+
exit 0
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
# Multi-project mode - check if project exists in config
|
|
211
|
+
if jq -e ".multiProject.projects.\"$PROJECT_NAME\"" "$CONFIG_FILE" &>/dev/null; then
|
|
212
|
+
PROJECT_EXISTS="true"
|
|
213
|
+
else
|
|
214
|
+
PROJECT_EXISTS="false"
|
|
215
|
+
fi
|
|
216
|
+
|
|
217
|
+
if [ "$PROJECT_EXISTS" = "false" ]; then
|
|
218
|
+
# Get list of valid projects
|
|
219
|
+
VALID_PROJECTS=$(jq -r '.multiProject.projects | keys[]' "$CONFIG_FILE" 2>/dev/null | tr '\n' ', ' | sed 's/,$//' || echo "")
|
|
220
|
+
|
|
221
|
+
# Special message for example projects
|
|
222
|
+
if [ "$IS_EXAMPLE" = "true" ]; then
|
|
223
|
+
echo "❌ BLOCKED: Example project name detected: '$PROJECT_NAME'"
|
|
224
|
+
echo ""
|
|
225
|
+
echo " '$PROJECT_NAME' is a common example/placeholder name used in documentation."
|
|
226
|
+
echo " It was likely extracted from example User Stories in spec.md."
|
|
227
|
+
echo ""
|
|
228
|
+
echo " ⚠️ This is NOT a real project - it's a documentation example!"
|
|
229
|
+
echo ""
|
|
230
|
+
if [ -n "$VALID_PROJECTS" ]; then
|
|
231
|
+
echo " Valid projects: $VALID_PROJECTS"
|
|
232
|
+
echo ""
|
|
233
|
+
fi
|
|
234
|
+
echo " 🔧 How to fix:"
|
|
235
|
+
echo " 1. Edit the spec.md file and update **Project**: fields"
|
|
236
|
+
echo " 2. Replace example names with a configured project"
|
|
237
|
+
echo " 3. Re-run the sync command"
|
|
238
|
+
echo ""
|
|
239
|
+
else
|
|
240
|
+
echo "❌ BLOCKED: Project folder creation for '$PROJECT_NAME'"
|
|
241
|
+
echo ""
|
|
242
|
+
echo " Project '$PROJECT_NAME' is NOT configured in .specweave/config.json"
|
|
243
|
+
echo ""
|
|
244
|
+
if [ -n "$VALID_PROJECTS" ]; then
|
|
245
|
+
echo " Valid projects: $VALID_PROJECTS"
|
|
246
|
+
echo ""
|
|
247
|
+
fi
|
|
248
|
+
echo " ⚠️ Common causes:"
|
|
249
|
+
echo " 1. Example/placeholder project in spec.md User Stories"
|
|
250
|
+
echo " 2. Typo in **Project**: field (e.g., 'MyApp (3 repos)' instead of real project)"
|
|
251
|
+
echo " 3. Missing project configuration"
|
|
252
|
+
echo ""
|
|
253
|
+
echo " 🔧 How to fix:"
|
|
254
|
+
if [ -n "$VALID_PROJECTS" ]; then
|
|
255
|
+
echo " • If this is an EXAMPLE in spec.md, update to a real project:"
|
|
256
|
+
echo " **Project**: ${VALID_PROJECTS%%,*} # Use first valid project"
|
|
257
|
+
echo ""
|
|
258
|
+
fi
|
|
259
|
+
echo " • If this is a NEW project, add it to config:"
|
|
260
|
+
echo " specweave config set multiProject.projects.$PROJECT_NAME.id \"$PROJECT_NAME\""
|
|
261
|
+
echo " specweave config set multiProject.projects.$PROJECT_NAME.name \"Project Display Name\""
|
|
262
|
+
echo ""
|
|
263
|
+
echo " • Check spec.md for placeholder User Stories like:"
|
|
264
|
+
echo " **Project**: frontend-app, backend-api ← FORBIDDEN (comma-separated)"
|
|
265
|
+
echo " **Project**: MyApp (3 repos) ← FORBIDDEN (parentheses not allowed)"
|
|
266
|
+
echo ""
|
|
267
|
+
fi
|
|
268
|
+
exit 1
|
|
269
|
+
fi
|
|
270
|
+
|
|
271
|
+
# Project exists - allow creation
|
|
272
|
+
exit 0
|
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
#
|
|
3
3
|
# spec-project-validator.sh
|
|
4
4
|
#
|
|
5
|
-
# Pre-tool-use hook that validates spec.md
|
|
5
|
+
# Pre-tool-use hook that validates spec.md project/board configuration
|
|
6
6
|
# before allowing Write tool to create/update spec.md files.
|
|
7
7
|
#
|
|
8
8
|
# Activation:
|
|
9
9
|
# - tool_name: Write
|
|
10
10
|
# - file_path matches: .specweave/increments/*/spec.md
|
|
11
11
|
#
|
|
12
|
-
# Rules:
|
|
13
|
-
# -
|
|
14
|
-
# -
|
|
15
|
-
# -
|
|
16
|
-
# -
|
|
12
|
+
# Rules (ADR-0140 v0.35.0+):
|
|
13
|
+
# - Frontmatter `project:` and `board:` fields are OPTIONAL (deprecated)
|
|
14
|
+
# - Per-US `**Project**:` and `**Board**:` fields are the PRIMARY source
|
|
15
|
+
# - Validates no unresolved {{...}} placeholders exist
|
|
16
|
+
# - Single-project mode: frontmatter project must match config if present
|
|
17
|
+
# - Multi-project mode: validates projects exist in config if referenced
|
|
17
18
|
#
|
|
18
19
|
# Returns exit code 1 (block) if validation fails, 0 (allow) otherwise.
|
|
19
20
|
#
|
|
@@ -105,6 +106,10 @@ PROJECT_ROOT="${FILE_PATH%%/.specweave/*}"
|
|
|
105
106
|
# Change to project root for specweave command
|
|
106
107
|
cd "$PROJECT_ROOT" 2>/dev/null || true
|
|
107
108
|
|
|
109
|
+
# Check if single-project or multi-project mode (NEW - v0.34.0+)
|
|
110
|
+
CONFIG_FILE="$PROJECT_ROOT/.specweave/config.json"
|
|
111
|
+
MULTI_PROJECT_ENABLED=$(jq -r '.multiProject.enabled // false' "$CONFIG_FILE" 2>/dev/null || echo "false")
|
|
112
|
+
|
|
108
113
|
# Get project context via CLI command
|
|
109
114
|
CONTEXT_OUTPUT=$(specweave context projects 2>/dev/null || echo '{"level": 1, "projects": []}')
|
|
110
115
|
|
|
@@ -114,63 +119,79 @@ STRUCTURE_LEVEL=$(echo "$CONTEXT_OUTPUT" | jq -r '.level // 1')
|
|
|
114
119
|
# Parse available projects
|
|
115
120
|
AVAILABLE_PROJECTS=$(echo "$CONTEXT_OUTPUT" | jq -r '.projects[].id // empty' | tr '\n' ', ' | sed 's/,$//')
|
|
116
121
|
|
|
117
|
-
#
|
|
118
|
-
if [ "$
|
|
119
|
-
#
|
|
122
|
+
# NEW (v0.34.0+): Single-project mode validation
|
|
123
|
+
if [ "$MULTI_PROJECT_ENABLED" = "false" ]; then
|
|
124
|
+
# Single-project mode: project field is OPTIONAL
|
|
125
|
+
# If provided, validate it matches config.project.name
|
|
126
|
+
CONFIGURED_PROJECT=$(jq -r '.project.name // "specweave"' "$CONFIG_FILE" 2>/dev/null)
|
|
120
127
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
echo "{\"decision\": \"block\", \"reason\": \"spec.md missing required 'project:' field in YAML frontmatter.\\n\\n2-level structure detected.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS:-none detected}\\n\\nAdd 'project: <project_name>' to frontmatter.\\n\\nRun 'specweave context projects' to see all options.\"}"
|
|
128
|
+
if [ -n "$PROJECT" ] && [ "$PROJECT" != "null" ] && [ "$PROJECT" != "$CONFIGURED_PROJECT" ]; then
|
|
129
|
+
echo "{\"decision\": \"block\", \"reason\": \"spec.md has project: '${PROJECT}' but config has project.name: '${CONFIGURED_PROJECT}'.\\n\\nIn single-project mode, the project: field MUST match config.project.name OR be omitted.\\n\\nFix:\\n1. Remove project: field (recommended for single-project mode)\\n2. OR change to: project: ${CONFIGURED_PROJECT}\\n3. OR enable multi-project mode: /sw:enable-multiproject\"}"
|
|
124
130
|
exit 0
|
|
125
131
|
fi
|
|
126
132
|
|
|
127
|
-
#
|
|
128
|
-
if [ -
|
|
129
|
-
|
|
130
|
-
AVAILABLE_BOARDS=$(specweave context boards --project="$PROJECT" 2>/dev/null | jq -r '.boards[].id // empty' | tr '\n' ', ' | sed 's/,$//')
|
|
131
|
-
|
|
132
|
-
echo "{\"decision\": \"block\", \"reason\": \"spec.md missing required 'board:' field in YAML frontmatter.\\n\\n2-level structure detected (project: ${PROJECT}).\\n\\nAvailable boards: ${AVAILABLE_BOARDS:-none detected}\\n\\nAdd 'board: <board_name>' to frontmatter.\\n\\nRun 'specweave context boards --project=${PROJECT}' to see all options.\"}"
|
|
133
|
+
# ALWAYS block board: field in single-project mode
|
|
134
|
+
if [ -n "$BOARD" ] && [ "$BOARD" != "null" ]; then
|
|
135
|
+
echo "{\"decision\": \"block\", \"reason\": \"spec.md has board: field but this is a SINGLE-PROJECT repository.\\n\\nThe board: field is ONLY for multi-project mode.\\n\\nFix:\\n1. Remove the board: field\\n2. OR enable multi-project mode: /sw:enable-multiproject\"}"
|
|
133
136
|
exit 0
|
|
134
137
|
fi
|
|
135
138
|
|
|
136
|
-
#
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id | ascii_downcase == ($proj | ascii_downcase))' 2>/dev/null)
|
|
141
|
-
fi
|
|
139
|
+
# All validations passed for single-project mode
|
|
140
|
+
echo '{"decision": "allow"}'
|
|
141
|
+
exit 0
|
|
142
|
+
fi
|
|
142
143
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
fi
|
|
144
|
+
# Multi-project mode validation continues below
|
|
145
|
+
# ADR-0140 (v0.35.0+): Frontmatter project/board fields are OPTIONAL
|
|
146
|
+
# Per-US fields are the PRIMARY source of truth
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
# Validation based on structure level
|
|
149
|
+
if [ "$STRUCTURE_LEVEL" = "2" ]; then
|
|
150
|
+
# 2-level: Frontmatter project/board are OPTIONAL (per-US fields are primary)
|
|
151
151
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
# If project is provided in frontmatter, validate it exists
|
|
153
|
+
if [ -n "$PROJECT" ] && [ "$PROJECT" != "null" ]; then
|
|
154
|
+
PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id == $proj)' 2>/dev/null)
|
|
155
|
+
if [ -z "$PROJECT_EXISTS" ]; then
|
|
156
|
+
# Try case-insensitive match
|
|
157
|
+
PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id | ascii_downcase == ($proj | ascii_downcase))' 2>/dev/null)
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
if [ -z "$PROJECT_EXISTS" ] && [ -n "$AVAILABLE_PROJECTS" ]; then
|
|
161
|
+
echo "{\"decision\": \"block\", \"reason\": \"Frontmatter project '${PROJECT}' not found in configuration.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS}\\n\\nFix:\\n1. Remove project: field (recommended - use per-US **Project**: instead)\\n2. OR update to a valid project\\n3. OR set SPECWEAVE_FORCE_PROJECT=1 to bypass\"}"
|
|
162
|
+
exit 0
|
|
163
|
+
fi
|
|
155
164
|
fi
|
|
156
165
|
|
|
157
|
-
|
|
166
|
+
# If board is provided in frontmatter, validate it exists under project
|
|
167
|
+
if [ -n "$BOARD" ] && [ "$BOARD" != "null" ]; then
|
|
168
|
+
# Need project to validate board
|
|
169
|
+
if [ -z "$PROJECT" ] || [ "$PROJECT" = "null" ]; then
|
|
170
|
+
echo "{\"decision\": \"block\", \"reason\": \"Frontmatter has board: '${BOARD}' but no project: field.\\n\\nIf using board: you must also specify project:.\\n\\nRecommended: Remove both and use per-US **Project**: and **Board**: fields instead.\"}"
|
|
171
|
+
exit 0
|
|
172
|
+
fi
|
|
158
173
|
|
|
159
|
-
|
|
160
|
-
echo "
|
|
161
|
-
exit 0
|
|
162
|
-
fi
|
|
174
|
+
BOARDS_OUTPUT=$(specweave context boards --project="$PROJECT" 2>/dev/null || echo '{"boards": []}')
|
|
175
|
+
BOARD_EXISTS=$(echo "$BOARDS_OUTPUT" | jq --arg board "$BOARD" '.boards[] | select(.id == $board)' 2>/dev/null)
|
|
163
176
|
|
|
164
|
-
|
|
165
|
-
|
|
177
|
+
if [ -z "$BOARD_EXISTS" ]; then
|
|
178
|
+
# Try case-insensitive match
|
|
179
|
+
BOARD_EXISTS=$(echo "$BOARDS_OUTPUT" | jq --arg board "$BOARD" '.boards[] | select(.id | ascii_downcase == ($board | ascii_downcase))' 2>/dev/null)
|
|
180
|
+
fi
|
|
166
181
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
182
|
+
AVAILABLE_BOARDS=$(echo "$BOARDS_OUTPUT" | jq -r '.boards[].id // empty' | tr '\n' ', ' | sed 's/,$//')
|
|
183
|
+
|
|
184
|
+
if [ -z "$BOARD_EXISTS" ] && [ -n "$AVAILABLE_BOARDS" ]; then
|
|
185
|
+
echo "{\"decision\": \"block\", \"reason\": \"Frontmatter board '${BOARD}' not found under project '${PROJECT}'.\\n\\nAvailable boards: ${AVAILABLE_BOARDS}\\n\\nFix:\\n1. Remove board: field (recommended - use per-US **Board**: instead)\\n2. OR update to a valid board\\n3. OR set SPECWEAVE_FORCE_PROJECT=1 to bypass\"}"
|
|
186
|
+
exit 0
|
|
187
|
+
fi
|
|
170
188
|
fi
|
|
171
189
|
|
|
172
|
-
|
|
173
|
-
|
|
190
|
+
else
|
|
191
|
+
# 1-level multi-project: Frontmatter project is OPTIONAL (per-US fields are primary)
|
|
192
|
+
|
|
193
|
+
# If project is provided in frontmatter, validate it exists
|
|
194
|
+
if [ -n "$PROJECT" ] && [ "$PROJECT" != "null" ] && [ -n "$AVAILABLE_PROJECTS" ]; then
|
|
174
195
|
PROJECT_EXISTS=$(echo "$CONTEXT_OUTPUT" | jq --arg proj "$PROJECT" '.projects[] | select(.id == $proj)' 2>/dev/null)
|
|
175
196
|
if [ -z "$PROJECT_EXISTS" ]; then
|
|
176
197
|
# Try case-insensitive match
|
|
@@ -178,7 +199,7 @@ else
|
|
|
178
199
|
fi
|
|
179
200
|
|
|
180
201
|
if [ -z "$PROJECT_EXISTS" ]; then
|
|
181
|
-
echo "{\"decision\": \"block\", \"reason\": \"
|
|
202
|
+
echo "{\"decision\": \"block\", \"reason\": \"Frontmatter project '${PROJECT}' not found in configuration.\\n\\nAvailable projects: ${AVAILABLE_PROJECTS}\\n\\nFix:\\n1. Remove project: field (recommended - use per-US **Project**: instead)\\n2. OR update to a valid project\\n3. OR set SPECWEAVE_FORCE_PROJECT=1 to bypass\"}"
|
|
182
203
|
exit 0
|
|
183
204
|
fi
|
|
184
205
|
fi
|
|
@@ -30,7 +30,7 @@ fi
|
|
|
30
30
|
|
|
31
31
|
# CRITICAL: Exit immediately for non-SpecWeave prompts
|
|
32
32
|
# This covers 90%+ of prompts with <5ms overhead
|
|
33
|
-
if ! echo "$PROMPT" | grep -qE "(specweave|/
|
|
33
|
+
if ! echo "$PROMPT" | grep -qE "(specweave|/sw:|increment|add|create|implement|build|develop)"; then
|
|
34
34
|
echo '{"decision":"approve"}'
|
|
35
35
|
exit 0
|
|
36
36
|
fi
|
|
@@ -61,9 +61,9 @@ escape_json() {
|
|
|
61
61
|
echo "$input" | sed 's/\\/\\\\/g; s/"/\\"/g' | awk '{printf "%s\\n", $0}' | sed 's/\\n$//'
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
# /
|
|
65
|
-
if echo "$PROMPT" | grep -qE "^/
|
|
66
|
-
ARGS=$(echo "$PROMPT" | sed 's|^/
|
|
64
|
+
# /sw:jobs → Execute read-jobs.sh (pure bash, ~2ms)
|
|
65
|
+
if echo "$PROMPT" | grep -qE "^/sw:jobs($| )"; then
|
|
66
|
+
ARGS=$(echo "$PROMPT" | sed 's|^/sw:jobs\s*||')
|
|
67
67
|
if [[ -f "$SCRIPTS_DIR/read-jobs.sh" ]]; then
|
|
68
68
|
OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-jobs.sh" $ARGS 2>&1)
|
|
69
69
|
elif [[ -f "$SCRIPTS_DIR/jobs.js" ]] && command -v node >/dev/null 2>&1; then
|
|
@@ -76,9 +76,9 @@ if echo "$PROMPT" | grep -qE "^/specweave:jobs($| )"; then
|
|
|
76
76
|
exit 0
|
|
77
77
|
fi
|
|
78
78
|
|
|
79
|
-
# /
|
|
80
|
-
if echo "$PROMPT" | grep -qE "^/
|
|
81
|
-
ARGS=$(echo "$PROMPT" | sed 's|^/
|
|
79
|
+
# /sw:progress → Execute read-progress.sh (pure bash, ~30ms)
|
|
80
|
+
if echo "$PROMPT" | grep -qE "^/sw:progress($| )"; then
|
|
81
|
+
ARGS=$(echo "$PROMPT" | sed 's|^/sw:progress\s*||')
|
|
82
82
|
if [[ -f "$SCRIPTS_DIR/read-progress.sh" ]]; then
|
|
83
83
|
OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-progress.sh" $ARGS 2>&1)
|
|
84
84
|
elif [[ -f "$SCRIPTS_DIR/progress.js" ]] && command -v node >/dev/null 2>&1; then
|
|
@@ -91,9 +91,9 @@ if echo "$PROMPT" | grep -qE "^/specweave:progress($| )"; then
|
|
|
91
91
|
exit 0
|
|
92
92
|
fi
|
|
93
93
|
|
|
94
|
-
# /
|
|
95
|
-
if echo "$PROMPT" | grep -qE "^/
|
|
96
|
-
ARGS=$(echo "$PROMPT" | sed 's|^/
|
|
94
|
+
# /sw:status → Execute read-status.sh (pure bash, ~150ms)
|
|
95
|
+
if echo "$PROMPT" | grep -qE "^/sw:status($| )"; then
|
|
96
|
+
ARGS=$(echo "$PROMPT" | sed 's|^/sw:status\s*||')
|
|
97
97
|
if [[ -f "$SCRIPTS_DIR/read-status.sh" ]]; then
|
|
98
98
|
OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-status.sh" $ARGS 2>&1)
|
|
99
99
|
elif [[ -f "$SCRIPTS_DIR/status.js" ]] && command -v node >/dev/null 2>&1; then
|
|
@@ -106,9 +106,9 @@ if echo "$PROMPT" | grep -qE "^/specweave:status($| )"; then
|
|
|
106
106
|
exit 0
|
|
107
107
|
fi
|
|
108
108
|
|
|
109
|
-
# /
|
|
110
|
-
if echo "$PROMPT" | grep -qE "^/
|
|
111
|
-
ARGS=$(echo "$PROMPT" | sed 's|^/
|
|
109
|
+
# /sw:workflow → Execute read-workflow.sh (pure bash, ~100ms)
|
|
110
|
+
if echo "$PROMPT" | grep -qE "^/sw:workflow($| )"; then
|
|
111
|
+
ARGS=$(echo "$PROMPT" | sed 's|^/sw:workflow\s*||')
|
|
112
112
|
if [[ -f "$SCRIPTS_DIR/read-workflow.sh" ]]; then
|
|
113
113
|
OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-workflow.sh" $ARGS 2>&1)
|
|
114
114
|
else
|
|
@@ -119,9 +119,9 @@ if echo "$PROMPT" | grep -qE "^/specweave:workflow($| )"; then
|
|
|
119
119
|
exit 0
|
|
120
120
|
fi
|
|
121
121
|
|
|
122
|
-
# /
|
|
123
|
-
if echo "$PROMPT" | grep -qE "^/
|
|
124
|
-
ARGS=$(echo "$PROMPT" | sed 's|^/
|
|
122
|
+
# /sw:costs → Execute read-costs.sh (pure bash, ~50ms)
|
|
123
|
+
if echo "$PROMPT" | grep -qE "^/sw:costs($| )"; then
|
|
124
|
+
ARGS=$(echo "$PROMPT" | sed 's|^/sw:costs\s*||')
|
|
125
125
|
if [[ -f "$SCRIPTS_DIR/read-costs.sh" ]]; then
|
|
126
126
|
OUTPUT=$(cd "$(pwd)" && bash "$SCRIPTS_DIR/read-costs.sh" $ARGS 2>&1)
|
|
127
127
|
else
|
|
@@ -133,12 +133,12 @@ if echo "$PROMPT" | grep -qE "^/specweave:costs($| )"; then
|
|
|
133
133
|
fi
|
|
134
134
|
|
|
135
135
|
# ==============================================================================
|
|
136
|
-
# TASK COUNT GUARD: Block /
|
|
136
|
+
# TASK COUNT GUARD: Block /sw:do for oversized increments (v0.32.2+)
|
|
137
137
|
# ==============================================================================
|
|
138
138
|
# >8 tasks = context explosion = CRASH (per CLAUDE.md)
|
|
139
139
|
MAX_TASKS=8
|
|
140
140
|
|
|
141
|
-
if echo "$PROMPT" | grep -qE "^/
|
|
141
|
+
if echo "$PROMPT" | grep -qE "^/sw:do($| )"; then
|
|
142
142
|
# Extract increment ID from prompt
|
|
143
143
|
DO_INCREMENT_ID=$(echo "$PROMPT" | grep -oE "[0-9]{4}[a-zA-Z0-9-]*" | head -1)
|
|
144
144
|
|
|
@@ -205,13 +205,13 @@ fi
|
|
|
205
205
|
# ==============================================================================
|
|
206
206
|
|
|
207
207
|
# ==============================================================================
|
|
208
|
-
# PROJECT CONTEXT + WIP LIMITS FOR /
|
|
208
|
+
# PROJECT CONTEXT + WIP LIMITS FOR /sw:increment (v0.34.0)
|
|
209
209
|
# ==============================================================================
|
|
210
210
|
# CRITICAL: Inject project/board context BEFORE Claude generates spec.md
|
|
211
211
|
# This ensures Claude knows available projects and uses correct IDs
|
|
212
212
|
# ALSO: Check WIP limits in same block to avoid duplicate command detection
|
|
213
213
|
|
|
214
|
-
if echo "$PROMPT" | grep -qE "^/
|
|
214
|
+
if echo "$PROMPT" | grep -qE "^/sw:increment"; then
|
|
215
215
|
# Get project context (uses specweave CLI if available)
|
|
216
216
|
PROJECT_CONTEXT=""
|
|
217
217
|
|
|
@@ -310,7 +310,7 @@ if echo "$PROMPT" | grep -qE "^/specweave:increment"; then
|
|
|
310
310
|
|
|
311
311
|
# Above hard cap: strong warning but NOT a block (user decides!)
|
|
312
312
|
if [[ "$ACTIVE_COUNT" -ge "$HARD_CAP" ]]; then
|
|
313
|
-
WIP_MSG="⚠️ WIP LIMIT EXCEEDED (${ACTIVE_COUNT}/${HARD_CAP})\\n\\nYou have ${ACTIVE_COUNT} active increments (configured maximum: ${HARD_CAP})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Research shows 3+ concurrent tasks = 40%% slower + more bugs\\n\\n💡 Options:\\n 1️⃣ Complete an increment: /
|
|
313
|
+
WIP_MSG="⚠️ WIP LIMIT EXCEEDED (${ACTIVE_COUNT}/${HARD_CAP})\\n\\nYou have ${ACTIVE_COUNT} active increments (configured maximum: ${HARD_CAP})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Research shows 3+ concurrent tasks = 40%% slower + more bugs\\n\\n💡 Options:\\n 1️⃣ Complete an increment: /sw:done <id>\\n 2️⃣ Pause an increment: /sw:pause <id>\\n 3️⃣ Increase limit: Edit .specweave/config.json limits.hardCap\\n 4️⃣ Continue anyway (not recommended)\\n\\n📝 To proceed anyway, just confirm your intent."
|
|
314
314
|
# Prepend project context if available
|
|
315
315
|
if [[ -n "$PROJECT_CONTEXT" ]]; then
|
|
316
316
|
printf '{"decision":"approve","systemMessage":"%s%s"}\n' "$PROJECT_CONTEXT" "$WIP_MSG"
|
|
@@ -322,7 +322,7 @@ if echo "$PROMPT" | grep -qE "^/specweave:increment"; then
|
|
|
322
322
|
|
|
323
323
|
# At soft limit: mild warning, approve
|
|
324
324
|
if [[ "$ACTIVE_COUNT" -ge "$SOFT_LIMIT" ]]; then
|
|
325
|
-
WIP_MSG="⚠️ WIP LIMIT REACHED (${ACTIVE_COUNT}/${SOFT_LIMIT})\\n\\nYou have ${ACTIVE_COUNT} active increment(s) (recommended limit: ${SOFT_LIMIT})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Focus Principle: Fewer active increments = maximum productivity\\n\\n💡 Consider:\\n 1️⃣ Complete current work (recommended)\\n 2️⃣ Pause current work (/
|
|
325
|
+
WIP_MSG="⚠️ WIP LIMIT REACHED (${ACTIVE_COUNT}/${SOFT_LIMIT})\\n\\nYou have ${ACTIVE_COUNT} active increment(s) (recommended limit: ${SOFT_LIMIT})\\n\\nActive increments:\\n${ACTIVE_LIST}\\n\\n🧠 Focus Principle: Fewer active increments = maximum productivity\\n\\n💡 Consider:\\n 1️⃣ Complete current work (recommended)\\n 2️⃣ Pause current work (/sw:pause)\\n 3️⃣ Continue anyway\\n\\n⚠️ Emergency hotfix/bug? Use --type=hotfix or --type=bug"
|
|
326
326
|
# Prepend project context if available
|
|
327
327
|
if [[ -n "$PROJECT_CONTEXT" ]]; then
|
|
328
328
|
printf '{"decision":"approve","systemMessage":"%s%s"}\n' "$PROJECT_CONTEXT" "$WIP_MSG"
|
|
@@ -380,7 +380,7 @@ if [[ -n "$ACTIVE_INCREMENT" ]] && echo "$PROMPT" | grep -qE "/(specweave:)?(syn
|
|
|
380
380
|
if [[ -f "$SPEC_FILE" ]] && [[ -f "$PLAN_FILE" ]]; then
|
|
381
381
|
# Check if spec is newer than plan (indicates spec changes need sync)
|
|
382
382
|
if [[ -n $(find "$SPEC_FILE" -newer "$PLAN_FILE" 2>/dev/null) ]]; then
|
|
383
|
-
printf '{"decision":"approve","systemMessage":"⚠️ Spec changes detected in %s\\n\\nspec.md has been modified after plan.md.\\nConsider running /
|
|
383
|
+
printf '{"decision":"approve","systemMessage":"⚠️ Spec changes detected in %s\\n\\nspec.md has been modified after plan.md.\\nConsider running /sw:sync-docs to update living documentation."}\n' "$ACTIVE_INCREMENT"
|
|
384
384
|
exit 0
|
|
385
385
|
fi
|
|
386
386
|
fi
|
|
@@ -437,14 +437,14 @@ fi
|
|
|
437
437
|
# COMMAND SUGGESTIONS: Guide users to structured workflow
|
|
438
438
|
# ==============================================================================
|
|
439
439
|
|
|
440
|
-
if echo "$PROMPT" | grep -qiE "(add|create|implement|build|develop)" && ! echo "$PROMPT" | grep -q "/
|
|
440
|
+
if echo "$PROMPT" | grep -qiE "(add|create|implement|build|develop)" && ! echo "$PROMPT" | grep -q "/sw:"; then
|
|
441
441
|
if [[ -n "$CONTEXT" ]]; then
|
|
442
442
|
CONTEXT="$CONTEXT
|
|
443
443
|
|
|
444
444
|
💡 TIP: Consider using SpecWeave commands for structured development:
|
|
445
|
-
- /
|
|
446
|
-
- /
|
|
447
|
-
- /
|
|
445
|
+
- /sw:increment \"feature name\" # Plan new increment
|
|
446
|
+
- /sw:do # Execute current tasks
|
|
447
|
+
- /sw:progress # Check progress"
|
|
448
448
|
fi
|
|
449
449
|
fi
|
|
450
450
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# completion-guard.sh - Block direct editing of metadata.json to "completed" status
|
|
3
3
|
#
|
|
4
4
|
# v0.28.63+: Prevents the auto-completion bug by blocking direct status changes to completed.
|
|
5
|
-
# Status MUST go through ready_for_review first, and only /
|
|
5
|
+
# Status MUST go through ready_for_review first, and only /sw:done can mark completed.
|
|
6
6
|
#
|
|
7
7
|
# PreToolUse hook - can BLOCK the tool call by returning non-zero exit code
|
|
8
8
|
#
|
|
@@ -57,7 +57,7 @@ if echo "$NEW_CONTENT" | grep -q '"status"[[:space:]]*:[[:space:]]*"completed"';
|
|
|
57
57
|
echo ""
|
|
58
58
|
echo "CORRECT WORKFLOW:"
|
|
59
59
|
echo "1. All tasks completed -> status auto-transitions to \"ready_for_review\""
|
|
60
|
-
echo "2. Run /
|
|
60
|
+
echo "2. Run /sw:done <increment-id> with explicit user confirmation"
|
|
61
61
|
echo "3. Only then does status become \"completed\""
|
|
62
62
|
echo ""
|
|
63
63
|
echo "WHY THIS MATTERS:"
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# Pre-tool-use hook that ensures metadata.json exists BEFORE spec.md can be created.
|
|
6
6
|
# This prevents increments from being created without proper metadata.
|
|
7
7
|
#
|
|
8
|
-
# ROOT CAUSE: When Claude creates increments via user prompt (not /
|
|
8
|
+
# ROOT CAUSE: When Claude creates increments via user prompt (not /sw:increment),
|
|
9
9
|
# metadata.json may be forgotten, causing:
|
|
10
10
|
# - Status tracking broken
|
|
11
11
|
# - WIP limits don't work
|
|
@@ -38,7 +38,7 @@ if [[ -f "$THROTTLE_FILE" ]]; then
|
|
|
38
38
|
fi
|
|
39
39
|
if [[ $AGE -lt $THROTTLE_WINDOW ]]; then
|
|
40
40
|
REMAINING=$((THROTTLE_WINDOW - AGE))
|
|
41
|
-
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [github-sync] THROTTLED $INC_ID (wait ${REMAINING}s, use /
|
|
41
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [github-sync] THROTTLED $INC_ID (wait ${REMAINING}s, use /sw:sync-progress to bypass)" >> "$THROTTLE_LOG" 2>/dev/null
|
|
42
42
|
exit 0
|
|
43
43
|
fi
|
|
44
44
|
fi
|