chore(task): archive 08-26-direct-edit-documents
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
{"file": ".trellis/tasks/08-26-direct-manipulation-road-editor/design.md", "reason": "逐条核对文档 schema、5 态 status、存储布局与快照规则是否与权威合约一致"}
|
||||
{"file": ".trellis/spec/guides/code-reuse-thinking-guide.md", "reason": "检查是否出现第二套 hash、第二套 ID 校验或重复的 overrides 读写逻辑"}
|
||||
{"file": ".trellis/tasks/08-26-direct-manipulation-road-editor/research/current-system.md", "reason": "核对 v1 overrides 文件格式与既有 import 目录未被改写"}
|
||||
@@ -0,0 +1,18 @@
|
||||
# 设计
|
||||
|
||||
技术合约不在本文重复定义。权威定义见父任务 `.trellis/tasks/08-26-direct-manipulation-road-editor/design.md` 的以下小节:
|
||||
|
||||
- 「约束模型」— `RoadConstraintKind` 6 个取值、`SemanticAnchor` 4 种锚点、`transition`、`boundaryIndex` 范围、`station` 语义。
|
||||
- 「文档、活动副本与 revision」— `RoadEditDocument`、`RoadConstraint`、`ConstraintStatus` 5 态表。
|
||||
- 「存储布局与迁移」— 目录结构、惰性迁移、内容寻址与留存策略。
|
||||
- 「area config 所有权」— 快照规则与 `areaConfigSha256`。
|
||||
- 「编译器几何版本变更」— `recheck` 策略。
|
||||
- 「上线与回滚形态」— 服务端纯增量、v1 文件不动。
|
||||
|
||||
## 本子任务的局部决定
|
||||
|
||||
- 文档读写与 schema 校验放在编译器侧(`src/compile/` 下新增模块),不放在 `workbench/server.js`:预览、正式编译与 CLI 导出都要用它,放服务器会造成第二套实现。
|
||||
- 校验只做结构与取值范围,不做几何可行性。几何不变量(最小车道宽、外缘不交叉等)属求解器职责,见 `direct-edit-solver-api`。
|
||||
- 惰性迁移在读取入口触发,不提供独立迁移命令:既有 import 目录数量少,且迁移是纯增量创建,失败可重试。
|
||||
- `ConstraintStatus` 在本子任务只落地存储与校验;实际重放匹配逻辑属 `direct-edit-solver-api`。本任务的测试用手工构造的 status 值覆盖读写路径。
|
||||
- 内容寻址采用 `sha256`,与 `RoadRevisionManifest.source.osmSha256` 同一摘要,避免两套 hash。
|
||||
@@ -0,0 +1,5 @@
|
||||
{"file": ".trellis/tasks/08-26-direct-manipulation-road-editor/design.md", "reason": "父任务权威合约:约束模型、文档 schema、存储布局与迁移、area config 快照、编译器版本策略"}
|
||||
{"file": ".trellis/tasks/08-26-direct-manipulation-road-editor/research/revisions.md", "reason": "RoadRevisionManifest 字段来源与不可变 revision 的设计理由"}
|
||||
{"file": ".trellis/tasks/08-26-direct-manipulation-road-editor/research/current-system.md", "reason": "现有 ID 语义、v1 overrides 校验与 stale diagnostics 的可复用边界"}
|
||||
{"file": ".trellis/spec/guides/code-reuse-thinking-guide.md", "reason": "sha256 摘要、ID 校验与 overrides 应用必须复用既有实现,不得新建第二套"}
|
||||
{"file": ".trellis/spec/guides/cross-layer-thinking-guide.md", "reason": "新增 JSONL 文档与配置字段跨编译器/服务端/客户端,属该指南触发条件"}
|
||||
@@ -0,0 +1,40 @@
|
||||
# 实施计划
|
||||
|
||||
对应父任务 `implement.md` 的第 0、2、3 步。每步一个提交,门禁不过就停。
|
||||
|
||||
## 1. 测试基础设施
|
||||
|
||||
- 目标:先建验证能力,避免后续"写完没法测"。
|
||||
- 范围:`package.json` 增加固定版本 `vitest` 与 `test:client:unit` 脚本;建立客户端纯逻辑测试目录。不碰产品代码。
|
||||
- 验证:`npm run test:client:unit`(空套件通过)、`npm run format:check`、`npm run test`、`npm run test:client`、`npm run build`。
|
||||
- 门禁:新脚本可跑通且不影响任何既有脚本。
|
||||
- 回滚点:仅 `package.json` 与测试目录,revert 无副作用。
|
||||
|
||||
## 2. v2 文档与 schema 校验
|
||||
|
||||
- 目标:`native-road-edits/v2` 的读写与结构校验。
|
||||
- 范围:`src/compile/` 下新增文档模块:6 个 kind、4 种锚点、`anchorSnapshot`、`ConstraintStatus`、`documentVersion`、`operations`。仅结构与取值范围校验。
|
||||
- 验证:`npm run test` 新增 fixture——文档往返无损;`boundaryIndex` 非整数或 `<1` 被拒;非法 station(超出 `0..1`、`start>=end`)被拒;未知 kind 被拒;kind 与锚点类型不匹配被拒;provenance 指向未记录的 operation 被拒;每次写入 `documentVersion` 递增 1。
|
||||
- 注意:`boundaryIndex >= laneCount` **不**属于 schema 校验——车道数是模型信息,schema 层无从得知。按 `design.md`,该越界在重放时由求解器判定并转 `stale`,归 `direct-edit-solver-api`。
|
||||
- 门禁:校验错误信息能指出具体约束 id 与字段,不是笼统失败。
|
||||
- 回滚点:纯新增模块,无调用方,revert 无影响。
|
||||
|
||||
## 3. 存储布局、惰性迁移与 revision
|
||||
|
||||
- 目标:`active/`、`revisions/`、内容寻址 OSM 副本落地,既有目录可平滑接入。
|
||||
- 范围:目录布局读写;读取入口触发的惰性迁移,把当前 `source.osm` + overrides + signals + area config 冻结为 `rev-0001`;命名检查点创建;revision 恢复读取;`RoadRevisionManifest` 写入。
|
||||
- 验证:`npm run test` 新增 fixture——只含旧文件的目录被打开后生成 `rev-0001` 且既有文件字节不变;内容相同的 OSM 重复导入不产生第二份副本;命名检查点冻结后可完整恢复读取;manifest digest 与实际文件一致。
|
||||
- 门禁:迁移对既有 `workbench-data/import-*` 只增不改;revert 后旧代码仍能打开这些目录。
|
||||
- 回滚点:revert 后 `active/` 与 `revisions/` 只是残留目录,旧代码忽略它们。
|
||||
|
||||
## 4. area config 快照
|
||||
|
||||
- 目标:切断编译对外部区域配置文件的运行期依赖。
|
||||
- 范围:活动副本与每个 revision 各写一份 `area-config.snapshot.json`;编译改读快照;`base.areaConfigSha256` 指向快照。
|
||||
- 验证:`npm run test` 新增 fixture——冻结 revision 后修改外部 area config,重新编译该 revision 结果不变;快照缺失时报明确错误而非静默读外部文件。
|
||||
- 门禁:无 v2 文档时编译输出与快照一致。注意:仓库现有 `test/baseline/*.json` 已过期(`contract` 为 `native-road-package/v1`,当前为 `v1.1`,18 个文件 hash 全部不符),且 `test/fixtures.js:26` 只断言文件存在、从不比对内容,仓库内也没有生成器。因此本步须先从当前 main 重新生成快照并接上真实比对,再谈"不变"。
|
||||
- 回滚点:revert 后编译回到读外部配置文件;已写快照被忽略。
|
||||
|
||||
## 步骤依赖
|
||||
|
||||
1 → 2 → 3 → 4 是硬顺序。第 4 步的 baseline 比对是本子任务能否交付的总门禁:无 v2 约束时编译输出必须与当前 main 完全一致。
|
||||
@@ -0,0 +1,38 @@
|
||||
# 直接编辑文档与 revision 基础
|
||||
|
||||
父任务:`.trellis/tasks/08-26-direct-manipulation-road-editor`。需求来源与权威合约在父任务的 `prd.md` / `design.md`。
|
||||
|
||||
## 目标
|
||||
|
||||
建立 `native-road-edits/v2` 文档、活动工作副本、不可变 revision 与 area config 快照,使后续求解、预览和编辑能力有可复现的持久化基础。本子任务不含任何 UI,也不含约束求解。
|
||||
|
||||
## 顺序依赖
|
||||
|
||||
无前置。是 `direct-edit-solver-api`、`direct-edit-map-editor`、`direct-edit-junction-tools` 三者的前置:它们依赖本任务定义的文档 schema、`documentVersion` 与快照读取路径。
|
||||
|
||||
## 范围
|
||||
|
||||
- `vitest` 依赖与 `test:client:unit` 脚本(后续子任务的验证基础)。
|
||||
- `native-road-edits/v2` 文档读写与 schema 校验:6 个约束 kind、4 种锚点、`anchorSnapshot`、5 态 `ConstraintStatus`、`documentVersion`。
|
||||
- `workbench-data/import-<id>/` 内的 `active/`、`revisions/`、内容寻址 `osm/<sha256>.osm` 布局。
|
||||
- 既有 import 目录的惰性迁移:首次打开时冻结 `rev-0001`,不移动或重写既有文件。
|
||||
- `area-config.snapshot.json` 的写入与读取;编译与预览改读快照。
|
||||
- 命名检查点创建与 revision 恢复读取。
|
||||
|
||||
## 不做
|
||||
|
||||
- `resolveDirectEditConstraints` 与任何几何求解(属 `direct-edit-solver-api`)。
|
||||
- 预览、保存、rebase 的 HTTP 端点(属 `direct-edit-solver-api`)。
|
||||
- 任何客户端改动。
|
||||
- v1 `native-road-overrides.json` 的迁移或格式变更。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] `vitest` 与 `test:client:unit` 可跑通空套件,且不影响既有 `test` / `test:client` / `build`。
|
||||
- [ ] v2 文档往返读写无损;schema 校验拒绝越界 `boundaryIndex`、非法 station 与未知 kind。
|
||||
- [ ] 每次成功写入使 `documentVersion` 递增 1。
|
||||
- [ ] 只含旧文件的既有 `workbench-data/import-*` 目录,在新代码下可正常打开且未被改写,并生成 `rev-0001`。
|
||||
- [ ] 内容相同的 OSM 重复导入不产生第二份副本。
|
||||
- [ ] 冻结 revision 后修改外部 area config,重新编译该 revision 结果不变。
|
||||
- [ ] 快照缺失时给出明确错误,不静默回退到读外部配置文件。
|
||||
- [ ] `npm run format:check`、`npm run test`、`npm run test:client`、`npm run build` 全绿。
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "direct-edit-documents",
|
||||
"name": "direct-edit-documents",
|
||||
"title": "直接编辑文档与 revision 基础",
|
||||
"description": "native-road-edits/v2 文档、活动副本、不可变 revision、area config 快照与惰性迁移",
|
||||
"status": "completed",
|
||||
"dev_type": null,
|
||||
"scope": null,
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "dingkang",
|
||||
"assignee": "dingkang",
|
||||
"createdAt": "2026-08-26",
|
||||
"completedAt": "2026-08-27",
|
||||
"branch": "feat/direct-edit-documents",
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": "08-26-direct-manipulation-road-editor",
|
||||
"relatedFiles": [],
|
||||
"notes": "",
|
||||
"meta": {}
|
||||
}
|
||||
Reference in New Issue
Block a user