universal-dev-standards 5.0.0-rc.8 → 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 +250 -25
- 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,34 @@ import {
|
|
|
45
46
|
formatPlan,
|
|
46
47
|
listBackups
|
|
47
48
|
} from '../reconciler/index.js';
|
|
49
|
+
import { restoreSingleFile } from './check.js';
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Determine the correct target directory for a standard file.
|
|
53
|
+
* Options standards (e.g., options/unit-testing.ai.yaml) go to .standards/options/,
|
|
54
|
+
* all others go to .standards/.
|
|
55
|
+
*/
|
|
56
|
+
function getStandardTargetDir(sourcePath) {
|
|
57
|
+
return sourcePath.includes('options/') ? '.standards/options' : '.standards';
|
|
58
|
+
}
|
|
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
|
+
}
|
|
48
77
|
|
|
49
78
|
/**
|
|
50
79
|
* Compare two semantic versions
|
|
@@ -331,11 +360,15 @@ export async function updateCommand(options) {
|
|
|
331
360
|
// List files to update
|
|
332
361
|
console.log(chalk.gray(msg.filesToUpdate));
|
|
333
362
|
for (const std of manifest.standards) {
|
|
334
|
-
|
|
363
|
+
const fileName = std.split('/').pop();
|
|
364
|
+
const displayPath = getStandardTargetDir(std) + '/' + fileName;
|
|
365
|
+
console.log(chalk.gray(` ${displayPath}`));
|
|
335
366
|
}
|
|
336
367
|
for (const ext of manifest.extensions) {
|
|
337
368
|
if (typeof ext !== 'string') continue;
|
|
338
|
-
|
|
369
|
+
const fileName = ext.split('/').pop();
|
|
370
|
+
const displayPath = getStandardTargetDir(ext) + '/' + fileName;
|
|
371
|
+
console.log(chalk.gray(` ${displayPath}`));
|
|
339
372
|
}
|
|
340
373
|
if (!options.standardsOnly) {
|
|
341
374
|
for (const int of manifest.integrations) {
|
|
@@ -382,7 +415,7 @@ export async function updateCommand(options) {
|
|
|
382
415
|
|
|
383
416
|
// Update standards
|
|
384
417
|
for (const std of manifest.standards) {
|
|
385
|
-
const result = await copyStandard(std,
|
|
418
|
+
const result = await copyStandard(std, getStandardTargetDir(std), projectPath);
|
|
386
419
|
if (result.success) {
|
|
387
420
|
results.updated.push(std);
|
|
388
421
|
} else {
|
|
@@ -428,7 +461,7 @@ export async function updateCommand(options) {
|
|
|
428
461
|
let newCount = 0;
|
|
429
462
|
|
|
430
463
|
for (const ns of newStandards) {
|
|
431
|
-
const result = await copyStandard(ns.source,
|
|
464
|
+
const result = await copyStandard(ns.source, getStandardTargetDir(ns.source), projectPath);
|
|
432
465
|
if (result.success) {
|
|
433
466
|
manifest.standards.push(ns.source);
|
|
434
467
|
results.updated.push(ns.source);
|
|
@@ -495,6 +528,27 @@ export async function updateCommand(options) {
|
|
|
495
528
|
}
|
|
496
529
|
}
|
|
497
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
|
+
|
|
498
552
|
intSpinner.succeed(msg.syncedIntegrations.replace('{count}', results.integrations.length));
|
|
499
553
|
}
|
|
500
554
|
|
|
@@ -507,9 +561,9 @@ export async function updateCommand(options) {
|
|
|
507
561
|
// Update hashes for standards
|
|
508
562
|
for (const std of manifest.standards) {
|
|
509
563
|
const fileName = basename(std);
|
|
510
|
-
const relativePath = std.includes('options/')
|
|
564
|
+
const relativePath = (std.includes('options/')
|
|
511
565
|
? join('.standards', 'options', fileName)
|
|
512
|
-
: join('.standards', fileName);
|
|
566
|
+
: join('.standards', fileName)).replace(/\\/g, '/');
|
|
513
567
|
const fullPath = join(projectPath, relativePath);
|
|
514
568
|
const hashInfo = computeFileHash(fullPath);
|
|
515
569
|
if (hashInfo) {
|
|
@@ -521,7 +575,7 @@ export async function updateCommand(options) {
|
|
|
521
575
|
for (const ext of manifest.extensions) {
|
|
522
576
|
if (typeof ext !== 'string') continue;
|
|
523
577
|
const fileName = basename(ext);
|
|
524
|
-
const relativePath = join('.standards', fileName);
|
|
578
|
+
const relativePath = join('.standards', fileName).replace(/\\/g, '/');
|
|
525
579
|
const fullPath = join(projectPath, relativePath);
|
|
526
580
|
const hashInfo = computeFileHash(fullPath);
|
|
527
581
|
if (hashInfo) {
|
|
@@ -553,6 +607,27 @@ export async function updateCommand(options) {
|
|
|
553
607
|
}
|
|
554
608
|
}
|
|
555
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
|
+
|
|
556
631
|
// Update manifest
|
|
557
632
|
manifest.version = '3.3.0';
|
|
558
633
|
manifest.upstream.version = latestVersion;
|
|
@@ -560,6 +635,74 @@ export async function updateCommand(options) {
|
|
|
560
635
|
refreshIntegrationBlockHashes(manifest, projectPath);
|
|
561
636
|
writeManifest(manifest, projectPath);
|
|
562
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
|
+
|
|
563
706
|
// Summary
|
|
564
707
|
console.log();
|
|
565
708
|
console.log(chalk.green(msg.updateSuccess));
|
|
@@ -606,6 +749,17 @@ export async function updateCommand(options) {
|
|
|
606
749
|
...installSkills
|
|
607
750
|
];
|
|
608
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
|
+
|
|
609
763
|
// Update skill hashes for integrity tracking
|
|
610
764
|
if (skillResult.allFileHashes) {
|
|
611
765
|
if (!manifest.skillHashes) manifest.skillHashes = {};
|
|
@@ -631,6 +785,17 @@ export async function updateCommand(options) {
|
|
|
631
785
|
if (!manifest.skills) manifest.skills = {};
|
|
632
786
|
manifest.skills.version = repoInfo.skills.version;
|
|
633
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
|
+
|
|
634
799
|
// Update skill hashes for integrity tracking
|
|
635
800
|
if (updateResult.allFileHashes) {
|
|
636
801
|
if (!manifest.skillHashes) manifest.skillHashes = {};
|
|
@@ -664,7 +829,7 @@ export async function updateCommand(options) {
|
|
|
664
829
|
// Update command hashes for integrity tracking
|
|
665
830
|
if (cmdResult.allFileHashes) {
|
|
666
831
|
if (!manifest.commandHashes) manifest.commandHashes = {};
|
|
667
|
-
|
|
832
|
+
replaceCommandHashesForUpdatedAgents(manifest.commandHashes, cmdResult.allFileHashes);
|
|
668
833
|
}
|
|
669
834
|
|
|
670
835
|
if (cmdResult.totalErrors === 0) {
|
|
@@ -689,7 +854,7 @@ export async function updateCommand(options) {
|
|
|
689
854
|
// Update command hashes for integrity tracking
|
|
690
855
|
if (updateCmdResult.allFileHashes) {
|
|
691
856
|
if (!manifest.commandHashes) manifest.commandHashes = {};
|
|
692
|
-
|
|
857
|
+
replaceCommandHashesForUpdatedAgents(manifest.commandHashes, updateCmdResult.allFileHashes);
|
|
693
858
|
}
|
|
694
859
|
|
|
695
860
|
if (updateCmdResult.totalErrors === 0) {
|
|
@@ -735,6 +900,15 @@ export async function updateCommand(options) {
|
|
|
735
900
|
installCommands.length > 0 || updateCommands.length > 0 ||
|
|
736
901
|
declinedSkills.length > 0 || declinedCommands.length > 0;
|
|
737
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
|
+
|
|
738
912
|
refreshIntegrationBlockHashes(manifest, projectPath);
|
|
739
913
|
writeManifest(manifest, projectPath);
|
|
740
914
|
}
|
|
@@ -795,8 +969,34 @@ export async function updateCommand(options) {
|
|
|
795
969
|
console.log(chalk.gray(` ${msg.skillsLatest}: ${skillsVersion}`));
|
|
796
970
|
console.log();
|
|
797
971
|
|
|
798
|
-
//
|
|
799
|
-
|
|
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';
|
|
800
1000
|
|
|
801
1001
|
if (location === 'marketplace') {
|
|
802
1002
|
console.log(chalk.gray(` ${msg.updateViaMarketplace}`));
|
|
@@ -891,13 +1091,15 @@ export function regenerateIntegrations(projectPath, manifest) {
|
|
|
891
1091
|
if (!manifest.fileHashes) {
|
|
892
1092
|
manifest.fileHashes = {};
|
|
893
1093
|
}
|
|
894
|
-
|
|
1094
|
+
const normalizedPath = result.path.replace(/\\/g, '/');
|
|
1095
|
+
manifest.fileHashes[normalizedPath] = { ...hashInfo, installedAt: now };
|
|
895
1096
|
}
|
|
896
1097
|
|
|
897
1098
|
// Track integration block hash for UDS content integrity
|
|
898
1099
|
if (result.blockHashInfo) {
|
|
899
1100
|
if (!manifest.integrationBlockHashes) manifest.integrationBlockHashes = {};
|
|
900
|
-
|
|
1101
|
+
const normalizedBlockPath = result.path.replace(/\\/g, '/');
|
|
1102
|
+
manifest.integrationBlockHashes[normalizedBlockPath] = {
|
|
901
1103
|
...result.blockHashInfo,
|
|
902
1104
|
installedAt: now
|
|
903
1105
|
};
|
|
@@ -907,6 +1109,27 @@ export function regenerateIntegrations(projectPath, manifest) {
|
|
|
907
1109
|
}
|
|
908
1110
|
}
|
|
909
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
|
+
|
|
910
1133
|
return {
|
|
911
1134
|
success: results.errors.length === 0,
|
|
912
1135
|
updated: results.updated,
|
|
@@ -1052,13 +1275,15 @@ async function syncIntegrationReferences(projectPath, manifest) {
|
|
|
1052
1275
|
if (!manifest.fileHashes) {
|
|
1053
1276
|
manifest.fileHashes = {};
|
|
1054
1277
|
}
|
|
1055
|
-
|
|
1278
|
+
const normalizedIntPath = integrationPath.replace(/\\/g, '/');
|
|
1279
|
+
manifest.fileHashes[normalizedIntPath] = { ...hashInfo, installedAt: now };
|
|
1056
1280
|
}
|
|
1057
1281
|
|
|
1058
1282
|
// Track integration block hash for UDS content integrity
|
|
1059
1283
|
if (result.blockHashInfo) {
|
|
1060
1284
|
if (!manifest.integrationBlockHashes) manifest.integrationBlockHashes = {};
|
|
1061
|
-
|
|
1285
|
+
const normalizedIntBlockPath = integrationPath.replace(/\\/g, '/');
|
|
1286
|
+
manifest.integrationBlockHashes[normalizedIntBlockPath] = {
|
|
1062
1287
|
...result.blockHashInfo,
|
|
1063
1288
|
installedAt: now
|
|
1064
1289
|
};
|
|
@@ -1301,7 +1526,7 @@ async function updateCommandsOnly(projectPath, manifest) {
|
|
|
1301
1526
|
// Update command hashes for integrity tracking
|
|
1302
1527
|
if (result.allFileHashes) {
|
|
1303
1528
|
if (!manifest.commandHashes) manifest.commandHashes = {};
|
|
1304
|
-
|
|
1529
|
+
replaceCommandHashesForUpdatedAgents(manifest.commandHashes, result.allFileHashes);
|
|
1305
1530
|
}
|
|
1306
1531
|
|
|
1307
1532
|
writeManifest(manifest, projectPath);
|
|
@@ -1410,16 +1635,16 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion, debug = fa
|
|
|
1410
1635
|
const installedInfo = userInfo || projectInfo;
|
|
1411
1636
|
const installedVersion = installedInfo?.version;
|
|
1412
1637
|
|
|
1413
|
-
// Skip marketplace (auto-updates)
|
|
1414
|
-
if (!usingMarketplace && installedVersion
|
|
1638
|
+
// Skip marketplace (auto-updates); treat unknown versions as outdated
|
|
1639
|
+
if (!usingMarketplace && (!installedVersion || installedVersion !== latestSkillsVersion)) {
|
|
1415
1640
|
if (debug) {
|
|
1416
|
-
console.log(chalk.yellow(` ✓ Added to outdatedSkills (${installedVersion} → ${latestSkillsVersion})`));
|
|
1641
|
+
console.log(chalk.yellow(` ✓ Added to outdatedSkills (${installedVersion || 'unknown'} → ${latestSkillsVersion})`));
|
|
1417
1642
|
}
|
|
1418
1643
|
outdatedSkills.push({
|
|
1419
1644
|
agent: tool,
|
|
1420
1645
|
displayName: getAgentDisplayName(tool),
|
|
1421
1646
|
paths: config.skills,
|
|
1422
|
-
currentVersion: installedVersion,
|
|
1647
|
+
currentVersion: installedVersion || 'unknown',
|
|
1423
1648
|
latestVersion: latestSkillsVersion,
|
|
1424
1649
|
level: userInfo?.installed ? 'user' : 'project',
|
|
1425
1650
|
path: installedInfo?.path
|
|
@@ -1474,16 +1699,16 @@ function checkNewFeatures(projectPath, manifest, latestSkillsVersion, debug = fa
|
|
|
1474
1699
|
console.log(chalk.gray(` latestSkillsVersion: ${latestSkillsVersion}`));
|
|
1475
1700
|
}
|
|
1476
1701
|
|
|
1477
|
-
// Check if version differs from latest
|
|
1478
|
-
if (installedCmdVersion
|
|
1702
|
+
// Check if version differs from latest; treat unknown versions as outdated
|
|
1703
|
+
if (!installedCmdVersion || installedCmdVersion !== latestSkillsVersion) {
|
|
1479
1704
|
if (debug) {
|
|
1480
|
-
console.log(chalk.yellow(` ✓ Added to outdatedCommands (${installedCmdVersion} → ${latestSkillsVersion})`));
|
|
1705
|
+
console.log(chalk.yellow(` ✓ Added to outdatedCommands (${installedCmdVersion || 'unknown'} → ${latestSkillsVersion})`));
|
|
1481
1706
|
}
|
|
1482
1707
|
outdatedCommands.push({
|
|
1483
1708
|
agent: tool,
|
|
1484
1709
|
displayName: getAgentDisplayName(tool),
|
|
1485
1710
|
paths: config.commands,
|
|
1486
|
-
currentVersion: installedCmdVersion,
|
|
1711
|
+
currentVersion: installedCmdVersion || 'unknown',
|
|
1487
1712
|
latestVersion: latestSkillsVersion,
|
|
1488
1713
|
level: userCmdInfo?.installed ? 'user' : 'project',
|
|
1489
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
|
*/
|