[docs] (P7): ID-P7-55/56 - the CI reds since P6.5 are fixed and gate 4 closes with the p7-magma remainder tagged P13

This commit is contained in:
2026-09-23 13:37:14 -04:00
parent d74e9923a7
commit 1997fd8878
5 changed files with 19 additions and 4 deletions
+1 -1
View File
@@ -84,7 +84,7 @@ P7 收官 = 五道出口门同时成立(§2–§7),而不是路线图 P7
**4.1 定义(wave 0 包 R,`scripts/link_ratchet.py`)。** 在 disaggregated 构建的对象树上:按 `notes/p6/a6-link-experiment-data.md` 的路径规则把 `MobileGL.dir` 下对象分 SERVER / FRONTEND / SHARED;集合 = (SERVER 未定义) − (SERVER 已定义) − (SHARED 已定义) ∩ (FRONTEND 已定义)。baseline 存**符号列表**(`scripts/data/link_ratchet_baseline.txt`),`--assert-monotone` 只对新增符号红,消失只提示重基线(ID-P7-7)。基线数(`scripts/data/link_ratchet_baseline.txt`,`8bb6309a`):**186** = `p7-magma` **101** / `p3b-p4b-espryt` **14** / `both-backends` **60** / `p6-core` 11——三个后端桶与 a6 的手数逐符号相同,多出的 2 个是 P6.5 的 `ClientSession::StartSpawned()` 与 `ProgramArtifactsSchemaFingerprint()`。Espryt 桶里 5 个是 `MG_Impl/Pipe/SlotAllocator.cpp.o` 定义的 `MG_Pipe::` 符号,按文件位置落在前端桶、只有 P13 的模块搬迁能清(标 `# P13`),所以 P3b/P4b 的可清数是 9 不是 14。`MG_Remote/FatalFunnel.cpp.o` 归 SHARED(两个角色都经它);`MG_Backend/Init.cpp.o` 按 a6 规则归 SERVER,虽然它引用 5 个 client-session 符号。CI 步骤在 `build-linux-split` 作业;baseline 由参考工具链生成,CI 的 `clang++-20` 内联决策可能让首轮红——三元规则:已列类的兄弟方法、无新引用对象 = 内联,重基线;新引用对象永远不是内联。**重基线(wave 2-B2,`3c2867d3`):186 → 173** = `p7-magma` **88** / `p3b-p4b-espryt` 18 / `both-backends` 56 / `p6-core` 11;(B′) 清掉 13 个(`ProgramObject::*`、`SamplerObject::Set*`、`ShaderObject::*` 的编译/链接路径)。剩下的 88 不是「隐藏程序」而是 **monolith draw 路径**(`UniformManager.cpp.o` 引用 `TextureObjectBase`/`TextureObjectWithOneMipmap` 等 62 个、`VkSamplerManager.cpp.o` 引用 `SamplerObject` 14 个 getter、12 个单例),`SetupDraw` 在运行时才分支到 `SetupWireDraw`(ID-P7-5 保留该运行时)——`#if` 掉这些 monolith 臂与 (B′) 是同一种操作、属 wave 3,故不标 `# P13`;§4.2 的「降到 0」对 (B′) 单独不成立。**收口(ratchet88,`p7/ratchet88`):173 → 171** = `p7-magma` **86** / `p3b-p4b-espryt` 18 / `both-backends` 56 / `p6-core` 11;上一句的「不标 `# P13`」作废。先定的事实:disaggregated 构建的缺省传输就是 monolith(`ConfigLoader.cpp:322-330`;`SetupDraw` 只在非 monolith 下转 `SetupWireDraw`,`VulkanRenderer.cpp:7064-7073`),而它被三道门消费——CI `integration (monolith-control)` 在 disaggregated 主工件上跑 `integration-gpu`(`test.yml:303-309/:390`)、`build-linux-split` 的 monolith 遍是硬门(`test.yml:1531`)、设备 monolith-control 回放用同一 disaggregated APK 且是门 3 的同会话参照臂(`apk.yml:356-367`、§7.2)——所以 `#if` 掉 monolith 臂不是 (B′) 那种等价替换,而是删掉参照臂。逐重定位归因(`~/w7/logs/ratchet88/ATTRIBUTION.md`):清掉的 2 个是 `MGPipeTextureLegacyArmScope` ctor/dtor——P5c 给 `VkTextureManager::SyncTexture` 的具名豁免,monolith 下空操作(`OnApplyThread()` 恒假),非 monolith 下临时探针(豁免一武装即 abort)在 magma split/spawn/tcp 与三条 full 车道零触发,连同类、计数器和守卫里的豁免行退役(守卫本身留)。余 86 全在活的 monolith 臂上,按名记 §12、baseline 标 `# P13`。B2 §4.3 的归因更正:对应用纹理的读经 `ITextureObject` 虚派发、不产生链接符号;`UniformManager.cpp.o` 的 62 个**全部**来自后端**构造**前端纹理当占位(`GetFallbackTexture` / `GetFallbackMultisampleTexture` / `MakePlaceholderTextureObject`,6 个无外联 key function 的纹理类的 vtable 在本对象就地发射,引出 52 个虚函数)。
**4.2 P7 的目标。** `--bucket` 归到 DirectVulkan 引用对象的那一桶(a6 的 101)降到 **0**。唯一还在构造前端 `SamplerObject` / `ShaderObject` / `ProgramObject` 的 DirectVulkan 站点是 `VulkanRenderer.cpp:4526-4583 / 4624-4684`(monolith 臂的隐藏 blit / 深度 mip 程序),其 early-return 是运行时而非 `#if`,所以符号仍被引用。降到 0 的路径:在 **disaggregated 构建里** monolith 臂也改用烘焙模块(§5.2 的 (B')),pull 构建的代码逐语句原样——G1 不动。若 wave 3 实测某桶符号无法在不动 pull `.text` 的前提下消失,按名记入 §12 并在 baseline 里 `# P13` 标注,不算门 4 失败。
**4.2 P7 的目标。** `--bucket` 归到 DirectVulkan 引用对象的那一桶(a6 的 101)降到 **0**。唯一还在构造前端 `SamplerObject` / `ShaderObject` / `ProgramObject` 的 DirectVulkan 站点是 `VulkanRenderer.cpp:4526-4583 / 4624-4684`(monolith 臂的隐藏 blit / 深度 mip 程序),其 early-return 是运行时而非 `#if`,所以符号仍被引用。降到 0 的路径:在 **disaggregated 构建里** monolith 臂也改用烘焙模块(§5.2 的 (B')),pull 构建的代码逐语句原样——G1 不动。若 wave 3 实测某桶符号无法在不动 pull `.text` 的前提下消失,按名记入 §12 并在 baseline 里 `# P13` 标注,不算门 4 失败。**2026-09-23(ID-P7-55):** P13 判据扩为「不动 pull `.text` 去不掉,**或**去掉会改变 disaggregated 构建 monolith 参照臂的可观测行为」;`p7-magma` 桶余 86 全按后者标 `# P13`(逐组见 §12),门 4 以此读法关闭。
**4.3 与 P3b/P4b 的 14 个。** 不是 P7 的目标;棘轮落地后 P3b/P4b 的 Tier 1 才可调度。
+4 -2
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-23(ID-P7-49–54)** · 当前交接 [notes/p7/HANDOFF-2026-09-23.md](notes/p7/HANDOFF-2026-09-23.md)。M3、B4 与 W6 文档已在 pipe e036b4e0 验证并推送;Photon / D24 同 APK monolith 对照已证明两项错图不是 TCP 分离回归。F2 的 PH-4/5/PH-2 已在 `p7-f2-driver` 经 Luna 审查落地;还剩 PH-6、PH-1 (3)(4)、PH-7 (5) 和 F2 完整门。门 3 / CTS AFTER 尚未完成。
**更新:2026-09-23(ID-P7-49–56)** · 当前交接 [notes/p7/HANDOFF-2026-09-23.md](notes/p7/HANDOFF-2026-09-23.md)。CI 自 P6.5 起的七个红因已修(ID-P7-56),job/step 标题缩短、两个工作流加并发组;棘轮 173 → 171,余 86 标 `# P13`,门 4 关闭(ID-P7-55)。F2(PH-6、PH-1 (3)(4)、PH-7 (5)、fuzz 三臂)与门 5 的三个 inproc CTS 缺陷修复在集成;门 3 / CTS AFTER 待最终 APK。
## 1. 出口门总览(CONTRACT-P7 §8 的 9 项分母)
@@ -20,7 +20,7 @@
| 8 | 真机 ssim 1.0(门 3,分母 36) | 🔄 | p7w5 OpenRA 27/27 golden;p7w6 bsl-esc-menu DirectVulkan inproc/spawn 6/6 且图像 SHA 与 monolith 相同;DirectGLES × TCP 38 例窗口矩阵 16/29 pass、8 idle timeout、2 visual failure、3 missing result。Photon / D24 两项错图已由同 APK DirectGLES monolith 复现;36 例 DirectVulkan 三遍、同会话 monolith 对照和 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)。
**40% 检查点(§8 中点)已过:6/9**,不触发重定基线。G1 全程恒等(pull `.text` `0xa52203`、符号 0/0);census 79 站点 / 0 未标;棘轮 186 → 173 → **171**(ratchet88:`p7-magma` 余 86 全标 `# P13`,门 4 关闭,ID-P7-55)(B2 重基线,余 88 = monolith draw 路径,wave 3)。
## 2. 已落地(`feat/disaggregated`,按合并序)
@@ -50,6 +50,8 @@
| 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) |
| B4 | 聚合 submit 前缀等待、frame serial 重新扫描、Present 槽退休保护、pre-pass pending、texture prune 与 staged extent 清理 | pipe b19297d5(ID-P7-51;集成者 review land,完整 pipe 门通过;当前文档/citation/push 收尾中) |
| CI 修复 | 链接缝走工厂、TCP fixture headless + 资源锁守卫、D3 拒绝句、Magma-only decline、dual-block 登记、retrace 链(旋钮 / pull verify 日志 / spawn 冷启动预算)、并发组、80 个标题缩短 | pipe `eaef83b3..e751b07b`(ID-P7-56) |
| ratchet88 | `MGPipeTextureLegacyArmScope` 退役、余 86 标 `# P13`、棘轮 171 | `d49df354` / `d74e9923`(ID-P7-55) |
## 3. 真机(Redmi 2f7cbe2e,Adreno 830)
File diff suppressed because one or more lines are too long
+11
View File
@@ -0,0 +1,11 @@
# review-ratchet88(集成者审查,2026-09-23)
**Verdict: land.** p7/ratchet88 `6a488d90`(产品 + 基线)/ `989c53fb`(CONTRACT-P7 §4.1/§12)。
| 项 | 核对 | 结论 |
|---|---|---|
| 退役 `MGPipeTextureLegacyArmScope` | `VkTextureManager.cpp` SyncTexture 只在 monolith 臂被调用(唯一调用者 `SyncTextureAndGetDescriptor`);split 臂同步走 `SyncTextureResourceByHandle`;探针 + 检查者 78 行 split 子集 retrace 0 命中 | 正确;回归现由 `Fatal{RoleViolation,"texture-legacy-arm"}` 按访问器名拦截 |
| G1 | 替换注释与原块同行数(`__LINE__` 进 pull `.text`);`.text` sha256 与基线相同、符号 30570/30570 | 不动 |
| 余 86 标 `# P13` | disaggregated 构建里 monolith 是默认运行时且是门 3 / 门 5 的参照臂(`ConfigLoader.cpp:322-330`、`test.yml:1531`、`CMakeLists.txt:805-811`);改用 wire placeholder 会改变参照臂可观测行为 | 接受;**新裁定 ID-P7-55 取代 ID-P7-31 的「不标 # P13、归 wave 3」**,§4.2 加注 |
| 措辞 | 4 个 MGB_CTX 符号里 `PipeInputs::HasOpenTransformFeedbackSpan` / `InvalidateCompileEnv` 不在 monolith draw 路径,计入原因是 `PipeFill.cpp` 按路径规则归 FRONTEND(同 5 个 SlotAllocator 符号) | 集成文档更正 |
| 缺口 | 退役后无常驻负控证明 apply 线程 `SyncTexture` 会按名 abort(只有临时探针 + 棘轮 red-once) | 记 §12 债 |
@@ -57,4 +57,6 @@
| ID-P7-52 | 2026-09-23 | **窗口 1b p7w6 DirectGLES × TCP 矩阵结案(独立调查,不是门 3)。** 38 例含 9 缓存跳过;29 次尝试 = 16 pass、8 idle timeout、2 视觉失败、3 missing-result timeout。缺结果/超时不计视觉产品红。Iris Photon v1.3b SSIM 0.008877075、D24.4.14 SSIM 0.850784981;Photon server shader varying link 失败后 program 0,D24 为部分场景错绘;两者需设备 DirectGLES monolith 对照。normal-world 与若干长例停在等待且无 P65 进展;B4 host gate 与未知子集 attempts 重叠,timeout 结论需保留此限制。 | 逐例 armed/reap/SSIM/timeout 见 notes/p65/window-1b-p7w6.md;原始日志与图片 ~/w7/logs/p7w6-matrix-resume/pass1/。 | p7w6 APK p7w6-0e16ca27(M3 前) |
| ID-P7-53 | 2026-09-23 | **p7w6 DirectGLES 错图 monolith 对照完成。** 设备 Redmi `2f7cbe2e` 上跳过重装,TCP 与 monolith 复用同一个 trace 和同一个 APK;测前后 APK SHA-256 都为 `780bb00e81b9cf2e84298543692c1b005c281dfc2a0f499bfa1af86772625590`。Photon v1.3b 的 monolith SSIM / mismatch 与 TCP 完全相同(0.008877075 / 403024),两臂复现相同 shader varying link errors;D24.4.14 monolith 0.850671535 / 402596,TCP 0.850784981 / 402598,两臂都碰到 attribute location 超设备限制。判定:两项是同 APK 的 DirectGLES monolith 也能复现的 baseline 错图,不是 TCP split 专属回归。 | 截图、`result.json`、logcat、两侧应用日志:`~/w7/logs/p7w6-monolith-compare/`;trace SHA Photon `217d4939…a69b3`、D24 `fe89d01b…9228b0`。设备回到 Home,无源码或提交变更。 | DirectGLES × TCP 错图判定 |
| ID-P7-54 | 2026-09-23 | **F2 PH-4 / PH-5 / PH-2 landed on the package branch; Luna integration review = land.** PH-4 carries exact mutable mip W/H/D with the accepted ResourceRespecify and bounds staged bytes under server target/format/device limits; PH-5 rejects vector counts whose immediate allocation exceeds remaining archive bytes; PH-2 names slot-cap and backwards-generation faults through the server fatal funnel at reachable attachment-adoption guards. Raw-peer negatives cover extent mismatch, multisample subdata, carrier canonicality, and PH-2 slot / generation refusal. Build-split targeted gates: ServerSpawnTest 20/20, StagedTextureStoreTest 13/13, ProgramArtifactsCodec 6/6, SessionHandshakeTest 10/10 (49 total); generator + diff checks pass. Strict pull G1 uses exact package base `adf2cbe0`: `.text=0xa52203`, 27,837 symbols unchanged, 0 added/removed/resized/renamed, all section deltas 0. | commits `51480f8c` (PH-5) + `2c6a6e25` (PH-4/PH-2); combined CTest `/tmp/p7-f2-all-required-final.log`; G1 `/tmp/p7-f2-g1-adf2-final.md` / `.json`. | `ProgramArtifactsCodec.cpp`, `StagedTextureStore.h`, `SlotTables.h`, `Managers.{h,cpp}`, raw FBO / texture peer controls |
| ID-P7-55 | 2026-09-23 | **棘轮 88 → 86,余 86 标 `# P13`(取代 ID-P7-31 的「不标 # P13、归 wave 3」)。** disaggregated 构建里 monolith 是默认运行时(`ConfigLoader.cpp` `MOBILEGL_TRANSPORT` 默认值)、是门 3 / 门 5 的同会话参照臂,CI 的 monolith-control 车道也跑它;86 个符号全在该臂可达:62 = `UniformManager.cpp.o` 构造前端占位纹理(六个头文件纹理类的 vtable 在该对象发射)、14 = `VkSamplerManager` 的 `SamplerObject` getter、6 = 应用 FBO/RBO/VAO/buffer getter、4 = `MGB_CTX` 访问器(其中 `PipeInputs::HasOpenTransformFeedbackSpan` / `InvalidateCompileEnv` 计入的真因是 `PipeFill.cpp` 按路径规则归 FRONTEND,与 5 个 SlotAllocator 符号同类)。`#if` 掉 = 删参照臂;改用 wire placeholder 会改变参照臂可观测行为(1D/3D/cube/array 未绑定 sampler 由丢 draw 变为画、阴影占位 RGBA8→D16、MS 占位由未定义变为清零),需另开设备窗口裁定,记 §12。可删的 2 个(`MGPipeTextureLegacyArmScope` 构造/析构)已删:探针在 Magma split/spawn/tcp + full 车道与 78 行 split 子集 retrace 上 0 命中,回归现由 `Fatal{RoleViolation,"texture-legacy-arm"}` 按访问器名拦。§4.2 的 P13 判据扩为「不动 pull `.text` 去不掉,**或**去掉会改变 disaggregated monolith 参照臂」。G1 `.text` 字节同(替换注释保持行数,`__LINE__` 进 pull `.text`)。 | pipe `d49df354` / `d74e9923`;`~/w7/logs/ratchet88/ATTRIBUTION.md`;审查 `notes/handoff/review-ratchet88.md` | `scripts/data/link_ratchet_baseline.txt`、`VkTextureManager.cpp`、`MipmapStorage.{h,cpp}` |
| ID-P7-56 | 2026-09-23 | **CI 自 P6.5(09-22)起持续红,七个根因全修 + 标题缩短 + 并发组。** (1) 链接缝门:ID-P7-3 的 dataNonce 提交让 `ServerSession` 直接构造 `StreamLink` → 改走 `Transport::CreateDeferredStreamLink` / `BindStreamLinkDataFd`;(2) TCP 车道 220/223 红:fixture 起的 server 没有 harness 的 headless EGL 钉(本地 WSLg 的 `DISPLAY` 遮住了它),另 `Tcp.TextureUploadShape` 缺 `mobilegl-tcp` 资源锁(并发时 `Refuse{Busy}`)→ 钉 + 锁 + `junit_tally` / `spawn_lane_parity` 锁守卫;(3) `ObjectSubsystemControl` 匹配器仍认 D3 前的拒绝句;(4) 四个 Magma-only decline 用例在 Espryt split 臂上跑 → 按后端名 skip;(5) dual-block 普查 9 个合法 skip 未登记、buffer 必绿表 19→21;(6) retrace 链(自 P6.5 起被上游红跳过):Magma 修复旋钮只在主步 shell 里 → 写 `$GITHUB_ENV`;CI 的 verify 库是 pull 构建写 `mobilegl.log` → verify 块回退;spawn 冷启动被 5 s 控制回复界杀(09-22 两次 11/77、17/77 腿)→ `MOBILEGL_IPC_CONTROL_TIMEOUT_MS`(5000,P6 D5b 早已命名但从未读取)+ `MOBILEGL_IPC_COLD_START_MS`(20000,首个 MakeCurrent 答 ok 之前的三个可能拉起后端的 op);(7) 两个工作流无并发组 → APK 排队 10 h:加 `concurrency`(非 dev 推送取消在跑的),apk.yml 跳过纯文档推送。80 个 job/step 标题缩到 ≤45 字符(`retrace (…, <case>)` 形状留给 `remove-artifact-clutter` 解析)。本地门模板 v2(`~/w7/logs/p7-gate-template2.sh`)补齐 CI 覆盖:pipe-gates 全步、integration-gpu 双传输、车道去 `DISPLAY`。 | pipe `eaef83b3..e751b07b`;CI 复刻 `~/w7/logs/cifix-rep/`(每个红 job 本地转绿);真 CI 待本次推送 | `.github/workflows/{test,apk}.yml`、`scripts/ci/*`、`ClientSession.cpp`、`ServerSession.cpp`、`MG_IntegrationTest/CMakeLists.txt` |
| 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` |