Files
MapLibreParticleLab/docs/报告/STEP-057D_WeatherRuntime接口收尾与RN桥接前冻结_Codex完成报告_v1.md
OpenAI Codex 6d514e3aae
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
docs: record STEP-057D timeline rejection fix
2026-09-07 14:22:45 +08:00

4.3 KiB
Raw Permalink Blame History

STEP-057D WeatherRuntime 接口收尾与 RN 桥接前冻结 — Codex 完成报告

状态:IMPLEMENTED / READY_ANDROID_COMPILE_CHECK

实际完成内容

本轮基于 01295df4b814562f569375e7e7cf1f48ce35388f,完成 Host facade 收尾,不进入 STEP-058,不实现 RN/JSI/TurboModule。

  • 新增 WeatherRuntime.setParticleColor(float,float,float,float) 与 setTrailColor(float,float,float,float),经独立 JNI setter 进入 Core。两者互不提交另一颜色,不影响 WeatherColor ramp、field、Timeline、Runtime Field Window 或粒子模拟。
  • 保留 setParticleColors(...) 兼容 helper,继续使用原子成对底层 setter;不在 facade 猜测默认值。Core 默认值仍由 RasterParticleLayer::Impl 所有。
  • REAL WEATHER submit 改用 FieldSubmitResult 与 accepted()/enum 日志,不再使用 getCode() 或整数结果做正常 Host 业务判断。
  • REAL WEATHER 的 playback 和 typed visual 属性不再回退到 MapLibreMap 低层接口;旧 fixture、HOST、time-mix、field-window 与 diagnostics 入口保留并明确属于 legacy/diagnostic。
  • 增加独立颜色 API、隔离性及 native rejection fail-closed 的既有 JUnit/Mockito 测试源码。

修改文件

  • platform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/WeatherRuntime.java
  • platform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/MapLibreMap.java
  • platform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/NativeMap.java
  • platform/android/MapLibreAndroid/src/main/java/org/maplibre/android/maps/NativeMapView.java
  • platform/android/MapLibreAndroid/src/cpp/native_map_view.hpp
  • platform/android/MapLibreAndroid/src/cpp/native_map_view.cpp
  • platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/particle/ParticleCoreLayerValidationActivity.kt
  • platform/android/MapLibreAndroid/src/test/java/org/maplibre/android/maps/WeatherRuntimeStateTest.java
  • docs/50_Step记录/STEP-057D_WeatherRuntime接口收尾与RN桥接前冻结_v1.md
  • 粒子开发记录.md

API 与旁路边界

正式 Host/RN API 使用独立 setParticleColor/setTrailColor、typed field result、typed playback 与 typed visual 方法。A 类 REAL WEATHER 正常控制均经 WeatherRuntime。B 类 legacy/diagnostic 仍可直接调用 MapLibreMap,仅服务 fixture、HOST INVALID/DUPLICATE、ADVANCE WINDOW、time-mix 和旧诊断,不构成 RN contract。

验证

  • git diff --check:PASS(功能提交前及文档收尾前均执行)。
  • rg 源码审计:确认 REAL WEATHER 不再使用 submitWindField(...).getCode(),且 REAL WEATHER 不走 timeline/property 低层 fallback。
  • 未执行 Android Gradle、APK build、ADB、设备/虚拟机测试或 Jest。
  • 未执行 noisy compile/test;Android compile check 留待后续统一授权。

已知剩余风险

Android Java/JNI 编译、Mockito final-class 配置和设备上的独立颜色视觉效果尚未运行验证;需后续 Android compile check 与人工验收。未改变 Core/render 生命周期,未引入 RN bridge。

审计后小修正

独立代码审计发现 controlTimeline() 在 REAL WEATHER 模式下若 WeatherRuntime 返回 REJECTED,原条件表达式会跳过 reject 分支并误记为成功。已修正为显式 commandAccepted 判定:

  • WeatherRuntime 返回 ACCEPTED → 成功;
  • REAL WEATHER 下返回 REJECTED / null → 明确拒绝并立即 return,绝不 fallback;
  • 非 REAL WEATHER 的 legacy/diagnostic 路径仍允许调用底层 MapLibreMap.controlRasterArraySourceTimeline(...)。

该修正只修改 TestApp Host 模拟逻辑,不修改 WeatherRuntime、JNI、Core、Renderer、Timeline 或 GPU 语义。

Git

  • 主功能 commit:544e4aee3ad639ce5d64c054c3668e2ea2de3d72
  • 主功能 message:fix: finalize WeatherRuntime host API boundary
  • 文档主体提交:0e117a9255f708f3f74a39d022ff740976a28ba4
  • 审计小修正 commit:74e3cc911b8cecd4f3d75613055c213a8bcebcdb
  • 修正 message:fix: preserve WeatherRuntime timeline rejection
  • Remote branch:origin/particle/main
  • 审计小修正已成功 push;功能代码 HEAD 与 Remote HEAD 均已推进到 74e3cc911b8cecd4f3d75613055c213a8bcebcdb。
  • 本报告后续文档提交只更新记录,不改变功能代码。