diff --git a/docs/50_Step记录/STEP-061_Binary_UV_Field_Transport_v2.md b/docs/50_Step记录/STEP-061_Binary_UV_Field_Transport_v2.md new file mode 100644 index 000000000..b96a5f14b --- /dev/null +++ b/docs/50_Step记录/STEP-061_Binary_UV_Field_Transport_v2.md @@ -0,0 +1,53 @@ +# STEP-061 Binary U/V Field Transport v2 + +状态:`CLOSED / PASS` +日期:2026-09-09 + +## 最终结论 + +STEP-061 已完成 RN Test Host → WeatherRuntime → Android Java/JNI → RasterArraySource/Core 的正式 Binary U/V Field Transport,并完成 Android OpenGL 端到端实机验收。 + +- 正式 transport 为 `metadataJson + local file reference`;payload 为 raw `float32-le / interleaved-uv` bytes。 +- 未使用 `number[]`、payload JSON、base64、hex,也未引入 provider/network/vendor 逻辑到 Native/Core。 +- 继续复用唯一 `WeatherRuntime.submitWindField(metadataJson, byte[])` ingress;未新建第二套 Adapter、Timeline 或 Runtime Field Window。 +- Core 保持 schema、byteLength、generation、validTime、Timeline、Runtime Window 与 fail-closed 的最终所有权。 + +## 构建与制品 + +- Source commit:`4467adcce02db7f1bbbea1f4a829023c53085e39`。 +- AAR:`org.maplibre.gl:android-sdk-opengl:13.4.1-step061`。 +- AAR 固定使用 `JOBS=1 RENDERER=opengl BUILDTYPE=Release make apackage` 构建,输出确认 `--max-workers=1`,最终 `BUILD SUCCESSFUL in 7m 10s`。 +- Maven Local publish:`BUILD SUCCESSFUL in 20s`。 +- Linux build output 与 Maven Local AAR SHA-256 一致:`40ec19724cbe0807c09c6acf9b7e6e0dac2f2498f1269b6bacdd35740a6cd77a`。 +- CARBON7i 通过 `curl.exe -L` 加不同 `?v=` 下载 AAR/POM/module;Win11 AAR SHA-256 与 Linux 完全一致。 +- Win11 Maven Local 安装完成;Bridge 与 MLRN 两条 `dependencyInsight` 均解析到 `13.4.1-step061` 并 `BUILD SUCCESSFUL`。 +- Test Host APK `assembleDebug`:`BUILD SUCCESSFUL in 1m 50s`。 + +## Android 最终验收 + +设备固定为 `192.168.1.146`,横屏运行;双 reverse 为 `8091 -> 8091`、`8081 -> 8091`。 + +重复提交并重新读取 Native state 后,结果稳定为: + +- `runtime: READY / PAUSE / AUTO` +- `Binary Transport: READY: FILE_REF / FLOAT32_LE / INTERLEAVED_UV` +- `Invalid Probe: REJECTED_ADAPTER` +- `T0 Submit Result: ACCEPTED_PENDING_INITIAL_WINDOW` +- `T1 Submit Result: INITIAL_WINDOW_READY` +- `Runtime Field Window: Core evidence: INITIAL_WINDOW_READY + runtime READY` +- producer identity:`T0=1@1767225600000`、`T1=2@1767229200000` +- MIX:`Core-owned / not exposed` + +当前 App PID 为 `24476`;日志 hard gate 中 `FATAL EXCEPTION`、`SIGSEGV`、`WEATHER_OBJECTS_NOT_READY`、`JNI DETECTED ERROR`、`UnsatisfiedLinkError`、`NoSuchMethodError` 均为 0。 +## 可观测性说明 + +Release AAR 中既有 `HOST_FIELD_SNAPSHOT_READY`、`HOST_FIELD_INITIAL_WINDOW_READY` 为 `Log::Info`,本轮设备 logcat 未观察到这两条 INFO 事件;未把不存在的日志写成 PASS 证据。负向 `HOST_FIELD_SUBMIT_REJECTED` Warning 可见,并明确给出 `PAYLOAD_SIZE_MISMATCH`。 + +正向 hard gate 采用 bridge 直接返回的 Core submit result,加上重新执行 GETSTATE 后的 Native `READY` 状态;这两类结果均来自现有 WeatherRuntime/Core 链,不由 JS 自行推导 T0/T1/MIX。 + +## 收尾 + +- 未启用 `07-enable-full-validation-ui.ps1`,因此没有临时 STEP-060 validation UI 需要回退;legacy runtime `App.tsx` 与当前 Git 工作副本 `App.tsx` SHA-256 完全一致,baseline 已保持。 +- `/mnt/nas/pbf` 中本 Step 临时公开的 AAR/POM/module 已全部删除。 +- 未进入 NavSea,未加入或运行 Jest。 +- STEP-061 正式关闭,状态为 `CLOSED / PASS`。 diff --git a/docs/报告/STEP-061_Android最终验收报告_v1.md b/docs/报告/STEP-061_Android最终验收报告_v1.md new file mode 100644 index 000000000..dc80d2354 --- /dev/null +++ b/docs/报告/STEP-061_Android最终验收报告_v1.md @@ -0,0 +1,79 @@ +# STEP-061 Android 最终验收报告 v1 + +日期:2026-09-09 +结论:`PASS` + +## 1. 验收对象 + +- 分支:`particle/main` +- Source commit:`4467adcce02db7f1bbbea1f4a829023c53085e39` +- AAR:`org.maplibre.gl:android-sdk-opengl:13.4.1-step061` +- Android Test Host:`D:\React\MapLibreParticleRNTestHost-Win11-STEP060-20260907` +- Android 设备:`192.168.1.146` + +## 2. AAR 与 Maven + +AAR 按固定命令构建: + +`JOBS=1 RENDERER=opengl BUILDTYPE=Release make apackage` + +构建输出确认 `--max-workers=1`,最终 `BUILD SUCCESSFUL in 7m 10s`。Maven Local publish 为 `BUILD SUCCESSFUL in 20s`。 + +Linux build output 与 Maven Local AAR SHA-256 均为: +`40ec19724cbe0807c09c6acf9b7e6e0dac2f2498f1269b6bacdd35740a6cd77a`。 +CARBON7i 使用 `curl.exe -L` 并为 AAR/POM/module 分别使用新的 `?v=` 下载;Win11 下载 AAR 与 Maven Local AAR SHA-256 均与 Linux 一致。 + +Bridge 与 MLRN 两条 `dependencyInsight` 均只解析到 `org.maplibre.gl:android-sdk-opengl:13.4.1-step061`,两次 Gradle 检查均 `BUILD SUCCESSFUL`。 + +## 3. APK 与启动环境 + +- `:app:assembleDebug`:`BUILD SUCCESSFUL in 1m 50s`,206 actionable tasks,22 executed、184 up-to-date。 +- Manifest 保持 `android:screenOrientation="landscape"`。 +- Metro `8091` 正常监听。 +- ADB reverse:`tcp:8091 -> tcp:8091`、`tcp:8081 -> tcp:8091`。 +- `adb install -r`:Success;`.MainActivity` 正常启动。 +- 验收 PID:`24476`。 + +## 4. Binary U/V runtime hard gate + +首次进入时为预期初态:`WAITING_FOR_FIELDS / PAUSE / AUTO`、Binary PENDING、`TIMELINE_NOT_READY`。 + +点击 `SUBMIT BINARY WIND T0/T1` 后,再执行 GETSTATE 重新读取 Native state,稳定结果为: + +- `runtime: READY / PAUSE / AUTO` +- `Binary Transport: READY: FILE_REF / FLOAT32_LE / INTERLEAVED_UV` +- `Invalid Probe: REJECTED_ADAPTER` +- `T0 Submit Result: ACCEPTED_PENDING_INITIAL_WINDOW` +- `T1 Submit Result: INITIAL_WINDOW_READY` +- `Runtime Field Window: Core evidence: INITIAL_WINDOW_READY + runtime READY` +- producer identity:`T0=1@1767225600000`、`T1=2@1767229200000` +- MIX:`Core-owned / not exposed` + +清空 logcat 后再次重复提交,结果仍一致。负向 probe 的 Native Warning 明确为:`HOST_FIELD_SUBMIT_REJECTED`、`REJECTED_ADAPTER`、`PAYLOAD_SIZE_MISMATCH`、`payloadBytes=95`,证明非法 payload 进入既有 Core Adapter 并 fail-closed。 + +## 5. Logcat hard gate + +当前 App PID 下以下计数均为 0: + +- `FATAL EXCEPTION` +- `SIGSEGV` +- `WEATHER_OBJECTS_NOT_READY` +- `JNI DETECTED ERROR` +- `UnsatisfiedLinkError` +- `NoSuchMethodError` + +Release AAR 中 `HOST_FIELD_SNAPSHOT_READY` 与 `HOST_FIELD_INITIAL_WINDOW_READY` 是 `Log::Info`;本轮设备 logcat 未观察到这两条 INFO 事件,因此未将其伪造为验收证据。正向证据以 bridge 直接返回的 Core result 与 GETSTATE 的 Native `READY` 为准。 +## 6. 边界与清理 + +- 未进入 NavSea。 +- 未把 provider/network/vendor/Weather Service/download/cache/prefetch 逻辑放入 MapLibre Native/Core。 +- 正式 transport 未使用 `number[]`、payload JSON、base64 或 hex。 +- 未加入或运行 Jest。 +- 本轮未启用临时 STEP-060 full-validation UI;legacy runtime `App.tsx` 与 Git 当前 `App.tsx` SHA-256 一致,baseline UI 保持不变。 +- `/mnt/nas/pbf` 中 `13.4.1-step061` 临时 AAR/POM/module 已全部删除。 + +## 7. 最终判定 + +Binary file-reference transport、非法 payload fail-closed、T0 pending、T1 initial-window-ready、Native runtime READY、依赖唯一性、AAR/APK 构建及 crash hard gate 全部通过。 + +STEP-061 可正式标记为 `CLOSED / PASS`。 diff --git a/粒子开发记录.md b/粒子开发记录.md index de270da59..78f3c35f1 100644 --- a/粒子开发记录.md +++ b/粒子开发记录.md @@ -569,3 +569,13 @@ WeatherColorLayer 的 `ParticleGpuValidationUBO` designated initializer 补齐 ` - Kotlin 显式捕获 IOException、拒绝无 scheme 相对路径,metadata 上限按 UTF-8 bytes 计算。AAR 坐标已准备为唯一 `13.4.1-step061`,不覆盖冻结 step060f;本轮按限制未 build/publish,待 RDC 后续指令。 - 本轮 `npm run typecheck`、RN Codegen(仅 `/tmp`)、plugin `node --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 Host `assembleDebug` 为 `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_MISMATCH` Warning 可见并保持 fail-closed。 +- Release AAR 的 `HOST_FIELD_SNAPSHOT_READY` / `HOST_FIELD_INITIAL_WINDOW_READY` INFO 日志本轮未在设备 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 保持一致。