mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
[docs] (P7): ID-P7-44 - the integrator's own reviews land the F fix round and the B3 r3 / B2 r4 rounds, with two small debts recorded
This commit is contained in:
@@ -173,4 +173,5 @@ verify **在 wave 3 之前**只在 monolith 臂注册(`MG_IntegrationTest/CMak
|
||||
- **B3 复审留下的记录债(`notes/p7/magma-b3.md` §7.2,ID-P7-36/37)**:`WaitForFrameSerial` 在 disagg 构建上等的是第一条 `frameSerial >= serial` 的记录,钳制之后若更晚的记录(S2 Present)持有同一序号则地板到不了 `serial`,函数返回 true 而 `IsFrameSerialComplete(serial)` 为 false——唯一调用者 `WaitForTimerQueryResult` 重查就绪,今天退化为一次假超时;修法归 **B4**(只在 `IsFrameSerialComplete` 为真时返回,否则从头重扫,不能 continue)。陈旧注释两处(`CollectAllDeferredReleases` 的「mid-frame drains do not advance m_frameSerial」、`WaitForFrameSerial` 的「floor still advances after one fence wait」)归 B4 一起改。disaggregated 构建的 monolith 臂在中帧 flush 下比 pull 构建更可靠(`OnSubData` 经 `IsResourceBusy` 读同一地板),pull 构建的 `#else` 逐字保留、潜在缺陷由 G1 与 P13 持有。
|
||||
- **V1 留下的记录债(`notes/p7/verify-split.md` §6,ID-P7-37)**:verify 在 spawn 上需要一个跨进程的比对形状(server 把读到的字段值随回复带回、client 比),门 2 的文本是 `{monolith, split(inproc)}`;server `ReadPixels` 窗口里 pack 半边的字段级盲区很窄(只有恰等于中性 pack 的错推送不可见);DirectGLES × split 上四条 Magma decline 契约用例按名从 verify-split 车道减掉——Espryt 是否 decline 这些形状归 P3b / P4b。
|
||||
- **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(严格、有意)。
|
||||
- **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。
|
||||
|
||||
@@ -46,8 +46,8 @@
|
||||
| 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`(门全绿 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) |
|
||||
| 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) |
|
||||
|
||||
## 3. 真机(Redmi 2f7cbe2e,Adreno 830)
|
||||
|
||||
@@ -65,9 +65,7 @@
|
||||
| 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. 下一步(按序;机械步骤与命令见 [`notes/p7/HANDOFF-2026-09-22.md`](notes/p7/HANDOFF-2026-09-22.md))
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# Review: B3 fix round 3 (pipe bd849b28 10220b56 3b8bf9ec c8fc4fb7) + B2 round 4 (e385ea96 4b96f55d) — integrator (Fable 5.1, main session)
|
||||
|
||||
**Verdict: land** (no findings that need a change).
|
||||
|
||||
B3 r3: `wire_declines_audit.py` — `#endif` crossings are counted; a same-indent log under an outstanding `#endif` is accepted only if every opener found by continuing upward is the whole-line `#if MOBILEGL_BUILD_DISAGGREGATED` (`PP_DISAGGREGATED` anchored `\s*$`, so `&& !defined(X)` is fail-closed — stated); `PP_STOP` matches `#else`/`#elif` at any indentation and returns False before the indent test; `#if*` with no outstanding `#endif` stays a plain skip. 16/16 fixtures; tree 53/53/0 (gate on 4b96f55d). `run_trace_case.cmake` message now carries `MOBILEGL_IPC_CONTROL` (message only). `retrace_pull_library_control.sh`: the `case` guard `*$'\n\n'*|*$'\n'|$'\n'*` refuses a blank middle line, a trailing and a leading newline; `stub_ctest.sh` is 100755 at HEAD. No product file touched.
|
||||
B2 r4: the window leg primes the default framebuffer magenta / 0.625 (source 0.25/0.75, user FBO blue/0.5), probes expect exactly that, so reading the FBO or the source both fail (the package showed the wrong-surface red once); the gate is `!PeekSplitRuntime().transportResolved` after `Ready()`; `SplitLane.h` include dropped; note cites by symbol. Gate on 4b96f55d: unit 2436, magma 100/79/71, full 538, verify 1148/1082, the three `MsFlip.` entries Passed.
|
||||
@@ -0,0 +1,7 @@
|
||||
# Review: F fix round (pipe 0293aebb c69d8dfd 8c8fc319 9cea5140) — integrator (Fable 5.1, main session)
|
||||
|
||||
**Verdict: land** (two nits, recorded in CONTRACT-P7 §12 / ph-f.md; no code change required before push).
|
||||
|
||||
1. nit — `ServerMain.cpp` `RunSession`: between `session.Accept()` returning and `::close(sourceFd)` a DataBind the supervisor already forwarded is closed with the child's queue (the passed fd goes with it), so that one peer sees a bare close instead of `Refuse{Authentication}`. Window is microseconds; acceptable; record.
|
||||
2. nit — `scripts/ci/protocol_revision_pin.py`: any byte change to `protocol.fbs` (comment/whitespace) forces a revision bump; strict by design, say so in the docstring.
|
||||
Verified from the diffs: child closes `pair[1]` after Accept (supervisor's `SendFd` then fails ECONNREFUSED/ENOTCONN → TRANSPORT_CLOSED → named refusal on the extra connection; `MSG_NOSIGNAL` already set, `MSG_DONTWAIT` maps EAGAIN → TIMEOUT → same refusal); the refusal is written on the extra connection and its object is closed by the caller as before; listener closed only on the single-session (`ListenerSource`) path, `--serve` keeps the supervisor's listener; `DrainUnread` bounded 256×4 KiB; `MalformedHello` is a generated `RefuseCode` (already in the vocabulary, census unchanged 79/44/3); pin script LF-normalises, two-sided (stale row / missing row), `--write` refuses re-pin, CI step in flatc-check with nonzero exit; token compare width = max(64, configured length) with both operands zero-padded, the >64 length class leak stated; `MintNonce` failure now sends `Refuse{LinkTerms}` and still exits 67; PH-8 log line fires only when a peer asks for more than granted; no pull-build file touched (G1 holds by construction; gate on 9cea5140: unit 2436, tcp 223, spawn 220, magma 100/79/71, verify 1148/1082).
|
||||
@@ -46,4 +46,5 @@
|
||||
| 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-44 | 2026-09-22 | **用户叫停 fable 审查代理,改由集成者本人审查。** F 修复轮 = **land**(两 nit 记债:`RunSession` 里 `Accept()` 返回到 `close(sourceFd)` 之间已转发的一条 DataBind 会随队列被关而无具名拒绝,微秒级窗口;`protocol.fbs` 任何字节变化都要 bump,严格但有意);B3 修复 r3 + B2 r4 = **land**(审计跨 `#endif` 只认整行 disagg 守卫、任意缩进 `#else` 停走;`EVIDENCE` 三种空模式都拒;模式位 100755;窗口腿底色品红 / 0.625 独一;门控只看 transport)。审查文本在 `notes/handoff/review-f-fix.md`、`review-b3r3-b2r4.md`(仓库与 WSL `~/w7/notes/handoff/` 各一份)。 | 集成树头已推送;余下机械项见 HANDOFF。 | `notes/handoff/` |
|
||||
| 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` |
|
||||
|
||||
Reference in New Issue
Block a user