docs: close STEP-060C Maven Local validation

This commit is contained in:
OpenAI Codex
2026-09-07 22:28:13 +08:00
parent 9e0666c7c2
commit 9a38271cee
6 changed files with 62 additions and 40 deletions

View File

@@ -19,4 +19,4 @@ Starting HEAD:`80f360be7849be3e63557c4e074ee3a0fc02e15f`,分支 `particle/ma
未执行 Android Gradle、AAR build/publish、Expo prebuild、APK/ADB/设备或 Jest。用户必须先在 Gate C 环境完成 current HEAD AAR build → Maven Local publication → clean prebuild → Test Host Android compile/install → Phase A/B/lifecycle 验收,之后才可进入 STEP-061。 未执行 Android Gradle、AAR build/publish、Expo prebuild、APK/ADB/设备或 Jest。用户必须先在 Gate C 环境完成 current HEAD AAR build → Maven Local publication → clean prebuild → Test Host Android compile/install → Phase A/B/lifecycle 验收,之后才可进入 STEP-061。
## STEP-060C 后续记录(2026-09-07) ## STEP-060C 后续记录(2026-09-07)
Gate C 已生成当前 custom OpenGL AAR,但精确 Maven Local publication 曾在 Vanniktech `signAllPublications()` 要求 signatory 时失败。该问题只属于 Maven Local handoff,并不要求重建已核对的 AAR。STEP-060C 将签名 required 条件隔离为 Maven Central task graph;Local 保持正式坐标并可在没有 PGP signatory 时发布,Central 正式路径仍要求签名。后续执行结果由 STEP-060C 人工验收记录确认。 Gate C 已生成当前 custom OpenGL AAR,但精确 Maven Local publication 曾在 Vanniktech `signAllPublications()` 要求 signatory 时失败。该问题只属于 Maven Local handoff,并不要求重建已核对的 AAR。STEP-060C 将签名 required 条件隔离为 Maven Central task graph;Local 保持正式坐标并可在没有 PGP signatory 时发布,Central 正式路径仍要求签名。2026-09-07 人工执行已通过(sign task `SKIPPED`、publication `BUILD SUCCESSFUL`);最终 Local/build-output AAR SHA 为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`。这只关闭 Maven Local handoff,不代表 RN Test Host Android 验收完成。

View File

@@ -11,20 +11,25 @@
- 因而 Maven Local 的 Sign task 可正常跳过,不读取 signatory;Central task graph 仍会执行且要求签名。 - 因而 Maven Local 的 Sign task 可正常跳过,不读取 signatory;Central task graph 仍会执行且要求签名。
- 未改变 AAR、artifactId、version、publication 名称、custom repository 来源或 RN bridge。 - 未改变 AAR、artifactId、version、publication 名称、custom repository 来源或 RN bridge。
## 当前 AAR 证据 ## 人工 Maven Local 验收(2026-09-07)
Gate C 已提供当前 OpenGL Release AAR: 用户在 Gate C 封存 Linux 环境实际执行:
- 路径:`platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar` ```bash
- mtime:`2026-09-07 21:26:46.463556571 +0800` cd /mnt/sda1/MapLibreParticleLab/platform/android
- size:`166262400` ./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain
- SHA-256:`47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7` ```
- `classes.jar` 已含 `org/maplibre/android/maps/MapLibreMap.class`、`org/maplibre/android/maps/WeatherRuntime.class`。
本 Step 只改 Maven publication signing 条件;上述已核对 AAR 不需重建。 - `:MapLibreAndroid:signOpenglreleasePublication SKIPPED`;未出现 `no configured signatory`。
- `:MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal` 完成,`BUILD SUCCESSFUL in 3m 33s`(57 actionable tasks:49 executed、8 up-to-date)。
- Maven Local 已有 AAR、POM、module metadata,坐标为 `org.maplibre.gl:android-sdk-opengl:13.4.1`;没有 `.asc`,符合 Local publication 不签名的设计。
- 发布 AAR 与 `platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar` SHA-256 一致,均为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`。
- AAR `classes.jar` 含 `org/maplibre/android/maps/MapLibreMap.class`、`org/maplibre/android/maps/WeatherRuntime.class`,并含 `arm64-v8a`、`armeabi-v7a`、`x86`、`x86_64` 四 ABI。
`47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7` 是 publication 前曾核对的中间 AAR SHA;publication 重新执行 `bundleOpenglReleaseAar` 后已由上述最终 SHA 取代,不得再作为当前 Maven Local artifact 引用。
## 验证与状态 ## 验证与状态
- 已作静态 API/源码审计以及 `git diff --check`;未运行 Gradle、AAR build、Maven publish、APK、ADB、prebuild 或 Jest。 - 已完成:Maven Local signing isolation、Local publication、AAR/POM/module 存在与坐标核对、build output 与 Local AAR SHA 一致、两项 Host class 与四 ABI 核对。
- 用户仍须在 Gate C 环境执行精确 Maven Local task,核对 Local 坐标目录中的 AAR SHA-256、POM 与 module metadata,并确认无 signatory 错误。 - 未完成:RN Test Host Android compile/install、STEP-060 Phase A/B、style reload/map remount/stale reactTag/detach lifecycle、Binary Field 与 STEP-061;这些均不属于本 Step 的 PASS 范围。
- 状态:`IMPLEMENTED / WAITING_USER_MAVEN_LOCAL_PUBLICATION_VALIDATION`,尚未进入 Android 综合验收或 STEP-061。 - 状态:`CLOSED / PASS`(仅限上述 Maven Local signing isolation 与 publication 验收)。

View File

@@ -4,14 +4,13 @@
1. 确认当前为 `particle/main`,并记录 `git rev-parse HEAD`。Gate C 封存 Linux 环境是 custom MapLibre Native AAR 的构建环境;不要为 Test Host 生成工程的版本修改它。 1. 确认当前为 `particle/main`,并记录 `git rev-parse HEAD`。Gate C 封存 Linux 环境是 custom MapLibre Native AAR 的构建环境;不要为 Test Host 生成工程的版本修改它。
2. 移走或清理 `~/.m2/repository/org/maplibre/gl/android-sdk-opengl/13.4.1/` 的旧 artifact,避免同坐标 provenance 混淆。2026-08-29 旧 AAR 的 SHA-256 是 `5c67d2751fafe211a0df4b82deded09ab1c07cf6ca0f4a12a880283287f85e5c`,只能作为 Gate C 历史证据。 2. 移走或清理 `~/.m2/repository/org/maplibre/gl/android-sdk-opengl/13.4.1/` 的旧 artifact,避免同坐标 provenance 混淆。2026-08-29 旧 AAR 的 SHA-256 是 `5c67d2751fafe211a0df4b82deded09ab1c07cf6ca0f4a12a880283287f85e5c`,只能作为 Gate C 历史证据。
3. Gate C 已于 2026-09-07 为当前基线生成 OpenGL Release AAR;若下列 SHA-256 与 classes 核对通过,**不要为 STEP-060C 重新构建**:`platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar`,SHA-256 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`,其中必须有 `org/maplibre/android/maps/WeatherRuntime.class` 与 `MapLibreMap.class`。仅当 checkout 已改变或该核对失败时,才在 Gate C 封存 Linux 环境执行 `cd platform/android && RENDERER=opengl BUILDTYPE=Release make apackage`。 3. STEP-060C Maven Local 已于 2026-09-07 人工验收通过:`signOpenglreleasePublication SKIPPED`,精确 publication task `BUILD SUCCESSFUL in 3m 33s`,没有 `no configured signatory`。Maven Local 的 `org/maplibre/gl/android-sdk-opengl/13.4.1/` 已含 AAR、POM、module metadata,且没有 `.asc`;Maven Central 正式 publication 仍要求签名。
4. 使用源码定义的精确 publication task 发布:`cd platform/android && ./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain`。STEP-060C 使 Maven Local 的 sign task 在无 signatory 时跳过;不得使用 `-x sign`、不得改坐标或创建 SNAPSHOT。Maven Central 正式 publication 仍要求签名。 4. 当前已发布 AAR 与 build output AAR SHA-256 均为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`,并含 `WeatherRuntime.class`、`MapLibreMap.class` 与四 ABI。`47646fb…` 仅是 publication 前中间 AAR SHA,不是当前 artifact。后续只有 checkout 或 AAR 变化时,才在 Gate C 重新 build/publish 并重新核对 provenance。
5. 核对 Maven Local 出现 `org/maplibre/gl/android-sdk-opengl/13.4.1/`,其中 AAR SHA-256 仍为上述当前 Gate C 值,并同时有 POM 与 module metadata;它们必须来自当前构建,不能是 2026-08-29 的旧 AAR。 5. `cd integration/react-native/MapLibreParticleRNTestHost && npm ci && npx expo prebuild --platform android --clean`。`package-lock.json` 已在无 `--legacy-peer-deps` 的 npm 安装下通过;不要改用 Yarn 或生成 `yarn.lock`。本次 plugin 变更后必须 clean prebuild。
6. `cd integration/react-native/MapLibreParticleRNTestHost && npm ci && npx expo prebuild --platform android --clean`。`package-lock.json` 已在无 `--legacy-peer-deps` 的 npm 安装下通过;不要改用 Yarn 或生成 `yarn.lock`。本次 plugin 变更后必须 clean prebuild。 6. 检查生成 root Gradle 有 `MapLibreParticleRNTestHost custom OpenGL SDK`、`nativeVersion=13.4.1`、`nativeVariant=opengl`;Maven Central 必须排除精确 custom module `org.maplibre.gl:android-sdk-opengl`,使该 AAR 缺失时失败而非 fallback。MLRN 的 turf/annotation/scalebar 不是 custom SDK,不应被这个模块级排除误伤。
7. 检查生成 root Gradle 有 `MapLibreParticleRNTestHost custom OpenGL SDK`、`nativeVersion=13.4.1`、`nativeVariant=opengl`;Maven Central 必须排除精确 custom module `org.maplibre.gl:android-sdk-opengl`,使该 AAR 缺失时失败而非 fallback。MLRN 的 turf/annotation/scalebar 不是 custom SDK,不应被这个模块级排除误伤。 7. 首次 prebuild 后实际记录 Test Host 的 Gradle wrapper、AGP、Kotlin plugin、min/compile/targetSdk、NDK、JDK、Hermes 与 New Architecture。当前观察到的 `9.3.1/8.12.0/2.1.20/24/36/36/27.1.12297006` 属于 Test Host 生成工程,不等于 Gate C 环境。
8. 首次 prebuild 后实际记录 Test Host 的 Gradle wrapper、AGP、Kotlin plugin、min/compile/targetSdk、NDK、JDK、Hermes 与 New Architecture。当前观察到的 `9.3.1/8.12.0/2.1.20/24/36/36/27.1.12297006` 属于 Test Host 生成工程,不等于 Gate C 环境。 8. 再按实际生成工程编译/安装 Test Host。启动后确认单一地图正常加载;style ready 后应显示 reactTag 和 `WAITING_FOR_FIELDS`,不提交 field 时粒子/色场为空是预期。
9. 再按实际生成工程编译/安装 Test Host。启动后确认单一地图正常加载;style ready 后应显示 reactTag 和 `WAITING_FOR_FIELDS`,不提交 field 时粒子/色场为空是预期。 9. 对同一 reactTag 依次验证 Phase A:getState、enable、WeatherColor visible、particle visible、FPS 30 均得到结构化 Native result。
10. 对同一 reactTag 依次验证 Phase A:getState、enable、WeatherColor visible、particle visible、FPS 30 均得到结构化 Native result。 10. 验证 Phase B:PLAY/PAUSE、HALF/NORMAL/DOUBLE、epoch-ms seek、stops、独立 particle/trail RGBA、count/line/length/opacity/fade/WeatherColor opacity。不得出现 JS `PLAYING/PAUSED` 第二状态机。
11. 验证 Phase B:PLAY/PAUSE、HALF/NORMAL/DOUBLE、epoch-ms seek、stops、独立 particle/trail RGBA、count/line/length/opacity/fade/WeatherColor opacity。不得出现 JS `PLAYING/PAUSED` 第二状态机。 11. 重载 style:旧 Runtime 必须 disposed;style ready attach 的新 Runtime 正常工作。remount Map 后,用旧 reactTag 调用必须返回 `MAP_VIEW_NOT_FOUND`,不得命中新 Map。
12. 重载 style:旧 Runtime 必须 disposed;style ready attach 的新 Runtime 正常工作。remount Map 后,用旧 reactTag 调用必须返回 `MAP_VIEW_NOT_FOUND`,不得命中新 Map。 12. 卸载 Host:确认 view detach dispose;无持续 Handler wake、无全局 current map。通过上述 Android 验收后才进入 STEP-061;此前不要尝试 number[]、JSON/base64 大 field。
13. 卸载 Host:确认 view detach dispose;无持续 Handler wake、无全局 current map。通过上述 Android 验收后才进入 STEP-061;此前不要尝试 number[]、JSON/base64 大 field。

View File

@@ -2,7 +2,7 @@
## 结论 ## 结论
已完成源码层的 Maven Local 签名隔离,状态为 `IMPLEMENTED / WAITING_USER_MAVEN_LOCAL_PUBLICATION_VALIDATION`。本报告不宣称 Maven Local publication 已由 Codex 实际运行或 Android 验收通过。 STEP-060C 已为 `CLOSED / PASS`:用户于 2026-09-07 在 Gate C 封存 Linux 环境完成 Maven Local publication,Local 签名隔离按设计生效。本 PASS 仅覆盖 Maven Local signing isolation、发布与 artifact provenance;不代表 RN Test Host Android compile、STEP-060 Phase A/B、lifecycle、Binary Field 或 STEP-061 通过。
## 实际修改 ## 实际修改
@@ -30,28 +30,40 @@
| Central 签名 | `*PublicationToMavenCentralRepository` task graph 中仍 required | | Central 签名 | `*PublicationToMavenCentralRepository` task graph 中仍 required |
| AAR 来源 | Gate C 已验证的 custom OpenGL AAR;无 flatDir、files repo、第二仓库或 SNAPSHOT | | AAR 来源 | Gate C 已验证的 custom OpenGL AAR;无 flatDir、files repo、第二仓库或 SNAPSHOT |
## 已执行验证 ## 人工 Maven Local 验收(2026-09-07)
- 静态读取 Vanniktech `gradle-maven-publish-plugin:0.34.0`:`signAllPublications()` 对 release 设置 `SigningExtension.required`;Gradle SigningExtension 的 `setRequired(Object)` 支持 deferred Provider,并在 Sign task 执行时解析。 用户执行:
- 静态审计 publication 名称、artifactId、version 与 Central task 名称约束。
- `git diff --check`(结果见提交前最终核验)。
## 未执行项目
按任务限制,未执行 Android Gradle、AAR build、Maven Local publish、Expo prebuild、APK、ADB、Android 设备/虚拟机测试或 Jest。
## 已知剩余风险与人工验收
唯一关键剩余验证是用户在 Gate C 封存 Linux 环境实际运行:
```bash ```bash
cd /mnt/sda1/MapLibreParticleLab/platform/android cd /mnt/sda1/MapLibreParticleLab/platform/android
./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain ./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain
``` ```
随后确认 `~/.m2/repository/org/maplibre/gl/android-sdk-opengl/13.4.1/` 存在 AAR、POM、module metadata,AAR SHA-256 为 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`,且输出没有 signatory failure。仅在此通过后,才继续 RN Test Host 的 clean prebuild 与 Android 综合验收。 - 已完成:`:MapLibreAndroid:signOpenglreleasePublication SKIPPED`;`:MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal` 通过;`BUILD SUCCESSFUL in 3m 33s`(57 actionable tasks:49 executed、8 up-to-date);输出不含 `no configured signatory`。
- 已完成:`~/.m2/repository/org/maplibre/gl/android-sdk-opengl/13.4.1/` 含 AAR、POM、module metadata;POM/module 坐标为 `org.maplibre.gl:android-sdk-opengl:13.4.1`。
- 已完成:Maven Local AAR 与 `platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar` SHA-256 同为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`。
- 已完成:AAR `classes.jar` 有 `org/maplibre/android/maps/MapLibreMap.class`、`org/maplibre/android/maps/WeatherRuntime.class`;AAR 有 `arm64-v8a`、`armeabi-v7a`、`x86`、`x86_64` 四 ABI;Maven Local 不含 `.asc`,符合 Local publication 不签名的设计。
- 历史说明:`47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7` 为 publication 前中间 AAR SHA;Gradle 重新执行 `bundleOpenglReleaseAar` 后,它不是当前 published artifact。
## Codex 静态核验
- 静态读取 Vanniktech `gradle-maven-publish-plugin:0.34.0`:`signAllPublications()` 对 release 设置 `SigningExtension.required`;Gradle SigningExtension 的 `setRequired(Object)` 支持 deferred Provider,并在 Sign task 执行时解析。
- 静态审计 publication 名称、artifactId、version 与 Central task 名称约束。
- 只读核对 Local/build output AAR SHA、POM/module 坐标、classes、ABI 与 `.asc` 缺失;`git diff --check` 将在本次 docs-only commit 前再次执行。
## 未执行 / 无法验证
- 未执行:本轮 Codex 未运行 Android Gradle、AAR build、Maven publish、Expo prebuild、APK、ADB、Android 设备/虚拟机测试或 Jest;publication 结果为用户提供的人工实测证据。
- 未完成:RN Test Host `npm ci`、clean Expo prebuild、generated Gradle resolution、Android compile/install、STEP-060 Phase A/B、style reload/map remount/stale reactTag/detach lifecycle;任务明确留给下一轮 STEP-060 Android 人工验收。
- 无法验证:本轮没有设备/模拟器与 RN 生成工程执行授权,故不对上述 Android/RN 结果作 PASS 推断。
## 已知剩余风险与下一步
下一阶段仍是 STEP-060 RN Test Host Android 验收:`npm ci`、clean Expo prebuild、检查 generated Gradle 的 Maven Local/custom SDK resolution、用户手工 Android compile/install、Phase A/B 与 lifecycle 验收。通过后才可进入 STEP-061。
## 提交与推送 ## 提交与推送
- 功能提交:`5f0804e8ba3a8a6fed1fff09ddd92a76a77bd458` — `fix: isolate Maven Local from release signing` - 功能提交:`5f0804e8ba3a8a6fed1fff09ddd92a76a77bd458` — `fix: isolate Maven Local from release signing`
- 文档提交、最终 HEAD 与远端结果将在本报告提交后补充。 - 初始文档提交:`9e0666c7c284d5080ebd2e711f46928f788ddcec` — `docs: record STEP-060C local publish signing fix`
- 本次人工验收文档收尾 Starting HEAD:`9e0666c7c284d5080ebd2e711f46928f788ddcec`。
- 本次 docs-only commit SHA/message、Final HEAD、Remote HEAD 与 push 结果将在收尾 commit 生成后,以最终回填为准。

View File

@@ -25,7 +25,7 @@ npx expo prebuild --platform android --clean
npx expo run:android npx expo run:android
``` ```
上述 Android 命令必须在 Gate C 封存 Linux 环境由用户手工执行;本 Step 的 Codex 没有执行。当前 Gate C AAR 的 SHA-256 是 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`,含 `WeatherRuntime`/`MapLibreMap` classes;只修改 Maven publication 签名隔离的 STEP-060C 不要求重建它。先移走 Maven Local 的旧同版本 artifact,再发布并核对该 SHA-256、POM 与 module metadata。Maven Local 无 signatory 时 sign task 应跳过;不得以 `-x sign` 绕过签名,Maven Central 正式 publication 仍要求签名。2026-08-29 的旧 AAR(SHA-256 `5c67…f85e5c`)只可作 Gate C 历史证据,不能用于 STEP-060。 上述 Android 命令必须在 Gate C 封存 Linux 环境由用户手工执行;本 Step 的 Codex 没有执行。STEP-060C 的 Maven Local publication 已于 2026-09-07 人工通过:`signOpenglreleasePublication SKIPPED`,没有 `no configured signatory`,发布 AAR、POM、module metadata 均存在,且没有 `.asc`。当前 Gate C build output 与 Maven Local AAR 的共同 SHA-256 是 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`,含 `WeatherRuntime`/`MapLibreMap` classes 和四 ABI。`47646fb…` 只是 publication 前中间 AAR SHA,不再是当前 artifact。后续只有 checkout 或 AAR 变化时,才重新 build/publish 并核对 provenance;不得以 `-x sign` 绕过签名,Maven Central 正式 publication 仍要求签名。2026-08-29 的旧 AAR(SHA-256 `5c67…f85e5c`)只可作 Gate C 历史证据,不能用于 STEP-060。
## Bridge 与生命周期 ## Bridge 与生命周期

View File

@@ -519,4 +519,10 @@ WeatherColorLayer 的 `ParticleGpuValidationUBO` designated initializer 补齐 `
- Vanniktech `signAllPublications()` 仍负责建立 Maven Central 的 publication 签名;其默认 release required 条件覆盖 Maven Local,导致无 signatory 时 Local handoff 失败。 - 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 或第二仓库。 - publication build logic 现将 Gradle `SigningExtension.required` 延迟绑定到 task graph:存在 `*PublicationToMavenCentralRepository` 时必须签名;精确 Maven Local publication 则跳过 Sign task,不需要 PGP secrets、`-x sign`、SNAPSHOT 或第二仓库。
- 当前 Gate C AAR 已核对 SHA-256 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`;本轮未重建、未执行 Gradle publish。状态为 `IMPLEMENTED / WAITING_USER_MAVEN_LOCAL_PUBLICATION_VALIDATION`。 - 实现阶段曾核对中间 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 仍未验证。