# STEP-040 Android 离线 Fixture 正式粒子最小闭环 v1 ## 状态 进行中。40-01 Stage A 的代码和 Linux 静态验证完成;最终 Android 状态固定为 `WAITING_MANUAL_VALIDATION`,尚未进入手工 APK 验收。 ## 目标与基线 - 目标:建立 `RasterArraySource -> RenderRasterArraySource -> RasterParticleLayer -> RenderRasterParticleLayer` 的第一条正式离线粒子闭环,并修复 STATIC recreation 的零步 bootstrap。 - 基线:`343cecc778c3ffaa00adf94f82d7ad5f494a3877`,分支 `particle/main`。 - 前置:30-01、30-02、30-03 均为 PASS;EGL context recreation 的独立实机证据仍是已接受风险。 ## 必做项 - [x] `RasterArraySource` 以 FileSource byte boundary 读取 fixture metadata 与 field,生成 immutable `ParticleFieldSnapshot`。 - [x] `RenderRasterArraySource`、`RasterParticleLayer`(`Source::Required`)和 `RenderRasterParticleLayer` 进入 Style/RenderTree 链。 - [x] 正式 RenderLayer 复用既有 GPU field、State A/B、Trail A/B、mask、camera/world-wrap/antimeridian 与 resource lifecycle;没有第二套 simulation。 - [x] Android Test App 从 APK `asset://integration/particle-fixtures/...` 提供正式 source 输入;Linux smoke helper 仍可读取仓库 fixture。 - [x] NoData cell 作为 GPU field texture alpha=0 上传;shader 遇到 invalid sample 确定性回到 seed position,不把 NoData 当速度。 - [x] STATIC recreation 仍走 zero-step State/Trail/bootstrap composite,commit 不增加 `simulationFrame`。 - [ ] Android OpenGL APK 手工编译与 T1-T12:仅 GPT 复审远端代码通过后由用户执行。 ## 允许修改 隔离 particle field/source/layer/render source/render layer、最小 LayerManager/Style Source/shader 注册、Android Test App fixture assets 与本 Step 文档。 ## 禁止修改 不得运行 Gradle、安装 APK、ADB/T1-T12;不得新增 Overlay、Android UI/Core 耦合、在线数据、第二套 GPU simulation,或声称 Android/Vulkan/iOS PASS。 ## 构建与检查 - Linux OpenGL 受影响 Core 精确对象编译:PASS。 - `clang-format --dry-run --Werror`、`git diff --check`、fixture generator:待本轮最终收尾复跑。 - adapter smoke:`uniform-east`、`uniform-north`、`vortex` 均 valid;`nodata` valid 且有 1 个 invalid cell。 ## 当前结果、阻塞与下一步 正式 Source/Layer/RenderLayer 已不依赖 source-less `particle-validation` Layer;历史 validation Layer 只保留为既有验证工具。唯一阻塞是按用户指令等待 GPT 复审新远端 commit;复审通过后才允许用户开始 Android OpenGL APK 手工验收。