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
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave:sync-specs
|
|
3
|
+
description: Sync only specs folder to living docs - distributes increment specs into hierarchical user stories without updating architecture, operations, or other docs
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sync Specs Only
|
|
7
|
+
|
|
8
|
+
You are executing the SpecWeave specs-only sync command. This distributes increment specs specifically into the living docs specs folder using the Universal Hierarchy (Epic → Feature → User Story → Task), without touching other documentation areas.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## STEP 1: Parse Arguments
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Arguments provided: [user's arguments]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Parse the input**:
|
|
19
|
+
- Check for increment ID: `0001`, `0002`, etc.
|
|
20
|
+
- If no increment ID: find the most recent increment
|
|
21
|
+
- Check for options: `--force`, `--dry-run`
|
|
22
|
+
|
|
23
|
+
**Find increment**:
|
|
24
|
+
```bash
|
|
25
|
+
if [[ -z "$INCREMENT_ID" ]]; then
|
|
26
|
+
# Find most recent increment
|
|
27
|
+
INCREMENT_ID=$(ls -1 .specweave/increments/ | grep -E '^[0-9]{4}-' | sort -r | head -1)
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Verify increment exists
|
|
31
|
+
INCREMENT_PATH=".specweave/increments/$INCREMENT_ID"
|
|
32
|
+
if [[ ! -d "$INCREMENT_PATH" ]]; then
|
|
33
|
+
echo "❌ Error: Increment $INCREMENT_ID not found"
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Output**:
|
|
39
|
+
```
|
|
40
|
+
🎯 Target increment: {increment_id}
|
|
41
|
+
📁 Increment path: .specweave/increments/{increment_id}
|
|
42
|
+
🔄 Mode: Specs-only sync (Universal Hierarchy)
|
|
43
|
+
|
|
44
|
+
Processing...
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## STEP 2: Check Prerequisites
|
|
50
|
+
|
|
51
|
+
### 2.1 Verify Spec File Exists
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
SPEC_FILE="$INCREMENT_PATH/spec.md"
|
|
55
|
+
if [[ ! -f "$SPEC_FILE" ]]; then
|
|
56
|
+
echo "❌ Error: No spec.md found in increment $INCREMENT_ID"
|
|
57
|
+
echo " Cannot sync specs without a spec file"
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2.2 Check Tasks File (for bidirectional linking)
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
TASKS_FILE="$INCREMENT_PATH/tasks.md"
|
|
66
|
+
HAS_TASKS=false
|
|
67
|
+
if [[ -f "$TASKS_FILE" ]]; then
|
|
68
|
+
HAS_TASKS=true
|
|
69
|
+
echo "✅ Found tasks.md - will create bidirectional links"
|
|
70
|
+
else
|
|
71
|
+
echo "⚠️ No tasks.md - spec will sync without task links"
|
|
72
|
+
fi
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 2.3 Read Metadata for External Links
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
METADATA_FILE="$INCREMENT_PATH/metadata.json"
|
|
79
|
+
if [[ -f "$METADATA_FILE" ]]; then
|
|
80
|
+
echo "✅ Found metadata.json - will include external links"
|
|
81
|
+
else
|
|
82
|
+
echo "⚠️ No metadata.json - no external tool links available"
|
|
83
|
+
fi
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## STEP 3: Execute Spec Distribution
|
|
89
|
+
|
|
90
|
+
### 3.1 Run SpecDistributor
|
|
91
|
+
|
|
92
|
+
**Execute the distribution using Node.js**:
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
// Direct execution via Node.js
|
|
96
|
+
node -e "
|
|
97
|
+
import('./dist/src/core/living-docs/spec-distributor.js').then(async ({ SpecDistributor }) => {
|
|
98
|
+
const distributor = new SpecDistributor(process.cwd());
|
|
99
|
+
|
|
100
|
+
console.log('🚀 Starting spec distribution...');
|
|
101
|
+
console.log(' 📄 Reading spec.md from increment ${INCREMENT_ID}');
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
const result = await distributor.distribute('${INCREMENT_ID}');
|
|
105
|
+
|
|
106
|
+
console.log('');
|
|
107
|
+
console.log('✅ Distribution successful!');
|
|
108
|
+
console.log(' 📊 Total stories: ' + result.totalStories);
|
|
109
|
+
console.log(' 📁 Total files created: ' + result.totalFiles);
|
|
110
|
+
console.log(' 🎯 Feature ID: ' + result.specId);
|
|
111
|
+
|
|
112
|
+
if (result.epicPath) {
|
|
113
|
+
console.log(' 📂 Feature path: ' + result.epicPath);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (result.userStoryPaths && result.userStoryPaths.length > 0) {
|
|
117
|
+
console.log(' 📝 User stories created:');
|
|
118
|
+
result.userStoryPaths.forEach(p => console.log(' • ' + p));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (result.warnings && result.warnings.length > 0) {
|
|
122
|
+
console.log('');
|
|
123
|
+
console.log('⚠️ Warnings:');
|
|
124
|
+
result.warnings.forEach(w => console.log(' • ' + w));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Update acceptance criteria status based on completed tasks
|
|
128
|
+
console.log('');
|
|
129
|
+
console.log('📊 Updating acceptance criteria status...');
|
|
130
|
+
await distributor.updateAcceptanceCriteriaStatus('${INCREMENT_ID}');
|
|
131
|
+
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.error('❌ Distribution failed:', error.message);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## STEP 4: Report Distribution Results
|
|
143
|
+
|
|
144
|
+
### 4.1 Show What Was Created
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
═══════════════════════════════════════════════════════
|
|
148
|
+
✅ SPECS-ONLY SYNC COMPLETE
|
|
149
|
+
═══════════════════════════════════════════════════════
|
|
150
|
+
|
|
151
|
+
Increment: {increment_id}
|
|
152
|
+
Title: {title from spec.md}
|
|
153
|
+
|
|
154
|
+
───────────────────────────────────────────────────────
|
|
155
|
+
📊 UNIVERSAL HIERARCHY CREATED
|
|
156
|
+
───────────────────────────────────────────────────────
|
|
157
|
+
|
|
158
|
+
📁 Epic (Optional):
|
|
159
|
+
{if created}
|
|
160
|
+
Path: .specweave/docs/internal/specs/_epics/{EPIC-ID}/EPIC.md
|
|
161
|
+
Status: Created/Updated
|
|
162
|
+
|
|
163
|
+
📁 Feature (Required):
|
|
164
|
+
Path: .specweave/docs/internal/specs/_features/{FS-ID}/FEATURE.md
|
|
165
|
+
Status: Created/Updated
|
|
166
|
+
Projects: {list of projects}
|
|
167
|
+
|
|
168
|
+
📁 Project Contexts:
|
|
169
|
+
{for each project}
|
|
170
|
+
• {project}: .specweave/docs/internal/specs/{project}/{FS-ID}/README.md
|
|
171
|
+
|
|
172
|
+
📝 User Stories:
|
|
173
|
+
{for each project}
|
|
174
|
+
{project}:
|
|
175
|
+
{for each story}
|
|
176
|
+
• {story-id}: {story-title}
|
|
177
|
+
Path: .specweave/docs/internal/specs/{project}/{FS-ID}/{us-id}.md
|
|
178
|
+
|
|
179
|
+
───────────────────────────────────────────────────────
|
|
180
|
+
🔗 BIDIRECTIONAL LINKING
|
|
181
|
+
───────────────────────────────────────────────────────
|
|
182
|
+
|
|
183
|
+
{if tasks.md exists}
|
|
184
|
+
✅ Task → User Story Links:
|
|
185
|
+
Updated tasks.md with user story references
|
|
186
|
+
Each task now links to its parent user story
|
|
187
|
+
|
|
188
|
+
✅ User Story → Task Links:
|
|
189
|
+
Each user story shows implementing tasks
|
|
190
|
+
Tasks linked back to increment #{increment_id}
|
|
191
|
+
{else}
|
|
192
|
+
⚠️ No tasks.md found - stories created without task links
|
|
193
|
+
{/if}
|
|
194
|
+
|
|
195
|
+
───────────────────────────────────────────────────────
|
|
196
|
+
📂 FILE STRUCTURE
|
|
197
|
+
───────────────────────────────────────────────────────
|
|
198
|
+
|
|
199
|
+
.specweave/docs/internal/specs/
|
|
200
|
+
├── _epics/ {if epic created}
|
|
201
|
+
│ └── {EPIC-ID}/
|
|
202
|
+
│ └── EPIC.md
|
|
203
|
+
├── _features/
|
|
204
|
+
│ └── {FS-ID}/
|
|
205
|
+
│ └── FEATURE.md ← Cross-project feature
|
|
206
|
+
└── {project}/ ← Per-project stories
|
|
207
|
+
└── {FS-ID}/
|
|
208
|
+
├── README.md ← Project context
|
|
209
|
+
├── us-001-{title}.md ← User story 1
|
|
210
|
+
├── us-002-{title}.md ← User story 2
|
|
211
|
+
└── ...
|
|
212
|
+
|
|
213
|
+
───────────────────────────────────────────────────────
|
|
214
|
+
🎯 WHAT THIS SYNC DID
|
|
215
|
+
───────────────────────────────────────────────────────
|
|
216
|
+
|
|
217
|
+
✅ Parsed increment spec.md
|
|
218
|
+
✅ Detected Epic mapping (if applicable)
|
|
219
|
+
✅ Detected Feature mapping (FS-YY-MM-DD pattern)
|
|
220
|
+
✅ Classified content by project
|
|
221
|
+
✅ Generated hierarchical structure
|
|
222
|
+
✅ Created bidirectional links (if tasks.md exists)
|
|
223
|
+
✅ Preserved external tool links (GitHub/Jira/ADO)
|
|
224
|
+
|
|
225
|
+
❌ DID NOT UPDATE:
|
|
226
|
+
• Architecture decisions (ADRs)
|
|
227
|
+
• Operations docs (runbooks, deployment)
|
|
228
|
+
• Delivery docs (CI/CD, testing)
|
|
229
|
+
• Governance docs (security, compliance)
|
|
230
|
+
• Strategy docs (PRDs, roadmaps)
|
|
231
|
+
|
|
232
|
+
This command ONLY syncs specs folder content!
|
|
233
|
+
|
|
234
|
+
═══════════════════════════════════════════════════════
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## STEP 5: Next Steps Guidance
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
🎯 NEXT STEPS
|
|
243
|
+
───────────────────────────────────────────────────────
|
|
244
|
+
|
|
245
|
+
1. Review generated specs:
|
|
246
|
+
cd .specweave/docs/internal/specs/
|
|
247
|
+
ls -la {project}/{FS-ID}/
|
|
248
|
+
|
|
249
|
+
2. Verify bidirectional links (if applicable):
|
|
250
|
+
• Check tasks.md has "User Story:" links
|
|
251
|
+
• Check user stories have "Implementation:" sections
|
|
252
|
+
|
|
253
|
+
3. Sync to external tools (if configured):
|
|
254
|
+
{if GitHub configured}
|
|
255
|
+
• GitHub: /specweave-github:sync-spec
|
|
256
|
+
{/if}
|
|
257
|
+
{if Jira configured}
|
|
258
|
+
• Jira: /specweave-jira:sync-spec
|
|
259
|
+
{/if}
|
|
260
|
+
{if ADO configured}
|
|
261
|
+
• Azure DevOps: /specweave-ado:sync-spec
|
|
262
|
+
{/if}
|
|
263
|
+
|
|
264
|
+
4. Update other docs (if needed):
|
|
265
|
+
• Full sync: /specweave:sync-docs
|
|
266
|
+
• Architecture only: Update ADRs manually
|
|
267
|
+
• Operations only: Update runbooks manually
|
|
268
|
+
|
|
269
|
+
5. Commit changes:
|
|
270
|
+
git add .specweave/docs/internal/specs/
|
|
271
|
+
git commit -m "docs: sync specs from increment {increment_id}"
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## ERROR HANDLING
|
|
277
|
+
|
|
278
|
+
### Error: Increment Not Found
|
|
279
|
+
```
|
|
280
|
+
❌ Error: Increment '{increment_id}' not found
|
|
281
|
+
|
|
282
|
+
Available increments:
|
|
283
|
+
{list .specweave/increments/*/}
|
|
284
|
+
|
|
285
|
+
Usage: /specweave:sync-specs [increment_id] [--dry-run]
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Error: No Spec File
|
|
289
|
+
```
|
|
290
|
+
❌ Error: No spec.md in increment '{increment_id}'
|
|
291
|
+
|
|
292
|
+
The increment must have a spec.md file to sync specs.
|
|
293
|
+
Check: .specweave/increments/{increment_id}/spec.md
|
|
294
|
+
|
|
295
|
+
Cannot proceed with specs sync.
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Error: Distribution Failed
|
|
299
|
+
```
|
|
300
|
+
❌ Error: Failed to distribute specs
|
|
301
|
+
|
|
302
|
+
Reason: {error message}
|
|
303
|
+
|
|
304
|
+
Common causes:
|
|
305
|
+
• Invalid spec.md format
|
|
306
|
+
• Missing user stories
|
|
307
|
+
• Corrupted YAML frontmatter
|
|
308
|
+
|
|
309
|
+
Try: /specweave:validate {increment_id}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## OPTIONS
|
|
315
|
+
|
|
316
|
+
### --dry-run
|
|
317
|
+
Show what would be synced without making changes:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
/specweave:sync-specs 0031 --dry-run
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Output:
|
|
324
|
+
```
|
|
325
|
+
🔍 DRY RUN MODE - No files will be modified
|
|
326
|
+
|
|
327
|
+
Would create/update:
|
|
328
|
+
• Epic: _epics/EPIC-2025-Q1/EPIC.md
|
|
329
|
+
• Feature: _features/FS-25-11-14/FEATURE.md
|
|
330
|
+
• Project context: backend/FS-25-11-14/README.md
|
|
331
|
+
• User story: backend/FS-25-11-14/us-001-api-sync.md
|
|
332
|
+
• User story: backend/FS-25-11-14/us-002-status-mapping.md
|
|
333
|
+
• Tasks.md: Would add 5 user story links
|
|
334
|
+
|
|
335
|
+
Total: 6 files would be affected
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### --force
|
|
339
|
+
Overwrite existing files without prompting:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
/specweave:sync-specs 0031 --force
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## EXAMPLES
|
|
348
|
+
|
|
349
|
+
### Example 1: Sync Current Increment
|
|
350
|
+
```
|
|
351
|
+
User: /specweave:sync-specs
|
|
352
|
+
|
|
353
|
+
Output:
|
|
354
|
+
🎯 Target increment: 0031-external-tool-status-sync
|
|
355
|
+
📁 Increment path: .specweave/increments/0031-external-tool-status-sync
|
|
356
|
+
🔄 Mode: Specs-only sync (Universal Hierarchy)
|
|
357
|
+
|
|
358
|
+
Processing...
|
|
359
|
+
✅ Distribution successful!
|
|
360
|
+
📊 Total stories: 7
|
|
361
|
+
📁 Total files created: 10
|
|
362
|
+
🎯 Feature ID: FS-25-11-14-external-tool-status-sync
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### Example 2: Sync Specific Increment
|
|
366
|
+
```
|
|
367
|
+
User: /specweave:sync-specs 0025
|
|
368
|
+
|
|
369
|
+
Output:
|
|
370
|
+
🎯 Target increment: 0025-per-project-resource-config
|
|
371
|
+
📁 Increment path: .specweave/increments/0025-per-project-resource-config
|
|
372
|
+
🔄 Mode: Specs-only sync (Universal Hierarchy)
|
|
373
|
+
|
|
374
|
+
Processing...
|
|
375
|
+
✅ Distribution successful!
|
|
376
|
+
📊 Total stories: 3
|
|
377
|
+
📁 Total files created: 5
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Example 3: Dry Run
|
|
381
|
+
```
|
|
382
|
+
User: /specweave:sync-specs 0031 --dry-run
|
|
383
|
+
|
|
384
|
+
Output:
|
|
385
|
+
🔍 DRY RUN MODE - No files will be modified
|
|
386
|
+
|
|
387
|
+
Would sync increment: 0031-external-tool-status-sync
|
|
388
|
+
Would create feature: FS-25-11-14-external-tool-status-sync
|
|
389
|
+
Would affect 2 projects: backend, frontend
|
|
390
|
+
Would create 7 user stories
|
|
391
|
+
Would update tasks.md with bidirectional links
|
|
392
|
+
|
|
393
|
+
No changes made (dry run mode)
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## IMPORTANT NOTES
|
|
399
|
+
|
|
400
|
+
1. **Specs-only**: This command ONLY updates `.specweave/docs/internal/specs/` folder
|
|
401
|
+
2. **Universal Hierarchy**: Uses Epic → Feature → User Story → Task structure
|
|
402
|
+
3. **Bidirectional Links**: Automatically creates if tasks.md exists
|
|
403
|
+
4. **Project-aware**: Distributes stories to correct project folders
|
|
404
|
+
5. **Non-destructive**: Creates backups before overwriting (unless --force)
|
|
405
|
+
6. **External Links**: Preserves GitHub/Jira/ADO links from metadata.json
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## WHEN TO USE THIS COMMAND
|
|
410
|
+
|
|
411
|
+
✅ **Use `/specweave:sync-specs` when**:
|
|
412
|
+
- You only want to update user stories and features
|
|
413
|
+
- You've made changes to spec.md and want them in living docs
|
|
414
|
+
- You want to preserve existing architecture/operations docs
|
|
415
|
+
- You need quick spec sync without full documentation update
|
|
416
|
+
|
|
417
|
+
❌ **Use `/specweave:sync-docs` instead when**:
|
|
418
|
+
- You want to update ALL documentation areas
|
|
419
|
+
- You have new architecture decisions (ADRs)
|
|
420
|
+
- You updated operations/deployment docs
|
|
421
|
+
- You need comprehensive documentation sync
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
**You are now ready to execute this specs-only sync command. Follow the steps above precisely.**
|
|
@@ -109,7 +109,7 @@ if [[ ! "$PROVIDER" =~ ^(github|jira|ado)$ ]]; then
|
|
|
109
109
|
fi
|
|
110
110
|
|
|
111
111
|
# Check if sync CLI command exists
|
|
112
|
-
SYNC_CLI="$PROJECT_ROOT/dist/cli/commands/sync-spec-content.js"
|
|
112
|
+
SYNC_CLI="$PROJECT_ROOT/dist/src/cli/commands/sync-spec-content.js"
|
|
113
113
|
if [ ! -f "$SYNC_CLI" ]; then
|
|
114
114
|
echo "ℹ️ Sync CLI not built, skipping spec content sync" >&2
|
|
115
115
|
echo " Run: npm run build" >&2
|
|
@@ -141,7 +141,7 @@ else
|
|
|
141
141
|
echo ""
|
|
142
142
|
echo "⚠️ Spec content sync failed (exit code: $SYNC_EXIT_CODE)" >&2
|
|
143
143
|
echo " This is non-blocking. You can sync manually later:" >&2
|
|
144
|
-
echo " node dist/cli/commands/sync-spec-content.js --spec \"$SPEC_PATH\" --provider $PROVIDER" >&2
|
|
144
|
+
echo " node dist/src/cli/commands/sync-spec-content.js --spec \"$SPEC_PATH\" --provider $PROVIDER" >&2
|
|
145
145
|
echo ""
|
|
146
146
|
# Non-blocking: continue execution even if sync fails
|
|
147
147
|
fi
|
|
@@ -229,6 +229,45 @@ if command -v node &> /dev/null; then
|
|
|
229
229
|
fi
|
|
230
230
|
fi
|
|
231
231
|
|
|
232
|
+
# ============================================================================
|
|
233
|
+
# UPDATE AC STATUS (NEW in v0.18.3 - Acceptance Criteria Checkbox Update)
|
|
234
|
+
# ============================================================================
|
|
235
|
+
# Updates acceptance criteria checkboxes in spec.md based on completed tasks
|
|
236
|
+
# - Extracts AC-IDs from completed tasks (AC-US1-01, AC-US1-02, etc.)
|
|
237
|
+
# - Checks off corresponding AC in spec.md
|
|
238
|
+
# - Ensures external tool sync reflects current AC completion status
|
|
239
|
+
|
|
240
|
+
if command -v node &> /dev/null; then
|
|
241
|
+
if [ -n "$CURRENT_INCREMENT" ]; then
|
|
242
|
+
echo "[$(date)] ✓ Updating AC status for $CURRENT_INCREMENT" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
243
|
+
|
|
244
|
+
# Determine which AC update script to use (project local or global)
|
|
245
|
+
UPDATE_AC_SCRIPT=""
|
|
246
|
+
if [ -f "$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/update-ac-status.js" ]; then
|
|
247
|
+
# Development: Use project's compiled files (has node_modules)
|
|
248
|
+
UPDATE_AC_SCRIPT="$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/update-ac-status.js"
|
|
249
|
+
echo "[$(date)] Using local dist: $UPDATE_AC_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
250
|
+
elif [ -f "$PROJECT_ROOT/node_modules/specweave/dist/plugins/specweave/lib/hooks/update-ac-status.js" ]; then
|
|
251
|
+
# Installed as dependency: Use node_modules version
|
|
252
|
+
UPDATE_AC_SCRIPT="$PROJECT_ROOT/node_modules/specweave/dist/plugins/specweave/lib/hooks/update-ac-status.js"
|
|
253
|
+
echo "[$(date)] Using node_modules: $UPDATE_AC_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
254
|
+
elif [ -n "${CLAUDE_PLUGIN_ROOT}" ] && [ -f "${CLAUDE_PLUGIN_ROOT}/lib/hooks/update-ac-status.js" ]; then
|
|
255
|
+
# Fallback: Plugin marketplace (may fail if deps missing)
|
|
256
|
+
UPDATE_AC_SCRIPT="${CLAUDE_PLUGIN_ROOT}/lib/hooks/update-ac-status.js"
|
|
257
|
+
echo "[$(date)] Using plugin marketplace: $UPDATE_AC_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
258
|
+
fi
|
|
259
|
+
|
|
260
|
+
if [ -n "$UPDATE_AC_SCRIPT" ]; then
|
|
261
|
+
# Run AC status update (non-blocking, best-effort)
|
|
262
|
+
(cd "$PROJECT_ROOT" && node "$UPDATE_AC_SCRIPT" "$CURRENT_INCREMENT") 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
|
|
263
|
+
echo "[$(date)] ⚠️ Failed to update AC status (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
264
|
+
}
|
|
265
|
+
else
|
|
266
|
+
echo "[$(date)] ⚠️ update-ac-status.js not found in any location" >> "$DEBUG_LOG" 2>/dev/null || true
|
|
267
|
+
fi
|
|
268
|
+
fi
|
|
269
|
+
fi
|
|
270
|
+
|
|
232
271
|
# ============================================================================
|
|
233
272
|
# TRANSLATE LIVING DOCS (NEW in v0.6.0 - i18n)
|
|
234
273
|
# ============================================================================
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# SpecWeave Pre-Command Deduplication Hook
|
|
4
|
+
# Fires BEFORE any command executes (UserPromptSubmit hook)
|
|
5
|
+
# Purpose: Prevent duplicate command invocations within configurable time window
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# ==============================================================================
|
|
10
|
+
# PROJECT ROOT DETECTION
|
|
11
|
+
# ==============================================================================
|
|
12
|
+
|
|
13
|
+
# Find project root by searching upward for .specweave/ directory
|
|
14
|
+
find_project_root() {
|
|
15
|
+
local dir="$1"
|
|
16
|
+
while [ "$dir" != "/" ]; do
|
|
17
|
+
if [ -d "$dir/.specweave" ]; then
|
|
18
|
+
echo "$dir"
|
|
19
|
+
return 0
|
|
20
|
+
fi
|
|
21
|
+
dir="$(dirname "$dir")"
|
|
22
|
+
done
|
|
23
|
+
# Fallback: try current directory
|
|
24
|
+
if [ -d "$(pwd)/.specweave" ]; then
|
|
25
|
+
pwd
|
|
26
|
+
else
|
|
27
|
+
echo "$(pwd)"
|
|
28
|
+
fi
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
PROJECT_ROOT="$(find_project_root "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")"
|
|
32
|
+
cd "$PROJECT_ROOT" 2>/dev/null || true
|
|
33
|
+
|
|
34
|
+
# Read input JSON from stdin
|
|
35
|
+
INPUT=$(cat)
|
|
36
|
+
|
|
37
|
+
# ==============================================================================
|
|
38
|
+
# DEDUPLICATION CHECK: Block duplicate commands within 1 second
|
|
39
|
+
# ==============================================================================
|
|
40
|
+
|
|
41
|
+
# Check if deduplication module is available
|
|
42
|
+
if command -v node >/dev/null 2>&1 && [[ -f "dist/src/core/deduplication/command-deduplicator.js" ]]; then
|
|
43
|
+
# Use dedicated wrapper script for ES module compatibility
|
|
44
|
+
DEDUP_RESULT=$(echo "$INPUT" | node scripts/check-deduplication.js 2>/dev/null || echo "OK")
|
|
45
|
+
|
|
46
|
+
# Parse result
|
|
47
|
+
STATUS=$(echo "$DEDUP_RESULT" | head -1)
|
|
48
|
+
|
|
49
|
+
if [[ "$STATUS" == "DUPLICATE" ]]; then
|
|
50
|
+
# Get stats
|
|
51
|
+
STATS=$(echo "$DEDUP_RESULT" | tail -1)
|
|
52
|
+
|
|
53
|
+
# Extract command and stats for readable message
|
|
54
|
+
COMMAND=$(echo "$STATS" | grep -o '"lastCommand":"[^"]*"' | cut -d'"' -f4 || echo "unknown")
|
|
55
|
+
TOTAL_BLOCKED=$(echo "$STATS" | grep -o '"totalDuplicatesBlocked":[0-9]*' | cut -d':' -f2 || echo "1")
|
|
56
|
+
CACHE_SIZE=$(echo "$STATS" | grep -o '"currentCacheSize":[0-9]*' | cut -d':' -f2 || echo "1")
|
|
57
|
+
|
|
58
|
+
# Build error message WITHOUT embedding JSON (avoid escaping issues)
|
|
59
|
+
MESSAGE=$(cat <<'EOF'
|
|
60
|
+
{
|
|
61
|
+
"decision": "block",
|
|
62
|
+
"reason": "🚫 DUPLICATE COMMAND DETECTED\n\nCommand: `COMMAND_PLACEHOLDER`\nTime window: 1 second\n\nThis command was just executed! To prevent unintended duplicates, this invocation has been blocked.\n\n💡 If you meant to run this command again:\n 1. Wait 1 second\n 2. Run the command again\n\nDeduplication Stats:\n- Total duplicates blocked: BLOCKED_PLACEHOLDER\n- Commands in cache: CACHE_PLACEHOLDER"
|
|
63
|
+
}
|
|
64
|
+
EOF
|
|
65
|
+
)
|
|
66
|
+
# Replace placeholders (avoids JSON escaping issues)
|
|
67
|
+
# Use | as sed delimiter to avoid conflicts with / in command names
|
|
68
|
+
echo "$MESSAGE" | sed "s|COMMAND_PLACEHOLDER|$COMMAND|g" | sed "s|BLOCKED_PLACEHOLDER|$TOTAL_BLOCKED|g" | sed "s|CACHE_PLACEHOLDER|$CACHE_SIZE|g"
|
|
69
|
+
exit 0
|
|
70
|
+
fi
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# ==============================================================================
|
|
74
|
+
# PASS THROUGH: No duplicate detected, proceed with command
|
|
75
|
+
# ==============================================================================
|
|
76
|
+
|
|
77
|
+
cat <<EOF
|
|
78
|
+
{
|
|
79
|
+
"decision": "approve"
|
|
80
|
+
}
|
|
81
|
+
EOF
|
|
82
|
+
|
|
83
|
+
exit 0
|
|
@@ -26,7 +26,7 @@ if echo "$PROMPT" | grep -q "/specweave:increment"; then
|
|
|
26
26
|
|
|
27
27
|
if [[ -d "$SPECWEAVE_DIR/increments" ]]; then
|
|
28
28
|
# Run discipline check (exit code: 0=pass, 1=violations, 2=error)
|
|
29
|
-
if command -v node >/dev/null 2>&1 && [[ -f "dist/
|
|
29
|
+
if command -v node >/dev/null 2>&1 && [[ -f "dist/src/core/increment/metadata-manager.js" ]]; then
|
|
30
30
|
# Check active increments using MetadataManager
|
|
31
31
|
ACTIVE_COUNT=$(node -e "
|
|
32
32
|
try {
|
|
@@ -77,6 +77,8 @@ async function hierarchicalDistribution(incrementId) {
|
|
|
77
77
|
console.log(` - ${warning}`);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
console.log(" \u{1F4CA} Updating acceptance criteria status from completed tasks...");
|
|
81
|
+
await distributor.updateAcceptanceCriteriaStatus(incrementId);
|
|
80
82
|
const changedFiles = [result.epicPath, ...result.userStoryPaths];
|
|
81
83
|
return {
|
|
82
84
|
success: true,
|
|
@@ -176,6 +176,10 @@ async function hierarchicalDistribution(
|
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
+
// Update acceptance criteria status based on completed tasks
|
|
180
|
+
console.log(' 📊 Updating acceptance criteria status from completed tasks...');
|
|
181
|
+
await distributor.updateAcceptanceCriteriaStatus(incrementId);
|
|
182
|
+
|
|
179
183
|
// Collect changed file paths
|
|
180
184
|
const changedFiles = [result.epicPath, ...result.userStoryPaths];
|
|
181
185
|
|