specweave 0.18.1 → 0.20.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.md +229 -1817
- package/README.md +68 -0
- package/bin/specweave.js +62 -6
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +3 -0
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
- package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +21 -0
- package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +1 -0
- package/dist/plugins/specweave/lib/hooks/update-ac-status.js +162 -0
- package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +65 -6
- package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +112 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.js +301 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -0
- package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +3 -3
- package/dist/plugins/specweave-github/lib/duplicate-detector.js +3 -3
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +7 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/epic-content-builder.js +42 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +14 -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 +51 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.js +1 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +87 -0
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +412 -0
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +64 -13
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts +78 -0
- package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/progress-comment-builder.js +237 -0
- package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts +97 -0
- package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-content-builder.js +301 -0
- package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +83 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +386 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +8 -6
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +78 -117
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -1
- package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.d.ts +57 -0
- package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +248 -0
- package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/cli/types.d.ts +82 -0
- package/dist/plugins/specweave-kafka/lib/cli/types.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/cli/types.js +13 -0
- package/dist/plugins/specweave-kafka/lib/cli/types.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/mcp/detector.d.ts +49 -0
- package/dist/plugins/specweave-kafka/lib/mcp/detector.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/mcp/detector.js +316 -0
- package/dist/plugins/specweave-kafka/lib/mcp/detector.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/mcp/types.d.ts +70 -0
- package/dist/plugins/specweave-kafka/lib/mcp/types.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/mcp/types.js +23 -0
- package/dist/plugins/specweave-kafka/lib/mcp/types.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/utils/partitioning.d.ts +85 -0
- package/dist/plugins/specweave-kafka/lib/utils/partitioning.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/utils/partitioning.js +281 -0
- package/dist/plugins/specweave-kafka/lib/utils/partitioning.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/utils/sizing.d.ts +75 -0
- package/dist/plugins/specweave-kafka/lib/utils/sizing.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/utils/sizing.js +238 -0
- package/dist/plugins/specweave-kafka/lib/utils/sizing.js.map +1 -0
- package/dist/src/cli/commands/import-docs.js +4 -4
- package/dist/src/cli/commands/import-docs.js.map +1 -1
- package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
- package/dist/src/cli/commands/init-multiproject.js +17 -18
- package/dist/src/cli/commands/init-multiproject.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js +8 -4
- package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
- package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
- package/dist/src/cli/commands/switch-project.js +9 -26
- package/dist/src/cli/commands/switch-project.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-content.js +3 -0
- package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
- package/dist/src/core/deduplication/command-deduplicator.d.ts +166 -0
- package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -0
- package/dist/src/core/deduplication/command-deduplicator.js +254 -0
- package/dist/src/core/deduplication/command-deduplicator.js.map +1 -0
- package/dist/src/core/increment/active-increment-manager.d.ts +42 -15
- package/dist/src/core/increment/active-increment-manager.d.ts.map +1 -1
- package/dist/src/core/increment/active-increment-manager.js +113 -46
- package/dist/src/core/increment/active-increment-manager.js.map +1 -1
- package/dist/src/core/increment/conflict-resolver.d.ts +40 -0
- package/dist/src/core/increment/conflict-resolver.d.ts.map +1 -0
- package/dist/src/core/increment/conflict-resolver.js +219 -0
- package/dist/src/core/increment/conflict-resolver.js.map +1 -0
- package/dist/src/core/increment/discipline-checker.d.ts.map +1 -1
- package/dist/src/core/increment/discipline-checker.js +7 -1
- package/dist/src/core/increment/discipline-checker.js.map +1 -1
- package/dist/src/core/increment/duplicate-detector.d.ts +52 -0
- package/dist/src/core/increment/duplicate-detector.d.ts.map +1 -0
- package/dist/src/core/increment/duplicate-detector.js +276 -0
- package/dist/src/core/increment/duplicate-detector.js.map +1 -0
- package/dist/src/core/increment/increment-archiver.d.ts +90 -0
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -0
- package/dist/src/core/increment/increment-archiver.js +368 -0
- package/dist/src/core/increment/increment-archiver.js.map +1 -0
- package/dist/src/core/increment/increment-reopener.d.ts +165 -0
- package/dist/src/core/increment/increment-reopener.d.ts.map +1 -0
- package/dist/src/core/increment/increment-reopener.js +390 -0
- package/dist/src/core/increment/increment-reopener.js.map +1 -0
- package/dist/src/core/increment/metadata-manager.d.ts +26 -1
- package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +143 -5
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/increment/recent-work-scanner.d.ts +121 -0
- package/dist/src/core/increment/recent-work-scanner.d.ts.map +1 -0
- package/dist/src/core/increment/recent-work-scanner.js +303 -0
- package/dist/src/core/increment/recent-work-scanner.js.map +1 -0
- package/dist/src/core/increment/types.d.ts +1 -0
- package/dist/src/core/increment/types.d.ts.map +1 -1
- package/dist/src/core/increment-utils.d.ts +112 -0
- package/dist/src/core/increment-utils.d.ts.map +1 -0
- package/dist/src/core/increment-utils.js +210 -0
- package/dist/src/core/increment-utils.js.map +1 -0
- package/dist/src/core/living-docs/ac-project-specific-generator.d.ts +65 -0
- package/dist/src/core/living-docs/ac-project-specific-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/ac-project-specific-generator.js +175 -0
- package/dist/src/core/living-docs/ac-project-specific-generator.js.map +1 -0
- package/dist/src/core/living-docs/feature-archiver.d.ts +130 -0
- package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -0
- package/dist/src/core/living-docs/feature-archiver.js +549 -0
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -0
- package/dist/src/core/living-docs/feature-id-manager.d.ts +81 -0
- package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -0
- package/dist/src/core/living-docs/feature-id-manager.js +339 -0
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -0
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts +144 -83
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js +488 -270
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/index.d.ts +6 -0
- package/dist/src/core/living-docs/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/index.js +6 -0
- package/dist/src/core/living-docs/index.js.map +1 -1
- package/dist/src/core/living-docs/project-detector.d.ts +6 -0
- package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
- package/dist/src/core/living-docs/project-detector.js +35 -1
- package/dist/src/core/living-docs/project-detector.js.map +1 -1
- package/dist/src/core/living-docs/spec-distributor.d.ts +100 -26
- package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -1
- package/dist/src/core/living-docs/spec-distributor.js +1275 -258
- package/dist/src/core/living-docs/spec-distributor.js.map +1 -1
- package/dist/src/core/living-docs/task-project-specific-generator.d.ts +109 -0
- package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/task-project-specific-generator.js +221 -0
- package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -0
- package/dist/src/core/living-docs/types.d.ts +143 -0
- package/dist/src/core/living-docs/types.d.ts.map +1 -1
- package/dist/src/core/project-manager.d.ts +2 -17
- package/dist/src/core/project-manager.d.ts.map +1 -1
- package/dist/src/core/project-manager.js +68 -48
- package/dist/src/core/project-manager.js.map +1 -1
- package/dist/src/core/spec-content-sync.d.ts +1 -1
- package/dist/src/core/spec-content-sync.d.ts.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.js +2 -1
- package/dist/src/core/sync/enhanced-content-builder.js.map +1 -1
- package/dist/src/core/sync/performance-optimizer.d.ts +153 -0
- package/dist/src/core/sync/performance-optimizer.d.ts.map +1 -0
- package/dist/src/core/sync/performance-optimizer.js +220 -0
- package/dist/src/core/sync/performance-optimizer.js.map +1 -0
- package/dist/src/core/sync/retry-handler.d.ts +98 -0
- package/dist/src/core/sync/retry-handler.d.ts.map +1 -0
- package/dist/src/core/sync/retry-handler.js +196 -0
- package/dist/src/core/sync/retry-handler.js.map +1 -0
- package/dist/src/core/types/config.d.ts +94 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js +16 -0
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +6 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/increment-metadata.js +10 -1
- package/dist/src/core/types/increment-metadata.js.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.js +4 -8
- package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.js +4 -8
- package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/COMMANDS.md +13 -4
- package/plugins/specweave/commands/specweave-abandon.md +22 -20
- package/plugins/specweave/commands/specweave-archive-features.md +121 -0
- package/plugins/specweave/commands/specweave-archive-increments.md +82 -0
- package/plugins/specweave/commands/specweave-archive.md +363 -0
- package/plugins/specweave/commands/specweave-backlog.md +211 -0
- package/plugins/specweave/commands/specweave-fix-duplicates.md +517 -0
- package/plugins/specweave/commands/specweave-increment.md +4 -3
- package/plugins/specweave/commands/specweave-progress.md +176 -27
- package/plugins/specweave/commands/specweave-reopen.md +391 -0
- package/plugins/specweave/commands/specweave-restore-feature.md +90 -0
- package/plugins/specweave/commands/specweave-restore.md +309 -0
- package/plugins/specweave/commands/specweave-resume.md +51 -23
- package/plugins/specweave/commands/specweave-status.md +41 -7
- package/plugins/specweave/commands/specweave-sync-specs.md +425 -0
- package/plugins/specweave/hooks/hooks.json +4 -0
- package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
- package/plugins/specweave/hooks/post-task-completion.sh +39 -0
- package/plugins/specweave/hooks/pre-command-deduplication.sh +83 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
- package/plugins/specweave/lib/hooks/sync-living-docs.js +2 -0
- package/plugins/specweave/lib/hooks/sync-living-docs.ts +4 -0
- package/plugins/specweave/lib/hooks/update-ac-status.js +102 -0
- package/plugins/specweave/lib/hooks/update-ac-status.ts +192 -0
- package/plugins/specweave/skills/archive-increments/SKILL.md +198 -0
- package/plugins/specweave/skills/increment-planner/scripts/feature-utils.js +14 -0
- package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +244 -0
- package/plugins/specweave-ado/lib/ado-spec-content-sync.js +49 -5
- package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +72 -6
- package/plugins/specweave-confluent/.claude-plugin/plugin.json +23 -0
- package/plugins/specweave-confluent/README.md +375 -0
- package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +306 -0
- package/plugins/specweave-confluent/skills/confluent-kafka-connect/SKILL.md +453 -0
- package/plugins/specweave-confluent/skills/confluent-ksqldb/SKILL.md +470 -0
- package/plugins/specweave-confluent/skills/confluent-schema-registry/SKILL.md +316 -0
- package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +2 -2
- package/plugins/specweave-github/agents/user-story-updater/AGENT.md +148 -0
- package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +1 -1
- package/plugins/specweave-github/commands/specweave-github-update-user-story.md +156 -0
- package/plugins/specweave-github/hooks/post-task-completion.sh +10 -9
- package/plugins/specweave-github/lib/completion-calculator.js +262 -0
- package/plugins/specweave-github/lib/completion-calculator.ts +434 -0
- package/plugins/specweave-github/lib/duplicate-detector.js +3 -3
- package/plugins/specweave-github/lib/duplicate-detector.ts +4 -4
- package/plugins/specweave-github/lib/epic-content-builder.js +38 -0
- package/plugins/specweave-github/lib/epic-content-builder.ts +59 -0
- package/plugins/specweave-github/lib/github-client-v2.js +49 -0
- package/plugins/specweave-github/lib/github-client-v2.ts +59 -0
- package/plugins/specweave-github/lib/github-epic-sync.ts +1 -1
- package/plugins/specweave-github/lib/github-feature-sync.js +381 -0
- package/plugins/specweave-github/lib/github-feature-sync.ts +568 -0
- package/plugins/specweave-github/lib/github-spec-content-sync.js +40 -10
- package/plugins/specweave-github/lib/github-spec-content-sync.ts +82 -14
- package/plugins/specweave-github/lib/progress-comment-builder.js +229 -0
- package/plugins/specweave-github/lib/progress-comment-builder.ts +324 -0
- package/plugins/specweave-github/lib/user-story-content-builder.js +299 -0
- package/plugins/specweave-github/lib/user-story-content-builder.ts +413 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.js +344 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.ts +543 -0
- package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +189 -0
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
- package/plugins/specweave-jira/lib/{enhanced-jira-sync.ts.disabled → enhanced-jira-sync.ts} +26 -52
- package/plugins/specweave-kafka/.claude-plugin/plugin.json +26 -0
- package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +483 -0
- package/plugins/specweave-kafka/README.md +242 -0
- package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +235 -0
- package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +209 -0
- package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +266 -0
- package/plugins/specweave-kafka/commands/deploy.md +99 -0
- package/plugins/specweave-kafka/commands/dev-env.md +176 -0
- package/plugins/specweave-kafka/commands/mcp-configure.md +101 -0
- package/plugins/specweave-kafka/commands/monitor-setup.md +96 -0
- package/plugins/specweave-kafka/docker/kafka-local/docker-compose.yml +187 -0
- package/plugins/specweave-kafka/docker/redpanda/docker-compose.yml +199 -0
- package/plugins/specweave-kafka/docker/templates/consumer-nodejs.js +225 -0
- package/plugins/specweave-kafka/docker/templates/consumer-python.py +220 -0
- package/plugins/specweave-kafka/docker/templates/producer-nodejs.js +168 -0
- package/plugins/specweave-kafka/docker/templates/producer-python.py +167 -0
- package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.js +438 -0
- package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.ts +541 -0
- package/plugins/specweave-kafka/lib/adapters/platform-adapter.js +47 -0
- package/plugins/specweave-kafka/lib/adapters/platform-adapter.ts +343 -0
- package/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +258 -0
- package/plugins/specweave-kafka/lib/cli/kcat-wrapper.ts +298 -0
- package/plugins/specweave-kafka/lib/cli/types.js +10 -0
- package/plugins/specweave-kafka/lib/cli/types.ts +92 -0
- package/plugins/specweave-kafka/lib/connectors/connector-catalog.js +305 -0
- package/plugins/specweave-kafka/lib/connectors/connector-catalog.ts +528 -0
- package/plugins/specweave-kafka/lib/documentation/diagram-generator.js +114 -0
- package/plugins/specweave-kafka/lib/documentation/diagram-generator.ts +195 -0
- package/plugins/specweave-kafka/lib/documentation/exporter.js +210 -0
- package/plugins/specweave-kafka/lib/documentation/exporter.ts +338 -0
- package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.js +60 -0
- package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.ts +130 -0
- package/plugins/specweave-kafka/lib/documentation/topology-generator.js +143 -0
- package/plugins/specweave-kafka/lib/documentation/topology-generator.ts +290 -0
- package/plugins/specweave-kafka/lib/mcp/detector.js +298 -0
- package/plugins/specweave-kafka/lib/mcp/detector.ts +352 -0
- package/plugins/specweave-kafka/lib/mcp/types.js +21 -0
- package/plugins/specweave-kafka/lib/mcp/types.ts +77 -0
- package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.js +193 -0
- package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.ts +362 -0
- package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.js +188 -0
- package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.ts +359 -0
- package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.js +195 -0
- package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.ts +380 -0
- package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.js +209 -0
- package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.ts +358 -0
- package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.js +354 -0
- package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.ts +563 -0
- package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.js +259 -0
- package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.ts +516 -0
- package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.js +233 -0
- package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.ts +423 -0
- package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.js +266 -0
- package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.ts +445 -0
- package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.js +312 -0
- package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.ts +561 -0
- package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.js +289 -0
- package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.ts +607 -0
- package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.js +264 -0
- package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.ts +498 -0
- package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.js +263 -0
- package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.ts +549 -0
- package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.js +205 -0
- package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.ts +399 -0
- package/plugins/specweave-kafka/lib/performance/performance-optimizer.js +249 -0
- package/plugins/specweave-kafka/lib/performance/performance-optimizer.ts +427 -0
- package/plugins/specweave-kafka/lib/security/kafka-security.js +252 -0
- package/plugins/specweave-kafka/lib/security/kafka-security.ts +494 -0
- package/plugins/specweave-kafka/lib/utils/capacity-planner.js +203 -0
- package/plugins/specweave-kafka/lib/utils/capacity-planner.ts +469 -0
- package/plugins/specweave-kafka/lib/utils/config-validator.js +419 -0
- package/plugins/specweave-kafka/lib/utils/config-validator.ts +564 -0
- package/plugins/specweave-kafka/lib/utils/partitioning.js +329 -0
- package/plugins/specweave-kafka/lib/utils/partitioning.ts +473 -0
- package/plugins/specweave-kafka/lib/utils/sizing.js +221 -0
- package/plugins/specweave-kafka/lib/utils/sizing.ts +374 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-broker-metrics.json +628 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-cluster-overview.json +564 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-consumer-lag.json +509 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-jvm-metrics.json +674 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-topic-metrics.json +578 -0
- package/plugins/specweave-kafka/monitoring/grafana/provisioning/dashboards/kafka.yml +17 -0
- package/plugins/specweave-kafka/monitoring/grafana/provisioning/datasources/prometheus.yml +17 -0
- package/plugins/specweave-kafka/monitoring/prometheus/kafka-alerts.yml +415 -0
- package/plugins/specweave-kafka/monitoring/prometheus/kafka-jmx-exporter.yml +256 -0
- package/plugins/specweave-kafka/package.json +41 -0
- package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +647 -0
- package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +433 -0
- package/plugins/specweave-kafka/skills/kafka-iac-deployment/SKILL.md +449 -0
- package/plugins/specweave-kafka/skills/kafka-kubernetes/SKILL.md +667 -0
- package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +273 -0
- package/plugins/specweave-kafka/skills/kafka-observability/SKILL.md +576 -0
- package/plugins/specweave-kafka/templates/config/broker-production.properties +254 -0
- package/plugins/specweave-kafka/templates/config/consumer-low-latency.properties +112 -0
- package/plugins/specweave-kafka/templates/config/producer-high-throughput.properties +120 -0
- package/plugins/specweave-kafka/templates/migration/mirrormaker2-config.properties +234 -0
- package/plugins/specweave-kafka/templates/monitoring/grafana/multi-cluster-dashboard.json +686 -0
- package/plugins/specweave-kafka/terraform/apache-kafka/main.tf +347 -0
- package/plugins/specweave-kafka/terraform/apache-kafka/outputs.tf +107 -0
- package/plugins/specweave-kafka/terraform/apache-kafka/templates/kafka-broker-init.sh.tpl +216 -0
- package/plugins/specweave-kafka/terraform/apache-kafka/variables.tf +156 -0
- package/plugins/specweave-kafka/terraform/aws-msk/main.tf +362 -0
- package/plugins/specweave-kafka/terraform/aws-msk/outputs.tf +93 -0
- package/plugins/specweave-kafka/terraform/aws-msk/templates/server.properties.tpl +32 -0
- package/plugins/specweave-kafka/terraform/aws-msk/variables.tf +235 -0
- package/plugins/specweave-kafka/terraform/azure-event-hubs/main.tf +281 -0
- package/plugins/specweave-kafka/terraform/azure-event-hubs/outputs.tf +118 -0
- package/plugins/specweave-kafka/terraform/azure-event-hubs/variables.tf +148 -0
- package/plugins/specweave-kafka/tsconfig.json +21 -0
- package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +23 -0
- package/plugins/specweave-kafka-streams/README.md +310 -0
- package/plugins/specweave-kafka-streams/skills/kafka-streams-topology/SKILL.md +539 -0
- package/plugins/specweave-n8n/.claude-plugin/plugin.json +22 -0
- package/plugins/specweave-n8n/README.md +354 -0
- package/plugins/specweave-n8n/skills/n8n-kafka-workflows/SKILL.md +504 -0
- package/plugins/specweave-release/commands/specweave-release-platform.md +1 -1
- package/plugins/specweave-release/hooks/post-task-completion.sh +2 -2
- package/src/templates/AGENTS.md.template +601 -7
- package/src/templates/CLAUDE.md.template +188 -88
- package/plugins/specweave-ado/commands/specweave-ado-sync-spec.md +0 -255
- package/plugins/specweave-github/commands/specweave-github-sync-epic.md +0 -248
- package/plugins/specweave-github/commands/specweave-github-sync-from.md +0 -147
- package/plugins/specweave-github/commands/specweave-github-sync-spec.md +0 -208
- package/plugins/specweave-github/commands/specweave-github-sync-tasks.md +0 -530
- package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +0 -267
- package/plugins/specweave-jira/commands/specweave-jira-sync-spec.md +0 -240
|
@@ -1,18 +1,38 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: specweave:progress
|
|
3
|
-
description: Show
|
|
3
|
+
description: Show progress for ALL active increments (up to 2), task completion %, PM gates, and next actions
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Progress Tracking
|
|
7
7
|
|
|
8
|
-
**Quick Status Check**: See exactly where you are in your
|
|
8
|
+
**Quick Status Check**: See exactly where you are in ALL your active increments.
|
|
9
|
+
|
|
10
|
+
**NEW**: Now shows **ALL active increments** (max 2) with full progress for each!
|
|
9
11
|
|
|
10
12
|
Shows:
|
|
11
|
-
-
|
|
12
|
-
- Task completion percentage
|
|
13
|
+
- **ALL active increment statuses** (not just one!)
|
|
14
|
+
- Task completion percentage (per increment)
|
|
13
15
|
- PM gate preview (tasks, tests, docs)
|
|
14
16
|
- Next action to take
|
|
15
17
|
- Time tracking
|
|
18
|
+
- WIP limit warnings (if >2 active)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Check progress for all active increments (recommended)
|
|
26
|
+
specweave progress
|
|
27
|
+
|
|
28
|
+
# Or use the full command name
|
|
29
|
+
specweave status --verbose
|
|
30
|
+
|
|
31
|
+
# Filter by increment type
|
|
32
|
+
specweave progress --type feature
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Note**: `progress` is an alias for `status --verbose` with automatic verbose mode enabled.
|
|
16
36
|
|
|
17
37
|
---
|
|
18
38
|
|
|
@@ -151,13 +171,20 @@ Next Action:
|
|
|
151
171
|
|
|
152
172
|
## Implementation
|
|
153
173
|
|
|
154
|
-
**How `/progress` works
|
|
174
|
+
**How `/progress` works** (UPGRADED for multi-active support):
|
|
155
175
|
|
|
156
|
-
### Step 1: Find Active
|
|
176
|
+
### Step 1: Find ALL Active Increments (FAST!)
|
|
157
177
|
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
|
|
178
|
+
```typescript
|
|
179
|
+
// NEW: Use ActiveIncrementManager cache (10x faster!)
|
|
180
|
+
import { MetadataManager } from './src/core/increment/metadata-manager.js';
|
|
181
|
+
|
|
182
|
+
// Get ALL active increments (from cache, not scan!)
|
|
183
|
+
const activeIncrements = MetadataManager.getActive();
|
|
184
|
+
|
|
185
|
+
// Performance:
|
|
186
|
+
// - OLD: Scan 31 metadata files (~50ms)
|
|
187
|
+
// - NEW: Read 1 cache + 1-2 metadata files (~5ms) ✅
|
|
161
188
|
```
|
|
162
189
|
|
|
163
190
|
### Step 2: Parse Tasks and Calculate %
|
|
@@ -194,19 +221,27 @@ Overall: (6 + 3 + 1) / (16 + 4.5 + 1) = 10/21.5 = 46.5%
|
|
|
194
221
|
# - Status: ✅ updated, ⏳ partial, ❌ outdated
|
|
195
222
|
```
|
|
196
223
|
|
|
197
|
-
### Step 4:
|
|
198
|
-
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
224
|
+
### Step 4: Display ALL Active Increments
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
// NEW: Display progress for EACH active increment
|
|
228
|
+
for (const increment of activeIncrements) {
|
|
229
|
+
console.log(`\n📊 ${increment.id}`);
|
|
230
|
+
console.log(`Status: ${increment.status}`);
|
|
231
|
+
console.log(`Task Progress: ${completed}/${total} (${percent}%)`);
|
|
232
|
+
console.log(`Next: /specweave:do ${increment.id}`);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Show WIP limit info
|
|
236
|
+
if (activeIncrements.length === 0) {
|
|
237
|
+
console.log('No active increments. Run /specweave:increment to start new work.');
|
|
238
|
+
} else if (activeIncrements.length === 1) {
|
|
239
|
+
console.log('✅ 1 active increment (optimal focus)');
|
|
240
|
+
} else if (activeIncrements.length === 2) {
|
|
241
|
+
console.log('✅ 2 active increments (at WIP limit, but OK)');
|
|
242
|
+
} else if (activeIncrements.length > 2) {
|
|
243
|
+
console.log('⚠️ >2 active increments (exceeds WIP limit!)');
|
|
244
|
+
}
|
|
210
245
|
```
|
|
211
246
|
|
|
212
247
|
---
|
|
@@ -238,11 +273,12 @@ Use `/specweave:progress` when you:
|
|
|
238
273
|
|
|
239
274
|
## Pro Tips
|
|
240
275
|
|
|
241
|
-
1. **
|
|
242
|
-
2. **
|
|
243
|
-
3. **
|
|
244
|
-
4. **
|
|
245
|
-
5. **
|
|
276
|
+
1. **Shows ALL active increments** - `/specweave:progress` displays up to 2 active increments with full progress
|
|
277
|
+
2. **10x faster** - Uses cache instead of scanning 31 metadata files (5ms vs 50ms)
|
|
278
|
+
3. **Smart resume** - `/specweave:do` picks up where you left off (no task ID needed)
|
|
279
|
+
4. **WIP limits** - 2 active increments allowed (feature + hotfix/bug)
|
|
280
|
+
5. **Completion %** - P1 tasks weighted higher (they're critical path)
|
|
281
|
+
6. **Time tracking** - Warns if tasks are stuck (>2 hours inactive)
|
|
246
282
|
|
|
247
283
|
---
|
|
248
284
|
|
|
@@ -256,3 +292,116 @@ Use `/specweave:progress` when you:
|
|
|
256
292
|
---
|
|
257
293
|
|
|
258
294
|
**💡 Remember**: `/progress` is your "where am I?" command. Use it anytime you need orientation!
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Executable Implementation
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
import { Task } from '@claude/types';
|
|
302
|
+
|
|
303
|
+
const task = new Task('progress-check', 'Show progress for all active increments');
|
|
304
|
+
|
|
305
|
+
task.run(async () => {
|
|
306
|
+
const { MetadataManager } = await import('../../../dist/src/core/increment/metadata-manager.js');
|
|
307
|
+
const fs = await import('fs-extra');
|
|
308
|
+
const path = await import('path');
|
|
309
|
+
|
|
310
|
+
// Step 1: Get ALL active increments (FAST via cache!)
|
|
311
|
+
const activeIncrements = MetadataManager.getActive();
|
|
312
|
+
|
|
313
|
+
// Step 2: Check if specific increment requested
|
|
314
|
+
const requestedId = process.argv[2]?.replace(/^0+/, '').padStart(4, '0');
|
|
315
|
+
const increments = requestedId
|
|
316
|
+
? activeIncrements.filter(inc => inc.id === requestedId)
|
|
317
|
+
: activeIncrements;
|
|
318
|
+
|
|
319
|
+
// Step 3: Display results
|
|
320
|
+
console.log('\n📊 Current Progress\n');
|
|
321
|
+
|
|
322
|
+
if (increments.length === 0) {
|
|
323
|
+
if (requestedId) {
|
|
324
|
+
console.log(`❌ Increment ${requestedId} is not active`);
|
|
325
|
+
} else {
|
|
326
|
+
console.log('No active increments found.\n');
|
|
327
|
+
console.log('Recent Increments:');
|
|
328
|
+
const allIncrements = MetadataManager.getAll()
|
|
329
|
+
.filter(m => m.status === 'completed' || m.status === 'closed')
|
|
330
|
+
.sort((a, b) => new Date(b.lastActivity).getTime() - new Date(a.lastActivity).getTime())
|
|
331
|
+
.slice(0, 3);
|
|
332
|
+
|
|
333
|
+
allIncrements.forEach(inc => {
|
|
334
|
+
const age = Math.floor((Date.now() - new Date(inc.lastActivity).getTime()) / (1000 * 60 * 60 * 24));
|
|
335
|
+
console.log(`├─ ${inc.id} (${inc.status}) - ${age} day${age === 1 ? '' : 's'} ago`);
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
console.log('\nNext Action: Run /specweave:increment "feature description" to start new work');
|
|
339
|
+
}
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Step 4: Show progress for each active increment
|
|
344
|
+
for (const increment of increments) {
|
|
345
|
+
console.log(`📦 Increment: ${increment.id}`);
|
|
346
|
+
console.log(`Status: ${increment.status}`);
|
|
347
|
+
|
|
348
|
+
const started = new Date(increment.created);
|
|
349
|
+
const lastActivity = new Date(increment.lastActivity);
|
|
350
|
+
const ageHours = Math.floor((Date.now() - started.getTime()) / (1000 * 60 * 60));
|
|
351
|
+
const lastActivityHours = Math.floor((Date.now() - lastActivity.getTime()) / (1000 * 60 * 60));
|
|
352
|
+
|
|
353
|
+
console.log(`Started: ${ageHours} hours ago`);
|
|
354
|
+
console.log(`Last Activity: ${lastActivityHours} hours ago`);
|
|
355
|
+
|
|
356
|
+
// Try to read tasks.md for progress
|
|
357
|
+
const incrementPath = path.default.join(process.cwd(), '.specweave/increments', increment.id);
|
|
358
|
+
const tasksPath = path.default.join(incrementPath, 'tasks.md');
|
|
359
|
+
|
|
360
|
+
if (await fs.default.pathExists(tasksPath)) {
|
|
361
|
+
const tasksContent = await fs.default.readFile(tasksPath, 'utf-8');
|
|
362
|
+
|
|
363
|
+
// Count tasks
|
|
364
|
+
const taskLines = tasksContent.split('\n').filter(line =>
|
|
365
|
+
line.match(/^#+\s+(T-?\d+|Task-?\d+):/i)
|
|
366
|
+
);
|
|
367
|
+
const completedTasks = tasksContent.split('\n').filter(line =>
|
|
368
|
+
line.includes('[✅]') || line.includes('[x]') || line.includes('[X]')
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
const total = taskLines.length;
|
|
372
|
+
const completed = completedTasks.length;
|
|
373
|
+
const percent = total > 0 ? Math.round((completed / total) * 100) : 0;
|
|
374
|
+
|
|
375
|
+
console.log(`\nTask Progress: ${completed}/${total} completed (${percent}%)`);
|
|
376
|
+
|
|
377
|
+
if (total > 0) {
|
|
378
|
+
console.log('\nTasks:');
|
|
379
|
+
taskLines.slice(0, 10).forEach(line => {
|
|
380
|
+
const isComplete = line.includes('[✅]') || line.includes('[x]') || line.includes('[X]');
|
|
381
|
+
const marker = isComplete ? '✅' : '⏳';
|
|
382
|
+
const taskName = line.replace(/^#+\s+/, '').replace(/\s*\[.*?\]\s*/, '').trim();
|
|
383
|
+
console.log(` ${marker} ${taskName}`);
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
if (taskLines.length > 10) {
|
|
387
|
+
console.log(` ... and ${taskLines.length - 10} more tasks`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
console.log(`\nNext Action: Run /specweave:do ${increment.id} to continue work\n`);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// Step 5: Show WIP limit warnings
|
|
396
|
+
if (activeIncrements.length > 2) {
|
|
397
|
+
console.log('⚠️ Warning: More than 2 active increments (exceeds WIP limit)');
|
|
398
|
+
console.log('💡 Recommendation: Focus on completing one increment before starting new work\n');
|
|
399
|
+
} else if (activeIncrements.length === 2) {
|
|
400
|
+
console.log('✅ 2 active increments (at WIP limit, but OK)\n');
|
|
401
|
+
} else if (activeIncrements.length === 1) {
|
|
402
|
+
console.log('✅ 1 active increment (optimal focus)\n');
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
export default task;
|
|
407
|
+
```
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave-reopen
|
|
3
|
+
description: |
|
|
4
|
+
Reopen completed increments, tasks, or user stories when issues are discovered.
|
|
5
|
+
Validates WIP limits, creates audit trail, and syncs to external tools.
|
|
6
|
+
Use when recently completed work has issues that need fixing.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Reopen Increment, Task, or User Story
|
|
10
|
+
|
|
11
|
+
Reopen completed work when issues are discovered after completion.
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Reopen entire increment
|
|
17
|
+
/specweave:reopen 0031 --reason "GitHub sync failing"
|
|
18
|
+
|
|
19
|
+
# Reopen specific task
|
|
20
|
+
/specweave:reopen 0031 --task T-003 --reason "API integration broken"
|
|
21
|
+
|
|
22
|
+
# Reopen user story (all related tasks)
|
|
23
|
+
/specweave:reopen 0031 --user-story US-001 --reason "Acceptance criteria not met"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Smart Detection First!
|
|
27
|
+
|
|
28
|
+
**Before using this command manually**, try reporting your issue naturally:
|
|
29
|
+
```
|
|
30
|
+
"The GitHub sync isn't working"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The `smart-reopen-detector` skill will:
|
|
34
|
+
1. 🔍 Scan recent work
|
|
35
|
+
2. 🎯 Find related items
|
|
36
|
+
3. 💡 Suggest the exact command to run
|
|
37
|
+
|
|
38
|
+
## Usage
|
|
39
|
+
|
|
40
|
+
### Reopen Entire Increment
|
|
41
|
+
|
|
42
|
+
Reopens the increment and marks all tasks as active.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
/specweave:reopen <increment-id> --reason "Why reopening"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Example**:
|
|
49
|
+
```bash
|
|
50
|
+
/specweave:reopen 0031-external-tool-status-sync --reason "GitHub sync failing in production"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**What happens**:
|
|
54
|
+
1. ✅ Changes status: COMPLETED → ACTIVE
|
|
55
|
+
2. 📋 Reopens all completed tasks: [x] → [ ]
|
|
56
|
+
3. ⚠️ Checks WIP limits (warns if exceeded)
|
|
57
|
+
4. 📝 Creates audit trail in metadata.json
|
|
58
|
+
5. 🔄 Syncs to external tools (GitHub/JIRA/ADO)
|
|
59
|
+
6. 📊 Updates status line
|
|
60
|
+
|
|
61
|
+
### Reopen Specific Task
|
|
62
|
+
|
|
63
|
+
Reopens a single task without changing increment status.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
/specweave:reopen <increment-id> --task <task-id> --reason "Why reopening"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Example**:
|
|
70
|
+
```bash
|
|
71
|
+
/specweave:reopen 0031 --task T-003 --reason "GitHub API returning 500 errors"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**What happens**:
|
|
75
|
+
1. ✅ Updates task status: [x] → [ ]
|
|
76
|
+
2. 📝 Adds annotation: "Reopened: YYYY-MM-DD - reason"
|
|
77
|
+
3. 🔄 Unchecks task checkbox in external issue (if synced)
|
|
78
|
+
4. 📊 Updates status line progress
|
|
79
|
+
|
|
80
|
+
### Reopen User Story
|
|
81
|
+
|
|
82
|
+
Reopens a user story and all its related tasks.
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
/specweave:reopen <increment-id> --user-story <us-id> --reason "Why reopening"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Example**:
|
|
89
|
+
```bash
|
|
90
|
+
/specweave:reopen 0031 --user-story US-001 --reason "Authentication not working as specified"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**What happens**:
|
|
94
|
+
1. ✅ Finds all tasks with AC-US1-XX
|
|
95
|
+
2. 📋 Reopens each task: [x] → [ ]
|
|
96
|
+
3. 📄 Updates user story status in living docs
|
|
97
|
+
4. 🔄 Syncs to external tools
|
|
98
|
+
|
|
99
|
+
### Force Reopen (Bypass WIP Limits)
|
|
100
|
+
|
|
101
|
+
Use `--force` to bypass WIP limit checks (use sparingly!).
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
/specweave:reopen <increment-id> --force --reason "Critical production issue"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Example**:
|
|
108
|
+
```bash
|
|
109
|
+
/specweave:reopen 0031 --force --reason "Production down, need immediate fix"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**⚠️ Warning**: This can violate WIP limits. Use only for:
|
|
113
|
+
- Critical production incidents
|
|
114
|
+
- Hotfixes
|
|
115
|
+
- When no other increment can be paused
|
|
116
|
+
|
|
117
|
+
## Parameters
|
|
118
|
+
|
|
119
|
+
| Parameter | Required | Description |
|
|
120
|
+
|-----------|----------|-------------|
|
|
121
|
+
| `<increment-id>` | Yes | Increment to reopen (e.g., `0031` or `0031-external-tool-status-sync`) |
|
|
122
|
+
| `--reason <text>` | Yes | Why reopening (for audit trail) |
|
|
123
|
+
| `--task <id>` | No | Reopen specific task (e.g., `T-003`) |
|
|
124
|
+
| `--user-story <id>` | No | Reopen user story + related tasks (e.g., `US-001`) |
|
|
125
|
+
| `--force` | No | Bypass WIP limit checks |
|
|
126
|
+
|
|
127
|
+
## WIP Limit Validation
|
|
128
|
+
|
|
129
|
+
The command automatically checks WIP limits before reopening increments.
|
|
130
|
+
|
|
131
|
+
**Example (limit exceeded)**:
|
|
132
|
+
```
|
|
133
|
+
⚠️ WIP LIMIT WARNING:
|
|
134
|
+
Current active: 2 features
|
|
135
|
+
Limit: 2 features
|
|
136
|
+
Reopening 0031 will EXCEED the limit (3/2)!
|
|
137
|
+
|
|
138
|
+
Options:
|
|
139
|
+
1. Pause another feature: /specweave:pause 0030 --reason "Paused for critical fix"
|
|
140
|
+
2. Complete another feature: /specweave:done 0029
|
|
141
|
+
3. Force reopen: /specweave:reopen 0031 --force --reason "Production critical"
|
|
142
|
+
|
|
143
|
+
Continue? (y/n)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Unlimited types** (no WIP check):
|
|
147
|
+
- `hotfix` - Critical production fixes
|
|
148
|
+
- `bug` - Production bug investigations
|
|
149
|
+
- `experiment` - POCs and spikes
|
|
150
|
+
|
|
151
|
+
## Audit Trail
|
|
152
|
+
|
|
153
|
+
Every reopen is tracked in the increment's metadata.json:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"id": "0031-external-tool-status-sync",
|
|
158
|
+
"status": "active",
|
|
159
|
+
"reopened": {
|
|
160
|
+
"count": 1,
|
|
161
|
+
"history": [
|
|
162
|
+
{
|
|
163
|
+
"date": "2025-11-14T15:30:00Z",
|
|
164
|
+
"reason": "GitHub sync failing",
|
|
165
|
+
"previousStatus": "completed",
|
|
166
|
+
"by": "user"
|
|
167
|
+
}
|
|
168
|
+
]
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Tasks are also annotated:
|
|
174
|
+
|
|
175
|
+
```markdown
|
|
176
|
+
### T-003: GitHub Content Sync
|
|
177
|
+
|
|
178
|
+
**Status**: [ ] (Reopened: 2025-11-14 - GitHub sync failing)
|
|
179
|
+
|
|
180
|
+
**Previous Completions**:
|
|
181
|
+
- Completed: 2025-11-12T10:00:00Z
|
|
182
|
+
- Reopened: 2025-11-14T15:30:00Z - GitHub sync failing
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## External Tool Sync
|
|
186
|
+
|
|
187
|
+
When you reopen an increment/task, it syncs to external tools:
|
|
188
|
+
|
|
189
|
+
### GitHub
|
|
190
|
+
- Reopens closed issue
|
|
191
|
+
- Updates issue body: "⚠️ **Reopened**: [reason]"
|
|
192
|
+
- Unchecks completed task checkboxes
|
|
193
|
+
- Adds label: `reopened`
|
|
194
|
+
|
|
195
|
+
### JIRA
|
|
196
|
+
- Transitions issue: Done → In Progress
|
|
197
|
+
- Adds comment: "Reopened: [reason]"
|
|
198
|
+
- Updates resolution: None
|
|
199
|
+
|
|
200
|
+
### Azure DevOps
|
|
201
|
+
- Updates work item state: Closed → Active
|
|
202
|
+
- Adds comment: "Reopened: [reason]"
|
|
203
|
+
|
|
204
|
+
## Examples
|
|
205
|
+
|
|
206
|
+
### Example 1: Production Bug
|
|
207
|
+
```bash
|
|
208
|
+
# Discover via smart detector
|
|
209
|
+
"The payment processing is broken after deployment"
|
|
210
|
+
|
|
211
|
+
# Suggested command (from smart detector)
|
|
212
|
+
/specweave:reopen 0028-payment-integration --reason "Payment processing failing in prod"
|
|
213
|
+
|
|
214
|
+
# Result
|
|
215
|
+
✅ Increment 0028 reopened
|
|
216
|
+
⚠️ WIP LIMIT: 3/2 active features (EXCEEDED)
|
|
217
|
+
📋 Reopened 5 tasks
|
|
218
|
+
🔄 Synced to GitHub issue #123
|
|
219
|
+
💡 Continue work: /specweave:do 0028
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Example 2: Specific Task Fix
|
|
223
|
+
```bash
|
|
224
|
+
# Surgical reopen (just one task)
|
|
225
|
+
/specweave:reopen 0031 --task T-003 --reason "GitHub API rate limiting not handled"
|
|
226
|
+
|
|
227
|
+
# Result
|
|
228
|
+
✅ Task T-003 reopened
|
|
229
|
+
📊 Progress: 23/24 tasks (95%)
|
|
230
|
+
💡 Fix and mark complete: [x] in tasks.md
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Example 3: User Story Not Met
|
|
234
|
+
```bash
|
|
235
|
+
# Reopen entire user story
|
|
236
|
+
/specweave:reopen 0025 --user-story US-002 --reason "Security requirements not satisfied"
|
|
237
|
+
|
|
238
|
+
# Result
|
|
239
|
+
✅ User story US-002 reopened
|
|
240
|
+
📋 Reopened 3 related tasks: T-004, T-005, T-006
|
|
241
|
+
📄 Updated living docs: us-002-security-requirements.md
|
|
242
|
+
🔄 Synced to JIRA story AUTH-123
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Status Line Integration
|
|
246
|
+
|
|
247
|
+
After reopening, the status line shows:
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
📊 0031-external-tool-status-sync | ⚠️ REOPENED | 23/24 tasks (95%) | GitHub sync failing
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
The `⚠️ REOPENED` badge indicates the increment was previously completed.
|
|
254
|
+
|
|
255
|
+
## Common Scenarios
|
|
256
|
+
|
|
257
|
+
### Scenario 1: Tests Passing Locally, Failing in CI
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# Reopen increment to investigate
|
|
261
|
+
/specweave:reopen 0032 --reason "CI tests failing, passing locally"
|
|
262
|
+
|
|
263
|
+
# Debug CI config
|
|
264
|
+
# Fix issue
|
|
265
|
+
# Mark complete again
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Scenario 2: Feature Works but Acceptance Criteria Not Met
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
# Reopen specific user story
|
|
272
|
+
/specweave:reopen 0029 --user-story US-003 --reason "Missing error handling requirement"
|
|
273
|
+
|
|
274
|
+
# Implement missing AC
|
|
275
|
+
# Complete user story
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Scenario 3: Regression Found
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
# Reopen old increment (if within 7 days)
|
|
282
|
+
/specweave:reopen 0027 --task T-012 --reason "Regression: login timeout increased"
|
|
283
|
+
|
|
284
|
+
# Fix regression
|
|
285
|
+
# Add regression test
|
|
286
|
+
# Complete
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Integration with Workflow
|
|
290
|
+
|
|
291
|
+
**Full workflow**:
|
|
292
|
+
```bash
|
|
293
|
+
# 1. Report issue (triggers smart detector)
|
|
294
|
+
"The GitHub sync is broken"
|
|
295
|
+
|
|
296
|
+
# 2. Smart detector suggests
|
|
297
|
+
# /specweave:reopen 0031 --task T-003 --reason "GitHub sync broken"
|
|
298
|
+
|
|
299
|
+
# 3. Execute reopen
|
|
300
|
+
/specweave:reopen 0031 --task T-003 --reason "GitHub sync broken"
|
|
301
|
+
|
|
302
|
+
# 4. Check status
|
|
303
|
+
/specweave:status
|
|
304
|
+
|
|
305
|
+
# 5. Fix the issue
|
|
306
|
+
# Edit code...
|
|
307
|
+
|
|
308
|
+
# 6. Mark complete
|
|
309
|
+
# Update tasks.md: [ ] → [x]
|
|
310
|
+
|
|
311
|
+
# 7. Close increment (if all tasks done)
|
|
312
|
+
/specweave:done 0031
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## Best Practices
|
|
316
|
+
|
|
317
|
+
### ✅ Do
|
|
318
|
+
- Always provide a clear `--reason`
|
|
319
|
+
- Check WIP limits first (`/specweave:status`)
|
|
320
|
+
- Use task-level reopen for surgical fixes
|
|
321
|
+
- Use increment reopen for systemic issues
|
|
322
|
+
- Add reopened annotation to tasks.md
|
|
323
|
+
|
|
324
|
+
### ❌ Don't
|
|
325
|
+
- Abuse `--force` (respect WIP limits)
|
|
326
|
+
- Reopen old increments (>7 days) without investigation
|
|
327
|
+
- Reopen without understanding the issue
|
|
328
|
+
- Skip the reason (audit trail is critical)
|
|
329
|
+
|
|
330
|
+
## Troubleshooting
|
|
331
|
+
|
|
332
|
+
**Problem**: "Cannot reopen: increment status is active, not completed"
|
|
333
|
+
|
|
334
|
+
**Solution**: Increment is already active, no need to reopen. Just continue work.
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
**Problem**: "WIP limit exceeded"
|
|
339
|
+
|
|
340
|
+
**Solution**: Pause or complete another increment first:
|
|
341
|
+
```bash
|
|
342
|
+
/specweave:pause 0030 --reason "Paused for critical fix"
|
|
343
|
+
/specweave:reopen 0031 --reason "Production issue"
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
**Problem**: "Task T-003 not found in tasks.md"
|
|
349
|
+
|
|
350
|
+
**Solution**: Check task ID spelling:
|
|
351
|
+
```bash
|
|
352
|
+
# List all tasks
|
|
353
|
+
cat .specweave/increments/0031-external-tool-status-sync/tasks.md | grep "^##"
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
**Problem**: "User story US-001 not found"
|
|
359
|
+
|
|
360
|
+
**Solution**: Check spec.md for correct user story ID.
|
|
361
|
+
|
|
362
|
+
## Related Commands
|
|
363
|
+
|
|
364
|
+
- `/specweave:status` - Check WIP limits
|
|
365
|
+
- `/specweave:progress` - See increment progress
|
|
366
|
+
- `/specweave:do` - Continue work after reopening
|
|
367
|
+
- `/specweave:pause` - Pause another increment to make room
|
|
368
|
+
- `/specweave:done` - Close increment when fixed
|
|
369
|
+
|
|
370
|
+
## Technical Details
|
|
371
|
+
|
|
372
|
+
**Implementation**:
|
|
373
|
+
- Core logic: `src/core/increment/increment-reopener.ts`
|
|
374
|
+
- Smart detection: `src/core/increment/recent-work-scanner.ts`
|
|
375
|
+
- Status transitions: Updated in `increment-metadata.ts`
|
|
376
|
+
|
|
377
|
+
**Validation**:
|
|
378
|
+
- ✅ Increment exists
|
|
379
|
+
- ✅ Current status is COMPLETED
|
|
380
|
+
- ✅ WIP limits (unless --force)
|
|
381
|
+
- ✅ Task/User story exists
|
|
382
|
+
|
|
383
|
+
**External Sync**:
|
|
384
|
+
- GitHub: `plugins/specweave-github/hooks/post-task-completion.sh`
|
|
385
|
+
- JIRA: `plugins/specweave-jira/hooks/post-task-completion.sh`
|
|
386
|
+
- ADO: `plugins/specweave-ado/hooks/post-task-completion.sh`
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
**Related Skills**: `smart-reopen-detector`
|
|
391
|
+
**Auto-activation**: Report issues like "not working", "broken", "failing"
|