@zmice/zc 0.2.6 → 0.2.8

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.
Files changed (75) hide show
  1. package/README.md +430 -420
  2. package/dist/cli/__tests__/platform.test.js +158 -89
  3. package/dist/cli/__tests__/platform.test.js.map +1 -1
  4. package/dist/cli/__tests__/surface.test.js +1 -1
  5. package/dist/cli/__tests__/surface.test.js.map +1 -1
  6. package/dist/cli/platform.d.ts.map +1 -1
  7. package/dist/cli/platform.js +92 -10
  8. package/dist/cli/platform.js.map +1 -1
  9. package/dist/cli/setup.d.ts +3 -0
  10. package/dist/cli/setup.d.ts.map +1 -0
  11. package/dist/cli/setup.js +41 -0
  12. package/dist/cli/setup.js.map +1 -0
  13. package/dist/node_modules/@zmice/platform-core/dist/index.test.js +5 -3
  14. package/dist/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -1
  15. package/dist/runtime/worktree-manager.js +2 -2
  16. package/dist/runtime/worktree-manager.js.map +1 -1
  17. package/dist/utils/codex-config-merge.d.ts +3 -0
  18. package/dist/utils/codex-config-merge.d.ts.map +1 -0
  19. package/dist/utils/codex-config-merge.js +43 -0
  20. package/dist/utils/codex-config-merge.js.map +1 -0
  21. package/dist/utils/codex-config-merge.test.d.ts +2 -0
  22. package/dist/utils/codex-config-merge.test.d.ts.map +1 -0
  23. package/dist/utils/codex-config-merge.test.js +64 -0
  24. package/dist/utils/codex-config-merge.test.js.map +1 -0
  25. package/dist/utils/install-target.test.js +3 -2
  26. package/dist/utils/install-target.test.js.map +1 -1
  27. package/dist/utils/qwen-extension-cli.d.ts.map +1 -1
  28. package/dist/utils/qwen-extension-cli.js +4 -4
  29. package/dist/utils/qwen-extension-cli.js.map +1 -1
  30. package/dist/utils/qwen-extension-cli.test.js +9 -6
  31. package/dist/utils/qwen-extension-cli.test.js.map +1 -1
  32. package/dist/utils/workspace.js +1 -1
  33. package/dist/utils/workspace.js.map +1 -1
  34. package/dist/utils/workspace.test.js +14 -0
  35. package/dist/utils/workspace.test.js.map +1 -1
  36. package/package.json +3 -3
  37. package/vendor/node_modules/@zmice/platform-core/dist/index.test.js +5 -3
  38. package/vendor/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -1
  39. package/vendor/packages/platform-claude/dist/index.js +75 -75
  40. package/vendor/packages/platform-claude/dist/index.test.js +11 -8
  41. package/vendor/packages/platform-claude/dist/index.test.js.map +1 -1
  42. package/vendor/packages/platform-codex/dist/index.d.ts.map +1 -1
  43. package/vendor/packages/platform-codex/dist/index.js +262 -165
  44. package/vendor/packages/platform-codex/dist/index.js.map +1 -1
  45. package/vendor/packages/platform-codex/dist/index.test.js +42 -20
  46. package/vendor/packages/platform-codex/dist/index.test.js.map +1 -1
  47. package/vendor/packages/platform-opencode/dist/index.js +75 -75
  48. package/vendor/packages/platform-opencode/dist/index.test.js +19 -15
  49. package/vendor/packages/platform-opencode/dist/index.test.js.map +1 -1
  50. package/vendor/packages/platform-qwen/dist/index.js +75 -75
  51. package/vendor/packages/platform-qwen/dist/index.test.js +9 -7
  52. package/vendor/packages/platform-qwen/dist/index.test.js.map +1 -1
  53. package/vendor/packages/toolkit/src/content/agents/architect/body.md +42 -42
  54. package/vendor/packages/toolkit/src/content/agents/code-reviewer/body.md +41 -41
  55. package/vendor/packages/toolkit/src/content/agents/product-owner/body.md +40 -40
  56. package/vendor/packages/toolkit/src/content/commands/plan-review/body.md +31 -31
  57. package/vendor/packages/toolkit/src/content/commands/start/body.md +197 -197
  58. package/vendor/packages/toolkit/src/content/commands/start/meta.yaml +55 -55
  59. package/vendor/packages/toolkit/src/content/skills/branch-finish-and-cleanup/body.md +172 -172
  60. package/vendor/packages/toolkit/src/content/skills/browser-qa-testing/body.md +111 -111
  61. package/vendor/packages/toolkit/src/content/skills/ci-cd-and-automation/body.md +86 -86
  62. package/vendor/packages/toolkit/src/content/skills/code-review-and-quality/body.md +140 -140
  63. package/vendor/packages/toolkit/src/content/skills/code-simplification/body.md +80 -80
  64. package/vendor/packages/toolkit/src/content/skills/context-engineering/body.md +67 -67
  65. package/vendor/packages/toolkit/src/content/skills/continuous-learning/body.md +102 -102
  66. package/vendor/packages/toolkit/src/content/skills/multi-perspective-review/body.md +81 -81
  67. package/vendor/packages/toolkit/src/content/skills/parallel-agent-dispatch/body.md +113 -113
  68. package/vendor/packages/toolkit/src/content/skills/performance-optimization/body.md +75 -75
  69. package/vendor/packages/toolkit/src/content/skills/planning-and-task-breakdown/body.md +83 -83
  70. package/vendor/packages/toolkit/src/content/skills/sdd-tdd-workflow/body.md +95 -95
  71. package/vendor/packages/toolkit/src/content/skills/sprint-retrospective/body.md +99 -99
  72. package/vendor/packages/toolkit/src/content/skills/team-orchestration/body.md +126 -126
  73. package/vendor/packages/toolkit/src/content/skills/test-driven-development/body.md +78 -78
  74. package/vendor/packages/toolkit/src/content/skills/using-agent-skills/body.md +193 -193
  75. package/vendor/references/upstreams.yaml +94 -94
@@ -1,86 +1,86 @@
1
- # CI/CD 与自动化
2
-
3
- ## 角色定位
4
-
5
- 把质量门禁自动化,让每次变更都能被一致地构建、测试和验证。CI/CD 的目标不是堆检查,而是用最小可维护管道拦住真实风险。
6
-
7
- ## 何时使用
8
-
9
- - 新建或修改 CI pipeline。
10
- - 添加 lint、test、build、typecheck、安全扫描或发布门禁。
11
- - 调试 CI 失败。
12
- - 需要把本地验证提升成团队共享门禁。
13
- - 部署、preview、release 或 rollback 流程需要自动化。
14
-
15
- ## 快速路径
16
-
17
- 1. 明确要防的风险:格式、类型、测试、构建、发布、供应链、回滚。
18
- 2. 先找现有 CI 文件和 package scripts,不重写整条流水线。
19
- 3. 设计最小门禁:install/cache -> lint/format -> typecheck -> test -> build。
20
- 4. 只在风险需要时增加 integration / E2E / security / bundle / deploy。
21
- 5. 本地先跑等价命令,再改 CI。
22
- 6. 对 CI 失败读取完整日志,定位失败阶段和根因。
23
- 7. 记录门禁语义:smoke、full verify、release check 不要混名。
24
-
25
- ## 最小可维护门禁
26
-
27
- 默认顺序:
28
-
29
- ```text
30
- install/cache -> lint/format -> typecheck -> unit test -> build
31
- ```
32
-
33
- 升级门禁前必须说明:
34
-
35
- - 它防什么风险。
36
- - 运行成本和维护成本。
37
- - 失败时谁能修、怎么修。
38
- - 是否需要 secrets、服务依赖或浏览器环境。
39
-
40
- ## CI 失败处理
41
-
42
- ```text
43
- CI failure loop:
44
- 1. Preserve log.
45
- 2. Identify failing job and command.
46
- 3. Reproduce locally when practical.
47
- 4. Fix root cause.
48
- 5. Run local proof.
49
- 6. Re-run CI / explain why CI is the remaining proof.
50
- ```
51
-
52
- 不要用跳过测试、禁用规则或放宽门禁来掩盖失败。确需降级门禁时,必须写明风险和恢复计划。
53
-
54
- ## 部署与发布门禁
55
-
56
- 发布管道至少要明确:
57
-
58
- - 触发条件:PR、main、tag、manual approval。
59
- - 环境:preview、staging、production。
60
- - secrets 来源和最小权限。
61
- - rollback 或 feature flag 策略。
62
- - release 前后验证命令。
63
-
64
- 高风险发布优先使用小批次、preview、staging、feature flag 和可回滚路径,而不是一次性大改。
65
-
66
- ## 输出契约
67
-
68
- ```text
69
- CI/CD plan:
70
- - Risk addressed:
71
- - Existing pipeline:
72
- - Proposed gate:
73
- - Commands:
74
- - Secrets/services:
75
- - Failure handling:
76
- - Rollback:
77
- - Verification:
78
- ```
79
-
80
- 推荐结论:
81
-
82
- ```text
83
- Recommendation: <add / change / defer / remove gate> because <风险、成本和被放弃替代方案>。
84
- ```
85
-
86
- 如果新增门禁的维护成本高于它防住的风险,默认先不加。
1
+ # CI/CD 与自动化
2
+
3
+ ## 角色定位
4
+
5
+ 把质量门禁自动化,让每次变更都能被一致地构建、测试和验证。CI/CD 的目标不是堆检查,而是用最小可维护管道拦住真实风险。
6
+
7
+ ## 何时使用
8
+
9
+ - 新建或修改 CI pipeline。
10
+ - 添加 lint、test、build、typecheck、安全扫描或发布门禁。
11
+ - 调试 CI 失败。
12
+ - 需要把本地验证提升成团队共享门禁。
13
+ - 部署、preview、release 或 rollback 流程需要自动化。
14
+
15
+ ## 快速路径
16
+
17
+ 1. 明确要防的风险:格式、类型、测试、构建、发布、供应链、回滚。
18
+ 2. 先找现有 CI 文件和 package scripts,不重写整条流水线。
19
+ 3. 设计最小门禁:install/cache -> lint/format -> typecheck -> test -> build。
20
+ 4. 只在风险需要时增加 integration / E2E / security / bundle / deploy。
21
+ 5. 本地先跑等价命令,再改 CI。
22
+ 6. 对 CI 失败读取完整日志,定位失败阶段和根因。
23
+ 7. 记录门禁语义:smoke、full verify、release check 不要混名。
24
+
25
+ ## 最小可维护门禁
26
+
27
+ 默认顺序:
28
+
29
+ ```text
30
+ install/cache -> lint/format -> typecheck -> unit test -> build
31
+ ```
32
+
33
+ 升级门禁前必须说明:
34
+
35
+ - 它防什么风险。
36
+ - 运行成本和维护成本。
37
+ - 失败时谁能修、怎么修。
38
+ - 是否需要 secrets、服务依赖或浏览器环境。
39
+
40
+ ## CI 失败处理
41
+
42
+ ```text
43
+ CI failure loop:
44
+ 1. Preserve log.
45
+ 2. Identify failing job and command.
46
+ 3. Reproduce locally when practical.
47
+ 4. Fix root cause.
48
+ 5. Run local proof.
49
+ 6. Re-run CI / explain why CI is the remaining proof.
50
+ ```
51
+
52
+ 不要用跳过测试、禁用规则或放宽门禁来掩盖失败。确需降级门禁时,必须写明风险和恢复计划。
53
+
54
+ ## 部署与发布门禁
55
+
56
+ 发布管道至少要明确:
57
+
58
+ - 触发条件:PR、main、tag、manual approval。
59
+ - 环境:preview、staging、production。
60
+ - secrets 来源和最小权限。
61
+ - rollback 或 feature flag 策略。
62
+ - release 前后验证命令。
63
+
64
+ 高风险发布优先使用小批次、preview、staging、feature flag 和可回滚路径,而不是一次性大改。
65
+
66
+ ## 输出契约
67
+
68
+ ```text
69
+ CI/CD plan:
70
+ - Risk addressed:
71
+ - Existing pipeline:
72
+ - Proposed gate:
73
+ - Commands:
74
+ - Secrets/services:
75
+ - Failure handling:
76
+ - Rollback:
77
+ - Verification:
78
+ ```
79
+
80
+ 推荐结论:
81
+
82
+ ```text
83
+ Recommendation: <add / change / defer / remove gate> because <风险、成本和被放弃替代方案>。
84
+ ```
85
+
86
+ 如果新增门禁的维护成本高于它防住的风险,默认先不加。
@@ -1,140 +1,140 @@
1
- # 代码审查与质量
2
-
3
- ## 何时使用
4
-
5
- - 合并任何变更之前
6
- - 完成一次功能实现之后
7
- - 评估自己、其他代理或人类写的代码时
8
- - bug 修复和重构之后
9
-
10
- ## 输入前提
11
-
12
- - 已知道这次变更对应的规格或任务
13
- - 已有测试、构建或其他验证证据可供审查
14
- - 愿意按问题严重度给出明确结论,而不是泛泛评价
15
-
16
- ## 执行步骤
17
-
18
- 1. 先理解变更意图,再看测试和验证证据
19
- 2. 按五个维度审查:
20
- - 正确性
21
- - 可读性
22
- - 架构
23
- - 安全性
24
- - 性能
25
- 3. 把发现按 `Critical / Important / Suggestion` 分级
26
- 4. 对每条问题给出具体位置和修复方向
27
- 5. 审查结论给出后,要求作者进入 review 响应闭环,逐条收敛问题
28
- 6. 所有 Critical 清零并完成必要回归验证后,才算通过
29
-
30
- ## 成功标准
31
-
32
- - 评审结论基于代码和证据,而不是个人偏好
33
- - 真正会阻塞合并的问题被明确指出
34
- - 报告能让作者快速定位问题和采取动作
35
- - 评审没有用“看起来还行”替代事实判断
36
- - 审查后的问题处理路径清楚,不把“提了意见”误当成“问题已关闭”
37
-
38
- ## 推荐结论格式
39
-
40
- 审查结论必须给出可执行推荐:
41
-
42
- ```text
43
- Recommendation: <Approve / Request changes / Defer> because <evidence, risk, and trade-off>.
44
- ```
45
-
46
- 如果请求修改,说明哪些问题阻塞合并;如果批准,说明剩余风险和已验证证据;如果延后,说明为什么延后比本轮修复更合适。
47
-
48
- ## 相关原则
49
-
50
- - 先报问题,再做总结
51
- - 只评论代码,不评论作者
52
- - 技术事实高于风格偏好
53
-
54
- ## 与其他技能的衔接
55
-
56
- - 接在 `incremental-implementation` 或 bug 修复之后
57
- - 安全和性能深挖时可转给对应专项 skill
58
- - 对验证证据的审查依赖 `verification-before-completion`
59
- - 审查输出如果产生待修问题,应进入 `review-response-and-resolution`
60
-
61
- ```markdown
62
- ## Review: [PR/Change title]
63
-
64
- ### Context
65
- - [ ] I understand what this change does and why
66
-
67
- ### Correctness
68
- - [ ] Change matches spec/task requirements
69
- - [ ] Edge cases handled
70
- - [ ] Error paths handled
71
- - [ ] Tests cover the change adequately
72
-
73
- ### Readability
74
- - [ ] Names are clear and consistent
75
- - [ ] Logic is straightforward
76
- - [ ] No unnecessary complexity
77
-
78
- ### Architecture
79
- - [ ] Follows existing patterns
80
- - [ ] No unnecessary coupling or dependencies
81
- - [ ] Appropriate abstraction level
82
-
83
- ### Security
84
- - [ ] No secrets in code
85
- - [ ] Input validated at boundaries
86
- - [ ] No injection vulnerabilities
87
- - [ ] Auth checks in place
88
- - [ ] External data sources treated as untrusted
89
-
90
- ### Performance
91
- - [ ] No N+1 patterns
92
- - [ ] No unbounded operations
93
- - [ ] Pagination on list endpoints
94
-
95
- ### Verification
96
- - [ ] Tests pass
97
- - [ ] Build succeeds
98
- - [ ] Manual verification done (if applicable)
99
-
100
- ### Verdict
101
- - [ ] **Approve** — Ready to merge
102
- - [ ] **Request changes** — Issues must be addressed
103
- ```
104
-
105
- ## 另见
106
-
107
- - 更详细的安全审查指导,请见 `references/security-checklist.md`
108
- - 更详细的性能审查检查项,请见 `references/performance-checklist.md`
109
-
110
- ## 常见合理化说辞
111
-
112
- | Rationalization | Reality |
113
- |---|---|
114
- | “能跑就行” | 能跑但不可读、不安全或架构错误的代码,只会制造持续累积的技术债。 |
115
- | “我写的,所以我知道它是对的” | 作者往往看不到自己的假设。每次变更都值得多一双眼睛。 |
116
- | “以后再清理” | 以后通常不会来。审查就是质量门槛,应该在提交前清理,而不是之后。 |
117
- | “AI 生成的代码大概没问题” | AI 代码更需要审查,而不是更少。它会用很流畅的语言包装错误。 |
118
- | “测试都过了,所以没问题” | 测试是必要条件,但不是充分条件。它们不能发现架构问题、安全问题或可读性问题。 |
119
-
120
- ## 红旗
121
-
122
- - PR 在没有审查的情况下合并
123
- - 审查只看测试是否通过,而忽略其他维度
124
- - 没有真正审查就直接说 “LGTM”
125
- - 安全敏感改动没有安全向审查
126
- - 大 PR 大到“没法好好审查”
127
- - bug 修复没有回归测试
128
- - 审查意见没有严重程度标签,导致不清楚哪些必须修
129
- - 接受“我以后再修”——通常不会发生
130
-
131
- ## 验证
132
-
133
- 审查完成后:
134
-
135
- - [ ] 所有 Critical 问题已解决
136
- - [ ] 所有 Important 问题已解决,或已明确延后并给出理由
137
- - [ ] 审查意见已逐条进入响应闭环,没有“已读未处理”的项
138
- - [ ] 测试通过
139
- - [ ] 构建成功
140
- - [ ] 已记录验证故事(改了什么、如何验证)
1
+ # 代码审查与质量
2
+
3
+ ## 何时使用
4
+
5
+ - 合并任何变更之前
6
+ - 完成一次功能实现之后
7
+ - 评估自己、其他代理或人类写的代码时
8
+ - bug 修复和重构之后
9
+
10
+ ## 输入前提
11
+
12
+ - 已知道这次变更对应的规格或任务
13
+ - 已有测试、构建或其他验证证据可供审查
14
+ - 愿意按问题严重度给出明确结论,而不是泛泛评价
15
+
16
+ ## 执行步骤
17
+
18
+ 1. 先理解变更意图,再看测试和验证证据
19
+ 2. 按五个维度审查:
20
+ - 正确性
21
+ - 可读性
22
+ - 架构
23
+ - 安全性
24
+ - 性能
25
+ 3. 把发现按 `Critical / Important / Suggestion` 分级
26
+ 4. 对每条问题给出具体位置和修复方向
27
+ 5. 审查结论给出后,要求作者进入 review 响应闭环,逐条收敛问题
28
+ 6. 所有 Critical 清零并完成必要回归验证后,才算通过
29
+
30
+ ## 成功标准
31
+
32
+ - 评审结论基于代码和证据,而不是个人偏好
33
+ - 真正会阻塞合并的问题被明确指出
34
+ - 报告能让作者快速定位问题和采取动作
35
+ - 评审没有用“看起来还行”替代事实判断
36
+ - 审查后的问题处理路径清楚,不把“提了意见”误当成“问题已关闭”
37
+
38
+ ## 推荐结论格式
39
+
40
+ 审查结论必须给出可执行推荐:
41
+
42
+ ```text
43
+ Recommendation: <Approve / Request changes / Defer> because <evidence, risk, and trade-off>.
44
+ ```
45
+
46
+ 如果请求修改,说明哪些问题阻塞合并;如果批准,说明剩余风险和已验证证据;如果延后,说明为什么延后比本轮修复更合适。
47
+
48
+ ## 相关原则
49
+
50
+ - 先报问题,再做总结
51
+ - 只评论代码,不评论作者
52
+ - 技术事实高于风格偏好
53
+
54
+ ## 与其他技能的衔接
55
+
56
+ - 接在 `incremental-implementation` 或 bug 修复之后
57
+ - 安全和性能深挖时可转给对应专项 skill
58
+ - 对验证证据的审查依赖 `verification-before-completion`
59
+ - 审查输出如果产生待修问题,应进入 `review-response-and-resolution`
60
+
61
+ ```markdown
62
+ ## Review: [PR/Change title]
63
+
64
+ ### Context
65
+ - [ ] I understand what this change does and why
66
+
67
+ ### Correctness
68
+ - [ ] Change matches spec/task requirements
69
+ - [ ] Edge cases handled
70
+ - [ ] Error paths handled
71
+ - [ ] Tests cover the change adequately
72
+
73
+ ### Readability
74
+ - [ ] Names are clear and consistent
75
+ - [ ] Logic is straightforward
76
+ - [ ] No unnecessary complexity
77
+
78
+ ### Architecture
79
+ - [ ] Follows existing patterns
80
+ - [ ] No unnecessary coupling or dependencies
81
+ - [ ] Appropriate abstraction level
82
+
83
+ ### Security
84
+ - [ ] No secrets in code
85
+ - [ ] Input validated at boundaries
86
+ - [ ] No injection vulnerabilities
87
+ - [ ] Auth checks in place
88
+ - [ ] External data sources treated as untrusted
89
+
90
+ ### Performance
91
+ - [ ] No N+1 patterns
92
+ - [ ] No unbounded operations
93
+ - [ ] Pagination on list endpoints
94
+
95
+ ### Verification
96
+ - [ ] Tests pass
97
+ - [ ] Build succeeds
98
+ - [ ] Manual verification done (if applicable)
99
+
100
+ ### Verdict
101
+ - [ ] **Approve** — Ready to merge
102
+ - [ ] **Request changes** — Issues must be addressed
103
+ ```
104
+
105
+ ## 另见
106
+
107
+ - 更详细的安全审查指导,请见 `references/security-checklist.md`
108
+ - 更详细的性能审查检查项,请见 `references/performance-checklist.md`
109
+
110
+ ## 常见合理化说辞
111
+
112
+ | Rationalization | Reality |
113
+ |---|---|
114
+ | “能跑就行” | 能跑但不可读、不安全或架构错误的代码,只会制造持续累积的技术债。 |
115
+ | “我写的,所以我知道它是对的” | 作者往往看不到自己的假设。每次变更都值得多一双眼睛。 |
116
+ | “以后再清理” | 以后通常不会来。审查就是质量门槛,应该在提交前清理,而不是之后。 |
117
+ | “AI 生成的代码大概没问题” | AI 代码更需要审查,而不是更少。它会用很流畅的语言包装错误。 |
118
+ | “测试都过了,所以没问题” | 测试是必要条件,但不是充分条件。它们不能发现架构问题、安全问题或可读性问题。 |
119
+
120
+ ## 红旗
121
+
122
+ - PR 在没有审查的情况下合并
123
+ - 审查只看测试是否通过,而忽略其他维度
124
+ - 没有真正审查就直接说 “LGTM”
125
+ - 安全敏感改动没有安全向审查
126
+ - 大 PR 大到“没法好好审查”
127
+ - bug 修复没有回归测试
128
+ - 审查意见没有严重程度标签,导致不清楚哪些必须修
129
+ - 接受“我以后再修”——通常不会发生
130
+
131
+ ## 验证
132
+
133
+ 审查完成后:
134
+
135
+ - [ ] 所有 Critical 问题已解决
136
+ - [ ] 所有 Important 问题已解决,或已明确延后并给出理由
137
+ - [ ] 审查意见已逐条进入响应闭环,没有“已读未处理”的项
138
+ - [ ] 测试通过
139
+ - [ ] 构建成功
140
+ - [ ] 已记录验证故事(改了什么、如何验证)
@@ -1,80 +1,80 @@
1
- # Code Simplification
2
-
3
- ## 角色定位
4
-
5
- 在不改变行为的前提下降低代码理解成本。目标不是减少行数,而是让下一位维护者更快理解、更安全修改、更容易验证。
6
-
7
- ## 何时使用
8
-
9
- - 功能已经工作且测试通过,但实现明显偏重。
10
- - review 指出可读性、重复、嵌套或抽象层级问题。
11
- - 最近修改的代码引入了重复或不一致。
12
- - 需要在进入下一轮功能前降低维护成本。
13
-
14
- 不适用:
15
-
16
- - 还没有理解代码为什么存在。
17
- - 缺少能保护行为的测试或验证方式。
18
- - 性能关键路径会因为“更简单”变慢。
19
- - 即将废弃或重写的代码。
20
-
21
- ## 快速路径
22
-
23
- 1. 明确要保持不变的行为、输入、输出、副作用和错误路径。
24
- 2. 读取邻近代码和项目约定,确认本仓库的风格。
25
- 3. 找一个具体简化目标:命名、重复、嵌套、函数职责、死代码、无效抽象。
26
- 4. 一次只做一个简化切片。
27
- 5. 每个切片后运行最小相关测试。
28
- 6. 对比前后可读性和 diff 可审性。
29
- 7. 如果新版本更难审或行为证据不足,回退该切片。
30
-
31
- ## 简化信号
32
-
33
- 优先处理具体信号,而不是泛泛“感觉复杂”:
34
-
35
- - 3 层以上嵌套,可以改为 guard clause 或提取谓词。
36
- - 长函数承担多个职责,可以拆成命名清楚的小函数。
37
- - 重复条件或重复逻辑,可以提取共享函数。
38
- - 命名不能表达业务含义,可以重命名。
39
- - 注释解释“做什么”,代码本身可表达时可以删除;解释“为什么”的注释保留。
40
- - 只有一个实现的过度抽象,可以考虑内联。
41
- - 不可达分支、未使用变量、过期注释,可以在确认后删除。
42
-
43
- ## 行为保护
44
-
45
- 简化前先回答:
46
-
47
- - 现有测试覆盖了什么?
48
- - 哪些边界没有测试但需要人工验证?
49
- - 这个代码是否有历史原因、平台限制或性能约束?
50
- - 是否有调用方依赖当前副作用或错误行为?
51
-
52
- 无法回答时,先回到 `codebase-onboarding` 或 `test-driven-development` 补证据。
53
-
54
- ## 反模式
55
-
56
- - 为了少几行牺牲可读性。
57
- - 把有意义的 helper 内联成重复逻辑。
58
- - 顺手重构无关文件,制造 review 噪声。
59
- - 同一个提交里混合功能变更和简化重构。
60
- - 没有测试保护就改公共接口或错误路径。
61
-
62
- ## 输出契约
63
-
64
- ```text
65
- Simplification evidence:
66
- - Target:
67
- - Behavior preserved:
68
- - Change made:
69
- - Tests / verification:
70
- - Before/after readability:
71
- - Remaining risk:
72
- ```
73
-
74
- 推荐结论:
75
-
76
- ```text
77
- Recommendation: <apply / stop / add tests first / defer> because <行为证据、维护收益和被放弃替代方案>。
78
- ```
79
-
80
- 如果不能证明行为保持不变,默认不要简化。
1
+ # Code Simplification
2
+
3
+ ## 角色定位
4
+
5
+ 在不改变行为的前提下降低代码理解成本。目标不是减少行数,而是让下一位维护者更快理解、更安全修改、更容易验证。
6
+
7
+ ## 何时使用
8
+
9
+ - 功能已经工作且测试通过,但实现明显偏重。
10
+ - review 指出可读性、重复、嵌套或抽象层级问题。
11
+ - 最近修改的代码引入了重复或不一致。
12
+ - 需要在进入下一轮功能前降低维护成本。
13
+
14
+ 不适用:
15
+
16
+ - 还没有理解代码为什么存在。
17
+ - 缺少能保护行为的测试或验证方式。
18
+ - 性能关键路径会因为“更简单”变慢。
19
+ - 即将废弃或重写的代码。
20
+
21
+ ## 快速路径
22
+
23
+ 1. 明确要保持不变的行为、输入、输出、副作用和错误路径。
24
+ 2. 读取邻近代码和项目约定,确认本仓库的风格。
25
+ 3. 找一个具体简化目标:命名、重复、嵌套、函数职责、死代码、无效抽象。
26
+ 4. 一次只做一个简化切片。
27
+ 5. 每个切片后运行最小相关测试。
28
+ 6. 对比前后可读性和 diff 可审性。
29
+ 7. 如果新版本更难审或行为证据不足,回退该切片。
30
+
31
+ ## 简化信号
32
+
33
+ 优先处理具体信号,而不是泛泛“感觉复杂”:
34
+
35
+ - 3 层以上嵌套,可以改为 guard clause 或提取谓词。
36
+ - 长函数承担多个职责,可以拆成命名清楚的小函数。
37
+ - 重复条件或重复逻辑,可以提取共享函数。
38
+ - 命名不能表达业务含义,可以重命名。
39
+ - 注释解释“做什么”,代码本身可表达时可以删除;解释“为什么”的注释保留。
40
+ - 只有一个实现的过度抽象,可以考虑内联。
41
+ - 不可达分支、未使用变量、过期注释,可以在确认后删除。
42
+
43
+ ## 行为保护
44
+
45
+ 简化前先回答:
46
+
47
+ - 现有测试覆盖了什么?
48
+ - 哪些边界没有测试但需要人工验证?
49
+ - 这个代码是否有历史原因、平台限制或性能约束?
50
+ - 是否有调用方依赖当前副作用或错误行为?
51
+
52
+ 无法回答时,先回到 `codebase-onboarding` 或 `test-driven-development` 补证据。
53
+
54
+ ## 反模式
55
+
56
+ - 为了少几行牺牲可读性。
57
+ - 把有意义的 helper 内联成重复逻辑。
58
+ - 顺手重构无关文件,制造 review 噪声。
59
+ - 同一个提交里混合功能变更和简化重构。
60
+ - 没有测试保护就改公共接口或错误路径。
61
+
62
+ ## 输出契约
63
+
64
+ ```text
65
+ Simplification evidence:
66
+ - Target:
67
+ - Behavior preserved:
68
+ - Change made:
69
+ - Tests / verification:
70
+ - Before/after readability:
71
+ - Remaining risk:
72
+ ```
73
+
74
+ 推荐结论:
75
+
76
+ ```text
77
+ Recommendation: <apply / stop / add tests first / defer> because <行为证据、维护收益和被放弃替代方案>。
78
+ ```
79
+
80
+ 如果不能证明行为保持不变,默认不要简化。