# CAM 原生内核流水线实施与任务分解

更新日期：2026-08-07

## 强制执行顺序

```text
CAD 几何
  -> OpenCAMLib WASM 刀位算法
  -> CAMotics 源码阶段运动契约
  -> 生成规范 G-code
  -> LinuxCNC WASM 解析、控制器语义、执行与验收
```

CAMotics 不解析流水线产生的规范 G-code。唯一的 G-code 解析和控制器语义权威是 LinuxCNC WASM。

## 已落地能力

| 任务 | 状态 | 实现与证据 |
| --- | --- | --- |
| CAM-NATIVE-01 OpenCAMLib | 完成 | 上游提交 `95b036fe28ce6d77c97b98e5fbc337904ae49560` 通过 Emscripten 3.1.69 构建；浏览器执行 `PathDropCutter`，不是 TypeScript 重写算法。 |
| CAM-NATIVE-02 OCL 制品门禁 | 完成 | `public/vendor/opencamlib/ocl.js` 为单文件嵌入 WASM；SHA-256 为 `0379040910f7af277c6e1f6411efb549292db0b071422a83954d93631253bf89`。 |
| CAM-NATIVE-03 CAMotics 源码阶段 | 完成（源码契约） | 锁定 CAMotics 提交 `e84665f2fa9d1151f03282ac7e01320bc65e015b`，依据 `GCodeMachine.cpp` 的 `start`、`changeTool`、`setFeed`、`move` 和 `end` 语义生成 G-code；适配层不解析输出。 |
| CAM-NATIVE-03B CAMotics 原生构建 | 完成（Qt5 GUI + TPL + CLI） | CAMotics `e84665f2...` 使用官方 C! `9b6672a0...`、Qt5、V8 ABI `v8_compress_pointers=0` 构建 `CAMotics/camotics`、`CAMotics/tplang`、`camsim`、`gcodetool`、`planner` 和 `build/camotics.so`；GUI/TPL 哈希、动态 Qt/V8 依赖、官方 TPL 10/10 测试和 Xvfb 主窗口（1200x800、可见）均通过 `config/camotics-native-artifact.json`。 |
| CAM-NATIVE-03C CAMotics 独立 WASM 内核 | 完成（扫掠子集） | 直接编译上游 `Sweep.cpp`、`ConicSweep.cpp`、`SpheroidSweep.cpp` 为零 imports 的 standalone WASM；Chrome 150 实际加载并执行 Conic/Spheroid depth、长段包围盒和确定性回放。 |
| CAM-NATIVE-04 OCCT 材料去除 | 完成（当前模型） | 使用 Bitbybit OCCT WASM 创建库存与切削工具并执行 BRep 布尔差；浏览器验证剩余体为结构有效单实体，可导出 BRep。 |
| CAM-NATIVE-05 Chrome 验收 | 完成 | Chrome 150 中 OCL 14 个刀位点、18 行 G-code、库存体积 300、去除体积 12、剩余体积 288、释放后内核引用为 0。 |
| CAM-NATIVE-06 主链 OCL 接管 | 完成（认证机型） | `prepareCamPipeline` 强制调用上游 `PathDropCutter`，以 48 个 OCL 刀位点驱动 CAMotics 源码阶段和 LinuxCNC XYZBC G-code；未提供 runner 时不会静默回退。 |

当前材料去除模型是确定性采样的平底刀 BRep 模型。轴向水平直线使用单个连续段包络，任意采样折线使用定向圆柱与端点球的连续段 BRep sweep；它是原生 OCCT 实体布尔，但不是 FreeCAD 原生 Path 材料去除的等价实现，能力报告固定为 `freeCadNativeEquivalent: false`。

## LinuxCNC WASM 接管

`cnc_wams_gpt6/linuxcnc-master/web/src/app.js` 已提供受控 `postMessage` bridge。父页面只能发送已经生成的 G-code，LinuxCNC 页面等待 machine case ready 后调用原生 `loadProgram`，由 LinuxCNC WASM 上游解释器生成轨迹，再按请求决定是否 `run`；返回结果固定带有 `backend: linuxcnc-wasm` 和 `parserAuthority: linuxcnc-wasm`。父页面不接收或替代 RS274 解析，也不把 CAMotics parser 放入执行链。

## 真实边界

- OpenCAMLib：上游算法已作为浏览器 WASM 执行。
- CAMotics：工作区已具备通过哈希、Qt5/V8 动态链接、官方 TPL 测试和真实 Xvfb 窗口冒烟验证的 1.3 原生 GUI/TPL，并保留 `camsim`、`gcodetool`、`planner` 和 Python 模块作为宿主 CLI/sidecar；同时有直接来源编译的 standalone sweep WASM，浏览器可执行该内核子集，但不是完整 Qt/TPL/程序运行时。
- CAMotics 解析边界：原生 `camsim` 只在独立冒烟证据中消费仓库示例。规范生产链仍由源码运动契约生成 G-code，并直接交 LinuxCNC WASM；不得把 CAMotics parser 提升为第二套规范解析器。
- CAMotics 浏览器边界：`public/vendor/camotics/camotics-sweep.wasm` 只包含上游扫掠数学和包围盒，不包含 G-code parser、TPL、Qt、文件系统或完整原生 GUI。能力报告将 `browserWasmKernelExecutable=true` 与 `browserExecutable=false` 分开记录；Qt5 GUI/TPL 仅在宿主进程中可用。
- LinuxCNC WASM：桥接已接入根应用和 LinuxCNC 页面；Chrome machine acceptance 已在重建后的 LinuxCNC WASM 产物上通过，报告保留解析块、轨迹段、RTCP 模态和限位结果；同一份程序已分别通过 `dry-run` 和 `run`。
- 连续工具轴：所选 XYZBC table-rotary-tilting 数字机型已完成；其他机型、完整奇异点 oracle 和生产授权仍关闭。LinuxCNC `web/evidence/production-safety-gate-matrix.json` 已覆盖 6 个 5 轴 INI，所有 gate fail-closed，`productionOpen=false`，没有实体运动或计量认证。
- 曲线扫掠：Chrome 已验证 `continuous-segment-sweep-brep` 的结构有效单实体和非零去料；解析 NURBS/圆弧的无弦误差 sweep、刀柄/夹具实体 oracle 仍开放。

## 后续任务安排

| 优先级 | 任务 | 验收条件 | 状态/所有者 |
| --- | --- | --- | --- |
| P0 | CAM-PIPE-01 LinuxCNC WASM 接管 | 将本模块生成的 G-code 送入 LinuxCNC WASM；记录解析块、模态状态、刀具/进给、执行轨迹及限位结果；不得调用 CAMotics parser。 | 已完成（认证机型） |
| P0 | CAM-PIPE-02 端到端一致性 | 比较 OCL 刀位、生成 G-code、LinuxCNC WASM 执行轨迹；建立坐标、单位、模态与容差门禁。 | 已完成（Chrome 认证链；泛化容差继续） |
| P1 | CAM-SIM-01 CAMotics 原生构建 | 安装并锁定 C!/SCons，构建 Qt5 `camotics` GUI、`tplang`、`camsim`、`gcodetool`、`planner` 与 Python 模块；提供提交、编译器、Qt/V8 动态依赖、制品哈希、官方 TPL 测试和 Xvfb 窗口冒烟证据。 | 已完成（宿主 Qt5 GUI/TPL/CLI；浏览器集成保持边界） |
| P1 | CAM-SIM-02 CAMotics standalone WASM | 从锁定上游 C++ sweep 源码构建零 imports WASM，提供 ABI、制品哈希、Node 和 Chrome 实际执行证据；禁止引入第二套规范 G-code parser。 | 已完成（sweep 子集；完整程序继续） |
| P1 | CAM-MR-02 任意曲线路径扫掠 | 对 OCL 采样段执行连续段 BRep sweep（定向圆柱 + 端点球并集），每个结果通过 OCCT BRep 结构校验；解析任意曲线的无弦误差 sweep 继续保留。 | 已完成（continuous-segment 子集；解析任意曲线仍开放） |
| P1 | CAM-5AXIS-01 连续工具轴 | 接入机床运动学、姿态连续性、奇异点和关节限位求解，并由 LinuxCNC WASM 执行轨迹验收。 | 已完成（XYZBC 数字机型；泛化姿态/奇异点和其它机型生产门仍开放） |
| P1 | CAM-FCSTD-01 Path 对象往返 | Path Job、ToolBit、ToolController、Operation 和命令列表执行 FCStd 双向 round-trip，并与 FreeCAD oracle 比较。 | 待 FCStd 所有者完成 |

## 验证命令

```bash
./npmw run build:camotics-native
./npmw run check:camotics-native
./npmw run build:camotics-wasm
./npmw run check:camotics-wasm
./npmw run test:camotics-wasm
./npmw run test:chrome-camotics-wasm
./npmw run check:chrome-camotics-wasm
node scripts/check-opencamlib-wasm.mjs
./npmw exec tsx -- --test tests/camNativeSimulation.test.ts
./npmw exec tsc -- --noEmit
node scripts/run-chrome-cam-native-simulation.mjs
node scripts/check-chrome-cam-native-simulation.mjs
npm run test:chrome-cam-linuxcnc-machine
npm run check:chrome-cam-linuxcnc-machine
```

机器可读证据位于 `config/camotics-native-artifact.json`、`config/camotics-wasm-artifact.json`、`config/chrome-camotics-wasm-verification.json`、`config/opencamlib-wasm-artifact.json`、`config/chrome-cam-native-simulation-verification.json`、`config/chrome-cam-linuxcnc-machine-verification.json` 与 LinuxCNC `web/evidence/digital-machine-five-axis-certification.json`。
