[docs] (P7): ID-P7-43 - M2 lands with a must-fix routed to M2 round 2, and HANDOFF-2026-09-22.md lists every mechanical step left for the next integrator

This commit is contained in:
2026-09-22 22:08:23 -04:00
parent 63347c1682
commit 137c911a94
3 changed files with 62 additions and 3 deletions
+3 -3
View File
@@ -4,7 +4,7 @@
**阶段:P7 DirectVulkan(Magma)全量迁移**,并行流 **P3b/P4b 深化(Espryt,wave 2-D)** 与 **Ph 小件(簇 F)**。计划 [`notes/p7/PLAN-PH-P34B-P7.md`](notes/p7/PLAN-PH-P34B-P7.md)(五波)。
**更新:2026-09-22 夜** · `origin/feat/disaggregated` = `87584d0b`;集成树 `~/w7/pipe` 领先 40 提交(B3 修复 r2/r3、V1 修复轮、B2 r3/r4、M2、F 修复轮),M2 与 F 修复门全绿、审查在跑;窗口 1b 逐例矩阵在跑(ID-P7-42)。
**更新:2026-09-22 夜(集成者会话收尾)** · 交接清单 [`notes/p7/HANDOFF-2026-09-22.md`](notes/p7/HANDOFF-2026-09-22.md);在跑 agent 的报告落到 WSL `~/w7/notes/handoff/`。`origin/feat/disaggregated` 推到集成树头(B3 修复 r2/r3、V1 修复轮、B2 r3/r4、M2、F 修复轮;门全绿);**M2 审查的 must-fix(memo 句柄复用 ABA)由 M2 r2 关闭,落地前 wire 臂有一处已知可达点**(ID-P7-43)。
## 1. 出口门总览(CONTRACT-P7 §8 的 9 项分母)
@@ -62,14 +62,14 @@
| B2 r3 审查(fable) | transport 门控的真值域、默认 framebuffer pre-pass 的解析、新腿的读面 | 进行中;代码已在 pipe(ID-P7-40) |
| B3 修复 r2 审查(fable) | 剥注释 / 字面量的边界、块回溯规则、自测覆盖、fail-closed 顺序、pull-library 控制 | 进行中;代码已在 pipe,门全绿(ID-P7-40) |
| V1 修复轮审查(fable) | read 侧 corrupt 的两次施加、server 半边断言、逐条武装普查的双向性、例外表 5 类 | 进行中;代码已在 pipe(ID-P7-40) |
| M2 审查(fable) | 提前释放的三个条件、水位线同步的可重入性、`ServerSpawn.cpp` 放行的形状、计量 / 场景的双向性 | 进行中;代码已在 pipe(ID-P7-41) |
| M2 r2(fable) | **must-fix**:`m_wireStoreDestroyEpoch` 进 `UniformManager` 两个 memo(§9 例外已批)+ red-once;note SHA、`ASSERT_GE`、注释、`lastUseSubmitIndex` 清零、清洗名单 | 进行中 → `~/w7/notes/handoff/m2-r2.md`(ID-P7-43) |
| V1 修复 r2(fable) | read 侧控制断言 ≥ 2 行、verify 摘要在 `Close()` 前 flush(client 日志不再被截断)、措辞 | 进行中(ID-P7-42) |
| X2(fable) | `InitialCapsStartup.ANullInitialSnapshot…` 在负载下的 flake:复现、测试 vs 产品判定、修复 + 500 次循环 | 进行中(ID-P7-42) |
| B3 r3 + B2 r4 审查(fable) | 守卫感知的 `#endif` 规则、`EVIDENCE` 保护、窗口腿底色 | 进行中(ID-P7-42) |
| 窗口 1b 矩阵 | 38 例 DirectGLES × TCP(WSL ↔ 手机 p7w5,逐例 3 s 间隔、两遍、逐例 logcat) | 进行中;已见 ReadPixels 被设备 server 拒、main-menu server 死亡(ID-P7-41) |
| F 修复轮审查(fable) | hand-off 关闭的竞态窗口、listener 关闭的路径、摘要 pin 的 LF 归一化、`MalformedHello` 词表、G14 的 `CapsMirrorTest` 一名 | 进行中;代码已在 pipe(ID-P7-42) |
## 5. 下一步(按序)
## 5. 下一步(按序;机械步骤与命令见 [`notes/p7/HANDOFF-2026-09-22.md`](notes/p7/HANDOFF-2026-09-22.md))
1. ~~推送~~ 已推 `origin@87584d0b`;四个修复轮(B2 r3、B3 修复 r2、V1 修复、F 修复)回来 → 各自门 + 复审 → 下一次推送。
2. **F2**:D11 五处 + PH-2、PH-6 drop-with-latch、PH-1 (3)(4)、PH-7 (5) fork 前认证——先要一个能向 spawn / TCP server 发畸形记录的对端字节驱动(fuzz 臂 2 的第一块)。
@@ -0,0 +1,58 @@
# P7 集成交接(2026-09-22 夜,集成者会话收尾)
> 这一页是给接手 agent 的**机械清单**:哪些已落地、哪些在跑、哪些没做完、每一步的命令。裁定与数字见
> `INTEGRATOR-DECISIONS-P7.md`(到 ID-P7-43)、`CURRENT_STAGE_STATUS.md`、`MG_Remote/CONTRACT-P7.md`。
## 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 里跑。
- 推送只按 SHA:`git fetch wslpipe feat/disaggregated && git merge --ff-only FETCH_HEAD && git push origin <sha>:refs/heads/feat/disaggregated`(Windows worktree)。
- **提交禁止任何 `Co-Authored-By` 尾注**(用户明令;`scratchpad/pick.sh` 在 `--amend` 时自动剥)。
- 性能只记录不做门;不顺手修 `dev` 的 bug;每包一次 fable 审查;rule I / J / G1 / G14 见 CONTRACT-P7 §0。
- 给子代理的 prompt 必须先写明层级(常设指令 + 「最新一句已由集成者执行」),否则它们会把用户最新一句当唯一指令拒做;需要 Opus 5.5 时走 Workflow `model:"claude-opus-5-5"`(Agent 工具的 `opus` 仍是 Opus 5),本轮因拒做问题全部改走 Agent 工具 + fable。
- `wsl.exe -d Arch -- bash -lc '…$x…'` 会吞 `$var`:**一律写脚本文件**再 `MSYS_NO_PATHCONV=1 wsl.exe -d Arch -- bash /mnt/c/…/x.sh`;长输出别 `| head`(SIGPIPE 会杀脚本),重定向到日志再看。
## 1. 现状(本会话结束时)
- `origin/feat/disaggregated` = **`87584d0b`**(尾注已改写;B2 r1/r2、B3 返工 + 修复轮、V1、F 片 1–3、E1)。
- 集成树 `~/w7/pipe` 头 = 见 `git log`(B3 修复 r2/r3、V1 修复轮、B2 r3/r4、M2、F 修复轮、docs 到 ID-P7-43);每一步的门都全绿(唯一红 = `InitialCapsStartup.ANullInitialSnapshot…` flake,X2 在修)。**推送时机**:接手者先跑一次 `~/w7/logs/p7-gate-template.sh`(`sed s/TAG/<tag>/g`),绿即推。
- 手机(Redmi 2f7cbe2e):装的是 **p7w5**(`top.mobilegl.plugin.p7w1.trace`),supervisor `0.0.0.0:40613`,token `p7w1b-lan-token-20260922`;主机侧同 stamp 制品 `~/w7/logs/p7w5host/host/`(树 `~/w7/p7-w5host`)。
- 用户已加 WSL 路由 `192.168.21.181/32 via 192.168.31.1 dev eth0`(重启 WSL 会丢,需重加)。
## 2. 在跑的 agent(结果会写到 `~/w7/notes/handoff/`)
| 名 | 树 / 产物 | 接手动作 |
|---|---|---|
| M2 审查 | `~/w7/notes/handoff/review-m2.md`(verdict land with fixes,**一条 must-fix**:memo 句柄复用 ABA) | 已派 **M2 r2**(fable)修;结果 `~/w7/notes/handoff/m2-r2.md` |
| M2 r2(fable) | `~/w7/p7-magma-m2` 在 `6f67fd7f` 之上的新提交 | cherry-pick → 门 → 审查 → 推 |
| F 修复轮审查 | `~/w7/notes/handoff/review-f-fix.md` | 按 verdict 派修复轮或落地 |
| B3 r3 + B2 r4 审查 | `~/w7/notes/handoff/review-b3r3-b2r4.md` | 同上 |
| V1 修复 r2(fable) | `~/w7/notes/handoff/v1-fix-r2.md`,树 `~/w7/p7-verify-split` 在 `723bb93f` 之上 | cherry-pick → 门(含 verify 构建)→ 审查 |
| X2 flake(fable) | `~/w7/notes/handoff/x2-caps-flake.md`,树 `~/w7/p7-x2-caps-flake` | cherry-pick → unit 门 |
| 窗口 1b 矩阵 | `~/w7/logs/p7w1b/paced.log`(`=== ALL DONE` 结束)、`~/w7/logs/p7w1b/paced/pass{1,2}/<case>/`(driver.log、client log、phone-logcat.txt) | 写 `notes/p65/window-1b-p7w5.md`(每例状态 / 原因 / 两遍是否一致;已知:main-menu 类 server 死亡、OpenRA 偶发 `ReadbackDeclined`、1.21.11-main-menu 超时)+ ID + CONTRACT-P7 §7 |
## 3. 机械步骤(每包相同)
```bash
# 1) cherry-pick(自动剥尾注;有冲突会停)
bash ~/w7/notes/tools/pick.sh <worktree-name> <base-sha> <sha…> # 脚本在本会话 scratchpad,或重写:逐个 cherry-pick + amend 掉 Co-Authored-By
# 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
setsid nohup bash ~/w7/logs/p7-gate-<tag>-inner.sh > ~/w7/logs/p7-gate-<tag>.log 2>&1 < /dev/null & disown # 等 "=== DONE-VERIFY"
# 3) 审查:fable、只读、按 file:line 出 verdict(land / land with fixes / rework)
# 4) 文档:INTEGRATOR-DECISIONS 加一行 ID、CURRENT_STAGE_STATUS §1/§2/§4/§5、ROADMAP P7/Ph/P3b 行、CONTRACT-P7 §12 抄包 note 的债;
# python3 scripts/check_doc_citations.py --rev HEAD --strict docs/Disaggregated/*.md docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md MobileGL/MG_Remote/CONTRACT-P7.md
# 5) 推送(Windows worktree):git fetch wslpipe feat/disaggregated && git merge --ff-only FETCH_HEAD && git push origin $(git rev-parse HEAD):refs/heads/feat/disaggregated
```
pipe 的 tcp fixture 端口是 40713(`build-split`)、40714(`build-verify`),别改回 40613(会撞包树的 fixture)。
## 4. 没做完的(按优先级)
1. **M2 r2 must-fix 落地**(见 §2)——在它落地前,wire 臂有一处已知的中帧 use-after-free 可达点(memo 按裸 VkBuffer 句柄命中)。
2. **p7w6 APK + 手机 server 重部署**:`sed 's/p7w5/p7w6/g' ~/w7/logs/p7w5-apk-inner.sh > ~/w7/logs/p7w6-apk-inner.sh`(在 pipe 头上跑;stamp `p7w6-<head>`;产物 `~/w7/logs/p7w6/trace-p7w6.apk`;`adb install -r`;`tcp_device_server.py start …`(见 `supervisor-start.sh`,改 token ≥16 字节)。**F 改了 wireFingerprint:旧 server + 新 client 只会 `no Welcome (rc=6)`**。然后:bsl-esc-menu-854 DirectVulkan pbuffer spawn + inproc 各 3 遍(M2 的设备验收,记 maps 与 `wbuf[]` 行)、窗口 1b 用 p7w6 重跑一遍(对照 `DataBind` 是否消除 250 ms 配对窗口)、门 3 终局(分母 36:三遍逐位 + spawn 臂同会话,`run_android_retrace_local.py --matrix --backend DirectVulkan --use-pbuffer --transport inproc|spawn --repeat 3`)。
3. **M3**:descriptor set 在长帧内无界(`UniformManager::AcquireDescriptorSet` 只在 `BeginFrame`/drain 回卷)——按 submit-index 证明回卷每个 layout 的游标;`review-m2.md` 域外 (b)。
4. **B4**:`WaitForSubmitsUpTo` 聚合等待 + `WaitForFrameSerial` 的「答 true 而未完成」(restart 不 continue,且不再读 `record`)+ 两处陈旧注释 + `CollectGarbage`/`pruneWire` 在 wire 臂从不执行(`VulkanRenderer.cpp` `SetupDraw`)+ §12 裁判点名的 Magma 债。
5. **F2**:D11 五处 + PH-2、PH-6 drop-with-latch、PH-1 (3)(4)、PH-7 (5) fork 前认证——前置是能向 spawn/TCP server 投递畸形记录的对端字节驱动(fuzz 臂 2 第一块);`ServerSpawn.cpp` 清洗名单补 `Ipc.SpinUs/ServerAffinity/Audit`(M2 r2 顺带)。
6. **wave 3**:棘轮 88 = monolith draw 路径的 `#if`(`link_ratchet.py --bucket`,`notes/p7/magma-b2.md` §4.3 逐符号点名)。
7. **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`)。
8. **wave 5**:fuzz 三臂、P7 收官异模型整体审查(ID-66)。
9. 小件:`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)。测量树 `~/w7/m2-meas*`、`~/w7/rev-*` 可删。
10. 文档同步:Claude Docs 主进度页(`34576d4c-…`)每次落地一段;记忆文件 `disaggregated-plan.md`。
@@ -45,4 +45,5 @@
| ID-P7-40 | 2026-09-22 | **窗口 1b 开跑 + 三个修复轮到集成树。** (1) 用户在 Arch WSL 加了主机路由(`192.168.21.181/32 via 192.168.31.1 dev eth0`),route 监视器确认;手机 supervisor 已死,`tcp_device_server.py start` 重起(`0.0.0.0:40613`,token 24 字节);冻结的 p7w4 主机制品被 `Refuse{BuildFingerprint} … peer=p7w5-c89000f5` 拒绝(`MOBILEGL_IPC_REQUIRE_SAME_BUILD`)→ 在 p7w5 的提交(改写后 `713bea9a`,树同 c89000f5)建 `~/w7/p7-w5host`、`-DMOBILEGL_BUILD_STAMP=p7w5-c89000f5 -DMOBILEGL_BUILD_TRACE_REPLAY=ON`(apitrace 三方从 pipe 只读复制),制品 `~/w7/logs/p7w5host/host/`(stamp 字符串 1);**P6.5 残余 39 例 DirectGLES TCP 矩阵(WSL client ↔ 手机 server,credit 2,`--require-run-ahead`)已在跑**,产物 `~/w7/logs/p7w1b/matrix5/`。(2) **B3 修复 r2 落地**(pipe `9d5f5012..f4b0662d`):`LOGGED` 锚定 + 字符前缀 + 块回溯停在同缩进 `case`/`break`/`return`、跨过列 0 `#if`(自测 14/14,旧审计 6 个假绿 / 假红被抓)、`run_trace_case.cmake` 的 server 日志 FATAL 挪到 ARMED 之后、inproc 同样 fail-closed(两条 FATAL 行在 `:384`)、pull-library 控制自 P6 日志改名后确实不可达(实测 rc 1)→ 接受 no-client-log 句为证据;门全绿(unit 2434/2435,仍是 `InitialCapsStartup.ANullInitialSnapshot…` 一例在并发负载下红、单跑 3/3 绿——**连续两次门都撞它,列为待修 flake**);fable 审查在跑。(3) **V1 修复轮落地**(pipe `ca8cbe5c..0bc59ab2`,Agent 通道):`MGPipeNeutralReadPixelsPack()` 共享函数、read hook 在 `CopyField` 后与中性 pack 覆盖后各施加一次 corrupt + `VerifySplitReadCorrupted.` 双后端控制(server 半边 3/2 行 `where=read`,client 半边 0;撤掉 → 2/2 红)、poison 控制断言 server 半边、武装证明改逐条双向普查 + 56 名具名例外表(5 类,gtest skip 不入表)、车道日志先留副本再跑控制、契约 §6/§8 措辞(§8 的检查点句保留)、§12 spawn-verify 一行并入;包树 verify-split 1072 / verify 1138。(4) **B2 r3 落地**(fable,pipe `6f1c6d26..11edc8e3`):skip 门改 `!IsSplitLane() && !PeekSplitRuntime().transportResolved`(`Full.` 三臂由 Skipped 变 Passed、`VerifySplit.` 在 verify 构建上 Passed、monolith 仍 Skipped)、pre-pass 不再排除默认 draw framebuffer(`isWriteTarget=false` 解析两侧;red-once:恢复排除 → `MsFlip.` split/spawn 读到红/绿而非蓝)、新腿 MSAA→窗口 `COLOR\|DEPTH` 2× 缩放、§6 项 8–10(A/B/C 域外债);门 `v1fb2r3` + 两份 fable 审查在跑。 | 等三份审查 + 门 → 推送;F 修复轮、M2 在跑;矩阵结果入 `notes/p65/`(窗口 1b)。 | `wire_declines_audit.py`、`run_trace_case.cmake`、`PipeFill.cpp`、`WireFramebuffer.inc`、`~/w7/logs/p7w1b/matrix5/` |
| ID-P7-41 | 2026-09-22 | **M2 到集成树;三份审查 land with fixes;窗口 1b 的真相是配对窗口。** (1) **V1 修复轮 + B2 r3 门全绿**(pipe:unit 2435 / split 304 / spawn 220 / tcp 223 / magma 97 / 76 / 71 / full 535,verify 构建 unit 2435 / integration-verify **1142** / integration-verify-split **1076**,OpenRA split 回放 0 unsound)。(2) **B3 修复 r2 审查 = land with fixes**(fable):审计跨过 `#endif` 会接受被 `#if 0` 编译掉的日志、缩进的 `#else` 不停走(两处潜在假绿,树上无实例)、注记 B4 句的两个行号是包树号、`stub_ctest.sh` 模式位被翻、`EVIDENCE` 空模式的保护 → **B3 修复 r3 派 fable**。(3) **B2 r3 审查 = land with fixes**(fable):窗口腿的底色与用户 FBO 相同(蓝 / 0.5),读错面也会过——改成独一无二的底色;`IsSplitLane()` 合取项在可达状态下恒为死代码;三处行号已陈旧 → 改按符号引用 → **B2 r4 派 fable**(第四轮,只有测试与文档)。(4) **M2 落地**(pipe `b81a8827..7d131527`,含集成提交):孤儿 wire store 在 defer 路径上回收(`lastUseSerial==0` 立刻、park 时的 submit index 完成后、渲染器空闲时),`MOBILEGL_IPC_WIRE_DEFERRED_MB` 水位线(默认 64,0 关)+ 1,024 个 store 的计数上限触发 `WaitForSubmitIndex` 同步、失败走既有 `Fatal{ResourceUnavailable,"buffer-write-sync"}`(census 79 不变);`ServerSpawn.cpp` 的环境清洗按名放行该旋钮(分区外,**集成者按 §9 接受**,理由:不放行则 spawn server 看不到设置,实测 47 MiB 对 8 MiB 预算零同步);server 发布 `wbuf[wbufs wlivepk wdefpk wdefsync]` 四个 PipeStats 计量;`MagmaWireReclaimScenario` 三例 split+spawn(tcp fixture 拿不到 server 环境与私有日志 → 并入 `MAGMA_SERVER_ENV_KNOB_NO_TCP`,一例一 tail,共十条)。主机(lavapipe,M1 harness):bsl-esc-menu-854 spawn server 峰值 825 → **546 MiB**、映射 41k → **5.8k**、活 VkBuffer 25,935 → ~1,053 稳态;inproc 1175 → 894 MiB;ssim 不变;red-once:1,024 次无 draw 的 respecify 活峰 1025 vs 4、48 轮 1 MiB parked 49 MB vs 9 MB、旋钮 0 复现红数。**新发现**:M1 把映射增长归给 VkBuffer 是错的——字节上限单独生效时 VkBuffer 降到 32 而映射不动,增长是 4 KiB `memfd:allocation` = lavapipe 的 descriptor set(27,377 对 28,134 映射):wire 臂在长帧内不断分配新 descriptor set(`UniformManager` 只在 `BeginFrame` / drain 时回卷),今天只靠 M2 的强制同步带来的 drain 约束着;Adreno 上它们在驱动堆里,是手机 scudo 死亡的强嫌疑 → **M3 包**(`UniformManager.cpp` / `VulkanRenderer.cpp`,B4 之后或并入)。集成时的教训:pick 脚本的解析步骤失败后仍 `--continue` 把带冲突标记的文件提交了一次(未推),已 reset 重做并让脚本 fail-closed。M2 门 + fable 审查在跑。(5) **窗口 1b**:手机 supervisor 起来后,单例 OpenRA 过(run-ahead ARMED,12.7 s),但 39 例循环全部 0.3 s 失败,手机侧每个 child `exit=67` + 「only 1 of 2 connections arrived within 250 ms」——**就是 PH-7 (4) 的配对窗口,在直连 LAN 上同样触发**(不只是 adb forward);逐例 3 s 间隔时会话能起来,于是改用逐例分步驱动跑两遍(第二遍只跑失败例,逐例抓 logcat),产物 `~/w7/logs/p7w1b/paced/`。前三例已见:startup 过;OpenRA 一次过一次 `Fatal{ReadbackDeclined,"ReadPixels"}`(**设备上 DirectGLES server 拒了 ReadPixels,主机从未出现**);main-menu 在 48 s 时 server 进程死亡(`DEVICE LOST` → `Fatal{UncarriedInitialBytes}`)。这些是窗口 1b 要收的读数;配对窗口本身由 F 的 `DataBind` 消除,p7w6 部署后重跑一遍作对照。 | M2 门 + 审查 → 推送;矩阵两遍跑完 → `notes/p65/` 窗口 1b 报告 + ID;M3(descriptor set)待派;F 修复轮、B3 r3、B2 r4、V1 修复审查在跑。 | `VkBufferManager.{h,cpp}`、`ServerSpawn.cpp`、`PipeStats.h`、`MagmaWireReclaimScenario.cpp`、`~/w7/logs/p7w1b/paced/` |
| ID-P7-42 | 2026-09-22 | **M2 门全绿;F 修复轮落地且门全绿;B3 r3 / B2 r4 到集成树;V1 修复轮审查 = land with fixes。** (1) **M2 门**(pipe):G1 恒等、census 79、棘轮 173、parity 0(十条 tail)、unit 2434 / 2435(同一 flake)、split 304 / spawn 220 / tcp 223、magma **100 / 79 / 71**(+3 `Reclaim.` 于 split 与 spawn)、full **538**、verify 构建 unit 2435 / integration-verify **1148** / integration-verify-split **1082**、OpenRA split 回放 0 unsound;fable 审查在跑。(2) **F 修复轮落地**(pipe `0293aebb..9cea5140`):child 在 `Accept()` 后关掉 hand-off 端 + `SendFd` `MSG_DONTWAIT`(base:12 条多余 DataBind 挂起、supervisor 卡在 `sendmsg`;后:12 条全部 `Refuse{Authentication} "could not be handed to the live session"`,新控制连接得 `Refuse{Busy}`)、listener 绑定后关(第二个 client 立即 ECONNREFUSED)、`scripts/ci/protocol_revision_pin.py` + `protocol_revision_pins.json` 把 `sha256(protocol.fbs)` 钉到 `MOBILEGL_PROTOCOL_CONTROL_REVISION`(改 schema 不 bump 即红;ctest `ProtocolSchema.RevisionPinsDigest` + `flatc-check` 作业步骤)、令牌比较定宽 64 字节、超额 Hello 请求记一条 `MGLOG_W`、`MintNonce` 失败先回 `Refuse{LinkTerms}`、垃圾首帧回 `Refuse{MalformedHello}`;文档:指纹拒绝是单向的(旧 server + 新 client = `no Welcome … (rc=6)`,即手机未重部署的症状)、unix 配对窗口与 SELinux 假设、两处 pre-auth 暴露 → §12(集成时 F 那条 §12 的「互拒」句已改正);门:unit **2436** / split 304 / spawn 220 / tcp 223 / magma 100 / 79 / 71 / full 538 / verify 1148 / 1082 全绿、G1 恒等;fable 审查在跑。(3) **V1 修复轮审查 = land with fixes**(fable):read 侧控制只要求一行——`savedPack` 经访问器读取已在中性窗口内,第一块 corrupt 单独就能红,第二块(backend read)无反证 → 断言 ≥ 2 行;「client 半边 0 行」的原因不是入口比对不报而是 **client 日志在退出时被截断**(`Debug::Close()` 后静态 `~VerifyState` 记摘要,`WriteToFile` 重开文件 "w"——既有缺陷,波及所有 `FATAL=0` 产物)→ **V1 修复 r2 派 fable**(verify 侧在 Close 之前 flush 摘要,不动 `Log.cpp` 以守 G1)。(4) **B3 r3 与 B2 r4 到集成树**(pipe `bd849b28..4b96f55d`):审计跨 `#endif` 只对整行 `#if MOBILEGL_BUILD_DISAGGREGATED` 放行、任意缩进的 `#else`/`#elif` 停走(16/16 夹具)、tcp 检查信息带 `MOBILEGL_IPC_CONTROL`、`EVIDENCE` 空模式保护、`stub_ctest.sh` 模式位恢复;B2:窗口腿底色改品红 / 0.625(读错面时三臂全红,已演示)、去掉死合取项、§6 按符号引用;门在跑。**V1 审查第 5 条(落地数字)**:契约 §6 与状态页改用 pipe 的 verify 构建读数(1148 / 1082),note 的表保留包树数字并标注。 | M2 + F 修复审查回 → 推送(含 B3 r3 / B2 r4);X2(`InitialCapsStartup` flake)、V1 修复 r2 在跑;窗口 1b 矩阵在跑。 | `ServerMain.cpp`、`FdPassing.cpp`、`protocol_revision_pin.py`、`wire_declines_audit.py`、`DepthStencilReadbackMatrixScenario.cpp` |
| ID-P7-43 | 2026-09-22 | **M2 审查 = land with fixes,含一条 must-fix;集成者会话收尾并交接。** M2 审查(fable):**must-fix** = 中帧 use-after-free 的新可达点——M2 让孤儿 wire store 在帧中被销毁,而 `UniformManager` 的 `FastRebindMemo` 按裸 `VkBuffer` 句柄命中、descriptor-reuse memo 的签名混入 `VkDescriptorBufferInfo` 字词,二者都不看 epoch;句柄被堆复用后同一 program 的下一次 draw 命中旧 descriptor set → 静默错 UBO / SSBO 字节、无 Fatal(base 上 wire store 只在 `BeginFrame`/drain 死,与 memo 清空配对,M2 打破了配对)。修法 ~10 行:`VkBufferManager` 的 `m_wireStoreDestroyEpoch` 在每条销毁路径上自增,`UniformManager` 的两个 memo 带上 / 混入它(disagg 守卫内)——在 M2 分区之外,**集成者按 §9 批准例外**,已派 **M2 r2**(fable);同轮:note §0 引用改 pipe SHA、`VkBufferManager.h` 的「floor 非证明」去掉过期理由、case 3 单侧断言补 `ASSERT_GE`、「never decreases」注释、`RespecifyWireBuffer` 清 `lastUseSubmitIndex`、`ServerSpawn.cpp` 清洗名单补 `SpinUs/ServerAffinity/Audit`。审查确认:提前释放的三个条件健全(每条把 store 交给 GPU 的路径都打 `lastUseSerial`;park tag ≥ B3 的 `lastUseSubmitIndex`;`IsSubmitIndexComplete` 拒绝未提交索引;空闲判定真)、水位线同线程无跨线程等待、失败漏斗同族一处 abort、计量 / 配置全在 push / disagg 守卫内、descriptor-set 归因成立(VMA 子分配,M1 的「一 VkBuffer 一 memfd」不可能)。**用户令收尾**:让在跑的 agent 跑完并把报告写到 `~/w7/notes/handoff/`,机械未完项写进 [`HANDOFF-2026-09-22.md`](HANDOFF-2026-09-22.md)(M2 r2 落地 → p7w6 + 手机 server 重部署 → bsl 验收 / 窗口 1b 对照 / 门 3 终局 → M3 → B4 → F2 → wave 3 棘轮 88 → wave 4 CTS AFTER → wave 5),交给其他 agent。 | 推送集成树头(门全绿;M2 的 must-fix 由 M2 r2 关闭,在此之前 wire 臂有一处已知可达的 memo ABA)。 | `UniformManager.{h,cpp}`、`VkBufferManager.{h,cpp}`、`HANDOFF-2026-09-22.md` |
| ID-P7-19 | 2026-09-22 | OpenRA 真机分歧改判为 **wire 臂的 GPU 时序竞态**(冷驱动缓存 = 慢 pipeline 创建 → 最终帧回读在最后几批 draw 完成前采样),归 wave 2-B 第 0 片;主机 red-once 用 pipeline 创建延迟旋钮复现;真机验收 = 三次 `pm clear` 冷跑 1.0。F1 保留(机制正确)但不再被当作分歧原因。 | E7:`pm clear` 三遍 0.976493989 / 14658 逐字相同、热跑 1.0、冷 monolith 1.0、`FRAMESINFLIGHT=1` 一绿一红;两臂 client/server 日志逐行相同;diff 只缺最后画的对象。 | `WireFramebuffer.inc`、`VulkanRenderer.cpp`、`F1-verify/README.md` |