Files
MapLibreParticleLab/docs/报告/STEP-119_Symbol缓存_Codex完成报告_v1.md
tei 3d989a00a8
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
feat: admit settled Symbol render results to retained cache
2026-10-11 16:47:21 +09:00

9.9 KiB
Raw Permalink Blame History

STEP-119 Symbol缓存 Codex完成报告 v1

日期:2026-10-11(JST)。结论:IMPLEMENTED_WAITING_ANDROID。Shared Core实现与13项非Jest测试源码已完成;Native可编译性、测试运行、真实R Build/Reuse/Fast和视觉结果均未验收,不能写全任务PASS。现阶段立即交RDC独立审计与验证。

1. 真实执行环境与授权

  • 仓库:/Users/tei/dev/MapLibreParticleLab;Mac.lan,Darwin24.6.0,x86_64。
  • 分支:particle/main;开工/交付HEAD均为869930046b11dbeb3b147e3be952a2e847316292,本轮没有Git提交或push。
  • 实际模型/推理档位:gpt-6.1-sol / high,来自本会话rollout的turn_context核实,未升级、未启动子代理或另一个Codex实例。核实文件:/Users/tei/.codex/sessions/2026/10/11/rollout-2026-10-11T15-20-51-01a1299f-0c2b-78b0-8599-e50812c108dd.jsonl。
  • Native版本仍13.6.1-particle.23,未更改发行坐标。Integration本地HEAD80667d6c343411d03a760425438e3d292f452118;已读取当前全部要求的协作规则/协议,只读,无跨仓写入。
  • 当前任务仅内部Renderer实现、两个已登记测试文件与四份中文文档/开发记录。禁止的构建、设备、Jest及Git写操作全部未执行。

2. 已实施的行为

原死锁是多个条件共同导致:新Placement令changed=true、recent令stale/hasTransitions=true、已结束fade通常>=1,并且global/perSegment/preparedScene存在独立阻断。本轮实现最终绘制输入证书,没有只改单个布尔条件。

正常Full保持原全场Placement/crossTile碰撞、updateLayerBuckets、动态/opacity/paint顶点、processChanges和原Style语义。先运行原生Symbol tweaker及上传,核查UBO容量、共享属性GPU背板与非dirty索引,再复制实际UBO、Drawable绑定属性、text/icon索引与segments/排序、wrap tile、atlas/texture/shader身份、实际混合/剔除/深度状态、全局组数/ordinal和原注册关系。精确字节比较不以placed布尔或hash代替GPU输入。

同绑定、同settled输入与上一成功提交Full相等时准入首次Build;成功present/endFrame及再次复核后,建立匹配Build revision。下一成功Full Reuse之后才Fast。Full Reuse也检查精确candidateHasBuild,防止组合revision碰撞借旧结果。普通Full替换旧prepared tree保留复制证据;真实reset仍清空。global稳定性、perSegment Gate和preparedSceneSupported全部接入同一证书。

新增内部hasActiveSymbolFade区分刷新stale与真实fade,旧hasTransitions继续用于正常刷新。GL/Metal原生opacity clamp逐顶点检查,未结束fade/异常packed值拒绝;Fast保留被认证的Full fade值。只有实际编译的原生GL/Metal Symbol源码及合法uniform宏才能登记shader来源,名字相同的未知shader拒绝。

Source/style/tile/glyph/image/atlas/camera/viewport/pixelRatio/context/Annotation/update signature、ready与异步epoch保护继续保留;补上Glyph requested/error、Tile/Symbol error。注册/绘制错误推进error/content代次;上传/编码/提交异常清旧缓存和证书后原样抛出。未知Symbol类型须原生typeInfo身份一致;pending/旧隐藏组/collision额外组/不可读或超16MiB输入均保守拒绝。原24Gate evaluator、顺序、mask、诊断公开结构和计数判据未修改。

3. 实际修改文件(共25个)

文件 变更用途
src/mln/renderer/symbol_render_result.hpp(新增) 精确输入、合法fade终点、绑定、完成Full/Build/Reuse证书
src/mln/renderer/symbol_render_inputs.hpp(新增) 实际vertex/instance属性字节与不可变buffer身份
src/mln/renderer/symbol_shader_provenance.hpp(新增) 原生shader来源及uniform宏白名单
src/mln/renderer/layers/render_symbol_layer.hpp 内部结果采集入口与原group身份
src/mln/renderer/layers/render_symbol_layer.cpp 原生Symbol实际Drawable/Bucket/Atlas/索引/绘制状态取证
src/mln/renderer/layers/symbol_layer_tweaker.hpp 实际UBO证据与执行帧记录
src/mln/renderer/layers/symbol_layer_tweaker.cpp 复制实际上传字段,覆盖consolidation两路径
src/mln/text/placement.hpp 内部真实fade查询声明
src/mln/text/placement.cpp 真实fade查询,保留原stale/placement频率
src/mln/renderer/render_orchestrator.hpp 内部采集/error代次与visitor错误失效
src/mln/renderer/render_orchestrator.cpp registry/source/global取证、真fade与异步epoch
src/mln/renderer/renderer_impl.hpp 证书容器及独立完成signature
src/mln/renderer/renderer_impl.cpp 上传后准入、global/perSegment/prepared/Fast、Build/Reuse/完成复核
src/mln/renderer/renderer.cpp 普通Full保留证据,逃出编码/提交异常清缓存
src/mln/renderer/render_tree.hpp Fast保留认证fade参数
src/mln/shaders/gl/shader_program_gl.cpp 原生GL编译来源薄接入
src/mln/mtl/context.cpp 原生Metal源码/entry/宏薄接入
src/mln/shaders/mtl/shader_program.cpp Metal来源生命周期撤销
test/renderer/retained_underlay_cache.test.cpp 新增9项Step119SymbolResults
test/renderer/render_orchestrator_error.test.cpp 新增4项Step119SymbolResults
docs/20_调查/STEP-119_Symbol结果证书与R缓存Build实现依据_v1.md(新增) 生命周期、不变量、反例、限制
docs/50_Step记录/STEP-119_Symbol缓存实际实现_v1.md(新增) 本阶段状态、已做/未验与下一步
docs/60_测试/STEP-119_原PBF_FAST实机联合验收计划_v1.md(新增) RDC精确命令、来源锁、正负场景/失效/视觉矩阵
docs/报告/STEP-119_Symbol缓存_Codex完成报告_v1.md(新增) 本报告
粒子开发记录.md 仅末尾追加STEP119中文记录

没有修改include公开API头、RN/JNI/ObjC/Java/Kotlin、正式PBF/Style/URL、STEP118派生场景、Integration协议、天气层或Core-owned timeline/playback。未修改测试登记/build规范、验证器、STEP110/111任务书、历史报告与ignored原设备证据。

4. 已执行检查与结果

  • 仓库/Integration规则、当前源码/任务与STEP112–118关键证据阅读;实际branch/HEAD/status/version、模型turn_context核实。
  • 轻量静态接线复核:Full/Build/Reuse/Fast、原24Gate、SourceRevisionBook、GL/Metal source与clamp、reset/error路径、测试登记与验收命令。
  • git diff --check:exit0;这是空白检查,不是C++编译或测试。
  • 13项新增TEST源码静态计数,两个文件已有CMake登记;实际共享CPU vector无GPU背板/已release无背板反例纳入失败测试;未修改STEP117/118既有断言。
  • 静态文件范围、开发记录仅追加、公开头/Style/设备证据及两个保护任务书哈希核查。具体保护SHA见下节。

本轮未执行CMake/Ninja/Native编译、fsyntax-only、GTest、Metal/iOS运行、Gradle/APK构建、ADB安装/设备命令、Bazel/codegen、Jest、commit/push或网络远端HEAD回读。没有新的APK/设备SHA、GPU fence、截图或计数结果;没有凭进程退出或静态检查声称PASS。未产生新的编译/测试失败日志;旧libuv环境问题仅作为历史限制。

5. 原证据与保护边界

STEP118旧真机事实:原63→派生62基础Layer+天气2=Native64,R[0,62)、C[62,64),missingSourceIds=[];fallback=static-placement,Build0/Reuse0;90.00806697399821秒FastDelta0/FullDelta942、24Gate mismatch0。旧APK源3051196054c7b69815c298040dae61d26499d9f2,SHA44afcfabe0cf4f1ec93f35899241bd73093aa6db4b5cb82ca2120dd531b8f3e9。这些是旧失败证据,不能改写成本轮成功。

只读保护文件 SHA-256
未跟踪STEP110任务MD 33037df71b4b30aa7956d59f4b99f77af3085405b24111bc0fe11ec857a93db0
未跟踪STEP111任务MD f3a5806f25384bf46055db2edfea0d21bfbc4124184bc813b46e38b8079c1ec4
artifacts/maplibre-particle/android-validation/step113-retest-20261011_140448/static_rc_no_tide/result.json d3d20fc35bbd17e9f0ea0dd014ca4af8e0c5c5284d9f0c009bc20981d876ff10
同目录screen.png c8b57a8432626c9209ca9a614a747728d4256bd09273b28c26a793a75a6d44d4

6. 未验收、阻塞和RDC交接

  • 当前源码尚未由RDC独立审计/锁定。现有verifier要求tracked clean以及APK来源HEAD/本地与设备SHA一致,会对当前dirty报SOURCE_NOT_LOCKED;这不是本轮已运行报错,而是读取代码确认的预检。Codex无commit/push授权,不绕过保护,Git收尾由RDC在其明确阶段授权内scoped负责。
  • 所有新增C++代码/13项测试仍NOT COMPILED/NOT RUN。状态机fixture的手工Build标记、模拟payload/CollisionGroups不等于真实Symbol GPU、碰撞或像素等价,必须另跑真实路径。
  • Android原STATIC_RC_NO_TIDE Build>0/Reuse>0/FastDelta>0尚未证实;原63缺tide负对照仍应拒绝。Source/Style/相机/异步/Annotation/Context矩阵与Full/Fast视觉全部待证。
  • Metal/iOS实际source/UBO/instancing路径尚未验证;Vulkan/WebGPU无本轮provenance登记,Symbol缓存继续保守拒绝,普通Full不变。
  • 16MiB输入上限、数据量、取证CPU/内存成本、真实异步竞态与平台GPU完成仍是待测限制。超限或缺证明继续Full,不能调低验收判据制造通过。

RDC先读本报告/实际diff,按联合验收计划锁源码并执行准确命令:macos-metal配置、mbgl-test-runner编译、13项发现与定向GTest;Android GL真实编译参数核查。通过后集中一次标准APK流水线/install,以显式serial 192.168.200.139:5555验证STATIC_RC_NO_TIDE至少90秒、真实R Build/Reuse/Fast与120帧24Gate mismatch0,再做原63负对照及变更/视觉矩阵。

RDC须保留新锁定HEAD、本地APK/设备SHA、命令/exit/耗时/日志、测试数量、Layer/Source/R/C清单、Build/Reuse/Full/Fast区间增量、完整24Gate快照、截图与用户视觉结果。失败保存首个真实错误/现场,最多5轮当前Step修复,不跳后续阶段。源码交付到此停止;独立验收尚未完成。