Files
osmWorkflow/.trellis/tasks/08-25-rc-p0-contract-baseline/implement.md

4.0 KiB
Raw Blame History

Phase 0 执行计划

前置

  • 分支:experiment/road-compiler-rethink(已在)
  • 确认工作区干净(.trellis/tmp-*.js 五个未跟踪文件与本任务无关,可先清理或忽略)
  • 阅读父任务 design.md §1 契约定义

Step 1 — 摸清两区域当前状态

ls config/areas/
for d in outputs/*/native-road/layers; do echo "$d: $(ls $d | wc -l)"; done

判定:hanyang-block 为废案,不纳入本阶段;只核查两个有效区域的配置与当前产物。

  • 逐区域检查 config 的 nativeRoad.edgeLines / junctionTemplates.enabled
  • 将两个有效区域的配置差异记录在基线 README

门槛:两个有效区域的图层差异有书面解释。

Step 2 — 确定性核查

# 备份
cp -r outputs/<area>/native-road /tmp/rc-baseline-a
# 重编
rm -rf outputs/<area>/native-road
npm run road:compile -- --config config/areas/<area>.json
cp -r outputs/<area>/native-road /tmp/rc-baseline-b
# 比对
diff -r /tmp/rc-baseline-a /tmp/rc-baseline-b
  • 对两个有效区域各跑一遍
  • 记录所有差异字段 → volatile 清单
  • 额外一轮:删掉 native-traffic-signals.json 重生成, 确认信号 ID 是否确定(traffic-signals.js require 了 crypto,重点核查)
  • 若发现几何坐标级的非确定性 → 停止本阶段,先开 bug 任务修掉

门槛 🔴:确定性已证明,或非确定性已定位并修复。这是全案的地基。

Step 3 — 写 scripts/road-parity.js

design.md §2 实现。

  • --snapshot 生成归一化 checksum 清单
  • --compare 比对并逐文件报差异,不一致时非零退出
  • GeoJSON 双 hashcontentHash 排序后 / orderHash 原序)
  • volatile 字段按 Step 2 结论归一化
  • 自验:同一区域连跑两次 snapshot--compare 必须通过
node scripts/road-parity.js --config config/areas/fengshu-er-road.json --snapshot /tmp/s1.json
node scripts/road-parity.js --config config/areas/fengshu-er-road.json --compare /tmp/s1.json
echo "exit=$?"   # 必须为 0

门槛:脚本对未改动的代码报告一致。

Step 4 — 建立两区域基线

mkdir -p .trellis/tasks/08-25-road-compiler-extraction/baseline
for a in fengshu-er-road nantaizi-lake-innovation-valley; do
  rm -rf outputs/$a/native-road
  npm run road:compile -- --config config/areas/$a.json
  node scripts/road-parity.js --config config/areas/$a.json \
    --snapshot .trellis/tasks/08-25-road-compiler-extraction/baseline/$a.json
done
  • 两个基线 JSON 生成
  • baseline/README.md:生成时的 git commit、命令、volatile 字段清单、 两个有效区域图层差异的解释
  • 反向自验:再跑一次 --compare 两个基线全部通过

Step 5 — K2 决策

  • 检查 comparison.json 当前是否真被消费grep 宿主与 workbench
  • 若有 → 方案 B可选注入在契约里定义 comparisonDir 为 optional

Step 6 — 落契约文档

  • docs/native-road-package-v1.md,内容源自父任务 design.md §1
  • 补入 Step 2 的 volatile 字段清单
  • 补入 Step 5 的 K2 决策
  • docs/changelog.md 记一行

验证命令汇总

# parity 两区域全绿
for a in fengshu-er-road nantaizi-lake-innovation-valley; do
  node scripts/road-parity.js --config config/areas/$a.json \
    --compare .trellis/tasks/08-25-road-compiler-extraction/baseline/$a.json || echo "FAIL $a"
done

# 既有测试未破
npm run test:native-road
npm run test:road-workbench

# 确认无生产代码改动
git diff --stat -- scripts/lib blender

最后一条必须为空输出 —— Phase 0 不碰生产代码。

Review Gate

全部 AC0.1AC0.6 打勾后,再进 Phase 1。基线不可靠时不要前进。

Rollback

本阶段纯新增(文档 / 脚本 / 基线数据)。回滚 = 删除新增文件。 唯一例外Step 2 若发现并修复了非确定性 bug那部分是真实代码改动 应拆成独立 commit 并单独保留。