8.5 KiB
NAVSEA-PBF-MULTISOURCE 阶段 B2.5:身份作用域与 PRIMARY 审核清单 RDC 完成报告 v1
日期:2026-10-12 阶段结论:只读身份作用域审计器及 475 条 PRIMARY 审核清单已完成,工程测试通过;跨 Tile 稳定实体身份、PRIMARY 审核、标准层→显示组权威映射及产品执行资格仍然未完成。
1. 本阶段目标、依据与实际环境
按 2026-10-12 NavSea《多源 PBF:通用解释器与标准层映射强制原则 v1》,不得在 NavSea Runtime 基于 CM95 特有字段自行推断业务分类。参考以下实际设计与代码:
- NavSea
docs/设计基线/NAVSEA-PBF-MULTISOURCE-002B_FeatureScope与ProviderCompilerExecutionPlan_v2_设计.md第 6 节:可信 rawId 的稳定键至少含 providerId/datasetId/sourceId/sourceLayer/fidScope/rawId;当 fidScope=tile 时必须附 z/x/y;身份不足时仅可使用有界且保守的 operation-local 去重。 - NavSea
docs/设计基线/NAVSEA-PBF-MULTISOURCE-004_StyleVisualObject可执行适配与共享StyleLayerSelector_v1_设计.md:唯一 PRIMARY 与 COMPONENT 从属应有独立经确认的证据。 - CARBON7i 当前真实 Chart Profile
src/assets/pbf/providers/bundled/cm95-s52-full-1.1.0.navsea-chart.json:identity.fidScope="unknown",dataVersion=null,实际代码不能因旧扫描样本通过就自动提高到 sourceLayer/global。
执行设备:RDC X220(Linux)。实际工作路径:/root/sourceserver/pbf-provider-pipeline-v1,分支 feature/provider-pipeline-v1,既有 HEAD d046d7ee0d9f2030d974d0e5435ae6571b0b4489。没有运行 Codex、没有切换分支或 Worktree、没有删除、重置、覆盖原有 B2.1~B2.4 的 dirty/untracked 文件。NavSea Windows CARBON7i 参考仓库仍为 D:\React\NavSea-PBF-Multisource(分支 feature/pbf-multisource、HEAD 78d7ffeccc95469ef3be62701b7b805b5a50c1f8),本轮 NavSea Runtime 未改动。
2. 本阶段实际代码与测试
在上游项目中新增:
tools/provider-pipeline/feature_identity_scope_audit.py:只读对比原始 PBF Tile / source-layer / feature_id、Style source 所有者、Catalog 示例归属、Mapping 当前状态;区分视觉类型 ID、真实样本 Tile 内定位与没有获得证明的稳定实体身份;保留可供人工审查的全部组件,不自动指定 PRIMARY。tests/test_feature_identity_scope_audit.py:针对两个不同 Source / source-layer 的合成 Provider、同一 ID 跨两个 Tile 的差异、Tile 内重复 ID、缺失 ID、跨 Style Source 歧义、非法 Tile 路径和 Visual Object ID 重复,验证 fail-closed;额外验证多个 Visual Object 类型若抢占同一个 Tile 内原始 Feature,则先后两个都失去确认资格,避免只拒绝后者。docs/报告/NAVSEA-PBF-MULTISOURCE_阶段B2-5_身份作用域与PRIMARY审查队列_v1.json:以真正的原始 PBF、全量 Actual Catalog、原 Style 和 B2.1 生成的 475 条暂存 Mapping计算;每条包括 Visual Object 类型 ID、是否能定位样本 Feature、结构化 Tile 局部 Locator、审查前的 Mapping 状态、各绘制组件候选和primaryReviewStatus=PENDING_REVIEW。
脚本仅创建项目内审计输出,不修改原始 PBF、Style、Sprite、正式 Package、NavSea Profile 或 Compiler。没有新增 VerifiedVisualBindingSet 或任何业务授权。
3. 三种必须隔离的身份含义
| 层级 | 证据/作用域 | B2.5 结论 |
|---|---|---|
CompositeVisualTypeId |
原始 Style + Sprite 决定的视觉组合类别签名 visual_object_id |
475 种;不是现实实体 ID |
TileLocalFeatureLocator |
明确的 providerId,datasetId,sourceId,sourceLayer,z,x,y,rawFeatureId;在该瓦片实际唯一 |
475 个记录中的示例确认,可用于本次样本回溯;不是跨更新稳定承诺 |
StableEntityId |
按 Provider 明示且已检验的 rawId、fidScope、dataVersion、跨瓦片重复/拼接与对象身份规则 | 0 条获得授权,仍为 unknown |
避免把 visualObjectId、occurrence_id、feature.id、Style Render Layer ID 或屏幕位置混成实体身份。
4. 真实数据统计
使用 CM95 Japan S52 Full 实际 Catalog,采样了该 Catalog 475 种视觉类型的各一个原始 Feature 示例,示例位于 261 张真实 PBF 瓦片。对这 261 张瓦片所有 Source Layer 的全部 247,257 条原始 Feature核验:
- 可定位的 Visual Object 类型示例:475/475;无位置缺失;261 个 distinct tile。
- 261 张瓦片的原始 Feature:247,257;本次遍历里
feature.id缺失 0,单个tile+source-layer内 ID 重复的取值 0。 - 以
(source-layer,feature.id)对比不同 Tile 时,存在 10,985 个跨瓦片复用的组合;其中 240 个跨瓦片复用组合的完整属性签名不同。属性不同不等于不同现实实体:切片、属性派生、数据更新或不完整源身份均可能造成变化;不能凭这项统计自动推断“碰撞/不安全”。 - 旧 3 张样本瓦片的 2,077 个 occurrence 记录中没有观察到同一
source-layer+feature.id跨样本 Tile 重用;3 样本结果不能推翻新的 261 瓦片结果。 - 使用原有审查资料与完整 Catalog 形成的审计用 Mapping:329 个类型已指派
standardLayer,146 个 UNKNOWN 或 AMBIGUOUS。此数据只属于暂存审计输入,不是当前发行 ZIP 的覆盖度。旧正式 CM951.1.0ZIP 仍只有 102 条 Mapping。 - 全部 475 条待 PRIMARY 审核;
primaryStyleComponentIndex=null、stableEntityId=null、fidScopePromotionAuthorized=false、pickupDeduplicationAuthorized=false。 fidScope审计输出保持 unknown,与 NavSea 真实 Profile 相符。
5. 验证记录
- 仓库虚拟环境
.venv/bin/python -m unittest discover -s tests -p 'test_*.py' -v:30/30 PASS。新增 B2.5 6 项,原有 B2.1/B2.3/B2.4 24 项仍通过。一次初始回归因 Counter 归零残留未清理而失败,已修复并复跑 30/30 PASS;不能省略该修复历史。 - 原始 PBF 261 Tile 审计重新执行,正式 JSON 输出含
reusedRawFeatureIdWithDifferingProperties=240、reusedRawFeatureIdAcrossExaminedTiles=10985。 - 两个设备及 Git 分支保持原环境;最终 Git/Style/ZIP 完整性检查见本报告收尾命令记录。
- 本次没有 Android/iOS 实机运行、Jest、Git Commit、Git Push、Tag 或正式 ZIP 新发行,也没有执行第二个真实 Provider 的发行包验收;合成测试不等于两个真实 Provider。
6. 与前期证明的边界
B2.4 的 475/475 是对每个视觉类型选取一个真实 Feature 验证其 Composite 组件全部从同一原始 Feature 重放;B2.5 的 475/475 是对每个视觉类型选取的示例验证其 Tile 内 Feature 身份唯一。两者均不覆盖全量 976,534 次 visual occurrence,也不证明跨版本的实体稳定身份。
B2.3 已发现 29 个含多分类或 residual 的原始 Style Layer、146 个未解决对象以及多组件继承的问题。本轮不解除其阻塞,也不假设 MapLibre 动态过滤已通过真机等价验收。保留 CM95 TEST fishery/LIGHTS05 现存过渡兼容。
7. 下一阶段 B2.6 的受控方向
- 按正式 002B 规则审查 fidScope:确认 Provider 能否提供跨瓦片稳定对象 ID 的文档证据、适用 Source Layer、更新周期和 Feature 实例去重条件。无法确认就继续
unknown,Pickup 仅按 operation-local 可信同源证据做有界去重。 - 人工 PRIMARY 审查:根据本次 475 条队列、原始 Style Composite Signature、Provider 语义资料与原始 Feature 对照,明确主图形/附属 Component。可维护版本化审核记录及反例,不能选
icon为 PRIMARY 的自动通用默认。 - 标准层显示组 Contract:NavSea 需正式声明
standardLayer→logicalGroupId的审核人、版本与指纹,以及一对多归属时如何限定对象。现有pbf_group.json的 13 用户组只是当前产品显示入口,不能仅按字符串名称自动推断归属。 - 安全可执行纵向切片:先证明一类对象在其涉及的每个原始 Style Layer 的 selector 全部可达、隐藏不误伤其他标准层/UNKNOWN,全部显示时原 Style 严格恢复。通过后才考虑 Compiler 扩大 EXECUTABLE。
- 新正式 ZIP 必须增版本并通过 GSRL Source Lock、完整 Package 验证、至少两个结构不同的真实 Provider 及 Android/iOS 实机门槛,不覆盖现有 1.1.0。
此报告为阶段性工程证据;不构成新的冻结 RFC/Contract,也不申请用户自动确认跨瓦片实体 ID 或 PRIMARY 语义。