mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-14 13:33:23 +09:00
- the sixteen unpushed integration commits after 1135c664 were rewritten to drop the Co-Authored-By trailer the project forbids (commit-style rule, user 2026-07-15 and 2026-09-09); their SHAs changed, so every citation of the old SHAs is remapped here - no content change beyond the SHA text
31 KiB
31 KiB
P7 集成者裁定日志
形式沿用 P5e 的
INTEGRATOR-DECISIONS-P5E.md:一条裁定一个 ID,只记「定了什么、为什么、影响哪些文件」,不记来回。计划正文见PLAN-PH-P34B-P7.md。
| ID | 日期 | 裁定 | 理由 | 影响 |
|---|---|---|---|---|
| ID-P7-1 | 2026-09-22 | PH-1「Session::Fail 翻成每会话闩」按四片重定界:(1) supervisor 读 waitpid status 并命名子进程死亡;(2) 两处头层裸 abort(Server/StagedShadow.h:115、Server/StagedTextureStore.h:344)改走漏斗;(3) 只对对端字节可达站点做 latch-and-decline;(4) 负控。98 处 SessionFail 的字面翻转拒做。 |
≥9 处返回引用的站点没有诚实返回值;§12.3 进程级 eglTerminate 使闩住的进程也服务不了第二会话;P6.5 fork-per-session 已给出「下一连接照常服务」。 |
ServerMain.cpp、Server/Staged*.h、PipeWireCodec.cpp、PipeApplier.cpp、ServerLoop.cpp、SurfaceOpCodec.cpp |
| ID-P7-2 | 2026-09-22 | PH-6 取 drop-with-latch:ReserveEventOrBlock 两处 BUSY 拒绝改置 forfeit 闩 + CountDrop() + 返回 scratch,ServerLoop park 谓词见闩走正常 Stop;kEventBacklogWaitMs 改 MOBILEGL_IPC_EVENT_WAIT_MS(默认 2000)。不等 PH-1。 |
一个函数、一个标志、一个配置字段即闭;30 s 的「测量」从来不是测量;解耦掉 6–10 天的闩迁移。 | ServerSession.cpp:215-263、ServerLoop.cpp:403-406、ConfigLoader |
| ID-P7-3 | 2026-09-22 | OQ-21:令牌足够,不做 TLS。令牌常量时间比较、≥16 字节、无令牌只 loopback;数据面以 Welcome.dataNonce(CSPRNG 128 位)绑定到已认证的控制连接,认证在 fork 之前完成。TLS 作为 P12 的开放项保留。 |
Ph 门的威胁模型是「任何人都能连的远程代码路径」,不是窃听:局域网 GL 命令流不含凭据。令牌 + 连接绑定关掉前者;TLS 是另一个多天项且应有自己的路线图行。 | protocol.fbs(Welcome 追加字段 → wireFingerprint 随之变)、SocketTransport.cpp、Handshake.h、ServerMain.cpp |
| ID-P7-4 | 2026-09-22 | 出口门 3(真机 ssim 1.0)的分母排除 minecraft-1.21.4-rd12-odinlite-in-world 与 create-indirect;iterationrp 按 apk.yml:460-462 带三个 Magma 旋钮。 |
OQ-17:两者在 dev@81b17c0b 就在 Adreno 830 上坏,非本分支造成。 |
CONTRACT-P7.md、设备矩阵跑器 |
| ID-P7-5 | 2026-09-22 | SetupDrawSnapshot 探测字段塌 dirty mask、VertexInputStateFactory 内容寻址 CSO 本阶段拒做,记入优化阶段。 |
VulkanRenderer::SetupDraw 在非 monolith 传输下分支到 SetupWireDraw(:6946),monolith 快照机制在 split 下不跑;无性能门;改 monolith 表动 pull .text。 |
无 |
| ID-P7-6 | 2026-09-22 | D18 取 21-memo 普查的读法(节点稳定容器纪律;负控 C 必须仍能到达已发货臂)。 | 两名反驳者对指涉不一致,必须由集成者定一个。 | CONTRACT-P7.md 一句 |
| ID-P7-7 | 2026-09-22 | 184 符号棘轮归 P7 wave 0;baseline 存符号列表而非计数;--assert-monotone 只对新增符号红,消失只提示重基线。 |
裸计数的棘轮在「清一个加一个」时通过;P6.5 行从未接收该移交。 | scripts/link_ratchet.py、scripts/data/link_ratchet_baseline.txt、test.yml |
| ID-P7-8 | 2026-09-22 | 实现方 opus、审查方 fable;每包合并前聚焦审查一次,阶段收官整体审查一次。 |
ID-66「实现方与审查方错开」;本环境无 Codex。 | 过程 |
| ID-P7-9 | 2026-09-22 | 性能只记录不设门(沿用 2026-09-08);wave 2-B 若实测 CSO 缓存为热点才做 P7-5 的 server 半边。 | 路线图纪律。 | 过程 |
| ID-P7-10 | 2026-09-22 | wave 0 之前不派任何 @P7 拒绝退役的活。 |
今天没有一条车道能让 Magma 两进程用例变红,每个修复都需要 red-once。 | 过程 |
| ID-P7-11 | 2026-09-22 | pull 构建(MOBILEGL_PIPE_PUSH=OFF)必须连测试一起编过:MG_Test/Util/PipeStatsTest.cpp:137 用了 push-only 的 PipeStats::Gauge,已加 #if MOBILEGL_PIPE_PUSH 并保留用例名以维持名集合奇偶。CI 的 pull control 作业关了 MOBILEGL_BUILD_TEST 所以看不见——这是 CI 的一处盲区,随 wave 0 的 CI 改动补一条「pull 构建含测试」的编译步骤。 |
「默认 ALL target 必须完整构建」。 | PipeStatsTest.cpp、test.yml |
| ID-P7-12 | 2026-09-22 | 出口门 3 逐 case 对 monolith 臂判(同会话;三遍逐位相同;≥ 阈值;与 monolith 读数之差 ≤ 0.0005;OpenRA 两臂 1.000000),不是对 golden 的平 1.0;分母 = 39 − 3 = 36,排除 monolith 自己就红的 create-indirect(OQ-17)、1.21.11-main-menu(trace UBO 对齐伪差)、iris-photon。 | E0a 实测 monolith × DV 对 golden 在 0.996–1.000,只有 OpenRA 是 1.0;「pbuffer monolith 1.0」是 OpenRA 的事实不是规则。 | CONTRACT-P7.md §7.1/7.2、device-window-1/E0-attribution/exclusions.md |
| ID-P7-13 | 2026-09-22 | iris-photon 归 dev 侧独立条目(Adreno 830 的 vkCreateGraphicsPipelines 对 photon 程序返回 VK_ERROR_UNKNOWN,PipelineFactory.cpp:660,monolith SSIM 0.0089,lavapipe 绿);不进 P7 出口门。 |
OQ-17 先例:monolith 级的 Magma × Adreno 失败不是分离缺陷;拆分不借机顺手修。 | exclusions.md |
| ID-P7-14 | 2026-09-22 | wave 0 三个包的命名/分桶裁定一并批准:C——ResourceUnavailable→ServerCrashed(不是 SegmentMismatch)、Magma 漏斗家族词保持 UnmigratedVerb、Refuse{ProtocolMismatch} / Refuse{InitialCapsSnapshot} 进 LOCAL_REFUSAL_WORDS 允许表;R——FatalFunnel.cpp.o 归 SHARED、MG_Backend/Init.cpp.o 按 a6 归 SERVER、Espryt 桶地板 5(MG_Pipe:: 槽分配器符号,# P13)、P3b/P4b 可清数 9;L——MagmaRunAheadScenario / MagmaWireCacheScenario 只注册 inproc 臂(MAGMA_INPROC_ONLY),跨进程 hold / peek 记债;六处 MGL_ITEST_MAGMA_*_ENVIRONMENT 改用 VULKAN_ENV。 |
各包报告里的理由成立;改名会作废历史普查计数;一致性胜过「含义不变」。 | scripts/ci/fatal_census.py、link_ratchet.py、spawn_lane_parity.py、CMake |
| ID-P7-15 | 2026-09-22 | 新增 wave 2 包 X1(inproc 下 GL 线程 memcpy 写进不可写映射的 SIGSEGV)进 P7 出口门 3 关键路径;其两条残余(屏蔽 SIGSEGV 的非 GL 线程写者、RefaultOfANonWriteAccess)与「P5d 的 Adreno mprotect 臂数字存疑」记 CONTRACT-P7.md §12,不阻塞 P7。 |
26.3 在门 3 分母里;机制是 bionic 指针标记 0xb4 与内核 si_addr 比较,与后端、run-ahead、persistent push 无关(E1/E4a/E4b)。 |
PersistentMapTracker.cpp、notes/p7/x1-persistent-map-segv.md |
| ID-P7-16 | 2026-09-22 | 出口门 5 = 五个可测块(texture 1055 / shader-image 125 / packed-pixels 4732 / dsa 371 / ssbo 124),UBO 块(GTF 模块)在本 CTS 提交 0b04c470e 无 kc-cts 不可运行,记 unrun;API 版本 KHR-GL46(设备探针列出 697 例,mgprobe PASS 含 default_fb=ok);$BASE 用 pre-wave-2 库 p7w1-d260f110,AFTER 同版本同 caselist。 |
设备探针结果;caselists README 已预告 GTF 缺席。 | tools/cts/caselists/、notes/p7/device-window-1/CTS-base/ |
| ID-P7-17 | 2026-09-22 | E2(present credit 扫描)与 E0b 的 ARMED 三遍确定性不单独跑:E1 已证明 run-ahead 整条线出局(OpenRA lockstep 仍 0.989、崩溃 case 照崩),确定性在 F1 修复后的复测里按 §7.2 一起做。 | runbook §5 的判别规则;设备时间省给 wave 2 复测与 CTS。 | E1-lockstep/README.md |
| ID-P7-18 | 2026-09-22 | F1 落地(5d698cb9):split 起会提到 MG_State::Init() 之前(InitSplitRolesBeforeState()),CapsMirror::ServerConsumes 不再从 placeholder 作答(他线程 bring-up 在飞时等 250 ms,否则 Fatal{CapsBeforeFirstSnapshot});批准 MG_Config::SplitTransportRequestedByConfig 作为该门的武装闩——任何绕过 MG_ConfigLoader::Init() 手设 Transport 再造前端对象的生产路径都会退回 placeholder 作答,今天只有 ServerLoopTest 这么做且写了理由。 |
发射者是确定性的(11 个默认纹理在起会前 resource_create),主机也发生;不做「把警告调轻 / callMask 全 1」。 |
MobileGL/Init.cpp、MG_Backend/Init.cpp、CapsMirror.{h,cpp}、ClientSession.cpp |
| ID-P7-20 | 2026-09-22 | wave 2-C 落地(04292f06..205793ca)并批准其五条:§5.4 白盒(opcode 49 上 wire)在 P11 采纳档落地前不可达,以「server 按表发布 + 镜像收到」为验收;g_programResourceCaches 的 monolith 删除归 P13(G1);buffer-window 家族词暂留 UnmigratedVerb(改 ProtocolCorruption 记 §12);vertex-layout 屏蔽原因是七种不是六种;死亡缺口是 server twin 泄漏而非 client slot 泄漏(framebuffer 用例两边计数)。p7_worktree.sh 补 MOBILEGL_ITEST_VK_ICD 钉。 |
各条理由见 notes/p7/magma-c.md。 |
CONTRACT-P7.md §3.2/§12、p7_worktree.sh |
| ID-P7-21 | 2026-09-22 | wave 2-A 落地(5a14e5a1..2f48ccf4)并批准:uniform-buffer-byte-tail 退役(外扩到字边界读进 staging,一次子字拷贝进 padded block);两处 native-range 钳制;三处 unaligned-*-range 与 texel-buffer-native-format 具名 decline(可写 range 的 copyback 不做——该站点分不出 readonly,且录制点在 B/C 的 draw/dispatch 尾;配方在 magma-a.md §3.1);两条算术不变量(*-offset-overflow)留作 hook 经过的具名 Fatal、不再带 @P7。审计写的「offset = alignment + 1」测试不可达(前端对非对齐 offset 报 GL_INVALID_VALUE),真正活的缺口是 glBindBufferRange(GL_ATOMIC_COUNTER_BUFFER, …, 4, 4)(GL 只强制 offset % 4)。 |
notes/p7/magma-a.md;@P7 树上只剩 B 的 5 处(WireFramebuffer.inc 4 + VulkanRenderer.cpp 1)。 |
UniformManager.cpp、F1WireScenario、CONTRACT-P7.md §3.2 |
| ID-P7-22 | 2026-09-22 | S1(IterationRPProgram203Scenario exposure texel 差一个)改判为环境敏感而非 tcp 专属:A 在未钉 ICD 的树上 inproc 也 3/3 红、pipe(钉 lavapipe ICD)inproc 绿、L 只在 tcp 红。记为 §12 债,归 P6.5 StreamLink × Magma 交叉项的主人(未派);helper 已钉 ICD 免再混淆。 |
三棵树三种结果,唯一变量是 ICD 配置与臂。 | CONTRACT-P7.md §12 |
| ID-P7-23 | 2026-09-22 | wave 2-B 落地五片(c5fa52f9..64530ed2):mip 形状拒绝半退役 + 具名、深度 mip 烘焙 (A)(D)、copy-image-in-place、default-color-blit(含 3D 源 blit 寻址 bug)、wire 回读竞态修复(OpenRA 真机分歧的机制,主机用 fence 计数 red-once,因为本机布局是 GENERAL 撞不上空 scope)。B 未做的三项(multisample-blit ×2、AllocatorDebtScope ×2、B′ 棘轮下降)另派 B2。WireColorBlit.inc / VulkanRenderer.h 在簇内顺手改,批准。 |
notes/p7/magma-b.md。 |
WireFramebuffer.inc、VulkanRenderer.{cpp,h}、WireDepthMipmap.*、scripts/bake_internal_shaders.py(若有) |
| ID-P7-24 | 2026-09-22 | wave 2-D1 落地(e35a0973..92f467ab):XFB 孤儿目标保留 varyings、回写事件按 EventRingCapacityBytes/4 切片、OnXfbScatterReady 删除(回调 10→9,ARCHITECTURE.md §8.1/§8.5 改成树的样子)、四个 resolver 在有传输时具名启动期 stop、readback 家族三臂武装(+39 例/臂)。readback 半边其实早已关:首跑 65/65,copy-image-shadow-mirror 自 P5b i1 起有传输 return,get-tex-image-shadow 从 wire 路径不可达(server 经 ReadTextureImageWire 答)——P3b/P4b 行的「readback 开」是从未在传输下跑过的假设,不是缺陷;仍改成 rule-I decline 作纵深防御。p7_worktree.sh 改为非递归子模块 + 显式 include/ska。 |
notes/p34b/espryt-d1.md。 |
DirectGLES.cpp、Managers.{h,cpp}、MGPipeCallbacks.h、ServerSession.cpp、CMake |
| ID-P7-25 | 2026-09-22 | W4 真机复验(p7w4 = 8c5dd6fc,device-window-1/W4-verify/):iterationt ×2 通过(B 的 mip 退役兑现);门 3 AFTER 矩阵 34/36 与 monolith 差 ≤ 0.0005,未过的只剩 OpenRA 与 bsl-esc-menu(inproc OOM,待 spawn 臂)。ID-P7-19 的「冷驱动缓存」读法撤回:16 遍显示 run-ahead 臂是与温度、IPC_AUDIT、FIF=1 都无关的每次约 50% 的竞态,且只产生两张图(ace2af04 = golden、fb75d412 = 14658 像素错,与 B 修复前逐字节相同);lockstep 确定性地给第三张 4e5ba514(0.988998 = E1)。B 的回读 fence 修复保留(真洞)但不是本分歧的机制。门 3 对 OpenRA 的验收改为 run-ahead 与 lockstep 各 6 遍全 ace2af04,冷热各半。归因交 B3(四镜头调查 + 裁判)。D2 落地时顺手:SubsystemDepsTest 在 pull 构建下调用 push-only 的 resolver 使 build-linux 编不过而 .so 陈旧、G1 看似恒等——门脚本改为对 linux build rc≠0 硬红(ID-P7-11 的第二次)。 |
16 遍的表在 W4-verify/README.md §3;目标调用 31249 是 glXSwapBuffers,快照在 swap 前经普通 glReadPixels 入流,present 是 class-B 记录,没有旁路。 |
W4-verify/README.md、CONTRACT-P7.md §7.2、SubsystemDepsTest.cpp、p7-gate-*-inner.sh |
| ID-P7-26 | 2026-09-22 | wave 2-D2 落地(9d857dc0..e7c5fc60 + pull 构建修复 6da19f71);fable 审查判「带修复落地」,修复 1/2/4(TUS 散点工作负载的 union box 盖满整层所以 rect=0 是几何不是 unpack-ring 策略——CoversWholeLevel;espryt_memo_purity.py 对改名家族 fail-open、LEGACY_MEMOS 默认 ON 的措辞、FRONTEND 无词界;普查数 71→72、+37→+76、每片 Gates 行)交 D2 返工一轮,修复 3(排除用例的契约行)由集成者记 §12。批准 D2 触及 MG_Pipe/*(SubsystemDeps.def、MGPipe.h 表)与 CONTRACT-P5.md:在 §9 D 簇清单之外,但正是计划 R-5/R-3 行点名的文件。审查确认:产品代码零 abort/Fatal/MGLOG 新增、MG_Backend/ 零触及、G1 恒等、SubsystemDeps.def 与 PipeFill.cpp:1487-1518 / 六个 resolver 逐行一致。 |
审查报告全文在 agent 记录;要点已入本行与 §12。 | TextureUploadShapeScenario.cpp、espryt_memo_purity.py、split-scenario-census.md、CONTRACT-P7.md §12 |
| ID-P7-27 | 2026-09-22 | bsl-esc-menu-854 不排除:monolith 807 MiB 通过、spawn 的 server 进程 ~1.2 GiB 死于 scudo internal map failure(client 543 MiB、系统余 8 GB)、inproc 1.6 GiB 死——wire 臂的内存缺陷(≈2.1× 字节或映射数上限),派 M1 归因(host 复测、逐 store 归因、泄漏/平台、max_map_count),修复包随归因定分区。 |
W4-verify/README.md §3c 的采样表;ID-P7-12 的规则是「monolith 自己红才排除」。 |
CONTRACT-P7.md §12 |
| ID-P7-28 | 2026-09-22 | wave 2-D3 落地(6eaaf492 de6fb063 25b586d0;其 8274dcab 与集成者的 6da19f71 重复,不取):view 陈旧缺陷取「谓词解析到 storage record」而非反向索引(删除顺序:反向索引要在 view 死亡时剪枝,否则 owner 上传会推到被回收给无关纹理的槽——静默跨纹理串号;且把可变状态放进两后端共读的 MG_Pipe);删除顺序由构造保证(TextureObjectView::m_storageOwner 强 SharedPtr,resource_destroy 在析构发出,TextureObject.cpp:63)。D-K2 「两处一行」实为六处读者,全部改读 SubsystemDeps.def,client 侧参数按 kMGPipeP4aFamilySubsystems 掩码(bit 8 的 vertex-input 发射归 P3a 规则,TextureEmit.EveryDKTwoDependencyRowGatesItsOwnFamilyAndTheMirrorPairsStayLive 抓到);批准「SubsystemDepsTest 从比两份副本变成比两个读者」的减弱,编译期一半(MGPipe.h:225/:230)承担。门:pull rc 0、.text 0xa52203、nm 0/0;unit 2426 / split 303 / spawn 219 / tcp 222 / magma 88/67/69 / full 530;census 79、ratchet 186、parity 0。门脚本模板自此对 linux build rc≠0 打 GATE-RED。 |
notes/p34b/espryt-d3.md;两处基线引文更正(KHR-GL46 非 GL43;texture_view 1/7 红是 view_sampling 不是 coherency)。 |
Managers.{h,cpp}、PipeFill.cpp、DirectGLES.cpp、SubsystemDeps.def、CONTRACT-P5E.md §5.2、CONTRACT-P7.md §12 |
| ID-P7-29 | 2026-09-22 | wave 2-D2 返工落地(3cdaa5ee ec56644f 623d6641 c13ba36b,叠在 D3 之上;SubsystemDepsTest 取 D2 版守卫 + 两条注记,split-scenario-census.md 与 D3 的附记手工合并):TUS 散点内缩后 gold 不变(emit=9 box=9 rect=0 jobs=9 四臂同)但对象对了——零补丁 red-once MOBILEGL_ESPRYT_DISABLE_UNPACK_RING=1 给 box=3 rect=6 jobs=183(两张散点纹理都动,26 像素例仍绿);顺带抓到 ASSERT_TRUE(clientWindow.found) 被「counters ON」横幅满足的假读,改为带 tex[] 的窗口;espryt_memo_purity.py 锚点/allow 活性断言后 6 条 allow 剩 1;+76/72 数字改正、每片 Gates 表。门:pull rc 0、G1 恒等、unit 2426 / split 303 / spawn 219 / tcp 222(F1WireScenario.TextureReadbackRejectsPackedDestinationOverflowBeforeWriting 首跑 1 红、rerun 绿——tcp 车道已知 flake 形状,非本包文件)/ magma 88/67/69 / full 530。 |
D2 报告;tcp flake 记 §12 的既有条。 | TextureUploadShapeScenario.cpp、PipeStatsWindow.h、espryt_memo_purity.py、test.yml、split-scenario-census.md、MEASUREMENTS.md §13.1 |
| ID-P7-30 | 2026-09-22 | D3 的 fable 审查判「带修复落地」,两处修复由集成者直接落在 pipe:(1) SubsystemDeps.def 第 1/6 行(bit 8 / bit 13 各 requires bit 7)自 D3 起是活行为、却无任何钉子(MGPipe.h 的 static_assert 只钉纹理行/程序行/0x7ff/0x1fff,SubsystemDepsTest 只扫四个 P4a resolver)——加两条 static_assert;(2) 「删除顺序由构造保证」的说法在常见情形下反了:m_storageOwner 是派生类成员、destroy 从基类析构发出,view 持有 owner 最后一个引用时 wire 上先 resource_destroy(owner) 后 (view),一次 apply 内 view 记录活着而 ViewOf 指向已释放槽——保证是 walk 的 Live/Gen 检查,不是顺序;Managers.h、CONTRACT-P5E.md §5.2、espryt-d3.md 三处改写,call-site 计数「五→四」改「四→三」。审查确认:门代数对非 view 逐字节同旧;G1 每处改动都在 PIPE_PUSH/BUILD_DISAGGREGATED 守卫内;red-once 在 tcp 臂真跑真红;引文(KHR-GL46、view_sampling)属实。批准 D3 改 CONTRACT-P5E.md §5.2(既非 R-5 也非 R-3,但是 D2 普查行点名的修正)。 |
审查报告;~/w7/pipe 上 range-diff 三个提交 =。 |
MGPipe.h、Managers.h、CONTRACT-P5E.md、espryt-d3.md |
| ID-P7-31 | 2026-09-22 | wave 2-B2 落地(089fd495 22c2687d 824eac05 ec46a550):multisample-blit-shape / -aspect 退役(scratch resolve + 第三套烘焙 resolve shader;MS 目的地与无臂采样数具名 decline),MagmaP7AllocatorDebtScope 两处删除(P7 基线只剩两处——P5e 裁定 12 的四处里 P5f fv/fm 已去两处;类型留作 RemoteClientTest 负控),(B′) disaggregated 构建的 monolith 臂改用烘焙模块,棘轮 186 → 173 重基线(p7-magma 101 → 88,余 88 = monolith draw 路径,按 ID-P7-5 留运行时分支、不标 # P13,归 wave 3)。@P7 拒绝站点归零(§3.2 六个退役全部完成 → 子系统分母 (2) 成)。门:pull rc 0、G1 恒等;unit 2429 / split 303 / spawn 219 / tcp 222 / magma 93/72/74 / full 533;census 79、parity 0。批准 B2 的「decline 的 GL 错误骑在后一次回复上、场景里 glFinish() 是承重的」记入 §12 作为 wire 错误归属的已知形状。真机待验:旋转面上的缩放 MS blit、Adreno 830 是否带 VK_KHR_depth_stencil_resolve(决定默认臂)、(B′) 烘焙 blit 几何在 ROTATE_90/180/270 下的等价(从未执行)。fable 审查:带修复落地——(1) tcp 臂的 MsResolve1 条目空转(knob 进的是 client 的 ctest ENVIRONMENT,tcp 的 server 是车道级 fixture 从自己的 os.environ 起,tcp_server_fixture.py:60-68;B 的 FORCE_SHADER_MIPMAP/FORCE_DEFAULT_BLIT_SCRATCH tcp 条目同病)→ 按 ID-P7-14 MAGMA_INPROC_ONLY 先例做 parity 例外只注册 split+spawn;(2) 翻转/缩放的 MS 深度/模板 resolve 仍 MagmaWireFatal("multisample-depth-resolve-region")(WireFramebuffer.inc:437-443)——颜色臂已处理翻转、深度却杀会话 → 缩放具名 decline、翻转逐行反向 copy-out;(3) 车道基线归因句改正(+4 = A 与 C 各 +2,都在 B 之前落地)。三项交 B2 返工一轮。审查确认:scratch 生命周期经 RetireWireObjects 标签正确、shader resolve 取样 0、无臂路径 decline 无 abort、B′ 每行在守卫内 pull 类布局不变、棘轮 13 去 + 5 重分类属实、bake --check fail-closed。§12 待记三条(缩放第二腿未裁剪、multisample-resolve-region 对超出读缓冲的源仍 Fatal、1→N 同矩形 decline 了合法形状)。 |
notes/p7/magma-b2.md。 |
WireFramebuffer.inc、WireMultisampleResolve.*、VulkanRenderer.cpp、scripts/data/link_ratchet_baseline.txt、CONTRACT-P7.md §3.2/§4.1 |
| ID-P7-32 | 2026-09-22 | bsl-esc-menu 归因(M1,主机复现):split server 无界累积死 VkBuffer(RespecifyWireBuffer 无条件 DeferRelease,桶只在帧界扫,pbuffer 回放整跑只 1 条 present)——派 M2(VkBufferManager.{h,cpp}:serial 门控回收 + MOBILEGL_IPC_WIRE_DEFERRED_MB 水位线 + spawn 臂 red-once);CollectGarbage() 在 wire 臂从不执行的次级发现待 B3 落地后路由(VulkanRenderer.cpp);「pbuffer 回放 server 只收 1 条 present」另查(若 client 对 pbuffer 面跳过 present 记录,与 ARCHITECTURE.md:531 的 1:1 相悖,且饿死 server 全部帧界维护)。40% 检查点 6/9 已过(§8)。 |
M1 报告;~/w7/p7-probe-m1 探针、~/w7/m1/ 采样器与序列。 |
CONTRACT-P7.md §8/§12 |
| ID-P7-33 | 2026-09-22 | wave 2-B3 落地(f62ceec6 214cb2eb c2c3ca49 6a92a10d 38112dc6,base 8c5dd6fc,叠在 B2 之上自动合并):OpenRA 真机分歧的机制按裁判 H1 由计数证实——wire 臂一个 frame serial 两次提交(S1 = 调色板 glTexImage2D 触发的 pooled-fence 中帧 flush,S2 = Present 携带 draw 与 staged 拷贝),OnSubmitsCompletedUpTo 逐记录 NotifyFrameSerialComplete 把 floor 提前到 N-1,帧 N 第一次 glBufferSubData 走 WriteWireBuffer:268 的无序 host memcpy 被 S2(N-1) 排队的拷贝盖掉;两种前缀 = 上一帧写入序列的后缀极大值(6696 = 31 quad × 216 B)。修复三片:(a) 32 处静默出口全部具名 + WireDeclines.def 计数(无新 abort/家族词,census 79 不变);(b) WriteWireBuffer 对仍有读者在飞的 buffer 一律走有序路径;(c) floor 只升到「无在飞记录仍携带」的可证 serial(#if MOBILEGL_BUILD_DISAGGREGATED)。计数 unsound-serial-complete monolith/inproc/spawn = 0/26/26 → 0/0/0;red-once F1WireScenario.StreamedBufferSubDataBeforeEachDrawIsOrdered Split+Spawn 2/4 红 → 4/4 绿;强制回放 8102/2115/152216 px 错图 → 全 ace2af04。未做(另派 B4):裁判的 WaitForSubmitsUpTo 聚合等待(三处单 fence 退休站点 Present:14094/WaitForSubmitIndex/WaitForFrameSerial,只在无 present 的 fence 循环里不健全)与 GPU-drag 旋钮(修复后无法变红,只能做回归门)。B3 自己的第一稿机制(每第 8 次 drain)被其探针否决(OpenRA 回放 1 次 drain、33 次 serial 推进全来自 Present)。镜头 A 的静默丢 draw 被独立否决(32 处出口计数全 0)。门:pull rc 0、G1 恒等、census 79、ratchet 173、parity 0;unit 2429 / split 303 / spawn 219 / tcp 222(首跑因上一次被杀的门留下两个 libMobileGLServer … 40613 --serve 占端口而 220 红,清理后重跑 222/222)/ magma 95/74/76 / full 534。真机验收(p7w5):OpenRA inproc+spawn × run-ahead+lockstep 各 6、dump-armed ×3、FIF=8 ×3 全 ace2af04;修复前错图应为 quad 前缀 K+1 ∈ {1,16,31,53}。 |
notes/p7/magma-b3.md;ID-P7-19/25 的两次改判到此闭合。 |
VulkanRenderer.{cpp,h}、VkBufferManager.{cpp,h}、VkTextureManager.cpp、WireDraw.inc、WireDeclineTally.h、WireDeclines.def、F1WireScenario.cpp |
| ID-P7-34 | 2026-09-22 | OpenRA 真机项关闭:p7w5(c89000f5,B3 之上)验收 27/27 golden——inproc / spawn × run-ahead / lockstep × 冷 / 热各 3、FRAMESINFLIGHT=8 ×3(p7w4 上 6/6 红)、dump-armed ×3(p7w4 上 0/5 绿),全部 ssim 1.000000 / 0 px / ace2af04;iterationt ×2 与 26.3 逐位同 p7w4(W5-verify/README.md)。B3 的 fable 审查「带修复落地」(tcp StaleSerial 条目空转 → parity 例外;floor 钳位无车道 → run_trace_case.cmake 对 split 回放里的 unsound-serial-complete 行打红;02bb5789 的注记把提交项当成修复且仍讲 drain 机制 → 改写、:273 加 IsSubmitIndexComplete(lastUseSubmitIndex)、:432 重打戳;WireDeclines.def 53 行里 12 行无站点、纹理站点只计数 → 补齐或删行)交 B3 返工一轮;审查确认 floor 算术对每种顺序精确、#else 逐字、无卡死模式,并否决裁判的次级「聚合等待」为非缺陷(fence 信号覆盖更早的提交序工作;B 的回读洞是相反形状)——B4 降为后续包(GPU-drag 回归门 + §12 债)。§12 新债:disaggregated 构建的 monolith 臂在中帧 flush 下比 pull 构建更健全(OnSubData 经 IsResourceBusy 读同一 floor),pull 构建保留该潜在 bug(G1,P13)。 |
门 3 分母 36 现在只剩 bsl-esc-menu(M2)与 §7.2 终局形式。 | W5-verify/、CONTRACT-P7.md §7.2 |
| ID-P7-35 | 2026-09-22 | B2 返工 r1 审查 = rework(fable)。r1 三提交(856aa7ab / 5d896170 / db6892ec → pipe 475ab254 / 3c4cd022 / 00f342c9)在 pipe 上门:G1 恒等、census 79、棘轮 173、parity 0、unit 2429、magma 96 / 75 / 72、full 535,但新用例 AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines 随 DepthStencilReadbackMatrixScenario.* 的整套注册落到 DirectGLES 三条 split 臂与两条 monolith 条目上而红。集成者实测 monolith DirectGLES 同红(翻转 resolve 后目的地仍是 0.5 清除值且无 GL 错、缩放 resolve 无 INVALID_OPERATION)= Espryt 行为,非 wire 缺陷;先按后端名 skip 的临时提交(3b66d1b1,八车道全绿)被审查推翻——DirectVulkan monolith 条目同样红(VulkanRenderer.cpp:9594 翻转矩形的深度 blit「not supported yet」、:9608 合法缩放):wire 臂现在比 monolith 臂更正确,skip 应按车道标记 MGITest::IsSplitLane() 而非后端名;临时提交已从 pipe 撤下(pipe 回到 00f342c9)。第二条 must-fix:逐行 VkBufferImageCopy 的 bufferOffset = row × width × texelSize 在 stencil(1 B)宽非 4 倍数或 D16 宽为奇数时违反 VUID-vkCmdCopyBufferToImage-pRegions-07978(scissor 裁剪产生任意宽度)→ 行距对齐 + stencil 腿 red-once。should-fix:§7 数字取自非祖先树(5d896170)、COLOR|DEPTH 缩放 blit 先写完颜色再拒深度的部分效应未陈述、X 与跨格式 Y 两种 decline 共用一个 MGLOG_E_ONCE;nit ×4(!dstSpan 静默返回、parity tail 必须匹配、MsFlip1. 旋钮孪生、:10066)。r2 已派。同日:六个在跑 agent 撞 session limit 全部死亡,按各 worktree 未提交 diff 重派为 claude-opus-5-5 单 agent workflow(Agent 工具的 opus 别名仍是 Opus 5)。 |
pipe 停在 00f342c9(DirectGLES split 三车道各 1 红)不推送,r2 落地后再门再推;§12 届时抄 B2 §6 五行 + 两条新行(monolith DirectVulkan 翻转 / 缩放 MS 深度 blit 是 wire-vs-monolith 分歧;Espryt 翻转 / 缩放 MS 深度 resolve 是 P3b/P4b 债)。 |
DepthStencilReadbackMatrixScenario.cpp、WireFramebuffer.inc、magma-b2.md §6 / §7 |
| ID-P7-36 | 2026-09-22 | B3 返工落地(pipe 23eeed68..8d1a7848 + 集成提交 a785d055),fable 审查 = land with fixes。 返工五提交:WireDeclines.def 53 行全部有站点、每站点一条 W/E(新审计 scripts/ci/wire_declines_audit.py 进 CI);StaleSerial. 只注册 split+spawn;注记改写(floor = 保证、提交项 = 探针)+ WaitForWireBufferHostAccess 早返回兼看 IsSubmitIndexComplete(lastUseSubmitIndex) + ReadWireBuffer 等待后重打戳;run_trace_case.cmake 对 split 回放里任一 MGWIRE-FLOOR unsound-serial-complete 行打红(包树上撤钳位 → inproc/spawn 各 26 行红,恢复 → 0 绿)。集成合并裁定:B3 的 MAGMA_NOT_OVER_TCP 与 B2 的 MAGMA_SERVER_ENV_KNOB_NO_TCP 是同一形状 → 只留 B2 的机制(compare_arms(no_tcp=) / CMake mglItestServerEnvKnobArm),.StaleSerial. 入同一张表;冲突外残留的一行 not_on_arm = not_on_arm or {}(首次运行即 NameError)删除。pipe 门:G1 恒等、census 79、棘轮 173、parity 0、unit 2429、magma 96 / 75 / 71(tcp 少 1 = StaleSerial 条目退出)、full 535、审计 53/53/0;OpenRA DirectVulkan inproc + spawn 回放(B3 树的 replay exe + pipe 的库与 runner)ssim 1.000000 / 0 px / 0 条 unsound-serial-complete —— 新红条件在 pipe 上武装,并入后续每个包的门(~/w7/logs/pipe-retrace.sh)。审查修正(已派 B3 修复轮):must-fix 审计把注释 / 字符串里的站点当真(剥注释与字面量);should-fix 8 行窗口不看分支(按缩进块回溯)、无 --self-test 负控、run_trace_case.cmake 在 spawn 的 server 日志缺失时读作 0 行 = 绿(补 fail-closed)、注记 §5 数字未标「包树」;nit ×3;§12 新债:WaitForFrameSerial 在钳位后对同 serial 的后续记录会先返回 true 而 IsFrameSerialComplete 为 false(调用方复查 → 今日退化为伪超时;B4 修)。 |
不阻塞推送;修复轮作为新提交叠加。V1 五提交已 cherry-pick(e5477898..51c71d87,尾注统一为 Fable),门 + 审查在跑;pipe 的 verify 构建(build-verify,MOBILEGL_PIPE_VERIFY=ON)首次配置以跑 integration-verify{,-split}。 |
wire_declines_audit.py、run_trace_case.cmake、VkBufferManager.cpp、magma-b3.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 |