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
|
@@ -11,6 +11,17 @@ class GitHubClientV2 {
|
|
|
11
11
|
this.owner = config.owner;
|
|
12
12
|
this.repo = config.repo;
|
|
13
13
|
this.fullRepo = `${this.owner}/${this.repo}`;
|
|
14
|
+
this.token = config.token;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get environment object with GH_TOKEN for gh CLI commands.
|
|
18
|
+
* This ensures the token from .env is passed to all gh operations,
|
|
19
|
+
* regardless of `gh auth` status.
|
|
20
|
+
*
|
|
21
|
+
* @returns Environment object with GH_TOKEN set if token available
|
|
22
|
+
*/
|
|
23
|
+
getGhEnv() {
|
|
24
|
+
return this.token ? { ...process.env, GH_TOKEN: this.token } : process.env;
|
|
14
25
|
}
|
|
15
26
|
/**
|
|
16
27
|
* Create client from owner/repo directly
|
|
@@ -110,7 +121,7 @@ class GitHubClientV2 {
|
|
|
110
121
|
if (description) {
|
|
111
122
|
args.splice(4, 0, "-f", `description=${description}`);
|
|
112
123
|
}
|
|
113
|
-
const result = await execFileNoThrow("gh", args);
|
|
124
|
+
const result = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
|
|
114
125
|
if (result.exitCode !== 0) {
|
|
115
126
|
throw new Error(`Failed to create milestone: ${result.stderr || result.stdout}`);
|
|
116
127
|
}
|
|
@@ -125,7 +136,7 @@ class GitHubClientV2 {
|
|
|
125
136
|
`repos/${this.fullRepo}/milestones`,
|
|
126
137
|
"--jq",
|
|
127
138
|
`.[] | select(.title=="${title}") | {number: .number, title: .title, description: .description, state: .state}`
|
|
128
|
-
]);
|
|
139
|
+
], { env: this.getGhEnv() });
|
|
129
140
|
if (result.exitCode !== 0 || !result.stdout.trim()) {
|
|
130
141
|
return null;
|
|
131
142
|
}
|
|
@@ -160,7 +171,7 @@ GitHub issues MUST use living docs format:
|
|
|
160
171
|
WHY: Correct data flow is: Increment \u2192 Living Docs \u2192 GitHub
|
|
161
172
|
Living docs are the source of truth for GitHub sync.
|
|
162
173
|
|
|
163
|
-
FIX: Use /
|
|
174
|
+
FIX: Use /sw:sync-docs to generate living docs, then sync to GitHub.`
|
|
164
175
|
);
|
|
165
176
|
}
|
|
166
177
|
const typePrefixPattern = /^\[(BUG|HOTFIX|FEATURE|DOCS|REFACTOR|CHORE|EXPERIMENT|Bug|Hotfix|Feature|Docs|Refactor|Chore|Experiment)\]/i;
|
|
@@ -232,7 +243,7 @@ FIX:
|
|
|
232
243
|
`repos/${this.fullRepo}/milestones/${milestone}`,
|
|
233
244
|
"--jq",
|
|
234
245
|
".title"
|
|
235
|
-
]);
|
|
246
|
+
], { env: this.getGhEnv() });
|
|
236
247
|
if (msResult.exitCode === 0 && msResult.stdout.trim()) {
|
|
237
248
|
args.push("--milestone", msResult.stdout.trim());
|
|
238
249
|
}
|
|
@@ -240,7 +251,7 @@ FIX:
|
|
|
240
251
|
args.push("--milestone", milestone);
|
|
241
252
|
}
|
|
242
253
|
}
|
|
243
|
-
const createResult = await execFileNoThrow("gh", args);
|
|
254
|
+
const createResult = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
|
|
244
255
|
if (createResult.exitCode !== 0) {
|
|
245
256
|
throw new Error(
|
|
246
257
|
`Failed to create epic issue: ${createResult.stderr || createResult.stdout}`
|
|
@@ -274,7 +285,7 @@ ${body}`;
|
|
|
274
285
|
this.fullRepo,
|
|
275
286
|
"--json",
|
|
276
287
|
"number,title,body,state,url,labels,milestone"
|
|
277
|
-
]);
|
|
288
|
+
], { env: this.getGhEnv() });
|
|
278
289
|
if (result.exitCode !== 0) {
|
|
279
290
|
throw new Error(
|
|
280
291
|
`Failed to get issue #${issueNumber}: ${result.stderr || result.stdout}`
|
|
@@ -313,7 +324,7 @@ ${body}`;
|
|
|
313
324
|
if (includeClosedIssues) {
|
|
314
325
|
args.push("--state", "all");
|
|
315
326
|
}
|
|
316
|
-
const result = await execFileNoThrow("gh", args);
|
|
327
|
+
const result = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
|
|
317
328
|
if (result.exitCode !== 0) {
|
|
318
329
|
return null;
|
|
319
330
|
}
|
|
@@ -344,7 +355,7 @@ ${body}`;
|
|
|
344
355
|
this.fullRepo,
|
|
345
356
|
"--body",
|
|
346
357
|
newBody
|
|
347
|
-
]);
|
|
358
|
+
], { env: this.getGhEnv() });
|
|
348
359
|
if (result.exitCode !== 0) {
|
|
349
360
|
throw new Error(
|
|
350
361
|
`Failed to update issue #${issueNumber}: ${result.stderr || result.stdout}`
|
|
@@ -364,7 +375,7 @@ ${body}`;
|
|
|
364
375
|
String(issueNumber),
|
|
365
376
|
"--repo",
|
|
366
377
|
this.fullRepo
|
|
367
|
-
]);
|
|
378
|
+
], { env: this.getGhEnv() });
|
|
368
379
|
if (result.exitCode !== 0) {
|
|
369
380
|
throw new Error(
|
|
370
381
|
`Failed to close issue #${issueNumber}: ${result.stderr || result.stdout}`
|
|
@@ -387,7 +398,7 @@ ${body}`;
|
|
|
387
398
|
String(issueNumber),
|
|
388
399
|
"--repo",
|
|
389
400
|
this.fullRepo
|
|
390
|
-
]);
|
|
401
|
+
], { env: this.getGhEnv() });
|
|
391
402
|
if (result.exitCode !== 0) {
|
|
392
403
|
throw new Error(
|
|
393
404
|
`Failed to reopen issue #${issueNumber}: ${result.stderr || result.stdout}`
|
|
@@ -406,7 +417,7 @@ ${body}`;
|
|
|
406
417
|
this.fullRepo,
|
|
407
418
|
"--body",
|
|
408
419
|
comment
|
|
409
|
-
]);
|
|
420
|
+
], { env: this.getGhEnv() });
|
|
410
421
|
if (result.exitCode !== 0) {
|
|
411
422
|
throw new Error(
|
|
412
423
|
`Failed to add comment to issue #${issueNumber}: ${result.stderr || result.stdout}`
|
|
@@ -425,7 +436,7 @@ ${body}`;
|
|
|
425
436
|
"--jq",
|
|
426
437
|
".[-1] | {body: .body, author: .user.login}"
|
|
427
438
|
// Get last comment only
|
|
428
|
-
]);
|
|
439
|
+
], { env: this.getGhEnv() });
|
|
429
440
|
if (result.exitCode !== 0) {
|
|
430
441
|
return null;
|
|
431
442
|
}
|
|
@@ -453,7 +464,7 @@ ${body}`;
|
|
|
453
464
|
for (const label of labels) {
|
|
454
465
|
args.push("--add-label", label);
|
|
455
466
|
}
|
|
456
|
-
const result = await execFileNoThrow("gh", args);
|
|
467
|
+
const result = await execFileNoThrow("gh", args, { env: this.getGhEnv() });
|
|
457
468
|
if (result.exitCode !== 0) {
|
|
458
469
|
throw new Error(
|
|
459
470
|
`Failed to add labels to issue #${issueNumber}: ${result.stderr || result.stdout}`
|
|
@@ -482,7 +493,7 @@ ${body}`;
|
|
|
482
493
|
// Include both open and closed
|
|
483
494
|
"--limit",
|
|
484
495
|
"100"
|
|
485
|
-
]);
|
|
496
|
+
], { env: this.getGhEnv() });
|
|
486
497
|
if (result.exitCode !== 0 || !result.stdout) {
|
|
487
498
|
return [];
|
|
488
499
|
}
|
|
@@ -510,7 +521,7 @@ ${body}`;
|
|
|
510
521
|
"--limit",
|
|
511
522
|
"1000"
|
|
512
523
|
// Max results
|
|
513
|
-
]);
|
|
524
|
+
], { env: this.getGhEnv() });
|
|
514
525
|
if (result.exitCode !== 0) {
|
|
515
526
|
throw new Error(
|
|
516
527
|
`Failed to list issues: ${result.stderr || result.stdout}`
|
|
@@ -578,7 +589,7 @@ ${body}`;
|
|
|
578
589
|
"rate_limit",
|
|
579
590
|
"--jq",
|
|
580
591
|
".rate | {remaining: .remaining, limit: .limit, reset: .reset}"
|
|
581
|
-
]);
|
|
592
|
+
], { env: this.getGhEnv() });
|
|
582
593
|
if (result.exitCode !== 0) {
|
|
583
594
|
throw new Error(
|
|
584
595
|
`Failed to check rate limit: ${result.stderr || result.stdout}`
|
|
@@ -669,7 +680,7 @@ ${body}`;
|
|
|
669
680
|
"per_page=100",
|
|
670
681
|
"--jq",
|
|
671
682
|
jqFilter
|
|
672
|
-
]);
|
|
683
|
+
], { env: this.getGhEnv() });
|
|
673
684
|
if (result.exitCode !== 0) {
|
|
674
685
|
throw new Error(
|
|
675
686
|
`Failed to fetch recent changes: ${result.stderr || result.stdout}`
|
|
@@ -717,7 +728,7 @@ ${body}`;
|
|
|
717
728
|
`per_page=${perPage}`,
|
|
718
729
|
"--jq",
|
|
719
730
|
".[].{event, created_at, actor: .actor.login}"
|
|
720
|
-
]);
|
|
731
|
+
], { env: this.getGhEnv() });
|
|
721
732
|
if (result.exitCode !== 0) {
|
|
722
733
|
throw new Error(
|
|
723
734
|
`Failed to get issue events: ${result.stderr || result.stdout}`
|
|
@@ -16,6 +16,7 @@ export class GitHubClientV2 {
|
|
|
16
16
|
private owner: string;
|
|
17
17
|
private repo: string;
|
|
18
18
|
private fullRepo: string;
|
|
19
|
+
private token?: string;
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Create GitHub client from sync profile
|
|
@@ -29,6 +30,20 @@ export class GitHubClientV2 {
|
|
|
29
30
|
this.owner = config.owner;
|
|
30
31
|
this.repo = config.repo;
|
|
31
32
|
this.fullRepo = `${this.owner}/${this.repo}`;
|
|
33
|
+
this.token = config.token;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get environment object with GH_TOKEN for gh CLI commands.
|
|
38
|
+
* This ensures the token from .env is passed to all gh operations,
|
|
39
|
+
* regardless of `gh auth` status.
|
|
40
|
+
*
|
|
41
|
+
* @returns Environment object with GH_TOKEN set if token available
|
|
42
|
+
*/
|
|
43
|
+
private getGhEnv(): NodeJS.ProcessEnv {
|
|
44
|
+
return this.token
|
|
45
|
+
? { ...process.env, GH_TOKEN: this.token }
|
|
46
|
+
: process.env;
|
|
32
47
|
}
|
|
33
48
|
|
|
34
49
|
/**
|
|
@@ -159,7 +174,7 @@ export class GitHubClientV2 {
|
|
|
159
174
|
args.splice(4, 0, '-f', `description=${description}`);
|
|
160
175
|
}
|
|
161
176
|
|
|
162
|
-
const result = await execFileNoThrow('gh', args);
|
|
177
|
+
const result = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
|
|
163
178
|
|
|
164
179
|
if (result.exitCode !== 0) {
|
|
165
180
|
throw new Error(`Failed to create milestone: ${result.stderr || result.stdout}`);
|
|
@@ -179,7 +194,7 @@ export class GitHubClientV2 {
|
|
|
179
194
|
`repos/${this.fullRepo}/milestones`,
|
|
180
195
|
'--jq',
|
|
181
196
|
`.[] | select(.title=="${title}") | {number: .number, title: .title, description: .description, state: .state}`,
|
|
182
|
-
]);
|
|
197
|
+
], { env: this.getGhEnv() });
|
|
183
198
|
|
|
184
199
|
if (result.exitCode !== 0 || !result.stdout.trim()) {
|
|
185
200
|
return null;
|
|
@@ -216,7 +231,7 @@ export class GitHubClientV2 {
|
|
|
216
231
|
` â WRONG: "[Increment XXXX] Title" (old format)\n\n` +
|
|
217
232
|
`WHY: Correct data flow is: Increment â Living Docs â GitHub\n` +
|
|
218
233
|
` Living docs are the source of truth for GitHub sync.\n\n` +
|
|
219
|
-
`FIX: Use /
|
|
234
|
+
`FIX: Use /sw:sync-docs to generate living docs, then sync to GitHub.`
|
|
220
235
|
);
|
|
221
236
|
}
|
|
222
237
|
|
|
@@ -313,7 +328,7 @@ export class GitHubClientV2 {
|
|
|
313
328
|
`repos/${this.fullRepo}/milestones/${milestone}`,
|
|
314
329
|
'--jq',
|
|
315
330
|
'.title'
|
|
316
|
-
]);
|
|
331
|
+
], { env: this.getGhEnv() });
|
|
317
332
|
|
|
318
333
|
if (msResult.exitCode === 0 && msResult.stdout.trim()) {
|
|
319
334
|
args.push('--milestone', msResult.stdout.trim());
|
|
@@ -325,7 +340,7 @@ export class GitHubClientV2 {
|
|
|
325
340
|
}
|
|
326
341
|
|
|
327
342
|
// Create issue (returns URL)
|
|
328
|
-
const createResult = await execFileNoThrow('gh', args);
|
|
343
|
+
const createResult = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
|
|
329
344
|
|
|
330
345
|
if (createResult.exitCode !== 0) {
|
|
331
346
|
throw new Error(
|
|
@@ -372,7 +387,7 @@ export class GitHubClientV2 {
|
|
|
372
387
|
this.fullRepo,
|
|
373
388
|
'--json',
|
|
374
389
|
'number,title,body,state,url,labels,milestone',
|
|
375
|
-
]);
|
|
390
|
+
], { env: this.getGhEnv() });
|
|
376
391
|
|
|
377
392
|
if (result.exitCode !== 0) {
|
|
378
393
|
throw new Error(
|
|
@@ -420,7 +435,7 @@ export class GitHubClientV2 {
|
|
|
420
435
|
args.push('--state', 'all');
|
|
421
436
|
}
|
|
422
437
|
|
|
423
|
-
const result = await execFileNoThrow('gh', args);
|
|
438
|
+
const result = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
|
|
424
439
|
|
|
425
440
|
if (result.exitCode !== 0) {
|
|
426
441
|
// Search failed, return null (treat as not found)
|
|
@@ -457,7 +472,7 @@ export class GitHubClientV2 {
|
|
|
457
472
|
this.fullRepo,
|
|
458
473
|
'--body',
|
|
459
474
|
newBody,
|
|
460
|
-
]);
|
|
475
|
+
], { env: this.getGhEnv() });
|
|
461
476
|
|
|
462
477
|
if (result.exitCode !== 0) {
|
|
463
478
|
throw new Error(
|
|
@@ -480,7 +495,7 @@ export class GitHubClientV2 {
|
|
|
480
495
|
String(issueNumber),
|
|
481
496
|
'--repo',
|
|
482
497
|
this.fullRepo,
|
|
483
|
-
]);
|
|
498
|
+
], { env: this.getGhEnv() });
|
|
484
499
|
|
|
485
500
|
if (result.exitCode !== 0) {
|
|
486
501
|
throw new Error(
|
|
@@ -506,7 +521,7 @@ export class GitHubClientV2 {
|
|
|
506
521
|
String(issueNumber),
|
|
507
522
|
'--repo',
|
|
508
523
|
this.fullRepo,
|
|
509
|
-
]);
|
|
524
|
+
], { env: this.getGhEnv() });
|
|
510
525
|
|
|
511
526
|
if (result.exitCode !== 0) {
|
|
512
527
|
throw new Error(
|
|
@@ -527,7 +542,7 @@ export class GitHubClientV2 {
|
|
|
527
542
|
this.fullRepo,
|
|
528
543
|
'--body',
|
|
529
544
|
comment,
|
|
530
|
-
]);
|
|
545
|
+
], { env: this.getGhEnv() });
|
|
531
546
|
|
|
532
547
|
if (result.exitCode !== 0) {
|
|
533
548
|
throw new Error(
|
|
@@ -548,7 +563,7 @@ export class GitHubClientV2 {
|
|
|
548
563
|
`repos/${this.fullRepo}/issues/${issueNumber}/comments`,
|
|
549
564
|
'--jq',
|
|
550
565
|
'.[-1] | {body: .body, author: .user.login}', // Get last comment only
|
|
551
|
-
]);
|
|
566
|
+
], { env: this.getGhEnv() });
|
|
552
567
|
|
|
553
568
|
if (result.exitCode !== 0) {
|
|
554
569
|
// If error, return null (no comments or API error)
|
|
@@ -585,7 +600,7 @@ export class GitHubClientV2 {
|
|
|
585
600
|
args.push('--add-label', label);
|
|
586
601
|
}
|
|
587
602
|
|
|
588
|
-
const result = await execFileNoThrow('gh', args);
|
|
603
|
+
const result = await execFileNoThrow('gh', args, { env: this.getGhEnv() });
|
|
589
604
|
|
|
590
605
|
if (result.exitCode !== 0) {
|
|
591
606
|
throw new Error(
|
|
@@ -623,7 +638,7 @@ export class GitHubClientV2 {
|
|
|
623
638
|
'all', // Include both open and closed
|
|
624
639
|
'--limit',
|
|
625
640
|
'100',
|
|
626
|
-
]);
|
|
641
|
+
], { env: this.getGhEnv() });
|
|
627
642
|
|
|
628
643
|
if (result.exitCode !== 0 || !result.stdout) {
|
|
629
644
|
return [];
|
|
@@ -661,7 +676,7 @@ export class GitHubClientV2 {
|
|
|
661
676
|
'number,title,body,state,url,labels,milestone',
|
|
662
677
|
'--limit',
|
|
663
678
|
'1000', // Max results
|
|
664
|
-
]);
|
|
679
|
+
], { env: this.getGhEnv() });
|
|
665
680
|
|
|
666
681
|
if (result.exitCode !== 0) {
|
|
667
682
|
throw new Error(
|
|
@@ -747,7 +762,7 @@ export class GitHubClientV2 {
|
|
|
747
762
|
'rate_limit',
|
|
748
763
|
'--jq',
|
|
749
764
|
'.rate | {remaining: .remaining, limit: .limit, reset: .reset}',
|
|
750
|
-
]);
|
|
765
|
+
], { env: this.getGhEnv() });
|
|
751
766
|
|
|
752
767
|
if (result.exitCode !== 0) {
|
|
753
768
|
throw new Error(
|
|
@@ -862,7 +877,7 @@ export class GitHubClientV2 {
|
|
|
862
877
|
'-f', 'direction=desc',
|
|
863
878
|
'-f', 'per_page=100',
|
|
864
879
|
'--jq', jqFilter,
|
|
865
|
-
]);
|
|
880
|
+
], { env: this.getGhEnv() });
|
|
866
881
|
|
|
867
882
|
if (result.exitCode !== 0) {
|
|
868
883
|
throw new Error(
|
|
@@ -916,7 +931,7 @@ export class GitHubClientV2 {
|
|
|
916
931
|
`repos/${this.fullRepo}/issues/${issueNumber}/events`,
|
|
917
932
|
'-f', `per_page=${perPage}`,
|
|
918
933
|
'--jq', '.[].{event, created_at, actor: .actor.login}',
|
|
919
|
-
]);
|
|
934
|
+
], { env: this.getGhEnv() });
|
|
920
935
|
|
|
921
936
|
if (result.exitCode !== 0) {
|
|
922
937
|
throw new Error(
|
|
@@ -6,6 +6,7 @@ import { UserStoryIssueBuilder } from "./user-story-issue-builder.js";
|
|
|
6
6
|
import { CompletionCalculator } from "./completion-calculator.js";
|
|
7
7
|
import { DuplicateDetector } from "./duplicate-detector.js";
|
|
8
8
|
import { execFileNoThrow } from "../../../src/utils/execFileNoThrow.js";
|
|
9
|
+
import { getGitHubAuthFromProject } from "../../../src/utils/auth-helpers.js";
|
|
9
10
|
const _GitHubFeatureSync = class _GitHubFeatureSync {
|
|
10
11
|
// 30 seconds
|
|
11
12
|
constructor(client, specsDir, projectRoot) {
|
|
@@ -13,6 +14,15 @@ const _GitHubFeatureSync = class _GitHubFeatureSync {
|
|
|
13
14
|
this.specsDir = specsDir;
|
|
14
15
|
this.projectRoot = projectRoot;
|
|
15
16
|
this.calculator = new CompletionCalculator(projectRoot);
|
|
17
|
+
this.token = getGitHubAuthFromProject(projectRoot).token;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get environment object with GH_TOKEN for gh CLI commands.
|
|
21
|
+
* This ensures the token from .env is passed to all gh operations,
|
|
22
|
+
* regardless of `gh auth` status.
|
|
23
|
+
*/
|
|
24
|
+
getGhEnv() {
|
|
25
|
+
return this.token ? { ...process.env, GH_TOKEN: this.token } : process.env;
|
|
16
26
|
}
|
|
17
27
|
/**
|
|
18
28
|
* Sync Feature folder to GitHub (Milestone + User Story Issues)
|
|
@@ -236,7 +246,7 @@ const _GitHubFeatureSync = class _GitHubFeatureSync {
|
|
|
236
246
|
"repos/:owner/:repo/milestones",
|
|
237
247
|
"--jq",
|
|
238
248
|
`.[] | select(.title == "${title}") | {number, html_url}`
|
|
239
|
-
]);
|
|
249
|
+
], { env: this.getGhEnv() });
|
|
240
250
|
console.log(` \u{1F50D} Milestone detection: exitCode=${existingResult.exitCode}, stdout length=${existingResult.stdout.length}`);
|
|
241
251
|
if (existingResult.exitCode !== 0) {
|
|
242
252
|
console.log(` \u26A0\uFE0F Detection failed: ${existingResult.stderr}`);
|
|
@@ -265,7 +275,7 @@ Created: ${featureData.created}`;
|
|
|
265
275
|
`description=${description}`,
|
|
266
276
|
"-f",
|
|
267
277
|
"state=open"
|
|
268
|
-
]);
|
|
278
|
+
], { env: this.getGhEnv() });
|
|
269
279
|
if (result.exitCode !== 0) {
|
|
270
280
|
throw new Error(`Failed to create Milestone: ${result.stderr || result.stdout}`);
|
|
271
281
|
}
|
|
@@ -293,7 +303,7 @@ Created: ${featureData.created}`;
|
|
|
293
303
|
"--milestone",
|
|
294
304
|
milestoneTitle,
|
|
295
305
|
...issueContent.labels.flatMap((label) => ["--label", label])
|
|
296
|
-
]);
|
|
306
|
+
], { env: this.getGhEnv() });
|
|
297
307
|
if (result.exitCode !== 0) {
|
|
298
308
|
throw new Error(`Failed to create GitHub Issue: ${result.stderr || result.stdout}`);
|
|
299
309
|
}
|
|
@@ -310,7 +320,7 @@ Created: ${featureData.created}`;
|
|
|
310
320
|
issueNumber.toString(),
|
|
311
321
|
"--comment",
|
|
312
322
|
this.calculator.buildCompletionComment(completion)
|
|
313
|
-
]);
|
|
323
|
+
], { env: this.getGhEnv() });
|
|
314
324
|
console.log(
|
|
315
325
|
` \u2705 Created and verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`
|
|
316
326
|
);
|
|
@@ -337,7 +347,7 @@ Created: ${featureData.created}`;
|
|
|
337
347
|
issueContent.title,
|
|
338
348
|
"--body",
|
|
339
349
|
issueContent.body
|
|
340
|
-
]);
|
|
350
|
+
], { env: this.getGhEnv() });
|
|
341
351
|
const completion = await this.calculator.calculateCompletion(userStoryPath);
|
|
342
352
|
const issueData = await this.client.getIssue(issueNumber);
|
|
343
353
|
const currentlyClosed = issueData.state === "closed";
|
|
@@ -349,7 +359,7 @@ Created: ${featureData.created}`;
|
|
|
349
359
|
issueNumber.toString(),
|
|
350
360
|
"--comment",
|
|
351
361
|
this.calculator.buildCompletionComment(completion)
|
|
352
|
-
]);
|
|
362
|
+
], { env: this.getGhEnv() });
|
|
353
363
|
console.log(
|
|
354
364
|
` \u2705 Verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`
|
|
355
365
|
);
|
|
@@ -362,7 +372,7 @@ Created: ${featureData.created}`;
|
|
|
362
372
|
issueNumber.toString(),
|
|
363
373
|
"--comment",
|
|
364
374
|
this.calculator.buildReopenComment(completion, "Work verification failed")
|
|
365
|
-
]);
|
|
375
|
+
], { env: this.getGhEnv() });
|
|
366
376
|
console.log(
|
|
367
377
|
` \u26A0\uFE0F Reopened: ${completion.blockingAcs.length + completion.blockingTasks.length} items incomplete`
|
|
368
378
|
);
|
|
@@ -391,6 +401,26 @@ Created: ${featureData.created}`;
|
|
|
391
401
|
newStatusLabel = "status:complete";
|
|
392
402
|
} else if (completion.acsPercentage > 0 || completion.tasksPercentage > 0) {
|
|
393
403
|
newStatusLabel = "status:active";
|
|
404
|
+
} else if (
|
|
405
|
+
// v0.35.1 FIX: For external-origin USs without ACs/tasks, use frontmatter status
|
|
406
|
+
// This fixes issue #889 where external USs always showed "not_started"
|
|
407
|
+
(completion.acsTotal === 0 || completion.acsTotal === void 0) && (completion.tasksTotal === 0 || completion.tasksTotal === void 0) && completion.frontmatterStatus
|
|
408
|
+
) {
|
|
409
|
+
switch (completion.frontmatterStatus) {
|
|
410
|
+
case "complete":
|
|
411
|
+
case "completed":
|
|
412
|
+
newStatusLabel = "status:complete";
|
|
413
|
+
break;
|
|
414
|
+
case "active":
|
|
415
|
+
case "in-progress":
|
|
416
|
+
newStatusLabel = "status:active";
|
|
417
|
+
break;
|
|
418
|
+
case "planning":
|
|
419
|
+
case "not-started":
|
|
420
|
+
default:
|
|
421
|
+
newStatusLabel = "status:not_started";
|
|
422
|
+
}
|
|
423
|
+
console.log(` \u2139\uFE0F Using frontmatter status (no ACs/tasks): ${completion.frontmatterStatus} \u2192 ${newStatusLabel}`);
|
|
394
424
|
} else {
|
|
395
425
|
newStatusLabel = "status:not_started";
|
|
396
426
|
}
|
|
@@ -405,7 +435,7 @@ Created: ${featureData.created}`;
|
|
|
405
435
|
issueNumber.toString(),
|
|
406
436
|
"--remove-label",
|
|
407
437
|
...statusLabels
|
|
408
|
-
]);
|
|
438
|
+
], { env: this.getGhEnv() });
|
|
409
439
|
}
|
|
410
440
|
const result = await execFileNoThrow("gh", [
|
|
411
441
|
"issue",
|
|
@@ -413,7 +443,7 @@ Created: ${featureData.created}`;
|
|
|
413
443
|
issueNumber.toString(),
|
|
414
444
|
"--add-label",
|
|
415
445
|
newStatusLabel
|
|
416
|
-
]);
|
|
446
|
+
], { env: this.getGhEnv() });
|
|
417
447
|
if (result.exitCode === 0) {
|
|
418
448
|
console.log(` \u{1F3F7}\uFE0F Updated label: ${newStatusLabel}`);
|
|
419
449
|
} else {
|
|
@@ -446,7 +476,7 @@ Created: ${featureData.created}`;
|
|
|
446
476
|
"--jq",
|
|
447
477
|
".[-1] | {body: .body, created_at: .created_at}"
|
|
448
478
|
// Get last comment only
|
|
449
|
-
]);
|
|
479
|
+
], { env: this.getGhEnv() });
|
|
450
480
|
let lastCommentBody = "";
|
|
451
481
|
if (commentsResult.exitCode === 0 && commentsResult.stdout.trim()) {
|
|
452
482
|
try {
|
|
@@ -473,7 +503,7 @@ Created: ${featureData.created}`;
|
|
|
473
503
|
issueNumber.toString(),
|
|
474
504
|
"--body",
|
|
475
505
|
newCommentBody
|
|
476
|
-
]);
|
|
506
|
+
], { env: this.getGhEnv() });
|
|
477
507
|
console.log(
|
|
478
508
|
` \u{1F4CA} Progress: ${completion.acsPercentage.toFixed(0)}% ACs, ${completion.tasksPercentage.toFixed(0)}% tasks (updated)`
|
|
479
509
|
);
|
|
@@ -19,6 +19,7 @@ import { UserStoryIssueBuilder } from './user-story-issue-builder.js';
|
|
|
19
19
|
import { CompletionCalculator } from './completion-calculator.js';
|
|
20
20
|
import { DuplicateDetector } from './duplicate-detector.js';
|
|
21
21
|
import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
|
|
22
|
+
import { getGitHubAuthFromProject } from '../../../src/utils/auth-helpers.js';
|
|
22
23
|
|
|
23
24
|
interface FeatureFrontmatter {
|
|
24
25
|
id: string;
|
|
@@ -51,6 +52,7 @@ export class GitHubFeatureSync {
|
|
|
51
52
|
private specsDir: string;
|
|
52
53
|
private projectRoot: string;
|
|
53
54
|
private calculator: CompletionCalculator;
|
|
55
|
+
private token?: string;
|
|
54
56
|
|
|
55
57
|
// SYNC LOCK: Prevent concurrent syncs of the same feature
|
|
56
58
|
// Maps featureId â last sync timestamp
|
|
@@ -62,6 +64,19 @@ export class GitHubFeatureSync {
|
|
|
62
64
|
this.specsDir = specsDir;
|
|
63
65
|
this.projectRoot = projectRoot;
|
|
64
66
|
this.calculator = new CompletionCalculator(projectRoot);
|
|
67
|
+
// Get token from .env for gh CLI passthrough
|
|
68
|
+
this.token = getGitHubAuthFromProject(projectRoot).token;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Get environment object with GH_TOKEN for gh CLI commands.
|
|
73
|
+
* This ensures the token from .env is passed to all gh operations,
|
|
74
|
+
* regardless of `gh auth` status.
|
|
75
|
+
*/
|
|
76
|
+
private getGhEnv(): NodeJS.ProcessEnv {
|
|
77
|
+
return this.token
|
|
78
|
+
? { ...process.env, GH_TOKEN: this.token }
|
|
79
|
+
: process.env;
|
|
65
80
|
}
|
|
66
81
|
|
|
67
82
|
/**
|
|
@@ -393,7 +408,7 @@ export class GitHubFeatureSync {
|
|
|
393
408
|
'repos/:owner/:repo/milestones',
|
|
394
409
|
'--jq',
|
|
395
410
|
`.[] | select(.title == "${title}") | {number, html_url}`,
|
|
396
|
-
]);
|
|
411
|
+
], { env: this.getGhEnv() });
|
|
397
412
|
|
|
398
413
|
// DEBUG: Log detection result
|
|
399
414
|
console.log(` đ Milestone detection: exitCode=${existingResult.exitCode}, stdout length=${existingResult.stdout.length}`);
|
|
@@ -426,7 +441,7 @@ export class GitHubFeatureSync {
|
|
|
426
441
|
`description=${description}`,
|
|
427
442
|
'-f',
|
|
428
443
|
'state=open',
|
|
429
|
-
]);
|
|
444
|
+
], { env: this.getGhEnv() });
|
|
430
445
|
|
|
431
446
|
if (result.exitCode !== 0) {
|
|
432
447
|
throw new Error(`Failed to create Milestone: ${result.stderr || result.stdout}`);
|
|
@@ -467,7 +482,7 @@ export class GitHubFeatureSync {
|
|
|
467
482
|
'--milestone',
|
|
468
483
|
milestoneTitle,
|
|
469
484
|
...issueContent.labels.flatMap((label) => ['--label', label]),
|
|
470
|
-
]);
|
|
485
|
+
], { env: this.getGhEnv() });
|
|
471
486
|
|
|
472
487
|
if (result.exitCode !== 0) {
|
|
473
488
|
throw new Error(`Failed to create GitHub Issue: ${result.stderr || result.stdout}`);
|
|
@@ -493,7 +508,7 @@ export class GitHubFeatureSync {
|
|
|
493
508
|
issueNumber.toString(),
|
|
494
509
|
'--comment',
|
|
495
510
|
this.calculator.buildCompletionComment(completion),
|
|
496
|
-
]);
|
|
511
|
+
], { env: this.getGhEnv() });
|
|
497
512
|
console.log(
|
|
498
513
|
` â
Created and verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`
|
|
499
514
|
);
|
|
@@ -535,7 +550,7 @@ export class GitHubFeatureSync {
|
|
|
535
550
|
issueContent.title,
|
|
536
551
|
'--body',
|
|
537
552
|
issueContent.body,
|
|
538
|
-
]);
|
|
553
|
+
], { env: this.getGhEnv() });
|
|
539
554
|
|
|
540
555
|
// â
VERIFICATION GATE: Calculate ACTUAL completion from checkboxes
|
|
541
556
|
const completion = await this.calculator.calculateCompletion(userStoryPath);
|
|
@@ -554,7 +569,7 @@ export class GitHubFeatureSync {
|
|
|
554
569
|
issueNumber.toString(),
|
|
555
570
|
'--comment',
|
|
556
571
|
this.calculator.buildCompletionComment(completion),
|
|
557
|
-
]);
|
|
572
|
+
], { env: this.getGhEnv() });
|
|
558
573
|
console.log(
|
|
559
574
|
` â
Verified complete: ${completion.acsCompleted}/${completion.acsTotal} ACs, ${completion.tasksCompleted}/${completion.tasksTotal} tasks`
|
|
560
575
|
);
|
|
@@ -569,7 +584,7 @@ export class GitHubFeatureSync {
|
|
|
569
584
|
issueNumber.toString(),
|
|
570
585
|
'--comment',
|
|
571
586
|
this.calculator.buildReopenComment(completion, 'Work verification failed'),
|
|
572
|
-
]);
|
|
587
|
+
], { env: this.getGhEnv() });
|
|
573
588
|
console.log(
|
|
574
589
|
` â ī¸ Reopened: ${completion.blockingAcs.length + completion.blockingTasks.length} items incomplete`
|
|
575
590
|
);
|
|
@@ -597,6 +612,9 @@ export class GitHubFeatureSync {
|
|
|
597
612
|
overallComplete: boolean;
|
|
598
613
|
acsPercentage: number;
|
|
599
614
|
tasksPercentage: number;
|
|
615
|
+
acsTotal?: number;
|
|
616
|
+
tasksTotal?: number;
|
|
617
|
+
frontmatterStatus?: string;
|
|
600
618
|
}
|
|
601
619
|
): Promise<void> {
|
|
602
620
|
try {
|
|
@@ -615,6 +633,29 @@ export class GitHubFeatureSync {
|
|
|
615
633
|
newStatusLabel = 'status:complete'; // Repository uses "complete" not "completed"
|
|
616
634
|
} else if (completion.acsPercentage > 0 || completion.tasksPercentage > 0) {
|
|
617
635
|
newStatusLabel = 'status:active'; // Repository uses "active" not "in-progress"
|
|
636
|
+
} else if (
|
|
637
|
+
// v0.35.1 FIX: For external-origin USs without ACs/tasks, use frontmatter status
|
|
638
|
+
// This fixes issue #889 where external USs always showed "not_started"
|
|
639
|
+
(completion.acsTotal === 0 || completion.acsTotal === undefined) &&
|
|
640
|
+
(completion.tasksTotal === 0 || completion.tasksTotal === undefined) &&
|
|
641
|
+
completion.frontmatterStatus
|
|
642
|
+
) {
|
|
643
|
+
// Map frontmatter status to GitHub label
|
|
644
|
+
switch (completion.frontmatterStatus) {
|
|
645
|
+
case 'complete':
|
|
646
|
+
case 'completed':
|
|
647
|
+
newStatusLabel = 'status:complete';
|
|
648
|
+
break;
|
|
649
|
+
case 'active':
|
|
650
|
+
case 'in-progress':
|
|
651
|
+
newStatusLabel = 'status:active';
|
|
652
|
+
break;
|
|
653
|
+
case 'planning':
|
|
654
|
+
case 'not-started':
|
|
655
|
+
default:
|
|
656
|
+
newStatusLabel = 'status:not_started';
|
|
657
|
+
}
|
|
658
|
+
console.log(` âšī¸ Using frontmatter status (no ACs/tasks): ${completion.frontmatterStatus} â ${newStatusLabel}`);
|
|
618
659
|
} else {
|
|
619
660
|
newStatusLabel = 'status:not_started';
|
|
620
661
|
}
|
|
@@ -637,7 +678,7 @@ export class GitHubFeatureSync {
|
|
|
637
678
|
issueNumber.toString(),
|
|
638
679
|
'--remove-label',
|
|
639
680
|
...statusLabels,
|
|
640
|
-
]);
|
|
681
|
+
], { env: this.getGhEnv() });
|
|
641
682
|
}
|
|
642
683
|
|
|
643
684
|
// Step 2: Add new status label
|
|
@@ -647,7 +688,7 @@ export class GitHubFeatureSync {
|
|
|
647
688
|
issueNumber.toString(),
|
|
648
689
|
'--add-label',
|
|
649
690
|
newStatusLabel,
|
|
650
|
-
]);
|
|
691
|
+
], { env: this.getGhEnv() });
|
|
651
692
|
|
|
652
693
|
if (result.exitCode === 0) {
|
|
653
694
|
console.log(` đˇī¸ Updated label: ${newStatusLabel}`);
|
|
@@ -686,7 +727,7 @@ export class GitHubFeatureSync {
|
|
|
686
727
|
'repos/:owner/:repo/issues/' + issueNumber + '/comments',
|
|
687
728
|
'--jq',
|
|
688
729
|
'.[-1] | {body: .body, created_at: .created_at}', // Get last comment only
|
|
689
|
-
]);
|
|
730
|
+
], { env: this.getGhEnv() });
|
|
690
731
|
|
|
691
732
|
let lastCommentBody = '';
|
|
692
733
|
if (commentsResult.exitCode === 0 && commentsResult.stdout.trim()) {
|
|
@@ -727,7 +768,7 @@ export class GitHubFeatureSync {
|
|
|
727
768
|
issueNumber.toString(),
|
|
728
769
|
'--body',
|
|
729
770
|
newCommentBody,
|
|
730
|
-
]);
|
|
771
|
+
], { env: this.getGhEnv() });
|
|
731
772
|
console.log(
|
|
732
773
|
` đ Progress: ${completion.acsPercentage.toFixed(0)}% ACs, ${completion.tasksPercentage.toFixed(0)}% tasks (updated)`
|
|
733
774
|
);
|