universal-dev-standards 5.0.0-rc.9 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/uds.js +5 -3
- package/bundled/ai/standards/acceptance-criteria-traceability.ai.yaml +178 -0
- package/bundled/ai/standards/agent-dispatch.ai.yaml +69 -0
- package/bundled/ai/standards/ai-command-behavior.ai.yaml +45 -0
- package/bundled/ai/standards/api-design-standards.ai.yaml +192 -0
- package/bundled/ai/standards/branch-completion.ai.yaml +82 -0
- package/bundled/ai/standards/change-batching-standards.ai.yaml +195 -0
- package/bundled/ai/standards/database-standards.ai.yaml +220 -0
- package/bundled/ai/standards/error-codes.ai.yaml +37 -2
- package/bundled/ai/standards/git-worktree.ai.yaml +77 -0
- package/bundled/ai/standards/logging.ai.yaml +21 -2
- package/bundled/ai/standards/model-selection.ai.yaml +81 -0
- package/bundled/ai/standards/pipeline-integration-standards.ai.yaml +184 -0
- package/bundled/ai/standards/systematic-debugging.ai.yaml +73 -0
- package/bundled/ai/standards/verification-evidence.ai.yaml +84 -0
- package/bundled/ai/standards/workflow-enforcement.ai.yaml +253 -0
- package/bundled/core/acceptance-criteria-traceability.md +293 -0
- package/bundled/core/agent-dispatch.md +149 -0
- package/bundled/core/ai-command-behavior.md +239 -0
- package/bundled/core/api-design-standards.md +938 -0
- package/bundled/core/branch-completion.md +158 -0
- package/bundled/core/change-batching-standards.md +257 -0
- package/bundled/core/checkin-standards.md +43 -6
- package/bundled/core/database-standards.md +828 -0
- package/bundled/core/error-code-standards.md +228 -2
- package/bundled/core/forward-derivation-standards.md +54 -2
- package/bundled/core/git-worktree.md +131 -0
- package/bundled/core/model-selection.md +153 -0
- package/bundled/core/pipeline-integration-standards.md +230 -0
- package/bundled/core/systematic-debugging.md +156 -0
- package/bundled/core/testing-standards.md +49 -39
- package/bundled/core/verification-evidence.md +172 -0
- package/bundled/core/workflow-enforcement.md +132 -0
- package/bundled/locales/zh-CN/CLAUDE.md +2 -2
- package/bundled/locales/zh-CN/README.md +4 -4
- package/bundled/locales/zh-CN/SECURITY.md +92 -0
- package/bundled/locales/zh-CN/core/acceptance-criteria-traceability.md +301 -0
- package/bundled/locales/zh-CN/core/acceptance-test-driven-development.md +47 -0
- package/bundled/locales/zh-CN/core/accessibility-standards.md +124 -0
- package/bundled/locales/zh-CN/core/agent-dispatch.md +113 -0
- package/bundled/locales/zh-CN/core/ai-agreement-standards.md +103 -0
- package/bundled/locales/zh-CN/core/ai-command-behavior.md +247 -0
- package/bundled/locales/zh-CN/core/api-design-standards.md +946 -0
- package/bundled/locales/zh-CN/core/behavior-driven-development.md +48 -0
- package/bundled/locales/zh-CN/core/branch-completion.md +112 -0
- package/bundled/locales/zh-CN/core/change-batching-standards.md +265 -0
- package/bundled/locales/zh-CN/core/checkin-standards.md +43 -5
- package/bundled/locales/zh-CN/core/context-aware-loading.md +106 -0
- package/bundled/locales/zh-CN/core/database-standards.md +836 -0
- package/bundled/locales/zh-CN/core/deployment-standards.md +80 -0
- package/bundled/locales/zh-CN/core/error-code-standards.md +2 -2
- package/bundled/locales/zh-CN/core/forward-derivation-standards.md +493 -0
- package/bundled/locales/zh-CN/core/git-worktree.md +101 -0
- package/bundled/locales/zh-CN/core/model-selection.md +112 -0
- package/bundled/locales/zh-CN/core/performance-standards.md +104 -0
- package/bundled/locales/zh-CN/core/pipeline-integration-standards.md +238 -0
- package/bundled/locales/zh-CN/core/project-context-memory.md +124 -0
- package/bundled/locales/zh-CN/core/requirement-engineering.md +49 -0
- package/bundled/locales/zh-CN/core/security-standards.md +100 -0
- package/bundled/locales/zh-CN/core/systematic-debugging.md +106 -0
- package/bundled/locales/zh-CN/core/test-governance.md +116 -0
- package/bundled/locales/zh-CN/core/testing-standards.md +392 -156
- package/bundled/locales/zh-CN/core/verification-evidence.md +118 -0
- package/bundled/locales/zh-CN/core/virtual-organization-standards.md +104 -0
- package/bundled/locales/zh-CN/core/workflow-enforcement.md +132 -0
- package/bundled/locales/zh-CN/docs/CHEATSHEET.md +27 -1
- package/bundled/locales/zh-CN/docs/CLI-INIT-OPTIONS.md +9 -1
- package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +37 -9
- package/bundled/locales/zh-CN/docs/USER-MANUAL.md +652 -0
- package/bundled/locales/zh-CN/integrations/github-copilot/copilot-instructions.md +1 -1
- package/bundled/locales/zh-CN/integrations/openspec/AGENTS.md +29 -4
- package/bundled/locales/zh-CN/integrations/spec-kit/AGENTS.md +143 -72
- package/bundled/locales/zh-CN/skills/ac-coverage-assistant/SKILL.md +126 -0
- package/bundled/locales/zh-CN/skills/api-design-assistant/SKILL.md +100 -0
- package/bundled/locales/zh-CN/skills/brainstorm-assistant/SKILL.md +119 -0
- package/bundled/locales/zh-CN/skills/ci-cd-assistant/SKILL.md +82 -0
- package/bundled/locales/zh-CN/skills/commands/ac-coverage.md +97 -0
- package/bundled/locales/zh-CN/skills/commands/api-design.md +94 -0
- package/bundled/locales/zh-CN/skills/commands/atdd.md +163 -0
- package/bundled/locales/zh-CN/skills/commands/audit.md +77 -0
- package/bundled/locales/zh-CN/skills/commands/bdd.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/brainstorm.md +87 -0
- package/bundled/locales/zh-CN/skills/commands/changelog.md +63 -0
- package/bundled/locales/zh-CN/skills/commands/check.md +219 -0
- package/bundled/locales/zh-CN/skills/commands/checkin.md +61 -0
- package/bundled/locales/zh-CN/skills/commands/ci-cd.md +77 -0
- package/bundled/locales/zh-CN/skills/commands/commit.md +81 -0
- package/bundled/locales/zh-CN/skills/commands/config.md +207 -0
- package/bundled/locales/zh-CN/skills/commands/coverage.md +74 -0
- package/bundled/locales/zh-CN/skills/commands/database.md +78 -0
- package/bundled/locales/zh-CN/skills/commands/derive-all.md +58 -0
- package/bundled/locales/zh-CN/skills/commands/derive-atdd.md +54 -0
- package/bundled/locales/zh-CN/skills/commands/derive-bdd.md +53 -0
- package/bundled/locales/zh-CN/skills/commands/derive-tdd.md +54 -0
- package/bundled/locales/zh-CN/skills/commands/derive.md +78 -0
- package/bundled/locales/zh-CN/skills/commands/dev-workflow.md +119 -0
- package/bundled/locales/zh-CN/skills/commands/discover.md +86 -0
- package/bundled/locales/zh-CN/skills/commands/docgen.md +67 -0
- package/bundled/locales/zh-CN/skills/commands/docs.md +65 -0
- package/bundled/locales/zh-CN/skills/commands/durable.md +87 -0
- package/bundled/locales/zh-CN/skills/commands/guide.md +52 -0
- package/bundled/locales/zh-CN/skills/commands/incident.md +92 -0
- package/bundled/locales/zh-CN/skills/commands/init.md +272 -0
- package/bundled/locales/zh-CN/skills/commands/methodology.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/metrics.md +73 -0
- package/bundled/locales/zh-CN/skills/commands/migrate.md +92 -0
- package/bundled/locales/zh-CN/skills/commands/pr.md +80 -0
- package/bundled/locales/zh-CN/skills/commands/refactor.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/release.md +62 -0
- package/bundled/locales/zh-CN/skills/commands/requirement.md +54 -0
- package/bundled/locales/zh-CN/skills/commands/reverse-bdd.md +47 -0
- package/bundled/locales/zh-CN/skills/commands/reverse-sdd.md +51 -0
- package/bundled/locales/zh-CN/skills/commands/reverse-tdd.md +51 -0
- package/bundled/locales/zh-CN/skills/commands/reverse.md +63 -0
- package/bundled/locales/zh-CN/skills/commands/review.md +50 -0
- package/bundled/locales/zh-CN/skills/commands/scan.md +76 -0
- package/bundled/locales/zh-CN/skills/commands/sdd-retro.md +40 -0
- package/bundled/locales/zh-CN/skills/commands/sdd.md +379 -0
- package/bundled/locales/zh-CN/skills/commands/security.md +75 -0
- package/bundled/locales/zh-CN/skills/commands/tdd.md +111 -0
- package/bundled/locales/zh-CN/skills/commands/update.md +337 -0
- package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +1 -2
- package/bundled/locales/zh-CN/skills/database-assistant/SKILL.md +97 -0
- package/bundled/locales/zh-CN/skills/dev-workflow-guide/SKILL.md +145 -0
- package/bundled/locales/zh-CN/skills/durable-execution-assistant/SKILL.md +84 -0
- package/bundled/locales/zh-CN/skills/incident-response-assistant/SKILL.md +107 -0
- package/bundled/locales/zh-CN/skills/metrics-dashboard-assistant/SKILL.md +67 -0
- package/bundled/locales/zh-CN/skills/migration-assistant/SKILL.md +77 -0
- package/bundled/locales/zh-CN/skills/pr-automation-assistant/SKILL.md +90 -0
- package/bundled/locales/zh-CN/skills/security-assistant/SKILL.md +79 -0
- package/bundled/locales/zh-CN/skills/security-scan-assistant/SKILL.md +72 -0
- package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +73 -10
- package/bundled/locales/zh-CN/skills/spec-driven-dev/guide.md +267 -122
- package/bundled/locales/zh-TW/CLAUDE.md +2 -2
- package/bundled/locales/zh-TW/README.md +4 -4
- package/bundled/locales/zh-TW/SECURITY.md +92 -0
- package/bundled/locales/zh-TW/core/acceptance-criteria-traceability.md +301 -0
- package/bundled/locales/zh-TW/core/acceptance-test-driven-development.md +47 -0
- package/bundled/locales/zh-TW/core/accessibility-standards.md +84 -0
- package/bundled/locales/zh-TW/core/agent-dispatch.md +89 -0
- package/bundled/locales/zh-TW/core/ai-agreement-standards.md +87 -0
- package/bundled/locales/zh-TW/core/ai-command-behavior.md +247 -0
- package/bundled/locales/zh-TW/core/api-design-standards.md +946 -0
- package/bundled/locales/zh-TW/core/behavior-driven-development.md +63 -0
- package/bundled/locales/zh-TW/core/branch-completion.md +76 -0
- package/bundled/locales/zh-TW/core/change-batching-standards.md +265 -0
- package/bundled/locales/zh-TW/core/checkin-standards.md +39 -5
- package/bundled/locales/zh-TW/core/context-aware-loading.md +86 -0
- package/bundled/locales/zh-TW/core/database-standards.md +836 -0
- package/bundled/locales/zh-TW/core/deployment-standards.md +66 -0
- package/bundled/locales/zh-TW/core/error-code-standards.md +230 -4
- package/bundled/locales/zh-TW/core/forward-derivation-standards.md +62 -2
- package/bundled/locales/zh-TW/core/git-worktree.md +104 -0
- package/bundled/locales/zh-TW/core/model-selection.md +83 -0
- package/bundled/locales/zh-TW/core/performance-standards.md +84 -0
- package/bundled/locales/zh-TW/core/pipeline-integration-standards.md +238 -0
- package/bundled/locales/zh-TW/core/project-context-memory.md +79 -0
- package/bundled/locales/zh-TW/core/requirement-engineering.md +79 -0
- package/bundled/locales/zh-TW/core/security-standards.md +74 -0
- package/bundled/locales/zh-TW/core/systematic-debugging.md +95 -0
- package/bundled/locales/zh-TW/core/test-governance.md +88 -0
- package/bundled/locales/zh-TW/core/testing-standards.md +309 -86
- package/bundled/locales/zh-TW/core/verification-evidence.md +94 -0
- package/bundled/locales/zh-TW/core/virtual-organization-standards.md +88 -0
- package/bundled/locales/zh-TW/core/workflow-enforcement.md +132 -0
- package/bundled/locales/zh-TW/docs/CHEATSHEET.md +27 -1
- package/bundled/locales/zh-TW/docs/CLI-INIT-OPTIONS.md +9 -1
- package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +37 -9
- package/bundled/locales/zh-TW/docs/USER-MANUAL.md +652 -0
- package/bundled/locales/zh-TW/integrations/github-copilot/copilot-instructions.md +1 -1
- package/bundled/locales/zh-TW/integrations/openspec/AGENTS.md +29 -4
- package/bundled/locales/zh-TW/integrations/spec-kit/AGENTS.md +142 -71
- package/bundled/locales/zh-TW/skills/ac-coverage-assistant/SKILL.md +127 -0
- package/bundled/locales/zh-TW/skills/ai-friendly-architecture/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/api-design-assistant/SKILL.md +97 -0
- package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/audit-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/brainstorm-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/changelog-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/checkin-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/ci-cd-assistant/SKILL.md +79 -0
- package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/commands/ac-coverage.md +95 -0
- package/bundled/locales/zh-TW/skills/commands/api-design.md +92 -0
- package/bundled/locales/zh-TW/skills/commands/atdd.md +167 -0
- package/bundled/locales/zh-TW/skills/commands/audit.md +75 -0
- package/bundled/locales/zh-TW/skills/commands/bdd.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/brainstorm.md +91 -0
- package/bundled/locales/zh-TW/skills/commands/changelog.md +67 -0
- package/bundled/locales/zh-TW/skills/commands/check.md +223 -0
- package/bundled/locales/zh-TW/skills/commands/checkin.md +65 -0
- package/bundled/locales/zh-TW/skills/commands/ci-cd.md +75 -0
- package/bundled/locales/zh-TW/skills/commands/commit.md +85 -0
- package/bundled/locales/zh-TW/skills/commands/config.md +211 -0
- package/bundled/locales/zh-TW/skills/commands/coverage.md +78 -0
- package/bundled/locales/zh-TW/skills/commands/database.md +76 -0
- package/bundled/locales/zh-TW/skills/commands/derive-all.md +62 -0
- package/bundled/locales/zh-TW/skills/commands/derive-atdd.md +58 -0
- package/bundled/locales/zh-TW/skills/commands/derive-bdd.md +54 -0
- package/bundled/locales/zh-TW/skills/commands/derive-tdd.md +55 -0
- package/bundled/locales/zh-TW/skills/commands/derive.md +79 -0
- package/bundled/locales/zh-TW/skills/commands/dev-workflow.md +120 -0
- package/bundled/locales/zh-TW/skills/commands/discover.md +87 -0
- package/bundled/locales/zh-TW/skills/commands/docgen.md +68 -0
- package/bundled/locales/zh-TW/skills/commands/docs.md +66 -0
- package/bundled/locales/zh-TW/skills/commands/durable.md +85 -0
- package/bundled/locales/zh-TW/skills/commands/guide.md +51 -0
- package/bundled/locales/zh-TW/skills/commands/incident.md +90 -0
- package/bundled/locales/zh-TW/skills/commands/init.md +273 -0
- package/bundled/locales/zh-TW/skills/commands/methodology.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/metrics.md +71 -0
- package/bundled/locales/zh-TW/skills/commands/migrate.md +90 -0
- package/bundled/locales/zh-TW/skills/commands/pr.md +78 -0
- package/bundled/locales/zh-TW/skills/commands/refactor.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/release.md +63 -0
- package/bundled/locales/zh-TW/skills/commands/requirement.md +61 -0
- package/bundled/locales/zh-TW/skills/commands/reverse-bdd.md +54 -0
- package/bundled/locales/zh-TW/skills/commands/reverse-sdd.md +58 -0
- package/bundled/locales/zh-TW/skills/commands/reverse-tdd.md +58 -0
- package/bundled/locales/zh-TW/skills/commands/reverse.md +70 -0
- package/bundled/locales/zh-TW/skills/commands/review.md +57 -0
- package/bundled/locales/zh-TW/skills/commands/scan.md +74 -0
- package/bundled/locales/zh-TW/skills/commands/sdd-retro.md +47 -0
- package/bundled/locales/zh-TW/skills/commands/sdd.md +362 -0
- package/bundled/locales/zh-TW/skills/commands/security.md +73 -0
- package/bundled/locales/zh-TW/skills/commands/tdd.md +115 -0
- package/bundled/locales/zh-TW/skills/commands/update.md +326 -0
- package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +2 -6
- package/bundled/locales/zh-TW/skills/database-assistant/SKILL.md +94 -0
- package/bundled/locales/zh-TW/skills/dev-workflow-guide/SKILL.md +140 -0
- package/bundled/locales/zh-TW/skills/docs-generator/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/documentation-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/durable-execution-assistant/SKILL.md +81 -0
- package/bundled/locales/zh-TW/skills/error-code-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/forward-derivation/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/git-workflow-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/incident-response-assistant/SKILL.md +104 -0
- package/bundled/locales/zh-TW/skills/logging-guide/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/methodology-system/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/metrics-dashboard-assistant/SKILL.md +64 -0
- package/bundled/locales/zh-TW/skills/migration-assistant/SKILL.md +74 -0
- package/bundled/locales/zh-TW/skills/pr-automation-assistant/SKILL.md +87 -0
- package/bundled/locales/zh-TW/skills/project-discovery/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/refactoring-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/release-standards/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/requirement-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/security-assistant/SKILL.md +76 -0
- package/bundled/locales/zh-TW/skills/security-scan-assistant/SKILL.md +69 -0
- package/bundled/locales/zh-TW/skills/spec-driven-dev/SKILL.md +74 -14
- package/bundled/locales/zh-TW/skills/spec-driven-dev/guide.md +243 -98
- package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/test-coverage-assistant/SKILL.md +1 -4
- package/bundled/locales/zh-TW/skills/testing-guide/SKILL.md +1 -5
- package/bundled/skills/README.md +11 -0
- package/bundled/skills/ac-coverage-assistant/SKILL.md +127 -0
- package/bundled/skills/ai-collaboration-standards/SKILL.md +10 -0
- package/bundled/skills/ai-friendly-architecture/SKILL.md +10 -0
- package/bundled/skills/ai-instruction-standards/SKILL.md +10 -0
- package/bundled/skills/api-design-assistant/SKILL.md +119 -0
- package/bundled/skills/atdd-assistant/SKILL.md +7 -0
- package/bundled/skills/bdd-assistant/SKILL.md +7 -0
- package/bundled/skills/brainstorm-assistant/SKILL.md +7 -0
- package/bundled/skills/checkin-assistant/SKILL.md +7 -0
- package/bundled/skills/ci-cd-assistant/SKILL.md +97 -0
- package/bundled/skills/code-review-assistant/SKILL.md +7 -0
- package/bundled/skills/commands/README.md +70 -0
- package/bundled/skills/commands/ac-coverage.md +135 -0
- package/bundled/skills/commands/api-design.md +86 -0
- package/bundled/skills/commands/atdd.md +69 -0
- package/bundled/skills/commands/audit.md +69 -0
- package/bundled/skills/commands/bdd.md +101 -0
- package/bundled/skills/commands/brainstorm.md +45 -0
- package/bundled/skills/commands/changelog.md +34 -0
- package/bundled/skills/commands/check.md +52 -1
- package/bundled/skills/commands/checkin.md +46 -0
- package/bundled/skills/commands/ci-cd.md +69 -0
- package/bundled/skills/commands/commit.md +79 -0
- package/bundled/skills/commands/config.md +48 -0
- package/bundled/skills/commands/coverage.md +53 -0
- package/bundled/skills/commands/database.md +70 -0
- package/bundled/skills/commands/derive-all.md +40 -0
- package/bundled/skills/commands/derive-atdd.md +33 -0
- package/bundled/skills/commands/derive-bdd.md +39 -0
- package/bundled/skills/commands/derive-tdd.md +40 -0
- package/bundled/skills/commands/derive.md +47 -0
- package/bundled/skills/commands/dev-workflow.md +104 -7
- package/bundled/skills/commands/discover.md +39 -0
- package/bundled/skills/commands/docgen.md +35 -0
- package/bundled/skills/commands/docs.md +40 -0
- package/bundled/skills/commands/durable.md +79 -0
- package/bundled/skills/commands/incident.md +84 -0
- package/bundled/skills/commands/init.md +55 -0
- package/bundled/skills/commands/methodology.md +72 -0
- package/bundled/skills/commands/metrics.md +65 -0
- package/bundled/skills/commands/migrate.md +84 -0
- package/bundled/skills/commands/pr.md +72 -0
- package/bundled/skills/commands/refactor.md +51 -0
- package/bundled/skills/commands/release.md +60 -0
- package/bundled/skills/commands/requirement.md +38 -0
- package/bundled/skills/commands/reverse-bdd.md +34 -0
- package/bundled/skills/commands/reverse-sdd.md +42 -0
- package/bundled/skills/commands/reverse-tdd.md +40 -0
- package/bundled/skills/commands/reverse.md +41 -0
- package/bundled/skills/commands/review.md +39 -0
- package/bundled/skills/commands/scan.md +68 -0
- package/bundled/skills/commands/sdd-retro.md +48 -0
- package/bundled/skills/commands/sdd.md +220 -0
- package/bundled/skills/commands/security.md +67 -0
- package/bundled/skills/commands/tdd.md +101 -0
- package/bundled/skills/commands/update.md +61 -0
- package/bundled/skills/commit-standards/SKILL.md +8 -2
- package/bundled/skills/database-assistant/SKILL.md +118 -0
- package/bundled/skills/dev-workflow-guide/SKILL.md +53 -7
- package/bundled/skills/dev-workflow-guide/workflow-phases.md +24 -0
- package/bundled/skills/durable-execution-assistant/SKILL.md +116 -0
- package/bundled/skills/forward-derivation/SKILL.md +7 -0
- package/bundled/skills/incident-response-assistant/SKILL.md +132 -0
- package/bundled/skills/methodology-system/SKILL.md +24 -2
- package/bundled/skills/metrics-dashboard-assistant/SKILL.md +109 -0
- package/bundled/skills/migration-assistant/SKILL.md +119 -0
- package/bundled/skills/pr-automation-assistant/SKILL.md +114 -0
- package/bundled/skills/project-discovery/SKILL.md +7 -0
- package/bundled/skills/refactoring-assistant/SKILL.md +7 -0
- package/bundled/skills/release-standards/SKILL.md +7 -0
- package/bundled/skills/requirement-assistant/SKILL.md +7 -0
- package/bundled/skills/reverse-engineer/SKILL.md +7 -0
- package/bundled/skills/security-assistant/SKILL.md +105 -0
- package/bundled/skills/security-scan-assistant/SKILL.md +96 -0
- package/bundled/skills/spec-driven-dev/SKILL.md +84 -4
- package/bundled/skills/spec-driven-dev/guide.md +156 -22
- package/bundled/skills/tdd-assistant/SKILL.md +7 -0
- package/bundled/skills/test-coverage-assistant/SKILL.md +11 -0
- package/bundled/skills/testing-guide/SKILL.md +23 -0
- package/package.json +1 -1
- package/src/commands/check.js +154 -8
- package/src/commands/config.js +231 -104
- package/src/commands/init.js +23 -3
- package/src/commands/update.js +239 -23
- package/src/config/ai-agent-paths.js +16 -0
- package/src/config/workflow-definitions.js +184 -0
- package/src/core/constants.js +6 -0
- package/src/flows/init-flow.js +23 -6
- package/src/i18n/messages.js +51 -3
- package/src/installers/integration-installer.js +67 -2
- package/src/installers/manifest-installer.js +1 -0
- package/src/installers/standards-installer.js +3 -2
- package/src/prompts/init.js +50 -3
- package/src/reconciler/manifest-migrator.js +2 -2
- package/src/reconciler/plan-executor.js +11 -0
- package/src/utils/integration-generator.js +327 -14
- package/src/utils/workflow-gate.js +292 -0
- package/standards-registry.json +160 -5
package/src/commands/update.js
CHANGED
|
@@ -9,7 +9,8 @@ import { getRepositoryInfo, getAllStandards, getStandardSource } from '../utils/
|
|
|
9
9
|
import { computeFileHash, scanForUntrackedFiles, refreshIntegrationBlockHashes } from '../utils/hasher.js';
|
|
10
10
|
import {
|
|
11
11
|
writeIntegrationFile,
|
|
12
|
-
getToolFilePath
|
|
12
|
+
getToolFilePath,
|
|
13
|
+
writeAgentsMdSummary
|
|
13
14
|
} from '../utils/integration-generator.js';
|
|
14
15
|
import {
|
|
15
16
|
calculateCategoriesFromStandards,
|
|
@@ -45,6 +46,7 @@ import {
|
|
|
45
46
|
formatPlan,
|
|
46
47
|
listBackups
|
|
47
48
|
} from '../reconciler/index.js';
|
|
49
|
+
import { restoreSingleFile } from './check.js';
|
|
48
50
|
|
|
49
51
|
/**
|
|
50
52
|
* Determine the correct target directory for a standard file.
|
|
@@ -55,6 +57,24 @@ function getStandardTargetDir(sourcePath) {
|
|
|
55
57
|
return sourcePath.includes('options/') ? '.standards/options' : '.standards';
|
|
56
58
|
}
|
|
57
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Clean up stale commandHashes entries before merging new ones.
|
|
62
|
+
* Removes old entries for agents that are being updated.
|
|
63
|
+
*/
|
|
64
|
+
function replaceCommandHashesForUpdatedAgents(commandHashes, newHashes) {
|
|
65
|
+
const updatedPrefixes = new Set(
|
|
66
|
+
Object.keys(newHashes).map(k => k.split('/')[0])
|
|
67
|
+
);
|
|
68
|
+
for (const prefix of updatedPrefixes) {
|
|
69
|
+
for (const key of Object.keys(commandHashes)) {
|
|
70
|
+
if (key.startsWith(prefix + '/')) {
|
|
71
|
+
delete commandHashes[key];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
Object.assign(commandHashes, newHashes);
|
|
76
|
+
}
|
|
77
|
+
|
|
58
78
|
/**
|
|
59
79
|
* Compare two semantic versions
|
|
60
80
|
* @param {string} v1 - First version (e.g., "3.4.0-beta.3")
|
|
@@ -340,11 +360,15 @@ export async function updateCommand(options) {
|
|
|
340
360
|
// List files to update
|
|
341
361
|
console.log(chalk.gray(msg.filesToUpdate));
|
|
342
362
|
for (const std of manifest.standards) {
|
|
343
|
-
|
|
363
|
+
const fileName = std.split('/').pop();
|
|
364
|
+
const displayPath = getStandardTargetDir(std) + '/' + fileName;
|
|
365
|
+
console.log(chalk.gray(` ${displayPath}`));
|
|
344
366
|
}
|
|
345
367
|
for (const ext of manifest.extensions) {
|
|
346
368
|
if (typeof ext !== 'string') continue;
|
|
347
|
-
|
|
369
|
+
const fileName = ext.split('/').pop();
|
|
370
|
+
const displayPath = getStandardTargetDir(ext) + '/' + fileName;
|
|
371
|
+
console.log(chalk.gray(` ${displayPath}`));
|
|
348
372
|
}
|
|
349
373
|
if (!options.standardsOnly) {
|
|
350
374
|
for (const int of manifest.integrations) {
|
|
@@ -504,6 +528,27 @@ export async function updateCommand(options) {
|
|
|
504
528
|
}
|
|
505
529
|
}
|
|
506
530
|
|
|
531
|
+
// Update universal AGENTS.md if enabled and not already generated by tool integration
|
|
532
|
+
if (manifest.generateAgentsMd && !generatedFiles.has('AGENTS.md')) {
|
|
533
|
+
const summaryConfig = {
|
|
534
|
+
installedStandards: installedStandardsList,
|
|
535
|
+
language: manifest.options?.display_language || 'en',
|
|
536
|
+
commitLanguage: manifest.options?.commit_language || 'english',
|
|
537
|
+
standardOptions: manifest.options || {}
|
|
538
|
+
};
|
|
539
|
+
const agentsMdResult = writeAgentsMdSummary(summaryConfig, projectPath);
|
|
540
|
+
if (agentsMdResult.success) {
|
|
541
|
+
results.integrations.push(agentsMdResult.path);
|
|
542
|
+
if (agentsMdResult.blockHashInfo) {
|
|
543
|
+
if (!manifest.integrationBlockHashes) manifest.integrationBlockHashes = {};
|
|
544
|
+
manifest.integrationBlockHashes[agentsMdResult.path] = {
|
|
545
|
+
...agentsMdResult.blockHashInfo,
|
|
546
|
+
installedAt: new Date().toISOString()
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
|
|
507
552
|
intSpinner.succeed(msg.syncedIntegrations.replace('{count}', results.integrations.length));
|
|
508
553
|
}
|
|
509
554
|
|
|
@@ -516,9 +561,9 @@ export async function updateCommand(options) {
|
|
|
516
561
|
// Update hashes for standards
|
|
517
562
|
for (const std of manifest.standards) {
|
|
518
563
|
const fileName = basename(std);
|
|
519
|
-
const relativePath = std.includes('options/')
|
|
564
|
+
const relativePath = (std.includes('options/')
|
|
520
565
|
? join('.standards', 'options', fileName)
|
|
521
|
-
: join('.standards', fileName);
|
|
566
|
+
: join('.standards', fileName)).replace(/\\/g, '/');
|
|
522
567
|
const fullPath = join(projectPath, relativePath);
|
|
523
568
|
const hashInfo = computeFileHash(fullPath);
|
|
524
569
|
if (hashInfo) {
|
|
@@ -530,7 +575,7 @@ export async function updateCommand(options) {
|
|
|
530
575
|
for (const ext of manifest.extensions) {
|
|
531
576
|
if (typeof ext !== 'string') continue;
|
|
532
577
|
const fileName = basename(ext);
|
|
533
|
-
const relativePath = join('.standards', fileName);
|
|
578
|
+
const relativePath = join('.standards', fileName).replace(/\\/g, '/');
|
|
534
579
|
const fullPath = join(projectPath, relativePath);
|
|
535
580
|
const hashInfo = computeFileHash(fullPath);
|
|
536
581
|
if (hashInfo) {
|
|
@@ -562,6 +607,27 @@ export async function updateCommand(options) {
|
|
|
562
607
|
}
|
|
563
608
|
}
|
|
564
609
|
|
|
610
|
+
// Migrate test_levels: upgrade old 2-level default to full 4-level default
|
|
611
|
+
// Only for projects installed before v5.0.0 stable (pre-5.0 used 2-level default)
|
|
612
|
+
// 5.0.0-alpha/beta/rc are also < 5.0.0 in semver, so they get migrated too
|
|
613
|
+
const installedVersion = currentVersion || '0.0.0';
|
|
614
|
+
const isPreV5 = compareVersions(installedVersion, '5.0.0') < 0;
|
|
615
|
+
if (isPreV5) {
|
|
616
|
+
const ALL_TEST_LEVELS = ['unit-testing', 'integration-testing', 'system-testing', 'e2e-testing'];
|
|
617
|
+
const currentLevels = manifest.options?.test_levels || [];
|
|
618
|
+
const isOldDefault = currentLevels.length === 2 &&
|
|
619
|
+
currentLevels.includes('unit-testing') &&
|
|
620
|
+
currentLevels.includes('integration-testing') &&
|
|
621
|
+
!currentLevels.includes('system-testing') &&
|
|
622
|
+
!currentLevels.includes('e2e-testing');
|
|
623
|
+
if (isOldDefault) {
|
|
624
|
+
manifest.options = manifest.options || {};
|
|
625
|
+
manifest.options.test_levels = ALL_TEST_LEVELS;
|
|
626
|
+
console.log();
|
|
627
|
+
console.log(chalk.cyan(msg.testLevelsMigrated || 'ℹ Test levels updated: 2 → 4 (added system-testing, e2e-testing)'));
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
|
|
565
631
|
// Update manifest
|
|
566
632
|
manifest.version = '3.3.0';
|
|
567
633
|
manifest.upstream.version = latestVersion;
|
|
@@ -569,6 +635,74 @@ export async function updateCommand(options) {
|
|
|
569
635
|
refreshIntegrationBlockHashes(manifest, projectPath);
|
|
570
636
|
writeManifest(manifest, projectPath);
|
|
571
637
|
|
|
638
|
+
// Post-update integrity check: detect and restore missing files
|
|
639
|
+
const allTrackedFiles = [];
|
|
640
|
+
for (const std of manifest.standards) {
|
|
641
|
+
const fileName = basename(std);
|
|
642
|
+
const relativePath = std.includes('options/')
|
|
643
|
+
? join('.standards', 'options', fileName)
|
|
644
|
+
: join('.standards', fileName);
|
|
645
|
+
allTrackedFiles.push(relativePath);
|
|
646
|
+
}
|
|
647
|
+
for (const ext of manifest.extensions) {
|
|
648
|
+
if (typeof ext !== 'string') continue;
|
|
649
|
+
const fileName = basename(ext);
|
|
650
|
+
allTrackedFiles.push(join('.standards', fileName));
|
|
651
|
+
}
|
|
652
|
+
for (const int of (manifest.integrations || [])) {
|
|
653
|
+
allTrackedFiles.push(int);
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
const missingFiles = allTrackedFiles.filter(f => !existsSync(join(projectPath, f)));
|
|
657
|
+
|
|
658
|
+
if (missingFiles.length > 0) {
|
|
659
|
+
console.log();
|
|
660
|
+
console.log(chalk.yellow((msg.missingAfterUpdate || '⚠ {count} file(s) still missing after update').replace('{count}', missingFiles.length)));
|
|
661
|
+
|
|
662
|
+
let shouldRestore = false;
|
|
663
|
+
if (options.yes) {
|
|
664
|
+
shouldRestore = true;
|
|
665
|
+
} else {
|
|
666
|
+
const { restoreMissing } = await inquirer.prompt([
|
|
667
|
+
{
|
|
668
|
+
type: 'confirm',
|
|
669
|
+
name: 'restoreMissing',
|
|
670
|
+
message: (msg.restoreMissingPrompt || 'Restore {count} missing file(s)?').replace('{count}', missingFiles.length),
|
|
671
|
+
default: true
|
|
672
|
+
}
|
|
673
|
+
]);
|
|
674
|
+
shouldRestore = restoreMissing;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
if (shouldRestore) {
|
|
678
|
+
const restoreSpinner = ora((msg.restoringMissing || 'Restoring missing files...')).start();
|
|
679
|
+
const checkMsg = t().commands.check;
|
|
680
|
+
let restoredCount = 0;
|
|
681
|
+
|
|
682
|
+
for (const relativePath of missingFiles) {
|
|
683
|
+
const success = await restoreSingleFile(projectPath, manifest, relativePath, checkMsg);
|
|
684
|
+
if (success) restoredCount++;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
restoreSpinner.succeed(
|
|
688
|
+
(msg.restoredCount || 'Restored {restored}/{total} file(s)')
|
|
689
|
+
.replace('{restored}', restoredCount)
|
|
690
|
+
.replace('{total}', missingFiles.length)
|
|
691
|
+
);
|
|
692
|
+
|
|
693
|
+
// Re-write manifest with updated hashes from restored files
|
|
694
|
+
writeManifest(manifest, projectPath);
|
|
695
|
+
|
|
696
|
+
// Re-generate integration files if files were restored and AI tools are configured
|
|
697
|
+
// This ensures CLAUDE.md / AGENTS.md standards index reflects restored files
|
|
698
|
+
if (restoredCount > 0 && manifest.aiTools?.length > 0) {
|
|
699
|
+
regenerateIntegrations(projectPath, manifest);
|
|
700
|
+
refreshIntegrationBlockHashes(manifest, projectPath);
|
|
701
|
+
writeManifest(manifest, projectPath);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
572
706
|
// Summary
|
|
573
707
|
console.log();
|
|
574
708
|
console.log(chalk.green(msg.updateSuccess));
|
|
@@ -615,6 +749,17 @@ export async function updateCommand(options) {
|
|
|
615
749
|
...installSkills
|
|
616
750
|
];
|
|
617
751
|
|
|
752
|
+
// Derive location from installations if not set
|
|
753
|
+
if (!manifest.skills.location) {
|
|
754
|
+
const levels = manifest.skills.installations.map(s => s.level).filter(Boolean);
|
|
755
|
+
const uniqueLevels = [...new Set(levels)];
|
|
756
|
+
if (uniqueLevels.length === 1) {
|
|
757
|
+
manifest.skills.location = uniqueLevels[0];
|
|
758
|
+
} else if (uniqueLevels.length > 1) {
|
|
759
|
+
manifest.skills.location = 'multiple';
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
|
|
618
763
|
// Update skill hashes for integrity tracking
|
|
619
764
|
if (skillResult.allFileHashes) {
|
|
620
765
|
if (!manifest.skillHashes) manifest.skillHashes = {};
|
|
@@ -640,6 +785,17 @@ export async function updateCommand(options) {
|
|
|
640
785
|
if (!manifest.skills) manifest.skills = {};
|
|
641
786
|
manifest.skills.version = repoInfo.skills.version;
|
|
642
787
|
|
|
788
|
+
// Derive location from installations if not set
|
|
789
|
+
if (!manifest.skills.location && manifest.skills.installations?.length > 0) {
|
|
790
|
+
const levels = manifest.skills.installations.map(s => s.level).filter(Boolean);
|
|
791
|
+
const uniqueLevels = [...new Set(levels)];
|
|
792
|
+
if (uniqueLevels.length === 1) {
|
|
793
|
+
manifest.skills.location = uniqueLevels[0];
|
|
794
|
+
} else if (uniqueLevels.length > 1) {
|
|
795
|
+
manifest.skills.location = 'multiple';
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
|
|
643
799
|
// Update skill hashes for integrity tracking
|
|
644
800
|
if (updateResult.allFileHashes) {
|
|
645
801
|
if (!manifest.skillHashes) manifest.skillHashes = {};
|
|
@@ -673,7 +829,7 @@ export async function updateCommand(options) {
|
|
|
673
829
|
// Update command hashes for integrity tracking
|
|
674
830
|
if (cmdResult.allFileHashes) {
|
|
675
831
|
if (!manifest.commandHashes) manifest.commandHashes = {};
|
|
676
|
-
|
|
832
|
+
replaceCommandHashesForUpdatedAgents(manifest.commandHashes, cmdResult.allFileHashes);
|
|
677
833
|
}
|
|
678
834
|
|
|
679
835
|
if (cmdResult.totalErrors === 0) {
|
|
@@ -698,7 +854,7 @@ export async function updateCommand(options) {
|
|
|
698
854
|
// Update command hashes for integrity tracking
|
|
699
855
|
if (updateCmdResult.allFileHashes) {
|
|
700
856
|
if (!manifest.commandHashes) manifest.commandHashes = {};
|
|
701
|
-
|
|
857
|
+
replaceCommandHashesForUpdatedAgents(manifest.commandHashes, updateCmdResult.allFileHashes);
|
|
702
858
|
}
|
|
703
859
|
|
|
704
860
|
if (updateCmdResult.totalErrors === 0) {
|
|
@@ -744,6 +900,15 @@ export async function updateCommand(options) {
|
|
|
744
900
|
installCommands.length > 0 || updateCommands.length > 0 ||
|
|
745
901
|
declinedSkills.length > 0 || declinedCommands.length > 0;
|
|
746
902
|
if (hasChanges) {
|
|
903
|
+
// Re-run integration update if new skills were installed
|
|
904
|
+
// This ensures CLAUDE.md / AGENTS.md standards index is up-to-date
|
|
905
|
+
if (installSkills.length > 0 || updateSkills.length > 0) {
|
|
906
|
+
const regenResult = regenerateIntegrations(projectPath, manifest);
|
|
907
|
+
if (regenResult.updated.length > 0) {
|
|
908
|
+
console.log(chalk.green(` ✓ ${msg.syncedIntegrations.replace('{count}', regenResult.updated.length)}`));
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
|
|
747
912
|
refreshIntegrationBlockHashes(manifest, projectPath);
|
|
748
913
|
writeManifest(manifest, projectPath);
|
|
749
914
|
}
|
|
@@ -804,8 +969,34 @@ export async function updateCommand(options) {
|
|
|
804
969
|
console.log(chalk.gray(` ${msg.skillsLatest}: ${skillsVersion}`));
|
|
805
970
|
console.log();
|
|
806
971
|
|
|
807
|
-
//
|
|
808
|
-
|
|
972
|
+
// Determine installation location using multiple sources
|
|
973
|
+
let location = manifest.skills.location;
|
|
974
|
+
|
|
975
|
+
// Derive from installations array if location not set
|
|
976
|
+
if (!location && manifest.skills.installations?.length > 0) {
|
|
977
|
+
const hasMarketplace = manifest.skills.installations.some(
|
|
978
|
+
inst => inst.level === 'marketplace' || inst.agent === 'marketplace'
|
|
979
|
+
);
|
|
980
|
+
if (hasMarketplace) {
|
|
981
|
+
location = 'marketplace';
|
|
982
|
+
} else {
|
|
983
|
+
const levels = manifest.skills.installations.map(inst => inst.level).filter(Boolean);
|
|
984
|
+
const uniqueLevels = [...new Set(levels)];
|
|
985
|
+
location = uniqueLevels.length === 1 ? uniqueLevels[0] : (uniqueLevels.length > 1 ? 'project' : null);
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
// Fall back to file-system detection if still unknown
|
|
990
|
+
if (!location) {
|
|
991
|
+
for (const tool of (manifest.aiTools || [])) {
|
|
992
|
+
const projInfo = getInstalledSkillsInfoForAgent(tool, 'project', projectPath);
|
|
993
|
+
const usrInfo = getInstalledSkillsInfoForAgent(tool, 'user');
|
|
994
|
+
if (projInfo?.installed) { location = 'project'; break; }
|
|
995
|
+
if (usrInfo?.installed) { location = 'user'; break; }
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
location = location || 'unknown';
|
|
809
1000
|
|
|
810
1001
|
if (location === 'marketplace') {
|
|
811
1002
|
console.log(chalk.gray(` ${msg.updateViaMarketplace}`));
|
|
@@ -900,13 +1091,15 @@ export function regenerateIntegrations(projectPath, manifest) {
|
|
|
900
1091
|
if (!manifest.fileHashes) {
|
|
901
1092
|
manifest.fileHashes = {};
|
|
902
1093
|
}
|
|
903
|
-
|
|
1094
|
+
const normalizedPath = result.path.replace(/\\/g, '/');
|
|
1095
|
+
manifest.fileHashes[normalizedPath] = { ...hashInfo, installedAt: now };
|
|
904
1096
|
}
|
|
905
1097
|
|
|
906
1098
|
// Track integration block hash for UDS content integrity
|
|
907
1099
|
if (result.blockHashInfo) {
|
|
908
1100
|
if (!manifest.integrationBlockHashes) manifest.integrationBlockHashes = {};
|
|
909
|
-
|
|
1101
|
+
const normalizedBlockPath = result.path.replace(/\\/g, '/');
|
|
1102
|
+
manifest.integrationBlockHashes[normalizedBlockPath] = {
|
|
910
1103
|
...result.blockHashInfo,
|
|
911
1104
|
installedAt: now
|
|
912
1105
|
};
|
|
@@ -916,6 +1109,27 @@ export function regenerateIntegrations(projectPath, manifest) {
|
|
|
916
1109
|
}
|
|
917
1110
|
}
|
|
918
1111
|
|
|
1112
|
+
// Regenerate universal AGENTS.md if enabled and not already covered
|
|
1113
|
+
if (manifest.generateAgentsMd && !generatedFiles.has('AGENTS.md')) {
|
|
1114
|
+
const summaryConfig = {
|
|
1115
|
+
installedStandards: installedStandardsList,
|
|
1116
|
+
language: manifest.options?.display_language || 'en',
|
|
1117
|
+
commitLanguage: manifest.options?.commit_language || 'english',
|
|
1118
|
+
standardOptions: manifest.options || {}
|
|
1119
|
+
};
|
|
1120
|
+
const agentsMdResult = writeAgentsMdSummary(summaryConfig, projectPath);
|
|
1121
|
+
if (agentsMdResult.success) {
|
|
1122
|
+
results.updated.push(agentsMdResult.path);
|
|
1123
|
+
if (agentsMdResult.blockHashInfo) {
|
|
1124
|
+
if (!manifest.integrationBlockHashes) manifest.integrationBlockHashes = {};
|
|
1125
|
+
manifest.integrationBlockHashes[agentsMdResult.path] = {
|
|
1126
|
+
...agentsMdResult.blockHashInfo,
|
|
1127
|
+
installedAt: now
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
|
|
919
1133
|
return {
|
|
920
1134
|
success: results.errors.length === 0,
|
|
921
1135
|
updated: results.updated,
|
|
@@ -1061,13 +1275,15 @@ async function syncIntegrationReferences(projectPath, manifest) {
|
|
|
1061
1275
|
if (!manifest.fileHashes) {
|
|
1062
1276
|
manifest.fileHashes = {};
|
|
1063
1277
|
}
|
|
1064
|
-
|
|
1278
|
+
const normalizedIntPath = integrationPath.replace(/\\/g, '/');
|
|
1279
|
+
manifest.fileHashes[normalizedIntPath] = { ...hashInfo, installedAt: now };
|
|
1065
1280
|
}
|
|
1066
1281
|
|
|
1067
1282
|
// Track integration block hash for UDS content integrity
|
|
1068
1283
|
if (result.blockHashInfo) {
|
|
1069
1284
|
if (!manifest.integrationBlockHashes) manifest.integrationBlockHashes = {};
|
|
1070
|
-
|
|
1285
|
+
const normalizedIntBlockPath = integrationPath.replace(/\\/g, '/');
|
|
1286
|
+
manifest.integrationBlockHashes[normalizedIntBlockPath] = {
|
|
1071
1287
|
...result.blockHashInfo,
|
|
1072
1288
|
installedAt: now
|
|
1073
1289
|
};
|
|
@@ -1310,7 +1526,7 @@ async function updateCommandsOnly(projectPath, manifest) {
|
|
|
1310
1526
|
// Update command hashes for integrity tracking
|
|
1311
1527
|
if (result.allFileHashes) {
|
|
1312
1528
|
if (!manifest.commandHashes) manifest.commandHashes = {};
|
|
1313
|
-
|
|
1529
|
+
replaceCommandHashesForUpdatedAgents(manifest.commandHashes, result.allFileHashes);
|
|
1314
1530
|
}
|
|
1315
1531
|
|
|
1316
1532
|
writeManifest(manifest, projectPath);
|
|
@@ -1419,16 +1635,16 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion, debug = fa
|
|
|
1419
1635
|
const installedInfo = userInfo || projectInfo;
|
|
1420
1636
|
const installedVersion = installedInfo?.version;
|
|
1421
1637
|
|
|
1422
|
-
// Skip marketplace (auto-updates)
|
|
1423
|
-
if (!usingMarketplace && installedVersion
|
|
1638
|
+
// Skip marketplace (auto-updates); treat unknown versions as outdated
|
|
1639
|
+
if (!usingMarketplace && (!installedVersion || installedVersion !== latestSkillsVersion)) {
|
|
1424
1640
|
if (debug) {
|
|
1425
|
-
console.log(chalk.yellow(` ✓ Added to outdatedSkills (${installedVersion} → ${latestSkillsVersion})`));
|
|
1641
|
+
console.log(chalk.yellow(` ✓ Added to outdatedSkills (${installedVersion || 'unknown'} → ${latestSkillsVersion})`));
|
|
1426
1642
|
}
|
|
1427
1643
|
outdatedSkills.push({
|
|
1428
1644
|
agent: tool,
|
|
1429
1645
|
displayName: getAgentDisplayName(tool),
|
|
1430
1646
|
paths: config.skills,
|
|
1431
|
-
currentVersion: installedVersion,
|
|
1647
|
+
currentVersion: installedVersion || 'unknown',
|
|
1432
1648
|
latestVersion: latestSkillsVersion,
|
|
1433
1649
|
level: userInfo?.installed ? 'user' : 'project',
|
|
1434
1650
|
path: installedInfo?.path
|
|
@@ -1483,16 +1699,16 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion, debug = fa
|
|
|
1483
1699
|
console.log(chalk.gray(` latestSkillsVersion: ${latestSkillsVersion}`));
|
|
1484
1700
|
}
|
|
1485
1701
|
|
|
1486
|
-
// Check if version differs from latest
|
|
1487
|
-
if (installedCmdVersion
|
|
1702
|
+
// Check if version differs from latest; treat unknown versions as outdated
|
|
1703
|
+
if (!installedCmdVersion || installedCmdVersion !== latestSkillsVersion) {
|
|
1488
1704
|
if (debug) {
|
|
1489
|
-
console.log(chalk.yellow(` ✓ Added to outdatedCommands (${installedCmdVersion} → ${latestSkillsVersion})`));
|
|
1705
|
+
console.log(chalk.yellow(` ✓ Added to outdatedCommands (${installedCmdVersion || 'unknown'} → ${latestSkillsVersion})`));
|
|
1490
1706
|
}
|
|
1491
1707
|
outdatedCommands.push({
|
|
1492
1708
|
agent: tool,
|
|
1493
1709
|
displayName: getAgentDisplayName(tool),
|
|
1494
1710
|
paths: config.commands,
|
|
1495
|
-
currentVersion: installedCmdVersion,
|
|
1711
|
+
currentVersion: installedCmdVersion || 'unknown',
|
|
1496
1712
|
latestVersion: latestSkillsVersion,
|
|
1497
1713
|
level: userCmdInfo?.installed ? 'user' : 'project',
|
|
1498
1714
|
path: installedCmdInfo?.path
|
|
@@ -464,6 +464,7 @@ export const AVAILABLE_COMMANDS = [
|
|
|
464
464
|
{ name: 'bdd', description: 'Guide BDD workflow (Gherkin, Given-When-Then)' },
|
|
465
465
|
{ name: 'atdd', description: 'Guide ATDD workflow (acceptance criteria)' },
|
|
466
466
|
{ name: 'coverage', description: 'Analyze test coverage (8 dimensions)' },
|
|
467
|
+
{ name: 'ac-coverage', description: 'Generate AC traceability matrix and coverage report' },
|
|
467
468
|
|
|
468
469
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
469
470
|
// Specification and Requirements (Action Skills)
|
|
@@ -505,6 +506,21 @@ export const AVAILABLE_COMMANDS = [
|
|
|
505
506
|
{ name: 'methodology', description: 'Development methodology selection' },
|
|
506
507
|
{ name: 'dev-workflow', description: 'Guide for mapping development phases to UDS commands' },
|
|
507
508
|
|
|
509
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
510
|
+
// Operations and Infrastructure (Action Skills)
|
|
511
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
512
|
+
{ name: 'security', description: 'Security review and vulnerability assessment' },
|
|
513
|
+
{ name: 'scan', description: 'Automated security scanning and dependency audit' },
|
|
514
|
+
{ name: 'api-design', description: 'API design following REST, GraphQL, gRPC best practices' },
|
|
515
|
+
{ name: 'database', description: 'Database design, migration planning, and query optimization' },
|
|
516
|
+
{ name: 'ci-cd', description: 'CI/CD pipeline design, configuration, and optimization' },
|
|
517
|
+
{ name: 'incident', description: 'Incident response, root cause analysis, and post-mortem' },
|
|
518
|
+
{ name: 'pr', description: 'Pull request creation, review automation, and merge strategy' },
|
|
519
|
+
{ name: 'metrics', description: 'Development metrics, code quality indicators, and project health' },
|
|
520
|
+
{ name: 'durable', description: 'Workflow fault recovery with checkpoints, retries, and rollback' },
|
|
521
|
+
{ name: 'migrate', description: 'Code migration, framework upgrades, and tech modernization' },
|
|
522
|
+
{ name: 'audit', description: 'Audit standards compliance and generate reports' },
|
|
523
|
+
|
|
508
524
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
509
525
|
// CLI Management (Commands-only, UDS CLI specific)
|
|
510
526
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Phase Definitions
|
|
3
|
+
*
|
|
4
|
+
* Defines the phase graphs for each workflow type (SDD, TDD, BDD).
|
|
5
|
+
* Used by WorkflowGate to validate phase transitions.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* SDD workflow phase graph
|
|
12
|
+
* Each phase lists its allowed predecessors (phases that must have been completed)
|
|
13
|
+
*/
|
|
14
|
+
export const SDD_PHASES = {
|
|
15
|
+
discuss: {
|
|
16
|
+
id: 'discuss',
|
|
17
|
+
label: 'Discuss',
|
|
18
|
+
predecessors: [],
|
|
19
|
+
description: 'Capture gray areas, lock scope'
|
|
20
|
+
},
|
|
21
|
+
create: {
|
|
22
|
+
id: 'create',
|
|
23
|
+
label: 'Create',
|
|
24
|
+
predecessors: [], // discuss is recommended but not required
|
|
25
|
+
description: 'Write spec document'
|
|
26
|
+
},
|
|
27
|
+
review: {
|
|
28
|
+
id: 'review',
|
|
29
|
+
label: 'Review',
|
|
30
|
+
predecessors: ['create'],
|
|
31
|
+
description: 'Validate spec with stakeholders'
|
|
32
|
+
},
|
|
33
|
+
approve: {
|
|
34
|
+
id: 'approve',
|
|
35
|
+
label: 'Approve',
|
|
36
|
+
predecessors: ['review'],
|
|
37
|
+
description: 'Sign off on spec'
|
|
38
|
+
},
|
|
39
|
+
implement: {
|
|
40
|
+
id: 'implement',
|
|
41
|
+
label: 'Implement',
|
|
42
|
+
predecessors: ['approve'],
|
|
43
|
+
description: 'Code following approved spec'
|
|
44
|
+
},
|
|
45
|
+
verify: {
|
|
46
|
+
id: 'verify',
|
|
47
|
+
label: 'Verify',
|
|
48
|
+
predecessors: ['implement'],
|
|
49
|
+
description: 'Confirm implementation matches spec'
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* TDD workflow phase graph (cyclic)
|
|
55
|
+
*/
|
|
56
|
+
export const TDD_PHASES = {
|
|
57
|
+
red: {
|
|
58
|
+
id: 'red',
|
|
59
|
+
label: 'RED',
|
|
60
|
+
predecessors: [], // Entry point, or after refactor
|
|
61
|
+
description: 'Write failing test'
|
|
62
|
+
},
|
|
63
|
+
green: {
|
|
64
|
+
id: 'green',
|
|
65
|
+
label: 'GREEN',
|
|
66
|
+
predecessors: ['red'],
|
|
67
|
+
description: 'Write minimal code to pass'
|
|
68
|
+
},
|
|
69
|
+
refactor: {
|
|
70
|
+
id: 'refactor',
|
|
71
|
+
label: 'REFACTOR',
|
|
72
|
+
predecessors: ['green'],
|
|
73
|
+
description: 'Improve code, keep tests passing'
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* BDD workflow phase graph
|
|
79
|
+
*/
|
|
80
|
+
export const BDD_PHASES = {
|
|
81
|
+
discovery: {
|
|
82
|
+
id: 'discovery',
|
|
83
|
+
label: 'Discovery',
|
|
84
|
+
predecessors: [],
|
|
85
|
+
description: 'Explore behavior with stakeholders'
|
|
86
|
+
},
|
|
87
|
+
formulation: {
|
|
88
|
+
id: 'formulation',
|
|
89
|
+
label: 'Formulation',
|
|
90
|
+
predecessors: ['discovery'],
|
|
91
|
+
description: 'Write Gherkin scenarios'
|
|
92
|
+
},
|
|
93
|
+
automation: {
|
|
94
|
+
id: 'automation',
|
|
95
|
+
label: 'Automation',
|
|
96
|
+
predecessors: ['formulation'],
|
|
97
|
+
description: 'Implement step definitions'
|
|
98
|
+
},
|
|
99
|
+
living_docs: {
|
|
100
|
+
id: 'living_docs',
|
|
101
|
+
label: 'Living Docs',
|
|
102
|
+
predecessors: ['automation'],
|
|
103
|
+
description: 'Maintain as documentation'
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Phase prerequisite checks — machine-executable validation functions
|
|
109
|
+
* Each check returns { passed, message, guidance }
|
|
110
|
+
*/
|
|
111
|
+
export const PHASE_CHECKS = {
|
|
112
|
+
sdd: {
|
|
113
|
+
implement: [
|
|
114
|
+
{
|
|
115
|
+
id: 'spec_exists',
|
|
116
|
+
description: 'At least one spec file exists',
|
|
117
|
+
check: 'ls docs/specs/SPEC-*.md 2>/dev/null | head -1',
|
|
118
|
+
expectedCondition: 'non_empty',
|
|
119
|
+
guidance: 'No spec found. Run `/sdd create` to create one first.'
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: 'spec_approved',
|
|
123
|
+
description: 'Spec status is Approved',
|
|
124
|
+
check: 'grep -l "^status: Approved" docs/specs/SPEC-*.md 2>/dev/null | head -1',
|
|
125
|
+
expectedCondition: 'non_empty',
|
|
126
|
+
guidance: 'No approved spec found. Run `/sdd approve SPEC-XXX.md` first.'
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
verify: [
|
|
130
|
+
{
|
|
131
|
+
id: 'implementation_exists',
|
|
132
|
+
description: 'Implementation commits exist for the spec',
|
|
133
|
+
check: 'grep -l "^status: Implemented\\|^status: Approved" docs/specs/SPEC-*.md 2>/dev/null | head -1',
|
|
134
|
+
expectedCondition: 'non_empty',
|
|
135
|
+
guidance: 'No implementation found. Run `/sdd implement SPEC-XXX.md` first.'
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
tdd: {
|
|
140
|
+
green: [
|
|
141
|
+
{
|
|
142
|
+
id: 'failing_test_exists',
|
|
143
|
+
description: 'At least one failing test exists',
|
|
144
|
+
guidance: 'No failing test found. Write a test first (RED phase) before writing implementation code.'
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
refactor: [
|
|
148
|
+
{
|
|
149
|
+
id: 'all_tests_passing',
|
|
150
|
+
description: 'All tests must be passing',
|
|
151
|
+
guidance: 'Some tests are still failing. Fix them first (GREEN phase) before refactoring.'
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
},
|
|
155
|
+
bdd: {
|
|
156
|
+
formulation: [
|
|
157
|
+
{
|
|
158
|
+
id: 'examples_collected',
|
|
159
|
+
description: 'Concrete examples from discovery phase exist',
|
|
160
|
+
guidance: 'No examples collected yet. Complete the DISCOVERY phase first to gather concrete examples.'
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
automation: [
|
|
164
|
+
{
|
|
165
|
+
id: 'feature_file_exists',
|
|
166
|
+
description: 'At least one .feature file exists',
|
|
167
|
+
check: 'ls tests/features/*.feature 2>/dev/null | head -1',
|
|
168
|
+
expectedCondition: 'non_empty',
|
|
169
|
+
guidance: 'No .feature file found. Write Gherkin scenarios first (FORMULATION phase).'
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* All workflow definitions indexed by name
|
|
177
|
+
*/
|
|
178
|
+
export const WORKFLOW_DEFINITIONS = {
|
|
179
|
+
sdd: { phases: SDD_PHASES, checks: PHASE_CHECKS.sdd },
|
|
180
|
+
tdd: { phases: TDD_PHASES, checks: PHASE_CHECKS.tdd },
|
|
181
|
+
bdd: { phases: BDD_PHASES, checks: PHASE_CHECKS.bdd }
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
export default WORKFLOW_DEFINITIONS;
|
package/src/core/constants.js
CHANGED
|
@@ -330,6 +330,12 @@ export const DEFAULTS = {
|
|
|
330
330
|
TEST_LEVELS: [TEST_LEVELS.UNIT_TESTING, TEST_LEVELS.INTEGRATION_TESTING]
|
|
331
331
|
};
|
|
332
332
|
|
|
333
|
+
/**
|
|
334
|
+
* AGENTS.md universal output flag
|
|
335
|
+
* When true, AGENTS.md is generated as a universal summary regardless of tool selection
|
|
336
|
+
*/
|
|
337
|
+
export const AGENTS_MD_UNIVERSAL = 'agents-md-universal';
|
|
338
|
+
|
|
333
339
|
/**
|
|
334
340
|
* Feature flags (for experimental features)
|
|
335
341
|
*/
|