mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-16 06:23:23 +09:00
13 KiB
13 KiB
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.text0xa52203 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提交的 stampp7w5-c89000f5),supervisor0.0.0.0:40613,tokenp7w1b-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. 没做完的(按优先级)
- p7w6 APK + 手机 server 重部署 + 真机验收:
sed 's/p7w5/p7w6/g' ~/w7/logs/p7w5-apk-inner.sh > ~/w7/logs/p7w6-apk-inner.sh(在 pipe 头3374becd上跑;stampp7w6-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)。 - 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)。 - B4:
WaitForSubmitsUpTo聚合等待 +WaitForFrameSerial的「答 true 而未完成」(restart 不 continue,且不再读record)+ 两处陈旧注释 +CollectGarbage/pruneWire在 wire 臂从不执行(VulkanRenderer.cppSetupDraw)+ §12 裁判点名的 Magma 债。 - 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,可一并收。 - wave 3:棘轮 88 = monolith draw 路径的
#if(link_ratchet.py --bucket,notes/p7/magma-b2.md§4.3 逐符号点名)。 - 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)。 - wave 5:fuzz 三臂、P7 收官异模型整体审查(ID-66)。
- 小件:
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}都已拣完,留着只为查历史。 - 文档同步:Claude Docs 主进度页(
34576d4c-…,到 rev 31)每次落地一段;记忆文件disaggregated-plan.md。