[docs, MG_Backend] (P7): record W6 device evidence and land M3 on review

This commit is contained in:
2026-09-23 01:59:32 -04:00
parent 9fd768d493
commit 3ce5b9913e
10 changed files with 67 additions and 33 deletions
@@ -13584,7 +13584,7 @@ void main() {
// A set cannot be rewritten while a recorded or submitted command
// buffer might still read it. This wire-only boundary first submits
// the current recording, then waits for that exact submit index.
// the current recording, then idles the graphics queue before reuse.
if (HasPendingRecordedWork() && !FlushPendingCommands())
MagmaWireFatal("descriptor-rewind-flush");
const Uint64 through = m_submitCounter;
+2 -1
View File
@@ -109,7 +109,7 @@ verify **在 wave 3 之前**只在 monolith 臂注册(`MG_IntegrationTest/CMak
## §7 出口门 3 与 5:真机与 CTS
**7.1 门 3 分母(ID-P7-4,设备窗口 #1 E0a 补正)。** `trace_cases.json` 的 CI split 子集(39)× DirectVulkan × `--use-pbuffer`,排除**在 monolith 臂上就红的 case**——它们按定义不是分离缺陷:`create-indirect`(OQ-17:`dev@81b17c0b` 起在 Adreno 830 上就坏)、`minecraft-1.21.11-main-menu`(trace 自身 UBO offset 不满足本机 32 字节对齐,`notes/p65/mainmenu-trace-difference.md`)、`minecraft-1.21.4-fabric-iris-photon-v1.3b-in-world`(Adreno 830 的 `vkCreateGraphicsPipelines` 对 photon 程序返回 `VK_ERROR_UNKNOWN`,`Renderer/PipelineFactory.cpp:660`,monolith SSIM 0.0089;桌面 lavapipe 绿;按 OQ-17 先例归 `dev` 侧独立条目);rd12 in-world 不在 `--matrix` 里。**分母 = 36**。`iterationrp` 带 `apk.yml:460-462` 的三个 Magma 旋钮。排除表随每次窗口更新于 `notes/p7/device-window-<n>/E0-attribution/exclusions.md`。
**7.2 门 3 判据(逐 case 对 monolith 臂,不是对 golden 的平 1.0)。** E0a 实测 monolith × DirectVulkan 对 golden 的 SSIM 在 0.996–1.000(iris 光影 case 最低 0.99617),只有 OpenRA 是 1.000000——golden 来自桌面,阈值吸收驱动差。所以门 3 = 同一 reboot-clean 会话内,对分母中每个 case:inproc **与** spawn(或 tcp)三遍**逐位相同**(零翻转),且每遍 `ssim vs golden` ≥ 该 case 阈值 **且与 monolith 臂同会话读数之差 ≤ 0.0005**(OpenRA 两臂都必须 1.000000、mismatch 0);`RUN_AHEAD=0` 对照臂一遍记录。证据目录 `docs/Disaggregated/notes/p7/device-window-<n>/`。定位实验顺序 E0–E6 见计划 §3 wave 1。**状态(W4,p7w4 = `ae3f43ab`,ID-P7-25)**:inproc 一遍 34/36 与 monolith 差 ≤ 0.0005;OpenRA 是与温度无关的约 50% 竞态(两张图,lockstep 第三张),验收改为 run-ahead 与 lockstep 各 6 遍全等 golden;bsl-esc-menu inproc OOM 待 spawn 臂。**状态(W5,p7w5 = `713bea9a`,ID-P7-34)**:OpenRA **27/27 golden**(inproc/spawn × run-ahead/lockstep × 冷/热 + FIF=8 + dump-armed)——项关闭;余 bsl-esc-menu(M2)与终局形式(p7w6:分母 36 三遍逐位 + spawn 臂同会话)。
**7.2 门 3 判据(逐 case 对 monolith 臂,不是对 golden 的平 1.0)。** E0a 实测 monolith × DirectVulkan 对 golden 的 SSIM 在 0.996–1.000(iris 光影 case 最低 0.99617),只有 OpenRA 是 1.000000——golden 来自桌面,阈值吸收驱动差。所以门 3 = 同一 reboot-clean 会话内,对分母中每个 case:inproc **与** spawn(或 tcp)三遍**逐位相同**(零翻转),且每遍 `ssim vs golden` ≥ 该 case 阈值 **且与 monolith 臂同会话读数之差 ≤ 0.0005**(OpenRA 两臂都必须 1.000000、mismatch 0);`RUN_AHEAD=0` 对照臂一遍记录。证据目录 `docs/Disaggregated/notes/p7/device-window-<n>/`。定位实验顺序 E0–E6 见计划 §3 wave 1。**状态(W4,p7w4 = `ae3f43ab`,ID-P7-25)**:inproc 一遍 34/36 与 monolith 差 ≤ 0.0005;OpenRA 是与温度无关的约 50% 竞态(两张图,lockstep 第三张),验收改为 run-ahead 与 lockstep 各 6 遍全等 golden;bsl-esc-menu inproc OOM 待 spawn 臂。**状态(W5,p7w5 = `713bea9a`,ID-P7-34)**:OpenRA **27/27 golden**(inproc/spawn × run-ahead/lockstep × 冷/热 + FIF=8 + dump-armed)——项关闭;余 bsl-esc-menu(M2)与终局形式(p7w6:分母 36 三遍逐位 + spawn 臂同会话)。**状态(W6,p7w6 = `0e16ca27`,ID-P7-49)**:bsl-esc-menu inproc/spawn 各三遍 6/6,实际图像六张逐位相同且与 E0a monolith SHA 相同,M2 的设备正确性项关闭;36 例的终局三遍及同会话 monolith 对照仍待跑。W6 APK 在 M3 之前构建,不能代替 M3 后的设备回归。
**7.3 门 5。** 块与 caselist(`tools/cts/caselists/`,取自 VK-GL-CTS `0b04c470e`,即设备上 glcts 的源):`KHR-GL46.texture_*`(1055)、`KHR-GL46.shader_image*`(125)、`KHR-GL46.packed_pixels`(4732)、`KHR-GL46.direct_state_access.*`(371)、**UBO 在 KHR 包里没有专属组**——取 GTF 模块 `GTF-GL46.gtf31.GL3Tests.uniform_buffer_object*`(90,设备 glcts 若未含 GTF 则该块记 unrun)、另加 `KHR-GL46.shader_storage_buffer_object`(124,簇 A 的 unaligned / native-range 拒绝实际打的是 SSBO range)。`KHR-GL46` 在 Android 跑器上未证实可开 4.6 core context:窗口先探针;不行则 `$BASE` 与 AFTER 都用 `gl33` 变体(texture 868 / packed_pixels 4732 / ubo 90;GL 3.3 无 shader image、无 DSA),**同一 API 版本比 0.5 pp**。先 monolith × DirectVulkan 基线入库 `tools/cts/baselines/`,迁移落地后 inproc × DirectVulkan 比对:每块 pass 率差 ≤ 0.5 pp(Pass/(Pass+Fail),NS 不入分母),**新增 crash = 0 单独硬红**。完整 caselist(~56k)在合 `dev` 前跑,不在关键路径。
---
@@ -175,4 +175,5 @@ verify **在 wave 3 之前**只在 monolith 臂注册(`MG_IntegrationTest/CMak
- **F 片 1–3 之后(`notes/p7/ph-f.md` §4,ID-P7-37)**:`wireFingerprint` 随 `Welcome.dataNonce` / `DataBind` 变更(`0x7d4470f241d23539` → `0x03c4c293a54b3e08`),新 server 对旧 client 回 `Refuse{WireFingerprint}`,旧 server 对新 client **没有 Refuse 帧**(旧 `AcceptPair` 等第二条连接 2000 ms 后关闭,client 只见 `no Welcome … (rc=6)`)——设备上的 server 必须随下一个 APK 重部署;D11 五处 + PH-2、PH-6、PH-1 (3)(4)、PH-7 (5)(fork 前认证)未做,前置是一个能向 spawn / TCP server 投递畸形记录的对端字节驱动(fuzz 臂 2 的第一块),包 **F2**。
- **F 修复轮之后的两条小债(集成者审查,ID-P7-44)**:`ServerMain.cpp` `RunSession` 在 `Accept()` 返回到 `close(sourceFd)` 之间,supervisor 已转发的一条 DataBind 随 child 队列关闭而得不到具名拒绝(微秒级窗口);`protocol_revision_pin.py` 对 `protocol.fbs` 的注释 / 空白改动同样要求 bump(严格、有意)。
- **M2 r2 的代价(集成者审查,ID-P7-46)**:wire store 的 destroy epoch 进了 `UniformManager` 的两个 descriptor memo,所以每次销毁事件之后同 program 的第一笔 draw 多一次 descriptor set 分配 + 写(bsl 整跑 ~2.6 万次销毁 / 130 万次调用),并把 §6.1 的长帧内 descriptor set 增长每事件多推一个 set——这是 M3 的分母,不是新债;`ServerSpawn.cpp` 放行名单(`WIRE_DEFERRED_MB` / `SPIN_US` / `SERVER_AFFINITY` / `AUDIT`)之外的 `MOBILEGL_IPC_*` 仍被清洗,都是协议形状(双方必须一致)或 client 读的值,不记债。
- **M3 长帧 descriptor 游标(ID-P7-50)**:M2 r2 上述额外 descriptor 写入的增长已由 M3 的 2048 Acquire 边界回卷约束;证明在 graphics queue idle 后才重写 set,避免依赖 B4 尚未修的单 fence 退休。主机 bsl 确有一次回卷(缓存总数 3555 是多个 layout 的历史集合,2048 是单 epoch Acquire 上限,不是进程全局缓存上限)。queue idle stall 是性能记录项;M3 后 APK 的真机回归仍待取。
- **Ph 簇 F 的两处预认证暴露**(wave 2-F 之前就在树上,F 修复轮审查核实,归 PH-7 (5)「有界的预认证工作 + 失败退避」,P7 之后):(a) TCP supervisor 对每条连接**先 fork 再读 Hello**(`ServerMain.cpp` `RunSession`),未认证对端每连接可让 server 付出一次 fork + 最长 10 s 的 Hello 等待;(b) `ValidatePeerHandshake` 在 `AuthenticatePeerToken` **之前**跑,`Refuse{ProtocolVersion|WireFingerprint|BuildFingerprint}` 把本端 wire 指纹与 build stamp 送给了未认证的对端。同一轮记下的本地对端债:unix 端点仍按到达顺序配对(`AcceptPair` 250 ms / 2000 ms 窗口),抽象命名空间套接字没有 mode bits,「只有本 app 能连」靠 SELinux 域隔离而非传输层。**指纹不对称**(§10 第 3 条的 `wireFingerprint` 变化):新 server 对旧 client 回 `Refuse{WireFingerprint}`;旧 server 对新 client **没有任何 Refuse 帧**——旧 `AcceptPair` 等第二条连接 2000 ms 后关掉两条,client 只看到 `no Welcome ... (rc=6)`,即设备上的 server 未随本次构建重装。细节 `notes/p7/ph-f.md` §2.2 / §6.4。
+19 -27
View File
@@ -4,20 +4,20 @@
**阶段: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 夜(M2 r2 + V1 修复 r2 落地,ID-P7-46/47)** · 交接清单 [`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 + **M2 r2**、F 修复轮、X2、**V1 修复 r2**;门全绿);M2 审查的 must-fix(memo 句柄复用 ABA)**已由 M2 r2 关闭**(ID-P7-46);V1 修复 r2 已落地(ID-P7-47);窗口 1b 矩阵的中期读数与息屏假设见 ID-P7-48。
**更新:2026-09-23(ID-P7-49/50)** · 当前交接 [`notes/p7/HANDOFF-2026-09-23.md`](notes/p7/HANDOFF-2026-09-23.md)。集成树已含 M3(pipe `9fd768d4`,门全绿,审查 land);手机 p7w6 关闭 bsl-esc-menu 设备正确性项,DirectGLES TCP 38 例对照续跑中;门 3 终局与 CTS AFTER 未完成。B4 独立包树是草稿,未落地。
## 1. 出口门总览(CONTRACT-P7 §8 的 9 项分母)
| # | 子系统 | 状态 | 证据 |
|---|---|---|---|
| 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`(每个包的门都跑) |
| 1 | Magma 两进程车道三臂同数绿 | ✅ | M3 集成树门:magma-split/spawn/tcp **102 / 81 / 71**,full-split **540**;OpenRA DirectVulkan inproc + spawn 回放 1.000000、0 unsound |
| 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) | ✅(修复 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 |
| 7 | verify × split(门 2) | ✅ | M3 后 verify 构建 unit 2436、integration-verify **1152**、integration-verify-split **1086**,全绿;负控与 8 verify trace 的既有证据见 V1/V1 r2 |
| 8 | 真机 ssim 1.0(门 3,分母 36) | 🔄 | p7w5 OpenRA 27/27 golden;p7w6 bsl-esc-menu inproc/spawn 6/6,实际图像与 monolith SHA 完全相同([`W6-verify/`](notes/p7/device-window-1/W6-verify/README.md));36 例三遍逐位及同会话对照待跑,M3 后设备回归需新 APK |
| 9 | CTS 五块 AFTER ≤ 0.5 pp(门 5) | ⏳ | `$BASE` 已取(`notes/p7/device-window-1/CTS-base/`);AFTER 在 wave 4 |
**40% 检查点(§8 中点)已过:6/9**,不触发重定基线。G1 全程恒等(pull `.text` `0xa52203`、符号 0/0);census 79 站点 / 0 未标;棘轮 186 → **173**(B2 重基线,余 88 = monolith draw 路径,wave 3)。
@@ -48,36 +48,28 @@
| 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,审查 land with fixes,ID-P7-43);**r2** = memo destroy-epoch,must-fix 关闭:pipe `4d207468..f62703e9` + parity `1ab62ece`(门全绿 magma 101 / 80 / 71,集成者审查 land,ID-P7-46) |
| F 修复轮 | hand-off 端绑定后关 + `MSG_DONTWAIT`(多余 DataBind 具名拒绝)、listener 绑定后关、`sha256(protocol.fbs)` 钉到控制修订、定宽令牌比较、超额 Hello 记警、`MalformedHello`、文档更正 | pipe `0293aebb..9cea5140`(门全绿,集成者审查 land,ID-P7-44) |
| B3 修复 r3 + B2 r4 | 审计跨 `#endif` 只放行 disagg 守卫 + 缩进 `#else` 停走(16/16)、`EVIDENCE` 保护、tcp 信息;窗口腿独一底色、去死合取项、按符号引用 | pipe `bd849b28..4b96f55d`(门全绿,集成者审查 land,ID-P7-44) |
| M3 | 长帧 descriptor set 游标按 queue-idle 证明回卷,2049 SSBO 窗口用例 split/spawn 绿且 red-once 红;包树与 pipe 完整门绿 | pipe `9fd768d4`(ID-P7-50,集成者审查 land) |
## 3. 真机(Redmi 2f7cbe2e,Adreno 830)
- 当前 APK:**p7w5**(`p7w5-713bea9a`,B3+B2+D3 之上)。验收 = OpenRA inproc / spawn × run-ahead / lockstep × 冷 / 热各 3、FIF=8 ×3、dump-armed ×3 → **27/27 `ace2af04` / 1.000000 / 0 px**;iterationt ×2 + 26.3 逐位同 p7w4(ID-P7-34)。
- p7w4 结论([`W4-verify/README.md`](notes/p7/device-window-1/W4-verify/README.md)):OpenRA 是与温度无关的约 50% 竞态、只出三张图;调色板纹理逐字节正确;错像素 100% 落在 call 30376 一次 draw 的 quad 前缀里;机制由裁判裁定并由 B3 计数证实。
- bsl-esc-menu-854:monolith 807 MiB 过,spawn 的 server 1.2 GiB 死(scudo `internal map failure`);M1 归因 = 死 VkBuffer 无界累积(一帧 1.3 M 调用、整跑 2 次 swap);M2 修复中。
- 当前 APK:**p7w6**,stamp `p7w6-0e16ca27`,已重装并重起 TCP supervisor;屏幕常亮设置 `stayon=15`。bsl-esc-menu DirectVulkan × pbuffer inproc/spawn 各三遍 **6/6**,PNG SHA 均与 E0a monolith 相同;OpenRA 的 p7w5 27/27 结论保留。p7w6 在 M3 落地前构建,后续设备回归需新 APK。
- DirectGLES × TCP 窗口 1b 实际分母 38:p7w5 旧批次中断报告 [`window-1b-p7w5.md`](notes/p65/window-1b-p7w5.md);p7w6 用 1900 s 外层上限续跑,日志 `~/w7/logs/p7w6-matrix-resume.log`。旧 p7w6 驱动的两次 900 s 截断是采集器上限,不能算产品红。
- 门 3 终局 36 例三遍与同会话 spawn 尚待手机从 TCP 矩阵释放;CTS `$BASE` 已取,AFTER 尚待。
## 4. 在跑(agent;实现方 `claude-opus-5-5`,审查方 fable)
## 4. 在跑
| 包 | 内容 | 状态 |
|---|---|---|
| B2 r3 审查(fable) | transport 门控的真值域、默认 framebuffer pre-pass 的解析、新腿的读面 | 完成:land with fixes → B2 r4 已落地(ID-P7-44) |
| B3 修复 r2 审查(fable) | 剥注释 / 字面量的边界、块回溯规则、自测覆盖、fail-closed 顺序、pull-library 控制 | 完成:land with fixes → B3 r3 已落地(ID-P7-44) |
| V1 修复轮审查(fable) | read 侧 corrupt 的两次施加、server 半边断言、逐条武装普查的双向性、例外表 5 类 | 完成:land with fixes → V1 修复 r2 已落地(ID-P7-47) |
| M2 r2(fable) | **must-fix**:`m_wireStoreDestroyEpoch` 进 `UniformManager` 两个 memo(§9 例外已批)+ red-once;note SHA、`ASSERT_GE`、注释、`lastUseSubmitIndex` 清零、清洗名单 | **已落地**,集成者审查 land(ID-P7-46) |
| V1 修复 r2(fable) | read 侧控制断言 ≥ 2 行、verify 摘要在 `Close()` 前 flush(client 日志不再被截断)、措辞 | **已落地**,集成者审查 land(ID-P7-47) |
| X2(fable) | `InitialCapsStartup.ANullInitialSnapshot…` 在负载下的 flake:复现、测试 vs 产品判定、修复 + 500 次循环 | **已落地**(test-only;真因 = 夹具按 accept 顺序配对,ID-P7-45) |
| 窗口 1b 矩阵 | 38 例 DirectGLES × TCP(WSL ↔ 手机 p7w5,逐例 3 s 间隔、两遍、逐例 logcat) | 进行中(44 / 78);pass 1 27/39 红,11 例聚在 57–61 s 处对端挂断——手机息屏 60 s 的假设,见 ID-P7-48 |
| 工作 | 状态 |
|---|---|
| p7w6 DirectGLES TCP 38 例对照 | `~/w7/logs/p7w6-matrix-resume.sh` 以 setsid/nohup 续跑,进度 `~/w7/logs/p7w6-matrix-resume.log`;手机服务不可在此期间 force-stop |
| B4 | `~/w7/p7-b4` 独立草稿:聚合等待、长帧 texture prune、AdoptRun extent 修复;目标 Magma 车道与 G1 绿,仍缺聚合等待负控 / 全门 / 复审 |
## 5. 下一步(按序;机械步骤与命令见 [`notes/p7/HANDOFF-2026-09-22.md`](notes/p7/HANDOFF-2026-09-22.md))
## 5. 下一步
1. ~~推送~~ 已推;~~四个修复轮(B2 r3、B3 修复 r2、V1 修复、F 修复)回来 → 各自门 + 复审 → 下一次推送~~ 已落地并推送(ID-P7-44/45/46);V1 修复 r2 已落地并推送(ID-P7-47)。
2. **F2**:D11 五处 + PH-2、PH-6 drop-with-latch、PH-1 (3)(4)、PH-7 (5) fork 前认证——先要一个能向 spawn / TCP server 发畸形记录的对端字节驱动(fuzz 臂 2 的第一块)。
3. ~~M2 门 + 审查绿 → 推送~~ 已推(M2 + r2,ID-P7-46)→ p7w6 APK(**含 F 的 wireFingerprint 变更:手机 server 必须重部署**)→ bsl-esc-menu spawn 臂通过(并重跑窗口 1b 作 `DataBind` 对照)→ **M3**(descriptor set 在长帧内无界,M2 的新发现) → 门 3 分母 36 全部与 monolith 同(三遍逐位相同 + spawn 臂,§7.2)。
4. **B4**:裁判的 `WaitForSubmitsUpTo` 聚合等待(`Present:14094` / `WaitForSubmitIndex` / `WaitForFrameSerial`)+ 裁判点名的 Magma 债(§12)。
5. wave 3 余项:棘轮 88 的 monolith draw 路径 `#if`。~~§7.2 同名重跑、Iris trace 普查~~ **已做(包 E1,主机 lavapipe,基 3c80cd62 = 现 `3c80cd62`)**:Iris 普查 77 行 × {monolith, inproc, spawn} 231 次全活,split 与 monolith 逐字节相同 70 / 77 行(7 行分歧 = Magma monolith draw 路径 vs wire 路径的差异或运行噪声,均在阈值内),P9 例外表为空——`texture-remint-pull` 在头上从未到达([`notes/p7/iris-census-3c80cd62.md`](notes/p7/iris-census-3c80cd62.md));27 个 P5 wrong-answer 同名 24 绿 / 3 具名停止(`PIPE_PUSH=0` 控制臂)/ 0 错答(`MEASUREMENTS.md` §7.2 末)。
6. wave 4:CTS AFTER(inproc × DV 五块 vs `$BASE`,≤ 0.5 pp,新增 crash = 0)、门 3 终局三遍。
7. wave 5:F 余片、fuzz 三臂、P7 收官异模型整体审查(ID-66)。
1. 完成 p7w6 TCP 38 例对照并逐例结案;重跑前两例被错误外层截断的长 trace,ID / §7 记录 DataBind 与息屏结论。
2. 完成门 3:36 例 DirectVulkan × pbuffer × inproc/spawn 三遍逐位、与同会话 monolith 差 ≤0.0005;设备 M3 回归用新 APK。补一次启用 PipeStats 的 bsl 映射峰值与 `wbuf[]`。
3. B4 补聚合等待负控、完整门与集成者复审;F2 字节驱动、D11/PH-2/PH-6/PH-1/PH-7;wave 3 棘轮 88;wave 4 CTS AFTER;wave 5 fuzz 三臂与整体审查。
## 6. 阻塞 / 需要人
- ~~P6.5 残余 39 例 TCP 矩阵(窗口 1b)等 WSL 主机路由~~ **用户已加路由(2026-09-22 夜)**,矩阵在跑(p7w5 stamp 的主机制品 `~/w7/logs/p7w5host/host/` ↔ 手机 p7w5 server,ID-P7-40)。
- 待修 flake:`InitialCapsStartup.ANullInitialSnapshotFailsInsteadOfStartingWithAPlaceholder` 在并发构建负载下的 pipe 门里连续两次红、单跑 3/3 绿(同族 `DelayedTcpSnapshot…` 曾有同样记录)。
- 手机需保持 adb、WSL 路由、前台 Service 与 `stayon=15` 直到 p7w6 TCP 矩阵完成;续跑脚本已脱离当前命令会话。当前无需要用户决策的阻塞。
- X2 已关闭 `InitialCapsStartup` 的测试夹具乱序 flake;不再列为待修。
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
# M3 集成者源码审查(pipe `9fd768d4`,2026-09-23)
**Verdict: land.** 审查对象是集成树源码,不以包 note 代替。`p7/m3` 包提交 `7acad6b8` 已拣为 pipe `9fd768d4`;下述注释措辞的一处小修在本轮文档提交中落地。
1. `MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp:7065` 与 `:7687` 只在 wire draw / compute 的外层入口触发,发生于本次 draw 的资源准备、descriptor 写入之前。触发条件来自 `MobileGL/MG_Backend/DirectVulkan/Renderer/UniformManager.cpp:678` 的当前帧槽实际 Acquire 次数;memo 命中不增加此数,因而不会因重复 draw 无谓地强制等待。
2. `MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp:13580`:尚有当前录制就先 flush;之后 `vkQueueWaitIdle` 覆盖 graphics queue 上所有已提交工作,包括 B4 尚未修复的单 fence 站点可能提前从 tracker 移除的记录;再推进 `through` 并复核无待提交录制。此处在 `m_wirePreparationDepth` 进入前执行,不会回卷本次 draw 尚未录制的 slice。只看 tracker 的聚合 fence 仍有被旧退休站点漏掉记录的风险,因此保守队列等待是本轮必要的完成证明。原注释的“exact submit index”易误读为单 fence 等待,已改为说明 queue idle。
3. `MobileGL/MG_Backend/DirectVulkan/Renderer/UniformManager.cpp:683` 保留每个 layout 的 pool/set,只回卷 cursor;清 descriptor-reuse、fast-rebind、bind-dedup 与 sampler-resolve memo,旧 set 不会被新 draw 的 memo 当作未改写继续命中。image/buffer view 保留到原帧生命周期,避免提前销毁。`OnDescriptorSetLayoutDestroyed` 的逐 pool 释放规则仍在;活 layout 数量自身的增长不属于此游标界。
4. `MobileGL/MG_IntegrationTest/Scenarios/MagmaWireReclaimScenario.cpp:525` 固定一个 SSBO store/layout,在同一帧切 2049 个对齐窗口,不触发 M2 的 orphan-store 上限;两臂最后像素正确,server `retiredSubmit=2 budget=2048 cached=2048`。仅删 draw 入口回卷调用并重建三目标,两臂都在“2049 distinct descriptor writes ... did not rewind”处红;恢复后绿。`MobileGL/MG_IntegrationTest/CMakeLists.txt:3479` 只把它注册到 split/spawn 私有 server 日志车道,`scripts/ci/spawn_lane_parity.py:91` 对 TCP 的例外是精确 tail。
5. 集成树门:pull G1 `.text=0xa52203`、符号 +0/−0;census 79、棘轮 173、parity 0、审计 53/53/0;unit 2436、split 304、spawn 220、tcp 223、magma 102/81/71、full-split 540、verify 1152/1086,全部 0 红。OpenRA inproc / spawn 1.000000、0 Fatal / 0 unsound。主机 bsl-esc-menu inproc / spawn 都是既有 `ssim=0.998402`、306892 mismatch、0 Fatal / 0 unsound;server 实际发出一次 M3 回卷(frame 0、submit 32、budget 2048、缓存 3555),spawn `wbuf[wlivepk=1052 wdefsync=22]`,与 M2 后的数量级一致。
**记录项:** queue idle 在极长帧每 2048 次 descriptor Acquire 后可能加一次 stall,性能按 CONTRACT-P7 的非门规则记录;固定活 layout 的游标增长已界定,多 layout 的缓存总量可高于 2048(bsl 的 3555 是各 layout 历史缓存),不把 2048 误写成进程全局上限。设备 p7w6 的 bsl 验收针对 M2,M3 的下一版 APK 仍要做设备回归。
@@ -1,5 +1,7 @@
# P7 集成交接(2026-09-22 深夜,集成者会话结束态)
> **2026-09-23 更新:**本页是历史快照;最新集成状态与在跑命令见 [`HANDOFF-2026-09-23.md`](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,0 +1,26 @@
# P7 集成交接(2026-09-23,p7w6 矩阵续跑中)
> 从 [`HANDOFF-2026-09-22.md`](HANDOFF-2026-09-22.md) 续接。本页只记录本轮之后的变化;历史裁定仍见 `INTEGRATOR-DECISIONS-P7.md`,债见 `MG_Remote/CONTRACT-P7.md` §12。集成树只在 WSL `~/w7/pipe` 操作 Git;Windows 主 dev 树不可触碰,Windows 侧只用 `MobileGL-disagg` worktree 按 SHA 快进和推送。所有提交不得有 `Co-Authored-By` 尾注。
## 当前树与设备
- WSL pipe:M3 已 cherry-pick 到 `9fd768d4`,G1 / 静态门 / 八车道 / verify / OpenRA 回放全部绿;M3 集成者源码审查为 **land**,见 `docs/Disaggregated/notes/handoff/review-m3.md`。其后有一处只改注释的未提交修正和待同步文档。`origin/feat/disaggregated` 最后已推的头是 `f749d4c3`(APK 归档显式路径修复),**M3 尚未推**。
- 手机 Redmi `2f7cbe2e` 已装 p7w6 APK:stamp `p7w6-0e16ca27`,签名 SHA `45759c30…`,包 `top.mobilegl.plugin.p7w1.trace`;supervisor `0.0.0.0:40613`,token `p7w1b-lan-token-20260922`,`svc power stayon true` 后 `stay_on_while_plugged_in=15` 且 Awake。WSL 路由 `192.168.21.181/32 via 192.168.31.1 dev eth0` 在,手机 Wi-Fi IP 仍是 `192.168.21.181`。该 APK 基于 M3 之前的源码,后续 M3 设备回归须另建下一版。
- p7w6 bsl-esc-menu-854 DirectVulkan × pbuffer:spawn/inproc 各三遍 6/6 过,六张实际图像逐位相同且与旧 monolith SHA 相同,见 `device-window-1/W6-verify/`;本轮没有采集 `wbuf[]` 峰值。主机 M3 之后的 bsl inproc/spawn 均为既有 `ssim=0.998402`、0 Fatal;确有一次 M3 回卷,spawn `wbuf[wlivepk=1052 wdefsync=22]`,日志 `~/w7/logs/p7m3-bslhost/`。
## 正在跑的手机批次
- DirectGLES × TCP 的 38 例:旧 p7w5 批次真实分母 38,第一遍 11/38 绿、第二遍只跑完 13 个就因 adb 断开中止;报告 `docs/Disaggregated/notes/p65/window-1b-p7w5.md`。
- p7w6 第一段 `~/w7/logs/p7w6-matrix/pass1/` 有前九例终局结果(8 绿、`1.21.11-main-menu` 内部约 302 s 超时);`rei-inventory` 与 `xaero-minimap` 被**外层 900 s** 截断,原始日志保留,不是产品判定。续跑脚本 `~/w7/logs/p7w6-matrix-resume.sh` 用外层 1900 s(清单最大 1800 s),跳过已终局结果,产物 `~/w7/logs/p7w6-matrix-resume/pass1/`,进度 `~/w7/logs/p7w6-matrix-resume.log`,由 `p7w6-matrix-launch.sh` 以 setsid/nohup 启动。写本页时正重跑 `rei-inventory`,手机 child 有持续帧进度。若它中断,先确认 adb / supervisor / 路由,再运行 launcher;脚本会跳过已有 `results.json` 的例子。不要同时跑真机 gate3/CTS:`run_android_retrace_local.py` 会 force-stop 同包 Service。
## 包树
- `~/w7/p7-m3`:包提交 `7acad6b8` 已拣到 pipe `9fd768d4`。2048 次 descriptor Acquire 的长帧边界先 flush 当前录制、等 graphics queue idle,再回卷每个 layout cursor 与 memo。2049 个 SSBO 窗口用例 split/spawn 绿;禁用回卷两臂红;pull `.text=0xa52203`、符号 0/0,棘轮 173、parity 0,pipe 完整门 unit 2436 / split 304 / spawn 220 / tcp 223 / magma 102/81/71 / full 540 / verify 1152/1086。review 文本已复制到 `~/w7/notes/handoff/review-m3.md`。集成文档与推送待做。
- `~/w7/p7-b4`:**草稿,未落地**。聚合 fence 等待、frame serial 重扫、Present 槽回收前等待、pre-pass 计入 pending、wire 路径每 256 draw 的 texture prune、`AdoptRun` extent 变更清旧 bytes/coverage。构建、Magma 101/80/71、full 539、OpenRA 两臂、G1、普查/棘轮/parity 绿;`AdoptRun` 单测红一次 / 恢复绿。**仍缺聚合等待的可证伪负控、完整八车道与 verify、pipe 源码审查和与 M3 的 VulkanRenderer 冲突合并**。不要按现有绿数直接推。详情 `docs/Disaggregated/notes/p7/magma-b4.md`(仅包树)。
## 下一步
1. 等 p7w6 的 38 例对照结束,逐例合并两段结果,判断 DataBind 配对与息屏假设;补 `notes/p65/` 报告、ID、CONTRACT-P7 §7。旧驱动的两个外层截断不得计入产品红数。
2. 完成 M3 的 docs / ID / CONTRACT / ROADMAP 同步,`check_doc_citations.py --strict`,Windows worktree `git fetch wslpipe feat/disaggregated` → `git merge --ff-only <pipe-sha>` → `git push origin <pipe-sha>:refs/heads/feat/disaggregated`。只按 SHA;不碰 Windows 主 dev 树。
3. 手机空闲后做门 3 终局:同会话 36 例 × DirectVulkan × pbuffer × inproc/spawn × 3 遍、逐位一致且对 monolith 差 ≤ 0.0005,OpenRA 必须 1.0;`MOBILEGL_TRACE_APK` 显式指向签名 APK(`f749d4c3` 修复归档错 SHA)。再开 `MOBILEGL_PIPE_STATS=1` 专门采一次 bsl maps 峰值与 `wbuf[]`。随后 CTS AFTER 五块与 `$BASE` 比 ≤0.5 pp、新 crash 0。
4. B4 补确定性负控并完整审查、落地;F2 对端畸形记录驱动及 D11/PH-2/PH-6/PH-1/PH-7;wave 3 棘轮余 88;wave 5 fuzz 三臂、异模型整体审查。M3/B4/F2 等落地后须用新 APK 做必要的真机回归,不能把 p7w6 旧二进制的门 3 结果当最终版证明。
@@ -51,4 +51,6 @@
| ID-P7-46 | 2026-09-22 | **M2 r2 落地(集成者本人审查 = land,must-fix 关闭)**:`VkBufferManager::m_wireStoreDestroyEpoch` 在四条销毁 wire store 的路径上自增(`DeferWireRelease` 即时销毁、有销毁的扫描每次一跳、`DestroyAllDeferredWireReleases`、`Shutdown` 清 record 持有的 store),永不复位;`UniformManager` 的 descriptor-reuse 签名 `mix64(epoch)`、`FastRebindMemo` 记录并比对(全在 disagg 守卫内;§9 分区例外已批);第四条 Reclaim 用例(一帧内 orphan → 不等待的 flush → 一条 staged copy 挡住清 memo 的 drain → 下一次停放的扫描销毁 S1 → 64 KiB 经同一句柄值铸造、放不进 1 MiB pin 封住的 256 B 洞 → draw)red-once 两臂读到死 store 的颜色,加守卫后绿。集成者核对:扫描在 `dead == 0` 先返回、不空跳 epoch;`DestroyWireBuffer` 先 move 进 defer 再 erase;文件里其余七处 `buffer.Destroy()` 都是非 wire record;`FastRebindMemo` 聚合初始化顺序与结构体一致。pipe 独有一行:`RespecifyWireBuffer` 顺带清 B3 的 `lastUseSubmitIndex`(`f62703e9`);`spawn_lane_parity.py` 的具名例外表补第四条 tail(`1ab62ece`;包分支按前缀例外、pipe 两次合并后按精确名——门上唯一的一条 parity 红就是它);`ServerSpawn` 放行 `SPIN_US` / `SERVER_AFFINITY` / `AUDIT`。**代价记 §12(M3 的分母)**:每次销毁事件后同 program 第一笔 draw 多一次 descriptor set 分配 + 写(bsl ~2.6 万 / 130 万)。方法学:`MobileGLIntegrationTest` 桌面上静态链接 `MobileGL_s`,Split 臂跑的是编进测试二进制的 backend——red-once 变体必须三个目标都建。 | 门(`f62703e9`):unit 2436、split 304、spawn 220、tcp 223、magma 101 / 80 / 71、full 539、G1 恒等、普查 79、棘轮 173、审计 53/53/0、OpenRA inproc + spawn ssim 1.0 / 0 unsound、verify 1150 / 1084;parity 0(`1ab62ece`);推送。审查文本 `notes/handoff/review-m2-r2.md`。 | `VkBufferManager.{h,cpp}`、`UniformManager.{h,cpp}`、`MagmaWireReclaimScenario.cpp`、`ServerSpawn.cpp`、`spawn_lane_parity.py` |
| ID-P7-47 | 2026-09-22 | **V1 修复 r2 落地(集成者本人审查 = land)**:(1) read 侧负控数到 **2**——server 在 ReadPixels 窗口内读 pack 字段两次(applier 装中性 pack 之前的 saved-pack 读、backend 装后的读),hook 每次读各施加一次扰动(ID-49 的窗口内覆写会抹掉第一次),只认一行的控制对两块扰动都不证伪;`VerifySplitReadCorrupted.` 与 CI 步都要 `where=read` ≥ 2 行;证伪的不对称性已量出(去掉块 2 两后端都掉到 1;去掉块 1 只有 DirectVulkan 掉到 1,DirectGLES 装后读两次仍是 2)→ CI 两后端都要。(2) FATAL=0 的 verify 摘要改由 `DestroyImpl` 在 `Debug::Close()` 之前调 `MGPipeVerifyFlushSummary()` 写出(`#if MOBILEGL_PIPE_VERIFY`):此前命名空间级静态的析构在 `__run_exit_handlers` 里写、`Log.cpp` 以 "w" 重开已关的 sink,于是每个 FATAL=0 的 client 半边只剩摘要一行(121 B;预存缺陷)——现在 7461 / 7386 B,武装行、entry 报告、摘要末行齐全;`FlushSummary` 以 `Summarised` 幂等,从未 Destroy 的进程保留旧臂。(3) 两处引文修正;`CONTRACT-P7` §6 那句与集成树的版本冲突,取树上句子 + 包的改动(去掉 CMake 行号引文,只留守卫)。集成者核对:`CountReadReports` 按行、CI 计数 `grep -c … \|\| true` + `${reads:-0}` 缺文件读 0 即红;两个写者顺序执行故 `Summarised` 不必原子;pull 构建无字节变化。包 note 的车道计数表未改,以本门为准。 | 门(`336174e3`):unit 2436、split 304、spawn 220、tcp 223、magma 101 / 80 / 71、full 539、G1 恒等、普查 79、棘轮 173、parity 0、审计 53/53/0、OpenRA inproc + spawn ssim 1.0 / 0 unsound、verify 1150 / 1084;推送。审查文本 `notes/handoff/review-v1-fix-r2.md`。 | `PipeFill.cpp`、`PipeInputs.h`、`Init.cpp`、`PipeVerifyArmingScenario.cpp`、`test.yml`、`split_log_paths.py` |
| ID-P7-48 | 2026-09-22 | **窗口 1b 配速矩阵的中期读数与假设(未结)。** 44 / 78 例跑完时 pass 1 = 27/39 红:主因是 `DEVICE LOST`(client `mobilegl.client.log`:「the barrier woke on a peer that had hung up」= 对端 TCP 挂断,随后的 `Fatal{UncarriedInitialBytes, "resource_respecify"}` 是 `PipeFill.cpp:1080` 的**下游**判定,不是原因);其中 11 例的失败时长聚在 **57–61 s**(sodium 56.3、xaero-minimap 60.5、journeymap 61.1、modernui 56.9、rei-normal 60.8、…);pass 2 同例已有 3 例转绿(1.17 main-menu、sodium、common-mods),即非确定性。手机侧:`settings get system screen_off_timeout` = **60000**,`dumpsys battery` = AC 供电(`stay_on_while_plugged_in=2` 只对 USB),`am_kill` / `logcat -b crash` 在本轮时段无任何记录,`:mglsrv` 服务进程存活(child 是每例 spawn 的 pid)。**假设**:runner 每例 `wake-adb` 点亮屏幕,~60 s 息屏后 MIUI 的后台策略切断 child 的 TCP(不是 OOM、不是崩溃、不是配对窗口)。**不在本会话改设备状态**(保持两遍数据同口径);下一位先 `adb -s 2f7cbe2e shell svc power stayon true`(或 `settings put system screen_off_timeout 1800000`)再重跑,并把 supervisor 对 child 的 reap 行(`tcp_device_server.py`)纳入每例采集——现在 `phone:` 列只抓 0.5 s 的 logcat。 | 报告待 `=== ALL DONE`:`~/w7/logs/p7w1b/paced.log`、`paced/pass/<case>/`。 | `notes/p65/`(待写) |
| ID-P7-49 | 2026-09-23 | **窗口 1b p7w5 中断批次校正 + p7w6 设备 bsl 验收。** 旧脚本实际挑 38 条 DirectGLES CI case(交接的 39 是误数),pass 1 = 11 绿 / 27 红,其中 23 条 client 记 DEVICE LOST;pass 2 仅 13 条即 adb 从 Windows/WSL 消失,4 转绿、9 仍红。旧脚本同一条 `local` 赋值使两遍写到 `pass/<case>`,13 条第一遍原始文件被覆盖;报告逐例保留摘要能证的事实。p7w6 APK `p7w6-0e16ca27` 已重装并重起 supervisor,`stayon=15`;bsl-esc-menu DirectVulkan pbuffer inproc/spawn 各三遍 6/6,实际 PNG SHA 全同且与旧 monolith 完全相同,0 Fatal。p7w6 主机 TCP OpenRA 冒烟通过;38 例对照续跑中,旧外层 900 s 比 case 清单最大 1800 s 短,`rei-inventory` / `xaero-minimap` 的两次截断不算产品结果,续跑改 1900 s。 | bsl 设备项关闭;门 3 终局形式、p7w6 TCP 对照仍在跑。证据 `notes/p65/window-1b-p7w5.md`、`notes/p7/device-window-1/W6-verify/`。 | `run_android_retrace_local.py` 的显式 APK 路径 `f749d4c3`;手机日志 `~/w7/logs/p7w6-matrix{,-resume}/` |
| ID-P7-50 | 2026-09-23 | **M3 到集成树,集成者本人对 pipe 源码审查 = land。** `UniformManager` 当前 frame slot 每 2048 次 descriptor Acquire,在下一条 wire draw/dispatch 入口先 flush 当前录制、graphics queue idle 证明所有旧 descriptor 读者退休,再回卷每个 layout 游标及四类 memo;不用旧 `WaitForSubmitIndex` 的单 fence 推断。2049 个不同 SSBO 窗口单帧用例 split/spawn 绿(`retiredSubmit=2 cached=2048`),禁用入口回卷两臂按名红,恢复绿。主机 bsl-esc-menu inproc/spawn 均为 M2 后同一 `ssim=0.998402`、0 Fatal;真实触发一次 M3 回卷,spawn `wbuf[wlivepk=1052 wdefsync=22]`。G1 `.text=0xa52203`、符号 0/0、普查 79、棘轮 173、parity 0、审计 53/53/0;pipe 门 unit 2436 / split 304 / spawn 220 / tcp 223 / magma 102/81/71 / full 540 / verify 1152/1086 全绿,OpenRA 两臂 1.0 / 0 unsound。 | M3 源码 `9fd768d4` 已落地,审查 `notes/handoff/review-m3.md`;设备 p7w6 是 M3 前二进制,M3 设备回归待下一版。queue idle 的极长帧 stall 只记性能。 | `UniformManager.{h,cpp}`、`VulkanRenderer.{h,cpp}`、`MagmaWireReclaimScenario.cpp`、`magma-m3.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` |
@@ -8,8 +8,8 @@ DirectVulkan × pbuffer,spawn 与 inproc 各三遍:6/6 replay passed、零 F
本轮前六次回放没有打开 `MOBILEGL_PIPE_STATS`,因此没有 `wbuf[]` 峰值;一次回放后的 server pid 15900 `/proc/<pid>/maps` 为 3595 行、`VmRSS=353484 kB`,**这是结束后的样本,不是峰值**。峰值与 `wbuf[]` 仍待开 stats 的专门一遍采集,不能把这条 3595 当作 M2 的峰值证明。
**归档清单的 APK SHA 有误**:这六遍使用 `MOBILEGL_TRACE_SKIP_INSTALL=1`,由上述已安装 p7w6 包执行,但 `run_android_retrace_local.py` 的 `run.json` 仍对工作树中最新的 `MobileGL-plugin-trace-release-nogit.apk` 求 SHA,记成 `18701603…`;它没有读取设备已安装 APK。原始 `run.json` 保留,不能用其 `apk_sha256` 证明本批身份。之后已把已签名 p7w6 APK复制到 Windows trace/release 输出目录,供后续门 3 回放的归档清单选中;本批身份按安装记录与 APK SHA 交叉核对。
**归档清单的 APK SHA 有误**:这六遍使用 `MOBILEGL_TRACE_SKIP_INSTALL=1`,由上述已安装 p7w6 包执行,但 `run_android_retrace_local.py` 的 `run.json` 仍对工作树中最新的 `MobileGL-plugin-trace-release-nogit.apk` 求 SHA,记成 `18701603…`;它没有读取设备已安装 APK。原始 `run.json` 保留,不能用其 `apk_sha256` 证明本批身份。之后已把已签名 p7w6 APK 复制到 Windows trace/release 输出目录,供后续门 3 回放的归档清单选中;`f749d4c3` 另给跑器增加 `MOBILEGL_TRACE_APK` 显式路径,门 3 将用此项钉住签名 APK。本批身份按安装记录与 APK SHA 交叉核对。
## TCP 对照与终局
手机 supervisor 已用新 APK在 `0.0.0.0:40613` 监听。相同 stamp 的 WSL 主机制品在 `~/w7/logs/p7w6host/host/`,OpenRA × DirectGLES × TCP 冒烟回放通过(14.941 s,run-ahead ARMED);先前一次因本机 bsl 回放强制停掉该包的 Service 而连接失败,重启 supervisor 后通过,属于采集顺序,不是指纹拒绝。p7w6 的 38 例 DirectGLES TCP 对照正在运行,逐例保留 `results.json`、client 日志、完整手机 logcat 与 child reap;门 3 的 36 例 × inproc/spawn × 三遍尚未开始。
手机 supervisor 已用新 APK 在 `0.0.0.0:40613` 监听。相同 stamp 的 WSL 主机制品在 `~/w7/logs/p7w6host/host/`,OpenRA × DirectGLES × TCP 冒烟回放通过(14.941 s,run-ahead ARMED);先前一次因本机 bsl 回放强制停掉该包的 Service 而连接失败,重启 supervisor 后通过,属于采集顺序,不是指纹拒绝。p7w6 的 38 例 DirectGLES TCP 对照正在运行,逐例保留 `results.json`、client 日志、完整手机 logcat 与 child reap;门 3 的 36 例 × inproc/spawn × 三遍尚未开始。
+1 -1
View File
@@ -16,4 +16,4 @@
`MagmaWireReclaimScenario.DescriptorSetsRewindInsideOneLongFrameAfterTheirSubmitRetires` 用一个 SSBO store、一个 program/layout,在一帧内把 2049 个对齐窗口逐个绑定后 draw,M2 的 orphan-store 上限不会触发。最后一个窗口颜色必须正确;server 日志须给出 submit-index 退休后的回卷,回卷时缓存数不超过 2080。禁用入口的回卷调用应红(无回卷行),恢复后 split / spawn 两臂绿。之后跑 G1 `.text` / 符号恒等、普查、棘轮、parity、八车道、OpenRA 回放与 verify 构建。性能只记录。
当前状态:`~/w7/p7-m3` 的完整 `MobileGL` / `MobileGLServer` / `MobileGLIntegrationTest` 构建通过;新用例 split 与 spawn 2/2 绿(各约 1.2 s,server 行均为 `retiredSubmit=2 budget=2048 cached=2048`)。红一次:仅删 draw 入口回卷调用,三目标重建后两臂都在「2049 distinct descriptor writes in one frame did not rewind」处红,像素断言没有先抢红;恢复源码与三目标重建后两臂再绿。原始日志 `~/w7/logs/p7m3/{green-test,red-test,reclaim-test}.log`。最终源码改用 graphics queue idle 作完整提交证明后,完整目标重建并再次全绿:pull G1 `.text=0xa52203`、符号 +0/−0;fatal census 79、棘轮 173、parity 0、wire-declines 审计 53/53/0 与自测 16/16;split 构建 unit 2436、integration-split 304、spawn 220、tcp 223、magma 102/81/71、full-split 540;verify 构建 unit 2436、integration-verify 1152、integration-verify-split 1086;OpenRA DirectVulkan inproc 与 spawn 两臂均 ssim 1.000000、0 `unsound-serial-complete`。门日志在 `~/w7/logs/p7m3/` 与 `~/w7/logs/p7-gate-m3-final-retrace/`。集成者在 pipe 源码上的审查、落地及设备回归仍待做。
当前状态:`~/w7/p7-m3` 的完整 `MobileGL` / `MobileGLServer` / `MobileGLIntegrationTest` 构建通过;新用例 split 与 spawn 2/2 绿(各约 1.2 s,server 行均为 `retiredSubmit=2 budget=2048 cached=2048`)。红一次:仅删 draw 入口回卷调用,三目标重建后两臂都在「2049 distinct descriptor writes in one frame did not rewind」处红,像素断言没有先抢红;恢复源码与三目标重建后两臂再绿。原始日志 `~/w7/logs/p7m3/{green-test,red-test,reclaim-test}.log`。最终源码改用 graphics queue idle 作完整提交证明后,完整目标重建并再次全绿:pull G1 `.text=0xa52203`、符号 +0/−0;fatal census 79、棘轮 173、parity 0、wire-declines 审计 53/53/0 与自测 16/16;split 构建 unit 2436、integration-split 304、spawn 220、tcp 223、magma 102/81/71、full-split 540;verify 构建 unit 2436、integration-verify 1152、integration-verify-split 1086;OpenRA DirectVulkan inproc 与 spawn 两臂均 ssim 1.000000、0 `unsound-serial-complete`。门日志在 `~/w7/logs/p7m3/` 与 `~/w7/logs/p7-gate-m3-final-retrace/`。集成者在 pipe 源码上的审查为 **land**(`notes/handoff/review-m3.md`),已拣入 `9fd768d4`。主机 bsl-esc-menu inproc/spawn 均仍为 M2 后 `ssim=0.998402` / 306892 mismatch、0 Fatal / 0 unsound;确实发出一次 `frame=0 retiredSubmit=32 budget=2048 cached=3555` 回卷,spawn `wbuf[wlivepk=1052 wdefsync=22]`(日志 `~/w7/logs/p7m3-bslhost/`)。设备回归仍待下一版 APK。