universal-dev-standards 5.17.0 → 6.1.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 +13 -135
- package/bundled/ai/options/commit-message/bilingual.ai.yaml +19 -1
- package/bundled/ai/standards/acceptance-criteria-traceability.ai.yaml +13 -4
- package/bundled/ai/standards/accessibility-standards.ai.yaml +1 -1
- package/bundled/ai/standards/ai-response-navigation.ai.yaml +15 -2
- package/bundled/ai/standards/api-design-standards.ai.yaml +27 -4
- package/bundled/ai/standards/behavior-snapshot.ai.yaml +86 -9
- package/bundled/ai/standards/checkin-standards.ai.yaml +3 -3
- package/bundled/ai/standards/code-review.ai.yaml +2 -2
- package/bundled/ai/standards/context-aware-loading.ai.yaml +3 -3
- package/bundled/ai/standards/data-migration-testing.ai.yaml +79 -3
- package/bundled/ai/standards/deprecation-standards.ai.yaml +10 -2
- package/bundled/ai/standards/developer-memory.ai.yaml +4 -3
- package/bundled/ai/standards/documentation-writing-standards.ai.yaml +1 -1
- package/bundled/ai/standards/flow-based-testing.ai.yaml +2 -2
- package/bundled/ai/standards/forward-derivation-standards.ai.yaml +26 -2
- package/bundled/ai/standards/frontend-design-standards.ai.yaml +33 -3
- package/bundled/ai/standards/full-coverage-testing.ai.yaml +34 -2
- package/bundled/ai/standards/git-worktree.ai.yaml +3 -3
- package/bundled/ai/standards/logging.ai.yaml +97 -3
- package/bundled/ai/standards/mock-boundary.ai.yaml +48 -2
- package/bundled/ai/standards/model-provenance.ai.yaml +297 -0
- package/bundled/ai/standards/model-selection.ai.yaml +11 -2
- package/bundled/ai/standards/observability-standards.ai.yaml +10 -0
- package/bundled/ai/standards/performance-standards.ai.yaml +46 -1
- package/bundled/ai/standards/pii-classification.ai.yaml +15 -1
- package/bundled/ai/standards/pipeline-security-gates.ai.yaml +10 -0
- package/bundled/ai/standards/privacy-standards.ai.yaml +2 -2
- package/bundled/ai/standards/project-context-memory.ai.yaml +2 -2
- package/bundled/ai/standards/push-standards.ai.yaml +14 -3
- package/bundled/ai/standards/refactoring-standards.ai.yaml +68 -3
- package/bundled/ai/standards/requirement-engineering.ai.yaml +42 -3
- package/bundled/ai/standards/resource-cost-boundary.ai.yaml +279 -0
- package/bundled/ai/standards/reverse-engineering-standards.ai.yaml +55 -2
- package/bundled/ai/standards/security-testing.ai.yaml +13 -2
- package/bundled/ai/standards/self-review-protocol.ai.yaml +15 -10
- package/bundled/ai/standards/skill-standard-alignment-check.ai.yaml +37 -2
- package/bundled/ai/standards/user-journey-testing.ai.yaml +107 -0
- package/bundled/ai/standards/verification-evidence.ai.yaml +88 -5
- package/bundled/ai/standards/verification-oracle.ai.yaml +278 -0
- package/bundled/ai/standards/versioning.ai.yaml +32 -38
- package/bundled/core/acceptance-criteria-traceability.md +15 -5
- package/bundled/core/accessibility-standards.md +8 -4
- package/bundled/core/ai-friendly-architecture.md +1 -1
- package/bundled/core/ai-response-navigation.md +31 -3
- package/bundled/core/anti-sycophancy-prompting.md +1 -1
- package/bundled/core/api-design-standards.md +92 -7
- package/bundled/core/audit-trail.md +119 -0
- package/bundled/core/behavior-snapshot.md +94 -7
- package/bundled/core/browser-compatibility-standards.md +15 -2
- package/bundled/core/checkin-standards.md +10 -3
- package/bundled/core/code-review-checklist.md +10 -2
- package/bundled/core/container-image-standards.md +97 -0
- package/bundled/core/context-aware-loading.md +2 -2
- package/bundled/core/cost-budget-test.md +1 -1
- package/bundled/core/cross-flow-regression.md +3 -2
- package/bundled/core/data-contract.md +104 -0
- package/bundled/core/data-migration-testing.md +90 -0
- package/bundled/core/data-pipeline.md +113 -0
- package/bundled/core/deprecation-standards.md +16 -2
- package/bundled/core/developer-memory.md +13 -8
- package/bundled/core/documentation-writing-standards.md +2 -2
- package/bundled/core/error-code-standards.md +4 -3
- package/bundled/core/feature-discovery-standards.md +191 -0
- package/bundled/core/flaky-test-management.md +1 -1
- package/bundled/core/flow-based-testing.md +3 -3
- package/bundled/core/forward-derivation-standards.md +33 -5
- package/bundled/core/frontend-design-standards.md +93 -4
- package/bundled/core/full-coverage-testing.md +72 -0
- package/bundled/core/git-worktree.md +4 -4
- package/bundled/core/guides/performance-guide.md +1 -1
- package/bundled/core/guides/security-guide.md +1 -1
- package/bundled/core/health-check-standards.md +2 -2
- package/bundled/core/iac-design-principles.md +97 -0
- package/bundled/core/incident-response.md +119 -0
- package/bundled/core/license-compliance.md +2 -0
- package/bundled/core/logging-standards.md +78 -2
- package/bundled/core/mock-boundary.md +54 -2
- package/bundled/core/model-provenance.md +181 -0
- package/bundled/core/model-selection.md +27 -2
- package/bundled/core/multi-environment-e2e-testing.md +195 -0
- package/bundled/core/packaging-standards.md +1 -0
- package/bundled/core/performance-standards.md +96 -2
- package/bundled/core/pii-classification.md +148 -0
- package/bundled/core/pipeline-security-gates.md +22 -2
- package/bundled/core/postmortem-standards.md +2 -0
- package/bundled/core/prd-standards.md +91 -0
- package/bundled/core/privacy-standards.md +14 -3
- package/bundled/core/product-metrics-standards.md +100 -0
- package/bundled/core/project-context-memory.md +8 -2
- package/bundled/core/prompt-regression.md +1 -1
- package/bundled/core/push-standards.md +82 -0
- package/bundled/core/refactoring-standards.md +44 -3
- package/bundled/core/replay-test.md +1 -1
- package/bundled/core/requirement-engineering.md +2 -2
- package/bundled/core/resource-cost-boundary.md +180 -0
- package/bundled/core/reverse-engineering-standards.md +66 -2
- package/bundled/core/runbook.md +113 -0
- package/bundled/core/schema-evolution.md +105 -0
- package/bundled/core/secret-management-standards.md +110 -0
- package/bundled/core/security-testing.md +26 -2
- package/bundled/core/self-review-protocol.md +15 -10
- package/bundled/core/skill-standard-alignment-check.md +53 -0
- package/bundled/core/slo-sli.md +109 -0
- package/bundled/core/smoke-test.md +1 -1
- package/bundled/core/tech-debt-standards.md +1 -1
- package/bundled/core/test-data-standards.md +2 -2
- package/bundled/core/user-journey-testing.md +102 -0
- package/bundled/core/user-story-mapping.md +96 -0
- package/bundled/core/verification-evidence.md +170 -10
- package/bundled/core/verification-oracle.md +167 -0
- package/bundled/core/versioning.md +133 -109
- package/bundled/locales/COVERAGE.md +94 -77
- package/bundled/locales/zh-CN/CHANGELOG.md +94 -6
- package/bundled/locales/zh-CN/CLAUDE.md +1 -1
- package/bundled/locales/zh-CN/MAINTENANCE.md +42 -661
- package/bundled/locales/zh-CN/README.md +25 -12
- package/bundled/locales/zh-CN/SECURITY.md +2 -2
- package/bundled/locales/zh-CN/adoption/DAILY-WORKFLOW-GUIDE.md +2 -2
- package/bundled/locales/zh-CN/ai/options/commit-message/bilingual.ai.yaml +6 -1
- package/bundled/locales/zh-CN/core/acceptance-criteria-traceability.md +4 -6
- package/bundled/locales/zh-CN/core/accessibility-standards.md +1 -1
- package/bundled/locales/zh-CN/core/adversarial-test.md +226 -0
- package/bundled/locales/zh-CN/core/agent-behavior-discipline.md +187 -0
- package/bundled/locales/zh-CN/core/ai-response-navigation.md +32 -6
- package/bundled/locales/zh-CN/core/anti-sycophancy-prompting.md +1 -1
- package/bundled/locales/zh-CN/core/api-design-standards.md +1 -1
- package/bundled/locales/zh-CN/core/behavior-snapshot.md +335 -0
- package/bundled/locales/zh-CN/core/browser-compatibility-standards.md +239 -0
- package/bundled/locales/zh-CN/core/cd-deployment-strategies.md +135 -0
- package/bundled/locales/zh-CN/core/chaos-injection-tests.md +130 -0
- package/bundled/locales/zh-CN/core/checkin-standards.md +1 -1
- package/bundled/locales/zh-CN/core/code-review-checklist.md +1 -1
- package/bundled/locales/zh-CN/core/container-security.md +535 -0
- package/bundled/locales/zh-CN/core/context-aware-loading.md +1 -1
- package/bundled/locales/zh-CN/core/contract-testing-standards.md +191 -0
- package/bundled/locales/zh-CN/core/cost-budget-test.md +86 -0
- package/bundled/locales/zh-CN/core/cross-flow-regression.md +200 -0
- package/bundled/locales/zh-CN/core/data-migration-testing.md +217 -0
- package/bundled/locales/zh-CN/core/deployment-standards.md +328 -9
- package/bundled/locales/zh-CN/core/deprecation-standards.md +1 -1
- package/bundled/locales/zh-CN/core/developer-memory.md +2 -2
- package/bundled/locales/zh-CN/core/disaster-recovery-drill.md +87 -0
- package/bundled/locales/zh-CN/core/documentation-structure.md +1 -1
- package/bundled/locales/zh-CN/core/documentation-writing-standards.md +1 -1
- package/bundled/locales/zh-CN/core/error-code-standards.md +2 -2
- package/bundled/locales/zh-CN/core/feature-manifest-standard.md +222 -0
- package/bundled/locales/zh-CN/core/flaky-test-management.md +87 -0
- package/bundled/locales/zh-CN/core/flow-based-testing.md +284 -0
- package/bundled/locales/zh-CN/core/forward-derivation-standards.md +3 -4
- package/bundled/locales/zh-CN/core/frontend-design-standards.md +1 -1
- package/bundled/locales/zh-CN/core/full-coverage-testing.md +269 -0
- package/bundled/locales/zh-CN/core/git-worktree.md +1 -1
- package/bundled/locales/zh-CN/core/governance-layer.md +160 -0
- package/bundled/locales/zh-CN/core/guides/performance-guide.md +515 -0
- package/bundled/locales/zh-CN/core/guides/security-guide.md +494 -0
- package/bundled/locales/zh-CN/core/knowledge-graph-memory.md +128 -0
- package/bundled/locales/zh-CN/core/license-compliance.md +131 -0
- package/bundled/locales/zh-CN/core/llm-output-validation.md +192 -0
- package/bundled/locales/zh-CN/core/logging-standards.md +205 -7
- package/bundled/locales/zh-CN/core/mock-boundary.md +161 -0
- package/bundled/locales/zh-CN/core/model-selection.md +28 -5
- package/bundled/locales/zh-CN/core/mutation-testing.md +106 -0
- package/bundled/locales/zh-CN/core/no-cicd-deployment.md +219 -0
- package/bundled/locales/zh-CN/core/packaging-standards.md +77 -5
- package/bundled/locales/zh-CN/core/pipeline-security-gates.md +146 -0
- package/bundled/locales/zh-CN/core/policy-as-code-testing.md +203 -0
- package/bundled/locales/zh-CN/core/privacy-standards.md +1 -1
- package/bundled/locales/zh-CN/core/project-context-memory.md +1 -1
- package/bundled/locales/zh-CN/core/prompt-regression.md +88 -0
- package/bundled/locales/zh-CN/core/property-based-testing.md +87 -0
- package/bundled/locales/zh-CN/core/release-quality-manifest.md +207 -0
- package/bundled/locales/zh-CN/core/release-readiness-gate.md +193 -0
- package/bundled/locales/zh-CN/core/replay-test.md +102 -0
- package/bundled/locales/zh-CN/core/requirement-engineering.md +1 -1
- package/bundled/locales/zh-CN/core/reverse-engineering-standards.md +46 -1
- package/bundled/locales/zh-CN/core/rollback-standards.md +120 -0
- package/bundled/locales/zh-CN/core/sast-advanced.md +309 -0
- package/bundled/locales/zh-CN/core/secure-op.md +328 -0
- package/bundled/locales/zh-CN/core/security-testing.md +113 -0
- package/bundled/locales/zh-CN/core/self-review-protocol.md +172 -0
- package/bundled/locales/zh-CN/core/server-ops-security.md +507 -0
- package/bundled/locales/zh-CN/core/smoke-test.md +79 -0
- package/bundled/locales/zh-CN/core/spec-driven-development.md +39 -3
- package/bundled/locales/zh-CN/core/supply-chain-attestation.md +131 -0
- package/bundled/locales/zh-CN/core/verification-evidence.md +252 -41
- package/bundled/locales/zh-CN/core/versioning.md +1 -1
- package/bundled/locales/zh-CN/docs/CHEATSHEET.md +36 -7
- package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +71 -53
- package/bundled/locales/zh-CN/docs/MIGRATION-v6.md +88 -0
- package/bundled/locales/zh-CN/docs/USAGE-MODES-COMPARISON.md +2 -2
- package/bundled/locales/zh-CN/docs/USER-MANUAL.md +14 -14
- package/bundled/locales/zh-CN/docs/specs/system/memory-adoption-strategy.md +105 -0
- package/bundled/locales/zh-CN/docs/user/FAQ.md +132 -0
- package/bundled/locales/zh-CN/docs/user/GETTING-STARTED.md +144 -0
- package/bundled/locales/zh-CN/docs/user/GLOSSARY.md +178 -0
- package/bundled/locales/zh-CN/docs/user/README.md +70 -0
- package/bundled/locales/zh-CN/docs/user/TROUBLESHOOTING.md +190 -0
- package/bundled/locales/zh-CN/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +1 -1
- package/bundled/locales/zh-CN/integrations/github-copilot/README.md +1 -1
- package/bundled/locales/zh-CN/integrations/github-copilot/skills-mapping.md +3 -3
- package/bundled/locales/zh-CN/integrations/opencode/skills-mapping.md +3 -3
- package/bundled/locales/zh-CN/methodologies/guides/sdd-guide.md +836 -0
- package/bundled/locales/zh-CN/options/changelog/auto-generated.md +166 -0
- package/bundled/locales/zh-CN/options/changelog/keep-a-changelog.md +140 -0
- package/bundled/locales/zh-CN/options/code-review/automated-review.md +214 -0
- package/bundled/locales/zh-CN/options/code-review/pair-programming.md +166 -0
- package/bundled/locales/zh-CN/options/code-review/pr-review.md +167 -0
- package/bundled/locales/zh-CN/options/commit-message/bilingual.md +10 -3
- package/bundled/locales/zh-CN/options/documentation/api-docs.md +191 -0
- package/bundled/locales/zh-CN/options/documentation/markdown-docs.md +150 -0
- package/bundled/locales/zh-CN/options/documentation/wiki-style.md +131 -0
- package/bundled/locales/zh-CN/options/project-structure/kotlin.md +144 -0
- package/bundled/locales/zh-CN/options/project-structure/php.md +168 -0
- package/bundled/locales/zh-CN/options/project-structure/ruby.md +156 -0
- package/bundled/locales/zh-CN/options/project-structure/rust.md +136 -0
- package/bundled/locales/zh-CN/options/project-structure/swift.md +165 -0
- package/bundled/locales/zh-CN/options/testing/contract-testing.md +237 -0
- package/bundled/locales/zh-CN/options/testing/industry-pyramid.md +200 -0
- package/bundled/locales/zh-CN/options/testing/istqb-framework.md +144 -0
- package/bundled/locales/zh-CN/options/testing/performance-testing.md +251 -0
- package/bundled/locales/zh-CN/options/testing/security-testing.md +192 -0
- package/bundled/locales/zh-CN/skills/README.md +89 -126
- package/bundled/locales/zh-CN/skills/ac-coverage/SKILL.md +5 -7
- package/bundled/locales/zh-CN/skills/adr-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/agents/code-architect.md +263 -0
- package/bundled/locales/zh-CN/skills/agents/doc-writer.md +410 -0
- package/bundled/locales/zh-CN/skills/agents/reviewer.md +357 -0
- package/bundled/locales/zh-CN/skills/agents/spec-analyst.md +410 -0
- package/bundled/locales/zh-CN/skills/agents/test-specialist.md +368 -0
- package/bundled/locales/zh-CN/skills/ai-collaboration-standards/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/ai-friendly-architecture/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/ai-instruction-standards/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
- package/bundled/locales/zh-CN/skills/atdd-assistant/atdd-workflow.md +3 -4
- package/bundled/locales/zh-CN/skills/audit-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/bdd-assistant/guide.md +1 -2
- package/bundled/locales/zh-CN/skills/brainstorm-assistant/SKILL.md +115 -17
- package/bundled/locales/zh-CN/skills/brainstorm-assistant/guide.md +37 -12
- package/bundled/locales/zh-CN/skills/checkin-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/ci-cd-assistant/SKILL.md +50 -0
- package/bundled/locales/zh-CN/skills/code-review-assistant/SKILL.md +5 -5
- package/bundled/locales/zh-CN/skills/commands/ac-coverage.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/atdd.md +3 -3
- package/bundled/locales/zh-CN/skills/commands/bdd.md +2 -2
- package/bundled/locales/zh-CN/skills/commands/brainstorm.md +26 -17
- package/bundled/locales/zh-CN/skills/commands/{review.md → code-review.md} +4 -4
- package/bundled/locales/zh-CN/skills/commands/derive-all.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/derive-atdd.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/derive-bdd.md +2 -3
- package/bundled/locales/zh-CN/skills/commands/derive-tdd.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/derive.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/dev-workflow.md +2 -2
- package/bundled/locales/zh-CN/skills/commands/methodology.md +4 -4
- package/bundled/locales/zh-CN/skills/commands/pr.md +1 -1
- package/bundled/locales/zh-CN/skills/commands/tdd.md +1 -1
- package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/contract-test-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/dev-methodology/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/dev-methodology/create-methodology.md +456 -0
- package/bundled/locales/zh-CN/skills/dev-methodology/guide.md +6 -6
- package/bundled/locales/zh-CN/skills/dev-methodology/runtime.md +296 -0
- package/bundled/locales/zh-CN/skills/dev-workflow-guide/SKILL.md +5 -5
- package/bundled/locales/zh-CN/skills/docs-generator/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/e2e-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/incident-response-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/journey-test-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/logging-guide/SKILL.md +169 -142
- package/bundled/locales/zh-CN/skills/migration-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/observability-assistant/guide.md +1 -1
- package/bundled/locales/zh-CN/skills/pr-automation-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/project-discovery/guide.md +2 -2
- package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/runbook-assistant/guide.md +1 -1
- package/bundled/locales/zh-CN/skills/security-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/skill-builder/SKILL.md +3 -3
- package/bundled/locales/zh-CN/skills/slo-assistant/guide.md +1 -1
- package/bundled/locales/zh-CN/skills/spec-derivation/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/spec-derivation/guide.md +8 -9
- package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/sweep/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/tdd-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-CN/skills/testing-guide/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/testing-guide/testing-theory.md +2298 -0
- package/bundled/locales/zh-CN/skills/workflows/README.md +451 -0
- package/bundled/locales/zh-TW/CHANGELOG.md +94 -6
- package/bundled/locales/zh-TW/CLAUDE.md +1 -1
- package/bundled/locales/zh-TW/MAINTENANCE.md +51 -4
- package/bundled/locales/zh-TW/README.md +25 -12
- package/bundled/locales/zh-TW/SECURITY.md +2 -2
- package/bundled/locales/zh-TW/adoption/DAILY-WORKFLOW-GUIDE.md +2 -2
- package/bundled/locales/zh-TW/ai/options/commit-message/bilingual.ai.yaml +6 -1
- package/bundled/locales/zh-TW/ai/standards/versioning.ai.yaml +8 -48
- package/bundled/locales/zh-TW/core/acceptance-criteria-traceability.md +4 -6
- package/bundled/locales/zh-TW/core/accessibility-standards.md +1 -1
- package/bundled/locales/zh-TW/core/adversarial-test.md +226 -0
- package/bundled/locales/zh-TW/core/agent-behavior-discipline.md +187 -0
- package/bundled/locales/zh-TW/core/ai-response-navigation.md +32 -6
- package/bundled/locales/zh-TW/core/anti-sycophancy-prompting.md +1 -1
- package/bundled/locales/zh-TW/core/api-design-standards.md +91 -9
- package/bundled/locales/zh-TW/core/audit-trail.md +110 -0
- package/bundled/locales/zh-TW/core/behavior-snapshot.md +335 -0
- package/bundled/locales/zh-TW/core/browser-compatibility-standards.md +1 -0
- package/bundled/locales/zh-TW/core/cd-deployment-strategies.md +135 -0
- package/bundled/locales/zh-TW/core/chaos-injection-tests.md +130 -0
- package/bundled/locales/zh-TW/core/checkin-standards.md +1 -1
- package/bundled/locales/zh-TW/core/code-review-checklist.md +1 -1
- package/bundled/locales/zh-TW/core/container-image-standards.md +93 -0
- package/bundled/locales/zh-TW/core/container-security.md +535 -0
- package/bundled/locales/zh-TW/core/cost-budget-test.md +86 -0
- package/bundled/locales/zh-TW/core/cross-flow-regression.md +1 -0
- package/bundled/locales/zh-TW/core/data-contract.md +101 -0
- package/bundled/locales/zh-TW/core/data-migration-testing.md +217 -0
- package/bundled/locales/zh-TW/core/data-pipeline.md +105 -0
- package/bundled/locales/zh-TW/core/deployment-standards.md +363 -25
- package/bundled/locales/zh-TW/core/deprecation-standards.md +17 -4
- package/bundled/locales/zh-TW/core/developer-memory.md +2 -2
- package/bundled/locales/zh-TW/core/disaster-recovery-drill.md +87 -0
- package/bundled/locales/zh-TW/core/documentation-writing-standards.md +1 -1
- package/bundled/locales/zh-TW/core/error-code-standards.md +2 -2
- package/bundled/locales/zh-TW/core/feature-manifest-standard.md +222 -0
- package/bundled/locales/zh-TW/core/flaky-test-management.md +87 -0
- package/bundled/locales/zh-TW/core/flow-based-testing.md +284 -0
- package/bundled/locales/zh-TW/core/forward-derivation-standards.md +3 -4
- package/bundled/locales/zh-TW/core/frontend-design-standards.md +1 -1
- package/bundled/locales/zh-TW/core/full-coverage-testing.md +250 -0
- package/bundled/locales/zh-TW/core/git-worktree.md +1 -1
- package/bundled/locales/zh-TW/core/guides/performance-guide.md +515 -0
- package/bundled/locales/zh-TW/core/guides/security-guide.md +494 -0
- package/bundled/locales/zh-TW/core/iac-design-principles.md +90 -0
- package/bundled/locales/zh-TW/core/incident-response.md +111 -0
- package/bundled/locales/zh-TW/core/license-compliance.md +131 -0
- package/bundled/locales/zh-TW/core/llm-output-validation.md +192 -0
- package/bundled/locales/zh-TW/core/logging-standards.md +208 -4
- package/bundled/locales/zh-TW/core/mock-boundary.md +161 -0
- package/bundled/locales/zh-TW/core/model-provenance.md +173 -0
- package/bundled/locales/zh-TW/core/model-selection.md +28 -5
- package/bundled/locales/zh-TW/core/mutation-testing.md +106 -0
- package/bundled/locales/zh-TW/core/no-cicd-deployment.md +219 -0
- package/bundled/locales/zh-TW/core/packaging-standards.md +77 -5
- package/bundled/locales/zh-TW/core/performance-standards.md +84 -5
- package/bundled/locales/zh-TW/core/pii-classification.md +102 -0
- package/bundled/locales/zh-TW/core/pipeline-security-gates.md +146 -0
- package/bundled/locales/zh-TW/core/policy-as-code-testing.md +203 -0
- package/bundled/locales/zh-TW/core/prd-standards.md +88 -0
- package/bundled/locales/zh-TW/core/privacy-standards.md +1 -1
- package/bundled/locales/zh-TW/core/product-metrics-standards.md +96 -0
- package/bundled/locales/zh-TW/core/project-context-memory.md +1 -1
- package/bundled/locales/zh-TW/core/prompt-regression.md +88 -0
- package/bundled/locales/zh-TW/core/property-based-testing.md +87 -0
- package/bundled/locales/zh-TW/core/refactoring-standards.md +43 -6
- package/bundled/locales/zh-TW/core/release-quality-manifest.md +207 -0
- package/bundled/locales/zh-TW/core/replay-test.md +102 -0
- package/bundled/locales/zh-TW/core/requirement-engineering.md +1 -1
- package/bundled/locales/zh-TW/core/resource-cost-boundary.md +175 -0
- package/bundled/locales/zh-TW/core/reverse-engineering-standards.md +64 -5
- package/bundled/locales/zh-TW/core/rollback-standards.md +120 -0
- package/bundled/locales/zh-TW/core/runbook.md +110 -0
- package/bundled/locales/zh-TW/core/sast-advanced.md +309 -0
- package/bundled/locales/zh-TW/core/schema-evolution.md +98 -0
- package/bundled/locales/zh-TW/core/secret-management-standards.md +101 -0
- package/bundled/locales/zh-TW/core/secure-op.md +328 -0
- package/bundled/locales/zh-TW/core/security-testing.md +113 -0
- package/bundled/locales/zh-TW/core/self-review-protocol.md +18 -13
- package/bundled/locales/zh-TW/core/server-ops-security.md +507 -0
- package/bundled/locales/zh-TW/core/slo-sli.md +108 -0
- package/bundled/locales/zh-TW/core/smoke-test.md +79 -0
- package/bundled/locales/zh-TW/core/spec-driven-development.md +19 -11
- package/bundled/locales/zh-TW/core/supply-chain-attestation.md +131 -0
- package/bundled/locales/zh-TW/core/user-journey-testing.md +111 -0
- package/bundled/locales/zh-TW/core/user-story-mapping.md +94 -0
- package/bundled/locales/zh-TW/core/verification-evidence.md +260 -31
- package/bundled/locales/zh-TW/core/verification-oracle.md +159 -0
- package/bundled/locales/zh-TW/core/versioning.md +112 -112
- package/bundled/locales/zh-TW/docs/CHEATSHEET.md +36 -7
- package/bundled/locales/zh-TW/docs/DEV-WORKFLOW-MAPPING.md +6 -6
- package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +71 -53
- package/bundled/locales/zh-TW/docs/MIGRATION-v6.md +88 -0
- package/bundled/locales/zh-TW/docs/USAGE-MODES-COMPARISON.md +2 -2
- package/bundled/locales/zh-TW/docs/USER-MANUAL.md +14 -14
- package/bundled/locales/zh-TW/docs/specs/system/memory-adoption-strategy.md +105 -0
- package/bundled/locales/zh-TW/docs/user/FAQ.md +132 -0
- package/bundled/locales/zh-TW/docs/user/GETTING-STARTED.md +144 -0
- package/bundled/locales/zh-TW/docs/user/GLOSSARY.md +178 -0
- package/bundled/locales/zh-TW/docs/user/README.md +70 -0
- package/bundled/locales/zh-TW/docs/user/TROUBLESHOOTING.md +190 -0
- package/bundled/locales/zh-TW/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +1 -1
- package/bundled/locales/zh-TW/integrations/github-copilot/README.md +1 -1
- package/bundled/locales/zh-TW/integrations/github-copilot/skills-mapping.md +3 -3
- package/bundled/locales/zh-TW/integrations/opencode/skills-mapping.md +3 -3
- package/bundled/locales/zh-TW/methodologies/guides/sdd-guide.md +523 -26
- package/bundled/locales/zh-TW/options/changelog/auto-generated.md +166 -0
- package/bundled/locales/zh-TW/options/changelog/keep-a-changelog.md +140 -0
- package/bundled/locales/zh-TW/options/code-review/automated-review.md +214 -0
- package/bundled/locales/zh-TW/options/code-review/pair-programming.md +166 -0
- package/bundled/locales/zh-TW/options/code-review/pr-review.md +167 -0
- package/bundled/locales/zh-TW/options/commit-message/bilingual.md +10 -3
- package/bundled/locales/zh-TW/options/documentation/api-docs.md +191 -0
- package/bundled/locales/zh-TW/options/documentation/markdown-docs.md +150 -0
- package/bundled/locales/zh-TW/options/documentation/wiki-style.md +131 -0
- package/bundled/locales/zh-TW/options/project-structure/kotlin.md +144 -0
- package/bundled/locales/zh-TW/options/project-structure/php.md +168 -0
- package/bundled/locales/zh-TW/options/project-structure/ruby.md +156 -0
- package/bundled/locales/zh-TW/options/project-structure/rust.md +136 -0
- package/bundled/locales/zh-TW/options/project-structure/swift.md +165 -0
- package/bundled/locales/zh-TW/options/testing/contract-testing.md +237 -0
- package/bundled/locales/zh-TW/options/testing/industry-pyramid.md +200 -0
- package/bundled/locales/zh-TW/options/testing/istqb-framework.md +144 -0
- package/bundled/locales/zh-TW/options/testing/performance-testing.md +251 -0
- package/bundled/locales/zh-TW/options/testing/security-testing.md +192 -0
- package/bundled/locales/zh-TW/skills/README.md +91 -128
- package/bundled/locales/zh-TW/skills/ac-coverage/SKILL.md +4 -6
- package/bundled/locales/zh-TW/skills/adr-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/agents/code-architect.md +263 -0
- package/bundled/locales/zh-TW/skills/agents/doc-writer.md +410 -0
- package/bundled/locales/zh-TW/skills/agents/reviewer.md +357 -0
- package/bundled/locales/zh-TW/skills/agents/spec-analyst.md +410 -0
- package/bundled/locales/zh-TW/skills/agents/test-specialist.md +368 -0
- package/bundled/locales/zh-TW/skills/ai-collaboration-standards/SKILL.md +2 -2
- package/bundled/locales/zh-TW/skills/ai-friendly-architecture/SKILL.md +2 -2
- package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-TW/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
- package/bundled/locales/zh-TW/skills/atdd-assistant/atdd-workflow.md +3 -4
- package/bundled/locales/zh-TW/skills/audit-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-TW/skills/bdd-assistant/guide.md +1 -2
- package/bundled/locales/zh-TW/skills/brainstorm-assistant/SKILL.md +116 -18
- package/bundled/locales/zh-TW/skills/brainstorm-assistant/guide.md +38 -11
- package/bundled/locales/zh-TW/skills/checkin-assistant/SKILL.md +3 -1
- package/bundled/locales/zh-TW/skills/ci-cd-assistant/SKILL.md +50 -0
- package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +7 -5
- package/bundled/locales/zh-TW/skills/commands/ac-coverage.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/atdd.md +3 -3
- package/bundled/locales/zh-TW/skills/commands/bdd.md +2 -2
- package/bundled/locales/zh-TW/skills/commands/brainstorm.md +26 -17
- package/bundled/locales/zh-TW/skills/commands/{review.md → code-review.md} +5 -5
- package/bundled/locales/zh-TW/skills/commands/derive-all.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/derive-atdd.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/derive-bdd.md +2 -3
- package/bundled/locales/zh-TW/skills/commands/derive-tdd.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/derive.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/dev-workflow.md +2 -2
- package/bundled/locales/zh-TW/skills/commands/methodology.md +4 -4
- package/bundled/locales/zh-TW/skills/commands/pr.md +1 -1
- package/bundled/locales/zh-TW/skills/commands/tdd.md +1 -1
- package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/contract-test-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/dev-methodology/create-methodology.md +456 -0
- package/bundled/locales/zh-TW/skills/dev-methodology/guide.md +5 -5
- package/bundled/locales/zh-TW/skills/dev-methodology/runtime.md +296 -0
- package/bundled/locales/zh-TW/skills/dev-workflow-guide/SKILL.md +5 -5
- package/bundled/locales/zh-TW/skills/docs-generator/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/e2e-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/incident-response-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-TW/skills/logging-guide/SKILL.md +52 -27
- package/bundled/locales/zh-TW/skills/migration-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/pr-automation-assistant/SKILL.md +3 -1
- package/bundled/locales/zh-TW/skills/project-discovery/guide.md +2 -2
- package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/security-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/spec-derivation/guide.md +7 -8
- package/bundled/locales/zh-TW/skills/spec-driven-dev/SKILL.md +2 -2
- package/bundled/locales/zh-TW/skills/sweep/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +3 -1
- package/bundled/locales/zh-TW/skills/testing-guide/SKILL.md +2 -2
- package/bundled/locales/zh-TW/skills/testing-guide/testing-theory.md +2298 -0
- package/bundled/locales/zh-TW/skills/workflows/README.md +451 -0
- package/bundled/skills/README.md +1 -1
- package/bundled/skills/ac-coverage/SKILL.md +17 -7
- package/bundled/skills/adr-assistant/SKILL.md +1 -1
- package/bundled/skills/agents/code-architect.md +1 -1
- package/bundled/skills/agents/doc-writer.md +1 -1
- package/bundled/skills/agents/reviewer.md +2 -2
- package/bundled/skills/agents/spec-analyst.md +1 -1
- package/bundled/skills/agents/test-specialist.md +1 -1
- package/bundled/skills/ai-collaboration-standards/SKILL.md +2 -2
- package/bundled/skills/ai-friendly-architecture/SKILL.md +2 -2
- package/bundled/skills/ai-instruction-standards/SKILL.md +1 -1
- package/bundled/skills/atdd-assistant/SKILL.md +7 -0
- package/bundled/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
- package/bundled/skills/atdd-assistant/atdd-workflow.md +6 -8
- package/bundled/skills/audit-assistant/SKILL.md +2 -2
- package/bundled/skills/bdd-assistant/SKILL.md +7 -0
- package/bundled/skills/bdd-assistant/guide.md +1 -2
- package/bundled/skills/brainstorm-assistant/SKILL.md +139 -15
- package/bundled/skills/brainstorm-assistant/guide.md +39 -8
- package/bundled/skills/checkin-assistant/SKILL.md +8 -1
- package/bundled/skills/ci-cd-assistant/SKILL.md +57 -0
- package/bundled/skills/code-review-assistant/SKILL.md +15 -8
- package/bundled/skills/commands/COMMAND-FAMILY-OVERVIEW.md +2 -2
- package/bundled/skills/commands/COMMAND-INDEX.json +3 -3
- package/bundled/skills/commands/README.md +2 -2
- package/bundled/skills/commands/ac-coverage.md +1 -1
- package/bundled/skills/commands/atdd.md +2 -2
- package/bundled/skills/commands/bdd.md +2 -2
- package/bundled/skills/commands/brainstorm.md +25 -14
- package/bundled/skills/commands/{review.md → code-review.md} +6 -6
- package/bundled/skills/commands/derive-all.md +1 -1
- package/bundled/skills/commands/derive-atdd.md +1 -1
- package/bundled/skills/commands/derive-bdd.md +2 -3
- package/bundled/skills/commands/derive-tdd.md +1 -1
- package/bundled/skills/commands/derive.md +1 -1
- package/bundled/skills/commands/dev-workflow.md +1 -1
- package/bundled/skills/commands/journey-test.md +45 -0
- package/bundled/skills/commands/methodology.md +4 -4
- package/bundled/skills/commands/pr.md +1 -1
- package/bundled/skills/commands/skill-builder.md +42 -0
- package/bundled/skills/commands/tdd.md +1 -1
- package/bundled/skills/dev-methodology/create-methodology.md +1 -1
- package/bundled/skills/dev-methodology/guide.md +1 -1
- package/bundled/skills/dev-methodology/runtime.md +1 -1
- package/bundled/skills/dev-workflow-guide/SKILL.md +3 -3
- package/bundled/skills/dev-workflow-guide/workflow-phases.md +3 -3
- package/bundled/skills/docs-generator/SKILL.md +3 -3
- package/bundled/skills/incident-response-assistant/SKILL.md +2 -2
- package/bundled/skills/logging-guide/SKILL.md +38 -2
- package/bundled/skills/migration-assistant/SKILL.md +226 -0
- package/bundled/skills/observability-assistant/SKILL.md +74 -0
- package/bundled/skills/pr-automation-assistant/SKILL.md +5 -1
- package/bundled/skills/project-discovery/guide.md +2 -2
- package/bundled/skills/push/SKILL.md +1 -1
- package/bundled/skills/release-standards/SKILL.md +19 -5
- package/bundled/skills/security-assistant/SKILL.md +1 -1
- package/bundled/skills/skill-builder/SKILL.md +1 -1
- package/bundled/skills/spec-derivation/guide.md +3 -4
- package/bundled/skills/spec-driven-dev/SKILL.md +13 -2
- package/bundled/skills/sweep/SKILL.md +1 -1
- package/bundled/skills/tdd-assistant/SKILL.md +8 -1
- package/bundled/skills/testing-guide/SKILL.md +1 -1
- package/bundled/skills/testing-guide/testing-theory.md +1 -1
- package/bundled/skills/workflows/README.md +2 -2
- package/package.json +4 -4
- package/src/commands/audit.js +30 -9
- package/src/commands/config.js +33 -2
- package/src/commands/hitl.js +14 -1
- package/src/commands/init.js +168 -75
- package/src/commands/quickstart.js +1 -2
- package/src/commands/release.js +51 -6
- package/src/commands/run-intent.js +9 -0
- package/src/commands/spec-split.js +27 -2
- package/src/commands/update.js +22 -6
- package/src/config/ai-agent-paths.js +3 -1
- package/src/i18n/messages.js +3 -102
- package/src/missions/MissionManager.js +44 -12
- package/src/utils/build-manifest.js +35 -3
- package/src/utils/friction-detector.js +71 -22
- package/src/utils/health-checker.js +29 -2
- package/src/utils/transaction.js +111 -0
- package/src/utils/version-promote.js +16 -0
- package/standards-registry.json +61 -149
- package/bundled/ai/standards/agent-communication-protocol.ai.yaml +0 -42
- package/bundled/ai/standards/agent-dispatch.ai.yaml +0 -42
- package/bundled/ai/standards/branch-completion.ai.yaml +0 -44
- package/bundled/ai/standards/change-batching-standards.ai.yaml +0 -44
- package/bundled/ai/standards/execution-history.ai.yaml +0 -42
- package/bundled/ai/standards/pipeline-integration-standards.ai.yaml +0 -42
- package/bundled/ai/standards/workflow-enforcement.ai.yaml +0 -44
- package/bundled/ai/standards/workflow-state-protocol.ai.yaml +0 -43
- package/src/commands/flow.js +0 -260
- package/src/commands/start.js +0 -372
- package/src/commands/sweep.js +0 -151
- package/src/commands/workflow.js +0 -681
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: ../../../core/mock-boundary.md
|
|
3
|
+
source_version: 1.1.0
|
|
4
|
+
translation_version: 1.1.0
|
|
5
|
+
last_synced: 2026-07-08
|
|
6
|
+
source_hash: fe4715991a4c
|
|
7
|
+
status: current
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Mock 边界标准
|
|
11
|
+
|
|
12
|
+
> **语言**: [English](../../../core/mock-boundary.md) | [繁體中文](../../zh-TW/core/mock-boundary.md) | 简体中文
|
|
13
|
+
|
|
14
|
+
**版本**: 1.1.0
|
|
15
|
+
**最后更新**: 2026-07-01
|
|
16
|
+
**适用性**: 所有具备单元测试与集成测试的软件项目
|
|
17
|
+
**范围**: universal
|
|
18
|
+
**行业标准**: ISTQB Foundation(Test Doubles), xUnit Patterns(Gerard Meszaros)
|
|
19
|
+
**参考**: "Working Effectively with Legacy Code"(Feathers), "Growing Object-Oriented Software"(Freeman & Pryce)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 目的
|
|
24
|
+
|
|
25
|
+
本文档定义测试中哪些东西可以 mock、哪些不可以。其目标是防止**空心测试(hollow tests)**——永远通过却无法检测真实 bug 的测试,因为它们用 stub 取代了系统的逻辑。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 空心测试问题
|
|
30
|
+
|
|
31
|
+
空心测试 mock 掉系统的大部分内容,使测试变成 mock 接线的规格说明,而非系统行为的规格说明。经典症状:你可以删掉实现文件,测试仍然通过。
|
|
32
|
+
|
|
33
|
+
**真实案例(Multi-agent pipeline SPEC-002.test.ts)**:
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
vi.mock('../../src/runner/agent-runner.js') // Core logic replaced
|
|
37
|
+
vi.mock('../../src/runner/guardian-hooks.js') // Core logic replaced
|
|
38
|
+
vi.mock('../../src/runner/prototyper.js') // Core logic replaced
|
|
39
|
+
vi.mock('../../src/runner/iteration-report.js') // Core logic replaced
|
|
40
|
+
vi.mock('../../src/memory/memory-store.js') // Core logic replaced
|
|
41
|
+
vi.mock('node:fs/promises', ...) // I/O replaced
|
|
42
|
+
|
|
43
|
+
// All assertions verify mock call counts — not actual outputs.
|
|
44
|
+
// runPipeline() touches zero real code.
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 可以 Mock 的项目
|
|
50
|
+
|
|
51
|
+
| 类别 | 示例 | 理由 |
|
|
52
|
+
|------|------|------|
|
|
53
|
+
| 外部 HTTP 服务 | LLM API、支付网关、email 服务 | 防止不稳定(flaky)测试;可控制响应场景 |
|
|
54
|
+
| 时间函数 | `Date.now()`、`new Date()`、`setTimeout` | 使测试具确定性 |
|
|
55
|
+
| 环境变量 | `process.env.NODE_ENV`、`process.env.LICENSE_KEY` | 支持配置变化 |
|
|
56
|
+
| 文件系统(仅限单元测试) | `fs.readFile`、`fs.writeFile` | 让快速单元测试避免 I/O |
|
|
57
|
+
| 跨模块边界(须有对应 IT) | 其他模块的 public API | 隔离被测单元 |
|
|
58
|
+
| 进程内后台执行(通过可注入 runner) | `Task.Run`、unawaited promise、`setTimeout`、goroutine、thread-pool dispatch | 注入 runner seam 让测试能 await 到确定完成,消除 race |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 不可 Mock 的项目
|
|
63
|
+
|
|
64
|
+
| 类别 | 违规示例 | 禁止原因 |
|
|
65
|
+
|------|---------|---------|
|
|
66
|
+
| 自身模块的核心逻辑 | 在 pipeline-runner 测试中 `vi.mock('./pipeline-runner.js')` | 使测试形同虚设 |
|
|
67
|
+
| IT/flow/E2E 测试中的数据库 | 在集成测试中 `vi.mock('./db/client.js')` | 隐藏查询 bug、schema 问题 |
|
|
68
|
+
| HTTP 框架内部 | `vi.mock('express')` | 真实路由可能已坏 |
|
|
69
|
+
| 安全控制 | 永远通过的 auth middleware stub | 安全性回归不可见 |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 可注入的后台执行(Injectable Background Execution)
|
|
74
|
+
|
|
75
|
+
fire-and-forget 的后台工作(`Task.Run`、unawaited promise、`setTimeout`、goroutine、`java.util.concurrent` executor 提交,或 `asyncio.create_task`)是一个 **seam**,就跟系统时钟一样。正如你注入 clock 而非直接读取 wall-clock 时间,你也应该注入后台 dispatcher,而非直接生成后台工作。这样测试就能把工作驱动到**确定、可被 await 的完成**,并对其结果(成功、异常或 retry)进行断言——不用 poll、不用 sleep、没有 race。
|
|
76
|
+
|
|
77
|
+
将 dispatch 抽象成一个小接口(例如 `IBackgroundTaskRunner` / `BackgroundDispatcher`),再提供两种实现:
|
|
78
|
+
|
|
79
|
+
- **Production**:保留真正的 fire-and-forget 语义——dispatch 立即返回,工作以 detached 方式运行。
|
|
80
|
+
- **Test**:以 **inline** 方式执行工作并**追踪底层 Task/promise**,对外暴露一个 handle 供测试 `await`,使完成(及任何失败)可被观察。
|
|
81
|
+
|
|
82
|
+
语言中立示意(TypeScript 伪代码):
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// Seam — 在任何 dispatch 后台工作处注入
|
|
86
|
+
interface BackgroundDispatcher {
|
|
87
|
+
dispatch(work: () => Promise<void>): void
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Production:真正的 fire-and-forget——立即返回,工作以 detached 方式运行
|
|
91
|
+
class FireAndForgetDispatcher implements BackgroundDispatcher {
|
|
92
|
+
dispatch(work: () => Promise<void>): void {
|
|
93
|
+
void work() // 刻意不 await
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Test:inline 执行 + 追踪 task,让测试能 await 到完成
|
|
98
|
+
class DeterministicDispatcher implements BackgroundDispatcher {
|
|
99
|
+
private readonly tasks: Promise<void>[] = []
|
|
100
|
+
dispatch(work: () => Promise<void>): void {
|
|
101
|
+
this.tasks.push(work()) // inline 启动并保留 handle
|
|
102
|
+
}
|
|
103
|
+
async settle(): Promise<void> {
|
|
104
|
+
await Promise.all(this.tasks) // 测试 await 到确定完成
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
测试注入 `DeterministicDispatcher`,执行被测代码,再在断言结果前 `await dispatcher.settle()`——后台副作用此时已完全可观察且具确定性。
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 空心测试检测
|
|
114
|
+
|
|
115
|
+
提交测试文件之前,请检查:
|
|
116
|
+
|
|
117
|
+
1. **Mock 数量 ≥ import 数量** → 评审:至少要有一个断言验证实际输出
|
|
118
|
+
2. **所有断言都是 `.toHaveBeenCalled()` 系列** → 加入输出值断言
|
|
119
|
+
3. **Mock 路径与被测对象目录相同** → 自我引用 mock;移除之
|
|
120
|
+
4. **Mock 设置行数多于断言行数** → 很可能是空心测试
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 反模式
|
|
125
|
+
|
|
126
|
+
- **Total Mock Isolation**:所有 import 都被 mock;只断言 mock 交互
|
|
127
|
+
- **Mock the World**:外部 + 内部 + DB + FS 在同一个测试中全部 mock
|
|
128
|
+
- **Orphan Mock**:跨模块 mock 却没有对应的集成测试
|
|
129
|
+
- **Security Bypass Mock**:auth/权限逻辑被换成直接放行的 stub
|
|
130
|
+
- **Database Mock Cascade**:DB 返回硬编码的数据,隐藏真实查询错误
|
|
131
|
+
- **Poll/Sleep for Background Result**:用 sleep 或 poll 等待 fire-and-forget 后台工作完成。race 依然存在——timeout 只是多数时候把它掩盖住,同时拖慢整个测试套件;在共享 runner 上还会把 flakiness 泄漏到其他 MR 的 CI 中。应改为注入 deterministic runner 并 await 被追踪的 task。
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 规则摘要
|
|
136
|
+
|
|
137
|
+
| 规则 | 触发条件 | 动作 |
|
|
138
|
+
|------|---------|------|
|
|
139
|
+
| 禁止 self-mock | 测试文件 mock 自己的模块 | 移除 mock;让真实代码运行 |
|
|
140
|
+
| IT/flow 用真实 DB | 编写 IT 或 flow 测试 | 使用 in-memory SQLite 或测试 schema |
|
|
141
|
+
| IT 对应测试 | mock 跨模块边界 | 确保有对应的 IT 存在 |
|
|
142
|
+
| 禁止 mock 安全机制 | 测试涉及 auth/权限 | 使用真实测试用户 + 真实 token |
|
|
143
|
+
| 空心评审 | Mock 数量 ≥ import 数量 | 加入输出值断言 |
|
|
144
|
+
| 后台工作禁止 poll/sleep | 测试断言某个 fire-and-forget 副作用 | 注入 deterministic runner;await 被追踪的 task |
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 与其他标准的关系
|
|
149
|
+
|
|
150
|
+
- **testing**:Mock 边界规则适用于测试金字塔的所有测试级别
|
|
151
|
+
- **test-completeness-dimensions**:维度 8(AI 测试质量)引用了这些规则
|
|
152
|
+
- **flow-based-testing**:Flow 测试必须遵循 mock 边界规则
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 版本历史
|
|
157
|
+
|
|
158
|
+
| 版本 | 日期 | 变更 |
|
|
159
|
+
|------|------|------|
|
|
160
|
+
| 1.0.0 | 2026-05-04 | 初始标准:空心测试问题、可/不可 Mock 表格、检测、反模式、规则摘要 |
|
|
161
|
+
| 1.1.0 | 2026-07-01 | 新增可注入的后台执行作为 seam(平行于 clock injection):可 Mock 表格新增行、`可注入的后台执行` 章节、`Poll/Sleep for Background Result` 反模式,以及后台工作禁止 poll/sleep 规则(issue #143) |
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../../core/model-selection.md
|
|
3
|
-
source_version: 1.0.
|
|
4
|
-
translation_version: 1.0.
|
|
5
|
-
last_synced: 2026-
|
|
3
|
+
source_version: 1.0.1
|
|
4
|
+
translation_version: 1.0.1
|
|
5
|
+
last_synced: 2026-06-10
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -10,8 +10,8 @@ status: current
|
|
|
10
10
|
|
|
11
11
|
# AI 模型选择策略
|
|
12
12
|
|
|
13
|
-
**版本**: 1.0.
|
|
14
|
-
**最后更新**: 2026-
|
|
13
|
+
**版本**: 1.0.1
|
|
14
|
+
**最后更新**: 2026-06-10
|
|
15
15
|
**适用范围**: 使用多层级模型的 AI 辅助开发
|
|
16
16
|
**范围**: universal
|
|
17
17
|
**灵感来源**: [Superpowers](https://github.com/obra/superpowers) — subagent-driven-development (MIT)
|
|
@@ -100,6 +100,20 @@ status: current
|
|
|
100
100
|
|
|
101
101
|
---
|
|
102
102
|
|
|
103
|
+
## 与下一步建议整合
|
|
104
|
+
|
|
105
|
+
[ai-response-navigation](ai-response-navigation.md) 标准(规则 R6,可选)允许每个「建议下一步」选项携带级别标注。本标准的复杂度信号即为判断依据。
|
|
106
|
+
|
|
107
|
+
**与厂商无关原则**:级别名称(Fast/Standard/Capable)是工具无关的泛称。各平台自行将级别映射到可用模型。
|
|
108
|
+
|
|
109
|
+
| 级别 | 典型能力定位 |
|
|
110
|
+
|------|-------------|
|
|
111
|
+
| Fast | 轻量级 / 指令遵循 |
|
|
112
|
+
| Standard | 均衡推理 + 代码生成 |
|
|
113
|
+
| Capable | 高级推理、架构分析 |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
103
117
|
## 相关标准
|
|
104
118
|
|
|
105
119
|
- [代理派遣与并行协调](agent-dispatch.md)
|
|
@@ -107,6 +121,15 @@ status: current
|
|
|
107
121
|
|
|
108
122
|
---
|
|
109
123
|
|
|
124
|
+
## 版本历史
|
|
125
|
+
|
|
126
|
+
| 版本 | 日期 | 变更 |
|
|
127
|
+
|------|------|------|
|
|
128
|
+
| 1.0.1 | 2026-06-10 | 新增「与下一步建议整合」节(R6 交叉引用;与厂商无关原则) |
|
|
129
|
+
| 1.0.0 | 2026-03-20 | 初始版本 |
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
110
133
|
## 许可证
|
|
111
134
|
|
|
112
135
|
本标准采用 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) 发布。
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: ../../../core/mutation-testing.md
|
|
3
|
+
source_version: 1.0.0
|
|
4
|
+
translation_version: 1.0.0
|
|
5
|
+
last_synced: 2026-06-10
|
|
6
|
+
source_hash: 6a5286d76274
|
|
7
|
+
status: current
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 变异测试标准
|
|
11
|
+
|
|
12
|
+
> **语言**: [English](../../../core/mutation-testing.md) | [繁體中文](../../zh-TW/core/mutation-testing.md) | 简体中文
|
|
13
|
+
|
|
14
|
+
**版本**: 1.0.0
|
|
15
|
+
**最后更新**: 2026-05-04
|
|
16
|
+
**适用性**: 所有具备单元/集成测试的软件项目
|
|
17
|
+
**范围**: universal
|
|
18
|
+
**行业标准**: ISTQB Foundation Syllabus(测试有效性指标)
|
|
19
|
+
**参考**: "Introduction to Software Testing"(Ammann & Offutt), Stryker Mutator 文档
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 目的
|
|
24
|
+
|
|
25
|
+
变异测试(mutation testing)通过注入人工 bug 并检查测试是否能检测到它们,来评估测试套件的有效性。它回答了行覆盖率无法回答的问题:**「我的测试真的在验证正确行为吗?」**
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 核心概念:Mutation Score
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Mutation Score = Killed Mutants / (Killed + Survived) × 100%
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- **Killed**:测试套件检测到人工 bug(测试失败)✅
|
|
36
|
+
- **Survived**:测试套件漏掉了 bug(测试仍通过)❌
|
|
37
|
+
|
|
38
|
+
一个只有 `expect(x).toBeDefined()` 的测试可以达到 100% 行覆盖率,却会让许多变异存活(因为 `x` 是 `null`、`0` 或 `"wrong"` 都满足 `.toBeDefined()`)。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 工具
|
|
43
|
+
|
|
44
|
+
| 语言 | 工具 | 命令 |
|
|
45
|
+
|------|------|------|
|
|
46
|
+
| TypeScript/JS | Stryker Mutator | `npx stryker run` |
|
|
47
|
+
| Python | mutmut | `mutmut run` |
|
|
48
|
+
| Java | PIT (Pitest) | `mvn pitest:mutationCoverage` |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 阈值
|
|
53
|
+
|
|
54
|
+
| 模块类型 | 最低分数 | 强制程度 |
|
|
55
|
+
|---------|---------|---------|
|
|
56
|
+
| Auth/License/Payment/Security | 80% | 阻断 release |
|
|
57
|
+
| 标准业务逻辑 | 70% | 警告;下次 release 前解决 |
|
|
58
|
+
| AI 生成的测试 | 50% | 必需;低于即拒绝 |
|
|
59
|
+
| 整体项目 | 60% | 跟踪趋势;回归时告警 |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 何时运行
|
|
64
|
+
|
|
65
|
+
| 触发条件 | 命令 | 强制程度 |
|
|
66
|
+
|---------|------|---------|
|
|
67
|
+
| Pre-release 门禁 | `npm run test:mutation` | 整体 ≥ 60% |
|
|
68
|
+
| 关键模块变更 | `npx stryker run --mutate 'src/auth/**'` | ≥ 80% |
|
|
69
|
+
| AI 生成测试评审 | `npx stryker run` | ≥ 50% |
|
|
70
|
+
|
|
71
|
+
**绝不**把变异测试加入 commit hook——它太慢了(10-60 分钟)。
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Stryker 快速上手(TypeScript + Vitest)
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npm install --save-dev @stryker-mutator/core @stryker-mutator/vitest-runner
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
// stryker.config.json
|
|
83
|
+
{
|
|
84
|
+
"testRunner": "vitest",
|
|
85
|
+
"coverageAnalysis": "perTest",
|
|
86
|
+
"mutate": ["src/license/**/*.ts", "!src/**/*.test.ts"],
|
|
87
|
+
"thresholds": { "high": 80, "low": 60, "break": 50 }
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 反模式
|
|
94
|
+
|
|
95
|
+
- 把行覆盖率当作测试有效性的替代指标
|
|
96
|
+
- 在每个 PR 的 CI 中都加入变异测试(太慢)
|
|
97
|
+
- 未经 mutation score 验证就接受 AI 生成的测试
|
|
98
|
+
- 靠加 `toBeDefined()` 断言来杀死变异
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 与其他标准的关系
|
|
103
|
+
|
|
104
|
+
- `test-completeness-dimensions`:维度 8(AI 测试质量)引用 mutation score
|
|
105
|
+
- `mock-boundary`:空心测试会让许多变异存活;mock 边界规则防止空心测试
|
|
106
|
+
- `testing`:变异测试是测试金字塔顶端的质量门禁
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: ../../../core/no-cicd-deployment.md
|
|
3
|
+
source_version: 1.0.0
|
|
4
|
+
translation_version: 1.0.0
|
|
5
|
+
last_synced: 2026-06-10
|
|
6
|
+
source_hash: dbe8c04bf6a4
|
|
7
|
+
status: current
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# No-CI/CD Deployment Strategy
|
|
11
|
+
|
|
12
|
+
> **Language**: [English](../../../core/no-cicd-deployment.md) | [繁體中文](../../zh-TW/core/no-cicd-deployment.md) | 简体中文
|
|
13
|
+
|
|
14
|
+
> **补充**: 本文档补充 `deployment-standards.md`,专注于无 CI/CD 平台(GitHub Actions / GitLab CI)环境下的可靠部署设计。
|
|
15
|
+
|
|
16
|
+
## 核心三层架构
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Layer 1: 防止错误部署
|
|
20
|
+
└─ set -euo pipefail、版本 tag 强制、deploy.lock
|
|
21
|
+
|
|
22
|
+
Layer 2: 验证部署正确
|
|
23
|
+
└─ Smoke Test、健康检查、版本号比对、自动 rollback
|
|
24
|
+
|
|
25
|
+
Layer 3: 快速恢复能力
|
|
26
|
+
└─ Blue-Green 切换、< 30 秒 rollback
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Layer 1:防止错误部署
|
|
30
|
+
|
|
31
|
+
### Shell 脚本强制执行
|
|
32
|
+
|
|
33
|
+
所有部署脚本必须以下列标头开始:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
#!/usr/bin/env bash
|
|
37
|
+
set -euo pipefail
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- `set -e`:任何命令失败立即退出
|
|
41
|
+
- `set -u`:引用未定义变量视为错误
|
|
42
|
+
- `set -o pipefail`:管线中任何命令失败都会传播错误
|
|
43
|
+
|
|
44
|
+
### 强制部署顺序
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
echo "[1/4] 执行测试..."
|
|
48
|
+
npm test
|
|
49
|
+
|
|
50
|
+
echo "[2/4] 构建产物..."
|
|
51
|
+
npm run build
|
|
52
|
+
|
|
53
|
+
echo "[3/4] 推送到服务器..."
|
|
54
|
+
rsync -avz --delete ./dist/ user@server:/app/
|
|
55
|
+
|
|
56
|
+
echo "[4/4] 验证部署..."
|
|
57
|
+
./verify.sh || { echo "验证失败,执行 rollback..."; ./rollback.sh; exit 1; }
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### deploy.lock 防并发
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
LOCK_FILE="/tmp/deploy.lock"
|
|
64
|
+
trap "rm -f $LOCK_FILE" EXIT
|
|
65
|
+
|
|
66
|
+
if [ -f "$LOCK_FILE" ]; then
|
|
67
|
+
echo "❌ 部署进行中(PID: $(cat $LOCK_FILE)),请等待完成"
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
echo $$ > "$LOCK_FILE"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 版本 Tag 强制
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
CURRENT_TAG=$(git describe --exact-match --tags HEAD 2>/dev/null || echo "")
|
|
78
|
+
if [ -z "$CURRENT_TAG" ]; then
|
|
79
|
+
echo "❌ 当前 commit 没有版本 tag,请先执行:"
|
|
80
|
+
echo " git tag v$(cat VERSION) && git push --tags"
|
|
81
|
+
exit 1
|
|
82
|
+
fi
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Layer 2:验证部署正确
|
|
86
|
+
|
|
87
|
+
### Smoke Test 脚本 (verify.sh)
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
#!/usr/bin/env bash
|
|
91
|
+
set -euo pipefail
|
|
92
|
+
|
|
93
|
+
HEALTH_URL="${HEALTH_URL:-https://example.com/health}"
|
|
94
|
+
EXPECTED_VERSION=$(cat VERSION)
|
|
95
|
+
MAX_RETRIES=3
|
|
96
|
+
RETRY_INTERVAL=5
|
|
97
|
+
|
|
98
|
+
for i in $(seq 1 $MAX_RETRIES); do
|
|
99
|
+
RESPONSE=$(curl -sf --max-time 10 "$HEALTH_URL" 2>/dev/null) && break
|
|
100
|
+
echo "健康检查失败 ($i/$MAX_RETRIES),等待 ${RETRY_INTERVAL}s..."
|
|
101
|
+
sleep $RETRY_INTERVAL
|
|
102
|
+
done
|
|
103
|
+
|
|
104
|
+
ACTUAL_VERSION=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin)['version'])")
|
|
105
|
+
|
|
106
|
+
if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then
|
|
107
|
+
echo "❌ 版本不符!预期 $EXPECTED_VERSION,实际 $ACTUAL_VERSION"
|
|
108
|
+
exit 1
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
echo "✅ 版本验证通过:$ACTUAL_VERSION"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 健康检查端点规格
|
|
115
|
+
|
|
116
|
+
应用程序必须提供 `/health` 端点,响应格式:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"status": "ok",
|
|
121
|
+
"version": "1.2.3",
|
|
122
|
+
"timestamp": "2026-04-26T10:00:00Z"
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Layer 3:快速恢复能力
|
|
127
|
+
|
|
128
|
+
### Blue-Green 架构
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
[Nginx]
|
|
132
|
+
│
|
|
133
|
+
├─── Blue (port 3001) ← 稳定版(当前 active)
|
|
134
|
+
└─── Green (port 3002) ← 新版(部署目标)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Nginx 配置**:
|
|
138
|
+
|
|
139
|
+
```nginx
|
|
140
|
+
upstream app {
|
|
141
|
+
server 127.0.0.1:3001; # blue
|
|
142
|
+
# server 127.0.0.1:3002; # green(切换时启用此行并停用上一行)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
server {
|
|
146
|
+
listen 80;
|
|
147
|
+
location / {
|
|
148
|
+
proxy_pass http://app;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Rollback 脚本 (rollback.sh)
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
#!/usr/bin/env bash
|
|
157
|
+
set -euo pipefail
|
|
158
|
+
|
|
159
|
+
CURRENT=$(readlink /app/current)
|
|
160
|
+
if [[ "$CURRENT" == *"green"* ]]; then
|
|
161
|
+
TARGET="/app/blue"
|
|
162
|
+
else
|
|
163
|
+
TARGET="/app/green"
|
|
164
|
+
fi
|
|
165
|
+
|
|
166
|
+
ln -sfn "$TARGET" /app/current
|
|
167
|
+
nginx -s reload
|
|
168
|
+
|
|
169
|
+
echo "✅ 已切回 $TARGET($(date -u +%Y-%m-%dT%H:%M:%SZ))"
|
|
170
|
+
|
|
171
|
+
# 记录 rollback 事件
|
|
172
|
+
echo "{\"timestamp\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"event\":\"rollback\",\"from\":\"$CURRENT\",\"to\":\"$TARGET\",\"operator\":\"$(whoami)\"}" >> /var/log/deployments.jsonl
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 完整 Makefile
|
|
176
|
+
|
|
177
|
+
```makefile
|
|
178
|
+
.PHONY: deploy rollback verify
|
|
179
|
+
|
|
180
|
+
deploy:
|
|
181
|
+
@./deploy.sh
|
|
182
|
+
|
|
183
|
+
rollback:
|
|
184
|
+
@./rollback.sh
|
|
185
|
+
|
|
186
|
+
verify:
|
|
187
|
+
@./verify.sh
|
|
188
|
+
|
|
189
|
+
status:
|
|
190
|
+
@echo "Current: $$(readlink /app/current)"
|
|
191
|
+
@curl -s $${HEALTH_URL:-http://localhost/health} | python3 -m json.tool
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Deployment Log 格式
|
|
195
|
+
|
|
196
|
+
每次部署(成功或失败)都必须写入 JSON Lines 格式的日志:
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{"timestamp":"2026-04-26T10:00:00Z","version":"1.2.3","git_commit":"abc1234","operator":"albert","result":"success","duration_seconds":45,"slot":"green"}
|
|
200
|
+
{"timestamp":"2026-04-26T11:30:00Z","version":"1.2.4","git_commit":"def5678","operator":"albert","result":"failure","duration_seconds":12,"slot":"green","error":"version_mismatch"}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 适用场景
|
|
204
|
+
|
|
205
|
+
| 场景 | 建议 |
|
|
206
|
+
|------|------|
|
|
207
|
+
| 个人 VPS / 小型项目 | Layer 1 + Layer 2(无需 Blue-Green) |
|
|
208
|
+
| 自架服务器(多人团队) | 三层全套 + deploy.lock |
|
|
209
|
+
| Air-gapped 环境 | 三层全套 + 本地 artifact registry |
|
|
210
|
+
| 容器化部署 | 搭配 `docker compose` 执行 |
|
|
211
|
+
|
|
212
|
+
## 相关标准
|
|
213
|
+
|
|
214
|
+
- `deployment-standards.ai.yaml` — 有 CI/CD 平台的部署策略(本文档的补充前提)
|
|
215
|
+
- `health-check-standards.ai.yaml` — /health 端点设计规范
|
|
216
|
+
- `circuit-breaker.ai.yaml` — 断路器集成(进阶场景)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
**Scope**: universal
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../../core/packaging-standards.md
|
|
3
|
-
source_version: 1.
|
|
4
|
-
translation_version: 1.
|
|
5
|
-
last_synced: 2026-
|
|
3
|
+
source_version: 1.1.0
|
|
4
|
+
translation_version: 1.1.0
|
|
5
|
+
last_synced: 2026-06-10
|
|
6
|
+
source_hash: 69ff3afd3c1e
|
|
6
7
|
status: current
|
|
7
8
|
---
|
|
8
9
|
|
|
@@ -10,8 +11,8 @@ status: current
|
|
|
10
11
|
|
|
11
12
|
> **语言**: [English](../../../core/packaging-standards.md) | 简体中文
|
|
12
13
|
|
|
13
|
-
**版本**: 1.
|
|
14
|
-
**最后更新**: 2026-
|
|
14
|
+
**版本**: 1.1.0
|
|
15
|
+
**最后更新**: 2026-05-26
|
|
15
16
|
**适用性**: 使用 UDS-aware 工具链的项目
|
|
16
17
|
**范围**: 通用 (Universal)
|
|
17
18
|
|
|
@@ -202,12 +203,82 @@ targets:
|
|
|
202
203
|
|
|
203
204
|
---
|
|
204
205
|
|
|
206
|
+
## 归档格式完整性
|
|
207
|
+
|
|
208
|
+
当打包步骤生成将被部署脚本使用的归档(`.zip`、`.tar.gz`、`.tar.bz2` 等)时,**真实的二进制格式必须与文件扩展名一致**。命名为 `.zip` 的文件必须是真正的 ZIP 归档(PKZip 魔数 `PK\x03\x04`),而不是改名后的 tar 归档。
|
|
209
|
+
|
|
210
|
+
> **为何必须:** 格式不匹配的归档会触发下游静默失败。PowerShell 的 `Expand-Archive` 和 `[System.IO.Compression.ZipFile]::ExtractToDirectory()` 会**不抛出任何错误地**接受 tar 改名为 `.zip` 的文件——文件被读取,但什么都不会被解压,且没有任何异常。若部署脚本的下一步是破坏性操作(例如"删除当前安装目录"),则运行中的安装将被销毁而无任何内容可替换。
|
|
211
|
+
|
|
212
|
+
### 发布前验证
|
|
213
|
+
|
|
214
|
+
每个生成归档的打包步骤**必须**在声明成功前包含格式验证。最低验证要求:
|
|
215
|
+
|
|
216
|
+
| 格式 | 验证单行命令 |
|
|
217
|
+
|---|---|
|
|
218
|
+
| `.zip` | `python -c "import zipfile; zipfile.ZipFile('out.zip').namelist()"` 必须成功 |
|
|
219
|
+
| `.zip`(Unix) | `file out.zip` 必须报告 `Zip archive data`,**不得**为 `POSIX tar archive` |
|
|
220
|
+
| `.tar.gz` | `tar -tzf out.tar.gz >/dev/null` 必须成功 |
|
|
221
|
+
| 任意格式 | 可选:对预期文件清单进行哈希比对 |
|
|
222
|
+
|
|
223
|
+
验证失败必须在发布前终止打包流水线。
|
|
224
|
+
|
|
225
|
+
### 各平台配置示例
|
|
226
|
+
|
|
227
|
+
**Windows — 应当使用:**
|
|
228
|
+
|
|
229
|
+
```powershell
|
|
230
|
+
# 选项 A:PowerShell 内置(生成真正的 ZIP)
|
|
231
|
+
Compress-Archive -Path "publish\*" -DestinationPath "dist\patch.zip" -Force
|
|
232
|
+
|
|
233
|
+
# 选项 B:.NET API(生成真正的 ZIP)
|
|
234
|
+
Add-Type -Assembly System.IO.Compression.FileSystem
|
|
235
|
+
[System.IO.Compression.ZipFile]::CreateFromDirectory(
|
|
236
|
+
"publish", "dist\patch.zip", "Optimal", $false
|
|
237
|
+
)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Windows — 不应使用:**
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
# ❌ git-bash / busybox 的 tar -a -cf 在 Windows 上不可靠
|
|
244
|
+
# -a "按扩展名自动选择格式" 标志会生成带 .zip 扩展名的 POSIX tar 归档。
|
|
245
|
+
# `file patch.zip` → "POSIX tar archive (GNU)"(而非 "Zip archive data")
|
|
246
|
+
cd publish && tar -a -cf "../dist/patch.zip" api/
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**类 Unix 系统 — 应当使用:**
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
# 使用 'zip' 生成 ZIP 归档(BSD/Linux)
|
|
253
|
+
zip -r dist/patch.zip publish/
|
|
254
|
+
|
|
255
|
+
# 使用 'tar -czf'(不加 -a)生成 tar.gz 归档——明确、确定
|
|
256
|
+
tar -czf dist/patch.tar.gz publish/
|
|
257
|
+
|
|
258
|
+
# 发布前验证
|
|
259
|
+
file dist/patch.zip # 期望 "Zip archive data"
|
|
260
|
+
python -c "import zipfile; zipfile.ZipFile('dist/patch.zip').namelist()"
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 消费者侧防御
|
|
264
|
+
|
|
265
|
+
生产者无法保证消费者会进行验证。消费者(部署脚本)**必须**在任何破坏性操作前验证归档完整性。消费者侧要求参见[部署标准 — 防御性部署排序](deployment-standards.md#防御性部署排序)。
|
|
266
|
+
|
|
267
|
+
### 失败模式参考(真实事故)
|
|
268
|
+
|
|
269
|
+
某 Windows IIS 生产部署脚本(2026-05-24)在 git-bash 中使用 `tar -a -cf patch.zip api/` 生成发布归档。消费者侧的 PowerShell 部署脚本随后执行了 `Expand-Archive`(对该 tar 改名文件静默无操作),继续对运行中的 `apiDir` 执行 `Remove-Item -Recurse`,然后从根本不存在的源路径执行 `Copy-Item`(因为什么都没有被解压)。运行中的安装被清空,AppPool 停止,生产环境中断了约 3 分钟,直到基于备份的回滚完成。
|
|
270
|
+
|
|
271
|
+
(a)生产者使用自动扩展名 tar,(b)消费者未验证解压输出——这两个因素共同造成了运行中的安装被销毁,且整个过程无任何错误被报告。
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
205
275
|
## 相关标准
|
|
206
276
|
|
|
207
277
|
- [部署标准](deployment-standards.md) — 打包后的部署阶段
|
|
208
278
|
- [Pipeline 整合标准](pipeline-integration-standards.md) — CI/CD pipeline 配置
|
|
209
279
|
- [Check-in 标准](checkin-standards.md) — 打包前的质量关卡
|
|
210
280
|
- [版本控制标准](versioning.md) — 包产出物使用的版本号
|
|
281
|
+
- [供应链证明标准](supply-chain-attestation.md) — 打包产出物的 SBOM / SLSA 溯源 / 签名(此处的格式完整性属于归档层级;证明则补充了从源码到产出物的溯源)
|
|
211
282
|
|
|
212
283
|
---
|
|
213
284
|
|
|
@@ -215,6 +286,7 @@ targets:
|
|
|
215
286
|
|
|
216
287
|
| 版本 | 日期 | 变更 |
|
|
217
288
|
|------|------|------|
|
|
289
|
+
| 1.1.0 | 2026-05-26 | 新增:归档格式完整性章节——真实格式必须与扩展名一致的规则、验证单行命令、Windows 配置 DO/DON'T 列表、真实事故参考(XSPEC-231 / 关闭 issue #113) |
|
|
218
290
|
| 1.0.0 | 2026-04-15 | 初始发行 — XSPEC-034 Phase 1 |
|
|
219
291
|
|
|
220
292
|
---
|