specweave 0.18.1 → 0.20.1
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/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-ado/lib/enhanced-ado-sync.js → specweave-jira/lib/enhanced-jira-sync.js} +25 -61
- 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/dist/locales/de/.gitkeep +0 -0
- package/dist/locales/de/cli.json +0 -108
- package/dist/locales/en/cli.json +0 -287
- package/dist/locales/en/errors.json +0 -7
- package/dist/locales/en/templates.json +0 -6
- package/dist/locales/es/.gitkeep +0 -0
- package/dist/locales/es/cli.json +0 -41
- package/dist/locales/fr/.gitkeep +0 -0
- package/dist/locales/fr/cli.json +0 -108
- package/dist/locales/ja/.gitkeep +0 -0
- package/dist/locales/ja/cli.json +0 -108
- package/dist/locales/ko/.gitkeep +0 -0
- package/dist/locales/ko/cli.json +0 -108
- package/dist/locales/pt/.gitkeep +0 -0
- package/dist/locales/pt/cli.json +0 -108
- package/dist/locales/ru/.gitkeep +0 -0
- package/dist/locales/ru/cli.json +0 -269
- package/dist/locales/zh/.gitkeep +0 -0
- package/dist/locales/zh/cli.json +0 -108
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +0 -25
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -191
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +0 -1
- package/dist/spec-parser.js +0 -629
- package/dist/src/core/sync/spec-content-sync.d.ts +0 -88
- package/dist/src/core/sync/spec-content-sync.d.ts.map +0 -1
- package/dist/src/core/sync/spec-content-sync.js +0 -5
- package/dist/src/core/sync/spec-content-sync.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- 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
|
@@ -8,7 +8,7 @@ usage: /specweave:abandon <increment-id> --reason="<reason>"
|
|
|
8
8
|
|
|
9
9
|
**Usage**: `/specweave:abandon <increment-id> --reason="<reason>"`
|
|
10
10
|
|
|
11
|
-
⚠️ **THIS ACTION MOVES THE INCREMENT TO `
|
|
11
|
+
⚠️ **THIS ACTION MOVES THE INCREMENT TO `_archive/` FOLDER**
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
@@ -33,7 +33,7 @@ Abandon an increment when:
|
|
|
33
33
|
- `abandonedAt`: Current timestamp
|
|
34
34
|
5. **Moves folder**:
|
|
35
35
|
- From: `.specweave/increments/{id}/`
|
|
36
|
-
- To: `.specweave/increments/
|
|
36
|
+
- To: `.specweave/increments/_archive/{id}/`
|
|
37
37
|
6. **Displays** confirmation with preserved location
|
|
38
38
|
|
|
39
39
|
---
|
|
@@ -44,13 +44,13 @@ Abandon an increment when:
|
|
|
44
44
|
```bash
|
|
45
45
|
/specweave:abandon 0008 --reason="Requirements changed - feature no longer needed"
|
|
46
46
|
|
|
47
|
-
⚠️ This will move increment 0008 to
|
|
47
|
+
⚠️ This will move increment 0008 to _archive/
|
|
48
48
|
Reason: Requirements changed - feature no longer needed
|
|
49
49
|
|
|
50
50
|
Continue? [y/N]: y
|
|
51
51
|
|
|
52
52
|
✅ Increment 0008 abandoned
|
|
53
|
-
📦 Moved to: .specweave/increments/
|
|
53
|
+
📦 Moved to: .specweave/increments/_archive/0008-old-feature/
|
|
54
54
|
📝 Reason: Requirements changed - feature no longer needed
|
|
55
55
|
💾 All work preserved for reference
|
|
56
56
|
|
|
@@ -70,13 +70,13 @@ Continue? [y/N]: y
|
|
|
70
70
|
|
|
71
71
|
> 1
|
|
72
72
|
|
|
73
|
-
⚠️ This will move increment 0009 to
|
|
73
|
+
⚠️ This will move increment 0009 to _archive/
|
|
74
74
|
Reason: Requirements changed
|
|
75
75
|
|
|
76
76
|
Continue? [y/N]: y
|
|
77
77
|
|
|
78
78
|
✅ Increment 0009 abandoned
|
|
79
|
-
📦 Moved to: .specweave/increments/
|
|
79
|
+
📦 Moved to: .specweave/increments/_archive/0009-experiment/
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
---
|
|
@@ -117,7 +117,7 @@ No action needed.
|
|
|
117
117
|
```bash
|
|
118
118
|
/specweave:abandon 0008 --reason="Not needed"
|
|
119
119
|
|
|
120
|
-
⚠️ This will move increment 0008 to
|
|
120
|
+
⚠️ This will move increment 0008 to _archive/
|
|
121
121
|
Reason: Not needed
|
|
122
122
|
|
|
123
123
|
Continue? [y/N]: n
|
|
@@ -155,9 +155,9 @@ if (!confirmed) {
|
|
|
155
155
|
// Update metadata
|
|
156
156
|
MetadataManager.updateStatus(incrementId, IncrementStatus.ABANDONED, reason);
|
|
157
157
|
|
|
158
|
-
// Move to
|
|
158
|
+
// Move to _archive/ folder
|
|
159
159
|
const fromPath = path.join('.specweave/increments', incrementId);
|
|
160
|
-
const toPath = path.join('.specweave/increments/
|
|
160
|
+
const toPath = path.join('.specweave/increments/_archive', incrementId);
|
|
161
161
|
fs.moveSync(fromPath, toPath);
|
|
162
162
|
|
|
163
163
|
console.log(`✅ Moved to: ${toPath}`);
|
|
@@ -179,22 +179,24 @@ completed (CANNOT abandon)
|
|
|
179
179
|
|
|
180
180
|
---
|
|
181
181
|
|
|
182
|
-
##
|
|
182
|
+
## _archive/ Folder Structure
|
|
183
183
|
|
|
184
184
|
```
|
|
185
185
|
.specweave/increments/
|
|
186
|
-
├──
|
|
187
|
-
├──
|
|
188
|
-
├──
|
|
189
|
-
├──
|
|
190
|
-
│ ├──
|
|
186
|
+
├── 0023-release-management/ # Active
|
|
187
|
+
├── 0024-bidirectional-spec/ # Active
|
|
188
|
+
├── 0025-per-project-config/ # Active
|
|
189
|
+
├── _archive/ # All archived/abandoned/old increments
|
|
190
|
+
│ ├── 0001-core-framework/ # Completed (archived)
|
|
191
|
+
│ ├── 0002-core-enhancements/ # Completed (archived)
|
|
192
|
+
│ ├── 0008-old-approach/ # Abandoned
|
|
191
193
|
│ │ ├── spec.md
|
|
192
194
|
│ │ ├── plan.md
|
|
193
195
|
│ │ ├── tasks.md
|
|
194
196
|
│ │ └── metadata.json (status: abandoned)
|
|
195
|
-
│ ├── 0009-failed-experiment/
|
|
196
|
-
│ └──
|
|
197
|
-
└── _backlog/
|
|
197
|
+
│ ├── 0009-failed-experiment/ # Abandoned
|
|
198
|
+
│ └── 0029-cicd-auto-fix/ # Abandoned
|
|
199
|
+
└── _backlog/ # Future work
|
|
198
200
|
```
|
|
199
201
|
|
|
200
202
|
---
|
|
@@ -205,7 +207,7 @@ To un-abandon an increment:
|
|
|
205
207
|
|
|
206
208
|
```bash
|
|
207
209
|
# 1. Move back to increments/
|
|
208
|
-
mv .specweave/increments/
|
|
210
|
+
mv .specweave/increments/_archive/0008-feature \
|
|
209
211
|
.specweave/increments/0008-feature
|
|
210
212
|
|
|
211
213
|
# 2. Resume via command
|
|
@@ -304,7 +306,7 @@ Abandoned work is valuable!
|
|
|
304
306
|
- **Learnings**: Failed experiments teach us what NOT to do
|
|
305
307
|
- **Reference**: Abandoned specs can inform future work
|
|
306
308
|
|
|
307
|
-
💡 Periodically review `
|
|
309
|
+
💡 Periodically review `_archive/` folder for insights
|
|
308
310
|
|
|
309
311
|
---
|
|
310
312
|
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave-archive-features
|
|
3
|
+
description: Archive features and epics when all related increments are archived
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Archive Features and Epics
|
|
7
|
+
|
|
8
|
+
Archive features and epics based on their increment archive status. Features are archived when all their increments are archived, and epics are archived when all their features are archived.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
/specweave:archive-features [options]
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Options
|
|
17
|
+
|
|
18
|
+
- `--dry-run`: Show what would be archived without actually moving files
|
|
19
|
+
- `--update-links`: Update all links to archived items (default: true)
|
|
20
|
+
- `--preserve-active`: Don't archive features with active projects (default: true)
|
|
21
|
+
- `--orphaned`: Also archive orphaned features/epics with no increments/features
|
|
22
|
+
|
|
23
|
+
## Examples
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Preview what would be archived
|
|
27
|
+
/specweave:archive-features --dry-run
|
|
28
|
+
|
|
29
|
+
# Archive features and update all links
|
|
30
|
+
/specweave:archive-features
|
|
31
|
+
|
|
32
|
+
# Archive including orphaned features
|
|
33
|
+
/specweave:archive-features --orphaned
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Archive Rules
|
|
37
|
+
|
|
38
|
+
### Features are archived when:
|
|
39
|
+
1. All linked increments are in _archive folder
|
|
40
|
+
2. No active projects remain (unless --preserve-active=false)
|
|
41
|
+
3. Feature is orphaned (no increments) and --orphaned is set
|
|
42
|
+
|
|
43
|
+
### Epics are archived when:
|
|
44
|
+
1. All linked features are in _archive folder
|
|
45
|
+
2. Epic is orphaned (no features) and --orphaned is set
|
|
46
|
+
|
|
47
|
+
### Archive Structure:
|
|
48
|
+
```
|
|
49
|
+
.specweave/docs/internal/specs/
|
|
50
|
+
├── _features/
|
|
51
|
+
│ ├── FS-023/ # Active feature
|
|
52
|
+
│ └── _archive/
|
|
53
|
+
│ └── FS-001/ # Archived feature
|
|
54
|
+
├── _epics/
|
|
55
|
+
│ ├── EPIC-2025-Q1/ # Active epic
|
|
56
|
+
│ └── _archive/
|
|
57
|
+
│ └── EPIC-2024-Q4/ # Archived epic
|
|
58
|
+
└── default/
|
|
59
|
+
├── FS-023/ # Active project files
|
|
60
|
+
└── _archive/
|
|
61
|
+
└── FS-001/ # Archived project files
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Important Notes
|
|
65
|
+
|
|
66
|
+
- Archives are LOCAL ONLY (not synced to GitHub/JIRA/ADO)
|
|
67
|
+
- All links are automatically updated to point to archive locations
|
|
68
|
+
- Use `/specweave:restore-feature FS-001` to restore from archive
|
|
69
|
+
|
|
70
|
+
## Implementation
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import { Task } from '@claude/types';
|
|
74
|
+
|
|
75
|
+
const task = new Task('feature-archiver', 'Archive features and epics');
|
|
76
|
+
|
|
77
|
+
// Main logic
|
|
78
|
+
task.run(async () => {
|
|
79
|
+
const { FeatureArchiver } = await import('../../../dist/src/core/living-docs/feature-archiver.js');
|
|
80
|
+
const archiver = new FeatureArchiver(process.cwd());
|
|
81
|
+
|
|
82
|
+
// Parse options
|
|
83
|
+
const options = {
|
|
84
|
+
dryRun: process.argv.includes('--dry-run'),
|
|
85
|
+
updateLinks: !process.argv.includes('--no-update-links'),
|
|
86
|
+
preserveActiveFeatures: !process.argv.includes('--no-preserve-active'),
|
|
87
|
+
archiveOrphanedFeatures: process.argv.includes('--orphaned'),
|
|
88
|
+
archiveOrphanedEpics: process.argv.includes('--orphaned')
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// Execute archiving
|
|
92
|
+
const result = await archiver.archiveFeatures(options);
|
|
93
|
+
|
|
94
|
+
// Display results
|
|
95
|
+
console.log('\n📦 Archive Results:');
|
|
96
|
+
console.log(` Features archived: ${result.archivedFeatures.length}`);
|
|
97
|
+
console.log(` Epics archived: ${result.archivedEpics.length}`);
|
|
98
|
+
console.log(` Links updated: ${result.updatedLinks.length}`);
|
|
99
|
+
|
|
100
|
+
if (result.errors.length > 0) {
|
|
101
|
+
console.error('\n❌ Errors:');
|
|
102
|
+
result.errors.forEach(err => console.error(` - ${err}`));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Show stats
|
|
106
|
+
const stats = await archiver.getArchiveStats();
|
|
107
|
+
console.log('\n📊 Archive Statistics:');
|
|
108
|
+
console.log(` Features: ${stats.features.active} active, ${stats.features.archived} archived`);
|
|
109
|
+
console.log(` Epics: ${stats.epics.active} active, ${stats.epics.archived} archived`);
|
|
110
|
+
|
|
111
|
+
// Show per-project stats
|
|
112
|
+
if (Object.keys(stats.projects).length > 0) {
|
|
113
|
+
console.log('\n Per Project:');
|
|
114
|
+
for (const [project, counts] of Object.entries(stats.projects)) {
|
|
115
|
+
console.log(` ${project}: ${counts.active} active, ${counts.archived} archived`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
export default task;
|
|
121
|
+
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave-archive-increments
|
|
3
|
+
description: Archive completed increments to keep workspace clean
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Archive Increments Command
|
|
7
|
+
|
|
8
|
+
Archives completed increments to `_archive/` folder, keeping only the most recent N increments in the main folder.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# Interactive mode - prompts for options
|
|
14
|
+
/specweave:archive-increments
|
|
15
|
+
|
|
16
|
+
# Keep last 5 increments, archive the rest
|
|
17
|
+
/specweave:archive-increments --keep-last 5
|
|
18
|
+
|
|
19
|
+
# Archive specific increments
|
|
20
|
+
/specweave:archive-increments --increments 0001,0002,0003
|
|
21
|
+
|
|
22
|
+
# Dry run - see what would be archived without moving
|
|
23
|
+
/specweave:archive-increments --dry-run
|
|
24
|
+
|
|
25
|
+
# Archive all completed increments older than 30 days
|
|
26
|
+
/specweave:archive-increments --older-than 30d
|
|
27
|
+
|
|
28
|
+
# Keep only active/paused, archive all completed
|
|
29
|
+
/specweave:archive-increments --archive-completed
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Default Behavior
|
|
33
|
+
|
|
34
|
+
- Keeps last 10 increments by default
|
|
35
|
+
- Preserves all active/paused increments
|
|
36
|
+
- Never archives abandoned increments (they stay in `_abandoned/`)
|
|
37
|
+
- Creates `_archive/` folder if it doesn't exist
|
|
38
|
+
- Preserves increment structure and all contents
|
|
39
|
+
|
|
40
|
+
## Smart Detection
|
|
41
|
+
|
|
42
|
+
The command intelligently:
|
|
43
|
+
- Checks increment status from metadata.json
|
|
44
|
+
- Preserves increments with active GitHub/JIRA/ADO issues
|
|
45
|
+
- Warns before archiving increments with uncommitted changes
|
|
46
|
+
- Groups related increments (e.g., all v0.8.0 stabilization increments)
|
|
47
|
+
|
|
48
|
+
## Configuration
|
|
49
|
+
|
|
50
|
+
Set defaults in `.specweave/config.json`:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"archiving": {
|
|
55
|
+
"keepLast": 10,
|
|
56
|
+
"autoArchive": true,
|
|
57
|
+
"archiveAfterDays": 60,
|
|
58
|
+
"preserveActive": true,
|
|
59
|
+
"archiveCompleted": true
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Examples
|
|
65
|
+
|
|
66
|
+
### Keep workspace clean
|
|
67
|
+
```bash
|
|
68
|
+
# Archive all but last 5 increments
|
|
69
|
+
/specweave:archive-increments --keep-last 5
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Prepare for release
|
|
73
|
+
```bash
|
|
74
|
+
# Archive all v0.7.x increments after v0.8.0 release
|
|
75
|
+
/specweave:archive-increments --pattern "v0.7"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Clean old work
|
|
79
|
+
```bash
|
|
80
|
+
# Archive increments older than 2 months
|
|
81
|
+
/specweave:archive-increments --older-than 60d
|
|
82
|
+
```
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave:archive
|
|
3
|
+
description: Manually archive completed increments - NEVER auto-archives, explicit user action only
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Archive Increments (Manual Only)
|
|
7
|
+
|
|
8
|
+
**CRITICAL POLICY**: Increments are **NEVER** auto-archived. Archiving is **MANUAL ONLY** and requires explicit user action via this command.
|
|
9
|
+
|
|
10
|
+
## Philosophy
|
|
11
|
+
|
|
12
|
+
**Keep recent work visible** - Completed increments remain in the main folder for easy reference until you explicitly archive them. This allows:
|
|
13
|
+
- ✅ Quick reference to recent implementations
|
|
14
|
+
- ✅ Easy linking in new increments
|
|
15
|
+
- ✅ Visible completion history
|
|
16
|
+
- ✅ ~10-20 completed increments available without searching archives
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Archive specific increment
|
|
22
|
+
/specweave:archive 0031
|
|
23
|
+
|
|
24
|
+
# Archive multiple increments
|
|
25
|
+
/specweave:archive 0001 0002 0003
|
|
26
|
+
|
|
27
|
+
# Archive all completed increments older than N days
|
|
28
|
+
/specweave:archive --older-than 90
|
|
29
|
+
|
|
30
|
+
# Keep last N increments, archive the rest
|
|
31
|
+
/specweave:archive --keep-last 10
|
|
32
|
+
|
|
33
|
+
# Archive by pattern
|
|
34
|
+
/specweave:archive --pattern "auth-*"
|
|
35
|
+
|
|
36
|
+
# Dry run (preview without archiving)
|
|
37
|
+
/specweave:archive --dry-run --older-than 90
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Options
|
|
41
|
+
|
|
42
|
+
- `<increment-ids>`: Specific increment IDs to archive (e.g., "1", "0001", "0031")
|
|
43
|
+
- `--older-than <days>`: Archive increments older than N days
|
|
44
|
+
- `--keep-last <n>`: Keep last N increments, archive the rest (default: 10)
|
|
45
|
+
- `--pattern <regex>`: Archive increments matching pattern
|
|
46
|
+
- `--archive-completed`: Archive all completed increments (use with caution!)
|
|
47
|
+
- `--preserve-active`: Never archive active/paused increments (default: true)
|
|
48
|
+
- `--dry-run`: Show what would be archived without moving files
|
|
49
|
+
|
|
50
|
+
## Archive Rules
|
|
51
|
+
|
|
52
|
+
### Increments are archived when:
|
|
53
|
+
1. Explicitly specified by ID (e.g., `/specweave:archive 0031`)
|
|
54
|
+
2. Match age criteria (e.g., `--older-than 90`)
|
|
55
|
+
3. Match pattern criteria (e.g., `--pattern "old-*"`)
|
|
56
|
+
4. Not in last N increments (e.g., `--keep-last 10`)
|
|
57
|
+
|
|
58
|
+
### Safety Checks (Always Applied):
|
|
59
|
+
- ✅ **Active/paused protection**: Never archive active or paused increments
|
|
60
|
+
- ✅ **External sync protection**: Skip increments with open GitHub/JIRA/ADO issues
|
|
61
|
+
- ✅ **Uncommitted changes**: Warn if git has uncommitted changes
|
|
62
|
+
- ✅ **Duplicate prevention**: Refuse if increment already exists in archive
|
|
63
|
+
|
|
64
|
+
### Archive Structure:
|
|
65
|
+
```
|
|
66
|
+
.specweave/increments/
|
|
67
|
+
├── 0030-recent-work/ # Active/recent increments
|
|
68
|
+
├── 0031-recent-work/ # Stay visible for reference
|
|
69
|
+
├── 0032-recent-work/
|
|
70
|
+
├── 0033-recent-work/
|
|
71
|
+
│
|
|
72
|
+
├── _archive/ # Archived increments
|
|
73
|
+
│ ├── 0001-old-work/ # Manually archived
|
|
74
|
+
│ ├── 0002-old-work/
|
|
75
|
+
│ └── 0003-old-work/
|
|
76
|
+
│
|
|
77
|
+
└── _abandoned/ # Abandoned work (separate)
|
|
78
|
+
└── 0004-abandoned-work/
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Examples
|
|
82
|
+
|
|
83
|
+
### Example 1: Archive Specific Increment
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
/specweave:archive 0031
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Output**:
|
|
90
|
+
```
|
|
91
|
+
📦 Archiving increments...
|
|
92
|
+
|
|
93
|
+
Checking increment 0031-external-tool-status-sync...
|
|
94
|
+
✓ Status: completed
|
|
95
|
+
✓ No active external sync
|
|
96
|
+
✓ No uncommitted changes
|
|
97
|
+
✓ Not already in archive
|
|
98
|
+
|
|
99
|
+
✅ Archived: 0031-external-tool-status-sync
|
|
100
|
+
Location: .specweave/increments/_archive/0031-external-tool-status-sync/
|
|
101
|
+
|
|
102
|
+
📊 Archive Statistics:
|
|
103
|
+
Active: 32 increments
|
|
104
|
+
Archived: 31 increments (+ 1 new)
|
|
105
|
+
|
|
106
|
+
Next: /specweave:restore 0031 (if you need to unarchive)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Example 2: Archive Old Increments (Keep Last 10)
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
/specweave:archive --keep-last 10
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Output**:
|
|
116
|
+
```
|
|
117
|
+
📦 Archiving increments (keeping last 10)...
|
|
118
|
+
|
|
119
|
+
Found 33 total increments
|
|
120
|
+
Keeping: 0024-0033 (last 10)
|
|
121
|
+
Candidates for archive: 0001-0023 (23 increments)
|
|
122
|
+
|
|
123
|
+
Filtering by status and safety checks...
|
|
124
|
+
✓ 0001-core-framework (completed, no blockers)
|
|
125
|
+
✓ 0002-plugin-system (completed, no blockers)
|
|
126
|
+
...
|
|
127
|
+
⚠ 0015-auth-service (GitHub issue still open) - SKIPPED
|
|
128
|
+
✓ 0016-payment-integration (completed, no blockers)
|
|
129
|
+
...
|
|
130
|
+
|
|
131
|
+
✅ Archived: 22 increments
|
|
132
|
+
⚠️ Skipped: 1 increment (external sync active)
|
|
133
|
+
|
|
134
|
+
📊 Archive Statistics:
|
|
135
|
+
Active: 11 increments (10 recent + 1 with open issue)
|
|
136
|
+
Archived: 53 increments (+ 22 new)
|
|
137
|
+
Total size: 245 MB
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Example 3: Dry Run (Preview)
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
/specweave:archive --older-than 90 --dry-run
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Output**:
|
|
147
|
+
```
|
|
148
|
+
🔍 DRY RUN - No files will be moved
|
|
149
|
+
|
|
150
|
+
Increments older than 90 days:
|
|
151
|
+
[DRY RUN] Would archive: 0001-core-framework (152 days old)
|
|
152
|
+
[DRY RUN] Would archive: 0002-plugin-system (148 days old)
|
|
153
|
+
[DRY RUN] Would archive: 0003-auth-service (145 days old)
|
|
154
|
+
[DRY RUN] Would skip: 0004-payment (GitHub issue open)
|
|
155
|
+
|
|
156
|
+
Summary:
|
|
157
|
+
Would archive: 18 increments
|
|
158
|
+
Would skip: 5 increments (active sync)
|
|
159
|
+
Total size: 180 MB
|
|
160
|
+
|
|
161
|
+
Run without --dry-run to proceed:
|
|
162
|
+
/specweave:archive --older-than 90
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Example 4: Archive by Pattern
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
/specweave:archive --pattern "auth-|payment-|legacy-"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Output**:
|
|
172
|
+
```
|
|
173
|
+
📦 Archiving increments matching pattern: auth-|payment-|legacy-
|
|
174
|
+
|
|
175
|
+
Found matches:
|
|
176
|
+
✓ 0015-auth-service
|
|
177
|
+
✓ 0016-payment-integration
|
|
178
|
+
✓ 0007-legacy-migration
|
|
179
|
+
⚠ 0025-auth-enhancements (still active) - SKIPPED
|
|
180
|
+
|
|
181
|
+
✅ Archived: 3 increments
|
|
182
|
+
⚠️ Skipped: 1 increment (active)
|
|
183
|
+
|
|
184
|
+
📊 Archive Statistics:
|
|
185
|
+
Active: 30 increments
|
|
186
|
+
Archived: 34 increments (+ 3 new)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Error Handling
|
|
190
|
+
|
|
191
|
+
### Increment Already Archived
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
❌ Error: Increment 0031 already exists in archive
|
|
195
|
+
|
|
196
|
+
Location: .specweave/increments/_archive/0031-external-tool-status-sync/
|
|
197
|
+
|
|
198
|
+
Options:
|
|
199
|
+
1. Delete from archive first, then retry
|
|
200
|
+
2. Restore from archive: /specweave:restore 0031
|
|
201
|
+
3. Resolve duplicates: /specweave:fix-duplicates
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Active Increment Protection
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
⚠️ Cannot archive active increments
|
|
208
|
+
|
|
209
|
+
Skipped:
|
|
210
|
+
• 0032-duplicate-prevention (status: active)
|
|
211
|
+
• 0033-current-work (status: in-progress)
|
|
212
|
+
|
|
213
|
+
Recommendation:
|
|
214
|
+
1. Close increments first: /specweave:done 0032
|
|
215
|
+
2. Then archive: /specweave:archive 0032
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### External Sync Active
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
⚠️ Cannot archive increments with active external sync
|
|
222
|
+
|
|
223
|
+
Skipped:
|
|
224
|
+
• 0031-external-tool-sync (GitHub issue #45 still open)
|
|
225
|
+
• 0030-jira-integration (JIRA PROJ-123 In Progress)
|
|
226
|
+
|
|
227
|
+
Recommendation:
|
|
228
|
+
1. Close external issues first
|
|
229
|
+
2. Then retry: /specweave:archive 0031 0030
|
|
230
|
+
|
|
231
|
+
Or force archive (not recommended):
|
|
232
|
+
/specweave:archive 0031 --force
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Related Commands
|
|
236
|
+
|
|
237
|
+
- `/specweave:restore <increment-id>` - Restore increment from archive
|
|
238
|
+
- `/specweave:done <increment-id>` - Close increment (does NOT archive!)
|
|
239
|
+
- `/specweave:archive-features` - Archive features/epics (separate system)
|
|
240
|
+
- `/specweave:status` - View archive statistics
|
|
241
|
+
|
|
242
|
+
## Important Notes
|
|
243
|
+
|
|
244
|
+
### ⚠️ Manual Only Policy
|
|
245
|
+
|
|
246
|
+
**Increments are NEVER auto-archived!** This is a deliberate design decision:
|
|
247
|
+
- ✅ `/specweave:done` closes increments but leaves them visible
|
|
248
|
+
- ✅ You control when increments are archived
|
|
249
|
+
- ✅ Keep ~10-20 recent increments visible for reference
|
|
250
|
+
- ✅ Archive older work when you're ready
|
|
251
|
+
|
|
252
|
+
### 🔗 Feature Archiving (Automatic)
|
|
253
|
+
|
|
254
|
+
**Features/epics ARE auto-archived** when all their increments are archived:
|
|
255
|
+
- After archiving increment 0031, run: `/specweave:archive-features`
|
|
256
|
+
- This updates living docs and archives orphaned features
|
|
257
|
+
- Keeps feature docs in sync with increment archives
|
|
258
|
+
|
|
259
|
+
### 📦 Archive is Local Only
|
|
260
|
+
|
|
261
|
+
Archives are **NOT** synced to GitHub/JIRA/ADO. They're local file management only.
|
|
262
|
+
|
|
263
|
+
## Implementation
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
import { Task } from '@claude/types';
|
|
267
|
+
|
|
268
|
+
const task = new Task('archive-increments', 'Archive completed increments');
|
|
269
|
+
|
|
270
|
+
task.run(async () => {
|
|
271
|
+
const { IncrementArchiver } = await import('../../../dist/src/core/increment/increment-archiver.js');
|
|
272
|
+
const archiver = new IncrementArchiver(process.cwd());
|
|
273
|
+
|
|
274
|
+
// Parse arguments
|
|
275
|
+
const args = process.argv.slice(2);
|
|
276
|
+
const incrementIds = args.filter(arg => !arg.startsWith('--'));
|
|
277
|
+
|
|
278
|
+
// Parse options
|
|
279
|
+
const options = {
|
|
280
|
+
increments: incrementIds.length > 0 ? incrementIds : undefined,
|
|
281
|
+
olderThanDays: parseOption(args, '--older-than'),
|
|
282
|
+
keepLast: parseOption(args, '--keep-last') || 10,
|
|
283
|
+
archiveCompleted: args.includes('--archive-completed'),
|
|
284
|
+
preserveActive: !args.includes('--no-preserve-active'),
|
|
285
|
+
pattern: parseOption(args, '--pattern'),
|
|
286
|
+
dryRun: args.includes('--dry-run')
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
// Execute archiving
|
|
290
|
+
const result = await archiver.archive(options);
|
|
291
|
+
|
|
292
|
+
// Display results
|
|
293
|
+
if (options.dryRun) {
|
|
294
|
+
console.log('\n🔍 DRY RUN - No files will be moved\n');
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
console.log(`✅ Archived: ${result.archived.length} increments`);
|
|
298
|
+
if (result.skipped.length > 0) {
|
|
299
|
+
console.log(`⚠️ Skipped: ${result.skipped.length} increments`);
|
|
300
|
+
}
|
|
301
|
+
if (result.errors.length > 0) {
|
|
302
|
+
console.error(`❌ Errors: ${result.errors.length} increments`);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// Show statistics
|
|
306
|
+
const stats = await archiver.getStats();
|
|
307
|
+
console.log('\n📊 Archive Statistics:');
|
|
308
|
+
console.log(` Active: ${stats.active} increments`);
|
|
309
|
+
console.log(` Archived: ${stats.archived} increments`);
|
|
310
|
+
console.log(` Abandoned: ${stats.abandoned} increments`);
|
|
311
|
+
console.log(` Total archive size: ${formatSize(stats.totalSize)}`);
|
|
312
|
+
|
|
313
|
+
// Suggest next steps
|
|
314
|
+
if (result.archived.length > 0 && !options.dryRun) {
|
|
315
|
+
console.log('\n💡 Next: Run /specweave:archive-features to sync feature docs');
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
function parseOption(args: string[], flag: string): number | string | undefined {
|
|
320
|
+
const index = args.indexOf(flag);
|
|
321
|
+
if (index !== -1 && index + 1 < args.length) {
|
|
322
|
+
const value = args[index + 1];
|
|
323
|
+
return isNaN(Number(value)) ? value : Number(value);
|
|
324
|
+
}
|
|
325
|
+
return undefined;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function formatSize(bytes: number): string {
|
|
329
|
+
const mb = bytes / (1024 * 1024);
|
|
330
|
+
return mb < 1 ? `${Math.round(bytes / 1024)} KB` : `${Math.round(mb)} MB`;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export default task;
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
## Configuration
|
|
337
|
+
|
|
338
|
+
No configuration needed - all options are provided via command-line flags.
|
|
339
|
+
|
|
340
|
+
Default behavior:
|
|
341
|
+
- Preserves active/paused increments
|
|
342
|
+
- Skips increments with open external issues
|
|
343
|
+
- Warns about uncommitted changes
|
|
344
|
+
- Requires explicit user action (no auto-archiving)
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
**Best Practice**: Archive completed increments periodically (e.g., monthly or quarterly) to keep your workspace clean while preserving all history.
|
|
349
|
+
|
|
350
|
+
**Recommended Workflow**:
|
|
351
|
+
```bash
|
|
352
|
+
# 1. Check what would be archived
|
|
353
|
+
/specweave:archive --keep-last 10 --dry-run
|
|
354
|
+
|
|
355
|
+
# 2. Archive old increments
|
|
356
|
+
/specweave:archive --keep-last 10
|
|
357
|
+
|
|
358
|
+
# 3. Archive related features
|
|
359
|
+
/specweave:archive-features
|
|
360
|
+
|
|
361
|
+
# 4. Check results
|
|
362
|
+
/specweave:status
|
|
363
|
+
```
|