2.6 KiB
2.6 KiB
Phase 2 执行计划
Step 1 — 前置
- Phase 1 的 AC1.1–AC1.8 全绿
- 定档 §「待决策」四项(仓库名 / 托管 / 分发 / 过渡期策略)
Step 2 — 拆出仓库(保历史)
# 方案 A:subtree split
git subtree split --prefix=packages/road-compiler -b road-compiler-export
# 在新目录初始化并拉入该分支
# 方案 B:filter-repo(更彻底,推荐)
git clone --no-local . /tmp/road-compiler-split
cd /tmp/road-compiler-split
git filter-repo --path packages/road-compiler/ --path-rename packages/road-compiler/:
⚠️ 注意:Phase 1 的搬迁若用了 git mv,历史可 --follow 追溯;
若用了删除+新建,filter-repo 只能追到 Phase 1。
Phase 1 搬迁时必须用 git mv —— 这条已在 Phase 1 implement Step 3 隐含,
此处显式记录依赖。
- 拆出后验证:
git log --follow src/compile/native-road.js | tail -20能看到 08-13 native-road-compiler 的提交
Step 3 — 新仓库自持化
package.json补全依赖(含 K4 的 OpenLayers)npm install && npm test在新仓库独立通过- 基线 JSON 迁入
test/baseline/ - 契约文档迁入
docs/ - README:契约摘要 + 与宿主项目关系说明
Step 4 — 宿主改造
package.json依赖指向新仓库(开发期file:)build-area.js改子进程调用 + 解析NATIVE_ROAD_COMPILE_DONEarea-config.js的toRoadCompilerInput()输出改为 CLI 参数或 input JSON 文件- 删除
packages/road-compiler/(或按过渡期决策保留) .trellis/spec/pipeline/加契约指针
Step 5 — 验证
# 宿主端到端
npm run build:area -- --config config/areas/fengshu-er-road.json
# 三区域 parity
for a in fengshu-er-road hanyang-block 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
# 反向依赖为 0(在新仓库内跑)
grep -rn "osm2streets-qgis-workflow\|area-config" . --exclude-dir=node_modules --exclude-dir=.git \
&& echo "VIOLATION"
# 锁版本检查
node -e 'const d=require("./package.json").dependencies;console.log(d)' | grep -i road
- 在一台未 clone 宿主的环境(或
/tmp全新 clone)验证 AC2.2
Review Gate
AC2.1–AC2.7 全绿。特别是 AC2.2(脱离宿主可自测)—— 这是"独立可维护"的实质。
Rollback
- 宿主依赖改回
file:packages/road-compiler(若过渡期保留了该目录) - 或
git revert宿主侧改造 commit;新仓库留着不影响宿主