diff --git a/docs/50_Step记录/STEP-051_Local_Production-like_Field_Feed与Core_Snapshot_Submit_Bridge_v1.md b/docs/50_Step记录/STEP-051_Local_Production-like_Field_Feed与Core_Snapshot_Submit_Bridge_v1.md index 1c10d5023..77420c794 100644 --- a/docs/50_Step记录/STEP-051_Local_Production-like_Field_Feed与Core_Snapshot_Submit_Bridge_v1.md +++ b/docs/50_Step记录/STEP-051_Local_Production-like_Field_Feed与Core_Snapshot_Submit_Bridge_v1.md @@ -45,3 +45,14 @@ TIME/NORMAL validation 入口现可选择 production-like source(UI 状态标 - Jest:未执行。 当前状态只能记为:`IMPLEMENTED / WAITING_ANDROID_VALIDATION`。 + +## Android Validation Host 入口补充 + +在现有 Particle Core Layer Validation 页面的 MORE 菜单新增: + +- `PRODUCTION FEED`:切换到 STEP-051 已有 `production-fields` source,加载四个 local metadata asset 与既有 binary payload,继续进入 Core Adapter、Snapshot、initial T0/T1、Timeline READY/PLAY 路径。 +- `INVALID PROD`:加载 `field-invalid.json`,其中 `fieldId`、`generation`、`validTime` 明确非法,用于观察正式 Adapter rejection/fail-closed;不放宽 contract。 + +旧 `UNIFORM EAST`、`UNIFORM NORTH`、`VORTEX` 与 TIME 控件仍保留。Host 仅触发低频 style/resource 命令;没有新增 JNI command、Android Timer、Timeline、Window 或 MIX state。状态栏在 production 模式显示 `PRODUCTION · TL ...`,日志仍由 Core 输出 `PRODUCTION_FEED_LOAD`、`SNAPSHOT_SUBMIT` 和 Timeline 事件。 + +本次没有修改 C++ Core、Timeline、Runtime Field Window、Renderer、Adapter contract、MIX observability 或 Rotation/Viewport。Android Gradle/APK/ADB/实机验证仍由用户执行;状态继续为 `IMPLEMENTED / WAITING_ANDROID_VALIDATION`。 diff --git a/docs/报告/STEP-051_Android_Validation_Host入口补充_Codex完成报告_v1.md b/docs/报告/STEP-051_Android_Validation_Host入口补充_Codex完成报告_v1.md new file mode 100644 index 000000000..e52508410 --- /dev/null +++ b/docs/报告/STEP-051_Android_Validation_Host入口补充_Codex完成报告_v1.md @@ -0,0 +1,52 @@ +# STEP-051 Android Validation Host 入口补充 — Codex 完成报告 + +## 基线 + +- Starting HEAD:`e3e7c7e219c490ab45ca40794db0bc59fc2c4817` +- branch:`particle/main` +- origin/particle/main 起点:`e3e7c7e219c490ab45ca40794db0bc59fc2c4817` +- 任务性质:STEP-051 内部 Android Validation Host 补充。 + +## 修改与接线 + +- `ParticleCoreLayerValidationActivity.kt`:MORE 菜单新增 `PRODUCTION FEED` 与 `INVALID PROD`,分别触发现有 production-like source 和非法 metadata source。 +- `activity_particle_core_layer_validation.xml`:增加不可见菜单 target `validationProductionInvalid`。 +- Android asset:增加 `field-invalid.json`。 +- `STEP-051_Local_Production-like_Field_Feed与Core_Snapshot_Submit_Bridge_v1.md`:追加入口说明。 + +`PRODUCTION FEED` 复用 STEP-051 已有 `production-fields`、`LocalParticleFieldFeed`、正式 Adapter、Snapshot、`submitInitialRuntimeFieldWindow` 和 Core Timeline。没有复制 feed、Timeline、Runtime Window、MIX 或 normalization。`INVALID PROD` 只提供明确非法 local metadata 触发,Adapter contract 未放宽。 + +日志区分 production-like 路径与 fixture 路径;Core 侧既有低频 `PRODUCTION_FEED_LOAD`、`SNAPSHOT_SUBMIT`、Timeline READY/Boundary 日志继续生效。未增加 JNI method、JNI command、每帧日志或 Android Timer。 + +## 边界判断 + +- Core / Timeline / Runtime Field Window / Renderer:未修改。 +- ParticleFieldDataAdapter / Descriptor / Snapshot:未修改。 +- Duplicate:继续复用当前 source 的既有 `DUPLICATE T1`,production source 激活后由同一 Runtime Window 处理。 +- MIX observability:未修改,仍为 `NON-BLOCKING` 技术债。 +- Rotation/Viewport:未修改。 + +## 验证 + +- Linux OpenGL `mbgl-test-runner` 精确构建:复用 STEP-051 已通过构建。 +- 相关定向测试:复用并确认 STEP-051 既有 `Source.LocalProductionFeed*`、`Source.ParticleFieldDataAdapter*`、`Source.RasterArray*` 为 14/14 PASS。 +- Android source static inspection:确认 MORE 菜单、resource ID、production asset 路径和旧 fixture 入口均存在。 +- JNI signature/registration:本次无 JNI 改动,无需新增注册。 +- `git diff --check`:PASS。 +- Android Gradle/APK/ADB/App/实机:未执行。 +- Jest:未执行、未修改。 + +## Git 与状态 + +- commit message:`test: expose STEP-051 production feed validation` +- commit hash:待提交后回填。 +- push result:待执行。 +- remote branch:`origin/particle/main` +- Final HEAD:待 push 后回填。 +- 无关 untracked 文件未修改、未 stage、未提交。 + +当前 STEP-051 状态保持:`IMPLEMENTED / WAITING_ANDROID_VALIDATION`。 + +## 用户 Android 验收步骤 + +重新 build/install 一次后:MORE → `PRODUCTION FEED`,观察 `PRODUCTION` 与 `TL READY`;再进入 TIME → `PLAY / RESTART`,验证 MIX、至少两个 boundary、reuse/upload、`simulationRebuild=false`、`trailCleared=false`、Pause/Resume、Duplicate T1。随后可点 MORE → `INVALID PROD`,确认 Adapter reject、保持最后有效 Field、Renderer 持续且不黑屏。 diff --git a/platform/android/MapLibreAndroidTestApp/src/main/assets/integration/particle-production/field-invalid.json b/platform/android/MapLibreAndroidTestApp/src/main/assets/integration/particle-production/field-invalid.json new file mode 100644 index 000000000..72943eabb --- /dev/null +++ b/platform/android/MapLibreAndroidTestApp/src/main/assets/integration/particle-production/field-invalid.json @@ -0,0 +1,4 @@ +{ + "schema": "maplibre-particle-field/v1", "fieldId": "", "fieldType": "WIND", "displayDomain": "GLOBAL", "generation": 0, "validTime": 0, "dataVersion": 99, + "bounds": {"west": -180.0, "south": -85.0, "east": 180.0, "north": 85.0}, "grid": {"width": 16, "height": 16}, "vector": {"layout": "interleaved-uv", "encoding": "float32-le", "noData": -9999.0}, "payload": {"byteLength": 2048} +} diff --git a/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/particle/ParticleCoreLayerValidationActivity.kt b/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/particle/ParticleCoreLayerValidationActivity.kt index dcf40b049..5b06fe7cd 100644 --- a/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/particle/ParticleCoreLayerValidationActivity.kt +++ b/platform/android/MapLibreAndroidTestApp/src/main/java/org/maplibre/android/testapp/activity/particle/ParticleCoreLayerValidationActivity.kt @@ -138,6 +138,12 @@ class ParticleCoreLayerValidationActivity : AppCompatActivity() { findViewById