specweave 0.32.0 → 0.32.3
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 +215 -2
- package/README.md +22 -0
- package/bin/specweave.js +52 -1
- package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts +100 -0
- package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js +291 -0
- package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts +103 -0
- package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js +310 -0
- package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts +126 -0
- package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-permission-gate.js +207 -0
- package/dist/plugins/specweave-jira/lib/jira-permission-gate.js.map +1 -0
- package/dist/src/adapters/codex/README.md +1 -1
- package/dist/src/adapters/codex/adapter.js +1 -1
- package/dist/src/cli/commands/archive.d.ts +2 -0
- package/dist/src/cli/commands/archive.d.ts.map +1 -1
- package/dist/src/cli/commands/archive.js +33 -0
- package/dist/src/cli/commands/archive.js.map +1 -1
- package/dist/src/cli/commands/cache.d.ts +17 -0
- package/dist/src/cli/commands/cache.d.ts.map +1 -0
- package/dist/src/cli/commands/cache.js +126 -0
- package/dist/src/cli/commands/cache.js.map +1 -0
- package/dist/src/cli/commands/context.d.ts +92 -0
- package/dist/src/cli/commands/context.d.ts.map +1 -0
- package/dist/src/cli/commands/context.js +205 -0
- package/dist/src/cli/commands/context.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +112 -70
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/plan/increment-detector.js +2 -2
- package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-commits.js +1 -1
- package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
- package/dist/src/cli/commands/sync-specs.js +2 -2
- package/dist/src/cli/commands/sync-specs.js.map +1 -1
- package/dist/src/cli/helpers/github/increment-profile-selector.js +1 -1
- package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
- package/dist/src/cli/helpers/init/external-import.d.ts +3 -0
- package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/external-import.js +17 -4
- package/dist/src/cli/helpers/init/external-import.js.map +1 -1
- package/dist/src/cli/helpers/init/index.d.ts +1 -0
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/index.js +2 -0
- package/dist/src/cli/helpers/init/index.js.map +1 -1
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +70 -0
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +214 -4
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.d.ts +4 -0
- package/dist/src/cli/helpers/init/living-docs-preflight.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.js +34 -3
- package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
- package/dist/src/cli/helpers/init/testing-config.d.ts +3 -0
- package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/testing-config.js +9 -2
- package/dist/src/cli/helpers/init/testing-config.js.map +1 -1
- package/dist/src/cli/helpers/init/translation-config.d.ts +3 -0
- package/dist/src/cli/helpers/init/translation-config.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/translation-config.js +21 -4
- package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
- package/dist/src/cli/helpers/init/wizard-navigation.d.ts +45 -0
- package/dist/src/cli/helpers/init/wizard-navigation.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/wizard-navigation.js +97 -0
- package/dist/src/cli/helpers/init/wizard-navigation.js.map +1 -0
- package/dist/src/cli/workers/living-docs-worker.js +66 -1
- package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
- package/dist/src/config/types.d.ts +203 -1208
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -1
- package/dist/src/core/discrepancy/increment-generator.js +5 -2
- package/dist/src/core/discrepancy/increment-generator.js.map +1 -1
- package/dist/src/core/increment/duplicate-detector.js +2 -2
- package/dist/src/core/increment/duplicate-detector.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.d.ts +49 -4
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +123 -22
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/increment/increment-status.js +2 -2
- package/dist/src/core/increment/increment-status.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +150 -0
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +216 -4
- package/dist/src/core/increment/increment-utils.js.map +1 -1
- package/dist/src/core/increment/metadata-validator.js +1 -1
- package/dist/src/core/increment/metadata-validator.js.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.d.ts +4 -0
- package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.js +32 -10
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.js +8 -4
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
- package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts +38 -0
- package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/ecosystem-detector.js +325 -0
- package/dist/src/core/living-docs/governance/ecosystem-detector.js.map +1 -0
- package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts +74 -0
- package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/frontend-standards-parser.js +366 -0
- package/dist/src/core/living-docs/governance/frontend-standards-parser.js.map +1 -0
- package/dist/src/core/living-docs/governance/go-standards-parser.d.ts +64 -0
- package/dist/src/core/living-docs/governance/go-standards-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/go-standards-parser.js +229 -0
- package/dist/src/core/living-docs/governance/go-standards-parser.js.map +1 -0
- package/dist/src/core/living-docs/governance/index.d.ts +50 -0
- package/dist/src/core/living-docs/governance/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/index.js +56 -0
- package/dist/src/core/living-docs/governance/index.js.map +1 -0
- package/dist/src/core/living-docs/governance/java-standards-parser.d.ts +89 -0
- package/dist/src/core/living-docs/governance/java-standards-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/java-standards-parser.js +356 -0
- package/dist/src/core/living-docs/governance/java-standards-parser.js.map +1 -0
- package/dist/src/core/living-docs/governance/python-standards-parser.d.ts +83 -0
- package/dist/src/core/living-docs/governance/python-standards-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/python-standards-parser.js +347 -0
- package/dist/src/core/living-docs/governance/python-standards-parser.js.map +1 -0
- package/dist/src/core/living-docs/governance/standards-generator.d.ts +38 -0
- package/dist/src/core/living-docs/governance/standards-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/standards-generator.js +476 -0
- package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -0
- package/dist/src/core/living-docs/hierarchy-mapper.js +3 -3
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts +18 -0
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +299 -0
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts +15 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +138 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts +24 -0
- package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js +198 -0
- package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts +17 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js +241 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts +28 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.js +197 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts +22 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +482 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts +42 -0
- package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js +343 -0
- package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +190 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.js +7 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.js.map +1 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts +11 -3
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +53 -10
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/module-analyzer.d.ts +22 -0
- package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -1
- package/dist/src/core/living-docs/module-analyzer.js +123 -19
- package/dist/src/core/living-docs/module-analyzer.js.map +1 -1
- package/dist/src/core/llm/provider-factory.js +2 -2
- package/dist/src/core/llm/provider-factory.js.map +1 -1
- package/dist/src/core/llm/providers/anthropic-provider.js +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.js +8 -4
- package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
- package/dist/src/core/sync/spec-increment-mapper.js +3 -3
- package/dist/src/core/sync/spec-increment-mapper.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +25 -0
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +135 -5
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/importers/jira-importer.d.ts +14 -0
- package/dist/src/importers/jira-importer.d.ts.map +1 -1
- package/dist/src/importers/jira-importer.js +75 -0
- package/dist/src/importers/jira-importer.js.map +1 -1
- package/dist/src/init/architecture/types.d.ts +33 -140
- package/dist/src/init/architecture/types.d.ts.map +1 -1
- package/dist/src/init/compliance/types.d.ts +30 -27
- package/dist/src/init/compliance/types.d.ts.map +1 -1
- package/dist/src/init/repo/types.d.ts +11 -34
- package/dist/src/init/repo/types.d.ts.map +1 -1
- package/dist/src/init/research/src/config/types.d.ts +15 -82
- package/dist/src/init/research/src/config/types.d.ts.map +1 -1
- package/dist/src/init/research/types.d.ts +38 -93
- package/dist/src/init/research/types.d.ts.map +1 -1
- package/dist/src/init/team/types.d.ts +4 -42
- package/dist/src/init/team/types.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-token-provider.d.ts +93 -0
- package/dist/src/integrations/jira/jira-token-provider.d.ts.map +1 -0
- package/dist/src/integrations/jira/jira-token-provider.js +160 -0
- package/dist/src/integrations/jira/jira-token-provider.js.map +1 -0
- package/dist/src/sync/ado-reconciler.d.ts +92 -0
- package/dist/src/sync/ado-reconciler.d.ts.map +1 -0
- package/dist/src/sync/ado-reconciler.js +335 -0
- package/dist/src/sync/ado-reconciler.js.map +1 -0
- package/dist/src/sync/jira-reconciler.d.ts +106 -0
- package/dist/src/sync/jira-reconciler.d.ts.map +1 -0
- package/dist/src/sync/jira-reconciler.js +405 -0
- package/dist/src/sync/jira-reconciler.js.map +1 -0
- package/dist/src/types/dashboard-cache.d.ts +181 -0
- package/dist/src/types/dashboard-cache.d.ts.map +1 -0
- package/dist/src/types/dashboard-cache.js +65 -0
- package/dist/src/types/dashboard-cache.js.map +1 -0
- package/dist/src/types/model-selection.d.ts +6 -4
- package/dist/src/types/model-selection.d.ts.map +1 -1
- package/dist/src/types/model-selection.js +3 -1
- package/dist/src/types/model-selection.js.map +1 -1
- package/dist/src/utils/docs-validator.d.ts +131 -0
- package/dist/src/utils/docs-validator.d.ts.map +1 -0
- package/dist/src/utils/docs-validator.js +529 -0
- package/dist/src/utils/docs-validator.js.map +1 -0
- package/dist/src/utils/external-tool-drift-detector.d.ts +1 -1
- package/dist/src/utils/external-tool-drift-detector.d.ts.map +1 -1
- package/dist/src/utils/external-tool-drift-detector.js +5 -4
- package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
- package/dist/src/utils/feature-id-collision.js +1 -1
- package/dist/src/utils/feature-id-collision.js.map +1 -1
- package/dist/src/utils/feature-id-derivation.d.ts +8 -3
- package/dist/src/utils/feature-id-derivation.d.ts.map +1 -1
- package/dist/src/utils/feature-id-derivation.js +14 -6
- package/dist/src/utils/feature-id-derivation.js.map +1 -1
- package/dist/src/utils/html-to-mdx.d.ts +1 -0
- package/dist/src/utils/html-to-mdx.d.ts.map +1 -1
- package/dist/src/utils/html-to-mdx.js +43 -5
- package/dist/src/utils/html-to-mdx.js.map +1 -1
- package/dist/src/utils/model-selection.d.ts +3 -4
- package/dist/src/utils/model-selection.d.ts.map +1 -1
- package/dist/src/utils/model-selection.js +3 -4
- package/dist/src/utils/model-selection.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/agents/code-standards-detective/AGENT.md +48 -0
- package/plugins/specweave/agents/pm/AGENT.md +10 -7
- package/plugins/specweave/commands/specweave-archive-features.md +5 -7
- package/plugins/specweave/commands/specweave-archive.md +2 -1
- package/plugins/specweave/commands/specweave-costs.md +4 -4
- package/plugins/specweave/commands/specweave-do.md +44 -10
- package/plugins/specweave/commands/specweave-done.md +109 -0
- package/plugins/specweave/commands/specweave-import-external.md +45 -18
- package/plugins/specweave/commands/specweave-increment.md +331 -33
- package/plugins/specweave/commands/specweave-jobs.md +2 -2
- package/plugins/specweave/commands/specweave-progress.md +4 -4
- package/plugins/specweave/commands/specweave-restore-feature.md +5 -4
- package/plugins/specweave/commands/specweave-sync-docs.md +1 -1
- package/plugins/specweave/commands/specweave-sync-specs.md +216 -322
- package/plugins/specweave/commands/specweave-validate-features.md +13 -8
- package/plugins/specweave/commands/specweave-validate.md +27 -1
- package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
- package/plugins/specweave/hooks/hooks.json +43 -4
- package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
- package/plugins/specweave/hooks/lib/common-setup.sh +375 -0
- package/plugins/specweave/hooks/lib/crash-prevention.sh +336 -0
- package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
- package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
- package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
- package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
- package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
- package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
- package/plugins/specweave/hooks/post-task-completion.sh +4 -23
- package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
- package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -6
- package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
- package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
- package/plugins/specweave/hooks/pre-task-completion.sh +8 -37
- package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
- package/plugins/specweave/hooks/pre-tool-use.sh +2 -11
- package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
- package/plugins/specweave/hooks/spec-project-validator.sh +80 -25
- package/plugins/specweave/hooks/universal/dispatcher.mjs +135 -42
- package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +183 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +140 -38
- package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
- package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +12 -0
- package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +89 -0
- package/plugins/specweave/hooks/v2/guards/bash-file-guard.sh +211 -0
- package/plugins/specweave/hooks/v2/guards/bash-file-guard.test.sh +163 -0
- package/plugins/specweave/hooks/v2/guards/completion-guard.sh +26 -28
- package/plugins/specweave/hooks/v2/guards/features-folder-guard.sh +50 -0
- package/plugins/specweave/hooks/v2/guards/increment-duplicate-guard.sh +135 -0
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +2 -2
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
- package/plugins/specweave/scripts/README.md +166 -0
- package/plugins/specweave/scripts/cleanup-state.sh +142 -0
- package/plugins/specweave/scripts/force-kill.sh +142 -0
- package/plugins/specweave/scripts/jobs.js +171 -0
- package/plugins/specweave/scripts/progress.js +170 -0
- package/plugins/specweave/scripts/read-costs.sh +132 -0
- package/plugins/specweave/scripts/read-jobs.sh +324 -0
- package/plugins/specweave/scripts/read-progress.sh +185 -0
- package/plugins/specweave/scripts/read-status.sh +146 -0
- package/plugins/specweave/scripts/read-workflow.sh +173 -0
- package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +327 -0
- package/plugins/specweave/scripts/session-watchdog.sh +192 -0
- package/plugins/specweave/scripts/status.js +154 -0
- package/plugins/specweave/scripts/update-dashboard-cache.sh +281 -0
- package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +58 -6
- package/plugins/specweave/skills/increment-planner/SKILL.md +388 -48
- package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +17 -7
- package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -1
- package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +1 -1
- package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +1 -1
- package/plugins/specweave/skills/instant-status/SKILL.md +70 -0
- package/plugins/specweave-ado/commands/cleanup-duplicates.md +212 -0
- package/plugins/specweave-ado/commands/reconcile.md +120 -0
- package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
- package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
- package/plugins/specweave-ado/lib/ado-duplicate-detector.js +279 -0
- package/plugins/specweave-ado/lib/ado-duplicate-detector.ts +407 -0
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
- package/plugins/specweave-docs/commands/build.md +32 -4
- package/plugins/specweave-docs/commands/preview.md +43 -1
- package/plugins/specweave-docs/commands/validate.md +250 -0
- package/plugins/specweave-github/agents/github-manager/AGENT.md +2 -2
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +1262 -0
- package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
- package/plugins/specweave-github/lib/enhanced-github-sync.js +220 -0
- package/plugins/specweave-infrastructure/skills/hetzner-provisioner/README.md +1 -1
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +1 -1
- package/plugins/specweave-jira/agents/jira-multi-project-mapper/AGENT.md +530 -0
- package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +438 -0
- package/plugins/specweave-jira/commands/cleanup-duplicates.md +219 -0
- package/plugins/specweave-jira/commands/close.md +297 -0
- package/plugins/specweave-jira/commands/create.md +198 -0
- package/plugins/specweave-jira/commands/reconcile.md +123 -0
- package/plugins/specweave-jira/commands/status.md +215 -0
- package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
- package/plugins/specweave-jira/lib/jira-duplicate-detector.js +296 -0
- package/plugins/specweave-jira/lib/jira-duplicate-detector.ts +434 -0
- package/plugins/specweave-jira/lib/jira-permission-gate.js +160 -0
- package/plugins/specweave-jira/lib/jira-permission-gate.ts +276 -0
- package/plugins/specweave-jira/lib/jira-profile-resolver.js +222 -0
- package/plugins/specweave-jira/lib/jira-profile-resolver.ts +427 -0
- package/plugins/specweave-jira/reference/jira-specweave-mapping.md +16 -11
- package/plugins/specweave-release/commands/specweave-release-npm.md +140 -14
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1254 -0
- package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
- package/plugins/specweave/hooks/post-edit-spec.sh +0 -265
- package/plugins/specweave/hooks/post-write-spec.sh +0 -267
- package/plugins/specweave/hooks/pre-edit-spec.sh +0 -151
- package/plugins/specweave/hooks/pre-write-spec.sh +0 -151
|
@@ -176,78 +176,362 @@ echo "Using coverageTarget: $coverageTarget"
|
|
|
176
176
|
|
|
177
177
|
**Store these values for use in STEP 4 and STEP 7!**
|
|
178
178
|
|
|
179
|
-
### STEP 0B:
|
|
179
|
+
### STEP 0B: Get Project Context (MANDATORY - BLOCKING!)
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
**⛔ DO NOT PROCEED TO STEP 1 WITHOUT COMPLETING THIS STEP!**
|
|
182
|
+
|
|
183
|
+
Before generating ANY spec.md content, you MUST run this CLI command:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
specweave context projects
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
This returns JSON with available projects and structure level:
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"level": 1,
|
|
194
|
+
"projects": [{"id": "my-app", "name": "My App"}],
|
|
195
|
+
"detectionReason": "multiProject configuration",
|
|
196
|
+
"source": "multi-project"
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**For 2-level structures**, output includes boards:
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"level": 2,
|
|
204
|
+
"projects": [{"id": "acme-corp", "name": "ACME Corporation"}],
|
|
205
|
+
"boardsByProject": {
|
|
206
|
+
"acme-corp": [
|
|
207
|
+
{"id": "digital-ops", "name": "Digital Operations"},
|
|
208
|
+
{"id": "mobile-team", "name": "Mobile Team"}
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
"detectionReason": "ADO area path mapping configured",
|
|
212
|
+
"source": "ado-area-path"
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**VALIDATION RULES:**
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
✅ REQUIRED: Parse the JSON output and use ONLY those project/board values
|
|
220
|
+
✅ REQUIRED: project field MUST match one of the returned projects[].id
|
|
221
|
+
✅ REQUIRED: board field (2-level) MUST match one of boardsByProject[project].id
|
|
222
|
+
❌ FORBIDDEN: Inventing or guessing project names
|
|
223
|
+
❌ FORBIDDEN: Using folder name as project (e.g., "sw-olysense")
|
|
224
|
+
❌ FORBIDDEN: Creating spec.md with {{PROJECT_ID}} placeholder
|
|
225
|
+
❌ FORBIDDEN: Creating spec.md for 2-level without board: field
|
|
226
|
+
```
|
|
182
227
|
|
|
183
228
|
**Structure Levels:**
|
|
184
229
|
- **1-Level**: `internal/specs/{project}/FS-XXX/` - requires `project` in spec.md
|
|
185
230
|
- **2-Level**: `internal/specs/{project}/{board}/FS-XXX/` - requires BOTH `project` AND `board`
|
|
186
231
|
|
|
187
|
-
**
|
|
232
|
+
**Alternative: Interactive Selection:**
|
|
233
|
+
```bash
|
|
234
|
+
specweave context select
|
|
235
|
+
# Returns auto-selected or prompts for selection
|
|
236
|
+
```
|
|
188
237
|
|
|
189
|
-
|
|
190
|
-
|
|
238
|
+
**Get boards for a specific project (2-level):**
|
|
239
|
+
```bash
|
|
240
|
+
specweave context boards --project=acme-corp
|
|
241
|
+
```
|
|
191
242
|
|
|
192
|
-
|
|
193
|
-
console.log(`Structure level: ${structureConfig.level}`);
|
|
194
|
-
console.log(`Detection reason: ${structureConfig.detectionReason}`);
|
|
195
|
-
console.log(`Available projects: ${structureConfig.projects.map(p => p.id).join(', ')}`);
|
|
243
|
+
**Project/Board Selection - ULTRA-SMART LOGIC (MANDATORY BEFORE STEP 4!):**
|
|
196
244
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
245
|
+
**⚠️ CORE PRINCIPLE: Each User Story belongs to exactly ONE project (1-level) or ONE project+board (2-level). An increment can contain USs spanning MULTIPLE projects/boards.**
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
### SMART SELECTION DECISION TREE
|
|
250
|
+
|
|
251
|
+
**RULE 1: NO QUESTION IF ONLY 1 OPTION**
|
|
252
|
+
```
|
|
253
|
+
IF 1-level AND only 1 project → AUTO-SELECT silently
|
|
254
|
+
IF 2-level AND only 1 project AND only 1 board → AUTO-SELECT silently
|
|
203
255
|
```
|
|
204
256
|
|
|
205
|
-
**
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
257
|
+
**RULE 2: KEYWORD-BASED AUTO-DETECTION**
|
|
258
|
+
|
|
259
|
+
Analyze feature description and US content for keywords:
|
|
260
|
+
|
|
261
|
+
**Project-Level Keywords (1-level and 2-level):**
|
|
262
|
+
```
|
|
263
|
+
Frontend (FE) keywords:
|
|
264
|
+
UI, form, button, page, component, React, Vue, Angular, Next.js,
|
|
265
|
+
CSS, style, responsive, chart, dashboard, view, modal, widget,
|
|
266
|
+
Tailwind, Material-UI, Recharts
|
|
267
|
+
|
|
268
|
+
Backend (BE) keywords:
|
|
269
|
+
API, endpoint, REST, GraphQL, database, query, migration, service,
|
|
270
|
+
controller, authentication, JWT, session, middleware, CRUD,
|
|
271
|
+
Redis, PostgreSQL, MongoDB, microservice
|
|
272
|
+
|
|
273
|
+
Mobile keywords:
|
|
274
|
+
mobile, iOS, Android, React Native, Flutter, Expo, app, native,
|
|
275
|
+
push notification, offline, AsyncStorage, screen, touch, gesture
|
|
276
|
+
|
|
277
|
+
Infrastructure (INFRA) keywords:
|
|
278
|
+
deploy, CI/CD, Docker, Kubernetes, terraform, monitoring,
|
|
279
|
+
logging, pipeline, AWS, Azure, GCP, nginx, Helm, ArgoCD
|
|
280
|
+
|
|
281
|
+
Shared (SHARED) keywords:
|
|
282
|
+
types, interfaces, utilities, validators, shared, common, library,
|
|
283
|
+
SDK, models, constants, helpers
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Board-Level Keywords (2-level structures only):**
|
|
287
|
+
```
|
|
288
|
+
When project has multiple boards, also match board-specific keywords:
|
|
289
|
+
|
|
290
|
+
analytics/reporting: analytics, metrics, KPI, dashboard, report, chart, graph
|
|
291
|
+
user-management: user, auth, login, registration, profile, permissions, roles
|
|
292
|
+
integrations: integration, webhook, API, third-party, sync, import, export
|
|
293
|
+
payments: payment, billing, subscription, invoice, stripe, checkout
|
|
294
|
+
notifications: notification, alert, email, SMS, push, messaging
|
|
295
|
+
devops/platform: deploy, infrastructure, monitoring, CI/CD, pipeline
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**RULE 3: CONFIDENCE CALCULATION FORMULA**
|
|
299
|
+
```
|
|
300
|
+
confidence = (matched_keywords / total_feature_keywords) × 100
|
|
301
|
+
|
|
302
|
+
Example: "Add React login form with JWT authentication"
|
|
303
|
+
Keywords found: React (FE), login (FE), form (FE), JWT (BE), authentication (BE)
|
|
304
|
+
FE matches: 3, BE matches: 2
|
|
305
|
+
FE confidence: 3/5 = 60%
|
|
306
|
+
BE confidence: 2/5 = 40%
|
|
307
|
+
→ Primary: FE (60%), Secondary: BE (40%)
|
|
308
|
+
→ SUGGEST: "Frontend (60%), but also touches Backend (40%)"
|
|
309
|
+
|
|
310
|
+
If multiple projects have similar confidence (within 15%):
|
|
311
|
+
→ Treat as MULTI-PROJECT feature
|
|
312
|
+
→ Auto-split USs by detected keywords
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**RULE 4: CONFIDENCE-BASED DECISION**
|
|
316
|
+
```
|
|
317
|
+
>80% single project → AUTO-SELECT with notification (no question)
|
|
318
|
+
50-80% single project → SUGGEST with quick confirm option
|
|
319
|
+
Multiple projects within 15% → AUTO-SPLIT across projects
|
|
320
|
+
<50% OR ambiguous → ASK user with all options
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**RULE 5: FALLBACK TO DEFAULTS**
|
|
324
|
+
```
|
|
325
|
+
IF US has explicit **Project**: field → USE IT
|
|
326
|
+
ELSE IF frontmatter has default_project → USE default_project
|
|
327
|
+
ELSE → ASK user (should not happen if flow followed correctly)
|
|
328
|
+
|
|
329
|
+
Same logic applies to **Board**: and default_board for 2-level
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
### DECISION FLOWCHART
|
|
335
|
+
|
|
336
|
+
```
|
|
337
|
+
START
|
|
338
|
+
│
|
|
339
|
+
▼
|
|
340
|
+
┌─────────────────────────────────────┐
|
|
341
|
+
│ 1. Detect structure level (1 or 2) │
|
|
342
|
+
│ 2. Count available projects/boards │
|
|
343
|
+
└─────────────────────────────────────┘
|
|
344
|
+
│
|
|
345
|
+
▼
|
|
346
|
+
┌─────────────────────────────────────┐
|
|
347
|
+
│ ONLY 1 PROJECT? │
|
|
348
|
+
│ (1-level: 1 project) │
|
|
349
|
+
│ (2-level: 1 project + 1 board) │
|
|
350
|
+
└─────────────────────────────────────┘
|
|
351
|
+
│
|
|
352
|
+
├── YES ──► AUTO-SELECT SILENTLY
|
|
353
|
+
│ Output: "✅ Project: {name} (auto-selected)"
|
|
354
|
+
│ NO QUESTION ASKED
|
|
355
|
+
│
|
|
356
|
+
▼ NO
|
|
357
|
+
┌─────────────────────────────────────┐
|
|
358
|
+
│ ANALYZE KEYWORDS in feature desc │
|
|
359
|
+
│ Calculate confidence per project │
|
|
360
|
+
└─────────────────────────────────────┘
|
|
361
|
+
│
|
|
362
|
+
├── HIGH CONFIDENCE (>80% single) ──► AUTO-SELECT + NOTIFY
|
|
363
|
+
│ Output: "✅ Detected: {project} (keywords: form, React)"
|
|
364
|
+
│
|
|
365
|
+
├── MULTI-PROJECT (within 15%) ──► AUTO-SPLIT USs
|
|
366
|
+
│ Output: "🔀 Multi-project detected:
|
|
367
|
+
│ • US-001 (Login UI) → web-app (60%)
|
|
368
|
+
│ • US-002 (Auth API) → api-service (55%)
|
|
369
|
+
│ Proceed? (Y/n)"
|
|
370
|
+
│
|
|
371
|
+
├── MEDIUM CONFIDENCE (50-80%) ──► SUGGEST + CONFIRM
|
|
372
|
+
│ Output: "📍 Suggested: {project}. Confirm? (Y/n)"
|
|
373
|
+
│
|
|
374
|
+
▼ LOW CONFIDENCE (<50%)
|
|
375
|
+
┌─────────────────────────────────────┐
|
|
376
|
+
│ ASK USER with ALL options listed │
|
|
377
|
+
│ multiSelect: true │
|
|
378
|
+
│ Show complete list (never truncate)│
|
|
379
|
+
└─────────────────────────────────────┘
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
### PER-USER-STORY ASSIGNMENT MODEL
|
|
385
|
+
|
|
386
|
+
**CRITICAL: Assignment is at USER STORY level, not increment level!**
|
|
387
|
+
|
|
388
|
+
Each US in spec.md has its own project (and board for 2-level):
|
|
389
|
+
|
|
390
|
+
```markdown
|
|
391
|
+
## User Stories
|
|
209
392
|
|
|
210
|
-
|
|
211
|
-
|
|
393
|
+
### US-001: Login Form UI
|
|
394
|
+
**Project**: web-app
|
|
395
|
+
**Board**: frontend <!-- 2-level only -->
|
|
396
|
+
**As a** user...
|
|
397
|
+
|
|
398
|
+
### US-002: Auth API Endpoints
|
|
399
|
+
**Project**: api-service
|
|
400
|
+
**Board**: backend <!-- 2-level only -->
|
|
401
|
+
**As a** developer...
|
|
402
|
+
|
|
403
|
+
### US-003: Mobile Login Screen
|
|
404
|
+
**Project**: mobile-app
|
|
405
|
+
**Board**: mobile-team <!-- 2-level only -->
|
|
406
|
+
**As a** mobile user...
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**User can manually change project/board per US at any time by editing spec.md!**
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
### EXAMPLE SCENARIOS
|
|
414
|
+
|
|
415
|
+
**Scenario 1: Single Project (NO QUESTION)**
|
|
416
|
+
```
|
|
417
|
+
Config: 1 project (my-app)
|
|
418
|
+
Feature: "Add user authentication"
|
|
419
|
+
|
|
420
|
+
→ AUTO-SELECT: my-app
|
|
421
|
+
→ Output: "✅ Project: my-app (single project - auto-selected)"
|
|
422
|
+
→ NO question asked
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**Scenario 2: Multiple Projects, Clear Keywords (AUTO-DETECT)**
|
|
426
|
+
```
|
|
427
|
+
Config: 3 projects (web-app, api-service, mobile-app)
|
|
428
|
+
Feature: "Add React dashboard with charts"
|
|
429
|
+
|
|
430
|
+
→ Keyword analysis: "React" (FE), "dashboard" (FE), "charts" (FE)
|
|
431
|
+
→ Confidence: 95% → web-app
|
|
432
|
+
→ Output: "✅ Detected project: web-app (keywords: React, dashboard, charts)"
|
|
433
|
+
→ NO question asked (high confidence)
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
**Scenario 3: Multiple Projects, Multi-Area Feature (SMART SPLIT)**
|
|
212
437
|
```
|
|
438
|
+
Config: 3 projects (web-app, api-service, shared-lib)
|
|
439
|
+
Feature: "User authentication with JWT"
|
|
213
440
|
|
|
214
|
-
|
|
441
|
+
→ Analyze: This spans FE (login form) + BE (auth API) + possibly shared (types)
|
|
442
|
+
→ Output:
|
|
443
|
+
"🔍 This feature likely spans multiple projects:
|
|
215
444
|
|
|
216
|
-
|
|
217
|
-
-
|
|
218
|
-
-
|
|
219
|
-
-
|
|
445
|
+
Based on 'user authentication with JWT', I'll create:
|
|
446
|
+
• US-001: Login/Register UI → web-app (keywords: UI, form)
|
|
447
|
+
• US-002: Auth API endpoints → api-service (keywords: API, JWT)
|
|
448
|
+
• US-003: Auth types/validators → shared-lib (keywords: types, shared)
|
|
220
449
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
450
|
+
✅ Proceed with this assignment? (Y/n)
|
|
451
|
+
💡 You can modify project per US in spec.md anytime"
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
**Scenario 4: 2-Level, Single Project, Auto-Detect Board**
|
|
455
|
+
```
|
|
456
|
+
Config: 1 project (enterprise-corp), 5 boards (analytics, frontend, backend, mobile, devops)
|
|
457
|
+
Feature: "Add reporting dashboard"
|
|
458
|
+
|
|
459
|
+
→ Project: AUTO-SELECT enterprise-corp (only option)
|
|
460
|
+
→ Board keywords: "reporting" → analytics, "dashboard" → frontend
|
|
461
|
+
→ Confidence: 70% analytics, 60% frontend
|
|
462
|
+
→ Output:
|
|
463
|
+
"✅ Project: enterprise-corp (auto-selected)
|
|
464
|
+
📍 Suggested board: analytics (keyword: reporting)
|
|
226
465
|
|
|
227
|
-
|
|
466
|
+
Confirm or select different board:
|
|
467
|
+
1. analytics (suggested)
|
|
468
|
+
2. frontend
|
|
469
|
+
3. backend
|
|
470
|
+
4. mobile
|
|
471
|
+
5. devops"
|
|
228
472
|
```
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
473
|
+
|
|
474
|
+
**Scenario 5: Completely Ambiguous (ASK WITH ALL OPTIONS)**
|
|
475
|
+
```
|
|
476
|
+
Config: 4 projects (proj-a, proj-b, proj-c, proj-d)
|
|
477
|
+
Feature: "Improve system performance"
|
|
478
|
+
|
|
479
|
+
→ Keyword analysis: No clear project match
|
|
480
|
+
→ Output:
|
|
481
|
+
"❓ Which project(s) should this increment target?
|
|
482
|
+
|
|
483
|
+
Available projects:
|
|
484
|
+
• proj-a - E-commerce frontend
|
|
485
|
+
• proj-b - Order processing API
|
|
486
|
+
• proj-c - Mobile shopping app
|
|
487
|
+
• proj-d - Infrastructure/DevOps
|
|
488
|
+
|
|
489
|
+
Select one or more (comma-separated, e.g., '1,2' or 'proj-a,proj-b'):"
|
|
233
490
|
```
|
|
234
491
|
|
|
235
|
-
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
### VALIDATION RULES
|
|
236
495
|
|
|
237
496
|
```
|
|
238
|
-
|
|
239
|
-
|
|
497
|
+
❌ FORBIDDEN: Asking project question when only 1 project exists
|
|
498
|
+
❌ FORBIDDEN: Asking board question when only 1 board exists in project
|
|
499
|
+
❌ FORBIDDEN: Hiding options behind "Let me see all" - ALWAYS show complete list
|
|
500
|
+
❌ FORBIDDEN: Truncating project/board lists
|
|
501
|
+
❌ FORBIDDEN: Assigning ALL USs to same project when content clearly differs
|
|
502
|
+
✅ REQUIRED: Auto-select when only 1 option available
|
|
503
|
+
✅ REQUIRED: Use keyword matching before asking user
|
|
504
|
+
✅ REQUIRED: Each US has explicit project (and board for 2-level) assignment
|
|
505
|
+
✅ REQUIRED: Allow user to modify assignments per-US in spec.md
|
|
506
|
+
✅ REQUIRED: When asking, show ALL options with descriptions
|
|
507
|
+
```
|
|
240
508
|
|
|
241
|
-
|
|
242
|
-
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
### SPEC.MD YAML FORMAT
|
|
243
512
|
|
|
244
|
-
|
|
245
|
-
|
|
513
|
+
**1-Level Structure:**
|
|
514
|
+
```yaml
|
|
515
|
+
---
|
|
516
|
+
increment: 0045-user-auth
|
|
517
|
+
title: "User Authentication"
|
|
518
|
+
# Optional default (used if US doesn't specify)
|
|
519
|
+
default_project: web-app
|
|
520
|
+
---
|
|
521
|
+
```
|
|
246
522
|
|
|
247
|
-
|
|
523
|
+
**2-Level Structure:**
|
|
524
|
+
```yaml
|
|
525
|
+
---
|
|
526
|
+
increment: 0045-user-auth
|
|
527
|
+
title: "User Authentication"
|
|
528
|
+
# Optional defaults (used if US doesn't specify)
|
|
529
|
+
default_project: enterprise-corp
|
|
530
|
+
default_board: backend
|
|
531
|
+
---
|
|
248
532
|
```
|
|
249
533
|
|
|
250
|
-
**Store
|
|
534
|
+
**Store detected/selected values for use in STEP 4!**
|
|
251
535
|
|
|
252
536
|
---
|
|
253
537
|
|
|
@@ -445,6 +729,60 @@ const metadata = {
|
|
|
445
729
|
|
|
446
730
|
**DO NOT invoke Task() tool to spawn agents from this skill!**
|
|
447
731
|
|
|
732
|
+
### STEP 9: Trigger Living Docs & External Tool Sync (v0.32.2+)
|
|
733
|
+
|
|
734
|
+
**🔄 CRITICAL: After increment files are created, trigger sync to living docs AND external tools!**
|
|
735
|
+
|
|
736
|
+
This step uses the existing sync infrastructure to:
|
|
737
|
+
1. Create living docs (FS-XXX folder with FEATURE.md and us-*.md files)
|
|
738
|
+
2. Check permissions (`canUpsertInternalItems`) from `.specweave/config.json`
|
|
739
|
+
3. Sync to external tools (GitHub/JIRA/ADO) if configured and permitted
|
|
740
|
+
|
|
741
|
+
**Run the sync-specs command:**
|
|
742
|
+
|
|
743
|
+
```bash
|
|
744
|
+
/specweave:sync-specs {increment-id}
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
**Expected output:**
|
|
748
|
+
|
|
749
|
+
```
|
|
750
|
+
🔄 Syncing increment to living docs...
|
|
751
|
+
✅ Living docs synced: FS-021
|
|
752
|
+
Created: 4 files (FEATURE.md, us-001.md, us-002.md, us-003.md)
|
|
753
|
+
|
|
754
|
+
📡 Syncing to external tools: github
|
|
755
|
+
📋 Permissions: upsert=true, update=true, status=true
|
|
756
|
+
✅ Synced to GitHub: 0 updated, 3 created
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
**Permission handling (v0.32.2+):**
|
|
760
|
+
|
|
761
|
+
If `canUpsertInternalItems: false` in config:
|
|
762
|
+
```
|
|
763
|
+
⚠️ Skipping external sync - canUpsertInternalItems is disabled
|
|
764
|
+
💡 Enable in .specweave/config.json: sync.settings.canUpsertInternalItems: true
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
**Error handling:**
|
|
768
|
+
|
|
769
|
+
External tool sync failures are NON-BLOCKING:
|
|
770
|
+
```
|
|
771
|
+
⚠️ External sync failed: Rate limit exceeded
|
|
772
|
+
💡 Run /specweave:sync-specs {increment-id} to retry
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
**Output after sync:**
|
|
776
|
+
|
|
777
|
+
```
|
|
778
|
+
✅ Increment created and synced!
|
|
779
|
+
|
|
780
|
+
Next steps:
|
|
781
|
+
1. Review the increment plan and docs
|
|
782
|
+
2. Start implementation: /specweave:do {increment-id}
|
|
783
|
+
3. Monitor status: /specweave:status {increment-id}
|
|
784
|
+
```
|
|
785
|
+
|
|
448
786
|
---
|
|
449
787
|
|
|
450
788
|
## Model Selection for Tasks
|
|
@@ -457,19 +795,21 @@ When creating tasks, assign optimal models:
|
|
|
457
795
|
- Simple CRUD, configuration, setup
|
|
458
796
|
- Mechanical work with defined approach
|
|
459
797
|
|
|
460
|
-
|
|
798
|
+
**💎 Opus** (best quality, default):
|
|
461
799
|
- Architecture decisions
|
|
462
800
|
- Multiple valid approaches
|
|
463
801
|
- Integration between components
|
|
464
802
|
- Complex business logic
|
|
465
803
|
- Error handling strategies
|
|
466
|
-
|
|
467
|
-
**💎 Opus** (critical, expensive):
|
|
468
804
|
- Critical system architecture
|
|
469
805
|
- Security-critical decisions
|
|
470
806
|
- Performance-critical algorithms
|
|
471
807
|
- Novel problem-solving
|
|
472
808
|
|
|
809
|
+
**🧠 Sonnet** (legacy, rarely needed):
|
|
810
|
+
- Use only for backwards compatibility
|
|
811
|
+
- Prefer Opus or Haiku instead
|
|
812
|
+
|
|
473
813
|
---
|
|
474
814
|
|
|
475
815
|
## Validation Checklist
|
|
@@ -8,6 +8,8 @@ created: {{DATE}}
|
|
|
8
8
|
structure: user-stories
|
|
9
9
|
test_mode: {{TEST_MODE}}
|
|
10
10
|
coverage_target: {{COVERAGE_TARGET}}
|
|
11
|
+
# MANDATORY: Run "specweave context projects" to get valid project/board IDs
|
|
12
|
+
# For 2-level structures: BOTH project AND board are REQUIRED
|
|
11
13
|
project: {{PROJECT_ID}}
|
|
12
14
|
board: {{BOARD_ID}}
|
|
13
15
|
multi_project: true
|
|
@@ -26,12 +28,16 @@ projects:
|
|
|
26
28
|
|
|
27
29
|
[High-level description - WHAT this feature does and WHY it's needed]
|
|
28
30
|
|
|
29
|
-
## User Stories
|
|
31
|
+
## User Stories
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
<!-- Each US has its own **Project** and **Board** fields. User can modify per-US anytime. -->
|
|
34
|
+
|
|
35
|
+
### Frontend Stories
|
|
32
36
|
|
|
33
37
|
#### US-FE-001: [Story Title] (P1)
|
|
34
|
-
**
|
|
38
|
+
**Project**: {{PROJECT_ID}}
|
|
39
|
+
**Board**: {{BOARD_FE_ID}}
|
|
40
|
+
|
|
35
41
|
**As a** [user type]
|
|
36
42
|
**I want** [goal]
|
|
37
43
|
**So that** [benefit]
|
|
@@ -42,10 +48,12 @@ projects:
|
|
|
42
48
|
|
|
43
49
|
---
|
|
44
50
|
|
|
45
|
-
### Backend
|
|
51
|
+
### Backend Stories
|
|
46
52
|
|
|
47
53
|
#### US-BE-001: [Story Title] (P1)
|
|
48
|
-
**
|
|
54
|
+
**Project**: {{PROJECT_ID}}
|
|
55
|
+
**Board**: {{BOARD_BE_ID}}
|
|
56
|
+
|
|
49
57
|
**As a** [system/frontend application]
|
|
50
58
|
**I want** [API endpoint/service goal]
|
|
51
59
|
**So that** [benefit]
|
|
@@ -56,10 +64,12 @@ projects:
|
|
|
56
64
|
|
|
57
65
|
---
|
|
58
66
|
|
|
59
|
-
### Shared Library
|
|
67
|
+
### Shared Library Stories
|
|
60
68
|
|
|
61
69
|
#### US-SHARED-001: [Story Title] (P1)
|
|
62
|
-
**
|
|
70
|
+
**Project**: {{PROJECT_ID}}
|
|
71
|
+
**Board**: {{BOARD_SHARED_ID}}
|
|
72
|
+
|
|
63
73
|
**As a** developer in FE or BE repos
|
|
64
74
|
**I want** [shared types/utilities/validators]
|
|
65
75
|
**So that** [consistency across projects]
|
|
@@ -8,6 +8,7 @@ created: {{DATE}}
|
|
|
8
8
|
structure: user-stories
|
|
9
9
|
test_mode: {{TEST_MODE}}
|
|
10
10
|
coverage_target: {{COVERAGE_TARGET}}
|
|
11
|
+
# MANDATORY: Run "specweave context projects" to get valid project ID
|
|
11
12
|
project: {{PROJECT_ID}}
|
|
12
13
|
---
|
|
13
14
|
|
|
@@ -19,7 +20,10 @@ project: {{PROJECT_ID}}
|
|
|
19
20
|
|
|
20
21
|
## User Stories
|
|
21
22
|
|
|
23
|
+
<!-- Each US can have its own **Project** field. If omitted, uses default_project from frontmatter -->
|
|
24
|
+
|
|
22
25
|
### US-001: [Story Title] (P1)
|
|
26
|
+
**Project**: {{PROJECT_ID}}
|
|
23
27
|
|
|
24
28
|
**As a** [user type]
|
|
25
29
|
**I want** [goal]
|
|
@@ -30,8 +34,9 @@ project: {{PROJECT_ID}}
|
|
|
30
34
|
- [ ] **AC-US1-02**: [Another criterion]
|
|
31
35
|
|
|
32
36
|
### US-002: [Story Title] (P2)
|
|
37
|
+
**Project**: {{PROJECT_ID}}
|
|
33
38
|
|
|
34
|
-
[Repeat structure]
|
|
39
|
+
[Repeat structure - change Project per US if spanning multiple projects]
|
|
35
40
|
|
|
36
41
|
## Functional Requirements
|
|
37
42
|
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: instant-status
|
|
3
|
+
description: Instant status commands that bypass LLM processing. Execute scripts directly for /specweave:status, /specweave:progress, /specweave:jobs. Activates for specweave status, specweave progress, specweave jobs, increment status, show status, show progress, background jobs, job status.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Instant Status Commands
|
|
7
|
+
|
|
8
|
+
These commands need **NO LLM reasoning** - execute scripts directly for instant results.
|
|
9
|
+
|
|
10
|
+
## Commands and Scripts
|
|
11
|
+
|
|
12
|
+
| Command | Script | Purpose |
|
|
13
|
+
|---------|--------|---------|
|
|
14
|
+
| `/specweave:status` | `bash plugins/specweave/scripts/read-status.sh` | Increment status overview |
|
|
15
|
+
| `/specweave:progress` | `bash plugins/specweave/scripts/read-progress.sh` | Task completion progress |
|
|
16
|
+
| `/specweave:jobs` | `bash plugins/specweave/scripts/read-jobs.sh` | Background job status |
|
|
17
|
+
|
|
18
|
+
## CRITICAL: Direct Execution Required
|
|
19
|
+
|
|
20
|
+
When user requests these commands:
|
|
21
|
+
|
|
22
|
+
1. **DO NOT** process as natural language
|
|
23
|
+
2. **DO NOT** expand slash command markdown
|
|
24
|
+
3. **RUN** the bash script via Bash tool (NOT node!)
|
|
25
|
+
4. **SHOW** output directly to user
|
|
26
|
+
|
|
27
|
+
### Example Execution
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# User types: /specweave:status
|
|
31
|
+
# You execute:
|
|
32
|
+
bash plugins/specweave/scripts/read-status.sh
|
|
33
|
+
|
|
34
|
+
# User types: /specweave:progress
|
|
35
|
+
# You execute:
|
|
36
|
+
bash plugins/specweave/scripts/read-progress.sh
|
|
37
|
+
|
|
38
|
+
# User types: /specweave:jobs
|
|
39
|
+
# You execute:
|
|
40
|
+
bash plugins/specweave/scripts/read-jobs.sh
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Three Execution Paths
|
|
44
|
+
|
|
45
|
+
| Layer | Context | Speed | When Used |
|
|
46
|
+
|-------|---------|-------|-----------|
|
|
47
|
+
| **Hook** | Claude Code | <100ms | Automatic (UserPromptSubmit intercepts) |
|
|
48
|
+
| **Skill** | Any LLM | ~2s | When hook not available (you are here) |
|
|
49
|
+
| **CLI** | Terminal | ~500ms | Direct `specweave status` command |
|
|
50
|
+
|
|
51
|
+
## CLI Alternative
|
|
52
|
+
|
|
53
|
+
Users can also run directly in terminal:
|
|
54
|
+
```bash
|
|
55
|
+
specweave status # Full CLI command
|
|
56
|
+
specweave jobs # Background jobs
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Script Arguments
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
bash plugins/specweave/scripts/read-status.sh 0045 # Specific increment
|
|
63
|
+
bash plugins/specweave/scripts/read-jobs.sh --all # All jobs
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Why This Matters
|
|
67
|
+
|
|
68
|
+
- **3+ minutes** to **<100ms**: Status commands were expanding as prompts
|
|
69
|
+
- **Zero LLM tokens**: Pure filesystem reads, no AI needed
|
|
70
|
+
- **Universal**: Works in Claude Code, Cursor, Copilot, CLI
|