diff --git a/docs/Disaggregated/CURRENT_STAGE_STATUS.md b/docs/Disaggregated/CURRENT_STAGE_STATUS.md index b49e9001..63260bf2 100644 --- a/docs/Disaggregated/CURRENT_STAGE_STATUS.md +++ b/docs/Disaggregated/CURRENT_STAGE_STATUS.md @@ -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`(自 `3c80cd62` 起 42 提交:B2 返工 r1/r2、B3 返工 + 修复轮、V1、F 片 1–3、E1;提交尾注已按用户令改写;四份 fable 审查均 land with fixes,修复轮在跑,ID-P7-39)。集成树 `~/w7/pipe` = origin。 +**更新:2026-09-22 夜** · `origin/feat/disaggregated` = `87584d0b`;集成树 `~/w7/pipe` 领先 20 提交(B3 修复 r2、V1 修复轮、B2 r3),门 / 审查在跑;**窗口 1b 的 39 例 TCP 矩阵在跑**(ID-P7-40)。 ## 1. 出口门总览(CONTRACT-P7 §8 的 9 项分母) @@ -56,9 +56,9 @@ | 包 | 内容 | 状态 | |---|---|---| -| B2 r3(fable) | 用例按解析后的 transport 门控(`Full.` / `VerifySplit.` 重新跑)、pre-pass 含默认 draw framebuffer、措辞、§6 三条域外债 | 进行中(ID-P7-38) | -| B3 修复 r2(fable) | `LOGGED` 锚定 + 夹具、spawn FATAL 挪到普查前、inproc fail-closed、nit ×6、pull-library 控制证据核查 | 进行中(ID-P7-38) | -| V1 修复轮 | server 侧 read hook 红、poison 分角色、`MGPipeNeutralReadPixelsPack()`、逐条武装证明 + 具名例外表、措辞 | 进行中(Agent 通道) | +| 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 | `VkBufferManager` serial 门控回收(不假设帧有界)+ `MOBILEGL_IPC_WIRE_DEFERRED_MB` 水位线 + spawn red-once | 进行中 | | F 修复轮(fable) | child 绑定后关 hand-off 端 + `MSG_DONTWAIT`(后续 DataBind 具名拒绝而非挂起)、listener 绑定后关、`protocol.fbs` 摘要 pin、旧 server + 新 client 症状写明、unix 配对 §12 债、nit ×6 | 进行中(ID-P7-39) | @@ -74,4 +74,5 @@ ## 6. 阻塞 / 需要人 -- P6.5 残余 39 例 TCP 矩阵(窗口 1b)等 WSL 主机路由:Arch 里 `sudo ip route add 192.168.21.181/32 via 192.168.31.1 dev eth0 metric 10`(设备 supervisor 在 `0.0.0.0:40613` 带 token,冻结制品 `~/w7/logs/p7w1b/host/`)。 +- ~~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…` 曾有同样记录)。 diff --git a/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md b/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md index df0db7e6..f8fa2989 100644 --- a/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md +++ b/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md @@ -42,4 +42,5 @@ | ID-P7-37 | 2026-09-22 | **提交尾注改写落地;B2 r2 / B3 修复轮 / V1 / F 片 1–3 全部到集成树,pipe 门全绿。** (1) 用户令「Rewrite the commits and strip the trailer」:785fed0b0 起 144 个提交改写(122 个带尾注),`origin/feat/disaggregated` 按 SHA 强推 1135c664 → `3c80cd62`(树逐字相同;与 `dev` 共有的历史不动),41 份文档 / 契约里的 SHA 引用按映射表重写;此后所有提交无尾注,pick 脚本自动剥。(2) **B2 返工 r2 落地**:用例按 `IsSplitLane()` + 后端名双 skip(monolith DirectVulkan 与 Espryt 各一条新 §12 债)、逐行拷贝行距对齐到 4 字节 + 29×32 stencil 腿(validation layer 上 `VUID-vkCmdCopyBufferToImage-dstImage-07978` ×10 红 → 0)、`DeclineWireDepthStencilResolveShape` 在任何 aspect 之前决定(`COLOR\|DEPTH` 缩放腿:颜色不再先写)、X / 跨格式 Y 各自 once 站点、`MsFlip1.` 旋钮孪生、parity 每个 tail 必须恰匹配一条(七条)。(3) **B3 修复轮落地**:审计剥注释 / 字面量、按缩进块回溯、`--self-test` 8/8 进 CI、`run_trace_case.cmake` 对 spawn 无 server 日志 FATAL、注记双行、§12 `WaitForFrameSerial` 债。(4) **V1 审查 = land with fixes**(fable):should-fix 5(server 侧 read hook 无 split 红 → hook 内施加 corrupt + 新控制条目;poison 断言分角色;中性 pack 改共享函数;武装证明改逐条 + 具名例外表;契约 §6/§8 措辞)、nit 3、注 6(放宽健全;`PipeInputs.cpp` 越分区改动按 §9 接受;G14 成立;棘轮 176 不进 CI)→ 修复轮已派(工作流子代理三次拒做——它们把用户最新一句当唯一指令——改走 Agent 通道)。(5) **F 报告并 cherry-pick**:片 1–3(常量时间令牌合一 + ≥16 字节具名拒绝 + 无令牌只 loopback 控制 + smoke 进 CI + flatc;`Welcome.dataNonce` 128 位 + `DataBind` 帧,data 连接绑定到已认证控制连接,TCP 上 250 ms 配对窗口消失,**`wireFingerprint` `0x7d4470f241d23539` → `0x03c4c293a54b3e08`,手机 server 必须随 p7w6 重部署**;PH-8 单测 + smoke,child 峰值 237 MB);片 4–6(D11 五处 + PH-2、PH-6、PH-1 (3)(4))与 PH-7 (5) 未做——需要对端字节的 fuzz 驱动(fuzz 臂 2 的第一块),另派 **F2**。**pipe 门(B2 r2 + B3 修复之后)**:G1 恒等、census 79、棘轮 173、parity 0、`@P7` 19、unit 2431 / split 304 / spawn 220 / tcp 223 / magma **97 / 76 / 71** / full 535、审计 53/53/0 + self-test 8/8、`AFlipped…` 在 monolith 与 DirectGLES 条目全部 Skipped 而 `DirectVulkan.Split.MsFlip.` Passed、OpenRA DirectVulkan inproc + spawn 1.000000 / 0 条 unsound;**verify 构建(`build-verify` = PUSH + DISAGG + VERIFY,tcp 40714)unit 2431 / integration-verify 1140 / integration-verify-split 1074 全绿**。集成工具修正:pipe 的 tcp fixture 端口改 40713(V1 门的 tcp 车道曾撞上 F 包在 40613 的 fixture,那次读数作废);门模板只在车道红时打印失败名(裸 `--rerun-failed` 在无失败表时会串行重跑整套)。 | 等 B2 r2 与 B3 修复轮的 fable 审查 + F 门 → 推送;p7w6 APK(含 F 的指纹变更)→ 手机 server 重部署 → bsl-esc-menu spawn(M2 落地后);F2 = 片 4–6 + PH-7 (5)。 | `spawn_lane_parity.py`、`WireFramebuffer.inc`、`wire_declines_audit.py`、`run_trace_case.cmake`、`AuthToken.h`、`protocol.fbs`、`Handshake.h` | | ID-P7-38 | 2026-09-22 | **B2 r2 审查 = land with fixes**(fable):should-fix 2——`IsSplitLane()` 标记也让 `Full.` / `VerifySplit.` 两条 wire 车道以假的「monolith」理由跳过(改按 `PeekSplitRuntime().transportResolved` 门控);pre-pass 排除了默认 draw framebuffer(`!draw->IsDefault`,注释理由错),MSAA → 窗口的 `COLOR\|DEPTH` 缩放仍先写颜色再拒深度(改为以 `isWriteTarget=false` 解析目的地并撤掉排除,red-once);nit 2(措辞限定为 shape decline;note 六 → 七条 tail);域外 3 条(合法的等尺寸 MSAA → 默认 framebuffer 深度 blit 仍是 Fatal;scissor 清空目的地时静默返回;MS→MS 逐 aspect 决定)→ **B2 r3 派 fable**(第三轮,按用户 09-08 规则)。**B3 修复轮审查 = land with fixes**(fable):should-fix 3——审计 `LOGGED` 未锚定(受守卫的单行日志算作站点自己的);spawn 无 server 日志的 FATAL 放在 ARMED 检查之前使诊断变差(挪到普查之前);inproc 的 server 日志仍 `if(EXISTS)`(同样 fail-closed);nit 6(前缀字符字面量、`case`/`break` 停走、`#if` 不应停走、行号 ±1、§0 表缺一行、`MGL_WIRE_DECLINE_FALSE` 不存在);域外 3(pull-library 控制自 P6 日志改名后证据可能不可达;replay 非零退出跳过普查;B4 restart 不得再读 `record`)→ **B3 修复 r2 派 fable**。**F 门(pipe)**:G1 恒等、census 79、棘轮 173、parity 0、`@P7` 19、split 304 / spawn 220 / tcp 223(pipe 自己的 fixture 端口 40713)/ magma 97 / 76 / 71 / full 535、审计 53/53/0 + 自测 8/8、OpenRA DirectVulkan inproc + spawn 1.000000 / 0 条 unsound、verify 构建 unit 2435 / integration-verify 1140 / integration-verify-split 1074;unit 车道 2434 / 2435——`InitialCapsStartup.ANullInitialSnapshotFailsInsteadOfStartingWithAPlaceholder` 在并发构建负载下红一次、单跑 3/3 绿(已知偶红家族,原始失败输出被复跑覆盖)→ 记 flake,不阻塞;F 的 fable 审查在跑。**E1 落地**(pipe `70bbb159..b05406b5` + 引用重映射 `99882304`):231 / 231 全活、70 / 77 行逐字节同(7 行分歧 = Magma monolith draw 路径 vs wire 路径或运行噪声)、P9 例外表为空(`texture-remint-pull` 未到达)、§7.2 的 27 例 24 绿 / 3 具名停止(`PIPE_PUSH=0` 控制臂)/ 0 错答,全车道 1051 / 172 / 37 / 7(44 条非绿全是 monolith-control 条目);ROADMAP P3b/P4b 与 P7 行、CURRENT_STAGE_STATUS §5 已并入(子串合并两处失败已手工修)。 | 推送等 F 审查回;B2 r3、B3 修复 r2、V1 修复轮、M2 在跑。 | `ROADMAP.md`、`MEASUREMENTS.md` §7.2、`notes/p7/iris-census-1135c664.md` | | 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-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` |