feat: add native road parity baseline
This commit is contained in:
@@ -1464,6 +1464,72 @@ parity 校验依赖 stage 的 stdout 标记来判断阶段是否跑到(如 `SC
|
||||
|
||||
---
|
||||
|
||||
## Native Road Parity
|
||||
|
||||
### 1. Scope / Trigger
|
||||
|
||||
拆分 native road compiler、移动其模块,或声称 native-road JSON / GeoJSON 未变化时,
|
||||
用 `scripts/road-parity.js`。它独立于 build stage,只读现有 native-road 输出。
|
||||
|
||||
### 2. Signatures
|
||||
|
||||
```bash
|
||||
node scripts/road-parity.js --config config/areas/<area>.json --snapshot <out.json>
|
||||
node scripts/road-parity.js --config config/areas/<area>.json --compare <baseline.json>
|
||||
```
|
||||
|
||||
`--config` 必填,且 `--snapshot` 与 `--compare` 必须二选一。
|
||||
|
||||
### 3. Contracts
|
||||
|
||||
- 快照覆盖 `outputs/<area>/native-road/` 下全部文件和同级
|
||||
`native-traffic-signals.json`。
|
||||
- 普通 JSON 递归按对象 key 排序后生成 `contentHash`。
|
||||
- GeoJSON 同时生成排序 feature 的 `contentHash` 与原序 `orderHash`;任一不同都算
|
||||
parity 失败。
|
||||
- 绝对路径归一化为 `<repo>/...` 或 `<external>/<basename>`,随机
|
||||
`native-road-*` staging 名归一化为 `<staging>`。坐标不做容差或舍入。
|
||||
|
||||
### 4. Validation & Error Matrix
|
||||
|
||||
| 条件 | 结果 |
|
||||
|---|---|
|
||||
| 缺 `--config` 或同时/均未传 snapshot、compare | 打印 usage,退出非零 |
|
||||
| native-road 输出目录不存在 | 抛出 `Native road output not found`,退出非零 |
|
||||
| baseline 缺文件、出现额外文件或任一 hash/count/bytes 不同 | 每项打印 `ROAD_PARITY_DIFF`,退出非零 |
|
||||
| 完全一致 | 打印 `ROAD_PARITY_OK`,退出 0 |
|
||||
|
||||
### 5. Good/Base/Bad Cases
|
||||
|
||||
- Good: 移动编译器前后,两个 hash 均一致。
|
||||
- Base: 绝对 OSM 输入路径变化但归一化后内容一致。
|
||||
- Bad: 只比较排序后的 GeoJSON 内容并忽略 `orderHash`,会掩盖输出顺序漂移。
|
||||
|
||||
### 6. Tests Required
|
||||
|
||||
- `npm run test:road-parity`:相等基线、顺序 hash 变化与缺文件都应被断言。
|
||||
- `node --check scripts/road-parity.js`。
|
||||
- 对每个受支持区域运行 `--compare` 对已提交基线自比对。
|
||||
- 迁移前先连续编译两次;只有 control 实验全绿,基线才可作为 oracle。
|
||||
|
||||
### 7. Wrong vs Correct
|
||||
|
||||
Wrong:
|
||||
|
||||
```js
|
||||
// Sorting hides a changed feature order.
|
||||
assert.equal(sortedContentHash, baseline.contentHash);
|
||||
```
|
||||
|
||||
Correct:
|
||||
|
||||
```js
|
||||
assert.equal(contentHash, baseline.contentHash);
|
||||
assert.equal(orderHash, baseline.orderHash);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 反模式
|
||||
|
||||
| 反模式 | 后果 |
|
||||
|
||||
Reference in New Issue
Block a user