Files
MobileGL/docs/Disaggregated/notes/p7/HANDOFF-2026-09-22.md
T

13 KiB
Raw Blame History

P7 集成交接(2026-09-22 深夜,集成者会话结束态)

**2026-09-23 更新:**本页是历史快照;最新集成状态与在跑命令见 HANDOFF-2026-09-23.md。

这一页是给接手 agent 的机械清单:哪些已落地、哪些在跑、哪些没做完、每一步的命令。裁定与数字见 INTEGRATOR-DECISIONS-P7.md(到 ID-P7-48)、CURRENT_STAGE_STATUS.md、MG_Remote/CONTRACT-P7.md(§12 = 债)。 本页在 2026-09-22 深夜整页重写过一次:之前版本里「M2 r2 待落地」「六个 agent 在跑」都已经不是现状。

0. 铁律(不变)

  • 只在 WSL ~/w7/pipe(集成树)和各 ~/w7/p7-<slug> 包树工作;绝不碰 Windows 主 dev 树 …\FoldCraftLauncher\MobileGL;Windows 侧只用 worktree …\MobileGL-disagg。
  • 绝不从 Windows 经 UNC 对 ~/w7/pipe 跑 git(会留下 .git/index.lock);git 只在 WSL 脚本里跑,读文件走 UNC 可以。
  • 推送只按 SHA:Windows worktree 里 git fetch wslpipe feat/disaggregated && git merge --ff-only <sha> && git push origin <sha>:refs/heads/feat/disaggregated;绝不按分支名 force-push。
  • 提交禁止任何 Co-Authored-By 尾注(用户明令;~/w7/notes/tools/pick.sh 在 --amend 时自动剥;手工 cherry-pick --continue 之后要自己 amend 掉)。
  • 审查由集成者会话本人做(用户 2026-09-22 叫停 fable 审查代理):只读、对着 pipe 源码而不是包 note 核对、按 file:line 出 verdict(land / land with fixes / rework),文本放 docs/Disaggregated/notes/handoff/review-<pkg>.md 并复制到 ~/w7/notes/handoff/。
  • 性能只记录不做门;不顺手修 dev 的 bug;rule I / J / G1 / G14 见 CONTRACT-P7 §0。
  • 给子代理的 prompt 必须先写明层级(常设指令 + 「最新一句已由集成者执行」),否则它们会把用户最新一句当唯一指令拒做;需要 Opus 5.5 时走 Workflow model:"claude-opus-5-5"(Agent 工具的 opus 仍是 Opus 5)。
  • wsl.exe -d Arch -- bash -lc '…$x…' 会吞 $var:一律写脚本文件再 MSYS_NO_PATHCONV=1 wsl.exe -d Arch -- bash /mnt/c/…/x.sh;长输出别 | head(SIGPIPE 会杀脚本),重定向到日志再看;Bash 工具里带撇号 / 多层 heredoc 的脚本会解析失败,用 Write 工具落盘再跑。

1. 现状(本会话结束时)

  • origin/feat/disaggregated = ~/w7/pipe 头 = 3374becd(树干净,全分支零尾注)。在 87584d0b 之上新落地:B3 修复 r2 / r3、V1 修复 r1 / r2、B2 r3 / r4、M2 + M2 r2、F 修复轮、X2、docs 到 ID-P7-48。每一步的门都全绿;InitialCapsStartup.ANullInitialSnapshot… 的偶红已由 X2 消掉(真因是夹具按 accept 顺序配对 loopback 连接)。
  • 推送头上没有已知的正确性缺口:M2 审查的 must-fix(memo 按裸 VkBuffer 句柄命中 → 中帧 UAF)已由 M2 r2 关闭(VkBufferManager::m_wireStoreDestroyEpoch 进 UniformManager 两个 memo,ID-P7-46)。余债全部在 CONTRACT-P7 §12。
  • 门(模板 ~/w7/logs/p7-gate-template.sh,增量构建下一轮约 6 min)在 336174e3 上的读数:unit 2436 / split 304 / spawn 220 / tcp 223 / magma 101 / 80 / 71 / full 539 / verify 1150 / 1084;G1 .text 0xa52203 nm +0/−0;普查 79;棘轮 173;parity 0;审计 53/53/0;OpenRA DirectVulkan inproc + spawn 回放 ssim 1.000000、0 条 unsound。
  • Windows worktree …\MobileGL-disagg 也在 3374becd。
  • 手机(Redmi 2f7cbe2e):装的是 p7w5(top.mobilegl.plugin.p7w1.trace,c89000f5 提交的 stamp p7w5-c89000f5),supervisor 0.0.0.0:40613,token p7w1b-lan-token-20260922;主机侧同 stamp 制品 ~/w7/logs/p7w5host/host/(树 ~/w7/p7-w5host)。p7w5 不含 F 的 wireFingerprint 变更:用 pipe 头的制品连它只会 no Welcome (rc=6),所以下一次真机验收先要 p7w6(§4 第 1 项)。
  • 手机电源:screen_off_timeout = 60 000 ms,AC 供电(stay_on_while_plugged_in = 2 只对 USB),所以每例 wake-adb 点亮后约 60 s 息屏——见 §2 的假设。
  • 用户已加 WSL 路由 192.168.21.181/32 via 192.168.31.1 dev eth0 metric 10(重启 WSL 会丢,需重加)。
  • **没有在跑的 agent。**所有派出的包与审查都已收尾(§2 第二张表)。

2. 在跑的东西 / 已完成的报告

在跑 位置 接手动作
窗口 1b 配速矩阵(39 例 DirectGLES × TCP,WSL client ↔ 手机 p7w5,逐例 3 s 间隔、两遍) ~/w7/logs/p7w1b/paced.log(=== ALL DONE 结束;写这句时 46 / 78 例)、~/w7/logs/p7w1b/paced/pass/<case>/(driver.log、results.json、phone-logcat.txt、DirectGLES/…/work/output/mobilegl.{client,server}.log) 等 ALL DONE 后写 notes/p65/window-1b-p7w5.md(每例状态 / 原因 / 两遍是否一致)+ ID 行 + CONTRACT-P7 §7。先看 ID-P7-48:pass 1 27/39 红,主因是 DEVICE LOST(client 日志「the barrier woke on a peer that had hung up」= 对端 TCP 挂断;随后的 Fatal{UncarriedInitialBytes, "resource_respecify"} 是 PipeFill.cpp:1080 的下游判定,不是原因),其中 11 例失败时长聚在 57–61 s,pass 2 同例已有 3 例转绿,am_kill / logcat -b crash 在本轮时段无记录 → 假设 = 息屏后 MIUI 后台策略切断 child 的 TCP。本会话没改设备状态(保持两遍同口径)。重跑前:adb -s 2f7cbe2e shell svc power stayon true(或 settings put system screen_off_timeout 1800000),并把 supervisor 对 child 的 reap 行纳入每例采集(现在 phone: 列只抓每例开头 0.5 s 的 logcat,paced-inner.sh:24-28)。其他已见:1.21.11-main-menu 超时、OpenRA 偶发 Fatal{ReadbackDeclined,"ReadPixels"}、xaero-minimap pass 2 rc=124。
已完成 verdict 文本
M2 审查(fable) land with fixes,一条 must-fix → M2 r2 notes/handoff/review-m2.md
M2 r2(fable 实现,集成者审查) land,已推(ID-P7-46) notes/handoff/m2-r2.md、review-m2-r2.md
F 修复轮审查(集成者) land,两 nit 记 §12(ID-P7-44) notes/handoff/review-f-fix.md
B3 r3 + B2 r4 审查(集成者) land(ID-P7-44) notes/handoff/review-b3r3-b2r4.md
V1 修复 r2(fable 实现,集成者审查) land,已推(ID-P7-47) notes/handoff/v1-fix-r2.md、review-v1-fix-r2.md
X2 flake(fable) test-only,已推(ID-P7-45) notes/handoff/x2-caps-flake.md
(notes/handoff/ = 仓库 docs/Disaggregated/notes/handoff/,WSL ~/w7/notes/handoff/ 各一份。)

3. 机械步骤(每包相同)

# 1) cherry-pick(自动剥尾注;有冲突会停在 CHERRY_PICK_HEAD)
bash ~/w7/notes/tools/pick.sh <worktree-name> <base-sha> <sha…>
#    冲突:改好文件 → git add <file> → git -c core.editor=true cherry-pick --continue   (不接 -q)
#    → git commit --amend -F <(git log -1 --format=%B | grep -v -i co-authored-by)      (剥尾注)
#    → 再用 pick.sh 拣剩下的 sha;pipe 上 `git status --short` 必须为空、无 CHERRY_PICK_HEAD 才能开门
# 2) 门(build-split + build-linux G1 + census + ratchet + parity + 八车道 + 审计 + OpenRA split 回放 + verify 构建两车道)
sed 's/TAG/<tag>/g' ~/w7/logs/p7-gate-template.sh > ~/w7/logs/p7-gate-<tag>-inner.sh
sed -i '2i export MOBILEGL_FLATC_EXECUTABLE=/home/swung/w7/flatc-build/flatc' ~/w7/logs/p7-gate-<tag>-inner.sh
rm -f ~/w7/pipe/build-split/Testing/Temporary/LastTestsFailed.log ~/w7/pipe/build-verify/Testing/Temporary/LastTestsFailed.log
setsid nohup bash ~/w7/logs/p7-gate-<tag>-inner.sh > ~/w7/logs/p7-gate-<tag>.log 2>&1 < /dev/null & disown   # 等 "=== DONE-VERIFY"
#    读数行:`lane <name> … out of N`(八车道)、`verify-build lane <name> … out of N`(verify 两车道,前缀不同)、
#    `G1 syms added=0 removed=0`、`fatal census: 79 abort sites`、`ratchet: unchanged at 173`、`parity errors: 0`、
#    两条 `unsound-serial-complete lines: 0`、`wire-declines: 53 rows, 53 with sites, 53 site(s) total, 0 unlogged, 0 unknown`
# 3) 审查:集成者本人,只读,对 pipe 源码核对,file:line 出 verdict;文本放 notes/handoff/review-<pkg>.md
# 4) 文档:INTEGRATOR-DECISIONS 加一行 ID、CURRENT_STAGE_STATUS §1/§2/§4/§5、ROADMAP P7 行、CONTRACT-P7 §12 抄包 note 的债、本页;
python3 scripts/check_doc_citations.py --rev HEAD --strict docs/Disaggregated/*.md docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md docs/Disaggregated/notes/p7/HANDOFF-2026-09-22.md MobileGL/MG_Remote/CONTRACT-P7.md
# 5) 推送(Windows worktree):git fetch wslpipe feat/disaggregated && git merge --ff-only <sha> && git push origin <sha>:refs/heads/feat/disaggregated
# 6) Claude Docs 主进度页(34576d4c-…)「最近落地」顶部插一段、「此刻在跑」改一句;记忆 disaggregated-plan.md
  • pipe 的 tcp fixture 端口是 40713(build-split)、40714(build-verify),别改回 40613(会撞包树的 fixture)。
  • scripts/ci/spawn_lane_parity.py 在 pipe 上的 MAGMA_SERVER_ENV_KNOB_NO_TCP 按精确 tail 例外(包分支 M2 是按前缀):每个新的 split/spawn-only 用例都要补一行,否则 parity errors: 1(M2 r2 门上唯一的红就是这个)。两次合并后要删掉自动合并残留的 not_on_arm = not_on_arm or {}。
  • 包分支上写不了、只在 pipe 有的字段(B3 的 lastUseSubmitIndex 一类):拣完后单独一笔 [MG_Backend] (P7): … 提交,不塞进包的提交。
  • red-once 变体必须把 MobileGL、MobileGLServer、MobileGLIntegrationTest 三个目标都建:桌面上 MobileGLIntegrationTest 静态链接 MobileGL_s,Split 臂跑的是编进测试二进制的 backend(magma-m2.md §9.3)。

4. 没做完的(按优先级)

  1. p7w6 APK + 手机 server 重部署 + 真机验收:sed 's/p7w5/p7w6/g' ~/w7/logs/p7w5-apk-inner.sh > ~/w7/logs/p7w6-apk-inner.sh(在 pipe 头 3374becd 上跑;stamp p7w6-3374becd;产物 ~/w7/logs/p7w6/trace-p7w6.apk;adb install -r;tcp_device_server.py start …(见 ~/w7/logs/supervisor-start.sh,token ≥ 16 字节);主机侧同 stamp 制品照 ~/w7/p7-w5host 的做法(-DMOBILEGL_BUILD_STAMP=p7w6-3374becd -DMOBILEGL_BUILD_TRACE_REPLAY=ON)。F 改了 wireFingerprint:旧 server + 新 client 只会 no Welcome (rc=6)。先 svc power stayon true(§2)。然后依次:(a) bsl-esc-menu-854 DirectVulkan pbuffer spawn + inproc 各 3 遍(M2 的设备验收,记 /proc/<pid>/maps 行数与 wbuf[] 行;主机 spawn server 已 825 → 546 MiB);(b) 窗口 1b 用 p7w6 重跑一遍(对照 DataBind 是否消除 PH-7 (4) 的 250 ms 配对窗口,以及息屏假设是否成立);(c) 门 3 终局(分母 36:三遍逐位相同 + spawn 臂同会话,run_android_retrace_local.py --matrix --backend DirectVulkan --use-pbuffer --transport inproc|spawn --repeat 3)。
  2. M3:descriptor set 在长帧内无界(UniformManager::AcquireDescriptorSet 只在 BeginFrame/drain 回卷)——按 submit-index 证明回卷每个 layout 的游标;review-m2.md 域外 (b)。M2 r2 让每次 wire store 销毁事件后同 program 第一笔 draw 多一个 set(bsl ~2.6 万 / 130 万),是它的分母(§12)。
  3. B4:WaitForSubmitsUpTo 聚合等待 + WaitForFrameSerial 的「答 true 而未完成」(restart 不 continue,且不再读 record)+ 两处陈旧注释 + CollectGarbage/pruneWire 在 wire 臂从不执行(VulkanRenderer.cpp SetupDraw)+ §12 裁判点名的 Magma 债。
  4. F2:D11 五处 + PH-2、PH-6 drop-with-latch、PH-1 (3)(4)、PH-7 (5) fork 前认证——前置是能向 spawn/TCP server 投递畸形记录的对端字节驱动(fuzz 臂 2 第一块)。F 修复轮的两条小债(RunSession 里 Accept() 到 close(sourceFd) 之间的微秒级无具名拒绝窗口;protocol_revision_pin.py 对注释 / 空白改动也要 bump)在 §12,可一并收。
  5. wave 3:棘轮 88 = monolith draw 路径的 #if(link_ratchet.py --bucket,notes/p7/magma-b2.md §4.3 逐符号点名)。
  6. wave 4:CTS AFTER(inproc × DV 五块 vs notes/p7/device-window-1/CTS-base/,≤ 0.5 pp,新增 crash = 0;tools/cts/caselists/,设备 /data/local/tmp/mgcts)。
  7. wave 5:fuzz 三臂、P7 收官异模型整体审查(ID-66)。
  8. 小件:retrace_gate.py 只覆盖 monolith 条目——pipe 门现用 ~/w7/logs/pipe-retrace.sh(借 ~/w7/p7-magma-b3/build-split/tools/trace_replay/mobilegl_trace_replay);把 MOBILEGL_BUILD_TRACE_REPLAY=ON 配进 pipe 的 build-split 后可删这层借用。P5D-INPROC-PERFORMANCE.md 的 Adreno 数字重取(§12)。X2 域外债:AcceptPair/ConnectTo 对 tcp:// 监听仍可调且按顺序配对(产品从不这样用),未具名拒绝。测量树 ~/w7/m2-meas*、~/w7/rev-*、~/w7/v1bin、~/w7/m2bin 可删;包树 ~/w7/p7-{magma-m2,verify-split,x2-caps-flake,ph-f,magma-b2,magma-b3,census-e1} 都已拣完,留着只为查历史。
  9. 文档同步:Claude Docs 主进度页(34576d4c-…,到 rev 31)每次落地一段;记忆文件 disaggregated-plan.md。