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
package/CLAUDE.md
CHANGED
|
@@ -15,8 +15,8 @@ For **contributors to SpecWeave itself** (not users).
|
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
17
|
# Before editing large files outside increment:
|
|
18
|
-
/
|
|
19
|
-
# OR close completed increments: /
|
|
18
|
+
/sw:pause XXXX → edit → /sw:resume XXXX
|
|
19
|
+
# OR close completed increments: /sw:done XXXX
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
### 1b. Max 25 Tasks Per Increment (SOFT LIMIT)
|
|
@@ -65,7 +65,7 @@ Edit("metadata.json", '"status": "active"', '"status": "completed"')
|
|
|
65
65
|
|
|
66
66
|
✅ CORRECT workflow:
|
|
67
67
|
1. All tasks completed → auto-transition to "ready_for_review"
|
|
68
|
-
2. /
|
|
68
|
+
2. /sw:done <id> → validates ACs + asks for user confirmation
|
|
69
69
|
3. Only then → status becomes "completed" with approvedAt timestamp
|
|
70
70
|
```
|
|
71
71
|
|
|
@@ -77,61 +77,69 @@ MetadataManager.updateStatus(incrementId, IncrementStatus.COMPLETED);
|
|
|
77
77
|
// Only succeeds if current status is "ready_for_review"
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
### 2c.
|
|
80
|
+
### 2c. Per-US **Project**: Fields are PRIMARY Source of Truth (ADR-0140, v0.35.0+)
|
|
81
81
|
|
|
82
|
-
**
|
|
82
|
+
**Frontmatter `project:` and `board:` are OPTIONAL** - per-US fields are now PRIMARY!
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
# Parse the JSON output:
|
|
91
|
-
# 1-level: {"level": 1, "projects": [{"id": "frontend-app"}, {"id": "backend-api"}]}
|
|
92
|
-
# 2-level: {"level": 2, "projects": [...], "boardsByProject": {"project-id": [{"id": "board-1"}]}}
|
|
93
|
-
|
|
94
|
-
# USE the actual IDs from the output - NEVER use placeholders!
|
|
95
|
-
```
|
|
84
|
+
**Resolution Priority Chain** (ProjectResolutionService):
|
|
85
|
+
1. Per-US `**Project**:` fields (highest priority)
|
|
86
|
+
2. `config.json` → `project.name` (single-project mode)
|
|
87
|
+
3. Intelligent detection (keywords, tech stack)
|
|
88
|
+
4. Ultimate fallback: "default"
|
|
96
89
|
|
|
97
90
|
```yaml
|
|
98
|
-
#
|
|
99
|
-
---
|
|
100
|
-
increment: 0001-feature-name
|
|
101
|
-
project: frontend-app # ← RESOLVED from context API (NOT {{PROJECT_ID}})
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
# 2-level structure (BOTH RESOLVED):
|
|
91
|
+
# NEW (v0.35.0+): Frontmatter project: is OPTIONAL
|
|
105
92
|
---
|
|
106
93
|
increment: 0001-feature-name
|
|
107
|
-
project:
|
|
108
|
-
|
|
94
|
+
# NOTE: project: field REMOVED per ADR-0140
|
|
95
|
+
# Project is resolved from per-US **Project**: fields or config
|
|
109
96
|
---
|
|
110
97
|
```
|
|
111
98
|
|
|
112
|
-
**Per-US Project/Board (
|
|
99
|
+
**Per-US Project/Board (PRIMARY SOURCE in spec.md):**
|
|
113
100
|
```markdown
|
|
114
101
|
### US-001: Login Form
|
|
115
|
-
**Project**: frontend-app # ←
|
|
116
|
-
**Board**: ui-team # ←
|
|
102
|
+
**Project**: frontend-app # ← PRIMARY source of truth (in spec.md BODY)
|
|
103
|
+
**Board**: ui-team # ← Required for 2-level structures only
|
|
117
104
|
```
|
|
118
105
|
|
|
119
|
-
**
|
|
106
|
+
**CRITICAL: Two File Formats for Project Field**
|
|
107
|
+
|
|
108
|
+
1. **spec.md** (increment folder): `**Project**:` in BODY of each user story
|
|
109
|
+
2. **us-*.md** (living docs folder): `project:` in FRONTMATTER
|
|
110
|
+
|
|
111
|
+
When living docs sync runs, it extracts `**Project**:` from spec.md body and places it in us-*.md frontmatter:
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
# us-001-login-form.md frontmatter (living docs)
|
|
115
|
+
---
|
|
116
|
+
id: US-001
|
|
117
|
+
project: frontend-app # ← Extracted from spec.md **Project**: field
|
|
118
|
+
---
|
|
120
119
|
```
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
120
|
+
|
|
121
|
+
**Code Implementation Rules:**
|
|
122
|
+
- **Generating GitHub issues**: Read from `frontmatter.project` in us-*.md files
|
|
123
|
+
- **Parsing spec.md**: Extract from `**Project**:` in body using regex
|
|
124
|
+
- **Living docs sync**: Transforms body field → frontmatter field
|
|
125
|
+
|
|
126
|
+
**VALIDATION RULES (ENFORCED BY HOOKS):**
|
|
127
|
+
```
|
|
128
|
+
✅ Per-US **Project**: fields are PRIMARY source
|
|
129
|
+
✅ Frontmatter project:/board: are OPTIONAL (deprecated but allowed)
|
|
130
|
+
✅ Single-project mode: auto-resolves from config.project.name
|
|
131
|
+
❌ FORBIDDEN: Using {{...}} placeholders in spec.md
|
|
132
|
+
❌ FORBIDDEN: User stories without **Project**: field (multi-project mode)
|
|
133
|
+
❌ FORBIDDEN: Multiple comma-separated projects per US
|
|
129
134
|
```
|
|
130
135
|
|
|
136
|
+
**Pre-tool-use hook `spec-project-validator.sh` ALLOWS:**
|
|
137
|
+
- spec.md WITHOUT frontmatter `project:` field (new best practice)
|
|
138
|
+
- spec.md WITHOUT frontmatter `board:` field
|
|
139
|
+
|
|
131
140
|
**Pre-tool-use hook `spec-project-validator.sh` BLOCKS:**
|
|
132
|
-
- spec.md with `{{...}}` placeholders
|
|
133
|
-
-
|
|
134
|
-
- spec.md (2-level) without `board:` field
|
|
141
|
+
- spec.md with `{{...}}` unresolved placeholders
|
|
142
|
+
- Frontmatter project: that doesn't match config (if present)
|
|
135
143
|
- User stories with unresolved `**Project**:` or `**Board**:` placeholders
|
|
136
144
|
|
|
137
145
|
### 2c-bis. Each User Story MUST Have **Project**: (and **Board**: for 2-level) (v0.34.0+)
|
|
@@ -202,9 +210,10 @@ SPECWEAVE_LEGACY_SPEC=1 # Allow legacy specs without per-US fields
|
|
|
202
210
|
.specweave/docs/internal/specs/{project}/FS-116/FEATURE.md
|
|
203
211
|
```
|
|
204
212
|
|
|
205
|
-
**Where `{project}` comes from:**
|
|
206
|
-
1.
|
|
207
|
-
2.
|
|
213
|
+
**Where `{project}` comes from (ADR-0140 v0.35.0+):**
|
|
214
|
+
1. Per-US `**Project**:` field (PRIMARY - recommended)
|
|
215
|
+
2. `config.json` → `project.name` (single-project mode fallback)
|
|
216
|
+
3. Example: `**Project**: specweave` → `.specweave/docs/internal/specs/specweave/FS-116/`
|
|
208
217
|
|
|
209
218
|
**Pre-tool-use hook `features-folder-guard.sh` BLOCKS writes to `_features/` (v0.33.0+).**
|
|
210
219
|
|
|
@@ -237,36 +246,44 @@ SPECWEAVE_LEGACY_SPEC=1 # Allow legacy specs without per-US fields
|
|
|
237
246
|
|
|
238
247
|
**Pre-tool-use hook `increment-root-guard.sh` BLOCKS non-standard files at root (v0.33.0+).**
|
|
239
248
|
|
|
240
|
-
### 2f. NEVER Create Duplicate Increment IDs (v0.33.0
|
|
249
|
+
### 2f. NEVER Create Duplicate Increment IDs (v0.33.0+, enhanced v0.34.0)
|
|
241
250
|
|
|
242
251
|
**Increment numbers MUST be unique across ALL directories!**
|
|
243
252
|
|
|
244
253
|
```
|
|
245
|
-
❌ FORBIDDEN (Bug pattern from 2025-12-07):
|
|
254
|
+
❌ FORBIDDEN (Bug pattern from 2025-12-07 and 2025-12-10):
|
|
246
255
|
0121-ado-jira-feature-parity-p2-p3/ ← exists
|
|
247
256
|
0121-intelligent-living-docs-content/ ← DUPLICATE!
|
|
248
257
|
|
|
258
|
+
❌ ALSO FORBIDDEN when splitting increments:
|
|
259
|
+
0141-frontmatter-removal-part1/ ← exists (original split)
|
|
260
|
+
0141-frontmatter-removal-code/ ← DUPLICATE! (created later with same ID)
|
|
261
|
+
|
|
249
262
|
❌ ALSO FORBIDDEN (0001 and 0001E share SAME base number):
|
|
250
263
|
0001-internal-feature/
|
|
251
264
|
0001E-external-fix/ ← COLLISION! Same base number!
|
|
252
265
|
```
|
|
253
266
|
|
|
254
|
-
**
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
✅ Check ALL directories: active, _archive, _abandoned, _paused
|
|
259
|
-
```
|
|
267
|
+
**MULTI-LAYER PREVENTION (v0.34.0+):**
|
|
268
|
+
1. **Code-level**: `generateIncrementId()` now validates by default
|
|
269
|
+
2. **Hook-level**: `increment-duplicate-guard.sh` blocks Write operations
|
|
270
|
+
3. **Split-level**: Use `validateExplicitId()` when manually specifying IDs
|
|
260
271
|
|
|
261
|
-
**API (v0.
|
|
272
|
+
**API (v0.34.0+):**
|
|
262
273
|
```typescript
|
|
263
274
|
import { IncrementNumberManager } from './core/increment/increment-utils.js';
|
|
264
275
|
|
|
265
|
-
//
|
|
266
|
-
const id = IncrementNumberManager.
|
|
267
|
-
// → "0122-feature-name" (guaranteed unique)
|
|
276
|
+
// RECOMMENDED: Auto-generated ID (validates by default)
|
|
277
|
+
const id = IncrementNumberManager.generateIncrementId('feature-name');
|
|
278
|
+
// → "0122-feature-name" (guaranteed unique, throws if duplicate)
|
|
279
|
+
|
|
280
|
+
// For explicit IDs (e.g., splits): MUST validate first!
|
|
281
|
+
IncrementNumberManager.validateExplicitId('0145-split-part2');
|
|
282
|
+
// → Throws if 0145 already exists!
|
|
283
|
+
|
|
284
|
+
// Then create folder only if validation passes
|
|
268
285
|
|
|
269
|
-
// Manual validation:
|
|
286
|
+
// Manual validation (still available):
|
|
270
287
|
IncrementNumberManager.validateUnique('0121-new-name'); // throws if duplicate!
|
|
271
288
|
|
|
272
289
|
// Find duplicates:
|
|
@@ -274,6 +291,17 @@ IncrementNumberManager.findDuplicates('0121');
|
|
|
274
291
|
// → ["0121-ado-jira-feature (active)", "0121-intelligent-living-docs (active)"]
|
|
275
292
|
```
|
|
276
293
|
|
|
294
|
+
**CRITICAL: When Splitting Increments:**
|
|
295
|
+
```typescript
|
|
296
|
+
// ❌ WRONG - Manually specifying ID without validation:
|
|
297
|
+
const splitId = '0141-feature-part2'; // May conflict!
|
|
298
|
+
fs.mkdirSync(path.join(incrementsDir, splitId));
|
|
299
|
+
|
|
300
|
+
// ✅ CORRECT - Validate first:
|
|
301
|
+
IncrementNumberManager.validateExplicitId('0145-feature-part2'); // Throws if exists!
|
|
302
|
+
// Only proceed if no error thrown
|
|
303
|
+
```
|
|
304
|
+
|
|
277
305
|
**Pre-tool-use hook `increment-duplicate-guard.sh` BLOCKS duplicate increment creation (v0.33.0+).**
|
|
278
306
|
|
|
279
307
|
### 2f. Gap-Filling Increment IDs (v0.33.1+)
|
|
@@ -314,6 +342,249 @@ IncrementNumberManager.getNextIncrementNumber(); // "0001" ← Starts from begin
|
|
|
314
342
|
|
|
315
343
|
**Details:** See ADR-0142 (`.specweave/docs/internal/architecture/adr/0142-gap-filling-increment-ids.md`)
|
|
316
344
|
|
|
345
|
+
### 2g. NEVER Create Project Folders Without Validation (v0.34.0+, fixed v0.35.1)
|
|
346
|
+
|
|
347
|
+
**Project folders MUST exist in config.json before creation!**
|
|
348
|
+
|
|
349
|
+
```
|
|
350
|
+
❌ FORBIDDEN (Bug pattern from 2025-12-11):
|
|
351
|
+
.specweave/docs/internal/specs/MyApp (3 repos)/ ← Example from spec.md!
|
|
352
|
+
.specweave/docs/internal/specs/frontend-app/ ← Example from spec.md!
|
|
353
|
+
.specweave/docs/internal/specs/backend-api/ ← Example from spec.md!
|
|
354
|
+
.specweave/docs/internal/specs/acme-corp/ ← Example from spec.md!
|
|
355
|
+
.specweave/docs/internal/specs/{{PROJECT_ID}}.../ ← Unresolved placeholder!
|
|
356
|
+
|
|
357
|
+
✅ CORRECT - Only configured projects:
|
|
358
|
+
.specweave/docs/internal/specs/specweave/ (exists in config.json)
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**ROOT CAUSE (Fixed in v0.35.1):**
|
|
362
|
+
- Increments contain EXAMPLE User Stories with placeholder `**Project**:` values
|
|
363
|
+
- `extractUserStoryProjectInfo()` in parsers.ts extracts ANY string after `**Project**:`
|
|
364
|
+
- When sync runs, creates folders for ALL projects mentioned, including examples
|
|
365
|
+
- v0.35.1 FIX: `ProjectResolutionService.validateProjectForFolderCreation()` now validates BEFORE folder creation
|
|
366
|
+
|
|
367
|
+
**KNOWN EXAMPLE PROJECT NAMES (ALWAYS BLOCKED unless configured):**
|
|
368
|
+
- `frontend-app`, `backend-api`, `mobile-app`, `shared-lib`
|
|
369
|
+
- `acme-corp`, `my-app`, `myapp`, `example-project`, `sample-project`
|
|
370
|
+
- `test-project`, `demo`, `placeholder`, `per`, `default`
|
|
371
|
+
|
|
372
|
+
**MULTI-LAYER PROTECTION (v0.35.1+):**
|
|
373
|
+
1. **Code-level**: `ProjectResolutionService.validateProjectForFolderCreation()` validates in TypeScript
|
|
374
|
+
2. **Living-docs-sync**: Filters out invalid projects BEFORE calling `ensureDir()`
|
|
375
|
+
3. **Cross-project-sync**: `ensureSpecsFolder()` throws Error if project invalid
|
|
376
|
+
4. **Hook-level**: `project-folder-guard.sh` blocks Write operations to invalid folders
|
|
377
|
+
|
|
378
|
+
**EXAMPLES OF FORBIDDEN PATTERNS:**
|
|
379
|
+
```markdown
|
|
380
|
+
### US-001: Example Login Form
|
|
381
|
+
**Project**: MyApp (3 repos) ← FORBIDDEN (parentheses not allowed!)
|
|
382
|
+
|
|
383
|
+
### US-002: Example API
|
|
384
|
+
**Project**: frontend-app, backend-api ← FORBIDDEN (comma-separated!)
|
|
385
|
+
|
|
386
|
+
### US-003: Placeholder Story
|
|
387
|
+
**Project**: acme-corp ← FORBIDDEN (example name not in config!)
|
|
388
|
+
|
|
389
|
+
### US-004: Unresolved
|
|
390
|
+
**Project**: {{PROJECT_ID}} ← FORBIDDEN (unresolved placeholder!)
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
**VALIDATION RULES (ENFORCED BY CODE + HOOK):**
|
|
394
|
+
```
|
|
395
|
+
❌ FORBIDDEN: Creating folders for projects not in config.json
|
|
396
|
+
❌ FORBIDDEN: Example/placeholder project names (see list above)
|
|
397
|
+
❌ FORBIDDEN: Parentheses in project names (e.g., "MyApp (3 repos)")
|
|
398
|
+
❌ FORBIDDEN: Comma-separated projects (must be ONE project per US)
|
|
399
|
+
❌ FORBIDDEN: Template placeholders like {{PROJECT_ID}}
|
|
400
|
+
|
|
401
|
+
✅ REQUIRED: All projects MUST be in config.project.name (single) or config.multiProject.projects (multi)
|
|
402
|
+
✅ REQUIRED: Run `specweave context projects` to get valid project IDs
|
|
403
|
+
✅ REQUIRED: Use RESOLVED values from config, never placeholders
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**BYPASS (EMERGENCY ONLY):**
|
|
407
|
+
```bash
|
|
408
|
+
SPECWEAVE_FORCE_PROJECT=1 # Skip project folder validation (DANGEROUS!)
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**API for validation (v0.35.1+):**
|
|
412
|
+
```typescript
|
|
413
|
+
import { ProjectResolutionService } from './core/project/project-resolution.js';
|
|
414
|
+
|
|
415
|
+
const resolver = new ProjectResolutionService(projectRoot);
|
|
416
|
+
|
|
417
|
+
// Validate before folder creation
|
|
418
|
+
const validation = await resolver.validateProjectForFolderCreation('frontend-app');
|
|
419
|
+
if (!validation.valid) {
|
|
420
|
+
console.error(`Cannot create folder: ${validation.reason}`);
|
|
421
|
+
console.log(`Allowed projects: ${validation.allowedProjects.join(', ')}`);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// Static sync check for hooks
|
|
425
|
+
if (ProjectResolutionService.isExampleProjectName('frontend-app')) {
|
|
426
|
+
// Block - it's a known example name
|
|
427
|
+
}
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
**Pre-tool-use hook `project-folder-guard.sh` BLOCKS writes to non-configured project folders (v0.35.1 enhanced).**
|
|
431
|
+
|
|
432
|
+
### 2h. Single-Project-First Architecture (v0.34.0+)
|
|
433
|
+
|
|
434
|
+
**SpecWeave defaults to single-project mode** for 99% of users. Multi-project is an explicit opt-in.
|
|
435
|
+
|
|
436
|
+
```
|
|
437
|
+
DEFAULT: Single-project mode (multiProject.enabled=false)
|
|
438
|
+
OPT-IN: Multi-project mode (/sw:enable-multiproject)
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
**Why Single-Project-First?**
|
|
442
|
+
- **Simplicity**: Most repos have one project → no need for project complexity
|
|
443
|
+
- **No Accidental Folders**: Example user stories don't create random project folders
|
|
444
|
+
- **Clear Migration Path**: Explicit command when you need multi-project features
|
|
445
|
+
- **Backwards Compatible**: Existing multi-project setups unaffected
|
|
446
|
+
|
|
447
|
+
#### Single-Project Mode (Default)
|
|
448
|
+
|
|
449
|
+
```json
|
|
450
|
+
// config.json - single project
|
|
451
|
+
{
|
|
452
|
+
"project": {
|
|
453
|
+
"name": "my-app",
|
|
454
|
+
"description": "My Application",
|
|
455
|
+
"techStack": ["TypeScript", "React"]
|
|
456
|
+
},
|
|
457
|
+
"multiProject": {
|
|
458
|
+
"enabled": false // ← Default!
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
**Behavior**:
|
|
464
|
+
- All increments go to same project folder
|
|
465
|
+
- No `project:` field required in spec.md (optional)
|
|
466
|
+
- No `board:` field allowed (always blocked)
|
|
467
|
+
- Living docs auto-use `project.name`
|
|
468
|
+
|
|
469
|
+
**Commands**:
|
|
470
|
+
```bash
|
|
471
|
+
specweave init . # Creates single-project config by default
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
#### Multi-Project Mode (Opt-In)
|
|
475
|
+
|
|
476
|
+
```json
|
|
477
|
+
// config.json - multi-project (after migration)
|
|
478
|
+
{
|
|
479
|
+
"multiProject": {
|
|
480
|
+
"enabled": true,
|
|
481
|
+
"activeProject": "frontend-app",
|
|
482
|
+
"projects": {
|
|
483
|
+
"frontend-app": {
|
|
484
|
+
"name": "Frontend App",
|
|
485
|
+
"techStack": ["TypeScript", "React"]
|
|
486
|
+
},
|
|
487
|
+
"backend-api": {
|
|
488
|
+
"name": "Backend API",
|
|
489
|
+
"techStack": ["Node.js", "Express"]
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
**Behavior**:
|
|
497
|
+
- Each increment requires `project:` field in spec.md
|
|
498
|
+
- Living docs distributed across project folders
|
|
499
|
+
- Can switch between projects with `/sw:switch-project`
|
|
500
|
+
|
|
501
|
+
**Commands**:
|
|
502
|
+
```bash
|
|
503
|
+
/sw:enable-multiproject # Explicit opt-in with confirmation
|
|
504
|
+
/sw:switch-project # Change active project
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
#### When to Enable Multi-Project?
|
|
508
|
+
|
|
509
|
+
| Scenario | Use Single-Project | Use Multi-Project |
|
|
510
|
+
|----------|-------------------|-------------------|
|
|
511
|
+
| One repository, one application | ✅ Default | ❌ Unnecessary |
|
|
512
|
+
| Monorepo with 2-3 services | ✅ Simpler | ⚠️ Optional |
|
|
513
|
+
| 5+ services/teams | ❌ Too simple | ✅ Recommended |
|
|
514
|
+
| Multi-repo (umbrella) | ❌ Not supported | ✅ Required |
|
|
515
|
+
|
|
516
|
+
**Migration Example**:
|
|
517
|
+
```bash
|
|
518
|
+
# You start with single-project (default):
|
|
519
|
+
# project.name = "my-app"
|
|
520
|
+
# multiProject.enabled = false
|
|
521
|
+
|
|
522
|
+
# Later, you need multi-project features:
|
|
523
|
+
/sw:enable-multiproject
|
|
524
|
+
|
|
525
|
+
# Prompts for confirmation, then:
|
|
526
|
+
# 1. Migrates project → multiProject.projects
|
|
527
|
+
# 2. Sets multiProject.enabled = true
|
|
528
|
+
# 3. Creates project folders
|
|
529
|
+
# 4. Updates existing increments with project: field
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
#### Validation Rules
|
|
533
|
+
|
|
534
|
+
**Single-Project Mode**:
|
|
535
|
+
```markdown
|
|
536
|
+
# spec.md frontmatter
|
|
537
|
+
---
|
|
538
|
+
increment: 0001-feature
|
|
539
|
+
project: my-app # ← OPTIONAL (auto-filled if missing)
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
# User story
|
|
543
|
+
### US-001: Feature Name
|
|
544
|
+
**Project**: my-app # ← OPTIONAL (ignored in single-project)
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
**Multi-Project Mode**:
|
|
548
|
+
```markdown
|
|
549
|
+
# spec.md frontmatter
|
|
550
|
+
---
|
|
551
|
+
increment: 0001-feature
|
|
552
|
+
project: frontend-app # ← REQUIRED
|
|
553
|
+
---
|
|
554
|
+
|
|
555
|
+
# User story
|
|
556
|
+
### US-001: Feature Name
|
|
557
|
+
**Project**: frontend-app # ← REQUIRED (validated against config)
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
#### Automatic Migration (v0.34.0+)
|
|
561
|
+
|
|
562
|
+
**SpecWeave auto-detects single-project repos with incorrect config:**
|
|
563
|
+
|
|
564
|
+
```
|
|
565
|
+
If config.multiProject.enabled = true
|
|
566
|
+
AND only 1 project in multiProject.projects
|
|
567
|
+
THEN auto-migrate to single-project mode
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
This fixes the bug where `specweave init` created multi-project configs by default.
|
|
571
|
+
|
|
572
|
+
**Migration log**: `.specweave/logs/migration.log`
|
|
573
|
+
|
|
574
|
+
#### Troubleshooting
|
|
575
|
+
|
|
576
|
+
**Error**: "Project folders created for example names (MyApp, frontend-app)"
|
|
577
|
+
**Cause**: Old bug - auto-enabled multi-project mode
|
|
578
|
+
**Fix**: Auto-migration runs on next command. Check `migration.log`.
|
|
579
|
+
|
|
580
|
+
**Error**: "board: field not allowed"
|
|
581
|
+
**Cause**: Using `board:` in single-project mode
|
|
582
|
+
**Fix**: Remove `board:` field OR run `/sw:enable-multiproject`
|
|
583
|
+
|
|
584
|
+
**Error**: "Only folder allowed: my-app"
|
|
585
|
+
**Cause**: Trying to create non-configured project folder
|
|
586
|
+
**Fix**: Check `project.name` in config OR run `/sw:enable-multiproject`
|
|
587
|
+
|
|
317
588
|
### 3. Protected Directories
|
|
318
589
|
|
|
319
590
|
**NEVER delete**: `.specweave/docs/`, `.specweave/increments/`
|
|
@@ -464,13 +735,14 @@ rm -f .specweave/state/.dedup-cache/*.lock
|
|
|
464
735
|
|
|
465
736
|
**Mental model**: Bash = "run a program". Write/Edit/Read = "modify files".
|
|
466
737
|
|
|
467
|
-
### 11. Notifications - MUST Be Non-Alarming (v0.33.4+)
|
|
738
|
+
### 11. Notifications - MUST Be Non-Alarming AND Non-Blocking (v0.33.4+)
|
|
468
739
|
|
|
469
740
|
**All notifications are INFORMATIVE only - NEVER alarming!** Every notification MUST:
|
|
470
741
|
1. **WHO** sent it (always start with "SpecWeave:")
|
|
471
742
|
2. **WHAT** happened (specific action, not vague alert)
|
|
472
743
|
3. **ACTION** needed (or "No action needed" if informational)
|
|
473
744
|
4. **NEVER trigger alert icon** - no red/warning badges!
|
|
745
|
+
5. **NEVER block execution** - fire-and-forget pattern ONLY!
|
|
474
746
|
|
|
475
747
|
```
|
|
476
748
|
❌ FORBIDDEN (alarming):
|
|
@@ -478,12 +750,48 @@ Title: "🚨 Zombie Cleanup" ← Emoji overload
|
|
|
478
750
|
Sound: "Basso" ← Shows RED ALERT ICON - NEVER USE!
|
|
479
751
|
Message: "Cleaned up 5 processes" ← Too vague
|
|
480
752
|
|
|
481
|
-
|
|
753
|
+
❌ FORBIDDEN (blocking):
|
|
754
|
+
execSync(`osascript -e 'display notification...'`) ← BLOCKS main thread!
|
|
755
|
+
await exec(`osascript -e 'display notification...'`) ← BLOCKS cleanup/exit!
|
|
756
|
+
|
|
757
|
+
✅ CORRECT (explicit, calm, non-blocking):
|
|
482
758
|
Title: "SpecWeave: Cleanup Done" ← Clear source
|
|
483
759
|
Sound: "Pop" or "Submarine" ← Neutral sounds ONLY
|
|
484
760
|
Message: "Cleaned up 5 zombie processes. No action needed."
|
|
761
|
+
exec(`osascript...`, (error) => { /* log */ }) ← Fire-and-forget!
|
|
485
762
|
```
|
|
486
763
|
|
|
764
|
+
**CRITICAL: Fire-and-Forget Pattern (v0.33.6+)**
|
|
765
|
+
|
|
766
|
+
**⛔ NEVER use `execSync()` or `await exec()` for notifications!**
|
|
767
|
+
- Notifications MUST be **fire-and-forget** to prevent blocking Claude Code
|
|
768
|
+
- macOS `osascript` can take 1-2 seconds → blocks session if awaited
|
|
769
|
+
- Use callback-based `exec()` WITHOUT await/Promise wrapping
|
|
770
|
+
|
|
771
|
+
```typescript
|
|
772
|
+
// ❌ WRONG - BLOCKS execution!
|
|
773
|
+
execSync(`osascript -e 'display notification...'`);
|
|
774
|
+
await exec(`osascript -e 'display notification...'`);
|
|
775
|
+
|
|
776
|
+
// ✅ CORRECT - Fire-and-forget!
|
|
777
|
+
import('child_process').then(cp => {
|
|
778
|
+
cp.exec(`osascript -e 'display notification...'`, (error) => {
|
|
779
|
+
if (error) logger.debug(`Notification failed: ${error.message}`);
|
|
780
|
+
});
|
|
781
|
+
});
|
|
782
|
+
|
|
783
|
+
// Or using require (CommonJS):
|
|
784
|
+
const { exec } = require('child_process');
|
|
785
|
+
exec(`osascript -e 'display notification...'`, (error) => {
|
|
786
|
+
if (error) logger.debug(`Notification failed: ${error.message}`);
|
|
787
|
+
});
|
|
788
|
+
```
|
|
789
|
+
|
|
790
|
+
**Files using notifications MUST follow fire-and-forget pattern:**
|
|
791
|
+
- [src/utils/platform-utils.ts](src/utils/platform-utils.ts) (uses dynamic import)
|
|
792
|
+
- [src/utils/notification-manager.ts](src/utils/notification-manager.ts) (resolves immediately)
|
|
793
|
+
- [src/cli/cleanup-zombies.ts](src/cli/cleanup-zombies.ts) (uses childProcess.exec callback)
|
|
794
|
+
|
|
487
795
|
**Sound selection rules (macOS only, other OS have no sound param):**
|
|
488
796
|
| Sound | When to use |
|
|
489
797
|
|-------|-------------|
|
|
@@ -508,7 +816,10 @@ const msg = buildNotificationMessage('cleanup', { count: 5 }); // "Cleaned up 5
|
|
|
508
816
|
const sound = getSoundForType('cleanup'); // "Pop" (NEVER returns "Basso")
|
|
509
817
|
```
|
|
510
818
|
|
|
511
|
-
**Code review should verify
|
|
819
|
+
**Code review should verify:**
|
|
820
|
+
1. Notification messages follow WHO/WHAT/ACTION pattern
|
|
821
|
+
2. All notification calls use fire-and-forget (no await/execSync)
|
|
822
|
+
3. macOS notifications use dynamic import or callback pattern
|
|
512
823
|
|
|
513
824
|
---
|
|
514
825
|
|
|
@@ -521,7 +832,7 @@ git add . && git commit -m "feat: feature" && git push origin develop
|
|
|
521
832
|
```
|
|
522
833
|
|
|
523
834
|
**Marketplace**: `bash scripts/refresh-marketplace.sh` (GitHub mode, always use)
|
|
524
|
-
**NPM Release**: `/
|
|
835
|
+
**NPM Release**: `/sw-release:npm`
|
|
525
836
|
|
|
526
837
|
---
|
|
527
838
|
|
|
@@ -652,7 +963,7 @@ board: digital-operations # REQUIRED for 2-level structures
|
|
|
652
963
|
Use `DuplicateDetector.createWithProtection()`, NEVER `--limit 1` in gh searches
|
|
653
964
|
|
|
654
965
|
### AC Presence in spec.md
|
|
655
|
-
**MANDATORY** - even with external living docs. Use `/
|
|
966
|
+
**MANDATORY** - even with external living docs. Use `/sw:embed-acs` if missing.
|
|
656
967
|
|
|
657
968
|
### Git Provider Abstraction
|
|
658
969
|
Use `getPlatformRegistry().getProvider('github')`. NEVER hardcode platform names/endpoints.
|
|
@@ -661,20 +972,66 @@ Use `getPlatformRegistry().getProvider('github')`. NEVER hardcode platform names
|
|
|
661
972
|
|
|
662
973
|
## Configuration
|
|
663
974
|
|
|
664
|
-
|
|
665
|
-
|
|
975
|
+
### Secrets vs Configuration (v0.34.0+ MANDATORY)
|
|
976
|
+
|
|
977
|
+
**CRITICAL**: Configuration values MUST NOT be in .env. Use config.json via ConfigManager.
|
|
978
|
+
|
|
979
|
+
**Secrets** (`.env`, gitignored):
|
|
980
|
+
- `AZURE_DEVOPS_PAT` - Personal Access Token
|
|
981
|
+
- `JIRA_API_TOKEN` - API Token
|
|
982
|
+
- `JIRA_EMAIL` - Auth email
|
|
983
|
+
- `GH_TOKEN` / `GITHUB_TOKEN` - GitHub token
|
|
984
|
+
|
|
985
|
+
**Config** (`.specweave/config.json`, committed):
|
|
986
|
+
- `issueTracker.domain` - JIRA domain (e.g., "company.atlassian.net")
|
|
987
|
+
- `issueTracker.organization_ado` - ADO organization name
|
|
988
|
+
- `issueTracker.project` - Project name
|
|
989
|
+
- `sync.profiles` - Sync profile configurations
|
|
990
|
+
|
|
991
|
+
### FORBIDDEN Patterns (Pre-tool-use hook blocks these)
|
|
992
|
+
```typescript
|
|
993
|
+
// NEVER DO THIS in src/ files:
|
|
994
|
+
const domain = process.env.JIRA_DOMAIN; // VIOLATION!
|
|
995
|
+
const org = process.env.AZURE_DEVOPS_ORG; // VIOLATION!
|
|
996
|
+
|
|
997
|
+
// ALWAYS DO THIS:
|
|
998
|
+
const config = await this.configManager.read();
|
|
999
|
+
const domain = config.issueTracker?.domain || '';
|
|
1000
|
+
const org = config.issueTracker?.organization_ado || '';
|
|
1001
|
+
```
|
|
1002
|
+
|
|
1003
|
+
### Migration from .env to config.json
|
|
1004
|
+
```bash
|
|
1005
|
+
# 1. Add to config.json
|
|
1006
|
+
specweave config set issueTracker.domain "company.atlassian.net"
|
|
1007
|
+
specweave config set issueTracker.organization_ado "my-org"
|
|
1008
|
+
|
|
1009
|
+
# 2. Remove deprecated vars from .env (keep only secrets)
|
|
1010
|
+
# JIRA_DOMAIN=xxx # DELETE THIS LINE
|
|
1011
|
+
# AZURE_DEVOPS_ORG=xxx # DELETE THIS LINE
|
|
1012
|
+
|
|
1013
|
+
# 3. Keep these in .env (secrets):
|
|
1014
|
+
AZURE_DEVOPS_PAT=xxx
|
|
1015
|
+
JIRA_API_TOKEN=xxx
|
|
1016
|
+
JIRA_EMAIL=xxx
|
|
1017
|
+
```
|
|
1018
|
+
|
|
1019
|
+
### ADR Reference
|
|
1020
|
+
See ADR-0194 for full architecture decision.
|
|
666
1021
|
|
|
667
1022
|
---
|
|
668
1023
|
|
|
669
1024
|
## Commands
|
|
670
1025
|
|
|
671
1026
|
```bash
|
|
672
|
-
/
|
|
673
|
-
/
|
|
674
|
-
/
|
|
675
|
-
/
|
|
676
|
-
/
|
|
677
|
-
/
|
|
1027
|
+
/sw:increment "feature" # Plan new increment
|
|
1028
|
+
/sw:do # Execute tasks
|
|
1029
|
+
/sw:done 0002 # Close (validates gates)
|
|
1030
|
+
/sw:progress # Show status
|
|
1031
|
+
/sw:sync-progress # Full sync (tasks→docs→GitHub/JIRA/ADO)
|
|
1032
|
+
/sw:validate 0001 # Validate increment
|
|
1033
|
+
/sw:living-docs # Launch living docs builder (interactive)
|
|
1034
|
+
/sw:living-docs --full-scan # Full deep scan (all phases: repos, org, arch, inconsistencies, strategy)
|
|
678
1035
|
```
|
|
679
1036
|
|
|
680
1037
|
---
|