universal-dev-standards 4.2.0 → 5.0.0-beta.10
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/README.md +3 -3
- package/bin/uds.js +165 -5
- package/bundled/core/acceptance-test-driven-development.md +19 -721
- package/bundled/core/accessibility-standards.md +862 -0
- package/bundled/core/ai-agreement-standards.md +95 -0
- package/bundled/core/ai-friendly-architecture.md +2 -0
- package/bundled/core/ai-instruction-standards.md +2 -0
- package/bundled/core/anti-hallucination.md +90 -637
- package/bundled/core/behavior-driven-development.md +20 -735
- package/bundled/core/changelog-standards.md +4 -0
- package/bundled/core/checkin-standards.md +21 -4
- package/bundled/core/code-review-checklist.md +3 -0
- package/bundled/core/commit-message-guide.md +14 -3
- package/bundled/core/deployment-standards.md +296 -0
- package/bundled/core/developer-memory.md +568 -0
- package/bundled/core/documentation-structure.md +114 -18
- package/bundled/core/documentation-writing-standards.md +272 -2
- package/bundled/core/error-code-standards.md +3 -0
- package/bundled/core/forward-derivation-standards.md +134 -8
- package/bundled/core/git-workflow.md +72 -686
- package/bundled/core/guides/anti-hallucination-guide.md +517 -0
- package/bundled/core/guides/git-workflow-guide.md +954 -0
- package/bundled/core/guides/performance-guide.md +508 -0
- package/bundled/core/guides/refactoring-guide.md +608 -0
- package/bundled/core/guides/security-guide.md +485 -0
- package/bundled/core/logging-standards.md +337 -2
- package/bundled/core/performance-standards.md +231 -0
- package/bundled/core/project-context-memory.md +180 -0
- package/bundled/core/project-structure.md +315 -2
- package/bundled/core/refactoring-standards.md +81 -761
- package/bundled/core/requirement-engineering.md +39 -0
- package/bundled/core/reverse-engineering-standards.md +6 -4
- package/bundled/core/security-standards.md +244 -0
- package/bundled/core/spec-driven-development.md +20 -319
- package/bundled/core/test-completeness-dimensions.md +213 -11
- package/bundled/core/test-driven-development.md +22 -978
- package/bundled/core/testing-standards.md +222 -2903
- package/bundled/core/versioning.md +16 -55
- package/bundled/core/virtual-organization-standards.md +85 -0
- package/bundled/locales/README.md +4 -4
- package/bundled/locales/zh-CN/CHANGELOG.md +18 -18
- package/bundled/locales/zh-CN/CLAUDE.md +3 -3
- package/bundled/locales/zh-CN/MAINTENANCE.md +7 -7
- package/bundled/locales/zh-CN/README.md +2 -2
- package/bundled/locales/zh-CN/STANDARDS-MAPPING.md +1 -1
- package/bundled/locales/zh-CN/adoption/ADOPTION-GUIDE.md +3 -3
- package/bundled/locales/zh-CN/adoption/DAILY-WORKFLOW-GUIDE.md +66 -7
- package/bundled/locales/zh-CN/adoption/STATIC-DYNAMIC-GUIDE.md +22 -22
- package/bundled/locales/zh-CN/adoption/checklists/enterprise.md +5 -5
- package/bundled/locales/zh-CN/adoption/checklists/minimal.md +4 -4
- package/bundled/locales/zh-CN/adoption/checklists/recommended.md +5 -5
- package/bundled/locales/zh-CN/ai/MAINTENANCE.md +13 -13
- package/bundled/locales/zh-CN/core/ai-instruction-standards.md +1 -1
- package/bundled/locales/zh-CN/core/anti-hallucination.md +39 -3
- package/bundled/locales/zh-CN/core/checkin-standards.md +18 -5
- package/bundled/locales/zh-CN/core/commit-message-guide.md +1 -1
- package/bundled/locales/zh-CN/core/developer-memory.md +576 -0
- package/bundled/locales/zh-CN/core/documentation-structure.md +43 -5
- package/bundled/locales/zh-CN/core/documentation-writing-standards.md +146 -5
- package/bundled/locales/zh-CN/core/git-workflow.md +179 -4
- package/bundled/locales/zh-CN/core/logging-standards.md +177 -4
- package/bundled/locales/zh-CN/core/project-structure.md +117 -5
- package/bundled/locales/zh-CN/core/refactoring-standards.md +3 -3
- package/bundled/locales/zh-CN/core/reverse-engineering-standards.md +6 -6
- package/bundled/locales/zh-CN/core/spec-driven-development.md +516 -14
- package/bundled/locales/zh-CN/core/test-completeness-dimensions.md +155 -24
- package/bundled/locales/zh-CN/core/test-driven-development.md +71 -20
- package/bundled/locales/zh-CN/core/testing-standards.md +4 -4
- package/bundled/locales/zh-CN/core/versioning.md +1 -1
- package/bundled/locales/zh-CN/docs/AI-AGENT-ROADMAP.md +90 -51
- package/bundled/locales/zh-CN/docs/CHEATSHEET.md +184 -0
- package/bundled/locales/zh-CN/docs/CLI-FLOW.md +239 -0
- package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +320 -0
- package/bundled/locales/zh-CN/docs/OPERATION-WORKFLOW.md +43 -43
- package/bundled/locales/zh-CN/docs/STANDARDS-REFERENCE.md +440 -0
- package/bundled/locales/zh-CN/docs/USAGE-MODES-COMPARISON.md +1 -1
- package/bundled/locales/zh-CN/docs/WINDOWS-GUIDE.md +1 -1
- package/bundled/locales/zh-CN/integrations/codex/README.md +3 -3
- package/bundled/locales/zh-CN/integrations/gemini-cli/README.md +3 -3
- package/bundled/locales/zh-CN/integrations/github-copilot/README.md +5 -5
- package/bundled/locales/zh-CN/integrations/github-copilot/copilot-instructions.md +9 -9
- package/bundled/locales/zh-CN/integrations/github-copilot/skills-mapping.md +18 -6
- package/bundled/locales/zh-CN/integrations/google-antigravity/README.md +2 -2
- package/bundled/locales/zh-CN/integrations/opencode/README.md +3 -3
- package/bundled/locales/zh-CN/integrations/opencode/skills-mapping.md +22 -10
- package/bundled/locales/zh-CN/integrations/openspec/README.md +1 -1
- package/bundled/locales/zh-CN/integrations/spec-kit/AGENTS.md +3 -3
- package/bundled/locales/zh-CN/integrations/spec-kit/README.md +1 -1
- package/bundled/locales/zh-CN/options/commit-message/bilingual.md +1 -1
- package/bundled/locales/zh-CN/options/commit-message/english.md +1 -1
- package/bundled/locales/zh-CN/options/commit-message/traditional-chinese.md +1 -1
- package/bundled/locales/zh-CN/options/git-workflow/gitflow.md +1 -1
- package/bundled/locales/zh-CN/options/git-workflow/github-flow.md +1 -1
- package/bundled/locales/zh-CN/options/git-workflow/merge-commit.md +1 -1
- package/bundled/locales/zh-CN/options/git-workflow/rebase-ff.md +1 -1
- package/bundled/locales/zh-CN/options/git-workflow/squash-merge.md +1 -1
- package/bundled/locales/zh-CN/options/git-workflow/trunk-based.md +1 -1
- package/bundled/locales/zh-CN/options/project-structure/dotnet.md +1 -1
- package/bundled/locales/zh-CN/options/project-structure/go.md +1 -1
- package/bundled/locales/zh-CN/options/project-structure/java.md +1 -1
- package/bundled/locales/zh-CN/options/project-structure/nodejs.md +1 -1
- package/bundled/locales/zh-CN/options/project-structure/python.md +1 -1
- package/bundled/locales/zh-CN/options/testing/e2e-testing.md +1 -1
- package/bundled/locales/zh-CN/options/testing/integration-testing.md +1 -1
- package/bundled/locales/zh-CN/options/testing/system-testing.md +1 -1
- package/bundled/locales/zh-CN/options/testing/unit-testing.md +1 -1
- package/bundled/locales/zh-CN/skills/{claude-code/CONTRIBUTING.template.md → CONTRIBUTING.template.md} +2 -2
- package/bundled/locales/zh-CN/skills/README.md +131 -81
- package/bundled/locales/zh-CN/skills/agents/README.md +281 -0
- package/bundled/locales/zh-CN/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/SKILL.md +10 -10
- package/bundled/locales/zh-CN/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/anti-hallucination.md +8 -8
- package/bundled/locales/zh-CN/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/certainty-labels.md +8 -8
- package/bundled/locales/zh-CN/skills/ai-friendly-architecture/SKILL.md +221 -0
- package/bundled/locales/zh-CN/skills/ai-instruction-standards/SKILL.md +214 -0
- package/bundled/locales/zh-CN/skills/atdd-assistant/SKILL.md +71 -0
- package/bundled/locales/zh-CN/skills/atdd-assistant/acceptance-criteria-guide.md +428 -0
- package/bundled/locales/zh-CN/skills/atdd-assistant/atdd-workflow.md +484 -0
- package/bundled/locales/zh-CN/skills/atdd-assistant/guide.md +368 -0
- package/bundled/locales/zh-CN/skills/bdd-assistant/SKILL.md +68 -0
- package/bundled/locales/zh-CN/skills/bdd-assistant/bdd-workflow.md +406 -0
- package/bundled/locales/zh-CN/skills/bdd-assistant/gherkin-guide.md +454 -0
- package/bundled/locales/zh-CN/skills/bdd-assistant/guide.md +324 -0
- package/bundled/locales/zh-CN/skills/changelog-guide/SKILL.md +64 -0
- package/bundled/locales/zh-CN/skills/{claude-code/changelog-guide/SKILL.md → changelog-guide/guide.md} +6 -7
- package/bundled/locales/zh-CN/skills/checkin-assistant/SKILL.md +56 -0
- package/bundled/locales/zh-CN/skills/{claude-code/checkin-assistant/SKILL.md → checkin-assistant/guide.md} +6 -7
- package/bundled/locales/zh-CN/skills/code-review-assistant/SKILL.md +56 -0
- package/bundled/locales/zh-CN/skills/{claude-code/code-review-assistant → code-review-assistant}/checkin-checklist.md +4 -4
- package/bundled/locales/zh-CN/skills/{claude-code/code-review-assistant/SKILL.md → code-review-assistant/guide.md} +5 -6
- package/bundled/locales/zh-CN/skills/{claude-code/code-review-assistant → code-review-assistant}/review-checklist.md +4 -4
- package/bundled/locales/zh-CN/skills/{claude-code/commands → commands}/bdd.md +2 -2
- package/bundled/locales/zh-CN/skills/{claude-code/commands → commands}/methodology.md +3 -3
- package/bundled/locales/zh-CN/skills/{claude-code/commands → commands}/refactor.md +3 -3
- package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +61 -0
- package/bundled/locales/zh-CN/skills/{claude-code/commit-standards → commit-standards}/conventional-commits.md +4 -4
- package/bundled/locales/zh-CN/skills/{claude-code/commit-standards/SKILL.md → commit-standards/guide.md} +5 -6
- package/bundled/locales/zh-CN/skills/{claude-code/commit-standards → commit-standards}/language-options.md +3 -3
- package/bundled/locales/zh-CN/skills/docs-generator/SKILL.md +59 -0
- package/bundled/locales/zh-CN/skills/docs-generator/guide.md +262 -0
- package/bundled/locales/zh-CN/skills/{claude-code/documentation-guide → documentation-guide}/SKILL.md +7 -8
- package/bundled/locales/zh-CN/skills/{claude-code/documentation-guide → documentation-guide}/documentation-structure.md +4 -4
- package/bundled/locales/zh-CN/skills/{claude-code/documentation-guide → documentation-guide}/readme-template.md +3 -3
- package/bundled/locales/zh-CN/skills/{claude-code/error-code-guide → error-code-guide}/SKILL.md +6 -6
- package/bundled/locales/zh-CN/skills/forward-derivation/SKILL.md +62 -0
- package/bundled/locales/zh-CN/skills/forward-derivation/guide.md +130 -0
- package/bundled/locales/zh-CN/skills/{claude-code/git-workflow-guide → git-workflow-guide}/SKILL.md +6 -6
- package/bundled/locales/zh-CN/skills/{claude-code/git-workflow-guide → git-workflow-guide}/branch-naming.md +3 -3
- package/bundled/locales/zh-CN/skills/{claude-code/git-workflow-guide → git-workflow-guide}/git-workflow.md +4 -4
- package/bundled/locales/zh-CN/skills/{claude-code/logging-guide → logging-guide}/SKILL.md +6 -6
- package/bundled/locales/zh-CN/skills/methodology-system/SKILL.md +78 -0
- package/bundled/locales/zh-CN/skills/{claude-code/methodology-system → methodology-system}/create-methodology.md +2 -2
- package/bundled/locales/zh-CN/skills/{claude-code/methodology-system/SKILL.md → methodology-system/guide.md} +2 -2
- package/bundled/locales/zh-CN/skills/{claude-code/methodology-system → methodology-system}/runtime.md +3 -3
- package/bundled/locales/zh-CN/skills/project-discovery/SKILL.md +66 -0
- package/bundled/locales/zh-CN/skills/project-discovery/guide.md +371 -0
- package/bundled/locales/zh-CN/skills/{claude-code/project-structure-guide → project-structure-guide}/SKILL.md +4 -4
- package/bundled/locales/zh-CN/skills/{claude-code/project-structure-guide → project-structure-guide}/language-patterns.md +1 -1
- package/bundled/locales/zh-CN/skills/refactoring-assistant/SKILL.md +67 -0
- package/bundled/locales/zh-CN/skills/{claude-code/refactoring-assistant/SKILL.md → refactoring-assistant/guide.md} +7 -8
- package/bundled/locales/zh-CN/skills/release-standards/SKILL.md +64 -0
- package/bundled/locales/zh-CN/skills/{claude-code/release-standards → release-standards}/changelog-format.md +3 -3
- package/bundled/locales/zh-CN/skills/{claude-code/release-standards/SKILL.md → release-standards/guide.md} +5 -6
- package/bundled/locales/zh-CN/skills/{claude-code/release-standards → release-standards}/release-workflow.md +7 -7
- package/bundled/locales/zh-CN/skills/{claude-code/release-standards → release-standards}/semantic-versioning.md +3 -3
- package/bundled/locales/zh-CN/skills/requirement-assistant/SKILL.md +67 -0
- package/bundled/locales/zh-CN/skills/{claude-code/requirement-assistant/SKILL.md → requirement-assistant/guide.md} +4 -5
- package/bundled/locales/zh-CN/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-checklist.md +3 -3
- package/bundled/locales/zh-CN/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-writing.md +3 -3
- package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +67 -0
- package/bundled/locales/zh-CN/skills/{claude-code/reverse-engineer → reverse-engineer}/bdd-extraction.md +2 -2
- package/bundled/locales/zh-CN/skills/{claude-code/reverse-engineer/SKILL.md → reverse-engineer/guide.md} +17 -18
- package/bundled/locales/zh-CN/skills/{claude-code/reverse-engineer → reverse-engineer}/tdd-analysis.md +2 -2
- package/bundled/locales/zh-CN/skills/{claude-code/reverse-engineer → reverse-engineer}/workflow.md +3 -3
- package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +75 -0
- package/bundled/locales/zh-CN/skills/{claude-code/spec-driven-dev/SKILL.md → spec-driven-dev/guide.md} +10 -11
- package/bundled/locales/zh-CN/skills/tdd-assistant/SKILL.md +66 -0
- package/bundled/locales/zh-CN/skills/{claude-code/tdd-assistant/SKILL.md → tdd-assistant/guide.md} +12 -16
- package/bundled/locales/zh-CN/skills/{claude-code/tdd-assistant → tdd-assistant}/language-examples.md +3 -3
- package/bundled/locales/zh-CN/skills/{claude-code/tdd-assistant → tdd-assistant}/tdd-workflow.md +3 -3
- package/bundled/locales/zh-CN/skills/test-coverage-assistant/SKILL.md +65 -0
- package/bundled/locales/zh-CN/skills/test-coverage-assistant/guide.md +284 -0
- package/bundled/locales/zh-CN/skills/{claude-code/testing-guide → testing-guide}/SKILL.md +8 -8
- package/bundled/locales/zh-CN/skills/{claude-code/testing-guide → testing-guide}/testing-pyramid.md +4 -4
- package/bundled/locales/zh-CN/skills/{cline → tools/cline}/README.md +1 -1
- package/bundled/locales/zh-CN/skills/{copilot → tools/copilot}/README.md +1 -1
- package/bundled/locales/zh-CN/skills/{copilot → tools/copilot}/copilot-instructions.md +1 -1
- package/bundled/locales/zh-CN/skills/{cursor → tools/cursor}/README.md +1 -1
- package/bundled/locales/zh-CN/skills/{windsurf → tools/windsurf}/README.md +1 -1
- package/bundled/locales/zh-TW/CHANGELOG.md +16 -16
- package/bundled/locales/zh-TW/CLAUDE.md +3 -3
- package/bundled/locales/zh-TW/MAINTENANCE.md +7 -7
- package/bundled/locales/zh-TW/README.md +13 -7
- package/bundled/locales/zh-TW/STANDARDS-MAPPING.md +1 -1
- package/bundled/locales/zh-TW/adoption/ADOPTION-GUIDE.md +4 -4
- package/bundled/locales/zh-TW/adoption/DAILY-WORKFLOW-GUIDE.md +66 -7
- package/bundled/locales/zh-TW/adoption/STATIC-DYNAMIC-GUIDE.md +22 -22
- package/bundled/locales/zh-TW/adoption/checklists/enterprise.md +5 -5
- package/bundled/locales/zh-TW/adoption/checklists/minimal.md +4 -4
- package/bundled/locales/zh-TW/adoption/checklists/recommended.md +5 -5
- package/bundled/locales/zh-TW/ai/MAINTENANCE.md +13 -13
- package/bundled/locales/zh-TW/ai/standards/anti-hallucination.ai.yaml +3 -2
- package/bundled/locales/zh-TW/ai/standards/git-workflow.ai.yaml +4 -3
- package/bundled/locales/zh-TW/ai/standards/spec-driven-development.ai.yaml +3 -3
- package/bundled/locales/zh-TW/ai/standards/testing.ai.yaml +1 -0
- package/bundled/locales/zh-TW/core/ai-instruction-standards.md +1 -1
- package/bundled/locales/zh-TW/core/anti-hallucination.md +38 -701
- package/bundled/locales/zh-TW/core/changelog-standards.md +1 -1
- package/bundled/locales/zh-TW/core/checkin-standards.md +18 -5
- package/bundled/locales/zh-TW/core/code-review-checklist.md +1 -1
- package/bundled/locales/zh-TW/core/commit-message-guide.md +1 -1
- package/bundled/locales/zh-TW/core/developer-memory.md +576 -0
- package/bundled/locales/zh-TW/core/documentation-structure.md +115 -22
- package/bundled/locales/zh-TW/core/documentation-writing-standards.md +126 -5
- package/bundled/locales/zh-TW/core/forward-derivation-standards.md +2 -2
- package/bundled/locales/zh-TW/core/git-workflow.md +38 -812
- package/bundled/locales/zh-TW/core/guides/anti-hallucination-guide.md +779 -0
- package/bundled/locales/zh-TW/core/guides/git-workflow-guide.md +1016 -0
- package/bundled/locales/zh-TW/core/guides/refactoring-guide.md +864 -0
- package/bundled/locales/zh-TW/core/guides/testing-guide.md +2280 -0
- package/bundled/locales/zh-TW/core/logging-standards.md +159 -4
- package/bundled/locales/zh-TW/core/project-structure.md +102 -9
- package/bundled/locales/zh-TW/core/refactoring-standards.md +37 -823
- package/bundled/locales/zh-TW/core/reverse-engineering-standards.md +6 -6
- package/bundled/locales/zh-TW/core/spec-driven-development.md +17 -268
- package/bundled/locales/zh-TW/core/test-completeness-dimensions.md +128 -14
- package/bundled/locales/zh-TW/core/test-driven-development.md +20 -983
- package/bundled/locales/zh-TW/core/testing-standards.md +120 -2105
- package/bundled/locales/zh-TW/core/versioning.md +13 -55
- package/bundled/locales/zh-TW/docs/AI-AGENT-ROADMAP.md +90 -51
- package/bundled/locales/zh-TW/docs/CHEATSHEET.md +184 -0
- package/bundled/locales/zh-TW/docs/CLI-FLOW.md +239 -0
- package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +320 -0
- package/bundled/locales/zh-TW/docs/MIGRATION-V5.md +71 -0
- package/bundled/locales/zh-TW/docs/OPERATION-WORKFLOW.md +42 -42
- package/bundled/locales/zh-TW/docs/STANDARDS-REFERENCE.md +440 -0
- package/bundled/locales/zh-TW/docs/USAGE-MODES-COMPARISON.md +1 -1
- package/bundled/locales/zh-TW/docs/WINDOWS-GUIDE.md +1 -1
- package/bundled/locales/zh-TW/integrations/claude-code/README.md +44 -0
- package/bundled/locales/zh-TW/integrations/github-copilot/copilot-instructions.md +3 -3
- package/bundled/locales/zh-TW/integrations/github-copilot/skills-mapping.md +18 -6
- package/bundled/locales/zh-TW/integrations/opencode/skills-mapping.md +22 -10
- package/bundled/locales/zh-TW/methodologies/guides/sdd-guide.md +338 -0
- package/bundled/locales/zh-TW/methodologies/guides/tdd-guide.md +1055 -0
- package/bundled/locales/zh-TW/options/commit-message/bilingual.md +1 -1
- package/bundled/locales/zh-TW/options/commit-message/english.md +1 -1
- package/bundled/locales/zh-TW/options/commit-message/traditional-chinese.md +1 -1
- package/bundled/locales/zh-TW/options/git-workflow/gitflow.md +1 -1
- package/bundled/locales/zh-TW/options/git-workflow/github-flow.md +1 -1
- package/bundled/locales/zh-TW/options/git-workflow/merge-commit.md +1 -1
- package/bundled/locales/zh-TW/options/git-workflow/rebase-ff.md +1 -1
- package/bundled/locales/zh-TW/options/git-workflow/squash-merge.md +1 -1
- package/bundled/locales/zh-TW/options/git-workflow/trunk-based.md +1 -1
- package/bundled/locales/zh-TW/options/project-structure/dotnet.md +1 -1
- package/bundled/locales/zh-TW/options/project-structure/go.md +1 -1
- package/bundled/locales/zh-TW/options/project-structure/java.md +1 -1
- package/bundled/locales/zh-TW/options/project-structure/nodejs.md +1 -1
- package/bundled/locales/zh-TW/options/project-structure/python.md +1 -1
- package/bundled/locales/zh-TW/options/testing/e2e-testing.md +1 -1
- package/bundled/locales/zh-TW/options/testing/integration-testing.md +1 -1
- package/bundled/locales/zh-TW/options/testing/system-testing.md +1 -1
- package/bundled/locales/zh-TW/options/testing/unit-testing.md +1 -1
- package/bundled/locales/zh-TW/skills/{claude-code/CONTRIBUTING.template.md → CONTRIBUTING.template.md} +2 -2
- package/bundled/locales/zh-TW/skills/README.md +131 -79
- package/bundled/locales/zh-TW/skills/agents/README.md +281 -0
- package/bundled/locales/zh-TW/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/SKILL.md +7 -7
- package/bundled/locales/zh-TW/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/anti-hallucination.md +8 -8
- package/bundled/locales/zh-TW/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/certainty-labels.md +8 -8
- package/bundled/locales/zh-TW/skills/ai-friendly-architecture/SKILL.md +221 -0
- package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +214 -0
- package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +71 -0
- package/bundled/locales/zh-TW/skills/atdd-assistant/acceptance-criteria-guide.md +428 -0
- package/bundled/locales/zh-TW/skills/atdd-assistant/atdd-workflow.md +484 -0
- package/bundled/locales/zh-TW/skills/atdd-assistant/guide.md +368 -0
- package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +68 -0
- package/bundled/locales/zh-TW/skills/bdd-assistant/bdd-workflow.md +406 -0
- package/bundled/locales/zh-TW/skills/bdd-assistant/gherkin-guide.md +454 -0
- package/bundled/locales/zh-TW/skills/bdd-assistant/guide.md +324 -0
- package/bundled/locales/zh-TW/skills/changelog-guide/SKILL.md +64 -0
- package/bundled/locales/zh-TW/skills/{claude-code/changelog-guide/SKILL.md → changelog-guide/guide.md} +6 -7
- package/bundled/locales/zh-TW/skills/checkin-assistant/SKILL.md +56 -0
- package/bundled/locales/zh-TW/skills/{claude-code/checkin-assistant/SKILL.md → checkin-assistant/guide.md} +6 -7
- package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +56 -0
- package/bundled/locales/zh-TW/skills/{claude-code/code-review-assistant → code-review-assistant}/checkin-checklist.md +4 -4
- package/bundled/locales/zh-TW/skills/{claude-code/code-review-assistant/SKILL.md → code-review-assistant/guide.md} +2 -3
- package/bundled/locales/zh-TW/skills/{claude-code/code-review-assistant → code-review-assistant}/review-checklist.md +4 -4
- package/bundled/locales/zh-TW/skills/{claude-code/commands → commands}/bdd.md +2 -2
- package/bundled/locales/zh-TW/skills/{claude-code/commands → commands}/methodology.md +3 -3
- package/bundled/locales/zh-TW/skills/{claude-code/commands → commands}/refactor.md +3 -3
- package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +61 -0
- package/bundled/locales/zh-TW/skills/{claude-code/commit-standards → commit-standards}/conventional-commits.md +4 -4
- package/bundled/locales/zh-TW/skills/{claude-code/commit-standards/SKILL.md → commit-standards/guide.md} +5 -6
- package/bundled/locales/zh-TW/skills/{claude-code/commit-standards → commit-standards}/language-options.md +3 -3
- package/bundled/locales/zh-TW/skills/docs-generator/SKILL.md +59 -0
- package/bundled/locales/zh-TW/skills/docs-generator/guide.md +262 -0
- package/bundled/locales/zh-TW/skills/{claude-code/documentation-guide → documentation-guide}/SKILL.md +7 -8
- package/bundled/locales/zh-TW/skills/{claude-code/documentation-guide → documentation-guide}/documentation-structure.md +4 -4
- package/bundled/locales/zh-TW/skills/{claude-code/documentation-guide → documentation-guide}/readme-template.md +3 -3
- package/bundled/locales/zh-TW/skills/{claude-code/error-code-guide → error-code-guide}/SKILL.md +6 -6
- package/bundled/locales/zh-TW/skills/forward-derivation/SKILL.md +62 -0
- package/bundled/locales/zh-TW/skills/{claude-code/forward-derivation/SKILL.md → forward-derivation/guide.md} +24 -19
- package/bundled/locales/zh-TW/skills/{claude-code/git-workflow-guide → git-workflow-guide}/SKILL.md +3 -3
- package/bundled/locales/zh-TW/skills/{claude-code/git-workflow-guide → git-workflow-guide}/branch-naming.md +3 -3
- package/bundled/locales/zh-TW/skills/{claude-code/git-workflow-guide → git-workflow-guide}/git-workflow.md +4 -4
- package/bundled/locales/zh-TW/skills/{claude-code/logging-guide → logging-guide}/SKILL.md +6 -6
- package/bundled/locales/zh-TW/skills/methodology-system/SKILL.md +78 -0
- package/bundled/locales/zh-TW/skills/{claude-code/methodology-system → methodology-system}/create-methodology.md +2 -2
- package/bundled/locales/zh-TW/skills/{claude-code/methodology-system/SKILL.md → methodology-system/guide.md} +2 -2
- package/bundled/locales/zh-TW/skills/{claude-code/methodology-system → methodology-system}/runtime.md +3 -3
- package/bundled/locales/zh-TW/skills/project-discovery/SKILL.md +66 -0
- package/bundled/locales/zh-TW/skills/project-discovery/guide.md +371 -0
- package/bundled/locales/zh-TW/skills/project-discovery/workflow.md +574 -0
- package/bundled/locales/zh-TW/skills/{claude-code/project-structure-guide → project-structure-guide}/SKILL.md +4 -4
- package/bundled/locales/zh-TW/skills/{claude-code/project-structure-guide → project-structure-guide}/language-patterns.md +1 -1
- package/bundled/locales/zh-TW/skills/refactoring-assistant/SKILL.md +67 -0
- package/bundled/locales/zh-TW/skills/{claude-code/refactoring-assistant/SKILL.md → refactoring-assistant/guide.md} +7 -8
- package/bundled/locales/zh-TW/skills/release-standards/SKILL.md +64 -0
- package/bundled/locales/zh-TW/skills/{claude-code/release-standards → release-standards}/changelog-format.md +3 -3
- package/bundled/locales/zh-TW/skills/{claude-code/release-standards/SKILL.md → release-standards/guide.md} +2 -3
- package/bundled/locales/zh-TW/skills/{claude-code/release-standards → release-standards}/release-workflow.md +60 -28
- package/bundled/locales/zh-TW/skills/{claude-code/release-standards → release-standards}/semantic-versioning.md +3 -3
- package/bundled/locales/zh-TW/skills/requirement-assistant/SKILL.md +67 -0
- package/bundled/locales/zh-TW/skills/{claude-code/requirement-assistant/SKILL.md → requirement-assistant/guide.md} +2 -3
- package/bundled/locales/zh-TW/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-checklist.md +3 -3
- package/bundled/locales/zh-TW/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-writing.md +3 -3
- package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +67 -0
- package/bundled/locales/zh-TW/skills/{claude-code/reverse-engineer → reverse-engineer}/bdd-extraction.md +2 -2
- package/bundled/locales/zh-TW/skills/{claude-code/reverse-engineer/SKILL.md → reverse-engineer/guide.md} +17 -18
- package/bundled/locales/zh-TW/skills/{claude-code/reverse-engineer → reverse-engineer}/tdd-analysis.md +2 -2
- package/bundled/locales/zh-TW/skills/{claude-code/reverse-engineer → reverse-engineer}/workflow.md +3 -3
- package/bundled/locales/zh-TW/skills/spec-driven-dev/SKILL.md +75 -0
- package/bundled/locales/zh-TW/skills/{claude-code/spec-driven-dev/SKILL.md → spec-driven-dev/guide.md} +9 -10
- package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +66 -0
- package/bundled/locales/zh-TW/skills/{claude-code/tdd-assistant/SKILL.md → tdd-assistant/guide.md} +9 -10
- package/bundled/locales/zh-TW/skills/{claude-code/tdd-assistant → tdd-assistant}/language-examples.md +3 -3
- package/bundled/locales/zh-TW/skills/{claude-code/tdd-assistant → tdd-assistant}/tdd-workflow.md +3 -3
- package/bundled/locales/zh-TW/skills/test-coverage-assistant/SKILL.md +65 -0
- package/bundled/locales/zh-TW/skills/{claude-code/test-coverage-assistant/SKILL.md → test-coverage-assistant/guide.md} +27 -24
- package/bundled/locales/zh-TW/skills/{claude-code/testing-guide → testing-guide}/SKILL.md +6 -6
- package/bundled/locales/zh-TW/skills/{claude-code/testing-guide → testing-guide}/testing-pyramid.md +4 -4
- package/bundled/locales/zh-TW/skills/{cline → tools/cline}/README.md +1 -1
- package/bundled/locales/zh-TW/skills/{copilot → tools/copilot}/README.md +1 -1
- package/bundled/locales/zh-TW/skills/{copilot → tools/copilot}/copilot-instructions.md +1 -1
- package/bundled/locales/zh-TW/skills/{cursor → tools/cursor}/README.md +1 -1
- package/bundled/locales/zh-TW/skills/{windsurf → tools/windsurf}/README.md +1 -1
- package/bundled/skills/INTEGRATION-GUIDE.md +210 -0
- package/bundled/skills/README.md +95 -0
- package/bundled/skills/_shared/README.md +60 -0
- package/bundled/skills/{claude-code/agents → agents}/README.md +2 -2
- package/bundled/skills/{claude-code/agents → agents}/code-architect.md +1 -1
- package/bundled/skills/{claude-code/agents → agents}/doc-writer.md +1 -1
- package/bundled/skills/{claude-code/agents → agents}/reviewer.md +1 -1
- package/bundled/skills/{claude-code/agents → agents}/spec-analyst.md +1 -1
- package/bundled/skills/{claude-code/agents → agents}/test-specialist.md +1 -1
- package/bundled/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/SKILL.md +28 -5
- package/bundled/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/anti-hallucination.md +24 -5
- package/bundled/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/certainty-labels.md +31 -6
- package/bundled/skills/ai-friendly-architecture/SKILL.md +216 -0
- package/bundled/skills/ai-instruction-standards/SKILL.md +209 -0
- package/bundled/skills/atdd-assistant/SKILL.md +74 -0
- package/bundled/skills/{claude-code/atdd-assistant → atdd-assistant}/acceptance-criteria-guide.md +1 -1
- package/bundled/skills/{claude-code/atdd-assistant → atdd-assistant}/atdd-workflow.md +1 -1
- package/bundled/skills/{claude-code/atdd-assistant/SKILL.md → atdd-assistant/guide.md} +11 -11
- package/bundled/skills/bdd-assistant/SKILL.md +70 -0
- package/bundled/skills/{claude-code/bdd-assistant → bdd-assistant}/bdd-workflow.md +1 -1
- package/bundled/skills/{claude-code/bdd-assistant → bdd-assistant}/gherkin-guide.md +1 -1
- package/bundled/skills/{claude-code/bdd-assistant/SKILL.md → bdd-assistant/guide.md} +11 -11
- package/bundled/skills/changelog-guide/SKILL.md +66 -0
- package/bundled/skills/{claude-code/changelog-guide/SKILL.md → changelog-guide/guide.md} +8 -6
- package/bundled/skills/checkin-assistant/SKILL.md +52 -0
- package/bundled/skills/{claude-code/checkin-assistant/SKILL.md → checkin-assistant/guide.md} +6 -6
- package/bundled/skills/code-review-assistant/SKILL.md +53 -0
- package/bundled/skills/{claude-code/code-review-assistant → code-review-assistant}/checkin-checklist.md +3 -3
- package/bundled/skills/{claude-code/code-review-assistant/SKILL.md → code-review-assistant/guide.md} +7 -5
- package/bundled/skills/{claude-code/code-review-assistant → code-review-assistant}/review-checklist.md +3 -3
- package/bundled/skills/commands/COMMAND-FAMILY-OVERVIEW.md +290 -0
- package/bundled/skills/{claude-code/commands → commands}/README.md +13 -3
- package/bundled/skills/{claude-code/commands → commands}/atdd.md +3 -3
- package/bundled/skills/{claude-code/commands → commands}/bdd.md +2 -2
- package/bundled/skills/commands/changelog.md +58 -0
- package/bundled/skills/{claude-code/commands → commands}/check.md +1 -1
- package/bundled/skills/commands/checkin.md +53 -0
- package/bundled/skills/{claude-code/commands → commands}/commit.md +3 -3
- package/bundled/skills/{claude-code/commands → commands}/config.md +1 -1
- package/bundled/skills/{claude-code/commands → commands}/coverage.md +5 -4
- package/bundled/skills/commands/derive-all.md +53 -0
- package/bundled/skills/commands/derive-atdd.md +49 -0
- package/bundled/skills/commands/derive-bdd.md +47 -0
- package/bundled/skills/commands/derive-tdd.md +48 -0
- package/bundled/skills/commands/derive.md +72 -0
- package/bundled/skills/commands/discover.md +80 -0
- package/bundled/skills/commands/docgen.md +61 -0
- package/bundled/skills/commands/docs.md +59 -0
- package/bundled/skills/commands/guide.md +44 -0
- package/bundled/skills/{claude-code/commands → commands}/init.md +2 -2
- package/bundled/skills/{claude-code/commands → commands}/methodology.md +32 -16
- package/bundled/skills/{claude-code/commands → commands}/refactor.md +2 -2
- package/bundled/skills/commands/release.md +56 -0
- package/bundled/skills/{claude-code/commands → commands}/requirement.md +3 -3
- package/bundled/skills/commands/reverse-bdd.md +47 -0
- package/bundled/skills/commands/reverse-sdd.md +51 -0
- package/bundled/skills/commands/reverse-tdd.md +51 -0
- package/bundled/skills/commands/reverse.md +63 -0
- package/bundled/skills/{claude-code/commands → commands}/review.md +3 -3
- package/bundled/skills/commands/sdd.md +135 -0
- package/bundled/skills/{claude-code/commands → commands}/tdd.md +3 -3
- package/bundled/skills/{claude-code/commands → commands}/update.md +2 -2
- package/bundled/skills/commit-standards/SKILL.md +60 -0
- package/bundled/skills/{claude-code/commit-standards → commit-standards}/conventional-commits.md +3 -3
- package/bundled/skills/{claude-code/commit-standards/SKILL.md → commit-standards/guide.md} +17 -5
- package/bundled/skills/{claude-code/commit-standards → commit-standards}/language-options.md +2 -2
- package/bundled/skills/docs-generator/SKILL.md +69 -0
- package/bundled/skills/docs-generator/guide.md +258 -0
- package/bundled/skills/{claude-code/documentation-guide → documentation-guide}/SKILL.md +7 -7
- package/bundled/skills/{claude-code/documentation-guide → documentation-guide}/documentation-structure.md +3 -3
- package/bundled/skills/{claude-code/documentation-guide → documentation-guide}/readme-template.md +2 -2
- package/bundled/skills/{claude-code/error-code-guide → error-code-guide}/SKILL.md +7 -5
- package/bundled/skills/forward-derivation/SKILL.md +61 -0
- package/bundled/skills/{claude-code/forward-derivation/SKILL.md → forward-derivation/guide.md} +44 -29
- package/bundled/skills/{claude-code/git-workflow-guide → git-workflow-guide}/SKILL.md +7 -5
- package/bundled/skills/{claude-code/git-workflow-guide → git-workflow-guide}/branch-naming.md +2 -2
- package/bundled/skills/{claude-code/git-workflow-guide → git-workflow-guide}/git-workflow.md +3 -3
- package/bundled/skills/{claude-code/logging-guide → logging-guide}/SKILL.md +7 -5
- package/bundled/skills/methodology-system/SKILL.md +75 -0
- package/bundled/skills/{claude-code/methodology-system → methodology-system}/create-methodology.md +1 -1
- package/bundled/skills/{claude-code/methodology-system/SKILL.md → methodology-system/guide.md} +51 -16
- package/bundled/skills/methodology-system/integrated-flow.md +454 -0
- package/bundled/skills/{claude-code/methodology-system → methodology-system}/runtime.md +2 -2
- package/bundled/skills/project-discovery/SKILL.md +63 -0
- package/bundled/skills/project-discovery/guide.md +367 -0
- package/bundled/skills/project-discovery/workflow.md +566 -0
- package/bundled/skills/{claude-code/project-structure-guide → project-structure-guide}/SKILL.md +14 -4
- package/bundled/skills/refactoring-assistant/SKILL.md +78 -0
- package/bundled/skills/{claude-code/refactoring-assistant/SKILL.md → refactoring-assistant/guide.md} +7 -7
- package/bundled/skills/release-standards/SKILL.md +61 -0
- package/bundled/skills/{claude-code/release-standards → release-standards}/changelog-format.md +2 -2
- package/bundled/skills/{claude-code/release-standards/SKILL.md → release-standards/guide.md} +7 -5
- package/bundled/skills/{claude-code/release-standards → release-standards}/release-workflow.md +59 -24
- package/bundled/skills/{claude-code/release-standards → release-standards}/semantic-versioning.md +2 -2
- package/bundled/skills/requirement-assistant/SKILL.md +66 -0
- package/bundled/skills/{claude-code/requirement-assistant/SKILL.md → requirement-assistant/guide.md} +14 -6
- package/bundled/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-checklist.md +2 -2
- package/bundled/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-writing.md +2 -2
- package/bundled/skills/reverse-engineer/SKILL.md +64 -0
- package/bundled/skills/{claude-code/reverse-engineer → reverse-engineer}/bdd-extraction.md +1 -1
- package/bundled/skills/{claude-code/reverse-engineer/SKILL.md → reverse-engineer/guide.md} +21 -18
- package/bundled/skills/{claude-code/reverse-engineer → reverse-engineer}/tdd-analysis.md +1 -1
- package/bundled/skills/{claude-code/reverse-engineer → reverse-engineer}/workflow.md +2 -2
- package/bundled/skills/spec-driven-dev/SKILL.md +80 -0
- package/bundled/skills/{claude-code/spec-driven-dev/SKILL.md → spec-driven-dev/guide.md} +50 -8
- package/bundled/skills/tdd-assistant/SKILL.md +65 -0
- package/bundled/skills/{claude-code/tdd-assistant/SKILL.md → tdd-assistant/guide.md} +10 -10
- package/bundled/skills/{claude-code/tdd-assistant → tdd-assistant}/language-examples.md +3 -3
- package/bundled/skills/{claude-code/tdd-assistant → tdd-assistant}/tdd-workflow.md +2 -2
- package/bundled/skills/test-coverage-assistant/SKILL.md +63 -0
- package/bundled/skills/{claude-code/test-coverage-assistant/SKILL.md → test-coverage-assistant/guide.md} +39 -24
- package/bundled/skills/{claude-code/testing-guide → testing-guide}/SKILL.md +12 -7
- package/bundled/skills/{claude-code/testing-guide → testing-guide}/testing-pyramid.md +3 -3
- package/bundled/skills/testing-guide/testing-theory.md +2291 -0
- package/bundled/skills/tools/cline/.clinerules +79 -0
- package/bundled/skills/tools/cline/README.md +50 -0
- package/bundled/skills/tools/copilot/README.md +99 -0
- package/bundled/skills/tools/copilot/copilot-instructions.md +71 -0
- package/bundled/skills/tools/cursor/.cursorrules +101 -0
- package/bundled/skills/tools/cursor/README.md +50 -0
- package/bundled/skills/tools/windsurf/.windsurfrules +76 -0
- package/bundled/skills/tools/windsurf/README.md +51 -0
- package/bundled/skills/{claude-code/workflows → workflows}/README.md +1 -1
- package/bundled/skills/workflows/release.workflow.yaml +893 -0
- package/package.json +4 -1
- package/src/commands/check.js +195 -130
- package/src/commands/config.js +1262 -0
- package/src/commands/configure.js +3 -950
- package/src/commands/fix.js +53 -0
- package/src/commands/hitl.js +19 -0
- package/src/commands/init.js +320 -1030
- package/src/commands/list.js +1 -1
- package/src/commands/simulate.js +61 -0
- package/src/commands/spec.js +288 -0
- package/src/commands/start.js +373 -0
- package/src/commands/sweep.js +142 -0
- package/src/commands/update.js +136 -19
- package/src/commands/workflow.js +265 -1
- package/src/config/ai-agent-paths.js +89 -29
- package/src/core/constants.js +7 -1
- package/src/core/manifest.js +1 -0
- package/src/flows/init-flow.js +243 -0
- package/src/hitl/checkpoint.js +80 -0
- package/src/hitl/classifier.js +54 -0
- package/src/hitl/manager.js +88 -0
- package/src/i18n/messages.js +907 -99
- package/src/index.js +1 -0
- package/src/installers/integration-installer.js +237 -0
- package/src/installers/manifest-installer.js +131 -0
- package/src/installers/skills-installer.js +286 -0
- package/src/installers/standards-installer.js +193 -0
- package/src/missions/MissionManager.js +501 -0
- package/src/prompts/init.js +228 -130
- package/src/prompts/integrations.js +13 -1
- package/src/schemas/standard.schema.json +117 -0
- package/src/utils/agents-installer.js +2 -2
- package/src/utils/config-loader.js +47 -0
- package/src/utils/config-manager.js +108 -0
- package/src/utils/config-merger.js +47 -0
- package/src/utils/github.js +22 -18
- package/src/utils/inquirer-patch.js +98 -0
- package/src/utils/integration-generator.js +392 -58
- package/src/utils/reference-sync.js +69 -19
- package/src/utils/skills-installer.js +6 -3
- package/src/utils/standard-fixer.js +141 -0
- package/src/utils/standard-validator.js +329 -0
- package/src/utils/workflow-executor.js +886 -0
- package/src/utils/workflow-state.js +404 -0
- package/src/utils/workflows-installer.js +2 -2
- package/src/vibe/auto-sweep.js +349 -0
- package/src/vibe/micro-spec.js +428 -0
- package/standards-registry.json +278 -102
- package/bundled/locales/zh-CN/skills/claude-code/README.md +0 -174
- package/bundled/locales/zh-CN/skills/claude-code/test-coverage-assistant/SKILL.md +0 -282
- package/bundled/locales/zh-TW/skills/claude-code/README.md +0 -174
- package/bundled/skills/claude-code/README.md +0 -215
- package/bundled/skills/claude-code/commands/changelog.md +0 -57
- package/bundled/skills/claude-code/commands/derive-all.md +0 -214
- package/bundled/skills/claude-code/commands/derive-atdd.md +0 -177
- package/bundled/skills/claude-code/commands/derive-bdd.md +0 -158
- package/bundled/skills/claude-code/commands/derive-tdd.md +0 -259
- package/bundled/skills/claude-code/commands/docs.md +0 -75
- package/bundled/skills/claude-code/commands/release.md +0 -50
- package/bundled/skills/claude-code/commands/reverse-bdd.md +0 -264
- package/bundled/skills/claude-code/commands/reverse-spec.md +0 -185
- package/bundled/skills/claude-code/commands/reverse-tdd.md +0 -351
- package/bundled/skills/claude-code/commands/spec.md +0 -69
- package/bundled/skills/claude-code/methodology-system/integrated-flow.md +0 -322
- /package/bundled/skills/{claude-code/CONTRIBUTING.template.md → CONTRIBUTING.template.md} +0 -0
- /package/bundled/skills/{claude-code/ai → ai}/standards/checkin.ai.yaml +0 -0
- /package/bundled/skills/{claude-code/ai → ai}/standards/commit.ai.yaml +0 -0
- /package/bundled/skills/{claude-code/ai → ai}/standards/refactoring.ai.yaml +0 -0
- /package/bundled/skills/{claude-code/ai → ai}/standards/testing.ai.yaml +0 -0
- /package/bundled/skills/{claude-code/project-structure-guide → project-structure-guide}/language-patterns.md +0 -0
- /package/bundled/skills/{claude-code/workflows → workflows}/code-review.workflow.yaml +0 -0
- /package/bundled/skills/{claude-code/workflows → workflows}/feature-dev.workflow.yaml +0 -0
- /package/bundled/skills/{claude-code/workflows → workflows}/integrated-flow.workflow.yaml +0 -0
- /package/bundled/skills/{claude-code/workflows → workflows}/large-codebase-analysis.workflow.yaml +0 -0
|
@@ -2,85 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
> **Language**: English | [繁體中文](../locales/zh-TW/core/refactoring-standards.md)
|
|
4
4
|
|
|
5
|
-
**Version**: 2.
|
|
6
|
-
**Last Updated**: 2026-01-
|
|
5
|
+
**Version**: 2.1.0
|
|
6
|
+
**Last Updated**: 2026-01-29
|
|
7
7
|
**Applicability**: All software projects undertaking code improvement initiatives
|
|
8
|
+
**Scope**: partial
|
|
9
|
+
**Industry Standards**: ISO/IEC 25010 Maintainability
|
|
10
|
+
|
|
11
|
+
> **For detailed patterns and tutorials, see [Refactoring Guide](guides/refactoring-guide.md)**
|
|
8
12
|
|
|
9
13
|
---
|
|
10
14
|
|
|
11
15
|
## Purpose
|
|
12
16
|
|
|
13
|
-
This standard defines comprehensive guidelines for code refactoring, covering everything from daily TDD refactoring cycles to large-scale legacy system modernization.
|
|
14
|
-
|
|
15
|
-
**Key Benefits**:
|
|
16
|
-
- Systematic approach to improving code quality
|
|
17
|
-
- Reduced risk of introducing bugs during refactoring
|
|
18
|
-
- Clear decision framework for refactor vs. rewrite
|
|
19
|
-
- Measurable outcomes and ROI tracking
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Table of Contents
|
|
24
|
-
|
|
25
|
-
1. [Refactoring vs. Rewriting Decision Matrix](#refactoring-vs-rewriting-decision-matrix)
|
|
26
|
-
2. [Tactical Refactoring Strategies](#tactical-refactoring-strategies)
|
|
27
|
-
- [Preparatory Refactoring](#preparatory-refactoring)
|
|
28
|
-
- [The Boy Scout Rule](#the-boy-scout-rule)
|
|
29
|
-
- [Red-Green-Refactor](#red-green-refactor)
|
|
30
|
-
3. [Strategic Refactoring Strategies](#strategic-refactoring-strategies)
|
|
31
|
-
- [Strangler Fig Pattern](#strangler-fig-pattern)
|
|
32
|
-
- [Anti-Corruption Layer](#anti-corruption-layer)
|
|
33
|
-
- [Branch by Abstraction](#branch-by-abstraction)
|
|
34
|
-
- [Parallel Change](#parallel-change-expand-migrate-contract)
|
|
35
|
-
4. [Safety Strategies for Legacy Code](#safety-strategies-for-legacy-code)
|
|
36
|
-
- [Characterization Tests](#characterization-tests)
|
|
37
|
-
- [Scratch Refactoring](#scratch-refactoring)
|
|
38
|
-
- [Finding Seams](#finding-seams)
|
|
39
|
-
- [Sprout and Wrap Techniques](#sprout-and-wrap-techniques)
|
|
40
|
-
5. [Database Refactoring](#database-refactoring)
|
|
41
|
-
6. [Safe Refactoring Workflow](#safe-refactoring-workflow)
|
|
42
|
-
7. [Refactoring Metrics](#refactoring-metrics)
|
|
43
|
-
8. [Team Collaboration](#team-collaboration)
|
|
44
|
-
9. [Technical Debt Management](#technical-debt-management)
|
|
45
|
-
10. [Decision Matrix Summary](#decision-matrix-summary)
|
|
46
|
-
11. [Related Standards](#related-standards)
|
|
47
|
-
12. [References](#references)
|
|
48
|
-
13. [Version History](#version-history)
|
|
17
|
+
This standard defines comprehensive guidelines for code refactoring, covering everything from daily TDD refactoring cycles to large-scale legacy system modernization.
|
|
49
18
|
|
|
50
19
|
---
|
|
51
20
|
|
|
52
21
|
## Refactoring vs. Rewriting Decision Matrix
|
|
53
22
|
|
|
54
|
-
Before starting any large refactoring effort, evaluate whether refactoring or rewriting is more appropriate.
|
|
55
|
-
|
|
56
|
-
### Decision Flowchart
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
60
|
-
│ Refactor vs. Rewrite Decision Tree │
|
|
61
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
62
|
-
│ │
|
|
63
|
-
│ Is the code currently working in production? │
|
|
64
|
-
│ ├─ No → Consider rewrite (lower risk) │
|
|
65
|
-
│ └─ Yes ↓ │
|
|
66
|
-
│ │
|
|
67
|
-
│ Do you understand what the code does? │
|
|
68
|
-
│ ├─ No → Characterization tests first, then decide │
|
|
69
|
-
│ └─ Yes ↓ │
|
|
70
|
-
│ │
|
|
71
|
-
│ Is there adequate test coverage (>60%)? │
|
|
72
|
-
│ ├─ No → Add tests first, then decide │
|
|
73
|
-
│ └─ Yes ↓ │
|
|
74
|
-
│ │
|
|
75
|
-
│ Is the core architecture salvageable? │
|
|
76
|
-
│ ├─ No → Strangler Fig (gradual replacement) │
|
|
77
|
-
│ └─ Yes → Incremental Refactoring ✓ │
|
|
78
|
-
│ │
|
|
79
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Comparison Matrix
|
|
83
|
-
|
|
84
23
|
| Factor | Favor Refactoring | Favor Rewriting |
|
|
85
24
|
|--------|-------------------|-----------------|
|
|
86
25
|
| **Codebase size** | Large, complex | Small, isolated |
|
|
@@ -91,468 +30,35 @@ Before starting any large refactoring effort, evaluate whether refactoring or re
|
|
|
91
30
|
| **Time pressure** | Tight deadlines | Flexible timeline |
|
|
92
31
|
| **Risk tolerance** | Low | Higher |
|
|
93
32
|
|
|
94
|
-
### Warning: Second-System Effect
|
|
95
|
-
|
|
96
|
-
> "The second system is the most dangerous system a person ever designs." — Fred Brooks
|
|
97
|
-
|
|
98
|
-
When rewriting, teams often over-engineer. Avoid:
|
|
99
|
-
- Adding features not in the original
|
|
100
|
-
- Over-abstracting "for future flexibility"
|
|
101
|
-
- Ignoring lessons from the existing system
|
|
102
|
-
|
|
103
33
|
---
|
|
104
34
|
|
|
105
|
-
##
|
|
106
|
-
|
|
107
|
-
Tactical strategies are applied during daily development work. They operate at minute-to-hour timescales and require minimal coordination.
|
|
108
|
-
|
|
109
|
-
### Preparatory Refactoring
|
|
110
|
-
|
|
111
|
-
**Definition**: Restructuring existing code to make an upcoming change easier to implement.
|
|
112
|
-
|
|
113
|
-
> "First make the change easy (this might be hard), then make the easy change." — Kent Beck
|
|
114
|
-
|
|
115
|
-
**When to Use**:
|
|
116
|
-
- Existing architecture resists the feature you need to add
|
|
117
|
-
- Code structure needs adjustment to accommodate new requirements
|
|
118
|
-
- You want to reduce friction for upcoming changes
|
|
119
|
-
|
|
120
|
-
**Workflow**:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
1. Identify the change you want to make
|
|
124
|
-
2. Identify what makes this change difficult
|
|
125
|
-
3. Refactor to make the change easy
|
|
126
|
-
4. Make the (now easy) change
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
**Example**:
|
|
130
|
-
- Before: Adding caching to a tightly-coupled service is complex
|
|
131
|
-
- Preparatory refactoring: Extract interface, inject dependencies
|
|
132
|
-
- After: Adding caching becomes straightforward
|
|
133
|
-
|
|
134
|
-
**Key Principles**:
|
|
135
|
-
- The preparatory refactoring is a separate commit from the feature
|
|
136
|
-
- Each step maintains passing tests
|
|
137
|
-
- Don't combine refactoring with feature work in the same commit
|
|
138
|
-
|
|
139
|
-
### The Boy Scout Rule
|
|
140
|
-
|
|
141
|
-
**Definition**: Leave the code cleaner than you found it. This is "opportunistic refactoring" — instead of scheduling refactoring sprints, clean up code as you touch it during bug fixes or feature work.
|
|
142
|
-
|
|
143
|
-
> "Leave the campground cleaner than you found it." — Robert C. Martin
|
|
144
|
-
|
|
145
|
-
**When to Use**:
|
|
146
|
-
- Any maintenance task
|
|
147
|
-
- Bug fixes
|
|
148
|
-
- Feature additions
|
|
149
|
-
- Fighting software entropy
|
|
150
|
-
|
|
151
|
-
**Guidelines**:
|
|
152
|
-
- Make only small improvements (minutes, not hours)
|
|
153
|
-
- Don't change behavior
|
|
154
|
-
- Don't break existing tests
|
|
155
|
-
- Keep scope within your current task
|
|
156
|
-
|
|
157
|
-
**Examples of Boy Scout Improvements**:
|
|
158
|
-
- Rename a confusingly-named variable
|
|
159
|
-
- Extract a few lines into a well-named method
|
|
160
|
-
- Remove dead code you notice
|
|
161
|
-
- Add a clarifying comment
|
|
162
|
-
- Fix a minor code style issue
|
|
163
|
-
|
|
164
|
-
**Anti-patterns to Avoid**:
|
|
165
|
-
- Turning a bug fix into a major refactoring project
|
|
166
|
-
- Refactoring unrelated code
|
|
167
|
-
- Making changes without test coverage
|
|
168
|
-
- Scope creep beyond the original task
|
|
169
|
-
|
|
170
|
-
### Red-Green-Refactor
|
|
171
|
-
|
|
172
|
-
Part of the Test-Driven Development (TDD) cycle. See [Test-Driven Development](test-driven-development.md) for complete details.
|
|
35
|
+
## When to Refactor
|
|
173
36
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
│ ┌─────┐ ┌─────┐ ┌─────────┐ │
|
|
185
|
-
│ │ RED │ ──► │GREEN│ ──► │REFACTOR │ │
|
|
186
|
-
│ └─────┘ └─────┘ └─────────┘ │
|
|
187
|
-
│ ▲ │ │
|
|
188
|
-
│ └──────────────────────────┘ │
|
|
189
|
-
│ │
|
|
190
|
-
└─────────────────────────────────────────┘
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
**Common Refactoring Techniques**:
|
|
194
|
-
- Extract Method
|
|
195
|
-
- Rename
|
|
196
|
-
- Inline Variable
|
|
197
|
-
- Replace Magic Number with Constant
|
|
198
|
-
- Remove Duplication
|
|
37
|
+
| Situation | Recommended Strategy |
|
|
38
|
+
|-----------|---------------------|
|
|
39
|
+
| Feature development blocked by messy code | Preparatory Refactoring |
|
|
40
|
+
| Touching code during a bug fix | Boy Scout Rule |
|
|
41
|
+
| Writing new code with TDD | Red-Green-Refactor |
|
|
42
|
+
| Replacing an entire legacy system | Strangler Fig Pattern |
|
|
43
|
+
| Need to integrate with legacy without being polluted | Anti-Corruption Layer |
|
|
44
|
+
| Refactoring shared code without feature branches | Branch by Abstraction |
|
|
45
|
+
| Changing a widely-used interface | Parallel Change (Expand-Migrate-Contract) |
|
|
46
|
+
| Working with untested legacy code | Characterization Tests FIRST |
|
|
199
47
|
|
|
200
48
|
---
|
|
201
49
|
|
|
202
|
-
##
|
|
203
|
-
|
|
204
|
-
Strategic strategies are used for significant architectural changes. They operate at week-to-month timescales and require team coordination.
|
|
205
|
-
|
|
206
|
-
### Strangler Fig Pattern
|
|
207
|
-
|
|
208
|
-
**Definition**: Gradually replacing a legacy system by incrementally routing functionality to a new system.
|
|
209
|
-
|
|
210
|
-
**Origin**: Named after strangler fig trees that grow around a host tree, eventually replacing it.
|
|
211
|
-
|
|
212
|
-
**When to Use**:
|
|
213
|
-
- Gradually replacing a legacy system
|
|
214
|
-
- Cannot afford big-bang rewrite
|
|
215
|
-
- Need to maintain service during migration
|
|
216
|
-
|
|
217
|
-
**Architecture**:
|
|
218
|
-
|
|
219
|
-
```
|
|
220
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
221
|
-
│ Strangler Fig Pattern │
|
|
222
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
223
|
-
│ │
|
|
224
|
-
│ Phase 1: INTERCEPT │
|
|
225
|
-
│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
|
|
226
|
-
│ │ Request │────▶│ Facade │────▶│ Legacy (100%)│ │
|
|
227
|
-
│ └─────────┘ └─────────┘ └─────────────┘ │
|
|
228
|
-
│ │
|
|
229
|
-
│ Phase 2: MIGRATE │
|
|
230
|
-
│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
|
|
231
|
-
│ │ Request │────▶│ Facade │──┬─▶│ New (Feature A)│ │
|
|
232
|
-
│ └─────────┘ └─────────┘ │ └─────────────┘ │
|
|
233
|
-
│ └─▶│ Legacy (Rest) │ │
|
|
234
|
-
│ └─────────────┘ │
|
|
235
|
-
│ │
|
|
236
|
-
│ Phase 3: COMPLETE │
|
|
237
|
-
│ ┌─────────┐ ┌─────────────┐ │
|
|
238
|
-
│ │ Request │────▶│ New (100%) │ [Legacy decommissioned] │
|
|
239
|
-
│ └─────────┘ └─────────────┘ │
|
|
240
|
-
│ │
|
|
241
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
**Checklist**:
|
|
245
|
-
- [ ] Identify interception point (API gateway, facade, proxy)
|
|
246
|
-
- [ ] Create event capture layer
|
|
247
|
-
- [ ] Implement first feature in new system
|
|
248
|
-
- [ ] Route traffic incrementally
|
|
249
|
-
- [ ] Monitor and compare results
|
|
250
|
-
- [ ] Decommission legacy component
|
|
251
|
-
|
|
252
|
-
### Anti-Corruption Layer
|
|
253
|
-
|
|
254
|
-
**Definition**: A translation layer between a legacy system and a new system that prevents the legacy system's chaotic domain model from "corrupting" the new system's clean architecture.
|
|
255
|
-
|
|
256
|
-
**Origin**: Eric Evans, Domain-Driven Design (2003)
|
|
257
|
-
|
|
258
|
-
**When to Use**:
|
|
259
|
-
- New and legacy systems must coexist and interact frequently
|
|
260
|
-
- Legacy system has a complex/chaotic domain model
|
|
261
|
-
- Protecting the new system's Bounded Context
|
|
262
|
-
|
|
263
|
-
**Architecture**:
|
|
264
|
-
|
|
265
|
-
```
|
|
266
|
-
┌────────────────────────────────────────────────────────────┐
|
|
267
|
-
│ Anti-Corruption Layer (ACL) │
|
|
268
|
-
├────────────────────────────────────────────────────────────┤
|
|
269
|
-
│ │
|
|
270
|
-
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
271
|
-
│ │ New System │────▶│ ACL │────▶│Legacy System│ │
|
|
272
|
-
│ │ (Clean API) │ │ │ │(Messy Model)│ │
|
|
273
|
-
│ └─────────────┘ │ ┌─────────┐ │ └─────────────┘ │
|
|
274
|
-
│ │ │ Adapter │ │ │
|
|
275
|
-
│ │ │ Facade │ │ │
|
|
276
|
-
│ │ │Translator││ │
|
|
277
|
-
│ │ └─────────┘ │ │
|
|
278
|
-
│ └─────────────┘ │
|
|
279
|
-
│ │
|
|
280
|
-
└────────────────────────────────────────────────────────────┘
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
**Components**:
|
|
284
|
-
|
|
285
|
-
| Component | Purpose |
|
|
286
|
-
|-----------|---------|
|
|
287
|
-
| **Facade** | Simplifies complex legacy interfaces |
|
|
288
|
-
| **Adapter** | Converts legacy data formats to new domain model |
|
|
289
|
-
| **Translator** | Maps legacy terminology to ubiquitous language |
|
|
290
|
-
|
|
291
|
-
**Implementation Checklist**:
|
|
292
|
-
- [ ] Define clear interface for the ACL
|
|
293
|
-
- [ ] Map legacy entities to new domain model
|
|
294
|
-
- [ ] Handle data format conversions
|
|
295
|
-
- [ ] Implement error translation
|
|
296
|
-
- [ ] Add logging for debugging
|
|
297
|
-
- [ ] Thoroughly test ACL isolation
|
|
298
|
-
|
|
299
|
-
**Comparison with Strangler Fig**:
|
|
300
|
-
|
|
301
|
-
| Aspect | Strangler Fig | Anti-Corruption Layer |
|
|
302
|
-
|--------|---------------|----------------------|
|
|
303
|
-
| **Goal** | Replace legacy system | Coexist with legacy system |
|
|
304
|
-
| **Direction** | Migrate away from legacy | Integrate with legacy |
|
|
305
|
-
| **End state** | Legacy decommissioned | Both systems continue |
|
|
306
|
-
|
|
307
|
-
### Branch by Abstraction
|
|
308
|
-
|
|
309
|
-
**Definition**: Refactoring shared code without long-lived branches by introducing an abstraction layer.
|
|
310
|
-
|
|
311
|
-
**When to Use**:
|
|
312
|
-
- Refactoring shared code without long-lived branches
|
|
313
|
-
- Need trunk-based development
|
|
314
|
-
- Changes are too risky for single commit
|
|
315
|
-
|
|
316
|
-
**Steps**:
|
|
317
|
-
|
|
318
|
-
```
|
|
319
|
-
Step 1: Introduce Abstraction
|
|
320
|
-
Client → Abstraction (interface) → Old Implementation
|
|
321
|
-
|
|
322
|
-
Step 2: Add New Implementation
|
|
323
|
-
Client → Abstraction → Old Implementation
|
|
324
|
-
└─→ New Implementation (feature-toggled)
|
|
325
|
-
|
|
326
|
-
Step 3: Switch and Remove
|
|
327
|
-
Client → New Implementation
|
|
328
|
-
[Old Implementation removed]
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
**Key Principles**:
|
|
332
|
-
- All changes on main/trunk (no long branches)
|
|
333
|
-
- Feature toggles control which implementation is active
|
|
334
|
-
- Both implementations can coexist during transition
|
|
335
|
-
|
|
336
|
-
### Parallel Change (Expand-Migrate-Contract)
|
|
337
|
-
|
|
338
|
-
**Definition**: Changing interfaces used by multiple clients through a three-phase approach.
|
|
339
|
-
|
|
340
|
-
**When to Use**:
|
|
341
|
-
- Changing interfaces used by multiple clients
|
|
342
|
-
- Database schema migration
|
|
343
|
-
- Need zero-downtime migration
|
|
344
|
-
|
|
345
|
-
**Phases**:
|
|
346
|
-
|
|
347
|
-
```
|
|
348
|
-
Phase 1: EXPAND
|
|
349
|
-
├─ Add new field/method alongside old
|
|
350
|
-
├─ New code uses new interface
|
|
351
|
-
└─ Old code still works
|
|
352
|
-
|
|
353
|
-
Phase 2: MIGRATE
|
|
354
|
-
├─ Update all clients to use new interface
|
|
355
|
-
├─ Verify all clients migrated
|
|
356
|
-
└─ Data migration (if needed)
|
|
357
|
-
|
|
358
|
-
Phase 3: CONTRACT
|
|
359
|
-
├─ Remove old field/method
|
|
360
|
-
├─ Clean up migration code
|
|
361
|
-
└─ Update documentation
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
## Safety Strategies for Legacy Code
|
|
367
|
-
|
|
368
|
-
Based on Michael Feathers' "Working Effectively with Legacy Code".
|
|
369
|
-
|
|
370
|
-
### The Legacy Code Dilemma
|
|
371
|
-
|
|
372
|
-
**Definition**: Legacy code = code without tests (regardless of age)
|
|
373
|
-
|
|
374
|
-
**The Dilemma**:
|
|
375
|
-
- To change code safely, we need tests
|
|
376
|
-
- To add tests, we often need to change code
|
|
377
|
-
- Changing code without tests is risky
|
|
378
|
-
|
|
379
|
-
**Solution**: Use safe techniques to add tests before making changes.
|
|
380
|
-
|
|
381
|
-
### Characterization Tests
|
|
382
|
-
|
|
383
|
-
**Definition**: Tests that capture existing behavior (not verify correctness).
|
|
384
|
-
|
|
385
|
-
**Purpose**: Create a safety net before refactoring legacy code.
|
|
386
|
-
|
|
387
|
-
**Process**:
|
|
388
|
-
|
|
389
|
-
```
|
|
390
|
-
1. Call the code you want to understand
|
|
391
|
-
2. Write an assertion you expect to FAIL
|
|
392
|
-
3. Run the test and see what actually happens
|
|
393
|
-
4. Update the assertion to match actual behavior
|
|
394
|
-
5. Repeat until you've covered the behavior you need to change
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
**Example**:
|
|
398
|
-
|
|
399
|
-
```javascript
|
|
400
|
-
// Step 1: Initial (expected to fail)
|
|
401
|
-
test('calculateDiscount returns... something', () => {
|
|
402
|
-
const result = calculateDiscount(100, 'GOLD');
|
|
403
|
-
expect(result).toBe(0); // Guess - will probably fail
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
// Step 2: After running, update with actual value
|
|
407
|
-
test('calculateDiscount returns 15 for GOLD customers', () => {
|
|
408
|
-
const result = calculateDiscount(100, 'GOLD');
|
|
409
|
-
expect(result).toBe(15); // Actual behavior
|
|
410
|
-
});
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
**Key Principle**: Characterization tests document what the code *does*, not what it *should do*.
|
|
414
|
-
|
|
415
|
-
### Scratch Refactoring
|
|
416
|
-
|
|
417
|
-
**Definition**: Refactoring to understand code, without keeping the changes.
|
|
418
|
-
|
|
419
|
-
**Purpose**: Explore and understand undocumented code through hands-on modification.
|
|
420
|
-
|
|
421
|
-
**Workflow**:
|
|
422
|
-
|
|
423
|
-
```
|
|
424
|
-
1. Create a scratch branch (or use git stash)
|
|
425
|
-
2. Aggressively refactor to understand the code
|
|
426
|
-
3. Take notes on what you learn
|
|
427
|
-
4. Discard all changes (git reset --hard)
|
|
428
|
-
5. Apply learnings to write characterization tests
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
**When to Use**:
|
|
432
|
-
- Code is too complex to understand by reading
|
|
433
|
-
- No documentation exists
|
|
434
|
-
- You need to build a mental model quickly
|
|
435
|
-
|
|
436
|
-
**Key Principle**: The goal is understanding, not clean code. Discard everything when done.
|
|
50
|
+
## Strategy Summary
|
|
437
51
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
**
|
|
441
|
-
|
|
442
|
-
|
|
|
443
|
-
|
|
444
|
-
| **
|
|
445
|
-
| **
|
|
446
|
-
| **
|
|
447
|
-
|
|
448
|
-
**Purpose**: Inject test doubles without modifying legacy code.
|
|
449
|
-
|
|
450
|
-
### Sprout and Wrap Techniques
|
|
451
|
-
|
|
452
|
-
| Technique | When to Use | How |
|
|
453
|
-
|-----------|-------------|-----|
|
|
454
|
-
| **Sprout Method** | Adding new logic to existing method | Create new method, call from old |
|
|
455
|
-
| **Sprout Class** | New logic needs to evolve independently | Create new class, reference from old |
|
|
456
|
-
| **Wrap Method** | Need to add behavior before/after | Rename original, create wrapper |
|
|
457
|
-
| **Wrap Class** | Decorate existing class | Decorator pattern |
|
|
458
|
-
|
|
459
|
-
**Principle**: New code uses TDD; legacy code stays untouched until tested.
|
|
460
|
-
|
|
461
|
-
### Code Archaeology
|
|
462
|
-
|
|
463
|
-
Techniques for understanding undocumented code:
|
|
464
|
-
|
|
465
|
-
```
|
|
466
|
-
1. Scratch Refactoring (see above)
|
|
467
|
-
├─ Refactor to understand, not to keep
|
|
468
|
-
├─ Use git stash or branch
|
|
469
|
-
└─ Discard when done (git reset --hard)
|
|
470
|
-
|
|
471
|
-
2. Trace Variable Flow
|
|
472
|
-
├─ Follow data from input to output
|
|
473
|
-
├─ Mark key transformation points
|
|
474
|
-
└─ Document as you discover
|
|
475
|
-
|
|
476
|
-
3. Runtime Observation
|
|
477
|
-
├─ Add temporary logging
|
|
478
|
-
├─ Use debugger step-through
|
|
479
|
-
└─ Build mental model
|
|
480
|
-
|
|
481
|
-
4. Git Archaeology
|
|
482
|
-
├─ git log -p <file> (see all changes)
|
|
483
|
-
├─ git blame (find original author)
|
|
484
|
-
└─ Search commit messages for context
|
|
485
|
-
```
|
|
486
|
-
|
|
487
|
-
---
|
|
488
|
-
|
|
489
|
-
## Database Refactoring
|
|
490
|
-
|
|
491
|
-
### Expand-Contract Pattern for Schema Changes
|
|
492
|
-
|
|
493
|
-
```
|
|
494
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
495
|
-
│ Database Refactoring (Expand-Contract) │
|
|
496
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
497
|
-
│ │
|
|
498
|
-
│ Phase 1: EXPAND (Add new, keep old) │
|
|
499
|
-
│ ├─ Add new column/table │
|
|
500
|
-
│ ├─ Application writes to BOTH old and new │
|
|
501
|
-
│ └─ Safe to rollback at this point │
|
|
502
|
-
│ │
|
|
503
|
-
│ Phase 2: MIGRATE (Move data) │
|
|
504
|
-
│ ├─ Copy data from old to new │
|
|
505
|
-
│ ├─ Verify data consistency │
|
|
506
|
-
│ └─ Application starts reading from new │
|
|
507
|
-
│ │
|
|
508
|
-
│ Phase 3: CONTRACT (Remove old) │
|
|
509
|
-
│ ├─ Confirm old column/table no longer read │
|
|
510
|
-
│ ├─ Remove old column/table │
|
|
511
|
-
│ └─ Clean up dual-write code │
|
|
512
|
-
│ │
|
|
513
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
514
|
-
```
|
|
515
|
-
|
|
516
|
-
### Common Schema Refactoring Scenarios
|
|
517
|
-
|
|
518
|
-
| Scenario | Strategy | Risk Level |
|
|
519
|
-
|----------|----------|------------|
|
|
520
|
-
| **Rename column** | Add new → Migrate → Drop old | Medium |
|
|
521
|
-
| **Split table** | New table + FK → Migrate → Adjust app | High |
|
|
522
|
-
| **Merge tables** | New table → Merge data → Switch app | High |
|
|
523
|
-
| **Change data type** | New column → Convert → Switch app | Medium |
|
|
524
|
-
| **Add NOT NULL** | Fill defaults → Add constraint | Low |
|
|
525
|
-
|
|
526
|
-
### Database Migration Safety Checklist
|
|
527
|
-
|
|
528
|
-
```
|
|
529
|
-
Pre-Migration:
|
|
530
|
-
□ Full backup completed
|
|
531
|
-
□ Migration script tested in staging
|
|
532
|
-
□ Rollback script prepared
|
|
533
|
-
□ Migration time estimated (consider data volume)
|
|
534
|
-
□ Maintenance window communicated
|
|
535
|
-
|
|
536
|
-
During Migration:
|
|
537
|
-
□ Monitor database performance
|
|
538
|
-
□ Verify data integrity incrementally
|
|
539
|
-
□ Application health checks passing
|
|
540
|
-
|
|
541
|
-
Post-Migration:
|
|
542
|
-
□ Data consistency verification
|
|
543
|
-
□ Application functionality verification
|
|
544
|
-
□ Performance baseline comparison
|
|
545
|
-
□ Backup retained for rollback period
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
### Zero-Downtime Migration Techniques
|
|
549
|
-
|
|
550
|
-
| Technique | Description | Use Case |
|
|
551
|
-
|-----------|-------------|----------|
|
|
552
|
-
| **Online Schema Change** | pt-osc, gh-ost | MySQL large table changes |
|
|
553
|
-
| **Blue-Green Database** | Dual database switchover | High availability requirements |
|
|
554
|
-
| **Shadow Write** | Write to both DBs, compare | Verify migration correctness |
|
|
555
|
-
| **Feature Flag** | Control read source | Gradual cutover |
|
|
52
|
+
| Strategy | Scale | Risk | Duration | Key Use Case |
|
|
53
|
+
|----------|-------|------|----------|--------------|
|
|
54
|
+
| **Preparatory Refactoring** | Small | Low | Hours | Reduce friction before feature work |
|
|
55
|
+
| **Boy Scout Rule** | Very Small | Low | Minutes | Continuous debt repayment |
|
|
56
|
+
| **Red-Green-Refactor** | Small | Low | 5-15 min | TDD development cycle |
|
|
57
|
+
| **Strangler Fig** | Large | Medium | Months | System replacement |
|
|
58
|
+
| **Anti-Corruption Layer** | Medium | Low | Weeks | New-legacy coexistence |
|
|
59
|
+
| **Branch by Abstraction** | Large | Medium | Weeks | Long-term refactoring on trunk |
|
|
60
|
+
| **Parallel Change** | Medium | Low | Days-Weeks | Interface/schema migration |
|
|
61
|
+
| **Characterization Tests** | — | — | — | **Prerequisite for all legacy refactoring** |
|
|
556
62
|
|
|
557
63
|
---
|
|
558
64
|
|
|
@@ -560,186 +66,66 @@ Post-Migration:
|
|
|
560
66
|
|
|
561
67
|
### Before Refactoring
|
|
562
68
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
□ Communicate with team to avoid conflicts
|
|
569
|
-
```
|
|
69
|
+
- [ ] Define success criteria (measurable)
|
|
70
|
+
- [ ] Ensure adequate test coverage (>80% recommended)
|
|
71
|
+
- [ ] Commit/stash current work (clean working directory)
|
|
72
|
+
- [ ] Create feature branch (or work on trunk with toggles)
|
|
73
|
+
- [ ] Communicate with team to avoid conflicts
|
|
570
74
|
|
|
571
75
|
### During Refactoring
|
|
572
76
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
□ Never add new functionality while refactoring
|
|
579
|
-
```
|
|
77
|
+
- [ ] Make ONE small change at a time
|
|
78
|
+
- [ ] Run tests after EVERY change
|
|
79
|
+
- [ ] If tests fail, IMMEDIATELY revert
|
|
80
|
+
- [ ] Commit frequently (every passing test is a save point)
|
|
81
|
+
- [ ] Never add new functionality while refactoring
|
|
580
82
|
|
|
581
83
|
### After Refactoring
|
|
582
84
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
□ No new functionality added
|
|
589
|
-
```
|
|
85
|
+
- [ ] All tests pass (same as before)
|
|
86
|
+
- [ ] Code is measurably better (complexity, duplication, etc.)
|
|
87
|
+
- [ ] Documentation updated if needed
|
|
88
|
+
- [ ] Team review completed
|
|
89
|
+
- [ ] No new functionality added
|
|
590
90
|
|
|
591
91
|
---
|
|
592
92
|
|
|
593
|
-
##
|
|
594
|
-
|
|
595
|
-
### Code Quality Indicators
|
|
596
|
-
|
|
597
|
-
| Metric | Measurement | Target |
|
|
598
|
-
|--------|-------------|--------|
|
|
599
|
-
| **Cyclomatic Complexity** | Static analysis tools | < 10 per function |
|
|
600
|
-
| **Cognitive Complexity** | SonarQube, etc. | Lower is better |
|
|
601
|
-
| **Coupling** | Dependencies between modules | Reduce |
|
|
602
|
-
| **Cohesion** | LCOM metric | Increase |
|
|
603
|
-
| **Code Duplication** | Duplicate code percentage | < 3% |
|
|
604
|
-
| **Lines of Code** | Reference only | Fewer ≠ always better |
|
|
605
|
-
|
|
606
|
-
### Test Quality Indicators
|
|
607
|
-
|
|
608
|
-
| Metric | Target | Notes |
|
|
609
|
-
|--------|--------|-------|
|
|
610
|
-
| **Test Coverage** | ≥ 80% | Don't decrease during refactoring |
|
|
611
|
-
| **Test Speed** | Faster | Refactoring should improve testability |
|
|
612
|
-
| **Flaky Test Count** | Decrease | Stability improvement |
|
|
613
|
-
|
|
614
|
-
### Operational Indicators (DORA Metrics)
|
|
615
|
-
|
|
616
|
-
| Metric | Measurement | Expected Improvement |
|
|
617
|
-
|--------|-------------|----------------------|
|
|
618
|
-
| **Deployment Frequency** | CI/CD records | Increase (maintainability improved) |
|
|
619
|
-
| **Change Failure Rate** | Rollback count | Decrease |
|
|
620
|
-
| **Mean Time to Recovery** | Incident records | Decrease |
|
|
621
|
-
| **Lead Time** | Commit to deploy | Decrease |
|
|
93
|
+
## Code Quality Metrics
|
|
622
94
|
|
|
623
|
-
###
|
|
95
|
+
### Target Metrics
|
|
624
96
|
|
|
625
|
-
| Metric |
|
|
626
|
-
|
|
627
|
-
| **
|
|
628
|
-
| **
|
|
629
|
-
| **
|
|
97
|
+
| Metric | Target | Tool |
|
|
98
|
+
|--------|--------|------|
|
|
99
|
+
| **Cyclomatic Complexity** | < 10 per function | Static analysis |
|
|
100
|
+
| **Cognitive Complexity** | Lower is better | SonarQube |
|
|
101
|
+
| **Code Duplication** | < 3% | Static analysis |
|
|
102
|
+
| **Test Coverage** | ≥ 80% | Coverage tools |
|
|
630
103
|
|
|
631
|
-
###
|
|
104
|
+
### ISO/IEC 25010 Maintainability Goals
|
|
632
105
|
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
Benefits:
|
|
641
|
-
├─ Reduced maintenance time × future years
|
|
642
|
-
├─ Reduced bugs × fix cost
|
|
643
|
-
├─ Faster feature development
|
|
644
|
-
└─ Lower employee turnover cost
|
|
645
|
-
```
|
|
106
|
+
| Sub-characteristic | Indicator | Goal |
|
|
107
|
+
|--------------------|-----------|------|
|
|
108
|
+
| **Modularity** | Coupling, File size | Reduce dependencies |
|
|
109
|
+
| **Reusability** | Code Duplication | Extract methods, DRY |
|
|
110
|
+
| **Analysability** | Cyclomatic Complexity | Simplify logic |
|
|
111
|
+
| **Modifiability** | Cohesion, Test Coverage | Single Responsibility |
|
|
112
|
+
| **Testability** | Branch Coverage | Dependency Injection |
|
|
646
113
|
|
|
647
114
|
---
|
|
648
115
|
|
|
649
|
-
##
|
|
650
|
-
|
|
651
|
-
### Refactoring Project Kickoff
|
|
652
|
-
|
|
653
|
-
```
|
|
654
|
-
Kickoff Meeting Agenda:
|
|
655
|
-
1. Scope Definition
|
|
656
|
-
├─ What modules/files are in scope
|
|
657
|
-
└─ What is explicitly excluded
|
|
658
|
-
|
|
659
|
-
2. Success Criteria Alignment
|
|
660
|
-
├─ Quantitative goals (complexity reduction X%)
|
|
661
|
-
└─ Functional goals (behavior unchanged)
|
|
662
|
-
|
|
663
|
-
3. Work Division
|
|
664
|
-
├─ By module (vertical slicing)
|
|
665
|
-
└─ By layer (horizontal slicing)
|
|
666
|
-
|
|
667
|
-
4. Risk Assessment
|
|
668
|
-
├─ Highest-risk areas
|
|
669
|
-
└─ Rollback strategy
|
|
670
|
-
```
|
|
116
|
+
## PR Size Guidelines
|
|
671
117
|
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
|
675
|
-
|
|
676
|
-
|
|
|
677
|
-
| **Horizontal Slicing** | Cross-module refactoring (e.g., naming conventions) | Strict synchronization needed |
|
|
678
|
-
| **Strangler Division** | Large system replacement | One person per Strangler slice |
|
|
679
|
-
| **Mob Programming** | Core/high-risk areas | Entire team, reduces risk |
|
|
680
|
-
|
|
681
|
-
### Communication Mechanisms
|
|
682
|
-
|
|
683
|
-
```
|
|
684
|
-
Daily Communication:
|
|
685
|
-
├─ Sync refactoring progress in standup
|
|
686
|
-
├─ Shared Refactoring Board (Kanban)
|
|
687
|
-
└─ Dedicated channel (#refactoring-xxx)
|
|
688
|
-
|
|
689
|
-
PR Standards:
|
|
690
|
-
├─ [Refactor] prefix in title
|
|
691
|
-
├─ Explain what changed and why
|
|
692
|
-
├─ Include before/after complexity comparison
|
|
693
|
-
└─ Require Characterization Tests for legacy code
|
|
694
|
-
|
|
695
|
-
Conflict Resolution:
|
|
696
|
-
├─ Small scope: Resolve immediately
|
|
697
|
-
├─ Medium scope: Daily sync meeting
|
|
698
|
-
└─ Large scope: Consider Branch by Abstraction
|
|
699
|
-
```
|
|
700
|
-
|
|
701
|
-
### PR Size Guidelines
|
|
702
|
-
|
|
703
|
-
| Size | Lines Changed | Review Time |
|
|
704
|
-
|------|---------------|-------------|
|
|
705
|
-
| Small | < 200 | < 30 min |
|
|
706
|
-
| Medium | 200-500 | < 1 hour |
|
|
707
|
-
| Large | > 500 | **Should be split** |
|
|
118
|
+
| Size | Lines Changed | Review Time | Recommendation |
|
|
119
|
+
|------|---------------|-------------|----------------|
|
|
120
|
+
| Small | < 200 | < 30 min | ✅ Ideal |
|
|
121
|
+
| Medium | 200-500 | < 1 hour | ⚠️ Acceptable |
|
|
122
|
+
| Large | > 500 | — | ❌ **Should be split** |
|
|
708
123
|
|
|
709
124
|
**Principle**: Multiple small PRs > One large PR
|
|
710
125
|
|
|
711
126
|
---
|
|
712
127
|
|
|
713
|
-
## Technical Debt
|
|
714
|
-
|
|
715
|
-
### Technical Debt Quadrant
|
|
716
|
-
|
|
717
|
-
Based on Martin Fowler's Technical Debt Quadrant:
|
|
718
|
-
|
|
719
|
-
```
|
|
720
|
-
Deliberate
|
|
721
|
-
│
|
|
722
|
-
┌───────────────┼───────────────┐
|
|
723
|
-
│ │ │
|
|
724
|
-
│ Prudent │ Reckless │
|
|
725
|
-
│ "We know │ "We don't │
|
|
726
|
-
│ this is │ have time │
|
|
727
|
-
│ debt" │ for design" │
|
|
728
|
-
│ │ │
|
|
729
|
-
Prudent ├───────────────┼───────────────┤ Reckless
|
|
730
|
-
│ │ │
|
|
731
|
-
│ Prudent │ Reckless │
|
|
732
|
-
│ "Now we │ "What's │
|
|
733
|
-
│ know how │ layering?" │
|
|
734
|
-
│ we should │ │
|
|
735
|
-
│ have done it"│ │
|
|
736
|
-
│ │ │
|
|
737
|
-
└───────────────┼───────────────┘
|
|
738
|
-
│
|
|
739
|
-
Inadvertent
|
|
740
|
-
```
|
|
741
|
-
|
|
742
|
-
### Debt Prioritization
|
|
128
|
+
## Technical Debt Prioritization
|
|
743
129
|
|
|
744
130
|
| Priority | Criteria | Action |
|
|
745
131
|
|----------|----------|--------|
|
|
@@ -747,64 +133,24 @@ Prudent ├───────────────┼───────
|
|
|
747
133
|
| **Medium** | Slows development, increases complexity | Plan for next sprint |
|
|
748
134
|
| **Low** | Minor annoyance, isolated impact | Address opportunistically |
|
|
749
135
|
|
|
750
|
-
### Tracking Technical Debt
|
|
751
|
-
|
|
752
|
-
```
|
|
753
|
-
For each debt item, record:
|
|
754
|
-
├─ Description: What is the issue?
|
|
755
|
-
├─ Impact: How does it affect development?
|
|
756
|
-
├─ Estimated Effort: How long to fix?
|
|
757
|
-
├─ Risk if Ignored: What happens if not addressed?
|
|
758
|
-
└─ Related Code: Links to affected files/modules
|
|
759
|
-
```
|
|
760
|
-
|
|
761
136
|
---
|
|
762
137
|
|
|
763
|
-
##
|
|
764
|
-
|
|
765
|
-
Quick reference for selecting the appropriate refactoring strategy:
|
|
766
|
-
|
|
767
|
-
| Strategy | Scale | Risk | Key Use Case |
|
|
768
|
-
|----------|-------|------|--------------|
|
|
769
|
-
| **Preparatory Refactoring** | Small | Low | Reduce friction before feature work |
|
|
770
|
-
| **Boy Scout Rule** | Very Small | Low | Continuous debt repayment |
|
|
771
|
-
| **Red-Green-Refactor** | Small | Low | TDD development cycle |
|
|
772
|
-
| **Strangler Fig** | Large | Medium | System replacement, architecture migration |
|
|
773
|
-
| **Anti-Corruption Layer** | Medium | Low | New-legacy system coexistence |
|
|
774
|
-
| **Branch by Abstraction** | Large | Medium | Long-term refactoring on trunk |
|
|
775
|
-
| **Parallel Change** | Medium | Low | Interface/schema migration |
|
|
776
|
-
| **Characterization Tests** | — | — | **Prerequisite for all legacy refactoring** |
|
|
777
|
-
| **Scratch Refactoring** | Small | Low | Understanding black-box code |
|
|
778
|
-
|
|
779
|
-
### Strategy Selection Guide
|
|
780
|
-
|
|
781
|
-
```
|
|
782
|
-
What's your situation?
|
|
138
|
+
## Database Refactoring Safety
|
|
783
139
|
|
|
784
|
-
|
|
785
|
-
└─► Preparatory Refactoring
|
|
140
|
+
### Pre-Migration Checklist
|
|
786
141
|
|
|
787
|
-
|
|
788
|
-
|
|
142
|
+
- [ ] Full backup completed
|
|
143
|
+
- [ ] Migration script tested in staging
|
|
144
|
+
- [ ] Rollback script prepared
|
|
145
|
+
- [ ] Migration time estimated
|
|
146
|
+
- [ ] Maintenance window communicated
|
|
789
147
|
|
|
790
|
-
|
|
791
|
-
└─► Red-Green-Refactor
|
|
148
|
+
### Post-Migration Checklist
|
|
792
149
|
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
└─► Anti-Corruption Layer
|
|
798
|
-
|
|
799
|
-
Refactoring shared code without feature branches?
|
|
800
|
-
└─► Branch by Abstraction
|
|
801
|
-
|
|
802
|
-
Changing a widely-used interface?
|
|
803
|
-
└─► Parallel Change (Expand-Migrate-Contract)
|
|
804
|
-
|
|
805
|
-
Working with untested legacy code?
|
|
806
|
-
└─► Characterization Tests + Scratch Refactoring FIRST
|
|
807
|
-
```
|
|
150
|
+
- [ ] Data consistency verification
|
|
151
|
+
- [ ] Application functionality verification
|
|
152
|
+
- [ ] Performance baseline comparison
|
|
153
|
+
- [ ] Backup retained for rollback period
|
|
808
154
|
|
|
809
155
|
---
|
|
810
156
|
|
|
@@ -817,38 +163,12 @@ Working with untested legacy code?
|
|
|
817
163
|
|
|
818
164
|
---
|
|
819
165
|
|
|
820
|
-
## References
|
|
821
|
-
|
|
822
|
-
### Books
|
|
823
|
-
|
|
824
|
-
- Martin Fowler - "Refactoring: Improving the Design of Existing Code" (2nd Edition, 2018)
|
|
825
|
-
- Michael Feathers - "Working Effectively with Legacy Code" (2004)
|
|
826
|
-
- Joshua Kerievsky - "Refactoring to Patterns" (2004)
|
|
827
|
-
- Kent Beck - "Implementation Patterns" (2007)
|
|
828
|
-
- Robert C. Martin - "Clean Code" (2008)
|
|
829
|
-
- Eric Evans - "Domain-Driven Design" (2003)
|
|
830
|
-
|
|
831
|
-
### Articles
|
|
832
|
-
|
|
833
|
-
- Martin Fowler - [Strangler Fig Application](https://martinfowler.com/bliki/StranglerFigApplication.html)
|
|
834
|
-
- Martin Fowler - [Branch by Abstraction](https://martinfowler.com/bliki/BranchByAbstraction.html)
|
|
835
|
-
- Martin Fowler - [Preparatory Refactoring](https://martinfowler.com/articles/preparatory-refactoring-example.html)
|
|
836
|
-
- Pete Hodgson - [Feature Toggles](https://martinfowler.com/articles/feature-toggles.html)
|
|
837
|
-
- Martin Fowler - [Technical Debt Quadrant](https://martinfowler.com/bliki/TechnicalDebtQuadrant.html)
|
|
838
|
-
|
|
839
|
-
### Tools
|
|
840
|
-
|
|
841
|
-
- [Refactoring Guru](https://refactoring.guru/) - Catalog of refactoring techniques
|
|
842
|
-
- [SonarQube](https://www.sonarqube.org/) - Code quality and complexity analysis
|
|
843
|
-
- [ApprovalTests](https://approvaltests.com/) - Golden Master testing
|
|
844
|
-
|
|
845
|
-
---
|
|
846
|
-
|
|
847
166
|
## Version History
|
|
848
167
|
|
|
849
168
|
| Version | Date | Changes |
|
|
850
169
|
|---------|------|---------|
|
|
851
|
-
| 2.
|
|
170
|
+
| 2.1.0 | 2026-01-29 | Refactored: Split into Rules + Guide, moved detailed patterns to guide |
|
|
171
|
+
| 2.0.0 | 2026-01-21 | Major restructure: Added tactical strategies, Anti-Corruption Layer |
|
|
852
172
|
| 1.0.0 | 2026-01-12 | Initial refactoring standards definition |
|
|
853
173
|
|
|
854
174
|
---
|