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 77420c794..5297a4a7f 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 @@ -56,3 +56,12 @@ TIME/NORMAL validation 入口现可选择 production-like source(UI 状态标 旧 `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`。 + +## Android Validation Host Kotlin 编译修复 + +- 错误:`ParticleCoreLayerValidationActivity.kt:418` 的 `Unresolved reference 'reason'`。 +- 根因:`loadValidationStyle()` 调用 `validationStyle()` 时未透传已有的 `reason` 参数。 +- 修复:将调用改为 `validationStyle(active, enabled, reason)`,并将函数签名增加 `reason: String`。 +- `PRODUCTION FEED → field-00.json` 与 `INVALID PROD → field-invalid.json` 的判断逻辑保持不变。 +- 未修改 Core、Timeline、Runtime、Renderer 或 production metadata contract;Android build 尚待用户手工复验。 +- STEP-051 状态仍为:`IMPLEMENTED / WAITING_ANDROID_VALIDATION`。 diff --git a/docs/报告/STEP-051_Android_Validation_Host_Kotlin编译修复_Codex完成报告_v1.md b/docs/报告/STEP-051_Android_Validation_Host_Kotlin编译修复_Codex完成报告_v1.md new file mode 100644 index 000000000..5b83cb868 --- /dev/null +++ b/docs/报告/STEP-051_Android_Validation_Host_Kotlin编译修复_Codex完成报告_v1.md @@ -0,0 +1,38 @@ +# STEP-051 Android Validation Host Kotlin 编译修复 — Codex 完成报告 + +## 基线 + +- Starting HEAD:`c94c9c5bd4cce0322c9e7beb95e67385ae085720` +- branch:`particle/main` +- 任务范围:仅修复 `reason` 参数透传。 + +## 修复 + +在 `ParticleCoreLayerValidationActivity.kt` 中: + +- `loadValidationStyle()` 调用改为 `validationStyle(active, enabled, reason)`。 +- `validationStyle()` 签名增加 `reason: String`。 +- 保留 `INVALID_PRODUCTION_METADATA` 判断:正常入口使用 `field-00.json`,`INVALID PROD` 使用 `field-invalid.json`。 +- 未新增全局 reason、状态变量、Timer 或第二套 production state。 + +未修改 Core Adapter、Descriptor、Snapshot、Snapshot Submit Bridge、Timeline、Runtime Field Window、RasterParticleLayer、Renderer、JNI、Network 或 Provider Framework。 + +## 检查与边界 + +- 所有 `validationStyle(` 调用点:已检查,唯一调用点传入三个参数。 +- `PRODUCTION FEED` / `INVALID PROD` 菜单:仍存在。 +- `git diff --check`:PASS。 +- Android Gradle/APK/ADB/App:未执行。 +- Jest:未执行、未修改。 +- Rotation/Viewport:未修改。 +- 无关 untracked 文件:未修改、未 stage、未提交。 + +## Git + +- commit hash:待提交后回填。 +- commit message:`fix: pass validation reason into STEP-051 style builder` +- push result:待执行。 +- remote branch:`origin/particle/main` +- Final HEAD:待 push 后回填。 + +当前 STEP-051 状态保持:`IMPLEMENTED / WAITING_ANDROID_VALIDATION`。用户后续手工执行 Android OpenGL Debug build,首要门槛为 `BUILD SUCCESSFUL`。 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 5b06fe7cd..372224ad9 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 @@ -228,7 +228,7 @@ class ParticleCoreLayerValidationActivity : AppCompatActivity() { styleReady = false styleLoadEpoch += 1 Log.i(TAG, "ParticleGPU: event=STYLE_LOAD epoch=$styleLoadEpoch reason=$reason") - maplibreMap.setStyle(Style.Builder().fromJson(validationStyle(active, enabled))) { + maplibreMap.setStyle(Style.Builder().fromJson(validationStyle(active, enabled, reason))) { styleReady = true if (timeWindowMode) timelineState = "READY" status.text = statusText() @@ -396,7 +396,7 @@ class ParticleCoreLayerValidationActivity : AppCompatActivity() { return "$mask · $runtime · $fields$playback · MIX ${(timeMix * 100).toInt()}% · $particleCount · W ${"%.1f".format(lineWidth)} L ${"%.3f".format(particleLength)} O ${(particleOpacity * 100).toInt()} T ${(trailOpacity * 100).toInt()} F ${(trailFade * 100).toInt()} C ${if (speedColorEnabled) "ON" else "OFF"}" } - private fun validationStyle(active: Boolean, enabled: Boolean): String { + private fun validationStyle(active: Boolean, enabled: Boolean, reason: String): String { val fixtureId = fixtureId() val nextFixtureId = if (timeWindowMode) { if (fixtureMode == FIXTURE_UNIFORM_NORTH) "vortex" else "uniform-north"