Skip to content

Commit dbf5f16

Browse files
author
zenus
committed
docs: add _zh translation for fisrt_feature_batch plan
1 parent 351c8ba commit dbf5f16

1 file changed

Lines changed: 319 additions & 0 deletions

File tree

Lines changed: 319 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,319 @@
1+
# F2 Feature 抽取:feat-gen-plan-convergence
2+
3+
## 语言格式
4+
默认:仅英文。
5+
`.humanize/config.json``chinese_plan=true` 时,会生成单独的 `_zh` 仅中文版本。
6+
在两个文件中保持标识符(`AC-1`、task IDs、文件路径、API 名称、命令行 flags)不变。
7+
8+
## 目标描述
9+
10+
从本地 `main` 抽取 F2(`feat-gen-plan-convergence`)特性集,将其功能记录到独立分析文档
11+
`docs/f2-gen-plan-convergence-analysis.md`,基于 `origin/main` 创建本地 feature 分支
12+
`feat/gen-plan-convergence`,并为后续提交 PR 准备好 cherry-pick 的提交,但不向任何 remote
13+
push。
14+
15+
F2 由 9 个提交组成(SHAs:`c283a92``9c0eef7``5156a05``002308a``8ba3a57`
16+
`437567b``3c8caf5``4a57429``821f225`),它们为 `gen-plan` 命令加入了 Claude-Codex
17+
辩论与收敛工作流。其中的 revert 成对提交(`5156a05` + `002308a`)净效果为 0,通过
18+
`cherry-pick -n` 方式处理。
19+
20+
## 验收标准
21+
22+
遵循 TDD 思路,每条标准都包含正向与反向测试,便于确定性验证。
23+
24+
- AC-1:分析文档存在于 `docs/f2-gen-plan-convergence-analysis.md`
25+
- 正向测试(预期 PASS):
26+
- 指定路径存在该文件
27+
- 文件仅英文(不包含 CJK 字符)
28+
- 文件覆盖 F2 的全部 5 个子特性:(a) Claude-Codex 辩论流程,(b) Codex 优先的规划与收敛
29+
循环,(c) task-tag 路由(`coding`/`analyze`),(d) 收敛循环最多 3 轮,(e) `_zh` 输出且
30+
默认仅英文
31+
- 文件在 `feat/gen-plan-convergence` 上已提交
32+
- 反向测试(预期 FAIL):
33+
- 缺少任一子特性的文件应在内容评审中失败
34+
- 含有 CJK 字符的文件违反项目规则
35+
- 文件未提交或缺失将同时导致 AC-5 与 AC-1 失败
36+
37+
- AC-2:本地存在 feature 分支 `feat/gen-plan-convergence`,且基于 `origin/main`
38+
- 正向测试(预期 PASS):
39+
- `git branch --list feat/gen-plan-convergence` 返回该分支名
40+
- `git merge-base --is-ancestor 7e0c3ae feat/gen-plan-convergence` 以 0 退出
41+
(确认 base 固定为当前 `origin/main` HEAD)
42+
- 反向测试(预期 FAIL):
43+
- 本地分支列表中不存在该分支
44+
- 分支基于本地 `main` 或错误的提交
45+
46+
- AC-3:从 `origin/main``feat/gen-plan-convergence` 的净 diff 是允许列表的子集
47+
- 允许列表:
48+
- `commands/gen-plan.md`
49+
- `prompt-template/plan/gen-plan-template.md`
50+
- `scripts/validate-gen-plan-io.sh`
51+
- `tests/test-gen-plan.sh`
52+
- `commands/start-rlcr-loop.md`
53+
- `hooks/loop-codex-stop-hook.sh`
54+
- `scripts/setup-rlcr-loop.sh`
55+
- `tests/run-all-tests.sh`
56+
- `tests/test-task-tag-routing.sh`
57+
- `.claude-plugin/plugin.json`
58+
- `.claude-plugin/marketplace.json`
59+
- `README.md`
60+
- `docs/f2-gen-plan-convergence-analysis.md`
61+
- 正向测试(预期 PASS):
62+
- `git diff --stat origin/main...feat/gen-plan-convergence` 仅列出允许列表内的文件
63+
- `hooks/lib/loop-common.sh``tests/test-plan-type-routing.sh` 不出现
64+
(确认 revert pair 的净效应为 0)
65+
- 反向测试(预期 FAIL):
66+
- diff 中出现任何允许列表之外的文件,说明泄露了无关改动
67+
- 出现 `hooks/lib/loop-common.sh` 表示 revert pair 未被正确处理
68+
69+
- AC-4:未执行任何 remote push(用户显式覆盖 `AGENTS.md` 的默认自动 push 行为)
70+
- 正向测试(预期 PASS):
71+
- `git ls-remote zenus feat/gen-plan-convergence` 返回空(无远程 ref)
72+
- `git ls-remote origin feat/gen-plan-convergence` 返回空
73+
- 反向测试(预期 FAIL):
74+
-`zenus``origin` 任一 remote 上发现该分支 ref
75+
76+
- AC-5:所有操作完成后工作区干净
77+
- 正向测试(预期 PASS):
78+
-`feat/gen-plan-convergence` 上执行 `git status` 显示 "nothing to commit, working tree clean"
79+
- 反向测试(预期 FAIL):
80+
- 仍残留与 F2 相关的未暂存改动或未跟踪文件
81+
82+
- AC-6:版本策略被明确延后决策
83+
- 正向测试(预期 PASS):
84+
- `docs/f2-gen-plan-convergence-analysis.md` 注明:版本 bump 的对齐延后,等待上游维护者决策
85+
(对应 runbook 4.5)
86+
- `feat/gen-plan-convergence` 上的版本文件与 `origin/main` 一致(而非 F2 bump 后的值),因为
87+
cherry-pick 冲突通过接受 `origin/main` 版本解决
88+
- 反向测试(预期 FAIL):
89+
- 版本文件彼此不一致,且没有显式文档说明
90+
91+
## 边界范围
92+
93+
边界范围定义了可接受的实现质量与取舍空间。
94+
95+
### 上界(最大可接受范围)
96+
97+
应用全部 9 个 SHA,并在 `feat/gen-plan-convergence` 上形成 2 个提交:一个提交包含经过整理的 F2
98+
代码变更(版本冲突通过保留 `origin/main` 的值解决),另一个提交包含分析文档。分析文档提供逐提交
99+
拆解,按子特性描述实现细节并引用相关测试用例。所有 `tests/test-gen-plan.sh` 用例通过。
100+
101+
### 下界(最小可接受范围)
102+
103+
通过 `cherry-pick -n` 应用全部 9 个 SHA;版本文件冲突通过接受 `origin/main` 的值解决;最终作为一个
104+
合并后的代码提交。分析文档用简洁文字覆盖全部 5 个子特性。`tests/test-gen-plan.sh` 通过。diff 在允许列表内。
105+
106+
### 允许/禁止项
107+
108+
- 可用:`cherry-pick -n`(批量不提交)或逐个 SHA `cherry-pick`
109+
- 可用:在 cherry-pick 期间用 `git checkout --ours` 解决版本文件冲突
110+
- 可用:对任何空 pick 使用 `git cherry-pick --skip`(提交已在 base 中)
111+
- 可用:抽取分支上形成 1 或 2 个提交
112+
- 禁止:对任何 remote 执行 `git push``origin``zenus` 或其他)
113+
- 禁止:对 `origin/main` 进行 force-push 或 rebase
114+
- 禁止:在分析文档中出现 CJK 字符
115+
116+
> **关于确定性约束的说明**:不 push 要求、base commit(`7e0c3ae`)、分支名(`feat/gen-plan-convergence`)、
117+
> 以及分析文档路径都是固定的。提交粒度可在 1–2 个提交范围内自由选择。
118+
119+
## 可行性提示与建议
120+
121+
> **注意**:本节仅用于参考与理解。它们是概念性建议,不是强制要求。
122+
123+
### 概念方案
124+
125+
```bash
126+
# 1. Verify environment
127+
git fetch origin
128+
for sha in c283a92 9c0eef7 5156a05 002308a 8ba3a57 437567b 3c8caf5 4a57429 821f225; do
129+
git cat-file -e "${sha}^{commit}" || echo "MISSING $sha"
130+
done
131+
132+
# 2. Create branch pinned to current origin/main
133+
git switch -c feat/gen-plan-convergence 7e0c3ae
134+
135+
# 3. Cherry-pick all 9 SHAs with no-commit
136+
git cherry-pick -n \
137+
c283a92 9c0eef7 5156a05 002308a 8ba3a57 437567b 3c8caf5 4a57429 821f225
138+
139+
# 4. Resolve version-file conflicts: keep origin/main values
140+
# (If git stops with conflicts on plugin.json, marketplace.json, README.md)
141+
git checkout --ours \
142+
.claude-plugin/plugin.json \
143+
.claude-plugin/marketplace.json \
144+
README.md
145+
git add \
146+
.claude-plugin/plugin.json \
147+
.claude-plugin/marketplace.json \
148+
README.md
149+
150+
# 5. Handle empty picks if any
151+
# git cherry-pick --skip (for any SHAs that are already in base)
152+
153+
# 6. Verify non-empty result
154+
if git diff --quiet && git diff --cached --quiet; then
155+
echo "Empty cherry-pick result. Stop and re-check SHA assignment."
156+
exit 1
157+
fi
158+
159+
# 7. Curate and commit code changes
160+
git add -p # or add specific allowlisted files
161+
git commit -m "feat: extract F2 gen-plan-convergence changes
162+
163+
Cherry-picked from SHAs: c283a92 9c0eef7 8ba3a57 437567b 3c8caf5 4a57429 821f225
164+
Revert pair 5156a05+002308a included (net-zero; hooks/lib/loop-common.sh not in diff)
165+
Version files kept at origin/main values; version bump deferred per runbook 4.5"
166+
167+
# 8. Write and commit analysis document
168+
# ... write docs/f2-gen-plan-convergence-analysis.md ...
169+
git add docs/f2-gen-plan-convergence-analysis.md
170+
git commit -m "docs: add F2 gen-plan-convergence feature analysis"
171+
172+
# 9. Verify
173+
git diff --stat origin/main...HEAD
174+
./tests/test-gen-plan.sh
175+
git status
176+
```
177+
178+
### 相关参考
179+
180+
- `docs/feature-commit-map.md` - F2 的规范 SHA 列表(F2 小节,9 个提交)
181+
- `docs/feature-pr-workflow.md` - 抽取 runbook(完整流程见 4.1–4.5)
182+
- `commands/gen-plan.md` - F2 修改的主要文件(覆盖全部 5 个子特性)
183+
- `prompt-template/plan/gen-plan-template.md` - 与 gen-plan.md 保持同步的模板
184+
- `scripts/validate-gen-plan-io.sh` - 在提交 6(`437567b`)中修改了 IO 校验
185+
- `tests/test-gen-plan.sh` - 主要验证套件(随 F2 提交逐步扩展)
186+
- `tests/test-task-tag-routing.sh` - 在提交 5(`8ba3a57`)中新增,用于 tag 路由测试
187+
188+
## 依赖与顺序
189+
190+
### 里程碑
191+
192+
1. 里程碑 1:环境验证
193+
- Phase A:拉取上游(`git fetch origin`),验证 `origin/main` HEAD 为 `7e0c3ae`
194+
- Phase B:用 `git cat-file -e` 验证全部 9 个 F2 SHA 存在
195+
196+
2. 里程碑 2:分支创建与 cherry-pick
197+
- Phase A:从 `7e0c3ae` 创建 `feat/gen-plan-convergence`
198+
- Phase B:对全部 9 个 SHA 执行 `cherry-pick -n`;跳过任何空 pick
199+
- Phase C:通过接受 `origin/main` 的值解决版本文件冲突
200+
- Phase D:验证结果非空;整理并提交代码变更
201+
202+
3. 里程碑 3:分析文档
203+
- Phase A:分析净 diff,理解全部 5 个子特性
204+
- Phase B:编写 `docs/f2-gen-plan-convergence-analysis.md`(仅英文)
205+
- Phase C:将分析文档作为分支上的第二个提交
206+
207+
4. 里程碑 4:验证
208+
- Phase A:运行 `./tests/test-gen-plan.sh`
209+
- Phase B:验证 `git diff --stat origin/main...HEAD` 为允许列表子集
210+
- Phase C:确认 `git status` 干净,且该分支不存在任何远程 ref
211+
212+
里程碑 2 与里程碑 3 部分重叠:里程碑 3 的分析文档需要基于里程碑 2 Phase B 的 cherry-pick 暂存结果进行检查。
213+
但分析文档的提交顺序在代码提交之后。
214+
215+
## 任务拆解
216+
217+
每个任务都恰好包含一个路由 tag:
218+
- `coding`:由 Codex worker 实现(`/humanize:codex-worker`
219+
- `analyze`:通过 Codex analyzer 执行(`/humanize:ask-codex`
220+
221+
| Task ID | 描述 | 目标 AC | Tag | 依赖 |
222+
|---------|-------------|-----------|-----|------------|
223+
| task1 | 拉取 origin;用 `git cat-file -e` 验证全部 9 个 F2 SHA 存在 | AC-2 | coding | - |
224+
| task2 |`origin/main``7e0c3ae` 创建 `feat/gen-plan-convergence` 分支 | AC-2 | coding | task1 |
225+
| task3 | 对全部 9 个 SHA 执行 `cherry-pick -n`;用 `--ours` 解决版本文件冲突;跳过空 pick | AC-3 | coding | task2 |
226+
| task4 | 通过 `add -p` 整理暂存变更;验证非空;提交代码变更(commit 1) | AC-3, AC-5 | coding | task3 |
227+
| task5 | 分析净 diff;编写并提交 `docs/f2-gen-plan-convergence-analysis.md`(commit 2) | AC-1, AC-5, AC-6 | analyze | task4 |
228+
| task6 | 在 feature 分支上运行 `./tests/test-gen-plan.sh` | AC-3 | coding | task4 |
229+
| task7 | 验证 diff 为允许列表子集;确认版本延后策略已文档化 | AC-3, AC-6 | analyze | task4, task5 |
230+
| task8 | 最终检查:工作区干净、未远程 push、分支存在且 base 正确 | AC-2, AC-4, AC-5 | coding | task5, task6, task7 |
231+
232+
## Codex 团队工作流
233+
234+
### Batch 1 - Planning Codex
235+
- 输入:原始草稿 + 仓库上下文(feature-commit-map.md、feature-pr-workflow.md)
236+
- 输出:风险图(RLCR loop 冲突——通过“无活跃状态”缓解;remote 命名不匹配——通过适配命令缓解;
237+
revert pair;版本 bump 冲突;upstream-main 缺失——通过直接使用 `origin/main` 缓解),缺失
238+
要求(输出位置、提交策略、版本策略、push 意图)
239+
240+
### Batch 2 - Implementation Codex Team
241+
- 输入:本收敛后的计划 + 下方精简的实现交接摘要
242+
- 输出:分支创建、cherry-pick 执行、冲突解决、分析文档、测试执行
243+
- 交接摘要:
244+
- 范围:将 9 个 F2 SHA 抽取到 `feat/gen-plan-convergence`;编写分析文档;不 push
245+
- 关键约束:仅英文输出、不向任何 remote push、通过接受 `origin/main` 的值解决版本文件冲突、
246+
跳过空 pick
247+
- 高风险点:版本文件冲突(`.claude-plugin/plugin.json``.claude-plugin/marketplace.json`
248+
`README.md`),因为 F2 将版本从 v1.10.x bump 到 v1.11.1 base;revert pair(通过
249+
`cherry-pick -n` 处理;`hooks/lib/loop-common.sh` 净效应为 0)
250+
- 必要验证:SHA 存在性检查、非空 patch 检查、diff 允许列表检查、`tests/test-gen-plan.sh` 通过、
251+
版本延后策略已文档化
252+
253+
### Batch 3 - Review Codex Team
254+
- 输入:实现总结、变更文件、测试结果
255+
- 输出:独立质量评审,验证 F2 完整性、未泄露无关文件、未远程 push、分析文档正确性
256+
257+
## Claude-Codex 讨论
258+
259+
### 共识
260+
- `cherry-pick -n`(批量不提交)在存在 revert pair 的情况下是正确做法
261+
- `origin/main``7e0c3ae` 是正确的 base(因为 `origin` = upstream `humania-org`
262+
- `docs/f2-gen-plan-convergence-analysis.md` 是分析文档的合适路径
263+
- `tests/test-gen-plan.sh` 是主要验证命令(确认存在)
264+
- 版本 bump 对齐延后(对应 runbook 4.5,版本策略 gate)
265+
- 不 push 是用户对 `AGENTS.md` 默认自动 push 行为的显式覆盖
266+
267+
### 已解决分歧
268+
- Push 策略 vs AGENTS.md:Codex 提出了冲突;通过注意到用户草稿明确写了 “don't push, just prepare locally”
269+
而解决——任务级指令覆盖 AGENTS.md 默认值。
270+
- AC-3 允许列表缺少分析文档:Codex 指出缺口;Claude 将 `docs/f2-gen-plan-convergence-analysis.md`
271+
加入允许列表。
272+
- 任务顺序(1 个提交 vs 文档创建):Codex 指出不一致;Claude 明确 2 个提交(先代码后文档),并将
273+
task5 调整到 task4 之后。
274+
- AC-3 语义:从“必须包含所有列出文件”改为“不出现允许列表之外的文件”(子集检查),以适配 revert pair
275+
的净效应文件。
276+
- 冲突解决策略:Codex 要求明确策略;Claude 指定对版本文件使用 `git checkout --ours`
277+
(接受 `origin/main` 的值)。
278+
- 空 pick 处理:Codex 要求显式处理;Claude 添加 `git cherry-pick --skip`,用于跳过 base 中已存在的提交。
279+
280+
## 收敛日志
281+
282+
- Round 1:Codex 提出了 push 策略冲突(AGENTS.md)、SHA 描述不充分、测试脚本不确定性、版本文件描述模糊、
283+
分析文档路径未定。Claude 解决了全部 5 项。
284+
- Round 2:Codex 提出了 AC-3 允许列表遗漏分析文档、任务顺序不一致(1 个提交 vs 文档创建顺序)、AC-3
285+
“必需文件”语义过严。Claude 解决了全部 3 项(将文档加入允许列表、引入 2 提交方案、改为子集检查语义)。
286+
- Round 3:Codex 提出了 cherry-pick 冲突解决(版本文件)与空 pick 处理。达到最大轮数。Claude 在最终计划中
287+
解决两项:版本冲突使用 `git checkout --ours`;空 pick 使用 `--skip`
288+
- 最终状态:`partially_converged`(达到最大 3 轮;Round 3 的问题已在最终计划中由 Claude 解决;无用户决策待定)
289+
290+
## 待用户决定
291+
292+
无。所有 Claude/Codex 分歧均已技术性解决。原始中文草稿中的歧义(“不用提交”=“不提交/不 push”)通过阅读完整句子解决:
293+
“这次loop不用提交,只需要在本地做好提交的准备” = “不 push/提交这个 loop,只需要在本地把提交准备好”。
294+
本地 git commit 是预期行为;不进行远程 push。
295+
296+
## 实现说明
297+
298+
### 代码风格要求
299+
- 实现代码与注释中不得出现计划专用术语,例如 "AC-"、"Milestone"、"Step"、"Phase" 等工作流标记
300+
- 这些术语仅用于计划文档,不应进入最终代码库
301+
- 改用语义清晰、贴合领域的命名
302+
303+
---
304+
305+
## 原始设计草稿
306+
307+
<!-- 以下保留用户原始草稿以供参考,请勿修改。 -->
308+
309+
--- 原始设计草稿开始 ---
310+
311+
请你根据@/home/dyzhang/projects/pytorch_qemu/humanize/docs/feature-pr-workflow.md的内容,分析F2的功能和内容。
312+
分析的结果要写成一个md文件.
313+
314+
然后你要在本地创建F2 的branch分支,把相关的功能摘到里面去。
315+
316+
这次loop不用提交,只需要在本地做好提交的准备。
317+
318+
319+
--- 原始设计草稿结束 ---

0 commit comments

Comments
 (0)