Files
MapLibreParticleLab/docs/50_Step记录/STEP-119_SymbolRetained生命周期修复_v1.md
tei 343ca2fa68
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
fix: secure Symbol Retained drawable lifetime and record investigations
2026-10-12 23:27:06 +09:00

4.4 KiB
Raw Blame History

STEP-119 SymbolRetained 生命周期修复 v1

日期:2026-10-12(JST)。Step 状态:进行中。代码交付:IMPLEMENTED / WAITING_RDC_VALIDATION。这是此前中断任务的续作;不关闭整体 STEP-119,不构成编译、GTest、GPU 或设备验收 PASS。

目标与基线

按照 /tmp/fzg1_astra_guidance_20261012.md 修复内部 Symbol Drawable 的 RenderTile 同源绑定、旧 Drawable 更新及 Bucket/Atlas 更换生命周期;保留原缓存、证书和 Full → Build → 成功 Full Reuse → Fast 顺序。

  • 机器:Mac.lan / Darwin 24.6.0 / x86_64;仓库:/Users/tei/dev/MapLibreParticleLab。
  • 开工及交付分支:particle/main;HEAD:badb515d590fbdf221751b6677de3da0a5650d7e。未切换分支/worktree,未提交或操作远端。
  • 接续已有四个源码修改;起点另有受保护 STEP-110/111 两份未跟踪任务书。
  • 用户本轮明确指定模型 GPT-6.1 Sol High(gpt-6.1-sol / high)。当前工具未提供执行器模型元数据,且本机当日 sessions 目录不存在,无法独立核验实际运行参数;不宣称已从日志核实,没有主动切换模型或启动子代理。
  • 当前发行锁为 Android/RN 13.6.1-particle.25、iOS 6.29.0-particle.25,构建冻结源 f32f6f45fd359007e8b3c77911b66d9e7fc93848;本修复不改 Source Lock/发行物,不声称已进入 v25 制品。

必做项

  • 读取 Astra 指导、AGENTS、PARTICLE_BASELINE、规范、四份当前总则、当前 STEP-119 任务/实现/测试资料,核对现有四文件 diff。
  • 同次 source prepare 获取 raw owner 和 Y 排序引用列表;仅比较地址完成同源校验,再复制当前 ID/atlas。
  • 同 Bucket/Atlas 的完整 tile/pass 组先检查,再全部重新绑定当前 owner/RenderTile;不逐帧重建 Drawable/tweaker。
  • Bucket/Atlas/组内成员失配或缺 atlas 时移除整组,走原创建路径;Text/IconRGBA/IconSDF/Halo 使用同一 atlas 与实际 tweaker 配对。
  • Retained 使用内部强引用 atlas 和当前地址映射,不沿旧 Drawable 裸指针读取 atlas/Tile;缺证立即 complete=false。
  • 保活 RenderTile → renderData → LayoutResult 的证据资源,不把每次 prepare 的 owner 地址写入比较字节。
  • 编写并静态核对 13 项 SymbolRetainedLifetime GTest 源码,修正 atlas-only TileRenderData 查询默认 assert 的测试替身缺口。
  • 中文 Step、完成报告及开发记录末尾追加;四源码路径 scoped diff 空白检查 exit0。
  • RDC 实际编译/链接并发现、运行生命周期与 STEP-119 定向 GTest。
  • Android OpenGL、Metal 实际路径验证与 Vulkan 编译兼容性证据。
  • 新源码锁/APK/SO 身份闭环、FZ-G1 动态生命周期、原24Gate、Full/Fast 视觉及释放验收。

修改范围与当前结果

生产修改限 src/mln/gfx/symbol_drawable_data.hpp、src/mln/renderer/layers/render_symbol_layer.cpp、src/mln/renderer/layers/render_symbol_layer.hpp;测试限 test/renderer/retained_underlay_cache.test.cpp。沿用此前修改,续作只补未知 Symbol 类型拒绝、测试替身空查询覆盖、Text/Icon/SDF/Halo 连续 prepare 稳定性与证书资源释放检查。

未改 RN/JNI 公共 API、原24Gate/证书判据、Placement、缓存开关、发行物、Integration、旧报告或两份保护任务书。未运行 CMake、编译/链接/语法编译、GTest、Gradle/APK、ADB/安装、Jest;没有新制品或设备数据。

阻塞与下一步

实现已落盘,可编译性与运行正确性仍待 RDC。现 verifier 会拒绝 tracked dirty,后续 Git 来源锁须在独立审计和另行授权后处理;本轮禁止 Git 收尾,不能绕过 verifier 或借旧 APK。历史 Metal/libuv 缺口未重新验证,不安装升级依赖。

RenderTile 容器不拥有底层 Tile&;强引用 atlas/texture 也不能证明原地像素或槽位不变,继续依赖既有 content epoch 和真实绑定复核。原始寄存器 tombstone 缺失,不能断言 0x8cdc7c 唯一根因为本缺陷;保留原 SO Build ID 485459ba44f806ef0a0c08633c717bfd5d82ad8f 与匹配符号交 RDC。

准确命令、测试覆盖限制、停止门槛和交接证据见 本轮完成报告。Codex 到此交接,RDC 独立审计后逐条验证;失败保留首错与现场,不放宽条件。