diff --git a/MobileGL/MG_Remote/CONTRACT-P7.md b/MobileGL/MG_Remote/CONTRACT-P7.md index a67ee48e..4bf22cf3 100644 --- a/MobileGL/MG_Remote/CONTRACT-P7.md +++ b/MobileGL/MG_Remote/CONTRACT-P7.md @@ -102,7 +102,7 @@ P7 收官 = 五道出口门同时成立(§2–§7),而不是路线图 P7 ## §6 出口门 2:verify 零分歧 -verify **在 wave 3 之前**只在 monolith 臂注册(`MG_IntegrationTest/CMakeLists.txt` 的 `if (MOBILEGL_PIPE_VERIFY)` 块,约 `:1715` 起;写这一句时抄的 `:1684-1760` 是错的行段);wave 3 V1 起同一文件的 `if (MOBILEGL_BUILD_DISAGGREGATED AND MOBILEGL_PIPE_VERIFY)` 块把整套用例在 split(inproc) 臂上也注册了一遍,所以这句只是门 2 的**起点**记录,不是现状。门 2 = **verify × {monolith, split(inproc)} × Magma 零分歧**,且两条既有负控(`VERIFY_CORRUPT`、`POISON_OMIT`)在 split 臂上各红一次。前置债:verify+split 撞旧 `PipeRespecifyScope` 断言(`notes/p65/validation-status.md:118`)——放宽为「按 level 的 producer 各自覆盖其宣告范围」,正反单测各一。trace 侧:8 个 verify case × DirectVulkan × inproc 一轮,分歧计数 0。**状态(wave 3 V1,`p7/verify-split`,`notes/p7/verify-split.md`)**:前置债已清(`70f86064`),`integration-verify-split` 双后端 1072/1072 绿、两条负控在 split 臂上各红一次(POISON_OMIT 用 split 臂自己的 `ReadPixels:GetPixelStoreParameters` 配对)、trace 侧 8 case 分歧 0,门 2 在主机上成立;唯一的真实分歧是 server `read_pixels` 的 ID-49 中性 pack 窗口,按预言而非规则处理,spawn 不在门内也无法测(比对器是同进程仪器)。 +verify **在 wave 3 之前**只在 monolith 臂注册(`MG_IntegrationTest/CMakeLists.txt` 的 `if (MOBILEGL_PIPE_VERIFY)` 块,约 `:1715` 起;写这一句时抄的 `:1684-1760` 是错的行段);wave 3 V1 起同一文件的 `if (MOBILEGL_BUILD_DISAGGREGATED AND MOBILEGL_PIPE_VERIFY)` 块把整套用例在 split(inproc) 臂上也注册了一遍,所以这句只是门 2 的**起点**记录,不是现状。门 2 = **verify × {monolith, split(inproc)} × Magma 零分歧**,且两条既有负控(`VERIFY_CORRUPT`、`POISON_OMIT`)在 split 臂上各红一次。前置债:verify+split 撞旧 `PipeRespecifyScope` 断言(`notes/p65/validation-status.md:118`)——放宽为「按 level 的 producer 各自覆盖其宣告范围」,正反单测各一。trace 侧:8 个 verify case × DirectVulkan × inproc 一轮,分歧计数 0。**状态(wave 3 V1,`p7/verify-split`,`notes/p7/verify-split.md`)**:前置债已清(`70f86064`),`integration-verify-split` 双后端 1082/1082(集成树 verify 构建,M2 之后) 绿、两条负控在 split 臂上各红一次(POISON_OMIT 用 split 臂自己的 `ReadPixels:GetPixelStoreParameters` 配对)、trace 侧 8 case 分歧 0,门 2 在主机上成立;唯一的真实分歧是 server `read_pixels` 的 ID-49 中性 pack 窗口,按预言而非规则处理,spawn 不在门内也无法测(比对器是同进程仪器)。 --- diff --git a/docs/Disaggregated/CURRENT_STAGE_STATUS.md b/docs/Disaggregated/CURRENT_STAGE_STATUS.md index 19e9cb3a..4eea7bae 100644 --- a/docs/Disaggregated/CURRENT_STAGE_STATUS.md +++ b/docs/Disaggregated/CURRENT_STAGE_STATUS.md @@ -4,19 +4,19 @@ **阶段: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` 领先 30 提交(B3 修复 r2、V1 修复轮、B2 r3、**M2**),M2 门 / 审查在跑;**窗口 1b 逐例分步矩阵在跑**(配对窗口在直连 LAN 上同样触发,ID-P7-41)。 +**更新: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)。 ## 1. 出口门总览(CONTRACT-P7 §8 的 9 项分母) | # | 子系统 | 状态 | 证据 | |---|---|---|---| -| 1 | Magma 两进程车道三臂同数绿 | ✅ | `integration-magma-{split,spawn,tcp}` 97 / 76 / 71,full-split 535(pipe,B2 r2 + B3 修复之后;tcp 少 6 = 六个 server 端旋钮条目的具名 parity 例外 `MAGMA_SERVER_ENV_KNOB_NO_TCP`);OpenRA DirectVulkan inproc + spawn 回放 1.000000 且 0 条 `unsound-serial-complete`(每个包的门都跑) | +| 1 | Magma 两进程车道三臂同数绿 | ✅ | `integration-magma-{split,spawn,tcp}` 100 / 79 / 71,full-split 538(pipe,M2 之后;tcp 少 9 = 十条 server 端旋钮 / 计量 tail 的具名 parity 例外 `MAGMA_SERVER_ENV_KNOB_NO_TCP`);OpenRA DirectVulkan inproc + spawn 回放 1.000000 且 0 条 `unsound-serial-complete`(每个包的门都跑) | | 2 | §3.2 六个 `@P7` 退役 | ✅ | A(byte-tail、native-range、对齐 decline)、B(copy-image、default-color-blit、mip 半退役)、B2(multisample shape/aspect)、C(vertex-layout 拆分);树上 `@P7` 拒绝站点 **0** | | 3 | `StateObjectDeathOps` | ✅ | C,`dce9953d..cf7ca59f` | | 4 | 烘焙 (A)(D) + (B′) | ✅ | B 深度 mip 烘焙;B2 disaggregated 构建的 monolith 臂改用烘焙模块 | | 5 | OQ-8 反射归档 `storageBlocks` | ✅ | C | | 6 | OQ-10 `kCapResidentSubData` 按 server 表发布 | ✅ | C | -| 7 | verify × split(门 2) | ✅(修复轮在跑) | V1 落地 pipe:pipe 的 verify 构建上 monolith verify **1140**、`integration-verify-split` **1074**(双后端 inproc,逐条武装证明)全绿;`VERIFY_CORRUPT` 10/10 红、`POISON_OMIT` 2/2 红(split 臂);8 verify trace × DV × inproc 0 分歧;verify 只能 inproc(比对器要求推送态与 GL 上下文同进程);fable 审查 land with fixes(server 侧 read hook 补红、poison 分角色、中性 pack 共享函数、逐条武装证明)→ 修复轮在跑 | +| 7 | verify × split(门 2) | ✅(修复 r2 在跑) | pipe 的 verify 构建:monolith verify **1148**、`integration-verify-split` **1082**(双后端 inproc,逐条武装普查 + 56 名具名例外表)全绿;`VERIFY_CORRUPT` 10/10 红、read 侧控制 server 半边红、`POISON_OMIT` server 半边红(split 臂);8 verify trace × DV × inproc 0 分歧;verify 只能 inproc(比对器要求推送态与 GL 上下文同进程);修复 r2 = read 侧断言 ≥ 2 行 + client 日志退出截断的既有缺陷 | | 8 | 真机 ssim 1.0(门 3,分母 36) | 🔄(M2 已到集成树,等 p7w6 真机) | p7w4:34/36 与 monolith 差 ≤ 0.0005;**OpenRA 已关**(ID-P7-33/34:真因 = wire 臂 frame-serial floor 不健全,B3 修;p7w5 **27/27 golden**,[`W5-verify/`](notes/p7/device-window-1/W5-verify/README.md));**bsl-esc-menu** = server 死 VkBuffer 无界累积(ID-P7-32,**M2** 在修);终局形式(三遍逐位 + spawn 臂同会话)留 p7w6 | | 9 | CTS 五块 AFTER ≤ 0.5 pp(门 5) | ⏳ | `$BASE` 已取(`notes/p7/device-window-1/CTS-base/`);AFTER 在 wave 4 | @@ -45,7 +45,9 @@ | B3 修复轮 | 审计剥注释 / 字面量 + 按块回溯 + `--self-test`、spawn 无 server 日志 FATAL、注记双行 + `WaitForFrameSerial` 债 | `origin@87584d0b`(审查 land with fixes → 修复 r2 在跑,ID-P7-38) | | F 片 1–3 | 常量时间令牌 / ≥16 字节 / 无令牌只 loopback / smoke 进 CI;`Welcome.dataNonce` 绑定(TCP 250 ms 配对窗口消失,指纹变更);PH-8 钳制证明 | `origin@87584d0b`(审查 land with fixes → 修复轮在跑,ID-P7-39) | | E1 | Iris 普查 231/231 全活、70/77 逐字节同、P9 例外表空;§7.2 同名重跑 24 绿 / 3 具名停止 / 0 错答 | `origin@87584d0b`(docs only,ID-P7-38) | -| M2 | 孤儿 wire store 在 defer 路径回收 + `MOBILEGL_IPC_WIRE_DEFERRED_MB` 水位线 + 1,024 计数上限 + `wbuf[]` 计量 + `MagmaWireReclaimScenario`;主机 bsl spawn server 825 → 546 MiB、映射 41k → 5.8k | pipe `b81a8827..7d131527`(门 + 审查在跑,ID-P7-41) | +| M2 | 孤儿 wire store 在 defer 路径回收 + `MOBILEGL_IPC_WIRE_DEFERRED_MB` 水位线 + 1,024 计数上限 + `wbuf[]` 计量 + `MagmaWireReclaimScenario`;主机 bsl spawn server 825 → 546 MiB、映射 41k → 5.8k | pipe `b81a8827..7d131527`(门全绿 magma 100 / 79 / 71,审查在跑,ID-P7-42) | +| F 修复轮 | hand-off 端绑定后关 + `MSG_DONTWAIT`(多余 DataBind 具名拒绝)、listener 绑定后关、`sha256(protocol.fbs)` 钉到控制修订、定宽令牌比较、超额 Hello 记警、`MalformedHello`、文档更正 | pipe `0293aebb..9cea5140`(门全绿,审查在跑,ID-P7-42) | +| B3 修复 r3 + B2 r4 | 审计跨 `#endif` 只放行 disagg 守卫 + 缩进 `#else` 停走(16/16)、`EVIDENCE` 保护、tcp 信息;窗口腿独一底色、去死合取项、按符号引用 | pipe `bd849b28..4b96f55d`(门在跑,ID-P7-42) | ## 3. 真机(Redmi 2f7cbe2e,Adreno 830) @@ -61,10 +63,11 @@ | 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) | -| B3 修复 r3(fable) | 审计 `#endif` 只对 disagg 守卫放行、缩进 `#else` 停走、注记行号、模式位、`EVIDENCE` 保护 | 进行中(ID-P7-41) | -| B2 r4(fable) | 窗口腿独一无二的底色 + 错面演示、去掉死合取项、按符号引用 | 进行中(ID-P7-41) | +| 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) | child 绑定后关 hand-off 端 + `MSG_DONTWAIT`(后续 DataBind 具名拒绝而非挂起)、listener 绑定后关、`protocol.fbs` 摘要 pin、旧 server + 新 client 症状写明、unix 配对 §12 债、nit ×6 | 进行中(ID-P7-39) | +| F 修复轮审查(fable) | hand-off 关闭的竞态窗口、listener 关闭的路径、摘要 pin 的 LF 归一化、`MalformedHello` 词表、G14 的 `CapsMirrorTest` 一名 | 进行中;代码已在 pipe(ID-P7-42) | ## 5. 下一步(按序) diff --git a/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md b/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md index de4e01b4..e277b8c3 100644 --- a/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md +++ b/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md @@ -44,4 +44,5 @@ | ID-P7-39 | 2026-09-22 | **推送 `origin@87584d0b`**(自 `3c80cd62` 起 42 提交、0 尾注):B2 返工 r1 + r2、B3 返工 + 修复轮、V1、F 片 1–3、E1 与文档全部上远端;四份 fable 审查均 land with fixes,修复轮作为后续提交。**F 审查 = land with fixes**(fable):should-fix 5——(1) **回归**:会话绑定 data 连接后 supervisor 仍把后续每个 `DataBind` 连接经 socketpair 转给不再读取的 child:对端得不到具名拒绝(base 是 `Refuse{Busy}`)、连接被挂到会话结束,队列满(`net.unix.max_dgram_qlen`,手机默认 10)后 supervisor 阻塞在 `sendmsg`、不再 accept / 拒绝 / 收尸 → child 在 `Accept()` 后关掉自己的 hand-off 端 + `MSG_DONTWAIT`,让既有的 `Refuse{Authentication} "could not be handed to the live session"` 具名触发;(2) 指纹 pin 单边——`MOBILEGL_PROTOCOL_CONTROL_REVISION` 与 `protocol.fbs` 内容无绑定 → 以 `sha256(protocol.fbs)` 表 pin;(3) 文档:「旧 server 与新 client 按指纹互拒」只对新 server + 旧 client 成立,旧 server + 新 client 是 `AcceptPair` 等第二条连接 2000 ms 后关闭、client 见 `no Welcome … TRANSPORT_CLOSED`——正是手机未重部署时的症状,要写明;(4) 非 `--serve` TCP 的 listener 绑定后不关,第二个 client 挂满 20 s 连接预算而非 ECONNREFUSED;(5) unix 端点保留到达顺序配对,「只有本 app 能到」依赖 SELinux 而未陈述 → §12 记债;nit 6(常量时间比较循环上界是 secret 长度、≥16 字节只在 TCP、PH-8 实为「忽略、按 server 定尺寸」而非钳制、`MintNonce` 失败裸关、垃圾首帧记成 `Refuse{Busy}`、示例 `devtoken` 8 字节现在会 exit 72);注:CI 接线真实、smoke 不能空过、nonce 路径逐项核过、片 4–6 缺席不使片 1–3 不安全(两处 pre-auth 暴露为既有:fork-per-connection 10 s Hello 等待、`ValidatePeerHandshake` 先于令牌把指纹 / build stamp 给未认证对端 → F2 §12)→ **F 修复轮派 fable**。 | 下一次推送带四个修复轮;p7w6 APK 等 M2 + F 修复轮(指纹变更 → 手机 server 重部署)。 | `ServerMain.cpp`、`FdPassing.cpp`、`mg_protocol_base.h`、`ph-f.md` | | 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-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` |