universal-dev-standards 3.5.1-beta.1 → 3.5.1-beta.11
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 +2 -0
- package/bundled/core/ai-instruction-standards.md +205 -0
- package/bundled/core/anti-hallucination.md +684 -0
- package/bundled/core/changelog-standards.md +556 -0
- package/bundled/core/checkin-standards.md +935 -0
- package/bundled/core/code-review-checklist.md +684 -0
- package/bundled/core/commit-message-guide.md +915 -0
- package/bundled/core/documentation-structure.md +1117 -0
- package/bundled/core/documentation-writing-standards.md +487 -0
- package/bundled/core/error-code-standards.md +382 -0
- package/bundled/core/git-workflow.md +859 -0
- package/bundled/core/logging-standards.md +323 -0
- package/bundled/core/project-structure.md +354 -0
- package/bundled/core/refactoring-standards.md +636 -0
- package/bundled/core/spec-driven-development.md +207 -0
- package/bundled/core/test-completeness-dimensions.md +536 -0
- package/bundled/core/test-driven-development.md +995 -0
- package/bundled/core/testing-standards.md +3061 -0
- package/bundled/core/versioning.md +902 -0
- package/bundled/locales/README.md +88 -0
- package/bundled/locales/zh-CN/CHANGELOG.md +705 -0
- package/bundled/locales/zh-CN/CLAUDE.md +213 -0
- package/bundled/locales/zh-CN/MAINTENANCE.md +689 -0
- package/bundled/locales/zh-CN/README.md +707 -0
- package/bundled/locales/zh-CN/STANDARDS-MAPPING.md +177 -0
- package/bundled/locales/zh-CN/adoption/ADOPTION-GUIDE.md +392 -0
- package/bundled/locales/zh-CN/adoption/STATIC-DYNAMIC-GUIDE.md +302 -0
- package/bundled/locales/zh-CN/adoption/checklists/enterprise.md +332 -0
- package/bundled/locales/zh-CN/adoption/checklists/minimal.md +141 -0
- package/bundled/locales/zh-CN/adoption/checklists/recommended.md +272 -0
- package/bundled/locales/zh-CN/ai/MAINTENANCE.md +739 -0
- package/bundled/locales/zh-CN/ai/options/changelog/auto-generated.ai.yaml +76 -0
- package/bundled/locales/zh-CN/ai/options/changelog/keep-a-changelog.ai.yaml +99 -0
- package/bundled/locales/zh-CN/ai/options/code-review/automated-review.ai.yaml +120 -0
- package/bundled/locales/zh-CN/ai/options/code-review/pair-programming.ai.yaml +109 -0
- package/bundled/locales/zh-CN/ai/options/code-review/pr-review.ai.yaml +104 -0
- package/bundled/locales/zh-CN/ai/options/commit-message/bilingual.ai.yaml +105 -0
- package/bundled/locales/zh-CN/ai/options/commit-message/english.ai.yaml +79 -0
- package/bundled/locales/zh-CN/ai/options/commit-message/traditional-chinese.ai.yaml +100 -0
- package/bundled/locales/zh-CN/ai/options/documentation/api-docs.ai.yaml +140 -0
- package/bundled/locales/zh-CN/ai/options/documentation/markdown-docs.ai.yaml +89 -0
- package/bundled/locales/zh-CN/ai/options/documentation/wiki-style.ai.yaml +119 -0
- package/bundled/locales/zh-CN/ai/options/git-workflow/gitflow.ai.yaml +133 -0
- package/bundled/locales/zh-CN/ai/options/git-workflow/github-flow.ai.yaml +73 -0
- package/bundled/locales/zh-CN/ai/options/git-workflow/merge-commit.ai.yaml +88 -0
- package/bundled/locales/zh-CN/ai/options/git-workflow/rebase-ff.ai.yaml +113 -0
- package/bundled/locales/zh-CN/ai/options/git-workflow/squash-merge.ai.yaml +85 -0
- package/bundled/locales/zh-CN/ai/options/git-workflow/trunk-based.ai.yaml +117 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/dotnet.ai.yaml +108 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/go.ai.yaml +115 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/java.ai.yaml +113 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/kotlin.ai.yaml +123 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/nodejs.ai.yaml +101 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/php.ai.yaml +147 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/python.ai.yaml +116 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/ruby.ai.yaml +140 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/rust.ai.yaml +117 -0
- package/bundled/locales/zh-CN/ai/options/project-structure/swift.ai.yaml +143 -0
- package/bundled/locales/zh-CN/ai/options/testing/contract-testing.ai.yaml +254 -0
- package/bundled/locales/zh-CN/ai/options/testing/e2e-testing.ai.yaml +116 -0
- package/bundled/locales/zh-CN/ai/options/testing/industry-pyramid.ai.yaml +144 -0
- package/bundled/locales/zh-CN/ai/options/testing/integration-testing.ai.yaml +90 -0
- package/bundled/locales/zh-CN/ai/options/testing/istqb-framework.ai.yaml +108 -0
- package/bundled/locales/zh-CN/ai/options/testing/performance-testing.ai.yaml +272 -0
- package/bundled/locales/zh-CN/ai/options/testing/security-testing.ai.yaml +160 -0
- package/bundled/locales/zh-CN/ai/options/testing/system-testing.ai.yaml +101 -0
- package/bundled/locales/zh-CN/ai/options/testing/unit-testing.ai.yaml +82 -0
- package/bundled/locales/zh-CN/ai/standards/anti-hallucination.ai.yaml +145 -0
- package/bundled/locales/zh-CN/ai/standards/changelog.ai.yaml +146 -0
- package/bundled/locales/zh-CN/ai/standards/checkin-standards.ai.yaml +170 -0
- package/bundled/locales/zh-CN/ai/standards/code-review.ai.yaml +148 -0
- package/bundled/locales/zh-CN/ai/standards/commit-message.ai.yaml +175 -0
- package/bundled/locales/zh-CN/ai/standards/documentation-structure.ai.yaml +124 -0
- package/bundled/locales/zh-CN/ai/standards/documentation-writing-standards.ai.yaml +190 -0
- package/bundled/locales/zh-CN/ai/standards/error-codes.ai.yaml +139 -0
- package/bundled/locales/zh-CN/ai/standards/git-workflow.ai.yaml +95 -0
- package/bundled/locales/zh-CN/ai/standards/logging.ai.yaml +128 -0
- package/bundled/locales/zh-CN/ai/standards/project-structure.ai.yaml +134 -0
- package/bundled/locales/zh-CN/ai/standards/spec-driven-development.ai.yaml +169 -0
- package/bundled/locales/zh-CN/ai/standards/test-completeness-dimensions.ai.yaml +220 -0
- package/bundled/locales/zh-CN/ai/standards/testing.ai.yaml +137 -0
- package/bundled/locales/zh-CN/ai/standards/versioning.ai.yaml +211 -0
- package/bundled/locales/zh-CN/core/ai-instruction-standards.md +213 -0
- package/bundled/locales/zh-CN/core/anti-hallucination.md +691 -0
- package/bundled/locales/zh-CN/core/changelog-standards.md +147 -0
- package/bundled/locales/zh-CN/core/checkin-standards.md +943 -0
- package/bundled/locales/zh-CN/core/code-review-guide.md +693 -0
- package/bundled/locales/zh-CN/core/commit-message-guide.md +129 -0
- package/bundled/locales/zh-CN/core/documentation-structure.md +173 -0
- package/bundled/locales/zh-CN/core/documentation-writing-standards.md +495 -0
- package/bundled/locales/zh-CN/core/error-code-standards.md +180 -0
- package/bundled/locales/zh-CN/core/git-workflow.md +193 -0
- package/bundled/locales/zh-CN/core/logging-standards.md +174 -0
- package/bundled/locales/zh-CN/core/project-structure.md +184 -0
- package/bundled/locales/zh-CN/core/refactoring-standards.md +642 -0
- package/bundled/locales/zh-CN/core/spec-driven-development.md +215 -0
- package/bundled/locales/zh-CN/core/test-completeness-dimensions.md +544 -0
- package/bundled/locales/zh-CN/core/test-driven-development.md +1002 -0
- package/bundled/locales/zh-CN/core/testing-standards.md +170 -0
- package/bundled/locales/zh-CN/core/versioning.md +177 -0
- package/bundled/locales/zh-CN/docs/AI-AGENT-ROADMAP.md +303 -0
- package/bundled/locales/zh-CN/docs/CLI-INIT-OPTIONS.md +990 -0
- package/bundled/locales/zh-CN/docs/OPERATION-WORKFLOW.md +1064 -0
- package/bundled/locales/zh-CN/docs/USAGE-MODES-COMPARISON.md +333 -0
- package/bundled/locales/zh-CN/docs/WINDOWS-GUIDE.md +215 -0
- package/bundled/locales/zh-CN/integrations/codex/AGENTS.md +115 -0
- package/bundled/locales/zh-CN/integrations/codex/README.md +67 -0
- package/bundled/locales/zh-CN/integrations/gemini-cli/GEMINI.md +102 -0
- package/bundled/locales/zh-CN/integrations/gemini-cli/README.md +140 -0
- package/bundled/locales/zh-CN/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +269 -0
- package/bundled/locales/zh-CN/integrations/github-copilot/README.md +167 -0
- package/bundled/locales/zh-CN/integrations/github-copilot/copilot-instructions.md +263 -0
- package/bundled/locales/zh-CN/integrations/github-copilot/skills-mapping.md +192 -0
- package/bundled/locales/zh-CN/integrations/google-antigravity/INSTRUCTIONS.md +61 -0
- package/bundled/locales/zh-CN/integrations/google-antigravity/README.md +84 -0
- package/bundled/locales/zh-CN/integrations/opencode/AGENTS.md +111 -0
- package/bundled/locales/zh-CN/integrations/opencode/README.md +176 -0
- package/bundled/locales/zh-CN/integrations/opencode/skills-mapping.md +396 -0
- package/bundled/locales/zh-CN/integrations/openspec/AGENTS.md +301 -0
- package/bundled/locales/zh-CN/integrations/openspec/README.md +43 -0
- package/bundled/locales/zh-CN/integrations/spec-kit/AGENTS.md +184 -0
- package/bundled/locales/zh-CN/integrations/spec-kit/README.md +43 -0
- package/bundled/locales/zh-CN/options/commit-message/bilingual.md +161 -0
- package/bundled/locales/zh-CN/options/commit-message/english.md +137 -0
- package/bundled/locales/zh-CN/options/commit-message/traditional-chinese.md +162 -0
- package/bundled/locales/zh-CN/options/git-workflow/gitflow.md +147 -0
- package/bundled/locales/zh-CN/options/git-workflow/github-flow.md +124 -0
- package/bundled/locales/zh-CN/options/git-workflow/merge-commit.md +124 -0
- package/bundled/locales/zh-CN/options/git-workflow/rebase-ff.md +160 -0
- package/bundled/locales/zh-CN/options/git-workflow/squash-merge.md +117 -0
- package/bundled/locales/zh-CN/options/git-workflow/trunk-based.md +125 -0
- package/bundled/locales/zh-CN/options/project-structure/dotnet.md +183 -0
- package/bundled/locales/zh-CN/options/project-structure/go.md +226 -0
- package/bundled/locales/zh-CN/options/project-structure/java.md +213 -0
- package/bundled/locales/zh-CN/options/project-structure/nodejs.md +185 -0
- package/bundled/locales/zh-CN/options/project-structure/python.md +229 -0
- package/bundled/locales/zh-CN/options/testing/e2e-testing.md +207 -0
- package/bundled/locales/zh-CN/options/testing/integration-testing.md +230 -0
- package/bundled/locales/zh-CN/options/testing/system-testing.md +183 -0
- package/bundled/locales/zh-CN/options/testing/unit-testing.md +165 -0
- package/bundled/locales/zh-CN/skills/INTEGRATION-GUIDE.md +218 -0
- package/bundled/locales/zh-CN/skills/README.md +134 -0
- package/bundled/locales/zh-CN/skills/_shared/README.md +68 -0
- package/bundled/locales/zh-CN/skills/claude-code/CONTRIBUTING.template.md +151 -0
- package/bundled/locales/zh-CN/skills/claude-code/README.md +174 -0
- package/bundled/locales/zh-CN/skills/claude-code/ai-collaboration-standards/SKILL.md +175 -0
- package/bundled/locales/zh-CN/skills/claude-code/ai-collaboration-standards/anti-hallucination.md +223 -0
- package/bundled/locales/zh-CN/skills/claude-code/ai-collaboration-standards/certainty-labels.md +132 -0
- package/bundled/locales/zh-CN/skills/claude-code/changelog-guide/SKILL.md +237 -0
- package/bundled/locales/zh-CN/skills/claude-code/checkin-assistant/SKILL.md +407 -0
- package/bundled/locales/zh-CN/skills/claude-code/code-review-assistant/SKILL.md +154 -0
- package/bundled/locales/zh-CN/skills/claude-code/code-review-assistant/checkin-checklist.md +257 -0
- package/bundled/locales/zh-CN/skills/claude-code/code-review-assistant/review-checklist.md +246 -0
- package/bundled/locales/zh-CN/skills/claude-code/commands/bdd.md +142 -0
- package/bundled/locales/zh-CN/skills/claude-code/commands/methodology.md +274 -0
- package/bundled/locales/zh-CN/skills/claude-code/commit-standards/SKILL.md +191 -0
- package/bundled/locales/zh-CN/skills/claude-code/commit-standards/conventional-commits.md +264 -0
- package/bundled/locales/zh-CN/skills/claude-code/commit-standards/language-options.md +172 -0
- package/bundled/locales/zh-CN/skills/claude-code/documentation-guide/SKILL.md +421 -0
- package/bundled/locales/zh-CN/skills/claude-code/documentation-guide/documentation-structure.md +357 -0
- package/bundled/locales/zh-CN/skills/claude-code/documentation-guide/readme-template.md +412 -0
- package/bundled/locales/zh-CN/skills/claude-code/error-code-guide/SKILL.md +269 -0
- package/bundled/locales/zh-CN/skills/claude-code/git-workflow-guide/SKILL.md +218 -0
- package/bundled/locales/zh-CN/skills/claude-code/git-workflow-guide/branch-naming.md +220 -0
- package/bundled/locales/zh-CN/skills/claude-code/git-workflow-guide/git-workflow.md +321 -0
- package/bundled/locales/zh-CN/skills/claude-code/logging-guide/SKILL.md +285 -0
- package/bundled/locales/zh-CN/skills/claude-code/methodology-system/SKILL.md +131 -0
- package/bundled/locales/zh-CN/skills/claude-code/methodology-system/create-methodology.md +350 -0
- package/bundled/locales/zh-CN/skills/claude-code/methodology-system/runtime.md +279 -0
- package/bundled/locales/zh-CN/skills/claude-code/project-structure-guide/SKILL.md +143 -0
- package/bundled/locales/zh-CN/skills/claude-code/project-structure-guide/language-patterns.md +271 -0
- package/bundled/locales/zh-CN/skills/claude-code/refactoring-assistant/SKILL.md +162 -0
- package/bundled/locales/zh-CN/skills/claude-code/release-standards/SKILL.md +191 -0
- package/bundled/locales/zh-CN/skills/claude-code/release-standards/changelog-format.md +247 -0
- package/bundled/locales/zh-CN/skills/claude-code/release-standards/release-workflow.md +345 -0
- package/bundled/locales/zh-CN/skills/claude-code/release-standards/semantic-versioning.md +250 -0
- package/bundled/locales/zh-CN/skills/claude-code/requirement-assistant/SKILL.md +227 -0
- package/bundled/locales/zh-CN/skills/claude-code/requirement-assistant/requirement-checklist.md +325 -0
- package/bundled/locales/zh-CN/skills/claude-code/requirement-assistant/requirement-writing.md +399 -0
- package/bundled/locales/zh-CN/skills/claude-code/spec-driven-dev/SKILL.md +243 -0
- package/bundled/locales/zh-CN/skills/claude-code/tdd-assistant/SKILL.md +332 -0
- package/bundled/locales/zh-CN/skills/claude-code/tdd-assistant/language-examples.md +639 -0
- package/bundled/locales/zh-CN/skills/claude-code/tdd-assistant/tdd-workflow.md +486 -0
- package/bundled/locales/zh-CN/skills/claude-code/test-coverage-assistant/SKILL.md +282 -0
- package/bundled/locales/zh-CN/skills/claude-code/testing-guide/SKILL.md +234 -0
- package/bundled/locales/zh-CN/skills/claude-code/testing-guide/testing-pyramid.md +448 -0
- package/bundled/locales/zh-CN/skills/cline/README.md +58 -0
- package/bundled/locales/zh-CN/skills/copilot/README.md +61 -0
- package/bundled/locales/zh-CN/skills/copilot/copilot-instructions.md +79 -0
- package/bundled/locales/zh-CN/skills/cursor/README.md +58 -0
- package/bundled/locales/zh-CN/skills/windsurf/README.md +59 -0
- package/bundled/locales/zh-TW/CHANGELOG.md +707 -0
- package/bundled/locales/zh-TW/CLAUDE.md +213 -0
- package/bundled/locales/zh-TW/MAINTENANCE.md +683 -0
- package/bundled/locales/zh-TW/README.md +687 -0
- package/bundled/locales/zh-TW/STANDARDS-MAPPING.md +177 -0
- package/bundled/locales/zh-TW/adoption/ADOPTION-GUIDE.md +392 -0
- package/bundled/locales/zh-TW/adoption/STATIC-DYNAMIC-GUIDE.md +299 -0
- package/bundled/locales/zh-TW/adoption/checklists/enterprise.md +332 -0
- package/bundled/locales/zh-TW/adoption/checklists/minimal.md +141 -0
- package/bundled/locales/zh-TW/adoption/checklists/recommended.md +272 -0
- package/bundled/locales/zh-TW/ai/MAINTENANCE.md +754 -0
- package/bundled/locales/zh-TW/ai/options/changelog/auto-generated.ai.yaml +76 -0
- package/bundled/locales/zh-TW/ai/options/changelog/keep-a-changelog.ai.yaml +99 -0
- package/bundled/locales/zh-TW/ai/options/code-review/automated-review.ai.yaml +120 -0
- package/bundled/locales/zh-TW/ai/options/code-review/pair-programming.ai.yaml +109 -0
- package/bundled/locales/zh-TW/ai/options/code-review/pr-review.ai.yaml +104 -0
- package/bundled/locales/zh-TW/ai/options/commit-message/bilingual.ai.yaml +105 -0
- package/bundled/locales/zh-TW/ai/options/commit-message/english.ai.yaml +79 -0
- package/bundled/locales/zh-TW/ai/options/commit-message/traditional-chinese.ai.yaml +100 -0
- package/bundled/locales/zh-TW/ai/options/documentation/api-docs.ai.yaml +140 -0
- package/bundled/locales/zh-TW/ai/options/documentation/markdown-docs.ai.yaml +89 -0
- package/bundled/locales/zh-TW/ai/options/documentation/wiki-style.ai.yaml +119 -0
- package/bundled/locales/zh-TW/ai/options/git-workflow/gitflow.ai.yaml +133 -0
- package/bundled/locales/zh-TW/ai/options/git-workflow/github-flow.ai.yaml +73 -0
- package/bundled/locales/zh-TW/ai/options/git-workflow/merge-commit.ai.yaml +88 -0
- package/bundled/locales/zh-TW/ai/options/git-workflow/rebase-ff.ai.yaml +113 -0
- package/bundled/locales/zh-TW/ai/options/git-workflow/squash-merge.ai.yaml +85 -0
- package/bundled/locales/zh-TW/ai/options/git-workflow/trunk-based.ai.yaml +117 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/dotnet.ai.yaml +108 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/go.ai.yaml +115 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/java.ai.yaml +113 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/kotlin.ai.yaml +123 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/nodejs.ai.yaml +101 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/php.ai.yaml +147 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/python.ai.yaml +116 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/ruby.ai.yaml +140 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/rust.ai.yaml +117 -0
- package/bundled/locales/zh-TW/ai/options/project-structure/swift.ai.yaml +143 -0
- package/bundled/locales/zh-TW/ai/options/testing/contract-testing.ai.yaml +254 -0
- package/bundled/locales/zh-TW/ai/options/testing/e2e-testing.ai.yaml +116 -0
- package/bundled/locales/zh-TW/ai/options/testing/industry-pyramid.ai.yaml +144 -0
- package/bundled/locales/zh-TW/ai/options/testing/integration-testing.ai.yaml +90 -0
- package/bundled/locales/zh-TW/ai/options/testing/istqb-framework.ai.yaml +108 -0
- package/bundled/locales/zh-TW/ai/options/testing/performance-testing.ai.yaml +272 -0
- package/bundled/locales/zh-TW/ai/options/testing/security-testing.ai.yaml +160 -0
- package/bundled/locales/zh-TW/ai/options/testing/system-testing.ai.yaml +101 -0
- package/bundled/locales/zh-TW/ai/options/testing/unit-testing.ai.yaml +82 -0
- package/bundled/locales/zh-TW/ai/standards/anti-hallucination.ai.yaml +145 -0
- package/bundled/locales/zh-TW/ai/standards/changelog.ai.yaml +146 -0
- package/bundled/locales/zh-TW/ai/standards/checkin-standards.ai.yaml +170 -0
- package/bundled/locales/zh-TW/ai/standards/code-review.ai.yaml +148 -0
- package/bundled/locales/zh-TW/ai/standards/commit-message.ai.yaml +175 -0
- package/bundled/locales/zh-TW/ai/standards/documentation-structure.ai.yaml +124 -0
- package/bundled/locales/zh-TW/ai/standards/documentation-writing-standards.ai.yaml +190 -0
- package/bundled/locales/zh-TW/ai/standards/error-codes.ai.yaml +139 -0
- package/bundled/locales/zh-TW/ai/standards/git-workflow.ai.yaml +95 -0
- package/bundled/locales/zh-TW/ai/standards/logging.ai.yaml +128 -0
- package/bundled/locales/zh-TW/ai/standards/project-structure.ai.yaml +134 -0
- package/bundled/locales/zh-TW/ai/standards/spec-driven-development.ai.yaml +169 -0
- package/bundled/locales/zh-TW/ai/standards/test-completeness-dimensions.ai.yaml +220 -0
- package/bundled/locales/zh-TW/ai/standards/testing.ai.yaml +137 -0
- package/bundled/locales/zh-TW/ai/standards/versioning.ai.yaml +211 -0
- package/bundled/locales/zh-TW/core/ai-instruction-standards.md +213 -0
- package/bundled/locales/zh-TW/core/anti-hallucination.md +691 -0
- package/bundled/locales/zh-TW/core/changelog-standards.md +564 -0
- package/bundled/locales/zh-TW/core/checkin-standards.md +943 -0
- package/bundled/locales/zh-TW/core/code-review-checklist.md +693 -0
- package/bundled/locales/zh-TW/core/commit-message-guide.md +809 -0
- package/bundled/locales/zh-TW/core/documentation-structure.md +1125 -0
- package/bundled/locales/zh-TW/core/documentation-writing-standards.md +495 -0
- package/bundled/locales/zh-TW/core/error-code-standards.md +384 -0
- package/bundled/locales/zh-TW/core/git-workflow.md +860 -0
- package/bundled/locales/zh-TW/core/logging-standards.md +325 -0
- package/bundled/locales/zh-TW/core/project-structure.md +362 -0
- package/bundled/locales/zh-TW/core/refactoring-standards.md +642 -0
- package/bundled/locales/zh-TW/core/spec-driven-development.md +215 -0
- package/bundled/locales/zh-TW/core/test-completeness-dimensions.md +544 -0
- package/bundled/locales/zh-TW/core/test-driven-development.md +1004 -0
- package/bundled/locales/zh-TW/core/testing-standards.md +2158 -0
- package/bundled/locales/zh-TW/core/versioning.md +909 -0
- package/bundled/locales/zh-TW/docs/AI-AGENT-ROADMAP.md +303 -0
- package/bundled/locales/zh-TW/docs/CLI-INIT-OPTIONS.md +990 -0
- package/bundled/locales/zh-TW/docs/OPERATION-WORKFLOW.md +1064 -0
- package/bundled/locales/zh-TW/docs/USAGE-MODES-COMPARISON.md +333 -0
- package/bundled/locales/zh-TW/docs/WINDOWS-GUIDE.md +215 -0
- package/bundled/locales/zh-TW/integrations/codex/AGENTS.md +115 -0
- package/bundled/locales/zh-TW/integrations/codex/README.md +113 -0
- package/bundled/locales/zh-TW/integrations/gemini-cli/GEMINI.md +102 -0
- package/bundled/locales/zh-TW/integrations/gemini-cli/README.md +140 -0
- package/bundled/locales/zh-TW/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +269 -0
- package/bundled/locales/zh-TW/integrations/github-copilot/README.md +167 -0
- package/bundled/locales/zh-TW/integrations/github-copilot/copilot-instructions.md +263 -0
- package/bundled/locales/zh-TW/integrations/github-copilot/skills-mapping.md +192 -0
- package/bundled/locales/zh-TW/integrations/google-antigravity/INSTRUCTIONS.md +61 -0
- package/bundled/locales/zh-TW/integrations/google-antigravity/README.md +84 -0
- package/bundled/locales/zh-TW/integrations/opencode/AGENTS.md +111 -0
- package/bundled/locales/zh-TW/integrations/opencode/README.md +176 -0
- package/bundled/locales/zh-TW/integrations/opencode/skills-mapping.md +396 -0
- package/bundled/locales/zh-TW/integrations/openspec/AGENTS.md +301 -0
- package/bundled/locales/zh-TW/integrations/openspec/README.md +43 -0
- package/bundled/locales/zh-TW/integrations/spec-kit/AGENTS.md +184 -0
- package/bundled/locales/zh-TW/integrations/spec-kit/README.md +43 -0
- package/bundled/locales/zh-TW/options/commit-message/bilingual.md +161 -0
- package/bundled/locales/zh-TW/options/commit-message/english.md +137 -0
- package/bundled/locales/zh-TW/options/commit-message/traditional-chinese.md +162 -0
- package/bundled/locales/zh-TW/options/git-workflow/gitflow.md +147 -0
- package/bundled/locales/zh-TW/options/git-workflow/github-flow.md +124 -0
- package/bundled/locales/zh-TW/options/git-workflow/merge-commit.md +124 -0
- package/bundled/locales/zh-TW/options/git-workflow/rebase-ff.md +160 -0
- package/bundled/locales/zh-TW/options/git-workflow/squash-merge.md +117 -0
- package/bundled/locales/zh-TW/options/git-workflow/trunk-based.md +125 -0
- package/bundled/locales/zh-TW/options/project-structure/dotnet.md +183 -0
- package/bundled/locales/zh-TW/options/project-structure/go.md +226 -0
- package/bundled/locales/zh-TW/options/project-structure/java.md +213 -0
- package/bundled/locales/zh-TW/options/project-structure/nodejs.md +185 -0
- package/bundled/locales/zh-TW/options/project-structure/python.md +229 -0
- package/bundled/locales/zh-TW/options/testing/e2e-testing.md +207 -0
- package/bundled/locales/zh-TW/options/testing/integration-testing.md +230 -0
- package/bundled/locales/zh-TW/options/testing/system-testing.md +183 -0
- package/bundled/locales/zh-TW/options/testing/unit-testing.md +165 -0
- package/bundled/locales/zh-TW/skills/INTEGRATION-GUIDE.md +218 -0
- package/bundled/locales/zh-TW/skills/README.md +132 -0
- package/bundled/locales/zh-TW/skills/_shared/README.md +68 -0
- package/bundled/locales/zh-TW/skills/claude-code/CONTRIBUTING.template.md +151 -0
- package/bundled/locales/zh-TW/skills/claude-code/README.md +174 -0
- package/bundled/locales/zh-TW/skills/claude-code/ai-collaboration-standards/SKILL.md +175 -0
- package/bundled/locales/zh-TW/skills/claude-code/ai-collaboration-standards/anti-hallucination.md +223 -0
- package/bundled/locales/zh-TW/skills/claude-code/ai-collaboration-standards/certainty-labels.md +132 -0
- package/bundled/locales/zh-TW/skills/claude-code/changelog-guide/SKILL.md +237 -0
- package/bundled/locales/zh-TW/skills/claude-code/checkin-assistant/SKILL.md +407 -0
- package/bundled/locales/zh-TW/skills/claude-code/code-review-assistant/SKILL.md +154 -0
- package/bundled/locales/zh-TW/skills/claude-code/code-review-assistant/checkin-checklist.md +257 -0
- package/bundled/locales/zh-TW/skills/claude-code/code-review-assistant/review-checklist.md +246 -0
- package/bundled/locales/zh-TW/skills/claude-code/commands/bdd.md +142 -0
- package/bundled/locales/zh-TW/skills/claude-code/commands/methodology.md +274 -0
- package/bundled/locales/zh-TW/skills/claude-code/commit-standards/SKILL.md +191 -0
- package/bundled/locales/zh-TW/skills/claude-code/commit-standards/conventional-commits.md +264 -0
- package/bundled/locales/zh-TW/skills/claude-code/commit-standards/language-options.md +172 -0
- package/bundled/locales/zh-TW/skills/claude-code/documentation-guide/SKILL.md +421 -0
- package/bundled/locales/zh-TW/skills/claude-code/documentation-guide/documentation-structure.md +357 -0
- package/bundled/locales/zh-TW/skills/claude-code/documentation-guide/readme-template.md +412 -0
- package/bundled/locales/zh-TW/skills/claude-code/error-code-guide/SKILL.md +269 -0
- package/bundled/locales/zh-TW/skills/claude-code/git-workflow-guide/SKILL.md +218 -0
- package/bundled/locales/zh-TW/skills/claude-code/git-workflow-guide/branch-naming.md +220 -0
- package/bundled/locales/zh-TW/skills/claude-code/git-workflow-guide/git-workflow.md +321 -0
- package/bundled/locales/zh-TW/skills/claude-code/logging-guide/SKILL.md +285 -0
- package/bundled/locales/zh-TW/skills/claude-code/methodology-system/SKILL.md +131 -0
- package/bundled/locales/zh-TW/skills/claude-code/methodology-system/create-methodology.md +350 -0
- package/bundled/locales/zh-TW/skills/claude-code/methodology-system/runtime.md +279 -0
- package/bundled/locales/zh-TW/skills/claude-code/project-structure-guide/SKILL.md +143 -0
- package/bundled/locales/zh-TW/skills/claude-code/project-structure-guide/language-patterns.md +271 -0
- package/bundled/locales/zh-TW/skills/claude-code/refactoring-assistant/SKILL.md +162 -0
- package/bundled/locales/zh-TW/skills/claude-code/release-standards/SKILL.md +191 -0
- package/bundled/locales/zh-TW/skills/claude-code/release-standards/changelog-format.md +247 -0
- package/bundled/locales/zh-TW/skills/claude-code/release-standards/release-workflow.md +345 -0
- package/bundled/locales/zh-TW/skills/claude-code/release-standards/semantic-versioning.md +250 -0
- package/bundled/locales/zh-TW/skills/claude-code/requirement-assistant/SKILL.md +227 -0
- package/bundled/locales/zh-TW/skills/claude-code/requirement-assistant/requirement-checklist.md +325 -0
- package/bundled/locales/zh-TW/skills/claude-code/requirement-assistant/requirement-writing.md +399 -0
- package/bundled/locales/zh-TW/skills/claude-code/spec-driven-dev/SKILL.md +243 -0
- package/bundled/locales/zh-TW/skills/claude-code/tdd-assistant/SKILL.md +332 -0
- package/bundled/locales/zh-TW/skills/claude-code/tdd-assistant/language-examples.md +639 -0
- package/bundled/locales/zh-TW/skills/claude-code/tdd-assistant/tdd-workflow.md +486 -0
- package/bundled/locales/zh-TW/skills/claude-code/test-coverage-assistant/SKILL.md +282 -0
- package/bundled/locales/zh-TW/skills/claude-code/testing-guide/SKILL.md +234 -0
- package/bundled/locales/zh-TW/skills/claude-code/testing-guide/testing-pyramid.md +448 -0
- package/bundled/locales/zh-TW/skills/cline/README.md +58 -0
- package/bundled/locales/zh-TW/skills/copilot/README.md +61 -0
- package/bundled/locales/zh-TW/skills/copilot/copilot-instructions.md +79 -0
- package/bundled/locales/zh-TW/skills/cursor/README.md +58 -0
- package/bundled/locales/zh-TW/skills/windsurf/README.md +59 -0
- package/bundled/skills/claude-code/CONTRIBUTING.template.md +141 -0
- package/bundled/skills/claude-code/README.md +196 -0
- package/bundled/skills/claude-code/ai/standards/checkin.ai.yaml +21 -0
- package/bundled/skills/claude-code/ai/standards/commit.ai.yaml +20 -0
- package/bundled/skills/claude-code/ai/standards/refactoring.ai.yaml +34 -0
- package/bundled/skills/claude-code/ai/standards/testing.ai.yaml +41 -0
- package/bundled/skills/claude-code/ai-collaboration-standards/SKILL.md +175 -0
- package/bundled/skills/claude-code/ai-collaboration-standards/anti-hallucination.md +215 -0
- package/bundled/skills/claude-code/ai-collaboration-standards/certainty-labels.md +124 -0
- package/bundled/skills/claude-code/changelog-guide/SKILL.md +232 -0
- package/bundled/skills/claude-code/checkin-assistant/SKILL.md +402 -0
- package/bundled/skills/claude-code/code-review-assistant/SKILL.md +220 -0
- package/bundled/skills/claude-code/code-review-assistant/checkin-checklist.md +249 -0
- package/bundled/skills/claude-code/code-review-assistant/review-checklist.md +238 -0
- package/bundled/skills/claude-code/commands/README.md +78 -0
- package/bundled/skills/claude-code/commands/bdd.md +142 -0
- package/bundled/skills/claude-code/commands/changelog.md +57 -0
- package/bundled/skills/claude-code/commands/check.md +91 -0
- package/bundled/skills/claude-code/commands/commit.md +48 -0
- package/bundled/skills/claude-code/commands/config.md +97 -0
- package/bundled/skills/claude-code/commands/coverage.md +58 -0
- package/bundled/skills/claude-code/commands/docs.md +75 -0
- package/bundled/skills/claude-code/commands/init.md +88 -0
- package/bundled/skills/claude-code/commands/methodology.md +268 -0
- package/bundled/skills/claude-code/commands/release.md +50 -0
- package/bundled/skills/claude-code/commands/requirement.md +54 -0
- package/bundled/skills/claude-code/commands/review.md +50 -0
- package/bundled/skills/claude-code/commands/spec.md +69 -0
- package/bundled/skills/claude-code/commands/tdd.md +86 -0
- package/bundled/skills/claude-code/commands/update.md +122 -0
- package/bundled/skills/claude-code/commit-standards/SKILL.md +249 -0
- package/bundled/skills/claude-code/commit-standards/conventional-commits.md +256 -0
- package/bundled/skills/claude-code/commit-standards/language-options.md +164 -0
- package/bundled/skills/claude-code/documentation-guide/SKILL.md +416 -0
- package/bundled/skills/claude-code/documentation-guide/documentation-structure.md +349 -0
- package/bundled/skills/claude-code/documentation-guide/readme-template.md +404 -0
- package/bundled/skills/claude-code/error-code-guide/SKILL.md +264 -0
- package/bundled/skills/claude-code/git-workflow-guide/SKILL.md +226 -0
- package/bundled/skills/claude-code/git-workflow-guide/branch-naming.md +212 -0
- package/bundled/skills/claude-code/git-workflow-guide/git-workflow.md +313 -0
- package/bundled/skills/claude-code/logging-guide/SKILL.md +280 -0
- package/bundled/skills/claude-code/methodology-system/SKILL.md +215 -0
- package/bundled/skills/claude-code/methodology-system/create-methodology.md +450 -0
- package/bundled/skills/claude-code/methodology-system/runtime.md +271 -0
- package/bundled/skills/claude-code/project-structure-guide/SKILL.md +143 -0
- package/bundled/skills/claude-code/project-structure-guide/language-patterns.md +263 -0
- package/bundled/skills/claude-code/refactoring-assistant/SKILL.md +205 -0
- package/bundled/skills/claude-code/release-standards/SKILL.md +191 -0
- package/bundled/skills/claude-code/release-standards/changelog-format.md +239 -0
- package/bundled/skills/claude-code/release-standards/release-workflow.md +337 -0
- package/bundled/skills/claude-code/release-standards/semantic-versioning.md +242 -0
- package/bundled/skills/claude-code/requirement-assistant/SKILL.md +222 -0
- package/bundled/skills/claude-code/requirement-assistant/requirement-checklist.md +317 -0
- package/bundled/skills/claude-code/requirement-assistant/requirement-writing.md +391 -0
- package/bundled/skills/claude-code/spec-driven-dev/SKILL.md +238 -0
- package/bundled/skills/claude-code/tdd-assistant/SKILL.md +384 -0
- package/bundled/skills/claude-code/tdd-assistant/language-examples.md +1276 -0
- package/bundled/skills/claude-code/tdd-assistant/tdd-workflow.md +659 -0
- package/bundled/skills/claude-code/test-coverage-assistant/SKILL.md +277 -0
- package/bundled/skills/claude-code/testing-guide/SKILL.md +317 -0
- package/bundled/skills/claude-code/testing-guide/testing-pyramid.md +440 -0
- package/package.json +4 -2
- package/src/commands/check.js +38 -6
- package/src/commands/init.js +20 -6
- package/src/commands/list.js +7 -2
- package/src/commands/skills.js +0 -2
- package/src/commands/update.js +271 -0
- package/src/i18n/messages.js +161 -11
- package/src/utils/copier.js +63 -10
- package/src/utils/skills-installer.js +47 -11
- package/standards-registry.json +6 -3
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
# Testing Pyramid Guide
|
|
2
|
+
|
|
3
|
+
> **Language**: English | [繁體中文](../../../locales/zh-TW/skills/claude-code/testing-guide/testing-pyramid.md)
|
|
4
|
+
|
|
5
|
+
**Version**: 1.1.0
|
|
6
|
+
**Last Updated**: 2025-12-29
|
|
7
|
+
**Applicability**: Claude Code Skills
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
This document provides detailed guidelines for the testing pyramid and test writing best practices. It supports both ISTQB and Industry Pyramid frameworks.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Framework Selection
|
|
18
|
+
|
|
19
|
+
| Framework | Levels | Best For |
|
|
20
|
+
|-----------|--------|----------|
|
|
21
|
+
| **ISTQB** | UT → IT/SIT → ST → AT/UAT | Enterprise, compliance, formal QA |
|
|
22
|
+
| **Industry Pyramid** | UT (70%) → IT (20%) → E2E (10%) | Agile, DevOps, CI/CD |
|
|
23
|
+
|
|
24
|
+
**Note on Integration Testing abbreviation:**
|
|
25
|
+
- **IT** (Integration Testing): Agile/DevOps communities
|
|
26
|
+
- **SIT** (System Integration Testing): Enterprise/ISTQB contexts
|
|
27
|
+
- Both refer to the same testing level
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Unit Testing (UT)
|
|
32
|
+
|
|
33
|
+
### Definition
|
|
34
|
+
|
|
35
|
+
Tests individual functions, methods, or classes in isolation from external dependencies.
|
|
36
|
+
|
|
37
|
+
### Characteristics
|
|
38
|
+
|
|
39
|
+
- **Isolated**: No database, network, or file system access
|
|
40
|
+
- **Fast**: Each test < 100ms
|
|
41
|
+
- **Deterministic**: Same input always produces same output
|
|
42
|
+
|
|
43
|
+
### Scope
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
✅ Single function/method
|
|
47
|
+
✅ Single class
|
|
48
|
+
✅ Pure business logic
|
|
49
|
+
✅ Data transformations
|
|
50
|
+
✅ Validation rules
|
|
51
|
+
|
|
52
|
+
❌ Database queries
|
|
53
|
+
❌ External API calls
|
|
54
|
+
❌ File I/O operations
|
|
55
|
+
❌ Multi-class interactions
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Example
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
describe('UserValidator', () => {
|
|
62
|
+
let validator: UserValidator;
|
|
63
|
+
|
|
64
|
+
beforeEach(() => {
|
|
65
|
+
validator = new UserValidator();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('should return true for valid email format', () => {
|
|
69
|
+
const result = validator.validateEmail('user@example.com');
|
|
70
|
+
expect(result).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('should return false for invalid email format', () => {
|
|
74
|
+
const result = validator.validateEmail('invalid-email');
|
|
75
|
+
expect(result).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Integration Testing (IT/SIT)
|
|
83
|
+
|
|
84
|
+
### Definition
|
|
85
|
+
|
|
86
|
+
Tests interactions between multiple components, modules, or external systems.
|
|
87
|
+
|
|
88
|
+
**Abbreviation Note:**
|
|
89
|
+
- **IT** (Integration Testing): Common in Agile/DevOps communities (Martin Fowler, Google)
|
|
90
|
+
- **SIT** (System Integration Testing): Common in Enterprise/ISTQB contexts
|
|
91
|
+
- Both terms refer to the same testing concept
|
|
92
|
+
|
|
93
|
+
### When Integration Tests Are Required
|
|
94
|
+
|
|
95
|
+
| Scenario | Reason |
|
|
96
|
+
|----------|--------|
|
|
97
|
+
| Query predicates | Mocks cannot verify filter expressions |
|
|
98
|
+
| Entity relationships | Verify foreign key correctness |
|
|
99
|
+
| Composite keys | In-memory DB may differ from real DB |
|
|
100
|
+
| Field mapping | DTO ↔ Entity transformations |
|
|
101
|
+
| Pagination | Row ordering and counting |
|
|
102
|
+
| Transactions | Rollback behavior |
|
|
103
|
+
|
|
104
|
+
**Decision Rule**: If your unit test uses a wildcard matcher (`any()`, `It.IsAny<>`, `Arg.Any<>`) for a query/filter parameter, that functionality MUST have an integration test.
|
|
105
|
+
|
|
106
|
+
### Characteristics
|
|
107
|
+
|
|
108
|
+
- **Component Integration**: Tests module boundaries
|
|
109
|
+
- **Real Dependencies**: Uses actual databases, APIs (often containerized)
|
|
110
|
+
- **Slower**: Each test typically 1-10 seconds
|
|
111
|
+
|
|
112
|
+
### Scope
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
✅ Database CRUD operations
|
|
116
|
+
✅ Repository + Database
|
|
117
|
+
✅ Service + Repository
|
|
118
|
+
✅ API endpoint + Service layer
|
|
119
|
+
✅ Message queue producers/consumers
|
|
120
|
+
✅ Cache read/write operations
|
|
121
|
+
|
|
122
|
+
❌ Full user workflows
|
|
123
|
+
❌ Cross-service communication
|
|
124
|
+
❌ UI interactions
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Example
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
describe('UserRepository Integration', () => {
|
|
131
|
+
let repository: UserRepository;
|
|
132
|
+
let dbContext: TestDbContext;
|
|
133
|
+
|
|
134
|
+
beforeEach(async () => {
|
|
135
|
+
dbContext = await TestDbContext.create();
|
|
136
|
+
repository = new UserRepository(dbContext);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
afterEach(async () => {
|
|
140
|
+
await dbContext.dispose();
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('should persist user to database', async () => {
|
|
144
|
+
const user = { name: 'Test User', email: 'test@example.com' };
|
|
145
|
+
|
|
146
|
+
await repository.create(user);
|
|
147
|
+
const saved = await repository.getById(user.id);
|
|
148
|
+
|
|
149
|
+
expect(saved).not.toBeNull();
|
|
150
|
+
expect(saved.name).toBe('Test User');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## System Testing (ST)
|
|
158
|
+
|
|
159
|
+
### Definition
|
|
160
|
+
|
|
161
|
+
Tests the complete integrated system to verify it meets specified requirements.
|
|
162
|
+
|
|
163
|
+
### Characteristics
|
|
164
|
+
|
|
165
|
+
- **Complete System**: All components deployed and integrated
|
|
166
|
+
- **Requirement-Based**: Tests against functional specifications
|
|
167
|
+
- **Production-Like**: Uses environment similar to production
|
|
168
|
+
|
|
169
|
+
### Scope
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
✅ Complete API workflows
|
|
173
|
+
✅ Cross-service transactions
|
|
174
|
+
✅ Data flow through entire system
|
|
175
|
+
✅ Security requirements
|
|
176
|
+
✅ Performance under load
|
|
177
|
+
✅ Error handling & recovery
|
|
178
|
+
|
|
179
|
+
❌ UI visual testing
|
|
180
|
+
❌ User journey simulations
|
|
181
|
+
❌ A/B testing scenarios
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Types
|
|
185
|
+
|
|
186
|
+
| Type | Description |
|
|
187
|
+
|------|-------------|
|
|
188
|
+
| Functional | Verify features work as specified |
|
|
189
|
+
| Performance | Load, stress, scalability testing |
|
|
190
|
+
| Security | Penetration, vulnerability scanning |
|
|
191
|
+
| Reliability | Failover, recovery, stability |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## End-to-End Testing (E2E)
|
|
196
|
+
|
|
197
|
+
### Definition
|
|
198
|
+
|
|
199
|
+
Tests complete user workflows from the user interface through all system layers.
|
|
200
|
+
|
|
201
|
+
### Characteristics
|
|
202
|
+
|
|
203
|
+
- **User Perspective**: Simulates real user interactions
|
|
204
|
+
- **Full Stack**: UI → API → Database → External Services
|
|
205
|
+
- **Slowest**: Each test typically 30 seconds to several minutes
|
|
206
|
+
|
|
207
|
+
### Scope
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
✅ Critical user journeys
|
|
211
|
+
✅ Login/Authentication flows
|
|
212
|
+
✅ Core business transactions
|
|
213
|
+
✅ Cross-browser functionality
|
|
214
|
+
✅ Smoke tests for deployments
|
|
215
|
+
|
|
216
|
+
❌ Every possible user path
|
|
217
|
+
❌ Edge cases (use UT/IT)
|
|
218
|
+
❌ Performance benchmarking
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Example (Playwright)
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
test.describe('User Registration Journey', () => {
|
|
225
|
+
test('should complete registration and login', async ({ page }) => {
|
|
226
|
+
// Navigate to registration
|
|
227
|
+
await page.goto('/register');
|
|
228
|
+
|
|
229
|
+
// Fill form
|
|
230
|
+
await page.fill('[data-testid="email"]', 'new@example.com');
|
|
231
|
+
await page.fill('[data-testid="password"]', 'SecurePass123!');
|
|
232
|
+
await page.click('[data-testid="register-button"]');
|
|
233
|
+
|
|
234
|
+
// Verify success
|
|
235
|
+
await expect(page.locator('[data-testid="success-message"]'))
|
|
236
|
+
.toContainText('Registration successful');
|
|
237
|
+
|
|
238
|
+
// Login with new account
|
|
239
|
+
await page.goto('/login');
|
|
240
|
+
await page.fill('[data-testid="email"]', 'new@example.com');
|
|
241
|
+
await page.fill('[data-testid="password"]', 'SecurePass123!');
|
|
242
|
+
await page.click('[data-testid="login-button"]');
|
|
243
|
+
|
|
244
|
+
// Verify dashboard
|
|
245
|
+
await expect(page).toHaveURL('/dashboard');
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Test Environment Isolation
|
|
253
|
+
|
|
254
|
+
### Virtual Environments
|
|
255
|
+
|
|
256
|
+
| Language | Tools | Lock File |
|
|
257
|
+
|----------|-------|----------|
|
|
258
|
+
| Python | venv, poetry | requirements.txt, poetry.lock |
|
|
259
|
+
| Node.js | nvm + npm | package-lock.json |
|
|
260
|
+
| Ruby | rbenv, bundler | Gemfile.lock |
|
|
261
|
+
| Java | SDKMAN, Maven | pom.xml |
|
|
262
|
+
| .NET | dotnet SDK | packages.lock.json |
|
|
263
|
+
| Go | go mod | go.sum |
|
|
264
|
+
|
|
265
|
+
### Containerized Testing
|
|
266
|
+
|
|
267
|
+
| Test Level | Container Usage |
|
|
268
|
+
|------------|----------------|
|
|
269
|
+
| UT | ❌ Not needed - use mocks |
|
|
270
|
+
| IT | ✅ Testcontainers for DB, cache |
|
|
271
|
+
| ST | ✅ Docker Compose for full env |
|
|
272
|
+
| E2E | ✅ Full containerized stack |
|
|
273
|
+
|
|
274
|
+
### Testcontainers Example
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
import { PostgreSqlContainer } from 'testcontainers';
|
|
278
|
+
|
|
279
|
+
describe('Database Integration', () => {
|
|
280
|
+
let container: PostgreSqlContainer;
|
|
281
|
+
|
|
282
|
+
beforeAll(async () => {
|
|
283
|
+
container = await new PostgreSqlContainer().start();
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
afterAll(async () => {
|
|
287
|
+
await container.stop();
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
test('should connect to database', async () => {
|
|
291
|
+
const connectionUrl = container.getConnectionUri();
|
|
292
|
+
// Use connectionUrl for tests
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Mock Limitations
|
|
300
|
+
|
|
301
|
+
### Query Predicate Verification
|
|
302
|
+
|
|
303
|
+
When mocking repository methods that accept query predicates (e.g., lambda expressions, filter functions), using wildcard matchers like `any()` ignores the actual query logic, allowing incorrect queries to pass unit tests.
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
// ❌ Jest mock ignores actual filter
|
|
307
|
+
jest.spyOn(repo, 'findBy').mockResolvedValue(users);
|
|
308
|
+
|
|
309
|
+
// ✓ Verify with integration test
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**Rule of Thumb**: If your unit test mocks a method that accepts a query/filter/predicate parameter, you MUST have a corresponding integration test to verify the query logic.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Test Data Management
|
|
317
|
+
|
|
318
|
+
### Principles
|
|
319
|
+
|
|
320
|
+
1. **Isolation**: Each test manages its own data
|
|
321
|
+
2. **Cleanup**: Tests clean up after themselves
|
|
322
|
+
3. **Determinism**: Tests don't depend on shared state
|
|
323
|
+
4. **Readability**: Test data clearly shows intent
|
|
324
|
+
|
|
325
|
+
### Distinct Identifiers
|
|
326
|
+
|
|
327
|
+
When entities have both a surrogate key (auto-generated ID) and a business identifier (e.g., employee number, department code), test data MUST use different values for each.
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
// ❌ Wrong: id equals businessCode - mapping errors go undetected
|
|
331
|
+
const dept = { id: 1, businessCode: 1 };
|
|
332
|
+
|
|
333
|
+
// ✓ Correct: distinct values catch field mapping bugs
|
|
334
|
+
const dept = { id: 1, businessCode: 1001 };
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Composite Keys
|
|
338
|
+
|
|
339
|
+
For entities with composite primary keys, ensure each record has a unique key combination.
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
// ❌ Key collision - same (id, timestamp) combination
|
|
343
|
+
const record1 = { id: 0, timestamp: now };
|
|
344
|
+
const record2 = { id: 0, timestamp: now }; // Conflict!
|
|
345
|
+
|
|
346
|
+
// ✓ Unique combinations
|
|
347
|
+
const record1 = { id: 0, timestamp: addSeconds(now, 1) };
|
|
348
|
+
const record2 = { id: 0, timestamp: addSeconds(now, 2) };
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### Builder Pattern
|
|
352
|
+
|
|
353
|
+
```typescript
|
|
354
|
+
class UserBuilder {
|
|
355
|
+
private name = 'Default User';
|
|
356
|
+
private email = 'default@example.com';
|
|
357
|
+
private isActive = true;
|
|
358
|
+
|
|
359
|
+
withName(name: string): this {
|
|
360
|
+
this.name = name;
|
|
361
|
+
return this;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
withEmail(email: string): this {
|
|
365
|
+
this.email = email;
|
|
366
|
+
return this;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
inactive(): this {
|
|
370
|
+
this.isActive = false;
|
|
371
|
+
return this;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
build(): User {
|
|
375
|
+
return { name: this.name, email: this.email, isActive: this.isActive };
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Usage
|
|
380
|
+
const activeUser = new UserBuilder().withName('Active').build();
|
|
381
|
+
const inactiveUser = new UserBuilder().inactive().build();
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Quick Reference Card
|
|
387
|
+
|
|
388
|
+
### Industry Pyramid (Recommended for Agile/DevOps)
|
|
389
|
+
|
|
390
|
+
```
|
|
391
|
+
┌──────────┬──────────────────────────────────────────┐
|
|
392
|
+
│ UT │ Single unit, isolated, mocked deps, < 100ms │
|
|
393
|
+
├──────────┼──────────────────────────────────────────┤
|
|
394
|
+
│ IT/SIT │ Component integration, real DB, 1-10 sec │
|
|
395
|
+
├──────────┼──────────────────────────────────────────┤
|
|
396
|
+
│ E2E │ User journeys, UI to DB, critical paths only │
|
|
397
|
+
└──────────┴──────────────────────────────────────────┘
|
|
398
|
+
|
|
399
|
+
Ratio: UT 70% | IT 20% | E2E 10%
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### ISTQB Framework (For Enterprise/Compliance)
|
|
403
|
+
|
|
404
|
+
```
|
|
405
|
+
┌──────────┬──────────────────────────────────────────┐
|
|
406
|
+
│ UT │ Component testing, isolated units │
|
|
407
|
+
├──────────┼──────────────────────────────────────────┤
|
|
408
|
+
│ IT/SIT │ Integration testing, component interactions │
|
|
409
|
+
├──────────┼──────────────────────────────────────────┤
|
|
410
|
+
│ ST │ System testing, requirement validation │
|
|
411
|
+
├──────────┼──────────────────────────────────────────┤
|
|
412
|
+
│ AT/UAT │ Acceptance testing, business validation │
|
|
413
|
+
└──────────┴──────────────────────────────────────────┘
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
**Mock Rule**: If UT mocks query params → IT is REQUIRED
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## Related Standards
|
|
421
|
+
|
|
422
|
+
- [Testing Standards](../../../core/testing-standards.md)
|
|
423
|
+
- [Code Review Checklist](../../../core/code-review-checklist.md)
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## Version History
|
|
428
|
+
|
|
429
|
+
| Version | Date | Changes |
|
|
430
|
+
|---------|------|---------|
|
|
431
|
+
| 1.1.0 | 2025-12-29 | Added: Framework Selection (ISTQB/Industry Pyramid), IT/SIT abbreviation note |
|
|
432
|
+
| 1.0.0 | 2025-12-24 | Added: Standard sections (Purpose, Related Standards, Version History, License) |
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## License
|
|
437
|
+
|
|
438
|
+
This document is released under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
|
|
439
|
+
|
|
440
|
+
**Source**: [universal-dev-standards](https://github.com/AsiaOstrich/universal-dev-standards)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "universal-dev-standards",
|
|
3
|
-
"version": "3.5.1-beta.
|
|
3
|
+
"version": "3.5.1-beta.11",
|
|
4
4
|
"description": "CLI tool for adopting Universal Development Standards",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"documentation",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"files": [
|
|
30
30
|
"bin",
|
|
31
31
|
"src",
|
|
32
|
+
"bundled",
|
|
32
33
|
"standards-registry.json",
|
|
33
34
|
"README.md"
|
|
34
35
|
],
|
|
@@ -42,7 +43,8 @@
|
|
|
42
43
|
"test:e2e": "vitest run tests/e2e/",
|
|
43
44
|
"test:all": "vitest run && vitest run tests/e2e/",
|
|
44
45
|
"lint": "eslint src/",
|
|
45
|
-
"prepare": "node ../scripts/setup-husky.mjs"
|
|
46
|
+
"prepare": "node ../scripts/setup-husky.mjs",
|
|
47
|
+
"prepack": "node scripts/prepack.mjs"
|
|
46
48
|
},
|
|
47
49
|
"dependencies": {
|
|
48
50
|
"chalk": "^5.3.0",
|
package/src/commands/check.js
CHANGED
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
extractMarkedContent
|
|
34
34
|
} from '../utils/integration-generator.js';
|
|
35
35
|
import { checkForUpdates } from '../utils/npm-registry.js';
|
|
36
|
-
import { t } from '../i18n/messages.js';
|
|
36
|
+
import { t, getLanguage } from '../i18n/messages.js';
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
39
|
* Check command - verify adoption status
|
|
@@ -72,7 +72,12 @@ export async function checkCommand(options = {}) {
|
|
|
72
72
|
console.log(chalk.green(msg.standardsInitialized));
|
|
73
73
|
console.log();
|
|
74
74
|
console.log(chalk.cyan(msg.adoptionStatus));
|
|
75
|
-
|
|
75
|
+
const lang = getLanguage();
|
|
76
|
+
const zhName = lang === 'zh-cn' ? levelInfo.nameZhCn : levelInfo.nameZh;
|
|
77
|
+
const levelDisplay = lang === 'en'
|
|
78
|
+
? `${manifest.level} - ${levelInfo.name}`
|
|
79
|
+
: `${manifest.level} - ${levelInfo.name} (${zhName})`;
|
|
80
|
+
console.log(chalk.gray(` ${common.level}: ${levelDisplay}`));
|
|
76
81
|
console.log(chalk.gray(` ${msg.installed}: ${manifest.upstream.installed}`));
|
|
77
82
|
console.log(chalk.gray(` ${common.version}: ${manifest.upstream.version}`));
|
|
78
83
|
console.log();
|
|
@@ -240,7 +245,7 @@ export async function checkCommand(options = {}) {
|
|
|
240
245
|
checkIntegrationFiles(manifest, projectPath, msg);
|
|
241
246
|
|
|
242
247
|
// Skills status
|
|
243
|
-
displaySkillsStatus(manifest, projectPath, msg);
|
|
248
|
+
const { missingSkills, missingCommands } = displaySkillsStatus(manifest, projectPath, msg);
|
|
244
249
|
|
|
245
250
|
// Coverage report
|
|
246
251
|
displayCoverageReport(manifest, msg, common);
|
|
@@ -253,6 +258,13 @@ export async function checkCommand(options = {}) {
|
|
|
253
258
|
} else {
|
|
254
259
|
console.log(chalk.yellow(msg.issuesDetected));
|
|
255
260
|
}
|
|
261
|
+
|
|
262
|
+
// Show hint if Skills/Commands are missing (check is read-only, no installation)
|
|
263
|
+
if (missingSkills.length > 0 || missingCommands.length > 0) {
|
|
264
|
+
console.log();
|
|
265
|
+
console.log(chalk.cyan(msg.missingSkillsHint || 'Tip: Run `uds update` to install missing Skills/Commands'));
|
|
266
|
+
}
|
|
267
|
+
|
|
256
268
|
console.log();
|
|
257
269
|
}
|
|
258
270
|
|
|
@@ -643,18 +655,21 @@ async function migrateToHashBasedTracking(projectPath, manifest) {
|
|
|
643
655
|
}
|
|
644
656
|
|
|
645
657
|
/**
|
|
646
|
-
* Display skills status
|
|
658
|
+
* Display skills status and return missing Skills/Commands info
|
|
659
|
+
* @returns {{missingSkills: Array, missingCommands: Array}}
|
|
647
660
|
*/
|
|
648
661
|
function displaySkillsStatus(manifest, projectPath, msg) {
|
|
649
662
|
console.log(chalk.cyan(msg.skillsStatus));
|
|
650
663
|
|
|
651
664
|
const aiTools = manifest.aiTools || [];
|
|
665
|
+
const missingSkills = [];
|
|
666
|
+
const missingCommands = [];
|
|
652
667
|
|
|
653
668
|
// If no AI tools configured, show basic info
|
|
654
669
|
if (aiTools.length === 0) {
|
|
655
670
|
console.log(chalk.gray(` ${msg.noAiToolsConfigured || 'No AI tools configured'}`));
|
|
656
671
|
console.log();
|
|
657
|
-
return;
|
|
672
|
+
return { missingSkills, missingCommands };
|
|
658
673
|
}
|
|
659
674
|
|
|
660
675
|
// Check for Marketplace installation (Claude Code specific)
|
|
@@ -696,7 +711,10 @@ function displaySkillsStatus(manifest, projectPath, msg) {
|
|
|
696
711
|
const projectSkillsInfo = getInstalledSkillsInfoForAgent(tool, 'project', projectPath);
|
|
697
712
|
const userSkillsInfo = getInstalledSkillsInfoForAgent(tool, 'user', projectPath);
|
|
698
713
|
|
|
699
|
-
if
|
|
714
|
+
// Check if using marketplace for Claude Code
|
|
715
|
+
const usingMarketplace = isMarketplace && tool === 'claude-code';
|
|
716
|
+
|
|
717
|
+
if (projectSkillsInfo?.installed || userSkillsInfo?.installed || usingMarketplace) {
|
|
700
718
|
console.log(chalk.green(` ✓ Skills ${msg.installed || 'installed'}:`));
|
|
701
719
|
if (userSkillsInfo?.installed) {
|
|
702
720
|
console.log(chalk.gray(` - ${msg.skillsGlobal || 'User level'}: ${userSkillsInfo.path}`));
|
|
@@ -719,6 +737,12 @@ function displaySkillsStatus(manifest, projectPath, msg) {
|
|
|
719
737
|
console.log(chalk.gray(` ${msg.canUseFallback || 'Can use fallback'}: ${config.fallbackSkillsPath}`));
|
|
720
738
|
}
|
|
721
739
|
}
|
|
740
|
+
// Track missing Skills
|
|
741
|
+
missingSkills.push({
|
|
742
|
+
agent: tool,
|
|
743
|
+
displayName,
|
|
744
|
+
paths: config.skills
|
|
745
|
+
});
|
|
722
746
|
}
|
|
723
747
|
|
|
724
748
|
// Check Commands installation for this agent
|
|
@@ -732,6 +756,12 @@ function displaySkillsStatus(manifest, projectPath, msg) {
|
|
|
732
756
|
}
|
|
733
757
|
} else {
|
|
734
758
|
console.log(chalk.gray(` ○ Commands: ${msg.notInstalled || 'Not installed'}`));
|
|
759
|
+
// Track missing Commands
|
|
760
|
+
missingCommands.push({
|
|
761
|
+
agent: tool,
|
|
762
|
+
displayName,
|
|
763
|
+
path: config.commands.project
|
|
764
|
+
});
|
|
735
765
|
}
|
|
736
766
|
}
|
|
737
767
|
}
|
|
@@ -753,6 +783,8 @@ function displaySkillsStatus(manifest, projectPath, msg) {
|
|
|
753
783
|
}
|
|
754
784
|
|
|
755
785
|
console.log();
|
|
786
|
+
|
|
787
|
+
return { missingSkills, missingCommands };
|
|
756
788
|
}
|
|
757
789
|
|
|
758
790
|
/**
|
package/src/commands/init.js
CHANGED
|
@@ -384,6 +384,9 @@ export async function initCommand(options) {
|
|
|
384
384
|
return k;
|
|
385
385
|
});
|
|
386
386
|
|
|
387
|
+
// Assign normalized AI tools to manifest variable
|
|
388
|
+
aiTools = aiToolsNormalized;
|
|
389
|
+
|
|
387
390
|
// Check if only skills-compatible tools are detected
|
|
388
391
|
const hasSkillsCompatibleTool = aiToolsNormalized.some(t => t === 'claude-code' || t === 'opencode');
|
|
389
392
|
const onlySkillsCompatibleTools = aiToolsNormalized.every(t => t === 'claude-code' || t === 'opencode');
|
|
@@ -462,6 +465,17 @@ export async function initCommand(options) {
|
|
|
462
465
|
};
|
|
463
466
|
}
|
|
464
467
|
}
|
|
468
|
+
|
|
469
|
+
// Auto-install commands for detected agents that support commands
|
|
470
|
+
// This matches the interactive mode behavior where commands are checked by default
|
|
471
|
+
const commandsSupportedAgents = aiToolsNormalized.filter(tool => {
|
|
472
|
+
const config = getAgentConfig(tool);
|
|
473
|
+
return config?.commands !== null;
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
if (commandsSupportedAgents.length > 0) {
|
|
477
|
+
skillsConfig.commandsInstallations = commandsSupportedAgents;
|
|
478
|
+
}
|
|
465
479
|
}
|
|
466
480
|
|
|
467
481
|
// Configuration summary
|
|
@@ -912,13 +926,13 @@ export async function initCommand(options) {
|
|
|
912
926
|
// Create manifest
|
|
913
927
|
const repoInfo = getRepositoryInfo();
|
|
914
928
|
|
|
915
|
-
//
|
|
916
|
-
|
|
929
|
+
// Always record options as user preferences (for Skills and future updates)
|
|
930
|
+
// Even when standards aren't copied locally (minimal scope), options should be preserved
|
|
917
931
|
const manifestOptions = {
|
|
918
|
-
workflow:
|
|
919
|
-
merge_strategy:
|
|
920
|
-
commit_language:
|
|
921
|
-
test_levels:
|
|
932
|
+
workflow: standardOptions.workflow || null,
|
|
933
|
+
merge_strategy: standardOptions.merge_strategy || null,
|
|
934
|
+
commit_language: standardOptions.commit_language || null,
|
|
935
|
+
test_levels: standardOptions.test_levels || []
|
|
922
936
|
};
|
|
923
937
|
|
|
924
938
|
// Build integrationConfigs for manifest
|
package/src/commands/list.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getCategoryInfo,
|
|
8
8
|
getRepositoryInfo
|
|
9
9
|
} from '../utils/registry.js';
|
|
10
|
-
import { t } from '../i18n/messages.js';
|
|
10
|
+
import { t, getLanguage } from '../i18n/messages.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* List command - displays available standards
|
|
@@ -36,7 +36,12 @@ export function listCommand(options) {
|
|
|
36
36
|
}
|
|
37
37
|
standards = getStandardsByLevel(levelNum);
|
|
38
38
|
const levelInfo = getLevelInfo(levelNum);
|
|
39
|
-
|
|
39
|
+
const lang = getLanguage();
|
|
40
|
+
const zhName = lang === 'zh-cn' ? levelInfo.nameZhCn : levelInfo.nameZh;
|
|
41
|
+
const levelDisplay = lang === 'en'
|
|
42
|
+
? `${levelNum}: ${levelInfo.name}`
|
|
43
|
+
: `${levelNum}: ${levelInfo.name} (${zhName})`;
|
|
44
|
+
console.log(chalk.cyan(`${msg.showingLevel} ${levelDisplay}`));
|
|
40
45
|
console.log(chalk.gray(levelInfo.description));
|
|
41
46
|
console.log();
|
|
42
47
|
} else if (category) {
|