feat: publish Kyushu multi-light S-52 release

This commit is contained in:
OpenAI Codex
2026-09-19 20:32:25 +08:00
parent 068efb1814
commit 3092ff20a3
3 changed files with 278 additions and 10 deletions

View File

@@ -0,0 +1,266 @@
# CM95 S-52 灯弧与多 LIGHTS 修复阶段报告 v2
日期:2026-09-19
## 1. 最终结论
本阶段已完成 LIGHTS05 灯弧缺失问题的两层修复:
1. Web/MapLibre 侧补齐 S-52 CA screen-space renderer;
2. Builder 保留同一物理航标关联的全部 LIGHTS presentation,不再只保留一条“最丰富”的 LIGHTS。
新版九州 Production Release 已完成全量生产、独立 Source→PBF presentation conservation audit、finalize、release-scoped style 编译、CA runtime capability audit 和真实浏览器 multi-sector 验证。
Data Release 最终状态:**PASS**。
Target Web debug 的完整 runtime portrayal capability 仍为 **FAIL**,原因是部分 runtime kind 仍为 PREVIEW_ONLY / NOT_IMPLEMENTED;该结果是正确的严格审计结论,不影响本次 Data Release。
## 2. 新版基线
Builder Contract:
`cm95pbf-builder/0.4.11-s52-multi-light-presentations`
关键提交:
- `8ac774dff12bf2f267a9b926551c960528e16be9` — preserve S-52 multi-light arcs
- `06dc10abd9b46d2a69c3a75cc2f8a74478ce632e` — enforce S-52 semantic conservation audits
- `068efb18141c0a1117925f3bab66c5e16f7cdd76` — scope S-52 conservation audit to production footprint
Production Plan ID:
`1c27f0a66f6bacf4484925a4cc3f24d94d50dfd3a9c608fc34f817421b13e94b`
Release ID:
`cm95-d1-62a85bd40d3a-1c27f0a66f6b`
## 3. Production 最终结果
- planned tile jobs:5065
- PASS:5065
- FAILED:0
- PBF files:5064
- explicit empty tile:1
- reports:5065
- planned output features:476121
- decoded PBF features:476121
- tile footprint contract:PASS
- S-52 resource contract:PASS
- defined resources:1107
- active resources:977
- S-52 runtime data contract:PASS
- release failures:[]
`semantic_completeness` 仍为 `PENDING_REVIEW`:
- pending semantic variants:112
- pending semantic feature rows:52828
该 backlog 与本次 LIGHTS / CA 数据守恒修复是不同维度。
## 4. Multi-LIGHTS 数据守恒
Final release 内部的 tile-occurrence 对账:
- report multi-light groups:357
- PBF multi-light groups:357
- report light presentation records:745
- PBF light presentation records:745
- failure count:0
这里的 357 / 745 是“跨 tile occurrence”计数,同一个稳定 Feature 可在多个 tile 中出现。
独立 Source→PBF 审计按稳定 Feature ID 去重后的结果:
- expected multi-light groups:187
- actual multi-light groups:187
- expected presentation records:390
- actual presentation records:390
- missing groups:0
- unexpected groups:0
- presentation signature mismatch:0
- tile occurrence presentation drift:0
- tile occurrence scope mismatch:0
- Source resolution failures:0
- PBF parse failures:0
Presentation Conservation:**PASS**。
正式 artifact:
`build/audits/cm95_s52_kyushu_v3_presentation_conservation.json`
SHA-256:
`34faff2314996e2daaceb57e7ad3411c5d8ab5e46fa48a874fdd7d66ae5df317`
## 5. 审计范围修正
第一版独立审计曾返回:
- Source expected groups:193
- PBF actual groups:187
- Source expected presentations:403
- PBF actual presentations:390
- missing:17
- unexpected:11
进一步调查确认这不是新版 PBF 再次丢数据,而是审计 expected scope 定义过宽。
Production 实际范围不是“AOI bbox 内所有允许 scale 的 Source record”,而是:
`Production Plan + tile buffer + scale ladder + coverage mask + per-tile selected members`
两个具体误差来源:
1. 17 个 missing 全部来自 100k Source。它们虽然落在工程 AOI 内,但在对应 zoom 被 finer-scale coverage 遮掉,不会进入任何实际 tile。
2. 11 个 unexpected 是合法 tile-buffer occurrence。对象位于裸 AOI 边缘之外,但进入了计划 tile 的 8px expanded bounds,因此 Production 正确输出。
审计器已改为逐 tile / 逐 native_scale 重放可见区域:
- 使用与 plan 相同的 `buffer_tile_pixels`;
- finer coverage 先占用,coarser scale 使用 `coverage - occupied`;
- relation group 只使用该 tile、该 scale 当时实际 visible 的成员;
- base 选择在该 selected 集合内重新执行;
- expected tile occurrence set 与 PBF actual occurrence set 做严格等值比较。
修正后全九州审计 187/390 完全一致。
## 6. CA 灯弧 Runtime
CA renderer 按 OpenCPN / S-52 当前语义实现:
- arc 半径为 screen mm;
- sector leg 半径为 screen mm;
- outline 与彩色弧分层绘制;
- sector start / end 转为屏幕方向;
- sector legs 以 screen-space 虚线绘制;
- 随 MapLibre move / rotate / resize 重绘;
- 不把 CA 预烘焙成地理 PBF geometry。
release-scoped style audit 的 runtime coverage:
- RUNTIME_CA:1276 tile occurrences
- RUNTIME_DEPARE:47516
- RUNTIME_DEPCNT:46189
- RUNTIME_SOUNDG:146728
- RUNTIME_OBSTRN:45633
- RUNTIME_WRECKS:909
CA capability audit:
- required kind:RUNTIME_CA
- status:IMPLEMENTED
- fidelity:S52_SCREEN_MM
- evidence failures:0
- overall:**PASS**
Artifact:
`build/audits/cm95_s52_kyushu_v3_runtime_ca_capability.json`
## 7. 完整 Web Runtime Capability
严格检查当前 Web compare target 的全部 runtime kinds:
- RUNTIME_CA:IMPLEMENTED
- RUNTIME_DEPARE:PREVIEW_ONLY
- RUNTIME_DEPCNT:PREVIEW_ONLY
- RUNTIME_SOUNDG:PREVIEW_ONLY
- RUNTIME_OBSTRN:NOT_IMPLEMENTED
- RUNTIME_WRECKS:NOT_IMPLEMENTED
因此完整 target runtime capability audit:
**FAIL — runtime_capability_not_implemented**
Artifact:
`build/audits/cm95_s52_kyushu_v3_web_runtime_capability.json`
这个 FAIL 不应被“修成 PASS”。它的作用就是阻止把当前 Web debug preview 描述为完整 S-52 runtime portrayal。
## 8. Release-scoped Style
生成:
`build/s52_style_compiler_release_1c27f0a66f6b/style.s52.json`
结果:
- PBF count:5064
- source layer count:28
- feature count:476121
- compiled layers:142
- style bytes:1598139
- resource contract:PASS
- hard_gate_failures:[]
完整 sprite 继续使用:
`build/s52_resources_v2/final/s52-sprite-full`
## 9. 双-sector 实际浏览器验证
目标灯标位置约:
`130.78248061577605E, 34.09885081506925N`
真实 headless Chrome + MapLibre 运行验证:
- left style loaded:true
- source loaded:true
- 稳定 Feature ID:370384
- `s52_light_presentations` 同时包含 record 3077 和 3078
Record 3077:
- mode:sector
- color:LITYW
- arc:66° → 106°
- radius:15mm
- sector radius:25mm
Record 3078:
- mode:sector
- color:LITYW
- arc:116° → 320°
- radius:15mm
- sector radius:25mm
CA runtime flatten 后目标 arc features:2。
当前视口总 lightArcFeatures:9。
Canvas non-transparent pixels:5920。
实际 WebGL + CA overlay 截图已生成:
- `/tmp/cm95_v3_multi_light.png`
- `/tmp/cm95_v3_multi_light_left.png`
因此原先“同一航标多 LIGHTS 只剩一个 sector”的问题已经在最终 release 中闭环验证。
## 10. Web Compare 当前状态
18888 已切到:
`cm95-d1-62a85bd40d3a-1c27f0a66f6b`
Health 当前应返回:
- release_status:PASS
- pbf_file_count:5064
- decoded_pbf_features:476121
- s52_runtime_contract:PASS
- s52_light_presentation_contract:PASS
- s52_presentation_conservation_contract:PASS
页面左侧标识更新为:
`Production v3 / 0.4.11`
## 11. 最终判断
本阶段可以确认:
1. 原 LIGHTS composite 数据损失根因已修复;
2. 所有进入最终 release 的 multi-LIGHTS presentation 在 Source→PBF signature 层面守恒;
3. tile occurrence scope 与 Production Plan 完全一致;
4. CA 灯弧 runtime renderer 已实现并实际绘制;
5. 双-sector 实例已真实浏览器验证;
6. Data Release 可以正式使用;
7. Web compare 仍不是完整 S-52 runtime target,剩余 runtime capability 必须继续逐项实现和审计。