Files
pbf/docs/任务/PBF_Provider_Pipeline_v1_实现任务.md
2026-10-06 10:28:22 +08:00

8.6 KiB
Raw Blame History

PBF Provider Pipeline v1 实现任务

日期:2026-10-06

0. 任务目标

在当前独立 worktree /root/sourceserver/pbf-provider-pipeline-v1 中,把 docs/PBF_Pipeline_正式流程_v1.md 定义的 PBF-01 ~ PBF-07 落成可运行、Provider-neutral 的正式 Pipeline,并实际用 NavSea 与 CM95 两套 Style/资源跑通。

最终终点必须是:

NavSea Provider Package

不得生成 NavSea Runtime 的 ProviderExecutionPlan。

1. 开工前必须读取

先完整阅读:

  • AGENTS.md
  • docs/PBF_Pipeline_正式流程_v1.md
  • STEP_RECORD.md
  • tools/style-visual-object/README.md
  • tools/style-visual-object/style_vo_tool.py
  • tools/style-visual-object/output/navsea-standard/standard-catalog.json
  • tools/style-visual-object/output/cm95-manual-review/assignment/cm95-layer-assignment-v1.json
  • tools/style-visual-object/output/cm95-manual-review/validation-report-v1.json
  • tools/visual-object-instantiation/README.md
  • tools/visual-object-instantiation/instantiate_pbf_visual_objects.py
  • tools/visual-object-matcher/README.md
  • tools/visual-object-matcher/visual_matcher_experimental.py

先按真实文件结构和字段工作,不凭记忆臆造。

2. 必做项

  • PBF-01:实现 Provider Source Intake,支持本地路径和 HTTP(S) Style;记录 provider/dataset identity、资源、hash/fingerprint、source snapshot。
  • PBF-02:复用现有 Style Visual Object Tool;必要时补薄包装,但不得破坏已冻结 NavSea Standard Catalog。
  • PBF-03:把 visual-object-instantiation 正规化并 Provider-neutral 化。删除主逻辑中的 CM95 硬编码,包括固定 source: cm95、固定 catalog_name 等;Provider 信息必须来自参数/manifest。支持对选定 XYZ sample tiles 下载到工作目录后实例化。不得按屏幕位置拼接对象。
  • PBF-04:提供统一 Mapping ingestion/normalization。CM95 读取现有人工 assignment;NavSea 从 frozen Standard Catalog 的真实结构生成自身 Provider mapping。自动 matcher 只能作为建议,不能覆盖人工结果。
  • PBF-05:新增 tools/provider-policy-compiler/,定义并实现统一 Provider Policy Schema v1、编译器、validator。NavSea 与 CM95 必须使用完全相同 Schema;主逻辑禁止 provider == cm95 等分支。
  • PBF-06:实现 Provider Package Schema v1 与 Validator,结果严格为 PASS / PASS_WITH_WARNINGS / FAIL;FAIL 禁止 export。
  • PBF-07:实现正式 Provider Package Export,并生成 MANIFEST / fingerprints / validation report。
  • 新增一个 Provider-neutral 端到端 CLI/orchestrator,单条命令可从 manifest 执行 Pipeline。应能选择阶段或复用已存在的审核/assignment 输入,但最终输出结构一致。
  • 把两个当前未跟踪的 tools/visual-object-instantiation/、tools/visual-object-matcher/ 中本任务需要的源码正规纳入版本控制;不要提交 __pycache__。
  • 增加最小但足够的自动测试,覆盖 schema、fingerprint 稳定性、Provider-neutral 行为、FAIL 阻止 export、NavSea/CM95 两套 contract 同构。
  • 文档全部中文;工具字段名/Schema key 可用英文。
  • 更新 STEP_RECORD.md,但只追加本任务进度,禁止重写历史。
  • 生成中文完成报告到 docs/报告/PBF_Provider_Pipeline_v1_Codex完成报告_v1.md。

3. 公开 Contract 的最低字段

Provider Package/Policy 至少覆盖:

  • provider identity
  • dataset identity
  • package/version identity
  • Style resource
  • PBF resource
  • Sprite
  • Glyph
  • NavSea Standard Layer mapping
  • Provider Policy
  • Display
  • Pickup
  • Planning
  • Danger
  • capabilities
  • validation requirements
  • hash / version / fingerprint
  • unresolved
  • limitations
  • provenance

第三方不需要使用本仓库工具,只要满足公开 Contract 即可。

4. Provider-neutral 硬要求

正式 Pipeline 主逻辑不得:

  • 根据 providerId 写 if cm95 / if navsea
  • 根据 source-layer 名称直接决定 NavSea Standard Layer
  • 根据 Provider 字段名直接决定 NavSea Standard Layer
  • 根据单个 icon 名称硬推完整对象语义
  • 静默把 AMBIGUOUS/UNKNOWN 变成某个 Layer

Provider-specific 差异必须进入:

  • manifest
  • declarative mapping/policy
  • provenance
  • 已确认人工 assignment

5. 实际运行输入

NavSea

Style 优先使用 X220 当前真实本地文件:

/root/sourceserver/pbf/src/pbf/style.navsea-delivery-full-semantic-extentfix.json

该文件是实际当前 Style 输入,只用于运行测试,不要把原主工作区文件纳入本 worktree Git。

其 Style 当前包含:

  • vector source navsea_delivery
  • tile template http://192.168.200.184/pbf-delivery-full-20260418-rebuild/{z}/{x}/{y}.pbf
  • sprite http://192.168.200.184/newpec/sprite-semantic/sprite
  • glyphs http://192.168.200.184/newpec/fonts/{fontstack}/{range}.pbf

冻结 Standard Catalog:

tools/style-visual-object/output/navsea-standard/standard-catalog.json

CM95

Style:

http://192.168.200.184:18889/s52/full-style.json

PBF:

http://192.168.200.184:18889/pbf/{z}/{x}/{y}.pbf

Sprite:

http://192.168.200.184:18889/s52/sprite

建议 sample tiles:

12/3531/1641
12/3526/1643
12/3638/1613

CM95 人工权威 assignment:

tools/style-visual-object/output/cm95-manual-review/assignment/cm95-layer-assignment-v1.json

6. NavSea sample tile

从 NavSea Style 的真实 vector source 自动获取 tile template。若 manifest 未指定 sample tile,CLI 应允许显式传 sample tiles。

为了本任务实际跑通,先通过 HEAD/GET 或目录可用性选择 1~3 个能成功下载的 NavSea z12 sample tile;不得伪造成功。如果某候选 404,继续选择真实存在的 tile,并在报告记录最终使用的 tile。

7. 依赖与运行

当前复制进 worktree 的旧 instantiation 脚本依赖 mapbox_vector_tile 和 Pillow;当前系统 Python 已观察到 mapbox_vector_tile 可能未安装。

要求:

  • 明确声明 Python 依赖,例如独立 requirements 文件。
  • 优先创建/使用 worktree 内 .venv,不要污染系统 Python。
  • 依赖安装失败时明确报告,不得伪造运行成功。
  • 输出/缓存目录应通过 .gitignore 避免把大体积临时 PBF/Sprite/cache 提交进 Git。
  • 正式示例/小型 JSON 报告可提交;大 PBF、PNG cache 不提交。

8. 两套实际端到端验收

实现完成后必须实际运行:

A. NavSea

目标:

NavSea style + real PBF sample + frozen Standard Catalog
→ Provider Policy
→ validated NavSea Provider Package

必须至少证明:

  • Style intake 成功
  • Sprite 获取/快照成功
  • 至少一个真实 vector PBF sample 成功
  • PBF-03 实例化成功
  • NavSea mapping 成功
  • Policy Schema validate 成功
  • Package Schema validate 成功
  • Export 成功
  • validation result 非 FAIL

B. CM95

目标:

CM95 full-style + real PBF sample + existing manual assignment
→ Provider Policy
→ validated CM95 Provider Package

必须至少证明:

  • Style intake 成功
  • Sprite 获取/快照成功
  • 三个指定 sample tiles 尽可能全部成功;若单个不可用,明确记录
  • PBF-03 实例化成功
  • 使用现有人工 assignment,不能用 matcher 覆盖
  • Policy Schema validate 成功
  • Package Schema validate 成功
  • Export 成功
  • validation result 非 FAIL

9. 输出建议

建议正式输出:

tools/provider-pipeline/
tools/provider-policy-compiler/
providers/navsea/
providers/cm95/
contracts/
dist/

具体目录可根据仓库现状调整,但职责必须清晰。

最终至少保留可复现的 manifest/example 配置,让后续可再次执行两套 Provider。

10. Git 与工作区约束

当前 worktree 是隔离分支:

feature/provider-pipeline-v1

不要访问或修改主工作区中的既存脏文件,除“读取 NavSea style 输入”外。

只提交本任务新增/修改文件。

完成前执行:

  • 相关 Python tests
  • CLI help/基础 smoke
  • NavSea 实际 Pipeline
  • CM95 实际 Pipeline
  • git diff --check
  • git status --short

成功后在 feature branch 创建清晰 commit。不要自行 merge main;由外部流程审核后处理。

11. 完成报告

docs/报告/PBF_Provider_Pipeline_v1_Codex完成报告_v1.md 必须逐项报告:

  • 已完成 / 未完成 / 无法验证
  • 实际命令
  • NavSea 运行结果
  • CM95 运行结果
  • 每阶段产物
  • Schema/Contract 版本
  • validation result
  • warnings / unresolved / limitations
  • tests
  • Git commit
  • 最终实际使用的完整 Codex 模型配置(若运行环境可确认)

不得把“测试未跑”写成“通过”。