chore(task): plan crosswalk element editor experiment

This commit is contained in:
2026-08-28 17:57:37 +08:00
parent b2da3b6866
commit a0af1c0e84
6 changed files with 204 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
# 实施计划
## 0. 建立事实与测试夹具
- 追踪 `compileControlMarkings()` 的每条 stripe 属性、`native_id` 构成和从地图点击到 `onFeature` 的路径。
- 添加失败优先的测试:同组 stripe 需要稳定共享 `elementId`,不同 crossing 不得共享;空编辑输出与基线一致。
- 门禁:能证明一个具体 feature 无歧义回链到一个 junction approach 和 crossing。
## 1. 第一阶段:元素 manifest 与选择
- 在编译器为 crosswalk stripe 写稳定的元素标识和回链属性。
- 在 direct-edit 服务响应中增量发布按 selection/element 获取的元素 manifest不扩大现有道路 handle 的职责。
- 客户端建立 `ElementSelection` 纯状态与 feature 点击适配;点击 stripe 选择整组、空白清除。
- 验证编译器单元测试、API 测试、客户端 selection 单元测试。
## 2. 第一阶段:位置编辑闭环
- 用 element manifest 的 position control 渲染元素级控件和选中外框;安装时不得影响道路 handle hit-test。
- 从位置手势和表单走同一个 draft builder写入 `junction-crosswalk-inset`
- 验证:拖拽与表单值生成同形约束;预览/保存/重载一致;`exact` 状态和撤销/重做覆盖。
- 门禁:一次非空编辑可在正式重编译结果中观察到斑马线位置变化。失败即停止,不能只交付 UI。
## 3. 复盘门禁
- 手测选中、取消、道路级手柄共存、拖拽钳位、表单验证、保存重载。
- 只有在第一阶段验收全部通过后,才能为尺寸/外观参数做持久化 schema 决策。
## 4. 第二阶段:尺寸与外观
- 依据第一阶段证据设计并验证长度、宽度、条带数、间距的约束 schema。
- 编译器读取参数、返回 blocking diagnostics元素 manifest 表达对应控件/字段。
- 实现与表单字段完全一致的尺寸控件,补齐组合参数、持久化和 rebase 测试。
## 验证命令
```sh
npm run format:check
npm run test
npm run test:client
npm run test:client:unit
npm run build
```
## 风险文件
- `src/compile/native-road.js`:斑马线生成与默认输出兼容性。
- `src/compile/direct-edit-solver.js` / `native-road-edits.js`约束求解、schema 和 manifest 必须同步。
- `workbench/server.js`element manifest 查询与 preview 不得写入磁盘。
- `workbench/client/src/components/MapCanvas.tsx``App.tsx``edit/`:选择、临时控件和表单不得污染 baseline layer。