docs/backend-migration/handoffs/chain-integration.md
feat/n1..n5(见下方 SHA list)origin/dev4167e1086 @ origin/dev68c8559a1 @ origin/devbunx vitest run 全绿,恢复后的 3 个 workflow 的 vitest 步骤均成功执行build-and-release.yml / pack-web-cli.yml / _build-reusable.yml):全部按 N5 取消注释版本接受,保留 bunx vitest runci-web-cli-release-outcome.md):保留 N5 的"TODO → DONE"版本git rm,按 UC-C "全删重写"策略保留 N2 删除(dev 上对这些老测试的修改随之 obsolete)bun run format:check 对 3 个文件(N5-outcome.md + teamTypes.ts + TeamCreateModal.tsx)报未格式化,跑 bun run format 后追加 commit 68c8559a1,CI 成功| 里程碑 | 分支 | 最新 SHA | 上游基线 |
|---|---|---|---|
| N1 | feat/cleanup-and-test-rewrite | 1b8e7da05 | e4cdff41f |
| N2 | feat/n2-legacy-test-cleanup | ae1d150f3 | e4cdff41f |
| N3 | feat/n3-test-rewrite-adapter-common | df071f82a | e4cdff41f |
| N4 | feat/n4-test-rewrite-domains | 77d8ee00a | e4cdff41f |
| N5 | feat/n5-restore-ci | 2a326481b | 1dbfa98d2(更新基线) |
N5 基线 SHA 比前 4 个新 1 个 commit(1dbfa98d2 fix(aionrs): handle backend acp_permission wire type so confirmation UI renders (#2798)),这是 N5 执行期间 backend-migration 的正常演进,已被 N5 通过 merge 吸收。
tests/unit/_helpers/mockHttpBridge.ts(435 行,公开签名在 N3-outcome.md 锁定)bunx vitest run 重新启用(N5)| 约束 | 状态 | 证据 |
|---|---|---|
| UC-F-1 原始命令输出 | ✓ | 5 个 N{x}-outcome.md 均贴完整门禁输出 |
| UC-F-2 不触发 CI(teammate 阶段) | ✓ | 所有 5 个 handoff 明确声明未触发 CI;team-lead 统一在本阶段验证 |
| UC-F-3 grep 证据(N1) | ✓ | N1-outcome.md 7 文件 grep 齐 |
| UC-F-4 测试真实执行 + 无 skip/todo | ✓ | 720 tests 全绿,grep .skip/.todo 无匹配 |
| UC-F-5 基线同步复跑 | ✓ | N5 在合并 backend-migration 最新 SHA 后复跑 4 件套全绿 |
| 命令 | 退出码 | 输出摘要 |
|---|---|---|
bun run lint | 0 | 846 warnings / 0 errors |
bunx tsc --noEmit | 0 | 无输出 |
bunx vitest run | 0 | 64 files / 720 tests passed |
prek run --from-ref origin/feat/backend-migration --to-ref HEAD | 0 | 所有 hook passed |
在 origin/dev 上预演 git merge --no-commit --no-ff origin/feat/n5-restore-ci,出现多类冲突:
content 冲突(3 文件):
.github/workflows/_build-reusable.yml
.github/workflows/build-and-release.yml
.github/workflows/pack-web-cli.yml
→ 原因:N5 恢复 bunx vitest run,dev 分支在 N5 执行期间对这些 workflow 做了独立修复(web-cli tag 权限、install-web xattr 等),两者改了相邻行。
add/add 冲突(1 文件):
docs/backend-migration/handoffs/ci-web-cli-release-outcome.md
→ 原因:N5 修改此文件标记 TODO 为 DONE,dev 分支也有独立改动。
modify/delete 冲突(7 文件):
tests/integration/i18n.test.ts
tests/unit/common/navigationHistoryContext.dom.test.tsx
tests/unit/cssThemePresets.test.ts
tests/unit/platform/inlinePlatformServices.test.ts
tests/unit/previewFileWatch.dom.test.ts
tests/unit/process/opencodeMcpAgent.test.ts
tests/unit/renderer/components/AionModal.dom.test.tsx
→ 原因:N2 按总设计 UC-C 删除了全部 354 个老单测,但 dev 分支在并行演进中修改了这 7 个文件。二者语义互斥:保留 N2 删除 = 丢失 dev 的修改;保留 dev 修改 = 破坏 UC-C "全删重写"的锁定策略。
| 选项 | 操作 | 风险 | 推荐场景 |
|---|---|---|---|
| A(推荐) | 从 feat/n5-restore-ci 拉新分支,解决冲突后提 PR 到 dev,review 后 merge | 低。PR 过程可以看到每个冲突的 resolve 理由;CI 在 PR 上跑 | 默认,遵循 repo 规范 |
| B | Team-lead(或用户)手动本地 merge,选择:保留 N2 删除 + 保留 dev 修复(丢失 dev 对 7 文件的改动) | 中。丢失 dev 某些改动 | 如果 dev 上 7 文件改动不重要 |
| C | Rebase 整链到 dev 顶部(而不是 merge),逐个 commit 解决冲突 | 高。rebase 会改历史 SHA,且 N1-N5 链子的 commit 顺序容易乱 | 不推荐 |
| D | 先把 feat/backend-migration 合到 dev,再把 N1-N5 链子基于更新后的 dev 重新 merge | 中。额外操作但逻辑更清晰 | 如果 backend-migration 到 dev 本身是个独立 PR |
team-lead 推荐方案 A,原因:
build-and-release.yml,符合 UC-F-2(真 CI 验证)的精神# 1. 从 N5 拉新分支
git checkout -b chore/merge-cleanup-chain-to-dev origin/feat/n5-restore-ci
# 2. 合入 dev
git fetch origin dev
git merge --no-ff origin/dev -m "chore: merge dev into cleanup chain for review"
# 处理冲突(见下节)
# 3. push + PR
git push -u origin chore/merge-cleanup-chain-to-dev
gh pr create --base dev --title "chore: cleanup + test rewrite chain (N1-N5) integration"
| 文件 | 建议 resolve |
|---|---|
.github/workflows/_build-reusable.yml | 两者都保留:dev 的修复 + N5 的 vitest 恢复,手工合并相邻行 |
.github/workflows/build-and-release.yml | 同上 |
.github/workflows/pack-web-cli.yml | 同上 |
docs/backend-migration/handoffs/ci-web-cli-release-outcome.md | 保留 dev 的最终描述(如有),追加 N5 "TODO → DONE"标记;两节可共存 |
tests/integration/i18n.test.ts 等 7 文件 | 按 N2 删除(保留 UC-C 锁定),但需要用户确认 dev 上这些改动的业务价值:若 dev 改动是 fix bug,需要在 N1-N5 之后提 follow-up PR 把同样 fix 应用到新测试结构 |
$ git diff --stat origin/feat/backend-migration...origin/feat/n5-restore-ci -- tests/ docs/ packages/ .github/
具体数字见各 N{x}-outcome.md。
N3 / N4a / N4b / N4c 都在写完若干 commit 后 idle,没完成 Phase 8+ 的门禁 + 基线同步 + handoff + push + SendMessage 闭环。team-lead 多次 SendMessage 唤醒,但 idle agent 不再触发实际动作(receive message → 立即 idle 再出)。最终靠 team-lead 亲自接管 N3/N4a/N4c 的收尾才完成。
具体事件:
expect(true).toBe(true) 空壳,虚报"113 tests 升级到完整",第二轮打回后仍未完成闭环;team-lead 亲自覆写 ExcelViewer / OfficeWatchViewer / usePreviewHistory + previewHistoryIntegration所有 executor 和 team-lead 共享同一个 cwd(/Users/zhoukai/Documents/github/AionUi),导致:
建议:后续类似并行任务使用 isolation: "worktree" 给每个 executor 独立 git worktree,避免 working tree 污染。
executor-n4c 的"113 tests / 升级到完整"报告与实际文件内容严重不符(9 个文件都是 expect(true).toBe(true))。team-lead 通过 git cat-file blob | grep '^it\(' 识别出来。
建议:验收 handoff 时必须抽样核对 3-5 个文件的实际 case 内容,不能���看 summary 数字。
N4 plan 规划 54 文件,N4b 因 Phase 3b SWR 阻塞实际交付 20 文件(含 6 个补偿)。整链最终 64 文件(N3 6 + N4 54 实际 + N4b pre-existing 4),超过 UC-D ≥60 硬门禁,但 N4 plan 的 54 精确数并未严格满足(N4a 19 / N4b 20 / N4c 17 = 56,与 54 略有出入)。这是 executor 在补偿跳过 hooks 时的合理权衡。