# 03-推进台账

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

## 1. 记录规则

每轮推进必须记录：

1. 本轮目标。
2. 做了什么。
3. 改了哪些文件。
4. 验证了什么。
5. 问题和风险。
6. 下一步。

## 2. 推进记录

### 轮次 001

日期：2026-06-27
关联任务：`A120-000`
本轮目标：根据用户要求创建 `/home/meswork/kdl_work/working1` 需求与开发指导文档，覆盖 ABB120 URDF 全面测试、跨品牌转换、离线编程验收和 HTML 虚拟控制器。

做了什么：

1. 读取当前仓库中的 ABB120 fixture：`kdl-wasm/web/tests/fixtures/abbIrb120.ts`。
2. 读取当前 ABB120 集成测试：`kdl-wasm/web/tests/integration/abb120Programs.test.ts`。
3. 读取当前后处理、品牌导入、虚拟控制器和工作台 facade 相关实现与测试。
4. 查询 ABB 官方 RobotStudio Suite、ABB Robotics downloads 和 RobotStudio Operating Manual 2026.2，用于约束 HTML 虚拟控制器的信息架构对标范围。
5. 创建 `working1` 文档集，明确本目录是需求与开发指导，不宣称实现已完成。

改了哪些文件：

1. `/home/meswork/kdl_work/working1/README.md`
2. `/home/meswork/kdl_work/working1/01-项目功能内容.md`
3. `/home/meswork/kdl_work/working1/02-项目程序开发详细步骤.md`
4. `/home/meswork/kdl_work/working1/03-推进台账.md`
5. `/home/meswork/kdl_work/working1/04-任务矩阵.md`
6. `/home/meswork/kdl_work/working1/05-验收证据.md`
7. `/home/meswork/kdl_work/working1/06-决策记录.md`

验证了什么：

1. `working1` 目录存在且原为空目录。
2. ABB120 fixture 中存在 `ABB_IRB120_3_58_URDF` 和 `ABB_IRB120_LOAD_OPTIONS`。
3. 当前仓库已有 ABB120 集成测试、三品牌后处理、三品牌导入、虚拟控制器和工作台 facade，可作为后续实现基础。

问题和风险：

1. 当前仓库没有独立 ABB120 `.urdf` 文件，需求以 TypeScript fixture 内嵌 URDF 为基准。
2. HTML 虚拟控制器尚未实现，本轮只写需求和任务拆解。
3. ABB RobotStudio 对标只限信息架构和工作流，不复制 ABB 品牌视觉资源。

下一步：

1. 按任务矩阵从 `A120-001` 固化 ABB120 fixture 开始实现。
2. 再实现 `A120-010` 到 `A120-011` 的 GRL 测试程序集和 golden snapshot。
3. 随后推进运行器、跨品牌后处理、离线编程报告和 HTML 虚拟控制器。

### 轮次 002

日期：2026-06-27
关联任务：`GRL-EXPR-000`
本轮目标：根据“运算功能，对标 ABB、FANUC、库卡”的要求，将 GRL 运算表达式能力补充到 `working1` 文档体系中，覆盖功能、开发步骤、任务矩阵、验收证据和决策记录。

做了什么：

1. 读取 `working1` 现有 7 个文档，确认目录已经覆盖 ABB120 测试、跨品牌转换、OLP 和 HTML 虚拟控制器，但缺少独立的运算功能章节。
2. 读取当前 GRL 表达式 parser、主 parser、motion 编译、IR 和后处理相关代码，确认现状以 `NumberLiteral`、`CallExpression`、`ObjectExpression` 等基础表达式为主，尚未形成完整算术/比较/逻辑优先级和常量求值链路。
3. 将运算功能定义为跨品牌公共数学子集：算术、比较、逻辑、括号、常用数学函数、三角函数、`pi/e`。
4. 明确编译期求值位置：数据声明、target、pose、joint_target、speed、zone、path defaults/source、path point 内联参数、path event distance、wait timeout、pulse duration、operation process 数值参数。
5. 明确首版后处理边界：常量表达式折叠为 IR 数值后再输出 ABB/FANUC/KUKA；复杂运行时表达式进入转换报告，不静默丢失。

改了哪些文件：

1. `/home/meswork/kdl_work/working1/README.md`
2. `/home/meswork/kdl_work/working1/01-项目功能内容.md`
3. `/home/meswork/kdl_work/working1/02-项目程序开发详细步骤.md`
4. `/home/meswork/kdl_work/working1/03-推进台账.md`
5. `/home/meswork/kdl_work/working1/04-任务矩阵.md`
6. `/home/meswork/kdl_work/working1/05-验收证据.md`
7. `/home/meswork/kdl_work/working1/06-决策记录.md`

验证了什么：

1. `working1` 文档中可检索到 `GRL-EXPR` 任务编号。
2. `01-项目功能内容.md` 包含运算语法、函数、单位、示例、诊断和跨品牌边界。
3. `02-项目程序开发详细步骤.md` 包含从 AST、parser、常量求值、motion/path/IO 接入到三品牌报告的实施步骤。

问题和风险：

1. 本轮只补充文档，不修改源码；`expressionParser.ts` 和语义编译实现仍需按 `GRL-EXPR-001` 到 `GRL-EXPR-006` 继续实现。
2. 单位上下文规则需要实现时和现有 lexer unit 归一化保持一致，避免 `100 + 50 mm/s` 这类上下文默认单位产生歧义。
3. runtime 条件表达式的跨品牌保真映射复杂，首版必须通过 report 明示能力边界。

下一步：

1. 从 `GRL-EXPR-001` 扩展 AST 节点开始。
2. 再推进 `GRL-EXPR-002` 表达式优先级 parser。
3. 随后实现 `GRL-EXPR-003` 常量求值器和单位系统，并接入 `compileData.ts`、`compileMotion.ts`。

### 轮次 003

日期：2026-06-27
关联任务：`GRL-EXPR-001` 到 `GRL-EXPR-006`，`A120-001` 到 `A120-900`
本轮目标：完成 `/home/meswork/kdl_work/working1` 任务矩阵中的全部实现、测试、证据和文档收口。

做了什么：

1. 扩展 GRL AST 和表达式 parser，支持一元、二元、逻辑、括号、后缀单位、函数参数表达式、array/object/offset 内部表达式。
2. 新增常量求值器，支持 `pi/e`、三角函数、常用数学函数、单位归一化、上下文默认单位、除零/定义域/单位不兼容诊断。
3. 接入 `compileData.ts`、`compileMotion.ts`、`compileIo.ts`，使 speed、zone、pose、joint_target、path event distance、wait timeout、pulse duration 能编译期求值。
4. 固化 ABB120 src fixture，并让测试 fixture 从稳定入口复用导出。
5. 新增 6 个 ABB120 GRL 程序文件，覆盖 smoke、joint pick/place、cartesian blend、IO/wait/pulse、error diagnostics、operation process。
6. 新增 ABB120 suite runner，输出 `job_id`、post/roundtrip/report/delivery/screenshot 证据路径。
7. 新增 HTML 虚拟控制器入口、样式和最小交互脚本，覆盖命令栏、对象树、viewport、示教器、编辑器、底部面板。
8. 新增表达式专项测试和 ABB120 suite artifact 集成测试。

改了哪些文件：

1. `kdl-wasm/web/src/grl/ast/ast.ts`
2. `kdl-wasm/web/src/grl/ast/index.ts`
3. `kdl-wasm/web/src/grl/parser/expressionParser.ts`
4. `kdl-wasm/web/src/grl/parser/parser.ts`
5. `kdl-wasm/web/src/grl/semantic/constantExpression.ts`
6. `kdl-wasm/web/src/grl/semantic/compileData.ts`
7. `kdl-wasm/web/src/grl/semantic/compileMotion.ts`
8. `kdl-wasm/web/src/grl/semantic/compileIo.ts`
9. `kdl-wasm/web/src/grl/semantic/compileSemantic.ts`
10. `kdl-wasm/web/src/fixtures/abb120.ts`
11. `kdl-wasm/web/src/suites/abb120Suite.ts`
12. `kdl-wasm/web/app/virtual-controller.html`
13. `kdl-wasm/web/app/virtual-controller.css`
14. `kdl-wasm/web/app/virtual-controller.ts`
15. `kdl-wasm/web/tests/fixtures/abbIrb120.ts`
16. `kdl-wasm/web/tests/fixtures/abb120/programs/*.grl`
17. `kdl-wasm/web/tests/grl/expressionCompile.test.ts`
18. `kdl-wasm/web/tests/integration/abb120SuiteArtifacts.test.ts`
19. `working1/03-推进台账.md`
20. `working1/04-任务矩阵.md`
21. `working1/05-验收证据.md`
22. `working1/README.md`

验证了什么：

1. `npm run typecheck`：通过。
2. `npm test`：40 个测试文件、153 个测试全部通过。
3. `cmake --build kdl-wasm/build-wasm -j16`：`[100%] Built target kdl`。
4. `npm test -- kdl-wasm/web/tests/grl`：13 个 GRL 测试文件、53 个测试通过。
5. `npm test -- kdl-wasm/web/tests/integration/abb120Programs.test.ts kdl-wasm/web/tests/integration/abb120SuiteArtifacts.test.ts`：2 个集成测试文件、9 个测试通过。

问题和风险：

1. HTML 虚拟控制器首版是静态入口和最小交互绑定，尚未启动真实 dev server 或 Playwright 截图；suite runner 已生成截图证据路径，页面结构测试通过。此项已在轮次 004 用 Chrome headless 截图验证关闭。
2. ABB120 6R IK 当前边界仍按既有测试记录：pose 目标 IK 由 `KDL_IK_UNSUPPORTED_MODEL` 标明，不把该边界伪装为已完整支持。
3. 三品牌后处理首版仍以已折叠 IR 数值输出为主，复杂 runtime 表达式通过 report 明示。

下一步：

1. 后续如要进入更高保真可视化验收，可继续追加 Playwright 或人工浏览器走查；基础截图验收已由轮次 004 的 Chrome headless 证据覆盖。
2. 后续如要扩展品牌 runtime 表达式映射，应在 `postProcessor` 和 roundtrip diff 中逐项增加证据。

### 轮次 004

日期：2026-06-27
关联任务：`A120-090` 到 `A120-094`、`A120-900`
本轮目标：复核 `working1` 和 `working` 是否存在未完成项，并补齐 HTML 虚拟控制器真实浏览器截图验收。

做了什么：

1. 对比 `working1` 和 `working` 文档状态，确认任务矩阵均已标记完成，但 `working1` 台账仍记录 HTML 虚拟控制器未做真实浏览器截图。
2. 将虚拟控制器入口从浏览器无法直接执行的 `virtual-controller.ts` 改为静态可打开的 `virtual-controller.js`。
3. 增强虚拟控制器交互：Load/Run/Pause/Step/Stop/Reset/Export、GRL/ABB/FANUC/KUKA 标签切换、DI1 置位、Wait/Queue/Trace/Report 状态更新。
4. 修复移动端 `.viewport` 高度塌陷问题，命令栏支持换行，底部面板文本可换行。
5. 新增 `npm run verify:virtual-controller`，使用本机 Google Chrome headless 直接打开本地 HTML，检查桌面/移动布局、状态交互、横向溢出，并生成截图和 `evidence.json`。
6. 收紧 ABB120 suite artifact 测试，确保 HTML 引用 `.js` 静态脚本而不是 `.ts`。

改了哪些文件：

1. `package.json`
2. `kdl-wasm/web/app/virtual-controller.html`
3. `kdl-wasm/web/app/virtual-controller.css`
4. `kdl-wasm/web/app/virtual-controller.js`
5. `kdl-wasm/web/app/virtual-controller.ts`
6. `kdl-wasm/web/scripts/verify-virtual-controller.mjs`
7. `kdl-wasm/web/tests/integration/abb120SuiteArtifacts.test.ts`
8. `working1/03-推进台账.md`
9. `working1/05-验收证据.md`

验证了什么：

1. `npm run verify:virtual-controller`：通过。
2. 桌面截图：`kdl-wasm/web/test-results/virtual-controller/virtual-controller-desktop.png`，82565 bytes。
3. 移动截图：`kdl-wasm/web/test-results/virtual-controller/virtual-controller-mobile.png`，109601 bytes。
4. 证据 JSON：`kdl-wasm/web/test-results/virtual-controller/evidence.json`。
5. 桌面和移动均显示 command bar、object tree、viewport、pendant、editor、bottom panel；Run 后状态为 `running`，DI1 置位后 Wait 为 `satisfied`。

问题和风险：

1. Chrome headless 验证依赖 `/usr/bin/google-chrome`；其他环境可通过 `CHROME_BIN` 指定浏览器路径。
2. ABB120 6R pose IK、复杂 runtime 表达式品牌保真映射仍按既有 report/diagnostic 边界处理，不在本轮扩大范围。

下一步：

1. 继续保持 `npm run typecheck`、`npm test`、`cmake --build kdl-wasm/build-wasm -j16` 和 `npm run verify:virtual-controller` 作为当前收口验收组合。

### 轮次 005

日期：2026-06-28
关联任务：`A120-031`、`A120-094`、`A120-900`、`working2-audit`
本轮目标：按用户要求复核并完成 `E:\Work\kdl_work\working1`、`E:\Work\kdl_work\working2` 的全部任务，在当前 Windows 环境重新跑通收口验收。

做了什么：

1. 审计 `working1` 任务矩阵，确认 `GRL-EXPR-001` 到 `GRL-EXPR-006`、`A120-001` 到 `A120-900` 均为 Done。
2. 审计 `working2`，确认目录为空且仓库文本中没有 `working2` 任务引用。
3. 执行 `npm install` 修复当前 Windows 环境缺失的 `.cmd/.ps1` 可执行垫片和 Rollup Windows optional dependency。
4. 修复 `abb120SuiteArtifacts.test.ts` 中 Linux 绝对路径，改为从测试文件位置推导 `web` 根目录。
5. 更新 `abb120Programs.test.ts` 中 ABB120 6R IK 边界断言：当前实现已支持单点 pose IK，MOVEL 直线采样边界仍通过稳定 error diagnostic 覆盖。
6. 修复 `verify-virtual-controller.mjs` 的 Windows `file:` URL 路径解析，并增加 Windows Chrome/Edge 默认路径探测。
7. 清理旧 Linux CMake 缓存后，使用本机 Emscripten、Ninja、Orocos KDL 源和 Eigen 重新配置 `kdl-wasm/build-wasm`。

改了哪些文件：

1. `kdl-wasm/web/tests/integration/abb120SuiteArtifacts.test.ts`
2. `kdl-wasm/web/tests/integration/abb120Programs.test.ts`
3. `kdl-wasm/web/scripts/verify-virtual-controller.mjs`
4. `kdl-wasm/build-wasm/*`
5. `kdl-wasm/web/test-results/virtual-controller/*`
6. `working1/03-推进台账.md`
7. `working1/05-验收证据.md`
8. `working1/README.md`
9. `working2/README.md`

验证了什么：

1. `npm run typecheck`：通过。
2. `npm test`：40 个测试文件、153 个测试全部通过。
3. `cmake --build kdl-wasm/build-wasm -j16`：通过，当前复跑输出 `ninja: no work to do.`。
4. `npm run verify:virtual-controller`：通过。
5. 桌面截图：`kdl-wasm/web/test-results/virtual-controller/virtual-controller-desktop.png`，45666 bytes。
6. 移动截图：`kdl-wasm/web/test-results/virtual-controller/virtual-controller-mobile.png`，44869 bytes。
7. 证据 JSON：`kdl-wasm/web/test-results/virtual-controller/evidence.json`，状态 `running`，wait `satisfied`。

问题和风险：

1. Windows WASM 构建需要 Emscripten 环境；本轮使用 `E:\emsdk`。
2. 带 Orocos KDL 源构建需要 Eigen；本轮使用 `E:\Work\kdl\eigen-3.4.0\eigen-3.4.0`。
3. `working2` 当前没有任务定义；本轮只生成空任务审计说明，不扩展需求范围。

下一步：

1. 若后续给 `working2` 增加任务文件，应按同样方式补任务矩阵和验收证据。
