166 KiB
粒子开发记录
2026-09-19 — STEP-085 V4 Renderer cadence 与稳定资源复用
- V4 WeatherColor 不再因无 legacy timeline 永久 repaint;Particle 改用 Source-owned shared cadence gate,30/60 的 simulation 仅在 deadline 推进,PAUSE forecast 不冻结可见粒子 visual simulation。
- V4 materialized T0/T1 改为 immutable shared handle,renderer prepare 不再按 frame 深复制大 snapshot;WeatherColor 稳定状态复用 drawable,动态 UBO 参数不触发重建。
- Android/iOS Runtime 只为 V4 30/60 future frame 提供 wake;deadline/推进仍由共用 C++ Core 决定。ForecastClock production advance owner 未找到,未擅自创建第二播放时钟。
- 收尾自审把 wake 条件收紧为“particle binding 对应 fieldKey 已 accepted submit”;clear 无关 field 不影响仍然 ready 的粒子,disable 后 re-enable 可重新启动既有 V4 field 的 wake。以上仅静态审计,Android/iOS 编译留给 RDC。
- 新增 DEBUG/Validation counters。仅完成静态检查;Native/Metal/Android 编译、artifact 与设备性能验收均等待 RDC。
2026-09-19 — STEP-084 正式粒子速度着色默认关闭
- 正式
RasterParticleLayer与初始ParticleGpuResources的speedColorEnabled默认值均改为false,使未显式配置时严格使用宿主particleColor,避免内置高速橙红色带在首次资源创建前覆盖粒子颜色。 - speed-color shader 分支、公开 Core setter 与 Android Validation UI 显式开关均保留;
Layer.RasterParticleVisualProperties覆盖默认 OFF → 显式 ON → 再 OFF。 - Codex 仅完成源码静态审计和
git diff --check,未执行 Native 编译、链接、artifact、设备或真机验证;颜色验收将与 STEP-085 renderer 性能修复由 RDC 统一进行。
2026-08-27 — STEP-000
- 建立正式 Ubuntu MapLibreParticleLab 工作目录。
- MapLibre core:18545ca10d296704b2cba675b182ff2c8da24588
2026-08-28 — STEP-000 环境基线冻结
- Ubuntu 24.04 x86_64 MapLibreParticleLab 主开发环境建立完成。
- Linux OpenGL Native 构建通过。
mbgl-render构建通过。mbgl-render-test-runner构建通过。- Android OpenGL Debug
apackage构建通过。 - Android Vulkan Debug
apackage构建通过。 - OpenGL/Vulkan AAR 均包含 arm64-v8a、armeabi-v7a、x86、x86_64 的
libmaplibre.so。 - Vulkan Debug AAR 同时包含 Khronos Validation Layer。
- Android SDK 路径已通过
ANDROID_HOME与local.properties固化。 - 下一步进入 STEP-001:MapLibre Native 粒子接入点只读调查。
2026-08-29 — 10_架构调查
- 按
docs/40_任务/10_架构调查指令书_v1.md完成只读架构调查。 - 确认当前仓库是 MapLibre Native monorepo,不是 React Native 应用;确认 Android 13.4.1、iOS 6.28.0 和共用 Core 渲染链。
- 确认 Android OpenGL/Vulkan、iOS OpenGL/Metal、Core CustomLayer/gfx、Camera/Matrix、帧驱动和线程边界;粒子 fixture 目前只有空目录占位,暂无粒子运行时代码。
- 生成
docs/20_调查/10_架构调查报告_v1.md和docs/报告/10_架构调查_Codex完成报告_v1.md。 - 本次未修改生产代码、原生工程、依赖或项目总则;遵循用户要求未自行创建或修改 Step 文件。
2026-08-29 — 20_架构设计
- 按
docs/40_任务/20_架构设计指令书_v1.md完成第一版正式粒子系统总体架构设计。 - 生成
docs/10_架构/20_粒子系统总体架构设计_v1.md和docs/报告/20_架构设计_Codex完成报告_v1.md。 - 正式主路线冻结为独立 Core
RasterParticleLayer/RenderRasterParticleLayer+RasterArraySource+ 隔离mbgl::particle模块,进入 Style/RenderTree 并使用 MapLibre gfx;CustomLayer/CustomDrawable 不作为产品主宿主。 - 冻结 WeatherColor/Particle 分层、Field/fixture contract、Wind GLOBAL、海洋场 OCEAN_ONLY 共用 Mask、MapLibre frame driver、同帧 Camera Matrix、GPU resource/context-loss 和平台薄接入原则。
- 下一阶段选择
30_最小技术验证,集中验证独立 RenderLayer、OpenGL/Vulkan ping-pong/trail/context、Camera/wrap/Mask 和 iOS 薄接入。 - 最终 FPS、最大粒子数、最佳 texture format、生产 Mask 来源、真实天气协议和生产 Host API 仍未确认。
- 本次未修改生产代码、依赖、构建配置、项目总则或 Step,未运行构建/测试。
2026-08-29 — 30-01 Core RenderLayer 接入验证(阶段 A)
- 按
docs/40_任务/30_01_CoreRenderLayer接入验证指令书_v1.md完成最小验证代码准备。 - 新增 source-less
ParticleValidationLayer/RenderParticleValidationLayer,经正式 Style/LayerManager/RenderTree/LayerGroup/translucent pass 链接入;代码明确标记VALIDATION ONLY。 - 新增默认 false 的 RenderLayer repaint hook;ACTIVE 通过 MapLibre 自身
needsRepaint → Map::onUpdate → Android requestRender链持续帧,STATIC 停止验证层额外请求。 - 验证 Drawable 在真实 pass 内读取当前
PaintParameters/TransformParameters/TransformState的 viewport、zoom、bearing、pitch 和 projection matrix 摘要。 - Android Test App 新增
Particle Core Layer Validation页面,提供 ACTIVE/STATIC 切换和蓝/黄普通 Style Layer 顺序参照。 - Linux OpenGL 重新配置通过;本任务新增/直接修改的 5 个 Core 对象精确编译通过。全量增量因公共头触发 321 个对象重编译,在 41/321 无错误时主动停止,未宣称全量 PASS。
- 遵循指令书未运行 Android/Gradle/npm/ADB;等待用户手工 Android OpenGL 编译、运行、手势、resize 与日志证据。
- 当前结论为
WAITING_MANUAL_VALIDATION;不得进入下一项 GPU ping-pong/Trail 验证。
2026-08-29 — 30-01 Core RenderLayer 接入验证(阶段 B 修复轮次 1)
- 用户 Android OpenGL 实机日志暴露
RenderParticleValidationLayer::update()的 DrawableBuilder 生命周期错误:当前 Drawable 未完成就调用clearDrawables(),RenderThread 随后触发 SIGSEGV。 - 对照
DrawableBuilder::flush(context)与仓库既有 Drawable 使用方式,在clearDrawables()前补充builder->flush(context),使 custom validation Drawable 完成后再转移给 LayerGroup。 - 未以空指针判断跳过 Drawable;Tweaker 仍必须进入真实 translucent render pass 并读取同帧 Transform。
- Linux OpenGL 对应目标对象编译通过;C++ 格式和
git diff --check通过。 - 未运行 Android/Gradle/npm/ADB,等待用户在新提交上重新手工编译和实机运行。
- 当前结论仍为
WAITING_MANUAL_VALIDATION;未扩大到粒子、GPU ping-pong、Trail、Mask、Vulkan 或 iOS。
2026-08-29 — 30-01 Android Test App APK 版本标识
- 在 Test App 主菜单列表顶部增加当前 APK 构建身份显示。
- 显示
versionName/versionCode、renderer flavor、build type 和构建时 Git revision 前 10 位,均来自 BuildConfig,不写死版本。 - 版本条用于人工验证时区分旧 APK 与当前源码构建,避免只凭安装时间或文件名判断。
git diff --check与 Android XML 标准库解析通过;按用户要求未执行任何编译。- 等待用户手工构建、安装后确认设备端显示。
2026-08-29 — 30-02 GPU Ping-Pong 与 Context Recreation(前置阻塞)
- 开始执行
docs/40_任务/30_02_GPU_PingPong与ContextRecreation验证指令书_v1.md并首先检查硬前置门槛。 - 30-01 最新技术报告与完成报告均仍为
WAITING_MANUAL_VALIDATION,不存在正式 PASS 记录或 PASS commit。 - 按 30-02 指令书第 2 节停止:未创建 State A/B、Trail A/B、RenderTarget、Shader、ping-pong、generation 或 context recreation 验证代码。
- State A/B、Trail A/B、gfx 同步、resize、disable/enable 和 context recreation 均未验证,无 PASS/FAIL 技术结论。
- 当前 30-02 状态为
BLOCKED;不允许进入 30-03。 - 阻塞报告:
docs/60_测试/30_02_GPU_PingPong与ContextRecreation最小技术验证报告_v1.md。 - Codex 完成报告:
docs/报告/30_02_GPU_PingPong与ContextRecreation验证_Codex完成报告_v1.md。
2026-08-29 — 30-01 Core RenderLayer 接入验证(用户验收 PASS 回填)
- 用户已完成 Android OpenGL 构建和
Particle Core Layer Validation实际运行验收,明确确认结果为 OK/PASS。 - 30-01 正式状态由
WAITING_MANUAL_VALIDATION更新为PASS;Core RenderLayer 接入、ACTIVE/STATIC repaint、同帧 Transform 及 pan/zoom/bearing/pitch/resize 验证范围均由用户确认满足要求。 - 本次只回填验收状态:未重新修改 30-01 代码、未重新编译、未重新运行 Android、未执行 ADB。
- 30-01 正式完成,允许重新开始 30-02。
- 30-02 v1 的
BLOCKED历史记录继续保留;它反映当时 30-01 正式 PASS 尚未回填,不代表 GPU/gfx 架构验证失败。
2026-08-29 — 30-02 GPU Ping-Pong 与 Context Recreation(阶段 A)
- 30-01 正式状态为
PASS,此前 30-02 v1 的历史BLOCKED前置原因已解除;开始重新执行 30-02 指令书。 - validation-only State A/B 已使用两套固定尺寸独立 GPU RenderTarget 实现;每帧 read/write 反向选择,无 CPU 完整状态复制。
- Trail A/B 已使用两套 viewport 尺寸真实 RenderTarget 实现 previous fade/marker → next,并把 next 合成到 MapLibre 主 translucent pass。
- 静态确认只注册当帧 write target,read target 不作为当帧附件;RenderTarget 顺序为 State → Trail,主 pass 后续 composite,slot 在 composite Tweaker 到达时提交。
- resize 只重建 Trail A/B 并保留 State A/B;disable/remove 会停止并释放或重置资源;context lost 记录旧 generation discard,新资源使用递增 generation。
- 复用
Particle Core Layer Validation,保留 ACTIVE/STATIC 并增加 DISABLE/ENABLE;没有修改通用 gfx API、正式粒子、Mask、Vulkan 或 iOS。 - 静态格式、JSON、shader 注册链与 diff 检查通过;遵守用户要求未编译,未运行 Gradle/Android/ADB。
- 当前状态为
WAITING_MANUAL_VALIDATION:State/Trail 实际 GPU 交替、OpenGL 同步、resize、disable/enable 和真实 context recreation 均等待用户手工运行证据。 - 不允许进入 30-03;若无法确认真实 context recreation,最终应按指令书标记
BLOCKED。 - 技术报告:
docs/60_测试/30_02_GPU_PingPong与ContextRecreation最小技术验证报告_v2.md。 - Codex 完成报告:
docs/报告/30_02_GPU_PingPong与ContextRecreation验证_Codex完成报告_v2.md。
2026-08-30 — 30-02 T3 STATIC freeze 实机缺陷修复
- 用户 Android OpenGL 手工验证确认:STATIC 静止时 State/Trail 停止,但 STATIC 拖动地图触发 MapLibre redraw 时仍继续推进,停止拖动后再停止;原 T3 正式判定为 FAIL。
- 原因是
needsRepaint=false只停止 validation 主动请求帧,而原update()在地图手势帧中仍无条件注册 State/Trail RenderTarget、设置 pending,并由 composite Tweaker提交 slot/frame。 - 最小修复在
RenderParticleValidationLayer增加 STATIC frozen-composite 路径:地图主 pass 仍正常 redraw 并显示最后 commit 的 Trail,但不注册离屏 target、不执行 State/Trail update、不 fade/加 marker、不 swap、不增加 simulation frame/index。 - STATIC 下不因 resize 重建/清空 Trail;恢复 ACTIVE 后才继续原 ping-pong 与 resize 生命周期。
- 仅修改 validation RenderLayer
.cpp/.hpp和本轮文档;未修改 Test App、shader、通用 gfx、正式粒子、Mask、Vulkan 或 iOS。 - C++ 格式、diff 与 GPU scheduling/commit 静态控制流检查通过;按用户要求未编译,未运行 Android/Gradle/ADB。
- 修复后的 T3 等待用户在 commit
364b8f381e27eee36c4895084b2f0578a023fa61上重新手工验证;30-02 总体状态仍为WAITING_MANUAL_VALIDATION,不允许进入 30-03。 - 技术报告:
docs/60_测试/30_02_GPU_PingPong与ContextRecreation最小技术验证报告_v3.md。 - Codex 完成报告:
docs/报告/30_02_GPU_PingPong与ContextRecreation验证_Codex完成报告_v3.md。
2026-08-30 — 30-02 Android Rotation 状态恢复定向修复
- 用户确认此前 STATIC 的 pan/zoom/bearing/pitch 手势回归已经通过,DISABLE / ENABLE 正常;但旋转导致 Activity recreation 后 STATIC 错误恢复为 ACTIVE。
- 根因是 Test App 没有将
active/enabled写入 Bundle,且onCreate()无条件恢复 ACTIVE + ENABLED 并重置 camera。 - 仅在
ParticleCoreLayerValidationActivity.kt新增 Bundle key、保存/恢复 validation control mode;recreation 复用恢复后的统一loadValidationStyle(),且只在首次进入设置默认 camera。 - 未修改 Manifest、C++、gfx、RenderLayer、shader、GPU ping-pong、GPU 状态、Gradle 或依赖;未使用 configChanges、方向锁定、SharedPreferences、全局变量或 GPU 序列化。
git diff --check与状态控制静态检查通过;按要求未运行 Gradle、Android 编译或 ADB。- R1 STATIC、R2 ACTIVE、R3 DISABLED rotation 与 R4 STATIC gesture 回归等待用户实机验证;30-02 保持
WAITING_MANUAL_VALIDATION,不允许进入 30-03。 - 技术报告:
docs/60_测试/30_02_GPU_PingPong与ContextRecreation最小技术验证报告_v4.md。 - Codex 完成报告:
docs/报告/30_02_GPU_PingPong与ContextRecreation验证_Codex完成报告_v4.md。
2026-08-30 — 30-02 正式关闭(EGL Context Recreation Accepted Risk)
- 用户已完成并确认 30-02 的 Android OpenGL 实机结果;ACTIVE/STATIC、GPU ping-pong、STATIC 手势冻结、DISABLE/ENABLE 与 rotation control-mode 恢复纳入正式结论。
- 30-02 正式状态为
PASS,并正式关闭;允许进入 30-03。 - 真实 EGL Context recreation 没有独立实机验证证据,明确标记为
Accepted Risk / 未验证项;用户已明确决定该风险不阻塞后续阶段。 - 未伪造 context-loss PASS,也未重写 v1
BLOCKED、v2、v3 或 v4 历史报告。 - 本次只回填报告与开发记录;未修改代码,未重新编译,未运行 Gradle、Android 或 ADB。
- 技术报告:
docs/60_测试/30_02_GPU_PingPong与ContextRecreation最小技术验证报告_v5.md。 - Codex 完成报告:
docs/报告/30_02_GPU_PingPong与ContextRecreation验证_Codex完成报告_v5.md。
2026-08-30 — 30-03 Camera / World Wrap 与 Land/Ocean Mask(阶段 A)
- 30-02 已正式 PASS,EGL Context recreation 作为用户接受的未验证风险不阻塞,故开始 30-03。
- validation composite 改为使用当前
PaintParameters::matrixForTile()的 canonical z0 world quad;ACTIVE/STATIC 继续区分 simulation update 与 Camera redraw。 - 通过
UnwrappedTileID.wrap绘制中心和相邻 MapLibre world copy;仅中心 copy commit,避免 world copy 额外推进 30-02 GPU simulation。 - 增加反经线两侧 deterministic anchors C/D,并以全球 canonical mask UV 复用 MapLibre wrap,不建立第二套 world 状态机。
- 增加 validation-only shared 16×16 synthetic coastal mask,GLOBAL、OCEAN_ONLY_A/B 复用同一 GPU texture;Camera/consumer 切换不重建,context-destroy 通知后按新 generation 重建。
- Android Test App 复用既有入口,增加 GLOBAL/OCEAN A/OCEAN B/DATELINE/WORLD WRAP 最小控制;未运行 Android 编译、Gradle 或 ADB。
- Linux OpenGL 受影响 Core 对象精确编译、C++ 格式与 diff 检查通过;用户 T1–T13 实机验证仍待执行。
- 当前状态:
WAITING_MANUAL_VALIDATION;不允许进入 iOS 最小验证。 - 技术报告:
docs/60_测试/30_03_Camera_WorldWrap与LandOceanMask最小技术验证报告_v1.md。 - Codex 完成报告:
docs/报告/30_03_Camera_WorldWrap与LandOceanMask验证_Codex完成报告_v1.md。
2026-08-31 — 30-03 Camera / World Wrap 与 Land/Ocean Mask(最终 PASS)
- 用户已完成 Android OpenGL 手工验收,T1–T13 全部记录为
PASS;30-03 正式状态更新为PASS。 - 已确认本最小验证范围内的 Camera 同帧地理锁定、ACTIVE/STATIC camera redraw 分离、world wrap、双向反经线连续性,以及 shared Land/Ocean Mask 的 GLOBAL / OCEAN_ONLY_A / OCEAN_ONLY_B 语义。
Rotation/Viewport 自动恢复问题为已知问题;用户接受延期,明确在下一个任务修复。本轮不声称该问题已修复,也不将其伪造为已验证功能。- 真实 EGL context recreation 的独立设备证据、正式 fixture adapter、正式 NoData fail-closed 和生产 coastline 数据仍未完成;EGL 风险沿用 30-02 的
Accepted Risk / 未验证边界。 - 30-03 已允许进入下一阶段;下一任务优先处理 Rotation/Viewport 自动恢复延期项。
2026-08-31 — 40-01 Android 离线 Fixture 到正式粒子渲染最小闭环(Stage A)
- 30-03 后进入 Android 第一条离线 fixture 粒子闭环;Rotation/Viewport 自动恢复技术债已纳入本任务。
- 新增 backend-neutral
OfflineFixtureParticleAdapter和ParticleFieldSnapshot,以 v1 metadata、binary length 与 SHA-256 把 uniform-east、uniform-north、vortex 解码为正式 Field;不使用在线数据或 Android UI 依赖。 - GPU field texture 接入既有 State A/B;Trail A/B 改为读取 State write texture,fixture 切换递增 field/gpu field generation 并清理旧 trail;Mask 继续走既有 shared GLOBAL/OCEAN_ONLY 路线。
- STATIC 不再阻止 resource bootstrap:Activity/context recreation 后会建立 field/mask/trail/state 并做零步 first composite,
simulationFrame不增加;Activity 保存 active/enabled/mask/fixture 选择。 - Linux OpenGL 受影响 Core 对象、C++ format、diff、fixture checksum 和 adapter smoke test 均通过;未运行 Gradle/ADB/实机验证。
- 当前结论:
WAITING_MANUAL_VALIDATION。用户仍需完成 Android OpenGL T1-T12,尤其 T1 rotation 无按钮恢复;iOS、Vulkan、真实数据、生产 mask 和性能均未覆盖,尚不建议进入下一 Android 子任务。 - Stage A 实现提交
0b076c6d52fffb2ee4411cac64f06d43cea260c8已成功 push 到origin/particle/main。
2026-08-31 — 40-01 Stage A 正式链、Android fixture 边界与 NoData 修正
- 纠正此前实现仍借用 source-less
ParticleValidationLayer的偏差:新增正式RasterArraySource -> RenderRasterArraySource -> RasterParticleLayer (Source::Required) -> RenderRasterParticleLayer,并让正式 RenderLayer 复用既有 GPU field、State A/B、Trail A/B、Mask、Camera/World Wrap/Antimeridian 与生命周期。 - Android Test App 的 Style 现在创建
raster-array/raster-particle,fixture 由 APKassets/integration/particle-fixtures/的asset://URI 提供;Core adapter 仅接收 FileSource bytes。Linux smoke helper 继续读取仓库 fixture,生成工具验证并同步两端完全相同的 metadata/field 内容。 ParticleFieldSnapshot将 cell validity 独立于 fixture validity:合法 NoData cell 产生 invalid mask,GPU texture alpha 表示该 mask;State sample 命中 NoData 后确定性 respawn,不将-9999当普通速度;NaN/Inf 仍拒绝。新增nodatadeterministic fixture。- STATIC/context recreation 的 zero-step bootstrap 未推翻:新资源自动建立并首帧 composite,bootstrap commit 不增加 simulation frame。
- Linux Core 精确编译、format/diff、fixture generator、adapter/asset parity 检查在最终收尾复跑;未运行 Gradle、APK、ADB 或 T1-T12。最终状态仍只能是
WAITING_MANUAL_VALIDATION,等待 GPT 再次复审远端代码。
2026-09-01 — 40-01 RasterArray OfflineDownload 穷尽接入
- Android OpenGL 实际 C++ 编译暴露
OfflineDownload的 required-resource-count 与 resource-queue 两处SourceType穷尽 switch 漏掉RasterArray。 - 根据当前实现,
RasterArraySource只从平台FileSource获取确定性 fixture metadata/field bytes;40-01 Android 输入固定为 APKasset://integration/particle-fixtures/...,且 Source Impl 不包含 tileset、zoom range 或 OfflineDownload 托管资源 contract。因此两处都以显式SourceType::RasterArrayno-op 表达语义,不虚报资源数、不进入下载队列。 - 不增加
default:;全仓非 vendor 的SourceTypeswitch 已复核,本次仅修复新增枚举的直接遗漏。Linux/Coreoffline_download.cpp.o精确编译(-Werror)、clang-format --dry-run --Werror与git diff --check均通过;未运行 Gradle 或 ADB,40-01 继续为WAITING_MANUAL_VALIDATION。
2026-09-01 — 40-01 RasterArray Source RenderItem 空指针修复
- Android OpenGL 首次实机启动确认 field fixture 已加载、RasterParticleLayer 已 evaluate 后,RenderThread 在 State A/B 创建前因
Renderer::Impl::render()fault addr0x0崩溃。 - 调用链确认:loaded + needsRendering 使
RenderRasterArraySourceenabled;RenderOrchestrator 要求 enabled source 返回合法 RenderItem;RenderTree 无条件解引用。原createRenderItem()返回空指针违反该既有契约。 - RasterArray source 改为按 ImageSource 的 prepare/create 生命周期提供 no-op RenderItem(无 upload、无 render pass、无 debug drawable、无 particle draw);不改全局 RenderOrchestrator,不增加第二套粒子 renderer,粒子 GPU 路径仍由
RenderRasterParticleLayer负责。 - Linux/Core
render_source.cpp.o与新增 source test object 均以-Werror精确编译;format、diff 与全部 RenderSourcecreateRenderItem()return audit 通过。未运行完整 Linux 测试二进制、Android Gradle、ADB 或真机测试,40-01 继续为WAITING_MANUAL_VALIDATION。
2026-09-01 — 40-01 Android ACTIVE / STATIC simulation lifecycle 修复
- 实机日志中反复出现的
ParticleValidation30_02: disabled reset generation=...唯一来自RenderRasterParticleLayer::markLayerRenderable(false)。调用链复核确认:RenderOrchestrator::createRenderTree()在逐一处理每个 source 时为不匹配 source 的 layer 给出临时false;同一 render tree 随后处理匹配的raster-arraysource 又恢复true。该false不是持久 disabled 生命周期事件。 - 原 override 在这个临时回调中移除 target、清空注册、执行
ParticleGpuResources::resetSequence();因此committedFrame(正式simulationFrame)每帧回到 0,stateRead/trailRead每帧回到 A、seed 标记变 false,ACTIVE 永远 schedule/commit frame 1,STATIC 每帧重新走 zero-step bootstrap。 - 已移除
markLayerRenderable(false)的错误 reset;layer 仍保留 base renderable 状态。State/Trail 资源只在 field/fixture generation 改变、Trail viewport 重建、context lost 后资源重建、或 layer removal 时按已有路径失效/清理。ParticleGpuResources仍由RenderRasterParticleLayer::gpuResources持有,跨render()持久存在。 - ACTIVE 现在连续按 A→B、B→A 交换并让
committedFrame递增;STATIC 在未 seed(初次或真实资源事件)时只做一次 zero-step bootstrap,已有状态时只走 FrozenComposite,不注册离屏 target、不 commit;STATIC→ACTIVE 复用既有 slot/frame 继续 simulation。没有改变 pass 次序State,Trail,Composite、hazard=SAFE、fixture/resourceGeneration contract 或 public API。 - 日志现在在 ACTIVE/STATIC transition 输出 generation、fixture、frame 与 read slot;schedule/pass/commit 输出前 3 帧及每 60 帧,避免长期高频洪水,同时可明确验收 1→2→3 与 A/B 交替。
- Linux OpenGL
render_particle_validation_layer.cpp.o精确编译、clang-format与git diff --check:PASS。40-01 保持WAITING_MANUAL_VALIDATION,等待用户用新 APK 完成 GLOBAL ACTIVE、ACTIVE→STATIC、STATIC→ACTIVE 手工验收。
2026-09-01 — 40-01 Formal RasterParticle Trail Composite 显示修复
- 实机已证明 generation 稳定、simulationFrame 连续递增、State/Trail A/B ping-pong 与
hazard=SAFE正常;画面静止不再是 lifecycle/repaint/clock 问题。 - 根因位于最终 Composite:Trail pass 确实从最新 State write 画入 Trail A/B,但 Composite 仅将 Trail RGB 计算为 alpha intensity,最终 RGB 始终是 30-03 legacy 的 stripe/anchor。因此正式 field simulation 没有成为屏幕主体。
ParticleGpuResources::formalDisplay由RasterParticleLayer的 formal source 身份设置,并通过现有 UBOu_mask.z传入 shader。正式FORMAL_PARTICLEComposite 输出当前 Trail RGB 与由其 intensity 导出的 premultiplied alpha;legacyParticleValidationLayer继续走未改变的VALIDATIONstripe/anchor/world-wrap 分支。ParticleRender新增一次性 displayMode 日志;既有低频 schedule 日志补充trailStateSource、compositeTrailSource和 displayMode,可证明 State write → Trail write → Composite Trail write 的数据关系,而不每帧刷屏。shaders/particle_gpu_validation.fragment.glsl为唯一 shader source,使用node shaders/generate_shader_code.mjs正常生成 OpenGL header;二次生成哈希一致。生成器同时规范化src/mbgl/shaders/shader_source.cpp,该生成物一并保留以保证生成后工作树稳定。- Linux OpenGL 受影响 RenderLayer object、相关
source.test.cpp.o均精确编译;C++ format、diff check 通过。按任务边界未运行 Android Gradle、ADB 或真机;40-01 继续为WAITING_MANUAL_VALIDATION,下一轮只验收 GLOBAL + ACTIVE + uniform-east 的可见 eastward 运动。
2026-09-01 — 40-01 Formal RasterParticle 显式 State Seed 修复
- 实机日志确认 formal display、State/Trail/Composite slot wiring、simulation frame 与 hazard 均正确,但正式粒子仍不可见。
RenderTarget::render()的既有全局 clear 是 opaque black(0,0,0,1);未修改该 MapLibre contract。 - 原 State shader 用
previous.a < 0.5判断是否第一次 seed,但新 State target alpha 为 1,导致全部 16×16 texel 从(0,0)而非各自v_uv开始。uniform-east 只推动 x,marker 聚集在 canonical world 顶缘、常在当前视口外。 ParticleGpuResources::stateSeeded现在是唯一权威。State pass 把!stateSeeded通过现有 UBO 的u_mask.w传入;shader 仅以该 flag 选择v_uv或previous.rg,不再以 texture alpha 推断生命周期。Fieldalpha仍仅表示 NoData validity。- ACTIVE 第一次 State pass 与 STATIC zero-step bootstrap 都对每个 texel 进行
v_uvseed;Composite commit 后stateSeeded=true,之后继续 read texture。新 resources、context recreation 和 fixture/fieldresetSequence()保持重新 seed;普通 ACTIVE、Camera、STATIC 与 transient source renderability 不会 seed。 - 新增低频
ParticleRender: stateSeed=INITIALIZE|CONTINUE日志,含 generation、State A/B 与 fixture。shader source/header generator parity、生成器幂等、Linux Core 与 Source test object 编译、format 和 diff 均通过;未运行 Android Gradle/ADB/真机,状态仍为WAITING_MANUAL_VALIDATION。
2026-09-02 — 40-01 RasterArray Source 重建 Field Identity 修复
- 用户实机确认 GLOBAL ACTIVE uniform-east、ACTIVE→STATIC→ACTIVE 均通过;点击 uniform-north 后仍 eastward。Android Test App 已正确重建
raster-arraysource,根因不在 UI 或 shader/ping-pong。 RasterArraySource::tryLoad()原有generation是 source 实例成员;Style 用同一 source ID 重建时 east 与 north 都可得到 generation 1。RenderRasterParticleLayer正式路径又只比较 generation,因此错误保留 east GPU field texture。- runtime generation 改为
raster_array_source.cpp的 process-wide atomic 单调 revision;它只表达运行时 snapshot identity,不混用 metadatadataVersion,也不使用时间或随机数。source load 日志现在含 fixtureId、generation、dataVersion。 - renderer 使用 shared
fieldIdentityChanged()三元判断:generation、fixtureID、dataVersion 任一改变都会重新上传 field texture 并保留既有resetSequence()、State re-seed、Trail clear 路径;三者相同不重复上传。fixture switch 日志记录 from/to、old/new generation、gpuFieldGeneration、trail clear 与 state seed。 - 新增定向 C++ 测试:两个独立 RasterArraySource 实例加载 east/north 得到不同 generation;同 generation 的 east/north 仍判定 identity changed;同 fixture/generation/dataVersion 不判定变更,dataVersion 改变则判定变更。
- Linux OpenGL 的 RasterArraySource、RenderLayer 与
source.test.cpp精确编译,format/diff 均通过;未运行 Android Gradle/ADB/真机,40-01 继续WAITING_MANUAL_VALIDATION。下一轮只验收 GLOBAL + ACTIVE + uniform-east 后切 uniform-north 的方向变化。
2026-09-02 — 40-01 Stage B Android OpenGL 最终关闭
- 用户完成 Android OpenGL x86_64 手工验收,40-01 正式状态更新为
PASS。 - GLOBAL + ACTIVE + UNIFORM EAST、ACTIVE→STATIC→ACTIVE、UNIFORM EAST→UNIFORM NORTH→UNIFORM EAST、STATIC OCEAN A/B Rotation 自动恢复、ACTIVE Rotation、Pan/Zoom/Bearing/Pitch、World Wrap、双向 Antimeridian、GLOBAL/OCEAN A/OCEAN B、Shared Mask reuse、DISABLE/ENABLE、快速 fixture 切换与最终重复 Rotation 回归全部 PASS。
- 同一 RenderThread/resource generation 内 GLOBAL/OCEAN_ONLY_A/OCEAN_ONLY_B 复用同一
maskGeneration,日志为reuse=true;graphics resource 重建后的 generation/maskGeneration 递增属于新 GPU resource,不属于同 generation 内重复创建。 - 40-01 历史调试链完整保留:OfflineDownload exhaustive switch、RasterArray no-op RenderItem SIGSEGV、Android APK/.cxx 旧 native 缓存、lifecycle reset loop、formal Composite Trail 显示、shader source/generated header 同步、opaque clear State seed、field identity generation collision、Rotation/Viewport STATIC restore 均已解决并由最终手工回归覆盖。
- 本次仅回填 Stage B 文档,不重新运行 Android Gradle、ADB 或实体机;iOS/Metal、Vulkan、真实数据、生产 mask、性能和独立 EGL context-loss 设备证据仍为范围外,不被 40-01 Android OpenGL PASS 隐含覆盖。
2026-09-02 — 40-02 Android 双时间片 GPU 时间插值(代码阶段)
- 在 40-01 唯一正式
RasterArraySource -> RasterParticleLayer -> GPU Simulation -> Trail -> Composite链路上扩展为 T0/T1 两份 immutable Field snapshot;source 通过可选next-fixture/next-metadata/next-field从同一 FileSource byte boundary 加载,拒绝 grid/bounds/NoData/Field 语义不兼容的窗口。 RasterParticleLayer新增raster-particle-time-mix常量属性;其只更新既有 UBO。State shader 分别从两张 GPU Field texture 解码速度后 GPUmix,没有 CPU 完整中间 Field、第二 Layer 或第二 simulation。- Renderer 保持一套 State A/B、Trail A/B、shared Mask 和 Composite;T0/T1 使用两个可复用 GPU Field slot。窗口 A/B -> B/C 通过 generation + fixtureID + dataVersion 识别 B,复用其 texture、只上传 C,保留 simulation/trail;无重叠的新窗口沿用 40-01 的安全 reset/reseed。
- Android Test App 增加 T0 EAST/T1 NORTH、MIX 0/50/100 与 ADVANCE B→C 入口,原 ACTIVE/STATIC、GLOBAL/OCEAN、Camera、wrap/antimeridian 入口保留。
- Linux OpenGL 受影响 Core/source-test object、shader generator、C++ format 和 diff check 已通过;未执行 Android Gradle、ADB 或设备操作。40-02 当前只能标记
IMPLEMENTED / WAITING FOR ANDROID VALIDATION,T1–T10 手工 Android OpenGL 验收后才能判 PASS。 - 实现提交为
4675a8a29dd6fc7b684bfb64913a8c9075ad8583(feat: add GPU particle time interpolation);文档收尾提交另行记录,均只面向 40-02。
2026-09-02 — 40-02A Android Validation 测试界面紧凑化(代码阶段)
- 仅调整 Android Test App 的
Particle Core Layer ValidationUI:底部控制区从 7 个默认大按钮行压缩为 4 行,状态行 36dp、控制行 34dp、padding 4dp,MapView 保持全屏并获得更多粒子观察区域。 - EAST/NORTH、T0/T1、ADVANCE、MIX、ACTIVE/STATIC、DISABLE/ENABLE、GLOBAL/OCEAN、DATELINE/WORLD WRAP 的 16 个既有 ID/click binding 均保留;状态改为单行 mask/runtime/field/mix 表达,不改变 40-02 业务语义。
- 未修改 C++ Core、shader、GPU、simulation、trail、composite、mask、Gradle 或 ABI。静态 ID/binding 核对与 diff check 通过;未运行 Android Gradle、ADB 或设备。状态为
IMPLEMENTED / WAITING FOR ANDROID UI VALIDATION。 - 实现提交为
f4d519ca789c0488d6b9d8259427ac070b15eb63(ui: compact particle validation controls);文档收尾提交另行记录。
2026-09-02 — STEP-043 / 40-02C 最终修正
- 修正 north-positive V 到 Mercator Y 的最终 displacement 符号;Field canonical contract 未变。
- MIX 移除 Style reload fallback,未就绪只拒绝并记录日志;GPU reuse 使用已验证 SHA-256 content identity,revision generation 仍独立保留。
- 状态:
IMPLEMENTED / WAITING FOR ANDROID VALIDATION;未运行 Android Gradle/ADB,T1--T10 待用户验收。
2026-09-03 — STEP-043A 源码审查后最小修正
- texture reuse 现消费 wanted revision;MIX reject 不再改变 timeMix;补充 lifecycle diagnostics 与 Style reason。状态仍为
IMPLEMENTED / WAITING FOR ANDROID VALIDATION。
2026-09-03 — STEP-043B Android→Core MIX 属性桥接
- 自定义 raster-particle 没有 Android Java Layer peer,
Style.getLayer()不能作为 Core layer readiness;新增最小 NativeMapView bridge 走正式 CoreLayer::setProperty,MIX 仅 bridge 成功后更新状态。
2026-09-03 — 40-02 双时间片 GPU 时间插值 Android 最终验收完成
- STEP-043B 最终使用
RasterParticleLayer::setTimeMix(float);Android x86_64 OpenGL Debug 编译、安装、启动通过,T1--T10 全部 PASS。 - A/B→B/C GPU texture reuse、MIX property-only、DISABLE/ENABLE 生命周期通过;
uniform-north + vortex的 MIX 50% 局部低速/近零速是正常逐点插值。 - 单 ABI APK 约 696.5 MiB 是独立 packaging 技术债,不阻塞本阶段。40-02 / 40-02C / STEP-043B 正式
CLOSED / PASS。
2026-09-03 — 40-03 Android OpenGL 粒子数量容量基线(代码阶段)
- 正式 RasterParticle GPU 链的粒子数实际由 State A/B render target 网格承载:既有
16x16即 256 个 State shader texel。新增raster-particle-particle-countCore 属性与强类型RasterParticleLayer::setParticleCount(uint32_t),只接受 256..1,048,576 的平方数,确保实际 count 与 State grid 面积一致。 - Android Validation 页面新增 256、1K、4K、16K、64K、1M 档位;使用既有 Android→Core 薄桥,不建立 Java layer peer、CPU simulation 或第二 GPU simulation。切换只重建 State A/B、执行一次可解释的
PARTICLE_COUNT_CHANGEreset/reseed,Field T0/T1、MIX、interpolation、GPU content reuse、mask 与既有 lifecycle 均不改变。 - 日志包含请求/实际 count、State grid、State target create/rebuild/release 和拒绝原因;Trail 继续用四个确定性 State texel作低开销可视健康指示,实际并行 simulation 数仍是整个 State 网格。
- Linux OpenGL 受影响 Core 和新增 Layer test object 精确编译、C++ format、diff check 均通过;未运行 Android Gradle、ADB、APK 或设备,也未加入 Jest。
- 当前状态只能是
IMPLEMENTED / WAITING FOR ANDROID VALIDATION。用户将以 x86_64 Android OpenGL 逐档填写容量矩阵后,才能确定稳定区间、性能下降区间和压力边界。
2026-09-03 — 40-03 Full Particle Draw 补齐(STEP-044 v2)
- 暂停 v1 容量验收的根因已补齐:v1 的 State A/B 虽可容纳 N 个 State texel,但 Trail fragment 只读取四个固定 sample,实际 Trail draw 只是全屏 quad,不能证明 N 个粒子已绘制。
- 正式 RasterParticle Trail 现在先保留既有全屏 fade,再在同一 Trail A/B write target 绘制 N 个 point。particle index 在资源创建/count change 时一次性映射到 State texel
(x,y);vertex shader 每帧直接从当前 State write texture fetch RG position,Composite 仍消费 Trail write。没有 CPU readback、每帧 CPU position loop、第二 simulation 或 overlay。 - 16-bit index buffer 每 segment 最多 65,536 point;1M 使用多个 segment,但继续走同一 State→Trail→Composite GPU path。日志明确输出
trailDrawCount、particleIndexCount与fullParticleDraw=true;legacy validation 的四 sample 诊断保留且不再限制正式层。 - U/V、Mercator
dy=-v、T0/T1、MIX、Field reuse、seed/lifecycle 和 Android JNI 均未改变。Linux OpenGL 精确 Core/test object 编译、shader generator 二次幂等、format 与 diff check 通过;未运行 Android Gradle、ADB、设备或 Jest。 - 状态继续为
IMPLEMENTED / WAITING FOR ANDROID VALIDATION,用户下一轮只验收 256、1K、256→1K→256 的 full draw 正确性,之后才恢复完整容量矩阵。
2026-09-03 — 40-03 Android OpenGL 粒子数量容量基线最终关闭(STEP-044 v3)
- 40-03 正式
CLOSED / PASS。原c0d1ad43...只扩展 State A/B 容量,Trail/render 未 full draw,故验收曾暂停;a0aae48...完成正式 full particle draw,使State N -> draw N -> Trail -> Composite成立。 - 用户 Android OpenGL 实机确认:256→draw 256、1K→draw 1024、4K→draw 4096、16K→draw 16384、64K→draw 65536、1M→draw 1048576;所有档位日志均为
fullParticleDraw=true,用户确认 1M 运行 OK。T-FULL-01~03(含 256→1K→256 重建回归)全部 PASS。 - count change 仅重建 State/full draw resources,未引入 Field upload、Style reload 或 MIX 改变;40-02 的 MIX property-only 与时间窗 Field reuse(
simulationRebuild=false、trailCleared=false)保持。 - 已验证容量 ≥ 1M,满足当前项目需求,不再扩展 2M/4M/8M 压测。1M 是本验证设备上的已验证容量,不是理论最大值、硬编码产品默认值或所有 Android 设备的统一保证。
- 本收尾只回填文档;Codex 未运行 Android Gradle、ADB、设备测试或 Jest,也未修改功能代码。
2026-09-03 — 40-04 Runtime Field 动态更新接口(STEP-045)
- 正式 Runtime Field 更新入口落在
RasterArraySource:updateRuntimeFieldWindow(ParticleFieldSnapshot)把 Source 权威窗口由T0/T1推进为T1/newT1,并通过既有 Source observer 通知正式 RasterParticle renderer;没有 Style reload、Source/Layer recreate 或第二套 Field/GPU 系统。 RasterArraySource::Impl::field/nextField继续是唯一正式 T0/T1 权威状态。Android Validation 只通过MapLibreMap -> NativeMapView -> JNI -> Style::getSource()薄桥请求 advance;Kotlin/JNI 不保存窗口,不操作 renderer 私有资源。- 离线验证初始 A/B 为 uniform-east/uniform-north;Source 自己预加载 C=vortex、D=nodata。候选在真正进入 T1 时才获得 process-wide runtime generation,避免异步 asset 完成顺序造成 stale/non-monotonic revision。
- 既有 renderer content identity/slot ownership 未改:A/B→B/C 和 B/C→C/D 都复用 OLD_T1 作为 NEW_T0,只上传新 T1,保留 simulation 与 Trail(
simulationRebuild=false、trailCleared=false)。MIX 仍是 property-only,不参与 Field update。 - 重复当前内容明确 NOOP;无效、未加载、不兼容、非单调或无候选更新 fail closed,不污染当前有效窗口。没有每帧 Field copy/hash/upload,也未修改 40-03 full particle draw。
- Linux/OpenGL 受影响 Core/conversion/source test object 精确编译;定向窗口推进 test object 覆盖已加入,完整
mbgl-test因 build tree 缺失大量无关依赖未执行,未将其误报为通过。格式与 diff 检查结果在完成报告收尾记录。未执行 Android Gradle、ADB、APK、实体机或 Jest;当前状态仅为IMPLEMENTED / WAITING FOR ANDROID VALIDATION。 - 实现提交:
45502a53f4fc486bd24cb0008d1ab0ff221e7e63(feat: add runtime particle field updates);文档收尾提交另行记录。
2026-09-03 — 40-04 T-RUNTIME-05 Duplicate NOOP 补验收入口
- 已有 Runtime API 的
sameFieldGpuContent(currentT1, newT1)NOOP 分支正确,但 Android 只有 ADVANCE(候选耗尽后为 T-RUNTIME-06 reject),无法真实重提当前 T1。 - 新增 Source-owned
repeatRuntimeFieldWindow()和最小 Android/JNI 薄桥;DUPLICATE T1只把当前Impl::nextField重交正式 update API,在 vortex/nodata 窗口返回 NOOP,不推进 candidate queue,不改变 Source window,也不触发onSourceChanged()。 - C++ Source test 在 C/D 后断言 Noop、T0/T1 不变及 source changed count 不增;Linux/OpenGL 精确 Core/test object 编译、format/diff check 通过。Android Gradle、ADB、设备和 Jest 未执行;状态继续
IMPLEMENTED / WAITING FOR ANDROID VALIDATION。
2026-09-03 — 40-04 / STEP-045 Runtime Field 动态更新最终关闭
- 40-04 / STEP-045 正式
CLOSED / PASS。Android OpenGL 最终统一验证 T-RUNTIME-01~06 全部 PASS。 - 正式 Runtime Field 接口已证明支持 A/B→B/C→C/D 连续时间窗推进:OLD_T1 复用为 NEW_T0,只上传真正的新 T1,正常推进不重载 Style、不重建 Layer、不重启 simulation、不清 Trail。
- MIX 保持 property-only;Duplicate 重提当前 T1 返回 NOOP,不产生 Field upload/reset/style reload;候选耗尽 fail-closed,当前 vortex/nodata 窗口继续可用。
STYLE_LOAD reason=TIME_WINDOW仅是用户建立初始窗口的允许初始化;真正 Runtime 操作期间 styleEpoch 稳定。MIX 的LAYER_CHANGED不是 Layer recreate,最终 renderLayerInstanceId 保持 1。- 40-04 未改变 U/V、
dy=-v、GPU interpolation、40-03 full particle draw 或已验证 capacity ≥ 1,048,576;真实网络/GRIB/provider、视觉阶段、WeatherColorLayer、Vulkan、iOS/Metal、生产 mask、APK 技术债仍属范围外,未进入下一阶段。
2026-09-03 — 40-05 / STEP-046 Android OpenGL 正式粒子视觉与运行时渲染控制(代码阶段)
- 正式
RasterParticleLayerfull draw 从固定 blue point 扩展为短 streak:每个 State texel 对应一颗粒子、两个静态 line endpoint,GPU vertex shader 从 current State write 与 T0/T1 插值 Field 求位置、方向和速度;CPU 不持有 live particle position/direction/color,也不做 readback 或第二 simulation。 - 继续冻结
U=east-positive、V=north-positive与 Mercator 边界dy=-v;EAST/NORTH/vortex 的视觉方向与 MIX 后最终速度一致。NoData、NaN 和近零速 fail-closed,不画 streak。 - 新增
raster-particle-line-width、particle-length、particle-opacity、trail-opacity、trail-fade、speed-color-enabled等 Core Render/Visual properties。它们经现有 Android→Core JNI boolean bridge 运行时更新,只改 Render/UBO,不 reload Style/Source、不上传 Field、不 reset State/Trail。 - GPU fragment shader 使用最终插值 speed magnitude 的最小蓝→绿→橙 ramp;COLOR 控制可以回退固定蓝色。该粒子着色与未实现的 WeatherColorLayer 明确分离。
- Android Validation 页增加 VISUAL DEFAULT、SIZE、LENGTH、OPACITY、TRAIL、FADE、COLOR 集中入口、直接 VORTEX fixture 与 256K 容量档,并保存 Activity 状态;资源日志补充
particleDrawCount=N、streakVertexCount=2N和低频 visual property snapshot。 - shader generator 二次幂等、Linux OpenGL Core/style test object 精确编译、format/diff 均通过;未运行 Android Gradle、ADB、真机或 Jest。当前状态只能是
IMPLEMENTED / WAITING FOR ANDROID VALIDATION;用户下一轮以一次 x86_64 APK 编译完成 T1--T8 综合验收后才可关闭。
2026-09-03 — 40-05 / STEP-046 Android OpenGL 正式粒子视觉与运行时渲染控制最终关闭
- 实施提交
e48fa087e01e9710c5d0c18ab062726226bbb6bd已由用户完成 Android APK 编译、安装和最终手工验证;T1--T8 全部 PASS,40-05 / STEP-046 正式CLOSED / PASS。 - UNIFORM EAST、UNIFORM NORTH、VORTEX 的正式 GPU streak 正常显示;Runtime visual properties、speed color 与 MIX 0/50/100 均正常,MIX 保持 property-only。
- 40-04 Runtime Field Window 连续推进、
OLD_T1 -> NEW_T0reuse、Duplicate NOOP、fail-closed、无 Style reload / 无无意义 simulation reset / 无 Trail clear 均无回归。 - pan、zoom、bearing、DATELINE、WORLD WRAP、DISABLE/ENABLE、屏幕/生命周期恢复、GLOBAL/OCEAN A/OCEAN B 均通过;Renderer 持续
State -> Trail -> Composite且hazard=SAFE。 - 容量档 256、1K、4K、16K、64K、256K、1M 在新的 streak + speed color 路径均通过。4K 以上在小 Validation viewport 内趋于高密度铺满是可读性现象,不是功能失败;1M 仍只是当前验证设备上的已验证容量,不是全设备保证或产品默认值。
- Android logcat 的
TimeStats: RenderEngineTimes are already at its maximum size[64]是 RenderEngine/虚拟机环境噪声,未伴随粒子 Renderer crash 或中断,不判为本阶段失败。未进入 WeatherColorLayer、真实网络/GRIB、Vulkan、iOS/Metal 或生产 mask 等范围外工作。
2026-09-03 — 40-06 / STEP-047 Runtime Timeline 与 Playback(代码阶段)
RasterArraySource现持有唯一的有界 Timeline runtime:六个离线 immutable snapshot、严格递增逻辑时间、T0/T1、mix、cursor、播放/暂停、0.5x/1x/2x、step、seek、gap/invalid/recover/end。Android 只经薄 JNI 发低频命令,没有 Android timer 或 per-frame JNI。- RenderRasterParticleLayer 只读取 Source Core 给出的当前 T0/T1/mix;窗口 revision 变化继续进入既有 Field identity/GPU reuse 路径,自动边界维持
OLD_T1 -> NEW_T0的重用语义。正常 timeline MIX 不需要 Style reload。 - Validation UI 收敛为
TIME | VIS | COUNT | MAP | MORE;原有动作均由菜单保留,TIME 提供 load/play/pause/speed/step/seek/gap/invalid/recover。 - 已加 Source timeline 单元覆盖并运行 Linux/OpenGL Core 精确构建;未运行 Android Gradle、ADB、实体机或 Jest。状态仍为
IMPLEMENTED / WAITING FOR ANDROID VALIDATION,等待 Android x86_64 逐项验收。
2026-09-04 — 40-06 / STEP-047 Android Round 1 集中修复
- Round 1 为
PARTIAL / NEEDS FIX:主链、自动 MIX/window reuse 和紧凑 UI 通过,但 timeline 过短、END/seek 语义、异常入口、VIS 可达性与 cache 可观测性不足。 - Core validation timeline 改为约 200 秒;END PLAY restart、PLAYING/PAUSED seek 状态保持、GAP/INVALID fail-closed 和 RECOVER 保留此前状态。TIME 直接暴露 NORMAL/GAP/INVALID/RECOVER,VIS 将 COLOR 前置并使用明显的 validation 步长。
- 仍保持 Source 有界 CPU snapshot preload、GPU 仅 T0/T1、相邻窗口 reuse 与 STEP-046 visual property-only。状态为
IMPLEMENTED / WAITING FOR ANDROID RE-VALIDATION。
2026-09-04 — 40-06 / STEP-047 Playback Tick 根因修复
- Android Round 2 确认 PLAY/SPEED bridge 成功、RenderThread 持续,但 Timeline 只短暂推进。根因是 tick 错接到非持续的 RenderLayer update。
- tick 已移到每个正式 State drawable frame 的 Core tweaker;没有 Android timer、每帧 JNI、线程或自旋。新增低频 PLAYBACK_TICK heartbeat;状态继续
IMPLEMENTED / WAITING FOR ANDROID RE-VALIDATION。
2026-09-04 — 40-06 / STEP-047 Runtime Timeline 与 Playback 最终关闭
- Android 最终验收在
1343929474796b1313489ee9fecbf23b949580a7功能基线上全部 PASS,STEP-047 正式CLOSED / PASS。 - Playback tick、Pause/Resume、0.5x/1x/2x、Seek/Step、Gap/Invalid fail-closed 与 Recover、Preload/Cache、
OLD_T1 → NEW_T0reuse、仅上传 NEW_T1、无正常 reset/clear trail、VIS/MAP/MORE 与紧凑 UI 均已验证。 - snapshots=6/cacheCapacity=8 下没有 CACHE_EVICT 是正常容量现象。状态栏对自动 MIX/WAITING/INVALID 的展示记录为非阻塞 Validation UI observability 技术债;TimeStats 上限信息为 Android RenderEngine 环境噪音。此次仅文档收尾,未修改功能代码。
2026-09-04 — STEP-049 Provider-neutral C++ Field Data Adapter 与 Runtime 输入契约
- 新增
ParticleFieldDescriptor、ParticleFieldDataAdapter、structured error result 与 provider-neutralParticleFieldSnapshot;descriptor/payload 边界不携带 provider、URL、token、network 或 Renderer 对象。 OfflineFixtureParticleAdapter保留 fixture-v1 whitelist、metadata/checksum 校验,但最终调用正式 Data Adapter;EAST/NORTH/VORTEX/NODATA validation fixture 继续工作,fixture identity 改为 neutralfieldID。RasterArraySource继续复用唯一updateRuntimeFieldWindow();没有第二套 T0/T1、Timeline、Playback、GPU upload policy 或 Renderer 业务语义。OLD_T1 → NEW_T0、NEW_T1-only、Duplicate NOOP、MIX property-only 和 fail-closed 保持。- Linux OpenGL
mbgl-test-runner构建通过,adapter + RasterArray 定向 11 项测试通过,git diff --check通过;未执行 Android Gradle/APK/ADB/设备/Jest。 - 状态:
IMPLEMENTED / WAITING FOR ANDROID VALIDATION,等待用户一次 Android 综合验收后再 docs-only closeout。
2026-09-04 — STEP-049 Timeline 回归修复
- 根因是 Timeline candidate 在
tryLoadRuntimeField()以 generation=0 进入正式 Field Adapter;adapter 的非零 generation 校验正确拒绝,Runtime Window 因使用已分配 generation 仍正常。 - 修复为 candidate decode 前分配 Core 全局 runtime generation,Timeline 构建不再重复改写;未放宽 contract,未新增 adapter、Timeline 或 Window。
- 新增真实 Source candidate preload → formal adapter → Timeline READY 回归测试,并保留 generation=0/invalid descriptor 负向校验;Linux OpenGL 构建通过,定向测试 12/12 PASS。
- Validation UI 仅明确显示
TL NOT READY/READY/PLAY/PAUSE/WAIT/INVALID,与 Window 状态分离;未执行 Android Gradle/APK/ADB/Jest。 - 状态:
IMPLEMENTED / WAITING_ANDROID_REVALIDATION,等待用户重新构建 APK 并完成一次综合 Timeline 验收。
2026-09-04 — STEP-049 Android 复验与最终关闭
- 用户已在
e34f04ba7038c5cb8fba8dc72c0d253cc4f7c85b基线上完成 Android 综合复验:Timeline READY/PLAY、auto MIX、A/B→B/C→C/D、OLD_T1→NEW_T0 reuse、only NEW_T1 upload、Pause/Resume、Step/Seek、Gap/Recover、Invalid Next/Recover、Duplicate NOOP、Renderer fail-closed 与不黑屏全部 PASS。 - 正常连续播放保持
simulationRebuild=false、trailCleared=false;Window 内 MIX 不产生 Field upload、simulation reset 或 style reload。 - Validation UI MIX 百分比文本可能滞后,保留为
NON-BLOCKING observability,不影响 Core/Playback/Window/Renderer/Adapter 结论。 - 本次为 docs-only 收尾,未执行 Android Gradle/APK/ADB/App/Jest,STEP-049 正式状态更新为
CLOSED / PASS。
2026-09-04 — STEP-051 Local Production-like Field Feed 与 Core Snapshot Submit Bridge
- Starting HEAD
885e7aebef7fb5d02acaed57f9dcf98b8d9e9ba3;新增 provider-neutralmaplibre-particle-field/v1local metadata feed、四个时间片资源与LocalParticleFieldFeed,正式复用 ParticleFieldDataAdapter/Snapshot。 RasterArraySource::submitInitialRuntimeFieldWindow(T0,T1)建立薄 Core submit bridge;Timeline 使用 producervalidTime,旧 fixture null timestamp 保留兼容 fallback,Window/Playback/Renderer ownership 未改变。- 新增 local feed 成功、严格 identity/generation/validTime、Timeline READY/PLAY 与非法 generation 拒绝测试;Linux OpenGL 定向 14/14 PASS。Android/Jest 未执行。
- Android TIME 入口可加载 production-like resources;MIX 文本滞后仍为 NON-BLOCKING observability,Rotation/Viewport 技术债未扩大处理。
- 状态:
IMPLEMENTED / WAITING_ANDROID_VALIDATION。
2026-09-04 — STEP-053 Windy-style Canonical Field 与 Host Submission
- 新增 Host 已持有数据后的低频 ingress:
metadata + contiguous binary UV bytes → RasterArraySource::submitHostField() → LocalParticleFieldFeed → ParticleFieldDataAdapter → ParticleFieldSnapshot;没有新增第二套 Descriptor、Snapshot、Timeline 或 Runtime Window。 - canonical v1 固定 north-west origin、row-major、north-to-south rows、west-to-east columns、
float32-le interleaved-uv,其中 U=eastward、V=northward;Field payload 不走巨大 JSON/JS Array。 - 第一个合法 Field 暂存 T0,第二个复用既有 initial T0/T1 bridge 并建立 Core-owned Timeline,后续 Field 只追加到同一个有界 Timeline;Duplicate/Invalid 均 fail-closed,last valid 保持。
- Android
MapLibreMap/JNI 增加单 Field binary submit;Validation Host 增加 HOST FIELD SUBMIT、HOST DUPLICATE、INVALID HOST,并由 Kotlin 读取本地资源模拟未来 React Native Host。旧 fixture 与 STEP-051 production feed 保留。 - Linux OpenGL
mbgl-test-runner、mbgl-render、mbgl-render-test-runner构建通过;新增 Host/canonical 4/4、Source 44/44、RasterParticle property 2/2 PASS。未执行 Android Gradle/APK/ADB/设备或 Jest。 - Renderer、GPU simulation/trail、Runtime Window、Playback ownership、WeatherColorLayer 分离边界未改。状态:
IMPLEMENTED / WAITING_ANDROID_VALIDATION;用户正式数据尚未提供,不能提前关闭。
2026-09-04 — STEP-053 Android Validation Host 接线补充
- STEP-053 Host submission API/JNI 和 Host 控件已在
b31f80c...存在;为让手工入口与 STEP-051PRODUCTION FEED一眼区分,MORE 现显示PRODUCTION FEED → HOST FIELD → INVALID PROD → HOST DUPLICATE → HOST INVALID。 HOST FIELD继续只读取既有 T0~T3 metadata/binary assets 并逐片调用正式MapLibreMap.submitRasterArraySourceHostField();新增低频HOST_FIELD_DATASET_LOAD日志,Native 继续输出带 fieldId/generation/validTime 的 Host submit 事件。- Host duplicate 与 Host invalid 均重用同一 Host submission contract,不通过 style reload 伪造验证。未修改 Adapter、Timeline、Runtime Window、Renderer、JNI/Core 语义或任何网络/provider 逻辑;状态仍为
IMPLEMENTED / WAITING_ANDROID_VALIDATION。
2026-09-04 — STEP-053 Android 技术验收最终收尾
- STEP-053 正式
CLOSED / PASS。用户 Android 综合验收确认HOST FIELD与 STEP-051PRODUCTION FEED路径分离;canonicalproduction-wind-t00~t03真实经过 Host Submission、Adapter、Snapshot、Timeline、Runtime Window 和 GPU Renderer。 - T0/T1 initial、T2/T3 next、PLAY、automatic MIX 和两次 production→production boundary 全部 PASS;两次 boundary 均为
OLD_T1 → NEW_T0reuse、only NEW_T1 upload、simulationRebuild=false、trailCleared=false。 fieldUploadCount=4 → 5 → 6证明正常 boundary 每次仅上传一个 NEW_T1。唯一simulationResetCount=1属于旧 fixture 切到 Host dataset 的允许初始化,不是正常 production boundary 回归。HOST DUPLICATE返回DUPLICATE_NOOP且 upload/reset 不增长;HOST INVALID经 Adapter reject fail-closed,last valid field 与 Renderer continuity(stateSeed=CONTINUE)保持,无黑屏、无 crash。- 用户正式风场数据集仍未提供、未验证,但不阻塞 contract 阶段关闭;后续可在同一 canonical contract 下追加。MIX 文本滞后及 WAITING/INVALID 视觉为
NON-BLOCKING observability,本次未修改功能代码或执行 Android/Jest。
2026-09-04 — STEP-054 真实 WeatherV2 风数据 Canonical 测试 asset
- 只读核对 WeatherV2
bin_export.py、decode_wind()、QBIN/NSFT export 后,确认wind_vectors.bin为完整拼接WVECBIN1grid:row-major U/V/speed float32-le planes + valid uint8 plane,U=eastward、V=northward,单位 m/s;QBIN/NSFT 均由同一 decoded U/V Field 生成。 - 从 run
2026080600生成真实 ECMWF HRES2026080700/06/12/18四帧。原始日本及周边 bounds 为 112.5/0.0/157.5/55.776573,513×769,不裁剪、不重采样;输出 canonical interleaved U/V Android assets,每帧 3,155,976 bytes。 - 转换器独立放在
tools/weatherv2_wind_canonical/,保留 valid/noData:invalid 写既有 -9999 sentinel,不伪造为 0 风;四帧 hash 不同,重复 T0 hash 相同,source→canonical 抽样误差 0。未改 Core/Renderer/Android,也未执行 Android/Jest;等待下一阶段集中 Android 集成验收。
STEP-055 — Android 真实 WeatherV2 风场色场/粒子综合可视化(IMPLEMENTED / WAITING_ANDROID_VALIDATION)
- 复用 STEP-054 的真实 ECMWF HRES WeatherV2 canonical T0–T3(513×769、原始 validTime、U eastward/V northward、m/s),未重生成或重采样。
- 新增独立
weather-color层:同一 canonical T0/T1 的 U/V 先插值再计算风速,固定 0–30 m/s 色标;与 RasterParticleLayer 保持分离。 MORE → REAL WEATHER通过既有 Host Submission Contract 一键提交真实字段,使用 OSM 无 Key 底图、自动 fit metadata bounds,并恢复旋转/Activity 重建后的可见内容。- Android 综合验收待用户手工完成;详见 STEP-055 人工验收指令。
2026-09-05 — STEP-055 首轮 Android 视觉修复(IMPLEMENTED / WAITING_ANDROID_VALIDATION)
- 首轮实机已证实真实 WeatherV2 T0–T3、513×769 canonical Field、Host submit 和 WeatherColorLayer 可用;本轮将 REAL WEATHER 底图从 OSM 切到 GSI,并把入口提升为
TIME | VIS | COUNT | MAP | REAL WEATHER | MORE的一级菜单。 - REAL WEATHER 首次加载采用 P=2048、W=.75、L=.0040、O=.75、T=.55、F=.88,并提供同状态 HUD、低频
PARTICLE TUNING调整与 RESET;不重载 Style/Field/Timeline,只有容量调整会重建粒子 State/draw resources。 - 将原无单位
velocity * 0.00004位移替换为 canonical m/s 到 Web Mercator world 的 Earth-circumference/cos(latitude) 换算;6000 simulation-seconds/real-second 是独立的 validation visual clock,不污染 U/V、validTime 或 Timeline。新增低频ParticleMotionCPU 估算日志,未做 GPU readback。 - Linux OpenGL 受影响 Core/style test translation unit 精确编译与 shader generator 通过;Android Gradle/APK/ADB/Jest 未执行。等待用户按人工验收 v2 做一次综合复验。
2026-09-05 — STEP-055 Particle State Float 精度修复(IMPLEMENTED / WAITING_ANDROID_VALIDATION)
- Android 日志已将“真实 U/V、非零 world displacement、State A/B ping-pong 均存在但粒子静止”收敛为 RGBA8 State 量化:单步
3e-6–8e-6 world小于 UByte1/255的可表示间隔。 - State A/B 现在为 Float,Trail A/B 保持 UnsignedByte;初次创建、context recreation 与 particleCount replacement 均通过同一 Float target 路径,FBO 创建失败明确 fail-closed,不静默降级。
- 现有 OpenGL
Float → RGBA32F/GL_FLOAT → FBO check支持直接复用,未改 backend、canonical/Timeline/Window/WeatherColorLayer 或 visualSpeedScale=6000。下一次 Android 的首要检查是 Timeline Pause 下真实固定场粒子是否持续移动,并核对ParticleStateTarget类型日志。
STEP-055 Float State fail-closed 小修复
在 Particle Validation createValidationTarget() 增加局部标准异常与未知异常捕获。Float State RenderTarget/FBO 创建失败会记录结构化错误并返回空 target,不会向上抛出或降级到 UnsignedByte;State A/B=Float、Trail A/B=UnsignedByte 保持。Linux 精确编译通过,仍待 Android 验收。
STEP-055 生命周期、真实轨迹与 view-space Trail 修复
真实 Weather 路径改为 GPU age/哈希 respawn,StateRead→StateWrite 真实位移 segment,且 Trail 仅在当前 camera view 内累积。相机变化只重建 Trail;trailFade 改为 wall-time 指数衰减。visual clock 调整为 1200 simulation seconds/real second。canonical、Timeline、Runtime、WeatherColorLayer 未改,仍待 Android 综合验收。
STEP-055 生命周期错峰小修复
粒子基础生命周期调整为 14400 simulation seconds(12 real seconds),首次 seed 与 maxAge 都由稳定 hash 错峰,消除同步生命周期到期。日志改用 configuredSlots 并说明无 GPU readback;其他粒子视觉与数据链语义未改。
STEP-055 低缩放可见性与 Trail 稳定性修复
Particle visual clock 改为基于 zoom 的有界 scale 与 2400s/frame clamp;State lifecycle 改为 12s base 的 wall-time hash jitter。普通 camera 交互只 invalidate 一次并在稳定后恢复 Trail,只有 resize 重分配 Trail texture。canonical 与 Core 时间线边界未改,待 Android 验收。
STEP-055 Zoom 下 Viewport 粒子密度调整
configured particleCount 保持不变;稳定相机后,State respawn 域改为“viewport 四角 Mercator AABB + 15% margin”与 canonical Field bounds 的交集。camera moving 期间继续从 full Field respawn,稳定至少 150ms 后才让 viewport 外 slot 回收进入该域;无效/空/过小交集安全回退 full Field。新增独立 respawnBounds UBO,不改变 Field sampling 边界、Timeline、Runtime、WeatherColorLayer 或 canonical U/V,仍待 Android 验收。
STEP-055 v9 Android C++ 编译遗漏修复
WeatherColorLayer 的 ParticleGpuValidationUBO designated initializer 补齐 respawnBounds,并使用与 fieldBounds 相同的中性范围;仅修复 Android -Wmissing-designated-field-initializers 编译失败。已搜索确认两个 C++ initializer 均完整,未改粒子 respawn、色场行为或冻结数据/时间线边界,仍待 Android 验收。
2026-09-05 — STEP-056 React Native 天气渲染桥接现状调查
- 仓库当前没有 React Native/TurboModule/Fabric/JSI binding;可复用正式入口是 Android
byte[] → JNI → RasterArraySource::submitHostField(),它已接入 canonical Adapter/Snapshot、Core Timeline/Window 与两个 GPU layer。 - 推荐先建立 Android Host Weather Runtime typed facade:runtime unload/clear、canonical field submit、timestamp playback、visibility/style 和低频 result/event;RN module 应在具备 RN host/build dependency 的后续任务中薄包裹该 facade。
- 单帧 WeatherV2 payload 为 3,155,976 bytes;RN v1 应先稳定复用 byte[] path,zero-copy/direct ByteBuffer 仅在 profiling 后处理。动态 WeatherColor stops、独立 particle/trail color 和 weather-local targetFps 均是当前缺口;后者应独立性能批次,不能使用全图
MapView#setMaximumFps()冒充。
2026-09-07 — STEP-057 Android Host 天气运行时接口基础
- 新增主线程
WeatherRuntimetyped facade,封装 canonical submit、typed result/state、clear、OFF unload、timestamp seek、play/pause/0.5/1/2x、独立 visibility 和 visual API;未来 RN 只需包裹该 facade。 - clear 后 Source 保持可复用但无 field;Render 线程空场路径释放 Particle State/Trail/draw、field texture 与 WeatherColor resources。OFF 不 reload style,ON 后要求重新 submit T0/T1。
- WeatherColor 支持最多 8 个 validated dynamic stops;particleColor/trailColor 独立 UBO 数据通路,不依赖 WeatherColor ramp。正常 time seek 和 visual/ramp/color 更新均不重新提交 field 或 reset simulation。
- Linux shader generator、OpenGL Core 及相关 Source/Style test translation unit 已验证;Android Gradle/APK/ADB/设备/Jest 留待后续人工验收。
2026-09-07 — STEP-057A 审计修正
WeatherRuntime正式 Host API 改为明确 typed 粒子外观方法,删除 public string property setter;Test App 的通用 fixture 调试仍为低层路径。- enable/clear/disable/submit 状态转换已幂等并可恢复,另增加既有 Android JUnit state transition 测试源码;未运行 Gradle。
- hidden unload 改成 RasterParticle/WeatherColor renderer 的 Host-empty-source 显式 opt-in cleanup,移除对所有 hidden RasterArray layer 的全局 prepare/update。
- timestamp 测试改用真实 epoch milliseconds,覆盖 T0、midpoint、T1、上下边界和 clear 后拒绝;WeatherColor capacity 由 Java 通过 JNI 读取 C++
MaxWeatherColorStops。
2026-09-07 — STEP-057B WeatherRuntime 状态语义修正
- 普通 field rejection 与 facade/runtime failure 分离:Core 保留有效 timeline 时,READY/WAITING 状态不被坏提交改成 ERROR;空 metadata/payload 同样只拒绝本次提交。
REJECTED_SOURCE_MODE/UNKNOWN才进入 ERROR;ERROR + enable(true) 返回 REJECTED 并保持 ERROR;READY/WAITING enable 保持幂等,DISABLED enable 成功后等待新 fields。- 扩展
WeatherRuntimeStateTest,覆盖 static state transition 与 Mockito public control flow;未执行 Android Gradle、设备测试或 Jest。
2026-09-07 — STEP-057C Android JNI 数组读取编译修正
- Android x86_64 CMake 编译发现
jni::Array<jfloat>误用底层 5 参数jni::GetArrayRegion,导致native_map_view.cpp四处编译失败。 - 已改为
jni::Array::GetRegion(),只修正 particle/trail 与 WeatherColor stops 的数组读取,不改变业务语义或渲染生命周期。 - 功能提交:
4f76245533817751f4e24f76e47e856c35fb23c7;Android Gradle/设备验证由用户重新执行。
2026-09-07 — STEP-057D WeatherRuntime 接口收尾与 RN 桥接前冻结
WeatherRuntime新增独立 typedsetParticleColor()/setTrailColor(),分别委托 Core 独立颜色 setter;保留原setParticleColors()作为兼容成对提交 helper,不猜测或复制 Core 默认色值。- REAL WEATHER submit 使用
FieldSubmitResult/accepted()与 enum 日志,不再依赖getCode();REAL WEATHER 的 playback/visual 不再回退到 MapLibreMap 低层入口,旧 fixture/diagnostic 路径继续保留。 - 本轮仅执行
git diff --check与源码静态审计;未执行 Android Gradle、APK、ADB、设备测试或 Jest,状态为IMPLEMENTED / READY_ANDROID_COMPILE_CHECK。
2026-09-07 — STEP-058 Weather-local Target FPS 与 Repaint Gate
- 新增 source-owned
RasterArrayTargetFps(AUTO/30/60)与单一RasterArrayTimelineRuntimecadence authority;Particle/WeatherColor 共用 monotonic deadline,真实 wall-time simulation、Timeline、T0/T1 window reuse 保持不变。 - Android
WeatherRuntime.setTargetFps()通过 typed MapLibreMap/JNI source setter 接线;使用已有triggerRepaint()做目标间隔 delayed wake-up,不使用全局MapView#setMaximumFps(),REAL WEATHER popup 提供 FPS AUTO/30/60 与 HUD。 - 未到 deadline 的 camera frame 不推进天气 State/Trail/Timeline;两层 visibility、PLAY/PAUSE、clear/disabled 组合按 shared cadence 规则处理。Linux/OpenGL 增量构建与 deterministic/source 定向测试通过,Android Gradle/设备/Jest 未执行。
2026-09-07 — STEP-058A Shared Cadence 与 WeatherRuntime 生命周期修正
advanceIfDue()将 shared deadline claim、cadence revision、真实 wall-time MIX 推进合为 Source-owned 原子操作;WeatherColor-only PLAY 能推进 timeline,Particle 后到同一 deadline 不重复推进 State/Trail/Timeline。- WeatherColor-only PAUSE 不维持连续 repaint;Particle PAUSE 仍可独立按 cadence 运动。
WeatherRuntime.dispose()幂等取消 Handler wake,Test App 在 style reload、leave REAL WEATHER、Activity destroy 显式释放旧 facade。
2026-09-07 — STEP-057D 审计后小修正
- 独立代码审计发现 REAL WEATHER 下
WeatherRuntimetimeline 命令被拒绝时,TestApp 原条件表达式会跳过 reject 分支并误记为成功。 - 已改为显式
commandAccepted判定:REAL WEATHER 只接受WeatherRuntime.CommandResult.ACCEPTED;拒绝时立即 return,绝不 fallback;legacy/diagnostic 低层 timeline 路径继续保留。 - 修正提交:
74e3cc911b8cecd4f3d75613055c213a8bcebcdb;未执行 Android Gradle、APK、ADB、设备测试或 Jest。
2026-09-07 — STEP-060 RN Test Host 与 WeatherRuntime 薄桥接
- 建立
integration/react-native/MapLibreParticleRNTestHost,冻结 RN/Expo/MLRN 技术基线;style 预先创建 host-field RasterArraySource、WeatherColorLayer、RasterParticleLayer,但不传 Binary Field。 - MLRN 11.3.6 的共享 ReactTagResolver 实例由
MLRNPackage私有持有;Test Host 改用 RN/Fabric 的公开 UIManager view resolver,即时收窄到 MLRNMapView 并读取其公开 MapLibreMap,不复制私有 mViews 或建立 current-map registry。 - MapLibreMap 新增 map-owned WeatherRuntime attach/detach seam;style replacement、view detach 与 React unmount dispose 旧 facade。Android custom SDK 必须先手工发布 Maven Local,Host 配置会排除 Maven Central 中 org.maplibre.gl fallback。
- 非 Android 验证:冻结 package-lock/config、Node config plugin 语法、禁止 Binary Field/global map/private registry 搜索与 throttle 下
tsc --noEmit均通过;Android Gradle/设备/Jest 未执行。
2026-09-07 — STEP-060A RN Test Host 编译前修正
- 按 RN 0.85.2 当前 Codegen 模板为 TurboModule 的 20 个必选 Kotlin Spec 方法补齐
override,消除首次 Android 编译的确定 blocker。 - Test Host package manager 统一为 npm/package-lock;实际
npm ci --ignore-scripts不需 legacy peer deps。文档将 Android toolchain 数值改为首次 prebuild 前的验收目标,待生成工程实测。
2026-09-07 — STEP-060B Gate C 封存环境与 Custom AAR 接入修正
- Gate C 继续只表示 MapLibre Native custom AAR 的封存 Linux 编译环境;STEP-060 Maven Local 继续是 RN Test Host handoff,不因 Expo 生成工程的 Gradle/AGP/NDK 数字反向修改 Gate C。
- publication 源码确认 custom OpenGL 坐标
org.maplibre.gl:android-sdk-opengl:13.4.1与精确 Maven Local taskpublishOpenglreleasePublicationToMavenLocal。plugin 将 Central 排除收敛到该唯一 custom module,确保 AAR 缺失 fail-closed,且不阻断 MLRN turf/plugins 辅助依赖。
2026-09-07 — STEP-060C Maven Local 签名隔离修正
- Vanniktech
signAllPublications()仍负责建立 Maven Central 的 publication 签名;其默认 release required 条件覆盖 Maven Local,导致无 signatory 时 Local handoff 失败。 - publication build logic 现将 Gradle
SigningExtension.required延迟绑定到 task graph:存在*PublicationToMavenCentralRepository时必须签名;精确 Maven Local publication 则跳过 Sign task,不需要 PGP secrets、-x sign、SNAPSHOT 或第二仓库。 - 实现阶段曾核对中间 AAR SHA-256
47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7,当时未重建、未执行 Gradle publish;该 SHA 与等待状态已在随后的人工 publication 验收中被最终 artifact 结果取代。
2026-09-07 — STEP-060C 人工 Maven Local 验收收尾
- 用户在 Gate C 实际运行精确 Maven Local publication task:
signOpenglreleasePublication SKIPPED,publishOpenglreleasePublicationToMavenLocal成功,BUILD SUCCESSFUL in 3m 33s,不再有no configured signatory。 - 最终 Maven Local AAR、当前 build output AAR SHA-256 一致,均为
2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38;POM/module 坐标正确,AAR 含 WeatherRuntime/MapLibreMap 和四 ABI,Local 无.asc符合设计。此前47646fb…是 publication 前中间 SHA,已失效。 - STEP-060C 状态关闭为
CLOSED / PASS,范围仅 Maven Local signing isolation 与 publication handoff;RN Test Host Android compile、Phase A/B、lifecycle、Binary Field 与 STEP-061 仍未验证。
2026-09-08 — STEP-060D WeatherRuntimeBridge attach 精确诊断
- attach 现独立报告
rn-weather-fields、rn-weather-color、rn-weather-particles状态;WEATHER_OBJECTS_NOT_READY包含 reactTag、MapView/MapLibreMap/Style 状态、三个 ID 的 present/missing、Style source/layer count 和 weather-first 的有界 ID 摘要。 - Linux 生成并发布唯一诊断 AAR:
org.maplibre.gl:android-sdk-opengl:13.4.1-step060d,build output 与 Maven Local AAR SHA-256 均为7391440f02e976f295caa265bc15e895a7c0183883a0e2cb08deef4cf42b0096,含四 ABI。 - 当前 Expo 生成工程缺失
NativeWeatherRuntimeBridgeSpec,标准 codegen task 为 SKIPPED,故 bridge Kotlin compile 不能独立验证;未改生成工程绕过。后续由 CARBON7i 用此唯一 AAR 收集 Android attach 诊断,仍不进入 STEP-061。
2026-09-08 — STEP-060E CoreOnly Layer 存在性检查修复
- 根因确认:WeatherColorLayer 与 RasterParticleLayer 属于 CoreOnly layer,Core 能渲染但没有 Java Layer peer;故 STEP-060D bridge 用 Style.getLayer() 会对真实 layer 产生假阴性。
- 新增 MapLibreMap.hasStyleSource/hasStyleLayer,经 Android JNI 直接查询 Core Style;bridge attach 三项 weather object 判断统一使用该真值,保留既有成功路径与 WeatherRuntime 生命周期,不增 Java peer、重试或私有 registry。
- WEATHER_OBJECTS_NOT_READY 改用 styleUri(JSON style 为 )并移除不可靠的 Java layer/source 枚举;临时 Maven version 升为 13.4.1-step060e。
- 本轮不构建 AAR、不发布 Maven Local,APK/ADB/设备验收待人工构建该版本后进行;仍属于 STEP-060,未进入 STEP-061。
2026-09-08 — STEP-060F WeatherColor Opacity 与 Android 收尾修复
- Android 已实测 attach PASS,
WEATHER_OBJECTS_NOT_READY已由 STEP-060E CoreOnly 真值链解决;无 Binary Field 的TIMELINE_NOT_READY仍是预期 fail-closed 行为。 - 修正 WeatherColor opacity 错走 particle-only setter:新增独立 Java/JNI/Core typed 路径,直达
WeatherColorLayer::setOpacity(),不扩大 RasterParticle whitelist 或新增 Java Layer peer。 - Test Host 将
8091 -> 8091与 Android debug probe 所需8081 -> 8091固化到 Git 受控启动脚本,保留app.jsonlandscape;临时坐标升为13.4.1-step060f。 - 状态为
IMPLEMENTED / WAITING_ANDROID_VALIDATION;AAR/APK/ADB/设备最终复验等待用户,本轮未进入 STEP-061。
2026-09-08 — STEP-060F Android 最终验收通过
13.4.1-step060fOpenGL AAR 以JOBS=1构建并发布成功;Linux build output、Maven Local 与 CARBON7i 下载 AAR SHA-256 均为53dfcd43f3479ae43a3c0fd91c10ccbfec7cf1c84ae22ae3435c94393806da6d。- Bridge 与 MLRN 两条
dependencyInsight均解析到13.4.1-step060f;Test Host APKassembleDebug通过。 - Android 实测横屏、双 Metro reverse、
WeatherRuntime attached均通过;完整验证 UI 的weather opacity返回ACCEPTED。 - 当前 App PID 日志无
WEATHER_OBJECTS_NOT_READY、UNSUPPORTED_PROPERTY、FATAL/JNI/SIGSEGV hard-gate 错误;无 Binary Field 时TIMELINE_NOT_READY继续按预期 fail-closed。 - STEP-060 正式
CLOSED / PASS;后续可进入 STEP-061 Binary U/V Field Transport。
2026-09-08 — STEP-061 Binary U/V Field Transport(IMPLEMENTED / WAITING_RDC_REVIEW)
- RN Test Host 固定以 Expo FileSystem
File.write(Uint8Array)写 raw canonicalfloat32-le/interleaved-uvU/V bytes,并经 TurboModule 的metadataJson + payloadFileUri交给 Kotlin;没有 number-array、payload JSON、base64 或 hex transport。 - Bridge 限制本地
file:///绝对路径、可读非空和 64 MiB payload,再调用既有WeatherRuntime.submitWindField(metadataJson, byte[]);Core Adapter/Timeline/Runtime Window 未修改,仍是唯一验证与状态所有者。 - UI 提供 invalid byteLength probe(预期
REJECTED_ADAPTER)、T0(预期ACCEPTED_PENDING_INITIAL_WINDOW)、T1(预期INITIAL_WINDOW_READY)及 Native READY state evidence;JS 不管理 T0/T1/MIX runtime state。 npm run typecheck、RN 0.85.2 Codegen(仅/tmp生成)和git diff --check已通过;未执行 AAR/Windows/APK/ADB/设备/Jest,等待 RDC 审查真实 diff。
2026-09-09 — STEP-061 RDC NEEDS FIX 修正(IMPLEMENTED / WAITING_RDC_REVIEW)
-
Binary UI 改为初始/提交时 PENDING,仅在 invalid/T0/T1/Native state 严格为
REJECTED_ADAPTER、ACCEPTED_PENDING_INITIAL_WINDOW、INITIAL_WINDOW_READY、READY后显示 READY;任一不符 fail-closed 显示 ERROR。 -
Runtime 文案严格分离 Core evidence(
INITIAL_WINDOW_READY + runtime READY)和 producer identity;MIX 为 Core-owned/not exposed,Android 最终 T0/T1 仍由既有 HOST_FIELD logcat 事件验证。 -
Kotlin 显式捕获 IOException、拒绝无 scheme 相对路径,metadata 上限按 UTF-8 bytes 计算。AAR 坐标已准备为唯一
13.4.1-step061,不覆盖冻结 step060f;本轮按限制未 build/publish,待 RDC 后续指令。 -
本轮
npm run typecheck、RN Codegen(仅/tmp)、pluginnode --check、禁止 transport 审计与git diff --check均通过;继续停在 Codex prompt 等待 RDC。
2026-09-09 — STEP-061 Binary U/V Field Transport Android 最终关闭
- Source commit
4467adcce02db7f1bbbea1f4a829023c53085e39的 RN binary file-reference transport 已完成 Android OpenGL 端到端验收,STEP-061 正式CLOSED / PASS。 - AAR
org.maplibre.gl:android-sdk-opengl:13.4.1-step061以JOBS=1构建;Linux build output 与 Maven Local SHA-256 均为40ec19724cbe0807c09c6acf9b7e6e0dac2f2498f1269b6bacdd35740a6cd77a,CARBON7i 下载与 Win11 Maven Local 同 SHA。 - Bridge 与 MLRN dependencyInsight 均唯一解析到
13.4.1-step061;Win11 Test HostassembleDebug为BUILD SUCCESSFUL in 1m 50s。 - Android
192.168.1.146实测:Invalid=REJECTED_ADAPTER,T0=ACCEPTED_PENDING_INITIAL_WINDOW,T1=INITIAL_WINDOW_READY,GETSTATE 后 runtime=READY / PAUSE / AUTO;Binary Transport=READY: FILE_REF / FLOAT32_LE / INTERLEAVED_UV。 - 当前 App PID hard gate 中 FATAL/SIGSEGV/WEATHER_OBJECTS_NOT_READY/JNI DETECTED/UnsatisfiedLinkError/NoSuchMethodError 均为 0;非法 payload 的
PAYLOAD_SIZE_MISMATCHWarning 可见并保持 fail-closed。 - Release AAR 的
HOST_FIELD_SNAPSHOT_READY/HOST_FIELD_INITIAL_WINDOW_READYINFO 日志本轮未在设备 logcat 观察到,已如实记录为 observability 限制;未伪造日志证据,正向以 direct Core result + Native READY 为权威。 - 未进入 NavSea,未引入 provider/network/vendor 逻辑,未使用 number[]/payload JSON/base64/hex,未加入或运行 Jest;
/mnt/nas/pbf临时制品已清理,baseline UI 与 Git 当前 App.tsx 保持一致。
2026-09-09 — STEP-062 RN Test Host 真实 WeatherV2 底图粒子综合验证(IMPLEMENTED / WAITING_ANDROID_VALIDATION)
- Test Host 固定
13.4.1-step061AAR,不改 Native/Core/JNI/WeatherRuntime,不 build/publish AAR,不进入 NavSea。 - style 升级为
background → GSI raster → WeatherColorLayer → RasterParticleLayer,GSI 使用 Android Validation 已验证 URL、256/maxzoom18/attribution;Camera 初始聚焦日本及周边。 - Android Validation 的 ECMWF HRES 20260807 canonical T0–T3 assets 已原样放入 Host assets,四帧各 3,155,976 bytes 且逐文件 SHA-256 一致。
expo-asset以静态.f32require +downloadAsync()输出 cachefile://URI;只把 metadata string 与 local file reference 交给既有 STEP-061 bridge,绝不 materialize payload 为 array/JSON/base64/hex。LOAD REAL WEATHER T0-T3clear 后严格断言 Pending、InitialWindowReady、NextSnapshot、NextSnapshot 和 Native READY;控制页提供 timestamp seek、playback/speed/FPS、独立 visibility/stops/colors 与视觉参数。静态 typecheck/Metro/asset hash 通过;RDC 追加 Android Expo export 也已确认四个.f32正常打包,功能提交a91e3601f37f3adfe5d8b7b6a6c3f7f04fcadb8f已 push;Android APK/实机待 CARBON7i 一次综合验收。
2026-09-09 — STEP-062 Android APK-only 最终关闭
- 用户已在 Win11 Test Host 手工完成依赖安装、typecheck、APK 编译/安装和实体机综合验收;Metro 确认
.f32=true,Test Host 始终使用冻结org.maplibre.gl:android-sdk-opengl:13.4.1-step061。 - GSI 日本标准底图、真实 WeatherV2 T0–T3、binary file ingress、既有 Native/Core 正式入口、WeatherColor、GPU 粒子、地图拖动/缩放/旋转联动、双层独立显示、视觉参数、四时次切换及其他可操作交互均经用户确认 OK;LOAD 后整体评价为“非常完美”。
- Timeline/Playback 可操作且未见明确异常;因四帧间隔 6 小时,短时自动播放视觉变化不明显。用户接受当前表现,不追加专用 Timeline 可观测性 UI,不构成关闭阻塞。
- 最终用户验收未额外执行完整 PID logcat 硬门槛扫描,未声称 logcat 0 error。未改功能代码/Native/Core/JNI/WeatherRuntime,未 build/publish AAR,未接入 NavSea,未执行 Gradle/APK/ADB/Jest;STEP-062 正式
CLOSED / PASS。
2026-09-09 — STEP-063 Android v1 发布工程化(IMPLEMENTED / WAITING_MANUAL_RELEASE_VALIDATION)
- 实际 upstream Android 基线确认是 MapLibre Native
13.4.1/ core18545ca/ OpenGL;建立13.4.1-particle.1release manifest、@navsea/maplibre-particle-rn与cc.navsea.maplibre:android-sdk-particle-opengl正式契约。 - Android publication 配置、正式 bridge/package 和 Gradle substitution 统一到 NavSea AAR,MLRN 保持唯一 native module;Consumer Host 只依赖正式 npm package,不引用源码路径、Native tree 或 bridge source。
npm pack与 package TypeScript/static audit 完成;未执行 Android Gradle/AAR/APK/ADB/Jest,未决定 registry,未创建 release tag。下一步为用户手工 AAR publication 与 tarball Consumer APK/实体机验证。
2026-09-10 — STEP-064 RN 纯 Field Renderer 接口 V2(IMPLEMENTED / WAITING_CONSUMER_VALIDATION)
@navsea/maplibre-particle-rn升为13.4.1-particle.2,根入口只提供FieldRuntime、纯类型与 field style fragment;旧 Weather/Wind 公共 API、MLRN facade re-export 与兼容 wrapper 均删除。- 包内 WeatherV2 HTTP、manifest、time index、decoder 与 loader 已移出,Consumer Test Host 保留自身的真实 fixture/file URI 业务链,并直接从官方 MLRN 导入 Map/Camera。
FieldColorStop.value在 RN 薄层转换为冻结 Native ABI;无 Native module 时 import 安全,实际调用明确失败。图场与粒子继续共享一次 canonical Field 提交,显示可独立控制。- Native/Core/JNI/shader/Android AAR 未改,artifact 继续
cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.1;Android Gradle/AAR/APK/ADB/Jest/NavSea 均未执行。package 与 Consumer TypeScript 检查已通过,发布 tarball 的实际 Consumer 验证待后续完成。
2026-09-10 — STEP-064 Consumer 验证通过 / Release Freeze 前
.2Consumer 首轮发现 RN style helper 的raster-particle-opacity非 Native.1支持属性,导致 particle layer 缺失;RN-only 修正为raster-particle-active。- 固定 Consumer 复用既有 Native
.1APK,通过 Metro 加载.2:FieldRuntime attach、真实 T0–T3、Runtime READY、Field/Particle 独立开关与恢复全部通过。 - hard gate 未见 WEATHER_OBJECTS_NOT_READY、FATAL、SIGSEGV、JNI/链接错误;未重建 Android AAR/APK。
- 当前进入
maplibre-particle/rn/13.4.1-particle.2Release Freeze/Tag。
2026-09-10 — STEP-064 正式发布 / 冻结
@navsea/maplibre-particle-rn@13.4.1-particle.2已正式发布;release sourcee43b58707cfd0f87965424477ed3f95625b3f724,tagmaplibre-particle/rn/13.4.1-particle.2已 push。- 正式 HTTPS tgz 为 10,660 bytes,SHA256
ace9e0401824839d18a93cc4201c1f5d4cccbff0636570cfde82fd80b60779b5,NAS 与公网下载字节一致。 - Win11 Consumer 已从正式 HTTPS URL 安装并通过 TypeScript/依赖树检查;此前 Android Consumer 已通过 FieldRuntime、T0–T3、Runtime READY 与 Field/Particle 独立开关。
- Native AAR 继续使用
13.4.1-particle.1;STEP-064 冻结,后续 RN 修改从.3开始。
2026-09-10 — STEP-065 V3 通用 Scalar / Vector Field 架构冻结
- 只读核对当前 v1 Core/RasterArray Timeline/两 renderer/GLSL、Android/JNI/RN binary ingress,以及 WeatherV2 NSFT Wind/Tide/Rain/Wave;未修改生产代码、WeatherV2 或 NavSea,未执行 Gradle/APK/ADB/Jest。
- V3.0 冻结为
maplibre-particle-field/v2:一个 Snapshot 最多一个 scalar plane、一个 interleaved U/V vector plane 和一个 shared validity plane;scalar-only、vector-only、scalar+vector 合法,neither fail-closed。 - Renderer policy 与数据分离:Field 明确选择
SCALAR或VECTOR_MAGNITUDE,Particle 明确选择VELOCITY或DIRECTION;Wave direction 是归一化方向,插值近零/反向时 fail-closed,推进 scale 独立于业务数据。 - 保留 v1 作为最薄 ingress normalize,运行时只保留一套 V3 Timeline/GPU bundle;保护 T0/T1/MIX、pause、OLD_T1→NEW_T0 bundle reuse、only NEW_T1 upload、normal rollover 不重建 simulation/clear trail。
- 下一步为 V3-02 Core Contract + Scalar Snapshot/Adapter;先完成 Linux/Core fixture 与 compatibility,再统一进入 GPU、Android/JNI/RN 与一次 Android 综合验收。
2026-09-10 — STEP-066 V3-02 Core Contract 与 Scalar Snapshot Adapter
- Core snapshot 现为 optional scalar、optional interleaved U/V vector 与 shared validity;v2 vector-only、scalar-only、scalar+vector 均由独立 plane bundle 解码,neither 和尺寸/semantic/finite/validity 错误 fail-closed。
- 旧 v1 单 payload 未扩展:adapter 从 U/V noData 派生 shared validity,并归一为
VELOCITYvector snapshot;Core 不再以WIND/GLOBAL判断 capability 或 compatibility。 - Timeline T0/T1/MIX/pause/rollover ownership 未改;compatibility 收紧为 grid/bounds、channel presence 与 vector semantics;content identity 覆盖 scalar/vector/validity 的逐值变化。
- 既有 GPU renderer 尚不消费 scalar:本轮只让 scalar-only 不可用,未改 shader 或渲染计算。Linux OpenGL Core/source test 精确编译和
Source.ParticleFieldV3*过滤测试通过;未运行 Gradle/AAR/APK/ADB/Jest。
2026-09-10 — STEP-067 V3-03 Scalar GPU 与 Generic Field Renderer
- WeatherColor 现以显式
FieldValueSource::Scalar|VectorMagnitude决定使用 canonical scalar 或 U/V magnitude;默认仍是VectorMagnitude,保持现有 Wind 色场。两个时间片均按 selected channel + shared validity fail-closed,scalar 在 GPU 作 T0/T1 数值插值后走同一 generic color ramp。 WeatherColorStop的 C++ 字段从speedMps收敛为 genericvalue;shader/UBO/log 不再声称固定 m/s。切换 value source 会重新编码资源,正常 OLD_T1→NEW_T0 rollover 仍复用同一 decoded bundle。- RasterParticleLayer 继续只接受
VelocityU/V;scalar-only 或Direction立即不可绘制并释放粒子资源,未实现 DIRECTION advection。 - shader generator、受影响 C++ 对象和 Core/layer 过滤测试均通过;全量 OpenGL
mbgl-test链接受当前单次终端时限限制未完成,未虚报 PASS。未运行 Gradle/AAR/APK/ADB/Jest,未触碰 STEP-062 或历史未跟踪内容。
2026-09-11 — STEP-067 Linux 全量目标验证收尾
- 用户在当前
HEAD06fcbef9ccb820e595f06acbd356950de7e3a73f手工执行ninja -C build-linux-opengl -j3 mbgl-test mbgl-test-runner,Ninja 返回no work to do.;确认mbgl-test与mbgl-test-runner完整目标及其依赖已经最新,没有待处理构建或重链接工作。 - 此结果只关闭此前 Linux 全量目标重链复验,不代表重新执行全量测试用例;本轮未执行 Android Gradle/AAR/APK/ADB/Jest,未修改生产代码、STEP-062 用户修改或其他历史未跟踪内容。STEP-067 正式
CLOSED / PASS。
2026-09-11 STEP-068:实现 V3 DIRECTION 粒子推进与 renderer advectionScale。DIRECTION 为 T0/T1 分量 MIX 后归一化,近零/非有限 fail-closed;VELOCITY 保持旧 m/s 数学且不消费 scale。已生成 shader 并完成变更前精确对象/过滤测试;新增最终 CPU oracle 后的精确编译与重链受本沙箱约 30 秒单次终端限制阻塞,状态为 IMPLEMENTED / WAITING_VALIDATION,未执行 Android 或 Jest。
2026-09-11 STEP-068:全量 Linux 重编译发现 WeatherColor 的 ParticleGpuValidationUBO 聚合初始化漏填新增 advection,触发 -Wmissing-field-initializers。仅补入 {Direction=0, scale=1, epsilon=1e-5, reserved=0} 的色场安全中性值;审计确认另一处 Particle renderer initializer 已完整初始化。未修改 shader/Android/JNI/RN/WeatherV2/NavSea/STEP-062;不据此声称全量重链 PASS。
2026-09-11 STEP-068 收尾:WeatherColor UBO 漏初始化修复后,最终受影响精确对象 PASS;mbgl-test / mbgl-test-runner 完整 Linux OpenGL 目标重编译与重链 PASS;STEP-068 相关 Source.ParticleFieldV3*:Layer.RasterParticle* 8/8 PASS;git diff --check PASS。额外扩大过滤范围发现基线既有 WeatherColor 测试末尾断言逻辑错误,已确认不由 STEP-068 引入,未混入本任务修复。STEP-068 正式 CLOSED / PASS;Android/Jest 未执行。
2026-09-11 STEP-068 Git:主实现 f3c33c67275b24f61b80924abbb9d10d68b2cb7c(feat: add direction particle advection)已成功 push 到 origin/particle/main,推送后 HEAD 与远端一致;STEP-062 用户修改与历史无关文件未提交。
2026-09-11 STEP-069:实现 RN .3 的 maplibre-particle-field/v2 多 plane ingress。FieldPayloadRefs 强制 shared validity、scalar/vector 至少一个,Kotlin 在读取前完成 local file 与 aggregate 64 MiB 校验;Java/JNI 以 presence flags/lengths 的明确 container 恢复 Core optional bundle。v1 单 vector ABI 保留为 submitLegacyVectorField。同时桥接 SCALAR/VECTOR_MAGNITUDE 与正 finite advectionScale,不改 Timeline、WeatherV2、NavSea 或 STEP-062。Android Gradle/AAR/APK/ADB/Jest 未执行,状态 IMPLEMENTED / WAITING_ANDROID_VALIDATION。
2026-09-11 STEP-069 复核修正:Native TurboModule Spec 移除 codegen 不支持的外部 FieldPayloadRefs object 参数,改用明确的 validity/scalar/vector string ABI;公共 FieldRuntime.submitField(..., FieldPayloadRefs) 不变,空 scalar/vector 仅为 bridge optional marker。外部复核指定 codegen schema 命令与 package tsc 均实际 PASS。Java facade 对 nullable scalar/vector 明确 @Nullable,并补 total <=64 MiB 防御;新增 Core 最小测试确认 v1 legacy 与 compatible v2 vector-only 进入同一 RasterArraySource Timeline,精确编译、mbgl-test 重链和过滤测试 2/2 PASS。Android Gradle/AAR/APK/ADB/Jest 未执行,仍为 IMPLEMENTED / WAITING_ANDROID_VALIDATION。
2026-09-11 STEP-069 Git:主实现 148bf80fe41ba566de6c1d4b439cfe372a8a453c(feat: add v2 multi-plane field ingress)已完成 scoped commit;最终独立复验确认 RN codegen、TypeScript、Linux 重链与 STEP-069 两个 Core 过滤测试 2/2 PASS。STEP-062 用户修改与历史无关文件未纳入;Android Gradle/AAR/APK/ADB/Jest 仍未执行。
2026-09-11 STEP-069 首轮推送:implementation 148bf80fe41ba566de6c1d4b439cfe372a8a453c + handoff 12827489f4c377175554562632129df125c0a556 已成功 push 到 origin/particle/main,首轮 push 后本地与远端一致。随后仅回填 Git 结果形成 metadata 收尾,不改变功能代码。
2026-09-11 STEP-070 V3-06
- 离线 v2 fixture validator 现逐 valid cell 检查所有存在 plane 的 finite/noData;Wind shared validity 严格来自 U/V 同时 finite 且均非
-9999。 - Wave 已由 WeatherV2
2026090912正式waves_particles.bin(T0=2026090918、T1=2026090919)直转为 height scalar + 归一化 DIRECTION vector;Tide 已由 CMEMS2026090900正式current_vectors.bin(T0=2026090901、T1=2026090902)直转 VELOCITY vector。每帧保留 BIN/sidecar SHA-256、target_time、grid/bounds/provenance;Wave period 不进入 canonical。 - Rain 仍为明确“非真实场值”的 PMTiles decoder fallback,generation=1/2;RN Host 已将 Wave/Tide 指向 real fixture,并继续只用
.3FieldRuntime公共 API。 - fixture validator、package tsc、Host typecheck、RN codegen 与
/tmp/step070-ccache精确 Core object PASS。随后 Linux OpenGL 完整依赖闭包构建 459/459 完成,mbgl-test-runner成功链接,Source.ParticleFieldV3*过滤测试 6/6 PASS,验证链退出码 0,git diff --checkPASS。Android Gradle/AAR/APK/ADB/Jest 均未运行,STEP-070 保持 IMPLEMENTED / WAITING_ANDROID_VALIDATION。 - STEP-070 implementation
8588e6fcb4f3f5d874159c2e42619c5227cb7921已 scoped push 到origin/particle/main;STEP-062 与历史 untracked/build/cache/tgz 未纳入。
2026-09-11 — STEP-071 V3-07 Linux 综合冻结
- 最终冻结链:fixture validator、package tsc、RN Test Host typecheck、RN codegen、Linux OpenGL
mbgl-test/mbgl-test-runnertarget 均 PASS;V3 综合过滤 21/21 PASS,git diff --checkPASS,验证链退出码 0。 - 综合回归发现并修正两个测试 fixture 陈旧问题:Host T0/T1 重复 GPU content 导致 Duplicate,以及旧 east/north/vortex
timeIndex=0导致 Timeline fail-closed。只改测试数据组合,不改 Runtime/Timeline/Renderer 生产逻辑。 - Android Gradle/AAR/APK/ADB/Jest 未运行;V3-07 Linux 冻结关闭,下一步统一进入 V3-08 Android 综合验收。STEP-062 用户 dirty 与历史 untracked/build/cache/tgz 未纳入。
2026-09-11 — STEP-072 V3-08 Android Native v2 与单次综合验收准备
-
Native Android 目标版本升为
13.4.1-particle.2;RN package13.4.1-particle.3、Expo plugin、RN Test Host 与 release manifest 统一到该坐标,当前 Android 状态保持not_run,未伪造 AAR SHA、发布时间或 release tag。 -
准备审计发现 Test Host 同时 autolink legacy local bridge 与正式 package bridge,二者均注册
WeatherRuntimeBridge/WeatherRuntimeBridgeSpec。STEP-072A 删除 legacy tracked bridge、根react-native.config.js,并收敛tsconfig.json;Expo autolinking 复核后只剩正式@navsea/maplibre-particle-rnbridge。 -
静态 hard gate:Host/package TypeScript、RN codegen、V3 fixture validator、两个 Expo plugin 语法、release manifest JSON、
git diff --check全部 PASS;legacy untrackedandroid/build/原样保留。 -
已冻结 V3-08 单次 Android 验收流程:Linux 构建/发布 Native
.2→ SHA/API 检查 → Win11 Maven Local handoff → clean prebuild/dependencyInsight/一次 APK build → Metro 8091 → 固定设备192.168.1.146→ Wind/Rain/Wave/Tide/synthetic Wave 五组综合验收。Android Gradle/AAR/APK/ADB/Jest 均未执行,状态IMPLEMENTED / WAITING_ANDROID_VALIDATION。 -
STEP-072 implementation/preparation
11cf58d344e64e6aff77deceb2c34c8eda045f1b(chore: prepare V3-08 android validation)已成功 push 到origin/particle/main;push 后实现基线 HEAD 与远端一致。
2026-09-11 STEP-072 / V3-08 CLOSED / PASS
Android V3-08 单次综合验收已完成并关闭。Native 13.4.1-particle.2 已发布并验证;RN 13.4.1-particle.3 通过正式 npm tarball + 远程 Maven 消费链。Win11 Gradle 8.14.3 / AGP 8.12.0 / Kotlin 2.1.20 构建 PASS。实体机 192.168.1.146 五组 Wind/Rain/Wave/Tide/Wave synthetic 均通过 T0/T1/READY 门槛,播放、速度、FPS、seek、独立显隐和视觉 API 均 ACCEPTED,fatal/JNI 扫描为空。
2026-09-13 STEP-073 QBIN2 V4 Core 与通用 Profile Validator
- 新增 provider-neutral
DecodedFieldFrame/ FieldSeries / ForecastClock primitive 及 Contract Schema v1 的纯数据驱动 Validator;不接入 QBIN decoder、Renderer、V3 生产路径、Android/JNI/RN。 - Validity 采用独立 descriptor 与共享只读 payload;REQUIRED 双向一致、额外 plane、时间关系、共享 validity 能力和 Velocity/Direction/Validity Core 规则均 fail-closed 且结构化返回。
- Linux OpenGL
mbgl-test构建、新 Validator/Runtime 定向测试和既有 V3 Field/Timeline 定向回归均 PASS;未执行 Android Gradle/APK/ADB。
2026-09-13 STEP-073 v2 审计修正
- QBIN V2 DEGREE Core Unit ID 由错误
2修正为冻结 registry4(NONE=0、MPS=1 保持);Generic Validator 覆盖 Direction4接受、2的InvalidCoreUnit拒绝。 - Plane identity 收紧为
(semanticID, groupID);Frame/Contract 同 key 不同 component 均结构非法,已定位但 component 错误返回PlaneDescriptorMismatch,既有 U/V 各 semanticID 的 velocity group 规则不变。 - ForecastClock 采用 half-millisecond remainder,修复 HALF 连续短 tick 的逐 tick 取整漂移;seek 清残差、pause 与 overflow fail-closed,NORMAL/DOUBLE 保持。
- Linux OpenGL
mbgl-test、V4 Validator/Runtime 与 V3 Field/Timeline 定向回归均 PASS;未执行 Android Gradle/APK/ADB/Jest,未进入 QBIN Decoder/JNI/Renderer/RN。
2026-09-13 STEP-073 v3 审计修正
- Generic Validator 新增静态数据表驱动的 Native Core semantic contract:
1/2固定 U/V velocity、3固定 shared validity、10/11固定 Direction DEGREE/NONE/group0;Contract 与 Frame 的冲突均结构化拒绝为SemanticContractMismatch,不依赖任何 profile 或产品名称。 DIRECTION_ANGLE通用 Circular Quantization 现强制DEGREE=4、NONE、group0、UINT16、offset=0、scale=360/65536(极小 float32 tolerance);opaque unknown Scalar unit 保持可扩展。- Linux OpenGL
mbgl-test、Validator/Runtime 过滤测试和 V3 Field/Timeline 过滤回归均 PASS,git diff --checkPASS;未执行 Android Gradle/APK/ADB/真机/Jest/iOS-Metal,未进入 QBIN Decoder、Binding/Projection、Renderer、JNI、Android 或 RN。
2026-09-13 STEP-073 v4 最终关闭修正
DecodedFieldFrame固化 single shared validity domain:designated validity 必须为Validity/Bitset/NONE/group0/None/REQUIRED,与validityBits同一共享引用;普通planes[]禁止第二张 Validity。空 numericplanes[]仍结构有效,缺 Profile numeric requirement 正确返回MissingRequiredPlane。- Validator 在 required descriptor 匹配前检查 actual reserved Core semantic;semantic 1 Scalar 伪装、semantic 10 的 component/group 冲突优先为
SemanticContractMismatch。unknown Scalar opaque 与 Direction circular quantization 规则保持。 - ForecastClock 测试在 pause 后显式恢复
play(),生产 pause 语义未改。实际重建并重链mbgl-test-runner后,V4 filter 11/11 PASS、V3 定向回归 11/11 PASS、git diff --checkPASS;未进入 Decoder/Renderer/JNI/Android/RN,停止等待独立复验。
2026-09-13 STEP-074 QBIN2 V4 Encoded Ingress 与 Decoder
- 新增独立
mbgl::particle::ingress::QbinV2Decoder与纯函数EncodedFieldIngress:严格解析 raw QBV2,构造只读DecodedFieldFrame后交给既有 genericFieldProfileValidator;未接入 Store、Renderer、Binding、Host 或 platform bridge。 - Header/descriptor/limits/CRC/canonical packing/zero padding、single shared validity、invalid-cell raw-zero 和 per-plane local content identity 均 fail-closed;numeric bytes 不预展开为 float。
- 新测试 fixture 只位于 C++ test 范围,覆盖 2×2、损坏输入与 513×769 结构 frame;未实现下载、URL、HTTP、gzip、JNI、Android、RN 或 Renderer。
2026-09-13 STEP-074 v2 审计关闭
- per-plane identity 已改为 raw bytes + descriptor 的显式 Little Endian canonical hashing,float 采用 IEEE754 bits;byte offset 不参与 identity。fixture writer 同样改为显式 Little Endian。
- 32 MiB 限制只计所有 Plane raw bytes,16-byte canonical padding 不计入;QBIN 文件整体仍限制为 64 MiB。BITSET/VALIDITY 双向约束,decode accepted 前强制 Frame structural self-check。
ParticleQbinV2Decoder/ParticleEncodedFieldIngress实际 18/18 PASS(v1 6);STEP-073 11/11、既有 V3 11/11、Linux runner 重链与git diff --check均 PASS。未执行或修改 Android/JNI/RN/Host/Renderer/Binding/网络/iOS-Metal。
2026-09-13 STEP-074 v3 最终测试覆盖收口
- Decoder 入口优先级已由 production
QbinV2Decoder::decode直接覆盖:0/1/111 byte 为InputTooSmall,完整 Header 的非 QBV2 magic 为BadMagic,空 fieldID 或 generation=0 为InvalidRuntimeMetadata;dataVersion=0合法 Accepted。 - Header width 和 descriptor count 的 big/mixed-endian corruption 均在重算 CRC 后 fail-closed,分别结构化为
LimitExceeded、InvalidDescriptor。 - 1447×1449、7 plane 的 raw sum=31,712,633 bytes,canonical payload=31,712,648 bytes,15 bytes padding 不计入 32 MiB decoded raw limit 且 decoder Accepted。
- Linux runner 重建/重链、STEP-074 24/24、STEP-073 11/11、既有 V3 11/11 与
git diff --check均 PASS;未改 production Decoder、Host、网络、JNI、Android/RN、Binding/Projection、Renderer 或 iOS/Metal。
2026-09-13 STEP-074 v4 审计最终修正
AcceptsRawLimitWithCanonicalPaddingExcluded改为 1101×1890(2,080,890 cells)的 17-plane canonical fixture:single shared validity BITSET 加 16 个 UINT8 numeric plane。rawSum=33,554,352 bytes,小于 32 MiB limit=33,554,432;payloadLength=33,554,448 bytes,大于 limit 与 rawSum;totalQbinBytes=33,555,104 bytes,小于 64 MiB。- production
QbinV2Decoder::decode(...)Accepted;未发现生产缺陷,未改 Decoder 或 Host/网络/JNI/RN/Binding/Projection/Renderer。真实 runner 重建 PASS,Decoder/Ingress 24/24、Runtime/Profile 11/11、Source 回归 11/11 PASS,git diff --checkPASS;未执行 Android Gradle/APK/ADB/Jest,按范围停止。
2026-09-13 STEP-075 QBIN2 V4 Binding 与 Projection Identity
- 新增 provider-neutral Color/Particle Binding 与 Resolver;每个 binding 按自己的 fieldKey 解析 FieldSeries Window,SampleState 单独保存 requested time/mix,Content Identity 不包含 mix 或视觉/播放状态。
- Vector U/V 与 DirectionAngle 都严格按 selected plane assertion fail-closed;Scalar-only revision 保持 Particle U/V/validity storage 与 identity 不变。
- Linux runner 真实重建、规定 Core filter 50/50 PASS、
git diff --checkPASS;未执行 Android Gradle/APK/ADB/Jest/iOS/Metal,未进入 Renderer/GPU/Host/JNI/RN,STEP-075 关闭并停止。
2026-09-13 STEP-075 v2 Binding/Projection Identity 审计收口
- Color 与 Particle identity 统一以
ProjectionFrameCoordinate(fieldID, validTimeMs)定位 T0/T1 window,只纳入各 binding 实际 selected plane 与 shared validity content identity;无关 plane 的 generation/dataVersion revision 不再污染另一 projection。 - Store public-path
ReplacedRevision对称覆盖:Scalar-only 仅改变 Color、U/V-only 仅改变 Particle、validity-only 同时改变两者;MIX 仍不进入 identity,in-window storage 仍稳定。 - Resolver 删除不可达
InterpolationIncompatible;相邻 frame compatibility 继续由既有FieldSeries::submitfail-closed 保证。真实 Linux runner rebuild、规定过滤 50/50、git diff --check全部 PASS;未执行 Android Gradle/APK/ADB/Jest,按范围关闭并停止,不进入 STEP-076。 - scoped commit
90d05f596a42c157502f9a2a5f20425c999cebab(fix: close STEP-075 projection identity audit)已成功 push 至origin/particle/main;STEP-062 dirty 和既有 untracked 均未暂存或提交。
2026-09-13 STEP-075 v3 Binding/Projection Identity 最终审计收口
ParticleBinding::operator==收敛为 mode-aware active-selector identity:VectorComponents 仅比较 U/V,DirectionAngle 仅比较 direction;共同仍比较 mode、fieldKey、expectedUnitID,selector 保持(semanticID, groupID),component 继续只作 resolved descriptor assertion。- 新增两组离线回归:Vector 的 inactive direction 与 Direction 的 inactive U/V 都不改变 binding/resolved projection identity;各自 active selector 变更仍 binding 不同并
PlaneMissingfail-closed。 - Linux OpenGL runner 真实重建 PASS;Binding 6/6、Runtime/Profile 11/11、QBIN/Ingress 24/24、Source 11/11,均 0 failure;
git diff --checkPASS。Android Gradle/APK/ADB/Jest、iOS/Metal 未执行;STEP-062 dirty 与历史 untracked/build 输出未纳入。 - scoped implementation
2645bd725f63c4da12ab48a0cc11ff034c9d9878(fix: close STEP-075 binding selector identity audit)已成功 push:653e6f2f1..2645bd725 particle/main -> particle/main,remote 为origin/particle/main。
2026-09-13 STEP-076 QBIN2 V4 Core Host API 与 RasterArraySource 接线
RasterArraySource新增完全隔离的 V4 QBIN Host API:submission 严格执行 key/runtime metadata → QBIN decoder → Profile validator → per-field Store,稳定返回 insert/replace/duplicate 与各类 fail-closed rejection;失败不留下 partial Store mutation。- V4 owner 独立持有
EncodedFieldStore、ForecastClock、Color/Particle binding;每个 binding 在 resolve 时按自己的 fieldKey 获得 window/mix。没有 Host T0/T1/MIX API,没有切换 renderer,也未改动 V3 timeline。 - 离线 Source V4 suite 3/3、Binding 6/6、Runtime/Profile 11/11、QBIN/Ingress 24/24、V3 Source 11/11,均为 0 failure;Linux runner 真实重建、
git diff --checkPASS。Android Gradle/APK/ADB/Jest、iOS/Metal 未执行;STEP-062 dirty 与既有 untracked/build 输出未纳入。
2026-09-13 STEP-076 v2 审计测试收口
- V4 public-path reject 现在逐项证明
RejectedDecode、RejectedContract、RejectedInvalidFieldKey、RejectedStaleRevision不改变既有可 resolve projection 的 content identity、T0/T1 coordinate、selected U/V plane 与 validity storage identity;未读取 Store 私有状态。 - clear 测试先用公开
submitInitialRuntimeFieldWindow(...)建立 V3field/nextField,对clearEncodedField、clearAllEncodedFields和 V4 re-submit 全程核验 V3 identity/generation/validTime 不变;V4 清空后 fail-closed,binding intent 仍可重解。 - Linux runner 真实重建 PASS;Source V4 4/4、Binding 6/6、Runtime/Profile 11/11、QBIN/Ingress 24/24、Source regression 11/11,全部 0 failure,
git diff --checkPASS。未执行 Android 编译/Gradle/APK/ADB/Jest/iOS-Metal;STEP-062 dirty 与历史 untracked/build 输出未纳入 scoped commit。
2026-09-13 STEP-077 QBIN2 V4 Android / JNI / RN 桥接只读调查
- 已按实际 RN TurboModule、Kotlin、WeatherRuntime、MapLibreMap、NativeMapView JNI 与 RasterArraySource V4 API 完成只读调查;未修改 production code、Test Host、Renderer/GPU,也未下载真实 QBIN 或运行 Android 构建。
- 结论:V4 必须是独立 encoded-field API。现有 V3
submitField、clearFields、setForecastTime、playback 会操作 V3 Host field/timeline,绝不能复用。RN 应传本地 QBIN URI,Kotlin 使用既有 64 MiB guarded read,Javabyte[]/ JNI copy 是可复用的 binary seam;禁止 JS number[]/Base64。 - 建议 V4 结果逐项映射 Core
RasterArrayEncodedFieldSubmitResult,桥接层 file/lifecycle/style/source 错误用独立 rejection code;每次 command 都沿用 Fabric tag -> current MLRNMapView -> MapLibreMap 的 UI queue late lookup,不建立第二 registry 或缓存 native pointer。
2026-09-13 STEP-078 QBIN2 V4 Android / JNI / RN 桥接实现 v2
- 完成隔离 V4 RN/TurboModule/Kotlin/Java/JNI/Core Host 调用链;QBIN 只经受 1..64 MiB 限制的本地 file URI 传输。十种 Core submit result 保持逐项 resolve,source/type 生命周期错误只经私有 sentinel 转为明确 rejection。
- frozen contract schema 改为 Core 同名
contractSchemaVersion/requiredFlag等字段,并抽取为可 Linux 测试的 provider-neutral C++ parser;新增合法与所有指定 fail-closed case 单测。 - Color binding 端到端传递 expected unit;Particle binding 固化 mode-aware U/V/direction slots,inactive slot 仅
(0,0);forecast state/speed 为完全独立 Core command。 - Linux 限流 runner build、parser/Source V4/Binding/QBIN/Runtime/V3 Source 回归、TypeScript、TurboModule codegen、JNI declaration-registration 静态核对和
git diff --check均 PASS。Android Gradle/APK/ADB/JNI 真实编译、Jest、iOS/Metal 未执行,等待后续一次性 Android 验收;未进入 STEP-079。
2026-09-13 STEP-078 v3 production guard 审计收口
- QBIN transport 的 1..64 MiB 上限现由 Kotlin local-file、Java
WeatherRuntimefacade、JNI copy 三层执行;JNI 在std::vector分配前 fail-closed。Decoder 的 64 MiB file / 32 MiB decoded-raw 业务限制不变。 - fieldKey、runtime fieldID、profileID 统一按 UTF-8 byte length 1..64 验证:RN
TextEncoder、KotlintoByteArray(Charsets.UTF_8)、JavaStandardCharsets.UTF_8。多字节 33 CJK(99 bytes)输入在 RN/Java guard tests 中拒绝。 particle-codex内所有限流验证均 PASS:package tsc、TS directed test、TurboModule schema、JDK-only Java guard、Linux runner rebuild、V4/V3 指定 filter、JNI name-set 与git diff --check。Android Gradle/APK/ADB/JNI 真实编译、设备、Jest、iOS/Metal 仍未运行;未改 Renderer/GPU/shader/Test Host/NavSea,不进入 STEP-079。- 实现 scoped commit
75a974e77503c56ec5bd2823ac1b689225ed80a7(fix: close STEP-078 V4 bridge guard audit)已成功 push:73779b89b..75a974e77 particle/main -> particle/main;仅文档 Git 收尾 commit 随后推送并停止。
2026-09-13 STEP-079 真实 QBIN Golden Fixture RN Test Host 接入阻塞
- 在复制/接入前核对冻结 fixture contract 与 STEP-078 V4 public API:Wind/Current U/V 是
VELOCITY_COMPONENT(semantic 1/2、group 1、MPS),而setEncodedColorBinding的 RN/Android public contract 仅允许SCALAR或DIRECTION_ANGLE。 - 用 scalar 伪装 U/V 会被 Core ColorBinding resolver 以
PlaneClassMismatchfail-closed;扩 public enum 则改变 STEP-078 冻结 public API。本 Step 未堆叠 Test Host wrapper、未改 Core/Renderer/bridge,也未保留半成品 fixture。 - 已按任务的接口阻塞停止条款生成 STEP/阻塞报告;未运行 TypeScript/codegen/C++/Android 验证,等待独立 API 修订 Step。
2026-09-13 STEP-078 v4 ColorBinding VELOCITY_COMPONENT 接口修订
FieldRuntime.setEncodedColorBinding(...)现公开支持VELOCITY_COMPONENT:TS string contract、Kotlin1映射、JNI0..2guard 与现有 CoreFieldValueClass::VelocityComponent一致;TurboModule primitive ABI 和 Java 透传签名未改变。- 新 Core 回归通过真实 U-east velocity component plane 成功 resolve ColorBinding,
ValidityColorBinding 仍为InvalidBindingfail-closed;未增加 vector magnitude、单位转换或 provider 特例。 particle-codex中经输出节流的 package tsc、TurboModule schema、Linux runner rebuild、Binding/Source V4/QBIN-Ingress/Runtime-Profile/V3 Source 过滤回归均 PASS;Android Gradle/APK/install/ADB/设备、Jest、iOS-Metal 未执行。STEP-079 不在本次进入,待 ChatGPT 独立复验后重启。
2026-09-13 STEP-079 真实 QBIN Golden Fixture 接入 RN Test Host v2
- Test Host 已保留 V3 区并新增 V4 Wind/Wave/Current/Rain 四组冻结 QBIN T0/T1。8 个 raw asset 仅从冻结 WeatherV2 source 复制并随 Host 打包;
expo-assetmaterialize 后只传本地file://URI,运行时无 source-server、网络或 gzip 依赖。 - V4 dataset 真实表达 Wind/Current U
VELOCITY_COMPONENTColorBinding 与 U/V particle,Wave height/direction,Rain precipitation/Particle N/A;load、submit result、binding、midpoint seek(不宣称 mix)、PLAY/PAUSE、正 speed、clear 均有独立 UI。 particle-codex限流验证:Host/package TypeScript、TurboModule combine/codegen、8 文件 bytes/SHA-256、Linux runner target、Contract/Transport/V4/Binding/QBIN/Runtime/V3 filter 与git diff --check均 PASS。Android Gradle/APK/install/ADB/设备/Jest/iOS-Metal 未运行;状态IMPLEMENTED / WAITING FOR WINDOWS 11 ANDROID VALIDATION。
2026-09-13 STEP-080 Android AAR 与 RN Test Host 标准构建流水线
- 固化 Linux
linux_build_publish.sh:仅接受 RN/Native 完全一致版本,默认固定 OpenGL Release 四 ABI build、Maven Local publish、AAR/POM/module 校验、RN package typecheck/npm pack,以及 AAR/tgz bytes+SHA-256 的版本隔离 build-manifest;noisy Linux build/typecheck/package 一律经 build-output-throttle,缺 runner 立即 fail-closed。 - 固化 Windows
windows_build_testhost.ps1:manifest 是唯一 artifact/version 输入,支持先-DryRun,再把 bundle 校验安装到 Windows Maven Local、固定 tgz/coordinate、显式 prebuild 与 Debug APK build。默认没有 ADB/设备;-Install/-Run显式开关才可访问192.168.1.146。 - 在
particle-codex使用已存在的 Native.3Maven Local publication 运行--reuse-existing:AAR/POM/module、.2历史保护、RN typecheck、npm tgz、manifest 路径/bytes/SHA/version 全部 PASS;未重复完整 AAR 编译、未执行 Gradle APK/ADB/设备/Jest。Linux 无pwsh,Windows PowerShell parser 未本机执行,已明确记录而未伪称 PASS。
2026-09-14 QBIN V4 Android .3 人工验收与文档基线整理
- Linux OpenGL Native 与 RN package 已统一为
13.4.1-particle.3;AAR 通过/mnt/nas/pbf/maven对应公网https://pbf.jpcn.ccwu.cc/maven发布,RN tgz 通过/mnt/nas/pbf/npm对应公网/npm/发布。Win11 Test Host 正常路径改为直接消费公网 npm/Maven,不再以 LAN AAR/Maven Local 作为当前主流程。 - Win11 实际构建发现并修正 JNI particle binding declaration 参数数目与 Kotlin
validUInt16/validSafeInteger编译表达式;Debug APK 成功生成、安装并启动。Metro 固定监听 8091,App 仍访问 localhost:8081,正确 reverse 为8081 -> 8091。 - Test Host 的 8 个 V4 QBIN Golden Fixture(Wind/Wave/Current/Rain,各 T0/T1)已由用户人工确认功能正常;V4 调用经
submitEncodedField进入RasterArraySource::submitEncodedField/QbinV2Decoder,不是 JS 解码。 - 当前入口文档已整理:
docs/00_项目总则/当前基线与开发路线_v2.md、docs/50_Step记录/STEP-080_Android_AAR与RNTestHost标准构建流水线_v2.md、docs/70_发布/Android_RN_QBINV4_13.4.1-particle.3_发布基线_v1.md。旧 STEP-060~072 与 STEP-080 v1 保留历史事实,但不再作为当前构建命令来源。
STEP-081(2026-09-17):新增 Metal ParticleGpuValidationShader 与 iOS Test App Wind QBIN V4 private smoke 入口。Codex 后已完成 GPT/RDC 独立静态审查;RDC 随后完成 iPhoneOS arm64 无签名 Test App 编译并取得 BUILD SUCCEEDED,particle_gpu_validation.cpp 与 MBXViewController.mm 均通过,61 MB app bundle 内 T0/T1 QBIN SHA-256 与源 fixture 一致。当前真机均 unavailable,签名安装、Metal runtime compile 与 T0/MID/T1/Clear 真机 Smoke 待执行,状态 WAITING_DEVICE_SMOKE。
2026-09-18 STEP-081 iOS Metal Renderer 真机最终关闭
-
Pleiades(iPad mini 5 / iPadOS 26.5.2)完成签名安装与 Metal 真机验收。Deterministic Uniform East 向东、Uniform North 向北、Vortex 粒子可见且连续有轨迹;QBIN Wind Golden T0/MID/T1/Clear/重进均通过,STEP-081 CLOSED / PASS。
-
真机确认 Metal render pipeline cache key 原先遗漏 color/depth/stencil attachment format,导致 State RGBA32Float、Trail RGBA8Unorm 等同 shader pipeline 可能错误复用;已把 attachment formats 合入 cache key。
-
正式 previous→current 线平均约 0.065 px、最大约 0.24 px,Metal line primitive 对亚像素长度无稳定 coverage;保留真实 line,并用 Metal-only 1 px current-endpoint quad 补 coverage,不改变 State、U/V、时间步或物理线长。
-
Wind QBIN Golden fixture 范围为 112.5E..157.5E / 0..55.776573N;iOS private smoke 相机调整到约 27.8883N / 135E、zoom 3 后可正常观察。所有 STEP081 临时 readback/固定线/Point fallback 均已清除;错误 Point fallback 的整屏绿色结果未进入正式代码。
-
STEP-081 功能/真机验收提交
f1c0f92b2b(fix: close STEP-081 iOS Metal particle rendering)已成功 push 到origin/particle/main。
2026-09-18 STEP-082 iOS Native FieldRuntime Facade 与 XCFramework 发行基线
- 新增 public
MLNParticleFieldRuntimeConfiguration、MLNParticleFieldRuntime与MLNMapView (ParticleFieldRuntime);MapView 通过 associated object 持有 runtime,runtime 仅弱引用 MapView,replace 先 dispose 旧实例,dispose 幂等。 - facade 每次命令均重新查找 current style 的
RasterArraySource、WeatherColorLayer与RasterParticleLayer并核验真实 Core 类型和 source 关联,不缓存跨 style 生命周期的 Core pointer;style reload、source/layer 缺失均以独立 NSError fail-closed。 - V4 入口复用 Core contract parser、decoder/submit、binding、forecast 与 clear;ObjC 层只执行与 Android 一致的 transport guard 和稳定结果映射,未改 QBIN/renderer/Metal、Android、RN 或 NavSea,也未重做 STEP-081。
MLNParticleFieldRuntime.h已加入 iOS Bazel SDK public headers 和Mapbox.h;MLNMapView_Private.h仍仅为 implementation private include。建立release/maplibre-particle/ios/SwiftPM template/manifest,因 XCFramework zip 未生成而明确NOT_BUILT。- macOS Bazel
//platform/ios:MapLibre.dynamic在 facade 编译前被既有 style-codegen 输出声明阻断:particle_validation_layer.cpp被列为生成输出但 generator 不生成;未越权改 Core/codegen。iPhoneOS arm64 CMakeios-sdk-static编译已启动,最终状态以 Step/完成报告记录为准;在 XCFramework 成功验证前,STEP-082 保持IMPLEMENTED / WAITING_MAC_XCFRAMEWORK_VALIDATION。 - 随后
cmake --build build-ios --target ios-sdk-static -- -quiet返回 0,完成 iPhoneOS arm64 static framework build,且MLNParticleFieldRuntime.o已由真实 Xcode build graph 生成;唯一 warning 是已有MLNMapView_Private.h的 EAGL deprecation。Bazel XCFramework codegen blocker 未改变,未产出 zip/SHA-256。
2026-09-18 STEP-082 XCFramework Bazel 阻塞修复与最终关闭
- 宿主在真实 implementation commit
136ed726cf749c24b3673c046581a38ef48be390(fix: close ios xcframework packaging blockers)上修复 iOS XCFramework packaging blocker;bazel build //:generated_style_code与bazel build //platform/ios:MapLibre.dynamic均 PASS,后者最终日志为/tmp/step082-host-maplibre-dynamic-final2.log,以Build completed successfully结束。 - 真实本地产物
bazel-bin/platform/ios/MapLibre.dynamic.xcframework.zip:24639200bytes,SHA-256=64faa174c5c0dc0a2da3e289f0beaf2dedf7298665e3345f39836729b668e239。deviceios-arm64和 simulatorios-arm64_x86_64-simulator都有 publicHeaders/MLNParticleFieldRuntime.h,两份Mapbox.h均导入该 header。 - 两 slice binary 都有
_OBJC_CLASS_$_MLNParticleFieldRuntime和_OBJC_CLASS_$_MLNParticleFieldRuntimeConfiguration;MLNMapView_Private.hpublic export count=0。device 为 arm64,simulator 同时含 x86_64 与 arm64。 - iOS release manifest 现为
VALIDATED,distributionVersion 仍为6.28.0-particle.1、module 为MapLibre;artifact 尚未发布,URL 明确为LOCAL_BUILD。STEP-082 CLOSED / PASS;Git closeout commit/push 将由宿主在本轮文档生成后完成,最终 hash 以宿主回填/最终回复为准。
2026-09-18 STEP-083 iOS RN TurboModule / Fabric bridge 实现批次 2
- package 新增 RN 0.85 codegen
WeatherRuntimeBridgeiOS ObjC++ module、podspec、autolinking/provider;公共 TS API 未分叉,仅把缺 module 文案改为平台中性。每条命令由当前 Fabric/UIManager injected registry UI block 重新验证 MLRN component/content view,再使用 publicMLNMapViewfacade;不缓存 map/runtime,也无第二 registry。 - V3、V4、bindings、forecast 与全部视觉命令映射现有 iOS facade;本地 payload guard 限 file:///absolute readable regular file、1..64 MiB 和读取前后长度一致。pod 只依赖
MapLibreReactNative,复用 MLRN$MLRN_SPM_SPEC的唯一MapLibreproduct。 - podspec syntax、package dry-run tarball、provider config、34/34 method parity 和
git diff --checkPASS。离线 npm cache 缺 package,故 TypeScript/codegen/Pod/Xcode/runtime 未执行;STEP-082 的LOCAL_BUILDXCFramework zip 也尚非 MLRN 可消费的 custom SwiftPM URL。状态IMPLEMENTED / WAITING_IOS_VALIDATION,由 RDC 在真实 single-binary consumer 环境继续验证;未 commit/push,既有 dirty 未触碰。
2026-09-18 STEP-083 iOS Metal artifact 与 RN 真机验证纠正
- 已确认裸
bazel build //platform/ios:MapLibre.dynamic默认走 OpenGL:旧 XCFramework 虽可显示色场,但 RN Test Host 不渲染粒子,旧24639200bytes /64faa174c5c0dc0a2da3e289f0beaf2dedf7298665e3345f39836729b668e239artifact 作废,不再作为 iOS Particle 发行基线。 - 发行固定为
bazel build --//:renderer=metal //platform/ios:MapLibre.dynamic。新 Metal zip 为24943196bytes,SHA-256=ae88975fc20f4d9961b95079638d0e9c0d8e61d4394d5c0a8ffcc48d173a827f,source commit=bdd7f40f9029031816c9bf4db6e1cd6c7c69b7bd;device binary 含 Metal/MTLDevice/ParticleGPU且无 OpenGL marker,远端 URL 仍为LOCAL_BUILD。 - RDC 已实际完成 npm ci、typecheck、RN codegen、Expo prebuild、Pod integration、device arm64 build、signed Release build/签名/安装;MLRN/App/Particle 使用 single MapLibre SPM product。Pleiades iPad mini 5 上一次 V4 Wind load 观察到 clearAll、bindings、T0/T1 accepted 与 midpoint seek,用户确认粒子恢复。
- 当前状态
IMPLEMENTED / IOS_CORE_PATH_PASS / WAITING_FINAL_CONTROL_REGRESSION:PLAY/PAUSE、clear selected/all、detach/re-attach 尚未逐按钮实测;不将单次 load 证据扩大为完整控制面验收。未 commit/push。
2026-09-18 STEP-083 iOS RN 真机最终控制回归与正式关闭
- Pleiades iPad mini 5 真机在 Test Host signed Release 上完成
RUN V4 FINAL CONTROL REGRESSION单按钮序列:prepare#1 → PLAY → 约500ms → PAUSE → clear selected → prepare#2 → clear all → detach → attach → prepare#3 → refresh;用户明确确认“FINAL CONTROL REGRESSION PASS”。 - 最后一次 prepare/refresh 后 Metal V4 Wind 粒子恢复并保持可见;此前用户已确认“粒子恢复了”。single MapLibre SPM、signed Release
BUILD SUCCEEDED、安装启动与 Metal artifact(24943196bytes,SHA-256ae88975fc20f4d9961b95079638d0e9c0d8e61d4394d5c0a8ffcc48d173a827f)验证事实不变。 - STEP-083 正式
CLOSED / PASS。App.tsx 回归按钮保留且逻辑不变;未修改 RN public API/native/Core/renderer/release manifest,未提交。下一步进入 NavSea iOS 首批大集成,不再拆分微小 build/install Step。
2026-09-21 STEP-088 静态底图缓存 PoC 与 Renderer 观测
- Renderer 内部新增 WeatherColor/RasterParticle retained dynamic boundary、保留 original ordinal 的 LayerGroup 分段访问,以及 Renderer-owned RGBA static-underlay cache;fixed Camera、Style/Tile 稳定的 2D 场景可在首次 build 后跳过 boundary 前静态 GPU draw,仍保留完整 createRenderTree/source/layer prepare/tweaker/upload 主链。
- 新增独立 OpenGL/Metal
RetainedUnderlayCompositeShader、OpenGL depth/stencil offscreen 支持与 7 个 debug counters;不增加 Host/NavSea API,不修改 C-001,不进入 STEP-089/090。 - RDC 完成 Mac OpenGL test-runner、STEP-088 定向 4/4、iOS/Metal device arm64
mbgl-core与git diff --check;并小修 macOS 不提供 iPhone-only framebuffer invalidate 符号的 test 条件。Android Gradle/AAR/APK/ADB/设备/NavSea/Jest 未执行。 - 实现提交
8b9ab303228c307612c47f7f3379ad06206ea14e(feat: add retained underlay render cache poc)已 push 到origin/particle/main。当前状态IMPLEMENTED / WAITING FOR ANDROID VALIDATION;Android/NavSea 视觉、counters 与性能证据完成前不进入 STEP-089。
2026-09-23 STEP-091 Zoom Out Viewport Particle Reseed
- 正式 RasterParticleLayer 在一次 camera invalidation 开始时保存稳定
startZoom,连续变化不覆盖;150 ms stable 后先计算新 viewport respawn domain,仅在endZoom < startZoom - 0.05且 domain 有效时一次性设置stateSeeded=false、trailSeeded=false。 - 下一次既有 State/Trail pass 复用 shader initial-seed,在新
respawnBounds内全量播种并清除旧小视野 Trail;不做 simulation reset、Field resubmit、Timeline reset 或 GPU resource rebuild。fallback 请求当场消费并单次记录,不会在后续 Pan 延迟触发。 - Zoom In、Pan、Rotate/Pitch、epsilon 抖动均不触发;原生 directed test 8/8、Renderer 与 gtest 精确 object 编译、
git diff --checkPASS。未改 shader/UBO/API、STEP-089/090 fast path、WeatherColor 或 Runtime Field Window;Android APK/ADB/Jest 未执行,实机视觉与 fast-hit 恢复交由 RDC。 - implementation commit:
4286c16a53d4f49001f3b41ed4638d3c6edc95b3(fix: reseed particles after zoom out)。
2026-09-24 STEP-092 Continuous Range 可退化分段 Retained Cache
- 新增 map-scoped explicit
startLayerId/endLayerId闭区间;Native 基于完整 StyleorderedLayers解析 index,hidden endpoint 不改变 topology,single-layer Continuous 合法。 - Renderer 把 legacy 单 underlay 能力泛化为 Bottom/Top retained range cache;按 Style 位置自然形成 1/2/3 个 Render Range 与 0/1/2 个 lazy GPU cache。Continuous-only 不分配 retained texture/FBO/compositor。
- Bottom composite → Continuous global-ordinal opaque/translucent → Top premultiplied-alpha composite;未硬编码 NavSea Layer ID,未增加 Anchor/Marker、land-mask 或第二套 Z-order。
- explicit valid 与 legacy boundary 排他;missing/reversed/style-not-ready 会清除 stale resolution/cache/fast prepared gate并 full fallback,后续 Style 恢复可重新解析。
- RN、Android、iOS 增加
setContinuousLayerRange,pull diagnostics 增加 range/index 与 Bottom/Top build/reuse/invalidation;保留旧 retained API。 - Native directed test 源码覆盖 single/multi、missing/reversed、hidden/reorder/delete、四种 topology、0/1/2 cache、no-cache fast gate 与 config revision。Implementation commit
a9eaec6b65cc26aa70e03002bdc1326c46cad245已 push;Codex 未执行编译/测试/Android 项,等待 RDC 独立验证,当前状态 PARTIAL,不判 PASS。
2026-09-24 STEP-092 收尾
- STEP-092 Continuous Range 可退化分段 Retained Cache 已完成 Mac Native 验证并关闭。
- OpenGL
mbgl-test-runner编译最终 PASS;定向 Native tests 29/29 PASS。 - iOS
ios-sdk-static在 Metal-only 配置下 PASS。 - RDC 修复两处验证期问题:legacy LayerRenderItem index 访问;runtime disable aggregate invalidation 重复计数。
- RDC 修复提交:
4908244d2 fix: close STEP-092 native validation issues。 - 新增 v2 Step 记录与 v2 完成报告;Android Gradle/APK/ADB/实体机及 Metal frame capture 未执行,后续如需要单独做产品级验证。
2026-09-24 STEP-093 Continuous Range 运行态综合验收工具准备
- 复用 Android
ParticleCoreLayerValidationActivity新增 STEP-093 面板:一键 A/B/C/D 四种 topology、E single-layer、Bottom/Continuous/Top mutation、普通 layer 跨边界、endpoint visibility/delete/restore、invalid range、camera preset 与 Fast Path fail-closed。 - 在 STEP-092 map-scoped diagnostics 上补充 continuous bounds、Bottom/Top cache state 与失效原因、texture/composite create/release、Fast Path eligible/active/reason/hit/miss/full CPU frame;Android JNI/Java、iOS ObjC++ 与 RN bridge/types/display 同步透传,没有建立第二套 topology 或 Z-order 真相。
- 测试 Style 用普通 background/fill/line 构造清晰的 Bottom、Particle Continuous、Top opaque/semi-transparent/line 覆盖关系;资源与 Fast Path counter 通过屏幕低频 pull 展示,不产生逐帧日志风暴。
- 静态字段/场景接线审查、Android Manifest/layout
xmllint与git diff --checkPASS。依照职责分工,本轮未执行 Native/Gradle/Xcode 编译、tests、APK、ADB、安装或 Android/iOS runtime;两平台均为WAITING_RUNTIME_VALIDATION,不得写 PASS。 - implementation commit:
b3ec8edc87ece404b5f7b3706f5acf2a70de6862(feat: add STEP-093 runtime validation tooling)。完整 RDC 命令、操作步骤、证据要求与 18 项矩阵见 STEP-093 v1 记录。
2026-09-25 STEP-094 通用 RenderSegment 分段渲染与 Style 分类诊断
- 将 V12 固定 Bottom/Continuous/Top 收敛为
RenderSegmentPlan:Style 顺序仍是唯一 Z-order,1..N 个连续 Segment 只声明 RETAINED/CONTINUOUS,相邻同策略不合并。 - Renderer 按 resolved topology 动态持有独立 retained cache;Continuous 不分配 retained target。Layer Impl fingerprint 支持明确 LayerMutation 的 segment-local invalidation,其余不安全依赖继续全 retained invalidation。
- 旧
setContinuousLayerRange转换为同一 topology;恰好一个 Continuous 时保留 Fast Path,多 Continuous fail closed 到 full CPU frame。 - 新 pull diagnostics 端到端返回 ordered Style→Segment→Layer、config/topology revision、coverage、visibility/source metadata 与每个 retained cache counters;RN public API 为 typed object,TurboModule 内部用 schemaVersion=1 JSON。
- 新增 Native directed tests 与 RN Test Host 一次性 Apply/Fetch 入口。RDC 独立验收:OpenGL runner 编译 PASS;8 suites / 43 tests 全 PASS;Metal-only iPhoneOS
ios-sdk-staticPASS;RN package/Test Host typecheck PASS;RN 0.85 codegen 直接入口生成 Android/iOS Spec PASS;Android Validation APK BUILD SUCCESS(60,294,298 bytes,x86_64,SHA-256848c3196c64cee6dfb1e9627f4af32b6e235fdd82afd1cfb8474c7fc5d591c71)。实现 commit016fd1fff已 push;Android/iOS 实体机 runtime/视觉 NOT RUN。STEP-094 代码/构建验收PASS / CLOSED。
2026-09-25 STEP-095 V13 独立严格源码与性能调查
- 冻结审查
ee0b89e711bf01335b3aa71d36def785cd97fec3,先源码后旧报告;新增指定中文调查、Step记录、Codex完成报告,保留既有调查正文。 - F01~F10:6项CONFIRMED、4项QUALIFIED;新增stencil跨target、Metal附件/clear、失败cache发布、V4 PLAY无推进、JSON/数值入库/listener问题,以及物化/UI/普通粒子wait等遗漏成本。具体触发、反例、行号和建议批次见调查。
- 仅文档变更;无源码修复,无构建、测试、codegen、安装、设备或profiler。历史PASS仅HISTORY,运行影响NOT RUN/NEEDS_RUNTIME;不判V13产品验收通过。
- 下一步由RDC独立复核证据与Git,优先验证stencil/Metal失败路径及PLAY,再按批次授权修复和验证。提交与推送事实见STEP-095阶段记录收尾。
2026-09-25 STEP-096 V13 独立隔离盲审
- 从冻结源码
ee0b89e711bf01335b3aa71d36def785cd97fec3导出无.git的独立源码快照,去除既有调查、任务历史、阶段记录、完成报告和开发日志,仅提供当前规范、源码与本轮任务书;全新gpt-6-astra high会话只读审查。 - 盲审正文先完成并冻结,独立 B01~B13 共13条(P1四条、P2九条);各项证据、反例和运行验证矩阵见三份 STEP-096 文档;没有进行其他审查结果的交叉比对。
- 冻结于
2026-09-25T21:30:00.294786+09:00,RDC 已校验隔离目录没有 Git metadata,启动后仅三份报告发生写入;三份原文 SHA-256:docs/20_调查/STEP-096_V13隔离盲审调查_v1.md:b957a790310bc110c7135b512f39d5c82d5b6b0417c02abcd0e6743368551c18(231行)。docs/50_Step记录/STEP-096_V13隔离盲审_v1.md:c80535126dc08ef2f6f2c446d7186d96db64a58a9d43df64bd6f3ae248c05303(56行)。docs/报告/STEP-096_V13隔离盲审_Codex完成报告_v1.md:b0ff277c71db36c273579446aa974aebd4beb7635770810b1fe62d98b979ef9f(55行)。
- 三份原稿字节等同复制至正式仓库;未修改生产源码、shader、测试、构建、manifest或依赖;本轮 Native/GL/Metal、Android/iOS实机及性能测试均 NOT RUN,产品运行态未验收。
- 当前轮次仅交付盲审与证据冻结;后续比较、修复和运行验证应另行授权。
2026-09-25 STEP-097 V13 三轮问题合并修复(A1 部分检查点)
- Mac
particle/main从720d309开始;阶段 0 只读复核三轮审查、.13manifest/tag 与本地 Integration C-001/RFC-001,形成全部 24 项去重矩阵。Integration 远端同步仍待 RDC 独立确认。 - A1 部分代码提交
e67e4961b:新目标重置 stencil CPU 映射,Metal depth/stencil clear 与 combined 附件绑定,retained 绘制异常后禁止缓存成功并 full fallback,旧 cache release 不记入新 topology;新增计数归属 GTest 源码。 - 01/02/03 的专用像素、附件和异常注入测试入口尚缺,A1 未按任务书完成;停止于 A1,不进入 A2/B/C。
git diff --check等静态核对无错误;所有构建、测试(含 Jest)、安装、GPU 运行、性能与发布均 NOT RUN。后续由 RDC 独立审查并补齐验证入口及集中运行。
2026-09-25 STEP-097 A1:FZG1 测试 APK 与 ADB 冒烟
- Mac clean 基线
91c2491b0以标准 Pipeline 构建 OpenGL x86_64 APK,GradleBUILD SUCCESSFUL in 15m 59s;60,295,184 bytes、SHA-2568677197c5f83a22747cb51f0c261edffc5db4678fc25b3f366474f6ecb94dc99。 adb -s 192.168.200.139:5555在 FZG1-2 覆盖安装成功,设备内文件 hash 相同;既有 STEP-093 场景、缓存/相机/非法范围恢复等 20 张截图与日志完成。报告:docs/报告/STEP-097_A1_FZG1测试APK与实机验证报告_v1.md;本地证据保存在忽略目录artifacts/maplibre-particle/step097-fzg1/。- A1 的 stencil 同 tile、Metal、render exception 以及 19 定向 GTest 未闭合;B/D topPresent 诊断异常待复核,A1 仍 PARTIAL,A2/B/C 未进入,未发布下一软件版本。
2026-09-26 STEP-097 A1 GTest 实测
- RDC 重新编译 mbgl-test-runner 成功,第 19 项 1/1 PASS,RenderSegmentDiagnostics 组 5/5 PASS,全部退出码为 0。
- 详见 docs/报告/STEP-097_A1_第19项GTest运行验证报告_v1.md。A1 仍因 01/02/03 专项测试缺失保持 PARTIAL,未进入 A2/B/C。
2026-09-26 STEP-097 A1 第 19 项 FZG1 设备测试
- 在 FZG1-2 重新安装源码等价的 OpenGL x86_64 APK,设备内 SHA-256 与构建产物相同。20 个截图与 UI XML、两轮 topology 轮换、缓存 OFF/ON、非法范围与恢复均已 ADB 实跑,粗粒度 B/T 资源创建减释放值均为 0 或 1;最终脚本 exit 0,实时日志无崩溃记录。
- 设备报告:
docs/报告/STEP-097_A1_第19项FZG1运行验证报告_v1.md;原生 GTest 1/1 与诊断组 5/5 已通过。B/D topPresent 诊断疑点待复核,A1 其余 01/02/03 仍未完成,未进入 A2/B/C 或发布。
2026-09-26 STEP-097 A1 专项测试入口续作
- Codex 增加本地同源 GeoJSON 的 R-R/R-C-R/C-R-R Android 操作入口、Metal 附件及 clear GTest、LayerGroup 异常与 cache 重试 GTest;仅静态检查,未运行构建、GTest、Jest 或设备。A1 仍待 RDC 验证,A2/B/C 不启动。
2026-09-26 STEP-097 A1 Android/Core 收口
- RDC 标准脚本构建
8c006ac83Android x86_64 OpenGL APK,FZG1-2 覆盖安装与 SHA-256 核对通过。18 组同 source/tile Stencil 屏幕、诊断与像素采样一致,03 异常恢复原生 2/2 PASS,19 之前原生 1/1 PASS。证据与限制见docs/报告/STEP-097_A1_Android专项验收报告_v1.md。 - Metal host 编译可用但设备无 Metal,2 项 SKIP;依用户决定不做 iOS runtime,不虚报 iOS 实测。允许进入 A2,STEP-098 未启动、未纳入提交。
2026-09-26 STEP-097 A2 中途检查点
- A2 修改处于未提交状态,Codex GPT-6-Sol medium 用量限制触发暂停;RDC OpenGL 原生构建 PASS、16/16 GTest PASS、Shader generator 两次幂等,Metal host 编译 PASS、同样 16/16 Core GTest PASS。非 iOS runtime。
- 记录
docs/报告/STEP-097_A2_阶段验证记录_v1.md;保留完整工作树、未跟踪 STEP-098 和产物,不进入 B/C。已设定 13:55 JST 恢复检查。
2026-09-26 STEP-097 A2 最终 Android/Core 验证
- 当前可见 Codex 会话为 GPT-6 Luna High。RDC 独立复核原 58/58 回归、当前 OpenGL broad 121/121、Metal host broad 121/121,A2 focused tests 两平台各 3/3;shader generator 两次幂等。修复旧断言以区分忽略 dataVersion 的 decoded-content equality 与严格 endpoint identity。
- RDC 标准 Android OpenglDebug x86_64 APK 构建成功,61,753,803 bytes,SHA-256
27bf4a6cc191bd86c4d1c10398478d81c2999edd61fe7242e40e5188516b0ca5;FZG1-2 安装包 hash 一致。TEST-ONLY V4 Golden Wind T0/T1 完成加载、seek、倍速、PLAY 30 秒、PAUSE、重播、CLEAR/重载与再次播放;runner exit 0,17 张 PNG、24 steps、ANR=0,15 秒截图可见粒子。 - mix-only 稳定区间
fieldUploadCount=6、resetCount=2;显式 CLEAR/重载后计数合法增加到 upload 10/reset 4,故不把 clear/reload 描述为零上传。历史 12:43 同步重入 ANR 与后续 main-thread 高负载/TIME 无响应失败均保留在证据中;修复包含防重入与 mix-only 缓存物化优化。 - 证据与限制见
docs/报告/STEP-097_A2_阶段验证记录_v3.md、集中验证清单和更新后的 24 项矩阵。Metal 结果是 host/Core,不是 iOS 设备测试;iOS runtime 按用户决定标为USER_ACCEPTED_WITHOUT_IOS_RUNTIME_TEST。没有长时间 GPU 性能结论;STEP-097 整体 PARTIAL,B/C 未开始。 - 本次仅完成报告、Step、矩阵、清单与开发记录;没有执行构建、测试、Gradle、ADB、codegen、提交或推送。用户未跟踪 STEP-098 任务文档保持原样,交由 RDC 独立审查并按范围处理 Git。
2026-09-26 A2 源码独立 scoped commit 核验
- A2 的 26 个生产源码、shader、TestApp-only V4 Golden fixture 和定向测试文件已固定为
f49ffa68a17e0a505199bdbeccf07f8543f3a05f并推送,origin/particle/main回读一致;没有 stage 用户未跟踪 STEP-098。完整代码/设备证据仍见docs/报告/STEP-097_A2_阶段验证记录_v3.md,不因 Git 提交改变原 APK 的git_dirty=true来源事实。STEP-097 整体 PARTIAL,B/C 待用户指令。
2026-09-26 STEP-097 B 阶段(独立核查中,未关闭)
-
08/09/10/20 的 B 源码及测试入口已形成;Codex 使用 GPT-6 Luna High 的两次
exec --json均取得turn.completed,保存 JSONL/status.json。 -
RDC Core 专项 4/4 PASS;旧 16-bit fixture 修正后 OpenGL broad 134/134 PASS。
-
B10 新 Map 销毁 hook 不在正式 .13 Android AAR,Test Host 默认 .13 无法直接编译此 Kotlin 调用;B 记 PARTIAL/BLOCKED,不提交、不进入 C,见 B 独立验收报告。
-
2026-09-26 STEP-097 B:RDC 恢复 B10 / fixture 两个
codex exec --json完成状态;Mac Core 6/6、139/139,Android Native JUnit 2/2、Java 编译、隔离 owner JUnit 4/4 通过。默认 .13 AAR 不含新销毁 hook,B 仍 PARTIAL/BLOCKED,C 和 STEP-098 未启动;证据见 B 专项报告。 -
STEP-097 B 已将 21 个源码、测试和阻塞报告保存至独立远端分支
step097-b-blocked-20260926,首提交e463ba04ce956a54eed02b77f981eeeedd9a5534。主线未推送不兼容桥接;B 仍 BLOCKED,Linux 隔离构建结果另记。
2026-09-26 STEP-098 Codex 源码交付
-
用户批准按 Integration
1dd576d3304e267e53ed64d31f9711d2350ce10a的 RFC-004、ADR-001、C-002、COORD-005 实施;该新接受契约解除旧 RFC-003 历史阻塞。原任务书与旧阻塞报告均未修改。 -
Core 增加精确单帧窗口、同 key 不同批次共存但严格禁止跨 fieldID/reference/profile 插值、先候选验证再原子滚动淘汰、等距离淘汰原最早端;解码 profile 身份与 decoded raw-plane/validity byte count 可观测。单帧 materialized snapshot 和首次 GPU endpoint 安装复用。
-
新增/扩展 Core、Binding、Ingress、RasterArraySource 定向测试代码,覆盖 T01–T17 的源代码场景;所有新增/扩展测试均未运行。仅执行
git diff --check;没有 CMake、Ninja、Gradle、Pod、npm、Jest、ADB、设备、发布、commit 或 push。 -
完成报告
docs/报告/STEP-098_QBIN_V4单帧与八帧滚动缓存_Codex完成报告_v1.md;源码交付等待 RDC 按 B→C 构建测试和后续 Android/iOS 配套实测。当前不进入 V15 pipeline。 -
2026-09-27 STEP-098 RDC:Core B 19/19、OpenGL Host 119/119、Metal Host 119/119 定向 GTest PASS;修复 Source 私有 Store 测试断言和两处无效 Grid fixture。Android/RN/iOS 制品、真机 GPU/内存与 V15 Pipeline 尚未验证;报告见 docs/报告/STEP-098_RDC定向验收报告_v1.md。
2026-09-27 V15 iOS WeatherColor 纹理生命周期修复(Codex 源码交付)
- 核实 manifest V15
sourceCommit=1fdc5df625d405233703136eb2dc12032d932da2,后续 finalize release 生成的 tag 指向 HEADcd71640a84901212ce4681e296f027befdff4ee0;两者角色不同且任务相关源码相同,不构成冲突。用户未跟踪任务书继续保留。 - WeatherColor update 阶段现比较 T0/T1 GPU texture 指针;endpoint 或 wrap 变化会在 LayerGroup upload 前重建 Drawable。移除 Tweaker draw 阶段的 texture 绑定,仅保留 UBO 动态更新;新增 endpoint 转移矩阵定向测试。
- RDC 首次 OpenGL build 在测试文件第 60 行遇到
nullptr模板推导失败;production renderer object 已编译。Codex 对该测试调用显式指定<int>。RDC OpenGL retry exit 0、6/6;Metal host build exit 0、6/6。日志位于/tmp/navsea_v15_weathercolor_validation/。iPad/Xcode/设备实测待用户手工完成;tag 和发行内容未覆盖。 - scoped commit
5af91fe7a105f0ac047e18db1dc063c9ffd69d44已推送origin/particle/main,推送后git ls-remote回读同一 HEAD。当前只等待用户手工 iPad 验收。 - 验证结果补录提交
4712e1752af2a8238def5839c8754270de4195c9已推送,远端回读同一 HEAD;随后仅更新报告/Step 的当前状态措辞。 - Step:
docs/50_Step记录/V15_iOS_WeatherColor纹理生命周期修复_v1.md;完成报告:docs/报告/V15_iOS_WeatherColor纹理生命周期修复_Codex完成报告_v1.md。
2026-09-27 v16 统一发行 Bazel 头文件清单修复
- 统一发行 Android 四 ABI 和 Maven Local 通过;首次 iOS Metal Bazel 在 render_weather_color_layer.cpp 编译时找不到新增 WeatherColor lifecycle 头文件。
- 在 bazel/core.bzl 的 MLN_CORE_HEADERS 精确登记该头文件;保留 WeatherColor 业务实现不变。由 RDC 重跑完整 v16 构建、公开回读,iPad 人工验收仍待执行。
2026-10-06 STEP-099 RenderSource readiness 与 RenderSegment 失效诊断(CLOSED / PASS)
- frozen release 为
maplibre-particle/rn/13.4.1-particle.17/e8b451fe70054107773e82484c80e90df3889147;implementation commit 为8a5214d92dd2f8899db76d2194da42999fa0c87d。未修改 Integration/NavSea。 - 完成 renderer/source readiness additive snapshot、tile stats、mutation source/tile action、只读 source→segment dependency 与 Android T1~T4。正式
renderTreeParameters->loaded = styleLoaded && isLoaded()、SourceisLoaded()、retained cache、fast path、singleContinuous、多 Continuous 和 RenderSegment execution 均未改变。 - Metal host
RenderSegmentDiagnostics.*6/6 PASS;最终 Android x86_64 OpenGL APK BUILD SUCCESSFUL in 4m54s,APK 61,923,024 bytes,SHA-2565de73f0358b835a78d3ae7e2ac22f4efdb2a66775b8c63654a8bb7313957d90a。Vulkan/最终 Metal rerun 因当前 Mac 缺 libuv pkg-config 未执行,不虚报 PASS。 - FZG1-2 / Android 13 / API33 实跑:T1 静态仅 1 个 204ms 启动 false window 后稳定;T2 双 GeoJSON 各约 1Hz,10 个 false window、avg 203ms、max 205ms;T3 无 layer 的 disabled RasterArray 仍 isLoaded=false,使 global loaded 持续 false 21.459s;T4 61 次动态更新产生 4 个 false window、avg 203ms、max 207ms。
- T4 证实 dependency diagnostics 能正确给动态 source
affected=[2],但 global contentRevision 1760→2540,R0 虽只依赖step099-static,cache build 仍 1→121、invalidation 20→200,确认GLOBAL_CONTENT_REVISION。源码审计同时确认 global fade/update signature/pending/placement/repaint/annotation/singleContinuous 等 fast-path gate 仍存在。 - Q1~Q7 与 blocker 分类已闭合:runtime confirmed
PERMANENT_SOURCE_UNLOADED、DYNAMIC_SOURCE_READINESS_THRASH、GLOBAL_CONTENT_REVISION;source confirmedGLOBAL_FADE、GLOBAL_UPDATE_SIGNATURE。 - 完成报告:
docs/报告/STEP-099_RenderSource就绪与RenderSegment失效诊断_Codex完成报告_v1.md;Step:docs/50_Step记录/STEP-099_RenderSource就绪与RenderSegment失效诊断_v1.md;运行证据保存在忽略目录artifacts/maplibre-particle/android-validation/。
2026-10-06 STEP-100 SourceScoped RenderSegment 局部失效(CLOSED / PASS)
- 基于
c4b481fd2c5b5da20d31f6ae54011f0552d7dbd0,Codexgpt-6-sol / high实现 source-scoped revision、production/diagnostics 共用 dependency、per-segment loaded/fading/readiness 以及独立 Build/Reuse/Fallback;global loaded/content revision 与 Fast Path gate 保持原兼容语义。 - RDC 标准 Android x86_64 OpenGL validation build PASS,APK 61,956,640 bytes,
libmaplibre.so39,636,472 bytes,SHA-25686e22bf081bf7d3196f0bf0e7c56af51bde01e9f0b01e0bab238cb794273315a。RDC 同时修复 validation script 在pipefail下的unzip | awk ... exitSIGPIPE/141,小修不改变产物校验语义。 - FZG1-2 T4 R-C-R 约 61.6 秒主窗口:global revision 128→973;R0 build 1→1、invalidation 20→20、reuse 132→4042、source revision 不变;R1 build 5→135、invalidation 26→211。动态 source 持续
affected=[2],核心 locality 硬门槛 PASS。 - T2 双 GeoJSON 约 35 秒仍产生 6 个约 203ms loaded false window,但 R0 build/invalidation 不变;T3 unrelated permanently-unready RasterArray 使 global loaded=false 持续 21.468s,但 R0/R1 build=1、invalidation=19 不变,reuse 11→1200,证明无关 source 不再拖垮 retained cache。
- T4 运行期间 R1 fallback count 增长而 R0 fallback 不变、reuse 持续增长,实际验证 mixed
R0 Reuse + C Live + R1 Fallback。未发现 crash/ANR。Fast Path、singleContinuousSegment、multi-continuous 语义未改。 - Native host GTest 因当前 Intel Mac 缺
libuv环境阻塞;尝试 Homebrew 安装时发现会连带升级 CMake/OpenSSL/Python 且 Intel 无 bottle 支持,已停止,未把环境阻塞虚报 PASS。Android full native build + device runtime 作为本 Step 功能验收事实。Jest 未运行。 - Step:
docs/50_Step记录/STEP-100_SourceScoped_RenderSegment局部失效_v1.md;完成报告:docs/报告/STEP-100_SourceScoped_RenderSegment局部失效_Codex完成报告_v1.md;运行证据在忽略目录artifacts/maplibre-particle/android-validation/。允许进入 V18 unified release。
2026-10-06 STEP-101 RenderOrchestrator 销毁生命周期修复(源码交付,待 RDC 验收)
- 基于 V18 Final HEAD
d29e84c1a90daeea104b389d28b000c4f017d08d,按 STEP-101 任务 v2 审计现有差异。已证实 readiness mutex/state 早于 RenderSource 自动析构且 tile/source 销毁可同步回调的生命周期漏洞;与 Android FORTIFY 现场高度吻合,但仍待等价实机闭环确认。 - 现有源码差异包含 RenderSource nullptr observer 回退 NullObserver、Orchestrator 析构双 tagged drain、三类 observer detach 与显式 source clear;Android Validation 增加 T1~T4 Activity recreate 场景和 Native reset 配对日志。静态审计发现 teardown 测试 helper 没有注册 Orchestrator observer,本轮仅补正这一行。
- render-job 队列独立于
waitForEmpty();OpenGL backend/context 后续清理与真实 Android reset 仍须由 RDC 验收。STEP-100 locality 实现无本次差异,运行态回归待执行。 - 本轮仅做源码/任务静态审计与
git diff --check;CMake/Ninja、Native GTest、Gradle/APK、ADB/设备、NavSea、Jest、iOS、candidate/release、commit、push、tag、publish 全部 NOT RUN。不能写 STEP-101 PASS。 - Step:
docs/50_Step记录/STEP-101_RenderOrchestrator销毁生命周期修复_v1.md;完成报告:docs/报告/STEP-101_RenderOrchestrator销毁生命周期修复_Codex完成报告_v1.md。V19 未发布;下一步 RDC 按报告命令独立验证。
2026-10-07 STEP-101 源码交付补充
- 审计 V18 Final HEAD、任务 v2、正常 source erase/clearData、TileCache 延迟释放和独立 render-job 队列;本轮不扩大正常 source 更新语义。
- 补齐 C++ 测试对旧 observer 已 detach 的断言;Android 增加 SurfaceView detach、Java/JNI
nativeReset与 NativeresetRenderer逐轮日志,并补 T3 动态 GeoJSON mutation 标记。 git diff --check通过;Native 编译/GTest、Android Gradle/APK/ADB/设备、STEP-100 locality 运行态、NavSea 和 V19 发布均未执行。结论仍为 PARTIAL,待 RDC 独立验收。
2026-10-07 STEP-101 RDC 独立验收 CLOSED / PASS
- Android x86_64 OpenGL Validation full native build PASS:APK 61,957,678 bytes,libmaplibre 39,637,512 bytes,SHA-256
14cbd35ed0bc1366389ddea69925901013e3b209ed3575462421a7920c73c721。 - FZG1-2 T1/T3/T4 PASS;T2 完整 20 次真实 Activity recreate /
nativeReset/MapRenderer::resetRendererPASS,四组 crash buffer 均为空,不再出现 destroyed-mutex SIGABRT。 - STEP-100 locality 回归 PASS:global revision 62→894,R0 build 1→1、invalidation 19→19、reuse 12→3890;R1 正常持续 build/invalidate。
- Android Native C++ TestRunner 构建 PASS;4 个 RenderSegmentLocality + 2 个 RenderOrchestratorTeardown focused tests 全部 PASS,status=0。TestRunner 临时 fixtures asset 已删除,不纳入 Git。
- Mac host GTest 仍受本机 libuv pkg-config 环境阻塞,未安装系统依赖、未虚报 PASS。Jest NOT RUN。
- STEP-101 允许关闭;下一步进入 V19 candidate → NavSea 冷启动 Gate → 正式发布。
- STEP-101 implementation commit
64cf8f44350eb8ec4b45360db4d3f9505ac4ac0b已推送origin/particle/main,远端回读一致;后续只做 docs closeout 与 V19 发行。
2026-10-08 STEP-102 RenderSegment 无 Placement 段局部复用(代码完成,待验证)
- 基于
6df21dac38f072c5ad35b8dfc7ec5217509602bc的独立step102-placement-free-retained-localityworktree,实现结构性 symbol placement capability、full CPU per-segment gate、逐段 fallback reason,以及仅从全局 live 条件移除纯 aggregate placement gate。旧动态retainedRangeUsesPlacement()、Fast Path、mixed executor、C-001 与 RN method surface 保持原语义。 - diagnostics 新增
placementCapable、placementGatePassed、actualExecution、全局 placement 状态、mainBufferExecutionMode与globalLiveFallbackReason;actual 在 main-buffer 分支执行后记录,允许 cache=reuse 但实际 live 的事实被看见。C++ 测试源码和 Android T1 symbol/T2 two-free 离线场景已交付。 - 只做只读审计与
git diff --check静态检查;CMake/Ninja、C++ 测试、Android Gradle/APK、ADB/设备、Jest、iOS/Metal、NavSea、发布、commit/push 均未执行。STEP-102 不记运行态 PASS;用户手工 Android 构建与后续独立验收命令见docs/报告/STEP-102_RenderSegment无Placement段局部复用_Codex完成报告_v1.md。
2026-10-08 STEP-102 RDC 独立验证补记
- 在独立工作树
step102-placement-free-retained-locality核查了结构性 placement 判断、per-segment gate、实际 main-buffer diagnostics 与 RN 类型边界,未改 Fast Path、C-001、V20 发布源码。 - AppleClang 对新增 C++ GTest 源码
-fsyntax-onlyPASS;独立头文件 smoke 测试 10/10 PASS;git diff --checkPASS。 - Metal
bazel build -c opt --//:renderer=metal //:mbgl-core构建 PASS(642/642,875.118s,产物bazel-bin/libmbgl-core.a)。 - Mac CMake/GTest 配置遇缺失
libuv,未安装依赖,正式 GTest NOT RUN。 - 修复 STEP-102 Android Validation 入口切换时残留 STEP-093/097 状态与轮询的问题。Android APK 编译、T1/T2 真机及 STEP-100/101 回归仍待手工构建与运行;STEP-102 维持“进行中”,尚非 CLOSED/PASS。
2026-10-09 STEP-107 iOS CoreOnly Style Peer 崩溃修复(Native BUILD PASS,iPad 待验收)
- 基于远端最新
particle/main的 V22 后 HEAD24105b1be7,在唯一 Mac 主目录直接修复 DarwinMLNStyle.layers对 CoreOnly 无 Peer Layer 的 nil 插入问题;补齐 KVC 数量/索引/区间、插入/删除与 aboveLayer ObjC 可见顺序语义,Native 粒子天气渲染层保持不变。 - 新增
MLNStyleTests.mm混合 CoreOnly/普通 Layer 的集合及顺序回归用例;git diff --checkPASS。Mac Bazel iOS Native//platform/ios:MapLibre.dynamicPASS,982.084 秒,ZIP 校验 PASS,SHA-256f16b7f2be761a101bb4b906b900175b95412abfeef09d715e2c9321b300a7b8a。 - XCTest 尚未执行;iPad 唐津海图物体直接点击、多 Source、天气开关及粒子渲染尚未真实验收;不能宣称 Bug 已在设备上消失。未修改 V22 Tag、正式发行资料、NavSea、Android 或 Shared Core。
- Step:
docs/50_Step记录/STEP-107_iOS_StyleCoreOnlyPeer集合修复_v1.md;报告:docs/报告/STEP-107_iOS_StyleCoreOnlyPeer集合修复_RDC实施报告_v1.md。
2026-10-09 STEP-108 V23 正式发行(构建/公网回读 PASS,Tag 收尾中)
- 构建源码
87f3d1c59a52581fb8339f0ea7d106b9f4b94fef。统一发行 Android/RN13.6.1-particle.23、iOS6.29.0-particle.23。Mac 四 ABI Android、iOS Metal opt、RN pack 成功,公网六项文件回读 PASS。 - GSRL Source Lock 记录六文件 sha256;V23 Android/iOS 实机及 STEP-107 iPad 崩溃复测仍 NOT_TESTED,不能写成设备 PASS。
2026-10-09 STEP-108 V23 正式发行 CLOSED / GSRL PASS
- build、publish、finalize 三阶段严格串行 exit 0;独立验证六项公网 SHA-256 全 PASS;SwiftPM Tag/校验值与 Git 正式发行 Tag 远端回读 PASS。
- 构建源码 87f3d1c59a52581fb8339f0ea7d106b9f4b94fef;发行 Tag maplibre-particle/rn/13.6.1-particle.23 保持指向 a0a4787b4379ab2819943d20ce05a7ae760a88c3。
- STEP-107 XCTest、iPad 崩溃事故实机重放以及 V23 运行时集成 NOT_TESTED,不冒充设备 PASS。
2026-10-10 STEP-109 V23 CPU / FieldSnapshot 身份快路(开发态)
- 对 Mac particle/main 正式 V23 源码只读核查发现:Particle 与 WeatherColor Renderer 对稳定的 Source T0/T1 仍可能在每帧执行 vector/valid 全数组比较;V21 FZG 热点仅作方向依据,不冒充 V23 实测。
- 在两个 Native Renderer 文件内保存与 GPU 资源对应的不可变 shared_ptr 快照身份;同一已验证快照用 O(1) 身份判断,新对象仍走严格数据/端点比较。未修改 RN API、RenderSegment Gate 或已发行 V23 产物。
- 本轮 git diff --check PASS;Mac Metal Core opt 编译触发 649 actions 大量重编译,主动中止且核验 Bazel PID 已退出,故编译 NOT COMPLETED / NOT PASS;Android/iOS 性能 A/B 尚未取得。阶段记录:docs/50_Step记录/STEP-109_V23_CPU_FieldSnapshot深比较快路_v1.md;报告:docs/报告/STEP-109_V23_CPU_FieldSnapshot深比较快路_RDC阶段报告_v1.md。
2026-10-10 STEP-110 R0 Placement 跨段归因只读调查(PARTIAL)
- 按 NavSea V23 R0 [0,31) 含 Symbol、C1 82 层、static-placement/fastPathMiss 问题,在 Mac particle/main 执行 Codex GPT-6 Astra High 只读调查。Codex 取证完成但文档阶段多次停滞,由 GPT/RDC 独立回读源码并完成三份报告和本记录。
- V23 GSRL 构建源码 87f3d1c,Tag peeled commit a0a4787,调查起点 main 2df504c;Renderer/Placement/Cache/Fast Path 六份关键源码 Git Blob 三者一致,STEP-109 后续 FieldSnapshot 优化不是 V23 制品事实。
- 结论:Placement 事件可条件性追源,但不能据此证明 R0 地名 Symbol 位置、显隐、碰撞与 Fade 不变;V23 对 placement-bearing R0 使用全局保守 Gate,与 STEP-102/106 对 placement-free Retained 局部复用的边界一致,并未证明 Gate Bug。STEP-106 T2 的两个 placement-free R 可在 global placementChanged=true 下复用,不适用于 R0 含地名 Symbol。
- 下一步需先形成 per-R0 视觉等价证据与独立诊断,再考虑 Native 内部 Gate 优化;跨项目 API/Style 改动交 Integration。未编译、未运行测试/设备、未更改 Native 或交付发行,状态 PARTIAL。
- 报告:docs/20_调查/R0_Placement跨段归因与缓存安全边界调查_v1.md;docs/50_Step记录/STEP-110_R0_Placement跨段归因只读调查_v1.md;docs/报告/STEP-110_R0_Placement跨段归因只读调查_Codex完成报告_v1.md。Git Commit/Push 状态以完成报告补记和 RDC 独立核验为准。
2026-10-10 STEP-111 R 段 Placement 结果等价与独立刷新可行性调查(PARTIAL)
- 用户目标:RCRCRC 各 RETAINED R 段仅在自身最终 Symbol/Placement 视觉结果改变时重建;受真实跨段 Collision/Fade 影响者必须失效。
- 在 Mac 上以用户指定的 Codex GPT-6 Astra High 启动源码调查,虽有部分浏览记录,但两轮长时间无结果后终止,未生成既定文档;不能判 Codex PASS。
- GPT/RDC 复核当前全局 Placement Gate 和逐段 Cache:
render_segment.hpp:85-90/render_orchestrator.cpp:792-809/renderer_impl.cpp:638-686。建议保留全局 Placement,先研究每 R 结果影子比较,再授权安全复用;复杂度约 3→4,真正独立 Placement 引擎为 5/5。 - 仅落盘 PARTIAL 评估及执行报告,不改 Native/公共接口、未编译/测试/设备、未进行 Source Lock;实际 Git 收尾另行核验。
- 主报告:
docs/20_调查/STEP-111_R段Placement结果等价与独立刷新可行性调查_v1.md;Step 与执行状态报告见docs/50_Step记录/、docs/报告/。
2026-10-11 STEP-112 V23 Full Render 循环与 Symbol 缓存准入调查(PARTIAL)
- Codex实际会话已核实
gpt-6-astra/high;在Macparticle/main@41b416c261fa72bd21171328045036a124694f47完成A—E只读调查,并直接分阶段落盘三份文档。 - 源码证明正常Continuous Full中,Symbol R重算时changed=true,不重算时stale使Controller transition=true,三条件Placement Gate没有首次Build窗口;fade=0不代表终态,关闭transitions正常Full为true/1/false。Fast还有prepared scene及PREFIX普通Symbol/Line C的独立阻塞。
- 已交付24项Gate矩阵、R2状态机、开关/Fade真值表、S1—S5和A—D提案。FZG1逐帧配置/来源/CPU、原RCRR完整布局及安全新准入仍待验证,不能称Native已修复或性能PASS。
- 仅新增主报告/阶段记录/完成报告和本追加;未改源码/Style/脚本/测试/跨项目文件,未编译/测试/Jest/设备操作,未commit/push,两份未跟踪STEP-110/111任务书保留。
- 主报告:
docs/20_调查/STEP-112_V23粒子FullRender循环与Symbol缓存准入全面源码调查_v1.md;阶段记录及完成报告见docs/50_Step记录/STEP-112_V23粒子FullRender与Symbol缓存调查_v1.md、docs/报告/STEP-112_V23粒子FullRender与Symbol缓存调查_Codex完成报告_v1.md。后续RDC独立审查和Git收尾,未授权Native修复。
2026-10-11 STEP-113 FZG1 PBF Layer 与 Fast Gate 诊断(源码交付PARTIAL)
-
实际模型已核实
gpt-6.1-sol/high;在Macparticle/main@c6d13e1059d464d312ac33acac87967300fa5dc4实现同次input的24Gate首错/失败全集,120帧环形诊断、聚合、pre/post与per-R状态;保留原生产Gate/Placement/Cache准入及安全回退。 -
Test App增加正式PBF63、静态RC、粒子关闭、明示部分RCRR、手动Source变化;3秒查询/30秒摘要与STEP113Gate手动导出。没有伪造113层动态业务图层;本机生产域名回读失败,完整等价需同版本快照及设备证据。
-
新增4个C++回归用例源码;仅静态核对与diff空白检查,未编译/运行测试/Jest/Gradle/APK/ADB,未commit/push/发行。STEP-102动态poll/fixture与既有未跟踪任务书保持原样。
-
Step与中文交付报告见
docs/50_Step记录/STEP-113_FZG1_PBF_Layer与FastGate诊断_v1.md、docs/报告/STEP-113_FZG1_PBF_Layer与FastGate诊断_Codex完成报告_v1.md;RDC独立完成编译、FZG1-2逐帧/资源/场景与开销验收,APK成功不等于性能PASS。 -
2026-10-11 STEP-113 RDC:标准Android Validation APK构建exit=0;FZG1-2安装成功,五场景稳定Logcat摘要(Native层64/66/66/66/67)均decisionMismatch=0;STATIC_RC Full875/Fast0,PARTIAL_RCRR Full861/Fast0,发现cache-invalid外#22/#23同时阻断。完整113层、手动Source变化、性能和回归未验收,整体PARTIAL;详细证据追加于STEP与报告。
-
2026-10-11 STEP-113第二轮:FZG1-2已保存Source变更前后各120帧完整Snapshot,decisionMismatch=0;单次Source mutation=1,Native最后变更为step113-source-probe、影响C1;稳定119帧同时命中#3/#4/#22/#23。已确认内建annotation symbol进入C,且#22/#23可共享根因;Mac Native GTest因缺libuv未运行,NavSea完整113层/性能仍PARTIAL。详见STEP记录追加段落。
2026-10-11 STEP-114 Fast Path 安全准入与独立 Test App(源码交付 PARTIAL)
-
实际模型已核实 GPT-6.1-Sol(gpt-6.1-sol)/ high;Mac particle/main 起点 b02e54de3d45fcf612126ae8f037cba204f590ea。无模型切换、子代理、commit/push/发行。
-
Shared Core 仅修正完整无 Symbol 场景被 controller stale 误挡的 #13 输入;隐藏/空/Annotation Symbol、空表/数量不一致继续保守。CustomMVTVector、非粒子 C、Symbol R Build/scene/资源/碰撞保护均保留 fail-closed。
-
回读旧 STEP-113 完整 JSON:navsea_delivery 实际是 Vector;R 依赖 tide-spots→tide 但 Native source 表缺 tide。缺源提前明确报 missing-source,不补假源、不放行缓存、不改原 PBF 五场景。
-
新增独立 FAST_SMOKE 与 Circle C/真实 Annotation/Symbol R 三个反向场景;只在独立空 Annotation 场景移除空内建 layer,使用 Native 真实 Full/Fast/Build/Reuse/24Gate,单次操作自动保存前后短延迟快照。新增3个非 Jest C++用例源码。
-
中文调查、场景/RDC精确验收命令、Step与完成报告已实际落盘;仅静态检查,未编译/测试/Gradle/ADB/Jest/设备。真实 Fast 未验收,Symbol R 结果证书 BLOCKED,不标 Fast Path 已修复。
-
下一步 RDC 独立审计/执行 Mac Native 定向检查;用户一次手工 Android/设备闭环并保存源码diff/制品SHA/逐帧/截图证据。详见 docs/报告/STEP-114_FastPath安全准入与TestApp闭环_Codex完成报告_v1.md 与 docs/60_测试/STEP-114_独立FastSmoke场景与RDC验收_v1.md。
-
2026-10-11 STEP-114 RDC:独立核对安全Gate改动、3项C++测试源码、Android Test App接线及STEP-113/102冻结SHA,git diff --check PASS。Mac缺libuv,单独C++ header检查因Xcode找不到标准头array环境阻塞;Android/真机/Fast未执行,PARTIAL,后续用户一次手工构建验收。
-
2026-10-11 STEP-115:为原STEP-113专用APP增加Fast Path复测工具,严格校验源码HEAD、build-info APK SHA与设备安装SHA;旧包源码为c6d13e1,与现行21a1081不匹配,preflight正确拒绝。已验证旧Logcat可解码STEP113真实摘要,原五场景保持不改。尚无新Android编译/安装/真正Fast,下一步用户手工build/install后以STATIC_RC为先验收,状态PARTIAL。
2026-10-11 STEP-116 原 STEP-113 PBF Fast Path 受控修复(源码交付 PARTIAL)
-
实际模型 GPT-6.1-Sol(gpt-6.1-sol)/ high,已读取会话turn_context确认;Mac particle/main起点e2d202b560ad0165101546597c43f2ef0ccf4542,无commit/push/发行/子代理。
-
仅STATIC_RC确认空实例后一次移除SDK内部points层,保留Source及原63层;stop恢复,后续添加/Style替换撤销验收条件。Native AnnotationManager在Symbol add/update/style-loaded同步恢复缺层,no-op更新也dirty,避免依赖3秒poll漏Marker。
-
R缺tide仍missing-source,Symbol R无最终GPU结果证书仍BLOCKED;未补假源/删tide-spots/放宽Core C或Placement Gate。JSON加missingSourceIds,摘要同次保留Placement与真实Build/Reuse/Full/Fast。
-
新增四个Step116Safety与三个Annotations.Step116非Jest测试源码;STEP115脚本修复实际等待时长并拒绝未锁定tracked源码、生命周期变化/撤销/计数reset。四份中文交付和README已落盘,开发记录仅追加。
-
已做静态diff/AST/旧JSON及冻结SHA核查,未编译/运行Native测试/Gradle/ADB/安装/Jest;真实Fast与画面NOT VERIFIED。保护STEP110/111,保留STEP114/102源码。下一步RDC独立审计锁定源码,用户一次手工build/install,原STATIC_RC≥75秒与120帧/24Gate/SHA/画面闭环,详见docs/60_测试/STEP-116_STEP113原PBF专用APP验收_v1.md及本Step完成报告。
-
2026-10-11 STEP-116 RDC:审查Native空Annotation恢复、原STEP113受限空层移除、缺源诊断、7个C++测试源码与同HEAD/SHA复测脚本,git diff --check、Python AST通过。修正Mac测试命令rg为grep -E。实际CMake macos-metal配置exit1缺libuv,未继续C++测试/Android Gradle/真机Fast,PARTIAL;缺tide与Symbol R仍BLOCKED。
-
2026-10-11 STEP-116 RDC实测:按用户明确授权由Mac实际编译并安装Test App,源码c48a72a9、APK SHA a8b7f4e0f8e026bde8835e18a04876062be84cce3a3749a511cb08605d9f8a35、设备192.168.200.139:5555安装SHA一致。原STEP113 STATIC_RC 90s Fast0/Full+920;Native65层C正常两层,#22近120帧零失败,空Annotation修复有效;R缺tide、Build/Reuse0、Placement不稳定,119Full/0Fast,仍FAIL/PARTIAL。报告docs/60_测试/STEP-116_FZG1_原PBF实机验收结果_20261011.md;原始JSON/Screenshot存Git忽略artifacts目录。
2026-10-11 STEP-117 原 PBF R 首次 Build 与 Fast 安全准入(BLOCKED)
-
实际GPT-6.1-Sol(gpt-6.1-sol)/high已从当前会话turn_context核实;Mac particle/main起点43e5f5b91598b9c3d3f1c788052d4bbd2d616668,Integration本地只读HEAD80667d6c343411d03a760425438e3d292f452118。无模型切换、子代理、commit/push或跨仓写入。
-
完整回读STEP116原STATIC_RC 120帧JSON,SHA cd491d2acca97119f1d4f2d6f77eb7b229c17b90d4be1181a59202308429b219。119Full/0Fast/1pending、mismatch0;pre105帧changed=false/fade非零/transition=true,15帧true/0/false,全部R placementGate失败。原63层/C两天气层及空Annotation受控修复保留。
-
源码证明缺源无新RenderItem不等于GPU零贡献/无旧数据:双group停用要processChanges执行,markLayerRenderable不清旧drawables/tiles;原JSON无提交代次/旧Renderable数据排除证书。Symbol重算changed、recent stale,无首次Build窗口;fingerprint只有Impl/index,不含最终opacity/vertices/atlas/collision/uniform。
-
按任务安全停止条件,缺tide继续missing-source,Symbol R继续fail-closed,未放宽24Gate/ready/revision、未删tide-spots或补假tide、未以STEP114烟测替代。零贡献准入和结果证书未实现,真实Build/Reuse/Fast目标未完成。
-
两个既有C++测试文件新增七项Step117Safety:真实Controller/Placement、真实缺源RenderTree及sourceDiff、RemoveGroup队列、Tile/Glyph/Image回调/context/style epoch、cache墓碑与revision重建;全部NOT RUN/NOT COMPILED,不冒称GPU/并发/像素PASS。
-
已生成四份中文调查/Step/验收计划/完成报告并追加本记录;仅执行原证据解析、静态一致性/范围/diff检查。未运行Native编译/CMake/Ninja/Bazel/GTest、Gradle/ADB/安装/Jest、设备或性能测量,STEP110/111未跟踪MD与原Git忽略JSON保持。
-
交RDC独立审计及定向Native验证;由粒子负责人协调Shared Core缺源与Symbol证书设计、Style/Host真实tide语义。受控实现完成后再安排一次用户授权的Android源码/APK/设备SHA与原STATIC_RC≥90秒、120帧24Gate/Mutation/用户画面闭环。详细状态见docs/报告/STEP-117_原PBF_Fast缓存准入_Codex完成报告_v1.md。
-
2026-10-11 STEP-117 RDC:新加7个C++非Jest安全回归用例源码,针对缺Source/旧GPU组、Symbol首次Build及源/图像/字形/相机变更fail-closed;两个test/renderer源文件由Android NDK OpenGL/x86_64实际compile_commands.json做C++20 -fsyntax-only,均exit0(6.3s/5.3s)。生产Native/Fast Gate/APK未改,本轮不重复构建相同APK,GTest运行/真实Fast仍BLOCKED。需要Shared Core结果证书和Integration核验真实tide语义,报告见docs/20_调查/STEP-117_PBF_R首次缓存Build安全证据_v1.md。