9.2 KiB
STEP-119 原PBF FAST实机联合验收计划 v1
日期:2026-10-11(JST)。执行者:RDC/用户,Codex本轮仅交源码和命令。状态:NOT RUN;没有新的Native、Android、Metal或视觉PASS。
1. 先独立审计,再锁定源码
读取AGENTS、STEP119任务、调查、Step、完成报告及实际diff,检查原Style/API/ABI/24Gate/SourceRevisionBook、原STEP117/118证据与两个保护任务书。重点核对:普通Full不清结果证据、证书在upload之后采集、成功present之后完成、Build不能借Reuse自举、Reuse成功后才Fast、所有缺证/变更/错误仍拒绝。
此工作区尚有本轮未提交源码。现有verify_step113_fast_path.py严格要求tracked clean与APK来源HEAD一致,会报SOURCE_NOT_LOCKED;本轮保留该保护,不能添加dirty bypass、借旧APK或只提交报告来通过预检。源码锁定由RDC按其阶段明确授权scoped处理;Codex没有commit/push。任何Git收尾不得包含STEP110/111、无关dirty或旧ignored artifacts;若push已获授权,必须回读远端HEAD。
如果仍无法审计实际GPU输入覆盖、shader provenance、提交/恢复或异步线程边界,保持BLOCKED,不进入APK周期。
2. Native定向验证(仅交RDC执行)
在本轮最终锁定源码上,逐条执行;任一步失败立即停止后续命令并保存首个真实error、target、exit、耗时、完整日志路径。旧Mac缺libuv是历史环境证据,本轮未重试/未安装依赖,不能推断当前结果。
cd /Users/tei/dev/MapLibreParticleLab
cmake --preset macos-metal
cmake --build build-macos-metal --target mbgl-test-runner --parallel 3
build-macos-metal/mbgl-test-runner --gtest_filter='Step119SymbolResults.*' --gtest_list_tests
build-macos-metal/mbgl-test-runner --gtest_filter='Step119SymbolResults.*:Step117Safety.*:Step116Safety.*:Step114FastPathSafety.*:Annotations.*:CrossTileSymbolLayerIndex.*:RenderOrchestratorError.*:RenderOrchestratorTeardown.*:RetainedUnderlayCache.*:RetainedUnderlayRevision.*:FastGateTrace.*:ParticleFastPath.*:RenderSegmentPlacementFree.*:RenderSegmentLocality.*:RenderSegmentPlan.*:RenderSegmentDiagnostics.*' --gtest_color=no
必须发现并运行13个新增Step119SymbolResults;不得用零匹配/旧runner/仅fsyntax-only称GTest PASS。renderer=Metal、target=mbgl-test-runner、并行3;Host Native测试不能替代iOS真机或Android OpenGL。本轮没有Jest,没有Bazel/codegen授权。
RDC还须按已有Android OpenGL/x86_64真实compile_commands.json独立核查修改的Core/GL及两个测试文件,保持-Werror,不附加-Wno-error;语法结果单独记录。Metal context/provenance/UBO consolidation和原生source组合须编译实际路径,不能靠宏关闭绕过。
3. 一次集中APK build/install与严格来源闭环
独立审计及源码锁通过后,由RDC/用户按本阶段授权执行一次标准流水线;任何失败不得安装旧文件,不重复启动并发构建。本轮不是正式发行,不改VERSION/Source Lock/公开坐标。
cd /Users/tei/dev/MapLibreParticleLab
./tools/particle_android_validation/build_validation_apk.sh
adb -s 192.168.200.139:5555 install -r artifacts/maplibre-particle/android-validation/MapLibreAndroidTestApp-validation-opengl-debug-x86_64.apk
python3 -B tools/particle_android_validation/verify_step113_fast_path.py --serial 192.168.200.139:5555 --preflight-only
python3 -B tools/particle_android_validation/verify_step113_fast_path.py --serial 192.168.200.139:5555 --scenario STATIC_RC_NO_TIDE --seconds 90
固定FZG1-2、x86_64、OpenGL Debug、Java17。ADB每条显式-s,包括人工补采样命令。流水线记录build-info、branch/HEAD/dirty、完整build.log、APK大小/ZIP/ABI/strip及SHA;设备base.apk SHA必须与本次本地APK相同。版本号仍.23不足以判定新源码,旧3051196054/44afcfabe… APK不得冒充本轮。
原STEP118 result.json与screen.png只读保留,不覆盖、移动或加入Git。现有verifier固定生成新的step113-retest-/目录(Git忽略);保留此真实输出路径,在RDC交付报告标记为STEP119本轮证据,不改脚本或覆盖旧目录。
4. 静止真实PBF正向验收
| 项目 | 必须取得的真实结果 |
|---|---|
| 原始资源 | 相同正式PBF/Sprite/Glyph/Tile URI,不修改服务器或造tide;manifest保留原63基础层 |
| 派生场景 | STATIC_RC_NO_TIDE,唯一排除tide-spots/tide;有效基础62+天气2,Native64,R[0,62)、C[62,64),missingSourceIds=[] |
| 启动/settle | 正常Full完成原生Placement/vertices/opacity/atlas/UBO;fade未完成拒绝;不得预置Cache有效 |
| 首次Build | R真实Build>0,texture/composite创建与Build后的static/build revision匹配,placementGatePassed=true,截图仍包含其余Symbol |
| Reuse | R真实Reuse>0;成功Full Reuse先于Fast完成,不能只在状态机测试手工mark |
| Fast | PID确认之后持续观察>=90秒,FastDelta>0;FullDelta、真实窗口和生命周期分别记录,不把生命周期累计当区间增量 |
| 24Gate | 完整120帧knownMask=0xffffff,decisionMismatch=0;candidate帧24项全部通过、completed fast-rendered;失败帧保留全部失败位 |
| 像素/层序 | 同相机和资源对照强制Full与开启retained后的截图;用户核对航标/文字/图标/重叠/方向/沿线/variable anchors及WeatherColor/Particle层序,无缺失或ghost |
自动验证器已有真实Build/Reuse/Fast检查,不改判据;完整120帧通过现有EXPORT LAST SNAPSHOT取得。保存场景开始、Build后、Reuse后及Fast稳定的快照/日志,pre是上一完成树、post是当前完成树,不能跨帧拼接条件。没有图像证据时即使计数增长仍为PARTIAL。
5. 原63层负对照与变更矩阵
在同一个新APK中运行原STATIC_RC至少90秒,原63基础层+天气2保持;missingSourceIds=[tide]、missing-source、R不Build、不Reuse、不Fast。这是缺源负对照,不是需要被此次证书放行的正向目标。PBF63/PARTICLE_OFF/PARTIAL_RCRR/SOURCE_CHANGE原入口与定义保留,不能用STEP114烟测替代。
每项动作保存操作前、动作提交时和稳定后证据;至少保留一次真实失效后的Full与新Build/Reuse。500ms之后的摘要不足以证明瞬态,必要时现有完整环形快照与平台trace补证。
| 负例 | 安全预期与证据 |
|---|---|
| Source数据/同名Source替换/恢复 | Native source/global revision与lastMutation变化;旧证书失配、Full先执行;不能复用同名旧GPU结果 |
| Style布局/paint/显隐/层序、glyphURL/fontFaces | signature或结果/segment revision变化;真实颜色/透明度/位置正确;恢复仍重新取证 |
| pan/zoom/rotate/pitch、手势/动画 | #7/#8或动态保护失效,旧camera结果不composite;停稳重新Build,Symbol没有跳位/碰撞残影 |
| viewport/pixelRatio | #6/#8及新binding,缓存按新尺寸重建,没有拉伸或旧FBO |
| Glyph/Icon/Atlas延迟加载与替换 | requested/error/loaded/image epoch实际更新;opacity/vertex/atlas已上传才取证,旧纹理不可凭指针复用 |
| text/icon fade、variable anchor/方向/沿线 | fade过程中拒绝,settled不靠fade==0;新顶点/UBO或排序改变时旧证书无效 |
| tile边界/world wrap/crossTile碰撞/跨Source | 正常全场Placement不拆段,异步tile epoch和最终多段结果对应;碰撞受影响的另一R也正确重建 |
| 跨段LayerGroup添加/移除/隐藏Symbol | pending先拒绝;processChanges后全局数量/ordinal/深度和注册关系更新,不能使用旧上方R |
| 真实Annotation添加/更新/删除 | #24或Source/update输入失效,先Full;原SDK helper恢复正确、没有遗漏Annotation。执行既有Annotations.Step116图像测试 |
| context丢失/后台恢复、缓存关闭再开、Style clear/reload | GPU资源与prepared结果重置,旧证书不能跨代;退出没有旧Drawables/资源悬挂 |
| shader替换/未知placement-capable类型/不可读或超限输入 | strict拒绝证书,普通Full继续;不能用相同shader名或空数据取得证明 |
| 上传/绘制/提交错误 | error/content revision变化,失败Full不记已完成证明,保存失败现场 |
设备缺少某个可控入口时写NOT VERIFIED并给出具体限制,不新增业务数据、不修改正式Style或公开接口。完整测试源码的predicate/模拟buffer只验证局部不变量,不能替代这张设备矩阵。
6. 结果判定、修复闭环与交付证据
实现审计、Native构建、GTest、APK自验、来源/设备SHA、90秒正向、原63负对照、各负例、视觉、Metal/iOS分别记录。全部必需项实际通过之前不写全任务PASS。
FastDelta=0、Build=0、Reuse=0、24Gate mismatch非零或可见Symbol异常:保存新的result.json、完整120帧、screenshots、crash log、source HEAD/APK与设备SHA,报告FAIL/PARTIAL/BLOCKED,不降低阈值。最多5轮当前阶段明确修复;编译/测试首次真error保留,架构或公共协议问题交Integration,不能跳下一阶段或改Contract。
RDC回传必要信息:命令、exit、耗时、首错/target及日志路径、实际用例数量、正负场景Layer/Source/R/C清单、Build/Reuse/Full/Fast增量、24Gate window、frame输入来源、视觉判定与未验项目。本计划命令全部尚未由Codex运行。