8.6 KiB
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.mddocs/PBF_Pipeline_正式流程_v1.mdSTEP_RECORD.mdtools/style-visual-object/README.mdtools/style-visual-object/style_vo_tool.pytools/style-visual-object/output/navsea-standard/standard-catalog.jsontools/style-visual-object/output/cm95-manual-review/assignment/cm95-layer-assignment-v1.jsontools/style-visual-object/output/cm95-manual-review/validation-report-v1.jsontools/visual-object-instantiation/README.mdtools/visual-object-instantiation/instantiate_pbf_visual_objects.pytools/visual-object-matcher/README.mdtools/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 --checkgit 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 模型配置(若运行环境可确认)
不得把“测试未跑”写成“通过”。