Files
MapLibreParticleLab/docs/50_Step记录/STEP-113_FZG1_PBF_Layer与FastGate诊断_v1.md
tei b02e54de3d
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
docs: record STEP-113 full-frame source mutation validation
2026-10-11 09:24:08 +09:00

14 KiB
Raw Blame History

STEP-113 FZG1 PBF Layer 与 Fast Gate 诊断 v1

日期:2026-10-11(JST)。状态:进行中;源码交付PARTIAL,等待RDC独立编译/设备验收,113层完整等价缺证据。

目标、基线与边界

优先B:每次真实Fast尝试可靠保存24 Gate、首错及失败全集;再交付真PBF专项场景、低频UI和机器可读导出。

  • Mac particle/main@c6d13e1059d464d312ac33acac87967300fa5dc4,仓库 /Users/tei/dev/MapLibreParticleLab。
  • 已实际核实模型 gpt-6.1-sol/high;NavSea只读 ad9aa043,Integration本地 80667d6c。
  • 当前源码版本 13.6.1-particle.23 未改;本次修改未发行。
  • 只修改Shared Core诊断、Android Test App、相关C++测试源码、本Step/报告及开发记录追加。禁止改变Gate/Placement/Fade/Cache安全判定、公开RN方法、NavSea/Integration、构建基线、正式发行或Git提交推送。
  • 既有STEP-110/111/113未跟踪任务书原样保留,无branch/worktree变更。

必做项与当前结果

  • 同一次已计算input保存24项状态掩码与生产首错,一致性计数明确,不重复副作用函数。
  • 120帧有界环形数据、生命周期及窗口聚合,所有Gate记录;pre/post明确分离。
  • per-R实际pre cache validity/revision和两phase的cache build/reuse/invalidation/fallback/原因/执行状态;每phase最多16R,超限显式。
  • 使用现有Native JSON出口追加可选fastGateTrace;共享锁快照,UI不访问Renderer mutable state。
  • 明确reset位置;普通Full miss不清历史。新增4个C++回归用例,尚未运行。
  • 正式URL专项PBF63/STATIC_RC/PARTICLE_OFF/PARTIAL_RCRR/SOURCE_CHANGE场景源码;保留原场景和STEP-102动态fixture。
  • 运行时原63层完整定义/顺序保存检查,真实Sprite/Glyph/Tile URI检查、Style fingerprint/版本/Layer表/plan接受及最终解析原因导出。
  • 固定camera/forecast请求、30fps目标;禁用手势;静态轮询不改Symbol/Source/forecast。
  • UI每3秒单次query、30秒摘要、手动最近snapshot导出;Logcat标签STEP113Gate,Base64分块防截断。
  • 中文完成报告、精确RDC命令、开发记录末尾追加与静态范围检查。
  • 113层全量生产Layer/Source/显隐/业务数据与现场四段数字边界:缺同版本完整快照,未复制。
  • Native/Kotlin编译、定向测试、APK、FZG1-2资源/层/逐帧/性能/开销验收:本轮Codex未执行。

证据等级与剩余风险

SOURCE-PROVEN:NavSea URL配置、当前源码RC选择器、shared天气片段ID/type/source。TEST-APP-STRUCTURAL:保序63层和部分RCRR检查代码、额外Source探针、既有canonical风场。DEVICE-MEASURED:本轮无结果。NOT-VERIFIED:正式服务回读(本机域名无法解析)、设备实际Layer表/113层全等价、构建与性能。

原始JSON63层不包含SDK可能追加的Annotation等内部层;必须使用实际Native styleLayers总数与Layer ID解析边界。部分RCRR锚点不同于现场[0,13)/[13,33)/[33,107)/[107,113),不能把结构测试说成同等画面。NavSea当前RenderSegmentHost源码RC与该历史现场RCRR_PREFIX分别记录。

pre里的changed/fade是上一完成RenderTree快照;当前Controller transition另存preFastPlacementTransition。Fast post不是新Placement结果。Debug simulationAdvance是进程级计数;实际forecast时间未新增Native回读接口,导出null并保存accepted请求。环形覆盖会丢弃最早详情但保留聚合;内存字节/CPU开销未实测。不能从零Fast提升或APK编译成功直接判性能PASS。

独立验收填写栏(由RDC追加真实结果)

项目 本轮状态 / RDC证据待填
源码diff/hash、分支/HEAD/dirty Codex交付未提交;RDC填写制品对应源码
设备serial/主ABI/ABI list 目标192.168.200.139:5555;未读取
Native配置/编译/4个新用例与相关回归 NOT RUN;填写命令/exit/耗时/日志/首错
APK build-info/ZIP/ABI/字节/SHA/签名/安装 NOT RUN;标准Validation脚本,禁止复用失败旧APK
PBF63完整资源、实际Layer manifest NOT VERIFIED;填写SDK回读fingerprint和原/实际层数
STATIC_RC首错/24Gate/window/mismatch NOT VERIFIED;mismatch必须0,保存120帧详情
PARTICLE_OFF/固定预报/camera NOT VERIFIED;保存对照窗口和请求接受结果
PARTIAL_RCRR实际四段/Layer ID/缓存状态 NOT VERIFIED;明确部分等价,不能补写113层PASS
SOURCE_CHANGE基线/单次变化/pre-post NOT VERIFIED;记录Source mutation和两次导出
reset/前后台/退出/旧STEP-102回归 NOT VERIFIED;不能以进程正常退出替代场景检查
内存/trace开销/CPU/FPS/截图/crash NOT VERIFIED;不能用单制品构建成功替代
完整113层及原始现场selector 缺证据;另需真实同版本快照

构建、检查与必做输出

Codex仅执行只读调查、文本一致性/范围检查、git diff --check与新增文件空白检查;无编译、C++运行、Jest、Gradle/APK、ADB、设备、发行或Git提交推送。

精确macOS Shell构建/ADB/场景/Logcat/私有JSON回读及Native定向命令见:docs/报告/STEP-113_FZG1_PBF_Layer与FastGate诊断_Codex完成报告_v1.md 第5节。Android ABI先匹配标准脚本x86_64,所有设备命令固定 -s 192.168.200.139:5555,由RDC执行。

交付源码/测试、本记录、上述完成报告、粒子开发记录追加已落盘。下一步仅由RDC独立验收;失败保留首个真实error及完整日志,再按本任务范围修复。不得借此放宽Fast/Placement/Cache安全判定或进入正式发行。

RDC 独立验收补记(2026-10-11,设备证据)

以下是 Codex 退出后 RDC 新执行的证据,不修改上文 Codex 未构建/未实测的历史结论。本次阶段判定:PARTIAL;Android 构建 PASS;五场景稳定基线采样 PASS;113 层等价与性能 NOT VERIFIED。

  • 环境:Mac、particle/main;构建源码基于 c6d13e1059 加 STEP-113 未提交改动,build-info 明确 git_dirty=true。此 APK 不是 Source Lock / 正式发行。
  • 标准 build_validation_apk.sh 于 2026-10-11 08:35:08 JST 退出码 0;Gradle BUILD SUCCESSFUL in 19m 22s;Java 17.0.20.1;OpenGL/x86_64;ZIP/ABI/体积/SHA 自检通过。
  • APK:artifacts/maplibre-particle/android-validation/MapLibreAndroidTestApp-validation-opengl-debug-x86_64.apk;66,587,454 bytes;libmaplibre.so 40,033,976 bytes;SHA-256 0054248bc3872e8670df4e9a10d11f1d65c0912a0482586cd7a247e880a6eaef。记录:同目录 build-info.txt、build.log。
  • 设备:FZG1-2,ADB 192.168.200.139:5555,主 ABI x86_64;明确 -s 的 adb install -r 返回 Success,未卸载数据;设备安装后版本 13.6.1-particle.23。正式 PBF Style 模式运行并加载。启动前数秒 sceneReady=true 但 Native Layer=0 / plan not-configured 是加载暂态;只接受之后的 Native Layers 非零、planValid=true 稳定记录。
  • 五个场景均由 ADB 明确 serial 启动;STEP113Gate Logcat Base64 summary 成功还原。每场景实际设备稳定状态的 decisionMismatch 都是 0。Full/Fast/Attempts 为生命周期累计,并非精确 60 秒窗口。
场景 Native Layers Attempts Full Fast Retained 及关键证据
PBF63 64(63+内部层) 106 106 0 R[0,64) Build0,unknown-dependency;无粒子持续驱动
STATIC_RC 66 876 875 0 R[0,63) Build0,unknown-dependency;unsupported-continuous-layer、unsupported-scene 各876
PARTICLE_OFF 66 70 70 0 no-particle-repaint=70;非相等时长性能对照
PARTIAL_RCRR 66 862 861 0 R0[0,3) unknown-dependency;R2[39,64) 与 R3[64,66) Build0/static-placement;两个 unsupported Gate 各862
SOURCE_CHANGE 67 888 888 0 基线已记录;没有执行菜单手动 Source mutation
  • STATIC_RC 同帧失败全集汇总 CacheInvalid=870、revision-mismatch=871、placement-or-fade=780;PARTIAL_RCRR CacheInvalid=856。这些失败条件可能在同一帧并存,不能累加为帧数。即使修复缓存 Build,也还有 #22/#23 与其它独立 Gate。
  • 设备摘要 JSON(不纳入 Git):artifacts/maplibre-particle/android-validation/step113/ 下的 pbf63-summary-ready.json、static-rc-summary.json、particle-off-summary.json、partial-rcrr-summary.json、source-change-baseline-summary.json。它们只是低频 summary,不是导出的完整 120 帧。
  • 仍 NOT VERIFIED:原 NavSea 113 层完整 Layer/Source/显隐及真实四段边界;实际 PBF/Sprite/Glyph 画面截图;Source 单次变更后前后对照;120帧手动详情导出;C++ GTest 运行;reset/后台、旧 STEP-102 场景回归;CPU/GPU/诊断开销;生产性能提升、正式发行。不得把部分结构等价当成现场复测或将 STEP-113 判为 CLOSED/PASS。
  • 下一阶段必须分别处理 retained first-build 的安全准入、unsupported continuous layer、unsupported scene;不能直接删除 Gate 放行。

RDC 第二轮设备验收(2026-10-11:完整窗口与Source变更)

本轮状态:设备逐帧诊断 PASS、单次Source变更链路 PASS,完整113层等价与生产优化仍 PARTIAL。 本记录追加在原有RDC基线结果之后,旧内容中的“未执行单次Source mutation/120帧导出”是第一轮结束时的历史状态,不代表第二轮。

  1. 在设备 FZG1-2、ADB 192.168.200.139:5555、版本 13.6.1-particle.23 上运行 SOURCE_CHANGE;通过屏幕中的 STEP 093 → STEP-113 → EXPORT LAST SNAPSHOT,使用明确serial的 adb exec-out run-as 回读 App 私有JSON;文件字节分别为变更前 277980、变更后约272KiB。精确位置:artifacts/maplibre-particle/android-validation/step113/source-change-before-full.json 和 source-change-after-full.json,均保留在 Mac 本机、未纳入Git。
  2. 变更前 trace:lifecycle 1,attempts 13859,capacity/windowCount 120,最新119个完成的Full帧、0 Fast帧、最后1帧为pending、decisionMismatch=0;变更后 trace:同lifecycle,attempts 17476,windowCount=120,同样119个已完成Full、0 Fast、decisionMismatch=0。相同frame中前置状态 pre 的 placementBasis 标为上一完成RenderTree,post 完成Full才使用当前Full tree;knownMask覆盖24条Gate。
  3. 在 SOURCE_CHANGE 场景操作一次 MUTATE PROBE SOURCE ONCE。Logcat解码的 source-command:mutation=1;变更后导出 commands.sourceMutationCount=1;Native lastMutation.sourceId=step113-source-probe,affectedSegmentIndices=[1],事件 TileMutation。变更前 lastMutation.sourceId=navsea_delivery,affectedSegmentIndices=[0]。累计 content-mutation Gate failure 从12变为14,但中间同时有正常瓦片更新,不得把全部增量单独归因为这一次probe。120帧环形窗口会覆盖发生瞬时变更时的精确帧,故本轮只确认命令/Native依赖定位,不声称捕获到单次Mutation帧的全部过渡时序。
  4. 从变更后120帧中统计119个 completed 样本:首错 cache-invalid=119/119;同一帧 Gate #3 cache-invalid=119、#4 revision-mismatch=119、#12 static-unstable=105、#13 placement-or-fade=105、#22 unsupported-continuous-layer=119、#23 unsupported-scene=119。24Gate shadow 对应生产首错持续吻合,decisionMismatch=0。该统计是窗口而非全应用时间的FPS度量。
  5. PBF同源核验:原始63层按SDK回读生产Style逐层定义保序、baseLayersPreserved=true;spec version=8,源Style名称 NavSea Delivery Full Semantic ExtentFix;productionFingerprintSha256=e0f9c2d1df38ae5d5953b561c52efe2f8590336de80b988e1d2935580d30b996(SDK回读序列化JSON,不是HTTP包字节)。SOURCE_CHANGE运行时67层,连续段[63,67)依次是 weather-color、raster-particle、测试circle、内建 org.maplibre.annotations.points symbol。STATIC_RC的连续段[63,66)同样包括内建annotation symbol。现有 continuousRangeSupportsParticleFastPath 要求其范围内每一层均支持 retained dynamic range;因此这些普通circle/symbol使Gate #22持续失败;这项结论为“源码判定+本机层清单”,未进行绕过Gate的运行实验。
  6. Gate #23 supportedScene 源码逻辑与 retainedSupported、fastContinuousSupported 及单C配置有关,#22与#23不是根因完全独立的两次失败;二者虽为不同Gate,却可能共享同一个不支持的C层根因。Retained R[0,63)仍持续 Build0、unknown-dependency;部分RCRR其它R也有static-placement。不能只消除C阻断就承诺Fast会成功。
  7. NavSea只读核对:当前src/map/particle/RenderSegmentHost.tsx 配置 R→C,从 rn-weather-color 开始;旧STEP-112的FZG1 113层RCRR_PREFIX属不同运行配置。同版本113个Layer的完整Source/ID/type/visibility/业务数据清单仍缺,不能把TEST-APP-STRUCTURAL的63/66/67层宣称为113层完整等价。FZG1-2存在debug NavSea安装,但本轮未启动/修改NavSea用户数据。
  8. Android设备截图已采集:artifacts/maplibre-particle/android-validation/step113/step113-source-change-screen.png(1920×1200),仅归档,未进行NavSea同版本逐像素比对。Mac Native GTest CMake配置尝试退出码1:缺少libuv(记录/tmp/particle-step113-macos-cmake.log);未安装依赖,未进入GTest构建与运行,不记PASS。
  9. 后续受保护顺序:先由跨项目负责人获取NavSea同版本113层完整只读snapshot及真实selector;然后在Test App精准构造Layer/Source/顺序并获取120帧一对一同条件比较;分别建立R Build准入、C范围支持、Scene聚合依赖的源码及像素等价证明;通过后才能在Shared Core按受控范围修改Gate逻辑。禁止在证据不足时关闭 fail-closed Gate。RDC未在本轮运行新Android编译、改变渲染逻辑或做正式发行。