# 06-决策记录

版本：0.1
日期：2026-06-28

## ADR-W2-001：working2 以当前语法规范作为覆盖源

状态：Accepted
日期：2026-06-28
关联任务：`W2-SPEC-001`

### 背景

用户要求对标 `通用机器人编程语法规范.md` 创建机器人程序集，并全面完成虚拟控制器执行情况。`working1` 已经覆盖 ABB120 基础测试和虚拟控制器，但不是逐章按最新语法规范做覆盖矩阵。

### 决策

`working2` 以 `work/doc/通用机器人编程语法规范.md` 为唯一覆盖源。任何程序或测试是否“覆盖”，必须能追溯到规范章节、语法项和验收证据。

### 后果

1. 覆盖结论可审计。
2. 语法规范更新后可以重新生成缺口清单。
3. 不再用“已有测试通过”替代规范覆盖证明。

## ADR-W2-002：ABB120 基准继续使用仓库内稳定 fixture

状态：Accepted
日期：2026-06-28
关联任务：`W2-PROG-010`、`W2-RUN-020`

### 背景

仓库已有 `kdl-wasm/web/src/fixtures/abb120.ts` 和测试导出 `abbIrb120.ts`，其中包含 ABB IRB120 3/58 URDF、load options 和标准关节位。重新引入外部 URDF 会增加模型差异和验证成本。

### 决策

working2 继续使用仓库内 ABB120 fixture。若未来需要独立 `.urdf` 文件，只能从当前 fixture 导出，不能静默替换机器人模型。

### 后果

1. working2 结果与 existing KDL/virtual controller 测试一致。
2. FK/IK/limit snapshot 可复用。
3. 外部 mesh/inertial 完整模型另列任务。

## ADR-W2-003：语法覆盖分为 Runtime、Static、Post 三层

状态：Accepted
日期：2026-06-28
关联任务：`W2-SPEC-002`

### 背景

语法规范包含流程控制、运动、IO，也包含 trap、interrupt、task、brand metadata、post_hint 等不适合全部作为虚拟控制器 happy path 执行的语义。如果强行要求所有语法都运行，会混淆实现边界。

### 决策

覆盖分三层：

1. Runtime：虚拟控制器必须执行并输出 trace。
2. Static：parser/semantic 必须诊断或验证。
3. Post：后处理、导入回读和报告必须覆盖。

### 后果

1. happy path 稳定。
2. P1/P2 语义不会被误报为已完整执行。
3. 覆盖矩阵能清楚说明每项语法的验证方式。

## ADR-W2-004：虚拟控制器验收以证据包为准

状态：Accepted
日期：2026-06-28
关联任务：`W2-RUN-001` 到 `W2-RUN-060`

### 背景

“执行情况”不能只看单元测试通过。虚拟控制器需要证明状态机、程序指针、motion queue、IO/wait、报警、source map 和轨迹结果都正确。

### 决策

每次 suite 运行生成 `W2-JOB-*` 证据包，至少包含：

1. `job.json`
2. `compile.json`
3. `controller.json`
4. `motion-queue.json`
5. `trace.json`
6. `io.json`
7. `trajectory.json`
8. `report.json/html`

### 后果

1. 运行结果可回放和审计。
2. HTML 虚拟控制器可以消费同一证据。
3. CI 失败时能定位到具体程序、source range 和 controller 状态。

## ADR-W2-005：working2 不改写 working1 完成记录

状态：Accepted
日期：2026-06-28
关联任务：`W2-SPEC-000`

### 背景

`working1` 已记录已完成的 ABB120 基础测试、表达式功能和虚拟控制器验收。用户要求任务整合到 `working2` 并参考 `working1`，不是要求重写历史记录。

### 决策

`working2` 新建独立任务包，状态从 `Todo` 开始。`working1` 仅作为参考和可复用资产来源。

### 后果

1. 避免把旧验收直接当作新目标完成。
2. working2 可以独立追踪新增覆盖缺口。
3. 后续实现可以逐项把 Todo 推进到 Done。

## ADR-W2-006：W2 runner 使用同步 fixture planner 生成审计轨迹

状态：Accepted
日期：2026-06-28
关联任务：`W2-RUN-020`、`W2-RUN-040`

### 背景

working2 的核心目标是逐章覆盖 GRL 语法规范，并为每个程序输出稳定、可审计的 controller、motion queue、trace、IO 和 trajectory 证据。仓库已有 ABB120 KDL 集成测试负责真实 URDF FK/IK/planPath 验证。

### 决策

`runAbb120SpecSuite` 在 W2 job 中使用同步 fixture planner 生成稳定 trajectory 和 planner diagnostic；真实 ABB120 URDF/KDL 检查继续由既有 `abb120Programs.test.ts` 和 KDL 测试承担。

### 后果

1. W2 证据包生成快速、稳定、可在普通 Node/Vitest 环境执行。
2. Motion queue、source map、IO/wait/alarm 和 post/roundtrip 证据可稳定归档。
3. 若后续要求 job 内嵌真实 KDL 轨迹，可在 runner 中增加 async KDL planner 模式。

## ADR-W2-007：异常和 P1 语义采用 runtime/static 边界组合

状态：Accepted
日期：2026-06-28
关联任务：`W2-RUN-060`、`W2-PROG-010.10`

### 背景

当前语法规范定义 `try/catch/finally`、`trap`、`interrupt`、`task`。现有 parser/semantic 已有异常分析器，但控制流分析器不应把 `try` 当普通控制流执行；`trap/task` 仍是 P1 runtime 边界。

### 决策

控制流分析器将 `try` 块保留为 raw boundary，由 exception semantic 负责 alarm/raise/try/catch/finally 分析。`trap/task/interrupt` 输出 `GRL_P1_UNIMPLEMENTED` warning 或 unsupported runtime trace，不作为 happy path 完整执行。

### 后果

1. `W2_90_ExceptionAlarm.grl` 可以稳定 parse、compile、load 并输出异常语义证据。
2. P1 语义不会被误报为完整 runtime 支持。
3. 后续实现 trap/interrupt/task 时可替换 raw boundary，不影响 W2 manifest 结构。

## ADR-W2-008：服务器演示采用静态发布包加证据包模式

状态：Accepted
日期：2026-06-28
关联任务：`W2-DEPLOY-001` 到 `W2-DEPLOY-060`

### 背景

用户要求把虚拟测试程序打包到服务器，并能通过这些程序演示虚拟控制器全部功能。当前虚拟控制器页面、GRL 程序、suite job、截图和 Word 文档都可以作为静态文件发布；远程演示的重点是可访问、可审计、可重复，而不是在服务器上重新执行 Node/Vitest。

### 决策

服务器发布采用静态演示包模式：

1. 本地先执行 typecheck、test、suite 和截图验证。
2. 将虚拟控制器页面、19 个 GRL 程序、最新 `W2-JOB-*`、截图、Word 文档和 `demo-manifest.json` 打成 zip。
3. 服务器仅负责 HTTPS 静态托管。
4. 远程验收通过 `demo-manifest.json`、`report.json`、程序源码、截图和页面入口验证。
5. 服务器保留 release 目录和 `current` 链接，支持回滚。

### 后果

1. 发布包可离线审计，不依赖服务器 Node 环境。
2. 演示内容与本地测试证据一致，避免远程环境差异导致结论不稳定。
3. 后续如需在线编辑和动态运行，可在当前静态包基础上增加 API 服务，不影响现有验收链路。
4. 凭据不进入仓库文档，降低泄露风险。
