Files
Web_FreeCAD_Bitbybit/后续工作.txt
wangdequan d11566403d
Some checks failed
real-verification / chrome (push) Has been cancelled
real-verification / freecad-oracle (push) Has been cancelled
real-verification / wasm (push) Has been cancelled
feat: close ordered pairs and property codec batches
2026-08-17 04:58:46 -04:00

5340 lines
431 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FreeCAD 后续工作
## 1. 文档定位
本文是后续工作的人工入口,不维护会随任务推进变化的统计数字。执行时以下列机器产物为准:
1. `config/freecad-active-work-queue.json`
- 全部微任务、依赖、状态、退出条件和唯一 `nextTask` 的机器真值。
2. `docs/freecad-active-work-status.generated.zh-CN.md`
- 当前完成数、剩余数、里程碑状态和唯一活动任务的生成摘要。
3. `docs/freecad-follow-up-execution-plan.zh-CN.md`
- 后续里程碑顺序、A-I 九阶段完成定义和单轮执行协议。
4. `config/freecad-follow-up-task-progress.json`
- A-I 后续任务的完成证据账本;完成项必须形成连续前缀。
5. `config/freecad-ordered-operation-pair-classification.json`
- 19x19 有序操作对的原生接受/拒绝、builder、变异、诊断和 FCStd 证据。
6. `docs/freecad-native-differential-execution-plan.zh-CN.md`
- 通过真实 FreeCAD/Bitbybit/浏览器执行进行逐字段差分、缺陷纠正、20 步微任务和阶段里程碑的实施规范。
禁止在本文复制实时完成数或手工指定下一任务。需要查看状态时运行:
```bash
node -e "const q=require('./config/freecad-active-work-queue.json'); console.log(q.nextTask, q.summary)"
```
## 2. 当前执行原则
- 基线固定为 FreeCAD 1.1.1 和仓库已锁定的原生提交。
- 任意时刻只能有一个 `in_progress` 任务。
- 每轮只处理 `config/freecad-active-work-queue.json` 中的 `nextTask`。
- 前一里程碑未闭合时,后一里程碑保持 `pending`。
- 原生拒绝是有效分类,不得为了 Web 侧接受而伪造通用 Shape 或隐藏 fallback。
- 原生接受必须使用真实 builder并具备参数变异、恢复、history、naming 和 FCStd 往返证据。
- 失败路径必须锁定失败阶段、精确诊断、空/无效 Shape 状态、事务回滚和文档无污染。
- 动态状态只能由 `scripts/generate-freecad-active-work-queue.mjs` 生成。
## 3. 后续里程碑顺序
1. 完成 `TSN-ORDERED-PAIRS` 的全部 19x19 操作对。
2. 为所有 opaque Property 类型补齐原生 codec 与往返证据。
3. 闭合 Document observer、事务、DAG、重算失败恢复、Extension、FeaturePython 和多文档语义。
4. 逐个闭合核心建模操作的 A-I 九阶段证据。
5. 闭合 FCStd、STEP、IGES、BREP 和其他格式的双向往返。
6. 完成 GUI、文档工作台、工程工作台、分析制造、脚本与代理边界。
7. 完成跨浏览器、跨 OS/GPU、无障碍、locale、fuzz、长稳、签名发布和 exact promotion。
详细拆分和依赖关系只在机器队列与执行计划中维护。
## 3A. 全功能对标拆分总表(静态路线图)
本节只定义长期范围、阶段边界和可重复的验收粒度,不记录实时完成数、活动任务名或下一任务名。每个阶段由机器队列展开为“一个原生 artifact、一个聚焦检查器、一个明确退出条件”的微任务队列推进时不得跨越阶段依赖。
### 3A.1 统一工作单元
每一个功能、对象、属性、命令、格式和 UI 状态都按下列最小单元拆解:
| 编号 | 最小任务 | 必须产出 | 单项退出条件 |
| --- | --- | --- | --- |
| U1 | 原生清册 | TypeId/命令名、输入、默认值、适用性、失败前置 | 清册可机器读取,未知项显式登记 |
| U2 | 名义成功 | FreeCAD/OCCT Shape、对象集、属性、诊断、拓扑摘要 | 名义输入重复运行结果稳定 |
| U3 | 边界成功 | 最小值、最大值、空集合、单元素、多元素和单位边界 | 每个边界都有接受或拒绝证据 |
| U4 | 原生拒绝 | 失败阶段、异常/诊断、空或无效 Shape、对象集 | 不以 Web fallback 替代原生拒绝 |
| U5 | 取消与中断 | cancel、abort、超时、Worker 终止时的资源和状态 | 文档、事务、Worker、OPFS 无污染 |
| U6 | 参数变异 | 一次只改一个参数的 before/edit/restore 轨迹 | 编辑改变的字段可解释,恢复逐字段一致 |
| U7 | 历史与命名 | Generated/Modified/Deleted、ElementMap2、MappedNameRef、hash | 无私有 token、无错误绑定、歧义保持歧义 |
| U8 | 持久化 | save、reopen、resave、版本迁移和资源引用 | Shape、属性、命名、对象图无未解释漂移 |
| U9 | Facade | 生产 API、类型校验、错误映射、能力级别 | UI 不直连内核,禁止隐藏 fallback |
| U10 | 浏览器回放 | Worker、OPFS、UI、选择、进度、释放证据 | 真实 Chrome 流程与原生合同一致 |
| U11 | 回归封存 | focused check、变更摘要、哈希、证据索引 | 证据可独立复跑,队列只推进一项 |
### 3A.2 阶段与微里程碑
| 阶段 | 目标 | 细分里程碑(每项可再拆为 U1-U11 | 阶段退出门槛 |
| --- | --- | --- | --- |
| P0 基线与治理 | 固定 FreeCAD/OCCT、证据格式和能力声明 | P0.1 版本/提交锁定P0.2 TypeId/命令/格式清册P0.3 artifact 哈希P0.4 依赖图P0.5 known-gap 账本P0.6 单活动任务门禁 | 基线、生成器、检查器和 exact 声明一致,禁止未登记能力 |
| P1 原生观察层 | 建立所有差异的可重复 oracle | P1.1 空文档状态P1.2 单对象状态P1.3 选择/子形状态P1.4 属性 editor 状态P1.5 事务状态P1.6 失败/取消状态P1.7 GUI 命令状态P1.8 资源与版本信息 | 原生 probe 覆盖清册;未知状态只能进入 pending |
| P2 内核几何 | 对齐 OCCT builder 和拓扑历史 | P2.1 基本几何P2.2 布尔P2.3 变换/阵列P2.4 草图与约束几何P2.5 修复/偏置/抽壳P2.6 曲面/网格P2.7 有效性和容差P2.8 资源释放 | 每个 builder 有成功、边界、失败、恢复和 history 证据 |
| P3 文档与历史 | 对齐 Document/DAG/事务/扩展语义 | P3.1 对象生命周期P3.2 属性类型和 editorP3.3 Link/LinkSubP3.4 recompute 顺序P3.5 dependency cycleP3.6 partial failureP3.7 observer 顺序P3.8 undo/redo/abortP3.9 Extension/FeaturePythonP3.10 多文档/MDI | 对象图、事务事件和失败恢复在 save/reopen 后仍可解释 |
| P4 核心建模工作台 | 对齐 Sketcher、Part、PartDesign | P4.1 草图几何P4.2 约束求解P4.3 草图编辑器P4.4 Part 原语P4.5 布尔/修复/检查P4.6 PartDesign Body/TipP4.7 加料/减料P4.8 旋转/扫掠/放样P4.9 圆角/倒角/孔/拔模/厚度P4.10 阵列/镜像/多变换P4.11 跨特征 mutationP4.12 全有序操作对 | 每项都有 A-I 证据,命名和 FCStd 证据达到 exact gate |
| P5 文件与数据交换 | 对齐原生格式、导入导出和代理边界 | P5.1 FCStd 对象/属性/资源P5.2 BREPP5.3 STEPP5.4 IGESP5.5 STL/OBJ/PLYP5.6 DXF/SVG/PDFP5.7 IFCP5.8 CSV/G-codeP5.9 JT/IDF/OpenSCADP5.10 未知对象保留P5.11 安全解析/大小限制 | 双向 round-trip、损坏/未知输入、编码和资源引用均有明确 exact/compatible/excluded 结果 |
| P6 GUI 与交互 | 对齐 FreeCAD 桌面状态和浏览器交互 | P6.1 Shell/菜单/工具栏P6.2 Workbench 切换P6.3 Tree/Dock/MDIP6.4 Task panelP6.5 Property editorP6.6 对话框验证P6.7 3D 选择/预选P6.8 快捷键/焦点P6.9 报告/状态/进度P6.10 cancel/long taskP6.11 截图/可访问性树P6.12 mobile/responsive | 每个工作台的空文档、成功、失败、取消、恢复流程可真实浏览器回放 |
| P7 工程与专业工作台 | 对齐 Draft、TechDraw、Spreadsheet、Plot、Assembly、BIM、Surface、Mesh、Material | P7.1 Draft snaps/working planeP7.2 TechDraw 页面/视图/标注P7.3 Spreadsheet 公式/别名/样式P7.4 Plot 数据/坐标轴/导出P7.5 Assembly joints/solverP7.6 BIM/IFC/数量P7.7 Surface trim/sew/repairP7.8 Mesh 修复/转换P7.9 Material 继承/外观P7.10 跨工作台引用 | 每个专业对象具有对象图、交互、持久化、导出和失败证据 |
| P8 分析、制造与扩展 | 对齐 FEM、CAM、Robot、Inspection、Points、ReverseEngineering、脚本和 addon | P8.1 FEM 对象/网格/求解/结果P8.2 CAM Path/任务/后处理P8.3 仿真和机床 profileP8.4 Robot 运动学/碰撞/导出P8.5 点云/重建P8.6 测量/偏差/报告P8.7 Python API/macro 沙箱P8.8 addon 签名/权限/回滚P8.9 代理模块显式排除 | 生产授权与浏览器能力分离;不支持项可审计、可解释、不会伪装支持 |
| P9 平台质量 | 完成跨环境和长稳验证 | P9.1 Chrome/Firefox/SafariP9.2 Windows/Linux/macOSP9.3 GPU/软件渲染P9.4 desktop/tablet/mobileP9.5 locale/单位/时区P9.6 屏幕阅读器/键盘P9.7 性能/内存/WorkerP9.8 fuzz/stress/长会话P9.9 崩溃恢复/迁移P9.10 供应链/安全 | 所有支持矩阵无未知差异,预算、漏洞、泄漏、错误绑定均为零 |
| P10 发布与 exact promotion | 形成可签名、可复核的发布物 | P10.1 证据索引P10.2 生成物重建P10.3 SBOM/依赖审计P10.4 签名/验签P10.5 release closureP10.6 回滚演练P10.7 exact capability matrixP10.8 版本公告 | 所有 exact 任务闭合,必要零指标满足,签名产物和回滚包可复现 |
### 3A.3 每个阶段内的执行顺序
阶段内固定按以下细粒度顺序执行,任何一步失败都只登记当前微任务,不跳到下一步:
1. 清册:确认 TypeId、命令入口、默认参数、输入数量、依赖和适用性。
2. 名义态:用真实 FreeCAD/OCCT builder 生成结果,记录 Shape、拓扑、属性、诊断和对象集。
3. 边界态:逐个执行最小值、最大值、空、重复、越界和单位转换;原生拒绝也要记录。
4. 失败态:记录失败阶段、异常类型、精确文本、状态标志、空/无效 Shape 和对象污染。
5. 变异态:只修改一个参数,执行 before/edit/restore检查几何、历史、命名和文档版本。
6. 事务态:覆盖 commit、abort、undo、redo、stale、cycle、cancel、timeout 和 Worker 终止。
7. 持久化态:执行 save/reopen/resave校验对象图、属性、资源、Shape、命名和 hash。
8. Facade 态:通过生产 Facade 重放同一输入,确认错误映射、能力级别和权限边界。
9. 浏览器态:真实 Worker/OPFS/Chrome 回放,检查 UI、选择、进度、释放和离线行为。
10. 封存态:运行 focused check、相关模块 gate、`git diff --check`,生成队列和状态页,确认只推进一个任务。
### 3A.4 里程碑完成判定
- `完成`U1-U11 全部有机器证据,检查器通过,依赖项已完成,队列生成器将该项标记为 completed。
- `兼容`:核心工作流可用,但至少一个 exact 证据类缺失;必须保留缺口、范围和下一步,不得提升 exact 声明。
- `代理`:仅保留数据/显示/导入等有限语义;必须标明不支持的原生行为和安全边界。
- `拒绝`:原生明确拒绝或 no-op记录拒绝权威、诊断、回滚和持久化不视为实现缺陷。
- `阻断`:证据缺失、结果不稳定、存在漂移或安全问题;任务保持 in_progress/pending禁止用文档结论强行关闭。
### 3A.5 依赖与并行规则
- P0/P1 是所有阶段的前置;没有基线和 oracle不接受实现“已完成”。
- P2 的几何/历史证据先于 P3 文档语义P3 先于 P4-P8 的生产工作台。
- P5 格式往返依赖 P3 对象图和 P4/P7/P8 的真实对象;未知对象只能进入显式保留或排除路径。
- P6 浏览器 UI 依赖 Facade 合同,但 UI 回归不能反向修改原生合同。
- P9 只在 P4-P8 的工作流有稳定基线后扩大矩阵;发现漂移时回退到对应功能微任务。
- P10 是最终门禁,不能以“主要功能可用”替代任一 exact 依赖。
- 机器队列维持 `maxInProgress=1`;需要并行调查时也必须先落成独立 artifact不能并行修改同一证据账本。
### 3A.6 每项任务的最小记录模板
```text
范围:一个 TypeId/命令/格式/交互状态或一个有序操作对
输入:原生版本、提交、参数、单位、对象图、资源哈希
原生证据:名义、边界、失败、取消、变异、历史、命名
浏览器证据Facade、Worker、OPFS、UI、选择、进度、释放
持久化证据save/reopen/resave、迁移、未知属性/资源
判定accepted / rejected / no-op / compatible / proxy / blocked
退出条件:可执行检查命令、预期摘要、零指标和回滚要求
变更边界只允许修改该任务的实现、oracle、检查器和报告
```
## 3B. 当前阶段的持续推进规则
当前项目仍处于 TSN 命名/历史与有序操作对闭合阶段,之后才按依赖进入 Property、Document、格式、GUI、专业工作台和平台质量阶段。每次完成一个微任务后必须
1. 从 `config/freecad-active-work-queue.json` 读取新的 `nextTask`,不得从本文、聊天记录或手工列表猜测。
2. 为刚完成任务追加原生、浏览器、持久化和回滚证据;缺一项就保持当前任务未完成。
3. 重新生成队列和状态页,检查只有一个 `in_progress`,并核对连续前缀没有跳号。
4. 按任务风险运行 focused gate达到发布点才运行完整 `./npmw run verify`。
5. 提交前检查 `git diff --check`、JSON/脚本语法、未跟踪文件和生成物哈希;提交后推送云仓库并记录提交。
6. 若原生拒绝、no-op 或代理边界是正确结果,完整保留该分类,不为了增加完成数而改变判定。
## 4. 单轮执行流程
1. 读取唯一 `nextTask`,确认依赖、输入 artifact 和退出条件。
2. 只修改该任务所需的 oracle、实现、检查器和锁定报告。
3. 先运行真实 FreeCAD/OCCT/Chrome probe再运行只读 focused check。
4. 验证 Shape、Worker、OPFS、事务和文档对象集回到预期状态。
5. 运行相关 Facade、FCStd、TSN 和 execution-plan 门禁。
6. 所有退出条件通过后,重新生成 active-work queue 与状态页。
7. 确认队列恰好推进一个任务,没有跳号或第二个活动任务。
8. 运行 `git diff --check`、JSON/脚本校验和与风险相称的回归。
9. 发布点运行完整 `./npmw run verify`,再提交并推送。
常用命令:
```bash
./npmw run probe:freecad-ordered-operation-pairs
./npmw run check:freecad-ordered-operation-pairs
./npmw run generate:freecad-active-work-queue
./npmw run check:execution-plan
git diff --check
```
## 5. A-I 完成定义
| 阶段 | 交付物 | 最低退出条件 |
| --- | --- | --- |
| A | 原生清册与前置 | TypeId、输入、默认值、依赖和适用性机器可读 |
| B | 原生成功证据 | 名义值和边界值的 Shape、拓扑、状态与诊断齐全 |
| C | 原生失败/取消证据 | 无效输入、禁用、取消和文档无污染可复现 |
| D | 参数变异/恢复 | 编辑、重算和恢复返回已分类的原生状态 |
| E | Facade 实现 | 生产路径无隐藏 fallbackUI 不直连内核 |
| F | 事务恢复 | abort、undo、redo、stale、失败和资源所有权闭合 |
| G | FCStd 往返 | FreeCAD-Web-FreeCAD 没有未知语义漂移 |
| H | 真实浏览器 | Chrome Worker、OPFS、UI 状态和资源释放通过 |
| I | 能力提升 | A-H 全过focused gate 与 exact blocker 同步 |
缺少任一阶段时,能力最多保持 `compatible` 或既有的显式 `proxy` 等级。
## 6. 最近完成证据
### `TSN-PAIR-cut-thickness`
`cut->thickness` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder以贯穿半体工具生成体积 `500` 的有效单 Solid 和 98 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` builder对锁定的原生 Face 执行厚壳。
- 原凹腔 Cut 的非平凡厚壳轨迹存在原生 history 内容漂移,未被误记为恢复;任务改用仍由真实 Cut 产生的稳定单 Solid。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹改变体积与面积,并精确恢复名义摘要、原始 history 哈希和语义 naming。
- 名义结果为有效 1 Solid体积 `129.056`,包含 38 条原生 history 记录。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-cut-draft`
`cut->draft` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` builder对锁定的原生 Face、中性面和拉伸方向执行拔模。
- `5 -> 8 -> 5` 角度轨迹改变体积与面积,并精确恢复名义摘要和语义 naming。
- 名义结果为有效 1 Solid体积 `892.2556682`,包含 5 条原生 history 记录。
- 下游获得唯一 `native-evidence` naming且上游 Cut 证据在恢复态保持一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-cut-hole`
`cut->hole` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder对 Cut 结果执行中心贯穿孔。
- `1 -> 1.5 -> 1` 半径轨迹改变体积、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `904.5840735`,包含 34 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-cut-chamfer`
`cut->chamfer` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` builder对 Cut 结果执行全边倒角。
- `0.4 -> 0.6 -> 0.4` 距离轨迹改变体积与面积,并精确恢复名义摘要和语义 naming。
- 名义结果为有效 1 Solid体积 `926.8266667`,包含 298 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-cut-fillet`
`cut->fillet` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeFillet` builder对 Cut 结果执行全边圆角。
- `0.4 -> 0.6 -> 0.4` 半径轨迹改变体积与面积,并精确恢复名义摘要和语义 naming。
- 名义结果为有效 1 Solid体积 `931.9696595`,包含 298 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-cut-groove`
`cut->groove` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 Cut 结果执行旋转减料。
- `360 -> 180 -> 360` 角度轨迹改变拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `931.287611`,包含 18 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-cut-revolution`
`cut->revolution` 已完成原生拒绝分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 角度轨迹中稳定拒绝 Cut Solid 输入,且不产生结果 Shape 或 history。
- FreeCAD `Part::Revolution` 使用同一 Cut Solid 作为 Source返回 `Solids are not Processed`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Cut 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-cut-pipe`
`cut->pipe` 已完成原生拒绝分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中只生成无效 Shape该结果仅记为 kernel-invalid-result 诊断。
- FreeCAD `Part::Sweep` 对 Cut Solid section 返回 `A fatal error occurred when making the sweep`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Cut 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 无效结果、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-cut-loft`
`cut->loft` 已完成原生拒绝分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中生成有效 Shape但该结果仅记为 kernel-superset 诊断。
- FreeCAD `Part::Loft` 对 Cut Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Cut 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 诊断、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-cut-pocket`
`cut->pocket` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder对 Cut 结果执行减料拉伸。
- `5 -> 4 -> 5` 深度轨迹改变体积、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `906`,包含 70 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-cut-pad`
`cut->pad` 已完成原生拒绝分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- OCCT `BRepPrimAPI_MakePrism` 在 `5 -> 7.5 -> 5` 长度轨迹中稳定拒绝 Cut Solid 输入,且不产生结果 Shape 或 history。
- FreeCAD `PartDesign::Pad` 使用同一 Cut Solid 作为 Profile返回 `FeatureExtrusion: Length: Could not extrude the sketch!`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Cut 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-cut-common`
`cut->common` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder对 Cut 结果执行布尔交集。
- `4 -> 5 -> 4` 工具 X 偏移轨迹改变体积、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `93`,包含 148 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-cut-cut`
`cut->cut` 已完成原生接受分类:
- 第一、第二阶段均使用真实 `BRepAlgoAPI_Cut` 双输入 builder。
- 上游 Cut 结果为有效 1 Solid体积 `936`,包含 22 条原生 history 记录。
- `3 -> 4 -> 3` 工具尺寸轨迹改变体积、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义下游结果为有效 1 Solid体积 `909`,包含 42 条原生 history 记录。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 锁定两阶段 builder、变异和恢复偏移后摘要不变的弱轨迹未被采用。
### `TSN-PAIR-cut-fuse`
`cut->fuse` 已完成原生接受分类,并验证分类器可跨起始操作保持连续前缀:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder对 Cut 结果执行布尔并集。
- `8 -> 9 -> 8` 工具 X 偏移轨迹改变几何并精确恢复名义摘要、history 和语义 naming。
- 名义结果为有效 1 Solid体积 `1011`,包含 52 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 同时锁定第一、第二 builder防止跨行后仍误报 Fuse 起点。
### `TSN-PAIR-fuse-multi-transform`
`fuse->multi-transform` 已完成原生接受分类,并闭合 Fuse 起始行的全部 19 个有序操作对:
- 上游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并生成有效单 Solid。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder组合平移和镜像两步生成 4 个可追踪实例。
- `8 -> 9 -> 8` 首步 X 平移轨迹改变几何、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `2750`,包含 769 条原生 history 记录。
- 上游 Fuse naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
- 机器队列已从 Fuse 行末严格推进到下一行首项,没有跳号或第二个活动任务。
### `TSN-PAIR-fuse-mirrored`
`fuse->mirrored` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并生成有效单 Solid。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 生成内部平面镜像副本。
- `5 -> 6 -> 5` 镜像平面 X 原点轨迹改变几何、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `1150`,包含 224 条原生 history 记录。
- 上游 Fuse naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-polar-pattern`
`fuse->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并生成有效单 Solid。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 生成绕 Z 轴的旋转副本阵列。
- `30 -> 45 -> 30` 角度轨迹改变几何、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `1510.7700496`,包含 178 条原生 history 记录。
- 上游 Fuse naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-linear-pattern`
`fuse->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并生成有效单 Solid。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 生成重叠平移副本阵列。
- `8 -> 9 -> 8` X 平移轨迹改变几何、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `1875`,包含 141 条原生 history 记录。
- 完全分离时的 0-history 结果未被误记为接受focused gate 强制原生 source history 非空。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-thickness`
`fuse->thickness` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Fuse` 同形双输入 builder生成有效 6 面单 Solid 和 156 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` builder对锁定的原生 Face 执行厚壳。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹改变几何并精确恢复名义摘要、history 和语义 naming。
- 名义结果为有效 1 Solid体积 `187.456`,包含 38 条原生 history 记录。
- 原始部分重叠 Fuse 的 no-op 结果未被误记为接受focused gate 强制变异必须改变 Shape 摘要。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-draft`
`fuse->draft` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并生成有效单 Solid。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` builder对锁定的原生 Face、中性面和拉伸方向执行拔模。
- `5 -> 8 -> 5` 角度轨迹改变几何并精确恢复名义摘要、history 和语义 naming。
- 名义结果为有效 1 Solid体积 `1031.2556682`,包含 5 条原生 history 记录。
- 下游获得唯一 `native-evidence` naming且上游 Fuse 证据在恢复态保持一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-hole`
`fuse->hole` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并生成有效单 Solid。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder 执行中心贯穿孔。
- `1 -> 1.5 -> 1` 半径轨迹改变几何并精确恢复名义摘要、history 和语义 naming。
- 名义结果为有效 1 Solid体积 `1043.5840735`,包含 23 条原生 history 记录。
- 下游获得唯一 `native-evidence` naming且上游 Fuse 证据在恢复态保持一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-chamfer`
`fuse->chamfer` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并生成有效单 Solid。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` builder 对 Fuse 结果执行全边倒角。
- `0.4 -> 0.6 -> 0.4` 距离轨迹改变几何并精确恢复名义摘要、history 和语义 naming。
- 名义结果为有效 1 Solid体积 `1489.1413333`,包含 270 条原生 history 记录。
- 上游 Fuse naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-fillet`
`fuse->fillet` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并生成有效单 Solid。
- 下游使用真实 `BRepFilletAPI_MakeFillet` builder 对 Fuse 结果执行全边圆角。
- `0.4 -> 0.6 -> 0.4` 半径轨迹改变几何并精确恢复名义摘要、history 和语义 naming。
- 名义结果为有效 1 Solid体积 `1495.2786299`,包含 270 条原生 history 记录。
- 上游 Fuse naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-groove`
`fuse->groove` 已完成原生接受分类:
- 生产路径使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder。
- `360 -> 180 -> 360` 角度轨迹改变几何与 history并精确恢复名义摘要和语义 naming。
- 名义结果为有效 1 Solid体积 `1070.287611`,包含 18 条原生 history 记录。
- 上游 Fuse naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-fuse-revolution`
`TSN-PAIR-fuse-revolution` 已完成原生分类:
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 参数轨迹中稳定拒绝 Fuse Solid 输入。
- FreeCAD `Part::Revolution` 返回 `Solids are not Processed`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`。
- transaction abort 后对象集与源 Shape 完整恢复。
- 干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 builder、异常传输、诊断和回滚证据。
### `TSN-PAIR-cut-linear-pattern`
`cut->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 生成重叠平移副本阵列。
- `8 -> 9 -> 8` X 平移轨迹改变几何、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `1672`,包含 89 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据,机器队列严格推进一项。
### `TSN-PAIR-cut-polar-pattern`
`cut->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 生成绕 Z 轴的旋转副本阵列。
- `30 -> 45 -> 30` 角度轨迹改变几何、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `1361.9420727`,包含 160 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据,机器队列严格推进一项。
### `TSN-PAIR-cut-mirrored`
`cut->mirrored` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 生成内部平面镜像副本。
- `5 -> 6 -> 5` 镜像平面 X 原点轨迹改变几何、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `968`,包含 230 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据,机器队列严格推进一项。
### `TSN-PAIR-cut-multi-transform`
`cut->multi-transform` 已完成原生接受分类,并闭合 Cut 起始行的全部 19 个有序操作对:
- 上游使用真实 `BRepAlgoAPI_Cut` 双输入 builder生成有效单 Solid 和 22 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder组合平移和镜像两步生成 4 个可追踪实例。
- `8 -> 9 -> 8` 首步 X 平移轨迹改变几何、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `2440`,包含 670 条原生 history 记录。
- 上游 Cut naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据,机器队列已从 Cut 行末严格推进到 Common 行首项。
### `TSN-PAIR-common-fuse`
`common->fuse` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder以体积交叠生成有效 1 Solid体积 `125`,并包含 94 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder重叠合并 Common 结果与工具体。
- `8 -> 7 -> 8` 工具 X 偏移轨迹改变体积与边界并精确恢复名义摘要、history 与语义 naming。
- 名义下游结果为有效 1 Solid体积 `225`,包含 66 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 Common 上游构造、两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-cut`
`common->cut` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder对 Common 结果执行布尔减料。
- `4 -> 3 -> 4` 工具尺寸轨迹改变体积与 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `93`,包含 64 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-common`
`common->common` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游再次使用真实 `BRepAlgoAPI_Common` 双输入 builder两个锁定工具位置都与上游 Solid 存在体积交叠。
- `7 -> 6 -> 7` 工具 X 偏移轨迹使体积从 `32` 变为 `48`并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 121 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-rotate`
`common->rotate` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder对 Common 结果执行绕 Z 轴旋转。
- `15 -> 22.5 -> 15` 角度轨迹在保持体积 `125` 的同时改变包围盒,并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid包含 78 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-pad`
`common->pad` 已完成原生拒绝分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- OCCT `BRepPrimAPI_MakePrism` 在 `5 -> 7.5 -> 5` 长度轨迹中稳定拒绝 Common Solid 输入,且不产生结果 Shape 或 history。
- FreeCAD `PartDesign::Pad` 使用同一 Common Solid 作为 Profile返回 `FeatureExtrusion: Length: Could not extrude the sketch!`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Common 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-common-pocket`
`common->pocket` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder在原点处生成体积 `125` 的有效单 Solid 和 105 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder对 Common 结果执行减料拉伸。
- `5 -> 4 -> 5` 深度轨迹改变体积、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `95`,包含 64 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定上游实体交叠、两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-loft`
`common->loft` 已完成原生拒绝分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中生成有效 Shape但该结果仅记为 kernel-superset 诊断。
- FreeCAD `Part::Loft` 对 Common Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Common 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 诊断、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-common-pipe`
`common->pipe` 已完成原生拒绝分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中只生成无效 Shape该结果仅记为 kernel-invalid-result 诊断。
- FreeCAD `Part::Sweep` 对 Common Solid section 返回 `A fatal error occurred when making the sweep`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Common 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 无效结果、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-common-revolution`
`common->revolution` 已完成原生拒绝分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 角度轨迹中稳定拒绝 Common Solid 输入,且不产生结果 Shape 或 history。
- FreeCAD `Part::Revolution` 使用同一 Common Solid 作为 Source返回 `Solids are not Processed`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Common 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-common-groove`
`common->groove` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder在原点处生成体积 `125` 的有效单 Solid 和 105 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 Common 结果执行旋转减料。
- `360 -> 180 -> 360` 角度轨迹改变拓扑与 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `120.287611`,包含 28 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定上游实体交叠、两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-fillet`
`common->fillet` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 Common 结果执行全边圆角。
- `0.4 -> 0.6 -> 0.4` 半径轨迹改变体积与面积并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid体积 `123.0255334`,包含 150 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-chamfer`
`common->chamfer` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 Common 结果执行全边倒角。
- `0.4 -> 0.6 -> 0.4` 距离轨迹改变体积与面积并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid体积 `120.5413333`,包含 150 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-hole`
`common->hole` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder对 Common 结果执行边界角贯穿孔。
- `1 -> 1.5 -> 1` 半径轨迹改变体积与面积并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid体积 `117.1460184`,包含 30 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-draft`
`common->draft` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` 单输入 builder对 Common 结果的锁定原生 Face 执行拔模。
- `5 -> 8 -> 5` 角度轨迹改变体积与面积并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid体积 `119.5319585`,包含 5 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-thickness`
`common->thickness` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder对 Common 结果的锁定原生 Face 执行厚壳。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹改变体积与面积并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid体积 `43.856`,包含 38 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-linear-pattern`
`common->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Common 结果平移复制并融合为一个可追踪 Solid。
- 原 `8` 单位平移会产生两个分离 Solid 且无可用 history未被误记为接受改用保持实体交叠的 `4 -> 3 -> 4` 轨迹。
- 专用平移轨迹使体积在 `225 -> 200 -> 225` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 66 条原生 history 记录。
- 上游 Common naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定专用变异轨迹、两阶段 builder、输入数、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-polar-pattern`
`common->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Common 结果绕锁定原生轴旋转复制并融合。
- `30 -> 45 -> 30` 角度轨迹改变体积、拓扑与边界,体积在 `220.0961894 -> 247.5 -> 220.0961894` 间变化,并精确恢复原生摘要与语义 naming。
- 名义结果为有效 1 Solid包含 48 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-mirrored`
`common->mirrored` 已完成原生接受分类:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Common 结果绕锁定平面镜像复制并融合。
- `5 -> 6 -> 5` 镜像面 X 原点轨迹改变体积与边界,体积在 `200 -> 150 -> 200` 间变化,并精确恢复原生摘要与语义 naming。
- 名义结果为有效 1 Solid包含 66 条原生 history 记录。
- 上游 Common naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-common-multi-transform`
`common->multi-transform` 已完成原生接受分类,并闭合 Common 起始行的全部 19 个有序操作对:
- 上游使用真实 `BRepAlgoAPI_Common` 双输入 builder生成体积 `125` 的有效单 Solid 和 94 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder组合平移和镜像两步并保留每个实例的原生追踪关系。
- 默认 `8` 单位首步平移会形成 3 个分离 Solid未被误用改用保持全部实例连通的 `4 -> 3 -> 4` 专用轨迹。
- 首步 X 平移轨迹使体积在 `400 -> 350 -> 400` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid名义与恢复态均包含 367 条原生 history 记录。
- 上游 Common naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 ordered builder、专用变异轨迹、输入数、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-fuse`
`rotate->fuse` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder对 Rotate 结果执行布尔并集。
- 默认工具 X 偏移 `12` 会产生两个分离 Solid 且 history 为空,未被误记为接受;改用保持实体交叠的 `8 -> 7 -> 8` 专用轨迹。
- 工具偏移轨迹使体积在 `1107.0432067 -> 1092.0913015 -> 1107.0432067` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 39 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、专用变异轨迹、输入数、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-cut`
`rotate->cut` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder对 Rotate 结果执行布尔减料。
- `4 -> 3 -> 4` 工具尺寸轨迹改变体积与面积,体积在 `953.1487483 -> 981.4403996 -> 953.1487483` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 53 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、输入数、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-common`
`rotate->common` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder对 Rotate 结果执行布尔交集。
- 默认工具 X 偏移 `10` 与旋转实体无交叠并被原生 builder 拒绝,未被误记为接受;改用 `7 -> 6 -> 7` 专用轨迹。
- 工具偏移轨迹使交集体积在 `32.9086985 -> 49.2003498 -> 32.9086985` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 136 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、专用变异轨迹、输入数、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-rotate`
`rotate->rotate` 已完成原生接受分类:
- 上下游均使用真实 `BRepBuilderAPI_Transform` 单输入 builder两阶段均生成有效单 Solid 和 78 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹保持体积 `1000` 和拓扑不变,但明确改变世界空间边界,未因体积不变而误判为无变异。
- 恢复态精确返回名义摘要、原生 history 与语义 naming。
- 上游 Rotate naming 证据向下游传播,下游获得完整原生证据。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、边界变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-pad`
`rotate->pad` 已完成原生拒绝分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- OCCT `BRepPrimAPI_MakePrism` 在 `5 -> 7.5 -> 5` 长度轨迹中稳定拒绝 Rotate Solid 输入,且不产生结果 Shape 或 history。
- FreeCAD `PartDesign::Pad` 使用同一 Rotate Solid 作为 Profile返回 `FeatureExtrusion: Length: Could not extrude the sketch!`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Rotate 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定跨行首阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-rotate-pocket`
`rotate->pocket` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder对 Rotate 结果执行减料拉伸。
- `5 -> 4 -> 5` 深度轨迹改变体积与面积,体积在 `972.6794919 -> 978.1435935 -> 972.6794919` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 56 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、两输入减料、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-loft`
`rotate->loft` 已完成原生拒绝分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中生成有效 Shape 和 24 条 history但该结果仅记为 kernel-superset 诊断。
- FreeCAD `Part::Loft` 对 Rotate Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Rotate 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-rotate-pipe`
`rotate->pipe` 已完成原生拒绝分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中生成体积 `1500 -> 1200 -> 1500` 的有效单 Solid 和 28 条 history但该结果仅记为 kernel-superset 诊断。
- FreeCAD `Part::Sweep` 对 Rotate Solid section 返回 `A fatal error occurred when making the sweep`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Rotate 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-rotate-revolution`
`rotate->revolution` 已完成原生拒绝分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 角度轨迹中稳定拒绝 Rotate Solid 输入,三次均在 builder 阶段传输原生 C++ 异常,且不产生结果 Shape 或 history。
- FreeCAD `Part::Revolution` 使用同一 Rotate Solid 作为 Source返回该操作对专有诊断 `BRep_API: command not done`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Rotate 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定跨行首阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-rotate-groove`
`rotate->groove` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 Rotate 结果执行旋转槽减料。
- `360 -> 180 -> 360` 角度轨迹改变体积与拓扑:名义态体积为 `992.0171547`、10 Face编辑态体积为 `1000`、8 Face并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 22 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、双输入减料、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-chamfer`
`rotate->chamfer` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 Rotate 结果的锁定原生边执行倒角。
- `0.4 -> 0.6 -> 0.4` 距离轨迹改变体积、面积与边界,体积在 `990.7413333 -> 979.552 -> 990.7413333` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 150 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、原生边选择、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-hole`
`rotate->hole` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 单输入 builder以锁定位置和方向的圆柱刀具贯穿 Rotate 结果。
- `1 -> 1.5 -> 1` 半径轨迹改变体积与面积,体积在 `968.5840735 -> 929.3141653 -> 968.5840735` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 23 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、圆柱减料、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-draft`
`rotate->draft` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` 单输入 builder对 Rotate 结果的锁定原生 Face 执行拔模。
- `5 -> 8 -> 5` 角度轨迹改变体积与面积,体积在 `956.2556682 -> 929.7295826 -> 956.2556682` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 5 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、原生 Face 选择、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-thickness`
`rotate->thickness` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder对 Rotate 结果的锁定原生 Face 执行厚壳。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹改变体积与面积,体积在 `187.456 -> 272.064 -> 187.456` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 38 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、原生 Face 选择、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-linear-pattern`
`rotate->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Rotate 结果沿 X 方向平移复制并融合为一个可追踪 Solid。
- `8 -> 9 -> 8` 平移轨迹保持实例交叠,体积在 `1819.7958971 -> 1899.7703843 -> 1819.7958971` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 48 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-polar-pattern`
`rotate->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Rotate 结果绕锁定 Z 轴旋转复制并融合。
- `30 -> 45 -> 30` 角度轨迹改变体积、面积与边界,体积在 `1422.6497308 -> 1585.7864376 -> 1422.6497308` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 78 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、旋转实例融合、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-mirrored`
`rotate->mirrored` 已完成原生接受分类:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Rotate 结果绕锁定平面镜像复制并融合。
- `5 -> 6 -> 5` 镜像面 X 原点轨迹改变体积、面积与边界,体积在 `1329.767789 -> 1517.3794222 -> 1329.767789` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 80 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定跨行首阶段 builder、镜像实例融合、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-rotate-multi-transform`
`rotate->multi-transform` 已完成原生接受分类,并闭合机器队列中 Rotate 起始行的剩余有序操作对:
- 上游使用真实 `BRepBuilderAPI_Transform` 单输入 builder生成体积 `1000` 的有效单 Solid 和 78 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder组合 X 平移和 X=5 镜像两步并保留每个实例的原生追踪关系。
- `8 -> 9 -> 8` 首步 X 平移轨迹保持全部实例连通,体积在 `2392.1349751 -> 2589.9081788 -> 2392.1349751` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid名义与编辑态均包含 470 条原生 history 记录。
- 上游 Rotate naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 ordered builder、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-fuse`
`pad->fuse` 已完成原生接受分类,并建立 Pad 起始行的真实 Profile 基线:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history未复用 Solid-as-profile 拒绝输入。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder对 Pad 结果执行布尔并集。
- 默认工具 X 偏移 `12` 会产生分离实体,未被误记为接受;改用保持实体交叠的 `8 -> 7 -> 8` 专用轨迹。
- 工具偏移轨迹使体积在 `575 -> 550 -> 575` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 57 条原生 history 记录。
- 上游 Pad naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、两阶段 builder、专用变异轨迹、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-cut`
`pad->cut` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder对 Pad 结果执行布尔减料。
- `4 -> 3 -> 4` 工具尺寸轨迹改变体积与面积,体积在 `436 -> 473 -> 436` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 22 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、双输入减料、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-common`
`pad->common` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder对 Pad 结果执行布尔交集。
- 默认工具 X 偏移 `10` 仅与 Pad 边界相切且没有实体交集,未被误记为接受;改用 `7 -> 6 -> 7` 专用轨迹。
- 工具偏移轨迹使交集体积在 `75 -> 100 -> 75` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 117 条原生 history 记录。
- 上游 Pad naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、专用交叠轨迹、双输入 builder、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-rotate`
`pad->rotate` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder对 Pad 结果执行刚性旋转。
- `15 -> 22.5 -> 15` 角度轨迹保持体积 `500` 和拓扑不变,但明确改变世界空间边界,未因体积不变而误判为无变异。
- 名义与恢复态均包含 78 条原生 history并精确恢复摘要和语义 naming。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、两阶段 builder、边界变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-pad`
`pad->pad` 已完成原生拒绝分类,并补齐 Pad STEP 聚合结构的拒绝重放规则:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- OCCT `BRepPrimAPI_MakePrism` 在 `5 -> 7.5 -> 5` 长度轨迹中稳定拒绝第一个 Pad 的 Solid 输入,三次均在 builder 阶段传输原生 C++ 异常,且不产生结果 Shape 或 history。
- FreeCAD STEP 导入保留 `App::Part` 聚合容器,并唯一选择有效单 Solid 的 `Part::Feature` 叶节点作为 Profile零个或多个实体叶节点仍 fail-closed。
- FreeCAD `PartDesign::Pad` 返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,结果 Shape 为空且状态包含 `Invalid`。
- transaction abort 后 10 个导入结构/基准对象、源实体 BREP 与对象集完整恢复;无穷参考线面只比较对象语义,实体 Shape 仍逐字段比较。
- 干净 FCStd save/reopen/resave 三阶段一致,拒绝任务没有伪造下游 naming 或变异证据。
- focused ordered-pair gate 已锁定真实 Profile 上游、异常传输、STEP 叶节点选择、精确诊断、回滚和持久化证据。
### `TSN-PAIR-pad-pocket`
`pad->pocket` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder对 Pad 结果执行减料拉伸。
- `5 -> 4 -> 5` 深度轨迹改变体积、面积与拓扑,体积在 `470 -> 476 -> 470` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 64 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实上游/下游 Profile、双输入减料、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-loft`
`pad->loft` 已完成原生拒绝分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中均生成体积 `655` 的有效单 Solid 和 24 条 history但该结果仅记为 kernel-superset 诊断。
- FreeCAD `Part::Loft` 对 Pad Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后 STEP 聚合结构、对象集与 Pad 源实体 BREP 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、STEP 叶节点选择、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-pad-pipe`
`pad->pipe` 已完成原生拒绝分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中生成体积 `1500 -> 1200 -> 1500` 的有效单 Solid 和 28 条 history但该结果仅记为 kernel-superset 诊断。
- FreeCAD `Part::Sweep` 对 Pad Solid section 返回 `A fatal error occurred when making the sweep`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后 STEP 聚合结构、对象集与 Pad 源实体 BREP 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、STEP 叶节点选择、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-pad-revolution`
`pad->revolution` 已完成原生拒绝分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 角度轨迹中稳定拒绝 Pad Solid 输入,三次均在 builder 阶段传输原生 C++ 异常,且不产生结果 Shape 或 history。
- FreeCAD `Part::Revolution` 使用同一 Pad Solid 作为 Source返回 `Solids are not Processed`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后 STEP 聚合结构、对象集与 Pad 源实体 BREP 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定异常传输、STEP 叶节点选择、精确诊断、回滚和持久化证据。
### `TSN-PAIR-pad-groove`
`pad->groove` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实旋转轮廓和 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 Pad 结果执行旋转槽减料。
- `360 -> 180 -> 360` 角度轨迹改变体积与拓扑:名义态体积为 `495.287611`、10 Face编辑态体积为 `500`、7 Face并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 18 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、双输入旋转减料、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-fillet`
`pad->fillet` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 Pad 结果的锁定原生边执行倒圆。
- `0.4 -> 0.6 -> 0.4` 半径轨迹改变体积与面积,体积在 `496.6520816 -> 492.5636085 -> 496.6520816` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 150 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、原生边选择、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-chamfer`
`pad->chamfer` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 Pad 结果的锁定原生边执行倒角。
- `0.4 -> 0.6 -> 0.4` 距离轨迹改变体积与面积,体积在 `492.3413333 -> 483.152 -> 492.3413333` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 150 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、原生边选择、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-hole`
`pad->hole` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 单输入 builder以锁定位置和方向的圆柱刀具贯穿 Pad 结果。
- `1 -> 1.5 -> 1` 半径轨迹改变体积与面积,体积在 `484.2920367 -> 464.6570826 -> 484.2920367` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 23 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、圆柱减料、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-draft`
`pad->draft` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` 单输入 builder对 Pad 结果的锁定原生 Face 执行拔模。
- `5 -> 8 -> 5` 角度轨迹改变体积与面积,体积在 `489.0639171 -> 482.4323957 -> 489.0639171` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 5 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、原生 Face 选择、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-thickness`
`pad->thickness` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder对 Pad 结果的锁定原生 Face 执行厚壳。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹改变体积与面积,体积在 `129.056 -> 185.664 -> 129.056` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 38 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、原生 Face 选择、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-linear-pattern`
`pad->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Pad 结果沿 X 方向平移复制并融合为一个可追踪 Solid。
- `8 -> 9 -> 8` 平移轨迹保持实例交叠,体积在 `900 -> 950 -> 900` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 66 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-polar-pattern`
`pad->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Pad 结果绕锁定 Z 轴旋转复制并融合。
- `30 -> 45 -> 30` 角度轨迹改变体积、面积与边界,体积在 `711.3248654 -> 792.8932188 -> 711.3248654` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 78 条原生 history 记录。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、旋转实例融合、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-mirrored`
`pad->mirrored` 已完成原生接受分类:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Pad 结果绕锁定平面镜像复制并融合。
- 名义 X=5 镜像与对称 Pad 本体完全重合,但仍保留 156 条原生 history`5 -> 6 -> 5` 轨迹在编辑态产生体积 `600`、14 Face 的单 Solid。
- 恢复态精确返回体积 `500`、6 Face 的名义摘要、history 与语义 naming。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、完全重合名义态、镜像实例融合、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pad-multi-transform`
`pad->multi-transform` 已完成原生接受分类,并闭合 Pad 起始行的全部 19 个有序操作对:
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder先执行 X 平移,再镜像平移结果并保留每个实例的原生追踪关系。
- `8 -> 9 -> 8` 首步 X 平移轨迹保持全部实例连通,体积在 `1300 -> 1400 -> 1300` 间变化,名义边界覆盖 X=`[-8, 18]`。
- 名义与编辑态均包含 355 条原生 history恢复态精确返回名义摘要、history 与语义 naming。
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、ordered builder、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-fuse`
`pocket->fuse` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder对 Pocket 结果执行布尔并集。
- 默认工具 X 偏移 `12` 会产生分离实体,未被误记为接受;改用保持实体交叠的 `8 -> 7 -> 8` 专用轨迹。
- 工具偏移轨迹使体积在 `1045 -> 1020 -> 1045` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 52 条原生 history 记录。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、两阶段双输入 builder、专用变异轨迹、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-cut`
`pocket->cut` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder对 Pocket 结果继续执行布尔减料。
- `4 -> 3 -> 4` 工具尺寸轨迹改变体积、面积与拓扑,体积在 `906 -> 943 -> 906` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 48 条原生 history 记录。
- 上游 Pocket naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、两阶段双输入减料、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-common`
`pocket->common` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder对 Pocket 结果执行布尔交集。
- 默认工具 X 偏移 `10` 仅与 Pocket 外边界相切且没有实体交集,未被误记为接受;改用 `7 -> 6 -> 7` 专用轨迹。
- 工具偏移轨迹使交集体积在 `75 -> 100 -> 75` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 178 条原生 history 记录。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、专用交叠轨迹、两阶段双输入 builder、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-rotate`
`pocket->rotate` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder将 Pocket 结果绕锁定 Z 轴旋转。
- `15 -> 22.5 -> 15` 角度轨迹改变边界并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid体积 `970`,包含 135 条原生 history 记录。
- 上游 Pocket naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、两阶段 builder、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-pad`
`pocket->pad` 已完成原生拒绝分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- OCCT `BRepPrimAPI_MakePrism` 在 `5 -> 7.5 -> 5` 长度轨迹中稳定拒绝 Pocket Solid 输入,且不产生结果 Shape 或 history。
- FreeCAD `PartDesign::Pad` 使用同一 Pocket Solid 作为 Profile返回 `FeatureExtrusion: Length: Could not extrude the sketch!`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Pocket 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-pocket-pocket`
`pocket->pocket` 已完成原生接受分类:
- 第一、第二阶段均使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder上游 Pocket 生成体积 `970` 的有效单 Solid。
- 下游使用锁定的 `3x3` Face Profile避免默认 `2x3` Profile 只重复切除已空区域而产生无效变异轨迹。
- `5 -> 4 -> 5` 深度轨迹使体积在 `955 -> 958 -> 955` 间变化,同时改变拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid包含 111 条原生 history 记录。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段双输入 builder、非平凡 Profile、深度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-loft`
`pocket->loft` 已完成原生拒绝分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中生成有效 Shape但该结果仅记为 kernel-superset 诊断。
- FreeCAD `Part::Loft` 对 Pocket Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Pocket 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-pocket-pipe`
`pocket->pipe` 已完成原生拒绝分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 初始的 kernel-invalid 预期被真实 probe 否定OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中生成有效 Shape但该结果仅记为 kernel-superset 诊断。
- FreeCAD `Part::Sweep` 对 Pocket Solid section 返回 `A fatal error occurred when making the sweep`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Pocket 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-pocket-revolution`
`pocket->revolution` 已完成原生拒绝分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 角度轨迹中稳定拒绝 Pocket Solid 输入,且不产生结果 Shape 或 history。
- FreeCAD `Part::Revolution` 使用同一 Pocket Solid 作为 Source返回 `Solids are not Processed`。
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
- transaction abort 后对象集与 Pocket 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-pocket-groove`
`pocket->groove` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 Pocket 结果执行旋转减料。
- `360 -> 180 -> 360` 角度轨迹改变体积、拓扑和 history并精确恢复名义摘要与语义 naming。
- 名义结果为有效 1 Solid体积 `966.8584073`,包含 40 条原生 history 记录。
- 上游 Pocket naming 证据向下游传播,恢复态语义摘要与名义态一致。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段双输入 builder、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-fillet`
`pocket->fillet` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 Pocket 结果的锁定原生边执行倒圆。
- `0.4 -> 0.6 -> 0.4` 半径轨迹改变体积与面积,体积在 `965.9792974 -> 961.0655284 -> 965.9792974` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 44 Face 和 261 条原生 history 记录。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、原生边选择、半径变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-chamfer`
`pocket->chamfer` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 Pocket 结果的锁定原生边执行倒角。
- `0.4 -> 0.6 -> 0.4` 距离轨迹改变体积与面积,体积在 `960.848 -> 949.912 -> 960.848` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 44 Face 和 261 条原生 history 记录。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、原生边选择、距离变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-hole`
`pocket->hole` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 单输入 builder以锁定位置和方向的圆柱刀具贯穿 Pocket 结果。
- `1 -> 1.5 -> 1` 半径轨迹改变体积与面积,体积在 `938.5840735 -> 899.3141653 -> 938.5840735` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 23 条原生 history 记录,下游 naming 状态为无歧义 `native-evidence`。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、圆柱减料、半径变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-draft`
`pocket->draft` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` 单输入 builder对 Pocket 结果的锁定原生 Face、中性面和拉伸方向执行拔模。
- `5 -> 8 -> 5` 角度轨迹改变体积与面积,体积在 `929.5364931 -> 904.999864 -> 929.5364931` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 7 条原生 history 记录,下游 naming 状态为无歧义 `native-evidence`。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、原生 Face 选择、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-thickness`
`pocket->thickness` 已完成原生接受分类:
- 上游使用真实 `10x10` Box 与 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder按专用 `5x10` Profile 贯穿切除,生成体积 `500` 的有效单 Solid 和 25 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder对锁定的原生 Face 执行厚壳;名义结果为有效 1 Solid、11 Face体积 `129.056`。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹使体积在 `129.056 -> 185.664 -> 129.056` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、原生 Face 选择、offset 变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-linear-pattern`
`pocket->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入 builder将 Pocket 结果沿 X 方向平移复制并融合为单 Solid名义体积 `1770`,边界覆盖 X=`[-0, 18]`。
- `8 -> 9 -> 8` 平移轨迹使体积在 `1770 -> 1855 -> 1770` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、单 Solid 约束、平移变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pocket-polar-pattern`
`pocket->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder生成体积 `970` 的有效单 Solid 和 42 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入 builder将 Pocket 结果绕锁定 Z 轴旋转复制并融合为单 Solid名义体积 `1388.0087147`,边界覆盖 X=`[-5, 10]`、Y=`[0, 13.6602542]`。
- `30 -> 45 -> 30` 角度轨迹使体积在 `1388.0087147 -> 1545.7864376 -> 1388.0087147` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Pocket naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定真实 Profile、旋转实例融合、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-loft-fillet`
`loft->fillet` 已完成 Web 原生 history builder 拒绝分类,并显式记录 FreeCAD profile 接受差异:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游 `BRepFilletAPI_MakeFillet` 在 `0.4 -> 0.6 -> 0.4` 半径轨迹中稳定触发 `RuntimeError: table index is out of bounds`,三次尝试均没有产生 Shape、history 或 naming。
- FreeCAD 1.1.1 `Part::Fillet` 对同一 Loft Solid 重算成功,状态为 `Valid` / `Up-to-date`;该差异被锁定为 Web 原生 history builder 中止,没有伪造 FreeCAD 拒绝。
- transaction abort 后对象集与 Loft 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 WASM abort 签名、FreeCAD 接受对照、精确回滚和持久化证据。
### `TSN-PAIR-loft-chamfer`
`loft->chamfer` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 Loft 结果的原生边执行倒角。
- `0.4 -> 0.6 -> 0.4` 距离轨迹使体积在 `1489.1413333 -> 1475.952 -> 1489.1413333` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、26 Face包含 150 条原生 history 记录。
- 上游 Loft naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、原生边选择、距离变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-loft-hole`
`loft->hole` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder以锁定位置和方向的圆柱刀具贯穿 Loft 结果。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `1462.3008882 -> 1415.1769984 -> 1462.3008882` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 13 条原生 history 记录,下游 naming 状态为无歧义 `native-evidence`。
- 上游 Loft naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、圆柱减料、半径变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-loft-draft`
`loft->draft` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` 单输入 builder对 Loft 结果的锁定原生 Face、中性面和拉伸方向执行拔模。
- `5 -> 8 -> 5` 角度轨迹使体积在 `1401.5752535 -> 1341.891561 -> 1401.5752535` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid包含 5 条原生 history 记录。
- 上游 Loft naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、原生 Face 选择、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-loft-thickness`
`loft->thickness` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder对锁定的原生 Face 执行厚壳;名义结果为有效 1 Solid、11 Face体积 `245.856`。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹使体积在 `245.856 -> 358.464 -> 245.856` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果包含 38 条原生 history 记录,上游 Loft naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、原生 Face 选择、offset 变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-loft-linear-pattern`
`loft->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入 builder将 Loft 结果沿 X 方向平移复制并融合为单 Solid。
- `8 -> 9 -> 8` 平移轨迹使体积在 `2700 -> 2850 -> 2700` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、14 Face边界覆盖 X=`[0, 18]`,包含 66 条原生 history 记录。
- 上游 Loft naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、单 Solid 约束、平移变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-loft-polar-pattern`
`loft->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入 builder将 Loft 结果绕锁定 Z 轴旋转复制并融合为单 Solid。
- `30 -> 45 -> 30` 角度轨迹使体积在 `2133.9745962 -> 2378.6796564 -> 2133.9745962` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、12 Face边界覆盖 X=`[-5, 10]`、Y=`[0, 13.660254]`,包含 78 条原生 history 记录。
- 上游 Loft naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 builder、旋转实例融合、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-loft-mirrored`
`loft->mirrored` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入 builder将 Loft 结果绕锁定平面镜像复制并融合。
- 名义 X=5 镜像与 Loft 本体完全重合但仍保留 156 条原生 history`5 -> 6 -> 5` 轨迹使体积在 `1500 -> 1800 -> 1500` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、6 FaceFreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
- 上游 Loft naming 证据向下游传播focused ordered-pair gate 已锁定重合名义对照、镜像实例融合、变异、恢复、history 和持久化证据。
### `TSN-PAIR-loft-multi-transform`
`loft->multi-transform` 已完成原生接受分类,并闭合 Loft 起始行全部 19 个有序操作对:
- 上游使用真实 `BRepOffsetAPI_ThruSections` 双输入 builder生成体积 `1500` 的有效单 Solid 和 24 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder先执行 X 平移,再镜像平移结果并保留每个实例的原生追踪关系。
- `8 -> 9 -> 8` 首步 X 平移轨迹使体积在 `3900 -> 4200 -> 3900` 间变化,名义边界覆盖 X=`[-8, 18]`并精确恢复名义摘要、history 与语义 naming。
- 名义与编辑态均包含 355 条原生 history结果为有效 1 Solid、22 Face。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定 ordered builder、实例追踪、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-fuse`
`pipe->fuse` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以真实 `2x3` Face section 沿 15 长度 spine 扫掠,生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder使用与 Pipe 保持交叠的工具。
- `0 -> 0.5 -> 0` 工具 X 偏移轨迹使体积在 `185 -> 192.5 -> 185` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、14 Face包含 66 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定真实 Face section、双输入 builder、交叠变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-cut`
`pipe->cut` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder以贯穿交叠的工具继续减料。
- `0 -> 0.5 -> 0` 工具 X 偏移轨迹使体积在 `66 -> 72 -> 66` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、6 Face、包含 117 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定 Face section、双输入减料 builder、偏移变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-common`
`pipe->common` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder使用与 Pipe 保持交叠的工具。
- `0 -> 0.5 -> 0` 工具 X 偏移轨迹使交集体积在 `24 -> 18 -> 24` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、6 Face、包含 132 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定 Face section、交叠变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-rotate`
`pipe->rotate` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder将 Pipe 结果绕 Z 轴旋转。
- `15 -> 22.5 -> 15` 角度轨迹保持体积 `90`改变边界并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、6 Face、包含 78 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定旋转变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-pad`
`pipe->pad` 已完成原生拒绝分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- OCCT `BRepPrimAPI_MakePrism` 在 `5 -> 7.5 -> 5` 长度轨迹中稳定拒绝 Pipe Solid 输入,不产生结果 Shape 或 history。
- FreeCAD `PartDesign::Pad` 使用同一 Pipe Solid 作 Profile返回 `FeatureExtrusion: Length: Could not extrude the sketch!`;结果 Shape 为空、状态包含 `Invalid`。
- transaction abort 后对象集与 Pipe 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-pipe-pocket`
`pipe->pocket` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder以贯穿 Profile 对 Pipe 结果执行减料。
- `5 -> 4 -> 5` 深度轨迹使体积在 `60 -> 66 -> 60` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、6 Face、包含 98 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定真实 Profile、双输入 builder、深度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-loft`
`pipe->loft` 已完成 FreeCAD 文档前置拒绝分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中均生成有效 Shape仅记为 `kernel-superset-only` 兼容性诊断,三次结果精确恢复。
- FreeCAD `Part::Loft` 对 Pipe Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`,结果 Shape 为空、状态包含 `Invalid`。
- transaction abort 后对象集与 Pipe 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-pipe-pipe`
`pipe->pipe` 已完成 FreeCAD 文档前置拒绝分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- OCCT 下游 `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中均产生无效 Shape`kernel-invalid-result`),三次诊断精确恢复。
- FreeCAD `Part::Sweep` 对 Pipe Solid section 返回 `A fatal error occurred when making the sweep`,结果 Shape 为空、状态包含 `Invalid`。
- transaction abort 后对象集与 Pipe 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 无效结果诊断、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-pipe-revolution`
`pipe->revolution` 已完成原生拒绝分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 角度轨迹中稳定拒绝 Pipe Solid 输入,不产生结果 Shape 或 history。
- FreeCAD `Part::Revolution` 使用同一 Pipe Solid 作 Source返回 `Solids are not Processed`;结果 Shape 为空、状态包含 `Invalid`。
- transaction abort 后对象集与 Pipe 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-pipe-groove`
`pipe->groove` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 Pipe 结果执行旋转减料。
- `360 -> 180 -> 360` 角度轨迹使体积在 `88.4292037 -> 90 -> 88.4292037` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、10 Face、包含 40 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定双输入 builder、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-fillet`
`pipe->fillet` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 Pipe 结果的全部原生边执行圆角。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使体积在 `87.3388075 -> 84.1087417 -> 87.3388075` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、26 Face包含 150 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定原生边选择、半径变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-chamfer`
`pipe->chamfer` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 Pipe 结果的全部原生边执行倒角。
- `0.4 -> 0.6 -> 0.4` 距离轨迹使体积在 `83.9413333 -> 76.752 -> 83.9413333` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、26 Face包含 150 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定原生边选择、距离变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-hole`
`pipe->hole` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder在截面中心 `(1, 1.5)` 以贯穿圆柱对 Pipe 结果减料。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使体积在 `82.4601776 -> 73.0353997 -> 82.4601776` 间变化,保持有效单 Solid并精确恢复名义摘要、history 与语义 naming。
- 名义结果为 7 Face包含 23 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定贯穿位置、半径变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-draft`
`pipe->draft` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 原生 Face 枚举确认端面索引 `0/5` 被 Draft builder 拒绝,侧面索引 `1/2/3/4` 可接受;下游锁定 `faceIndex: 1`、Z 向中性面和拉伸方向执行真实 `BRepOffsetAPI_DraftAngle`。
- `5 -> 8 -> 5` 角度轨迹使体积在 `70.3150507 -> 58.3783122 -> 70.3150507` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、6 Face包含 5 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定侧面适用性、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-thickness`
`pipe->thickness` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder对锁定的 Pipe 侧面执行厚壳。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹使体积在 `45.696 -> 63.504 -> 45.696` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、11 Face包含 38 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定侧面选择、offset 变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-linear-pattern`
`pipe->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入 builder针对窄 Pipe 截面锁定交叠平移,避免沿用 Box 的 X=8 参数产生分离结果。
- `1.5 -> 1 -> 1.5` X 平移轨迹使体积在 `157.5 -> 135 -> 157.5` 间变化,名义和编辑态均保持有效单 Solid并精确恢复摘要、history 与语义 naming。
- 名义结果为 14 Face边界覆盖 X=`[0, 3.5]`,包含 66 条原生 history 记录,上游 Pipe naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定交叠融合、平移变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-polar-pattern`
`pipe->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入 builder绕锁定 Z 轴复制并融合 Pipe 结果。
- `30 -> 45 -> 30` 角度轨迹使体积在 `132.3686028 -> 150 -> 132.3686028` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、12 Face边界覆盖 X=`[-1.5, 2]`、Y=`[0, 3.5980764]`,包含 78 条原生 history 记录。
- 上游 Pipe naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定旋转融合、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-mirrored`
`pipe->mirrored` 已完成原生接受分类:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入 builder名义镜像平面锁定为 `x=1`,与 Pipe 截面对称重合,编辑平面为 `x=1.5` 并保持实例交叠。
- `1 -> 1.5 -> 1` 平面轨迹使体积在 `90 -> 135 -> 90` 间变化,恢复态保留名义 1 Solid 和 156 条原生 history并精确恢复语义 naming。
- 编辑态为有效单 Solid、14 Face上游 Pipe naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming 稳定。
- focused ordered-pair gate 已锁定重合名义对照、交叠镜像、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-pipe-multi-transform`
`pipe->multi-transform` 已完成原生接受分类,并闭合 Pipe 起始行全部 19 个有序操作对:
- 上游使用真实 `BRepOffsetAPI_MakePipe` 双输入 builder以 `2x3` Face section 生成体积 `90` 的有效单 Solid 和 28 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder先沿 X 平移,再绕 `x=5` 平面镜像;该实例布局原生形成有效 2 Solid 结果,没有伪装为单 Solid。
- `8 -> 7 -> 8` 首步 X 平移轨迹使体积在 `180 -> 270 -> 180` 间变化并精确恢复名义摘要、300 条 history 与语义 naming。
- STEP 导入会同时创建 `Part::Feature`、聚合 `App::Part` 和 Origin 基准对象FCStd harness 已改为只组合有限、有效、含 Solid 的 `Part::Feature`,消除了重复几何和 `1e100` 退化边界。
- FreeCAD FCStd save/reopen/resave 三阶段均保持 2 Solid、12 Face、体积 `180` 与 naming evidence 一致focused gate 已锁定多实体拓扑、导入筛选、变异、恢复和持久化证据。
### `TSN-PAIR-revolution-fuse`
`revolution->fuse` 已完成原生接受分类,并验证新的 Revolution 上游基线:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder绕锁定 Y 轴生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder工具与 Revolution 结果保持体积交叠。
- `0 -> 0.5 -> 0` 工具 X 偏移轨迹使体积在 `188.0229122 -> 192.1067282 -> 188.0229122` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义下游结果为有效 1 Solid、11 Face包含 45 条原生 history 记录,上游 Revolution naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused ordered-pair gate 已锁定 Face Profile、旋转轴、融合变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-cut`
`revolution->cut` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid和 23 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder`4 -> 3 -> 4` 工具尺寸轨迹覆盖同一正象限、摘要不变,未被采用。
- 最终使用小型交叠工具的 `0 -> 0.5 -> 0` X 偏移轨迹,使体积在 `68.3585388 -> 70.3585388 -> 68.3585388` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、8 Face包含 75 条原生 history 记录,上游 Revolution naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused gate 已锁定弱轨迹拒绝、偏移变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-common`
`revolution->common` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid和 23 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder以贯穿正象限的工具和 Revolution 结果求交。
- `0 -> 0.5 -> 0` 工具 X 偏移轨迹使交集体积在 `12.3753114 -> 8.2914955 -> 12.3753114` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、5 Face包含 100 条原生 history 记录,上游 Revolution naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused gate 已锁定交叠工具、偏移变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-rotate`
`revolution->rotate` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder绕锁定 Z 轴旋转 Revolution 结果。
- `15 -> 22.5 -> 15` 角度轨迹保持体积 `75.3982237`改变边界并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、4 Face包含 40 条原生 history 记录,上游 Revolution naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定旋转变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-pad`
`revolution->pad` 已完成原生拒绝分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid和 23 条原生 history。
- 下游 `BRepPrimAPI_MakePrism` 在 `5 -> 7.5 -> 5` 长度轨迹中稳定拒绝 Revolution Solid 输入,三次均不产生 Shape、history 或 naming。
- FreeCAD `PartDesign::Pad` 使用同一 Revolution Solid 作 Profile返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,结果 Shape 为空、状态包含 `Touched/Invalid`。
- transaction abort 后对象集与 Revolution 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致且文档无污染。
- focused ordered-pair gate 已锁定两阶段 builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-revolution-pocket`
`revolution->pocket` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid 和 23 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder以同一截面 Profile 沿 Z 方向执行部分减料。
- `2 -> 1 -> 2` 深度轨迹使体积在 `64.8386964 -> 69.5677847 -> 64.8386964` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、7 Face包含 104 条原生 history 记录,上游 Revolution naming 证据向下游传播。
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定focused gate 已锁定部分深度、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-loft`
`revolution->loft` 已完成 FreeCAD 文档前置拒绝分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid 和 23 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中均产生 `isValid:false`、负体积的 `kernel-invalid-result`,三次诊断精确恢复。
- FreeCAD `Part::Loft` 对 Revolution Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`,结果 Shape 为空、状态包含 `Touched/Invalid`。
- transaction abort 后对象集与 Revolution 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused gate 已锁定 FreeCAD 决策权、OCCT 无效结果、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-revolution-pipe`
`revolution->pipe` 已完成原生 builder 拒绝分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid 和 23 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中均于 builder 阶段抛出稳定 Emscripten C++ 异常,不产生 Shape、history 或 naming。
- FreeCAD `Part::Sweep` 对同一 Revolution Solid section 返回 `A fatal error occurred when making the sweep`,结果 Shape 为空、状态包含 `Touched/Invalid`。
- transaction abort 后对象集与 Revolution 源 Shape 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
- focused gate 已锁定异常阶段、输入数、精确失败信息、回滚和持久化证据。
### `TSN-PAIR-revolution-revolution`
`revolution->revolution` 已完成原生 builder 拒绝分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游再次使用 `BRepPrimAPI_MakeRevol`,对 Revolution Solid 在 `360 -> 270 -> 360` 角度轨迹中稳定于 builder 阶段抛出 Emscripten C++ 异常;三次均不产生 Shape、history 或 naming。
- FreeCAD `Part::Revolution` 使用同一 Revolution Solid 作为 Source返回 `Solids are not Processed`,结果 Shape 为空、状态包含 `Touched/Invalid`。
- transaction abort 后对象集与 Revolution 源 Shape 完整恢复,源 Shape 体积、拓扑和 BREP 哈希保持一致;干净 FCStd save/reopen/resave 三阶段一致且文档无污染。
- focused ordered-pair gate 已锁定两阶段 Revolution builder、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-revolution-groove`
`revolution->groove` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 Revolution 结果执行旋转减料;名义结果为有效 1 Solid、10 Face、体积 `71.0943912`,包含 43 条原生 history。
- `360 -> 180 -> 360` 角度轨迹使体积在 `71.0943912 -> 73.2463075 -> 71.0943912` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Revolution naming 证据向下游传播恢复态语义摘要与名义态一致FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Revolution/Groove builder、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-fillet`
`revolution->fillet` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 Revolution 结果的原生边执行全边圆角;名义结果为有效 1 Solid、8 Face、体积 `73.6722933`,包含 48 条原生 history。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使体积在 `73.6722933 -> 71.5148803 -> 73.6722933` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Revolution naming 证据向下游传播恢复态语义摘要与名义态一致FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Revolution/Fillet builder、原生边选择、半径变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-chamfer`
`revolution->chamfer` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 Revolution 结果的原生边执行全边倒角;名义结果为有效 1 Solid、8 Face、体积 `71.3769851`,包含 48 条原生 history。
- `0.4 -> 0.6 -> 0.4` 距离轨迹使体积在 `71.3769851 -> 66.3504368 -> 71.3769851` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Revolution naming 证据向下游传播恢复态语义摘要与名义态一致FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Revolution/Chamfer builder、原生边选择、距离变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-hole`
`revolution->hole` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder在锁定位置 `[0, 1.5, 0]`、方向 `+Z` 和深度 `0.1` 的局部圆柱刀具上执行减料;名义结果为有效 1 Solid、8 Face、体积 `75.3729574`,包含 19 条原生 history。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使体积在 `75.3729574 -> 75.3414747 -> 75.3729574` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Revolution naming 证据向下游传播恢复态语义摘要与名义态一致FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Revolution/Hole builder、局部圆柱刀具、半径变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-draft`
`revolution->draft` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` 单输入 builder对锁定原生 Face、中性面和 +Z 拉伸方向执行拔模;名义结果为有效 1 Solid、4 Face、体积 `75.3982238`,包含 3 条原生 history。
- `5 -> 8 -> 5` 角度轨迹使 Y 方向边界在 `-0.3154312 -> -0.5067054 -> -0.3154312` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Revolution naming 证据向下游传播,下游获得无歧义 `native-evidence` namingFreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Revolution/DraftAngle builder、原生 Face 选择、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-thickness`
`revolution->thickness` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder对锁定原生 Face 执行厚壳;名义结果为有效 1 Solid、8 Face、体积 `26.7412367`,包含 39 条原生 history。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹使体积在 `26.7412367 -> 38.9808816 -> 26.7412367` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Revolution naming 证据向下游传播恢复态语义摘要与名义态一致FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Revolution/Thickness builder、原生 Face 选择、offset 变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-linear-pattern`
`revolution->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Revolution 结果沿 X 方向复制并融合;专用 `4 -> 3 -> 4` 平移轨迹确保所有状态保持单 Solid。
- 平移轨迹使体积在 `132.2115549 -> 126.3867082 -> 132.2115549` 间变化并精确恢复名义摘要、history 与语义 naming名义结果为 12 Face包含 53 条原生 history。
- 上游 Revolution naming 证据向下游传播恢复态语义摘要与名义态一致FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Revolution/LinearPattern builder、单 Solid 约束、平移变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-polar-pattern`
`revolution->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 默认 `30°` 轨迹触发原生 WASM 越界中止,未被误记为接受;改用保持实例相交且稳定的 `10 -> 15 -> 10` 专用角度轨迹。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将旋转实例融合为单 Solid角度轨迹使体积在 `87.2727929 -> 92.4535717 -> 87.2727929` 间变化并精确恢复名义摘要、history 与语义 naming。
- 名义结果为有效 1 Solid、14 Face包含 70 条原生 history上游 Revolution naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定专用角度轨迹、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-mirrored`
`revolution->mirrored` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder将 Revolution 结果关于 X=`0` 镜像并融合为单 Solid专用 `0 -> 0.5 -> 0` 平面轨迹避免默认分离实例。
- 平面轨迹使体积在 `120.1447575 -> 126.3867082 -> 120.1447575` 间变化并精确恢复名义摘要、history 与语义 naming名义结果为 14 Face包含 92 条原生 history。
- 上游 Revolution naming 证据向下游传播恢复态语义摘要与名义态一致FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定专用镜像平面、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-revolution-multi-transform`
`revolution->multi-transform` 已完成原生接受分类:
- 上游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakeRevol` 单输入 builder生成体积 `75.3982237` 的有效单 Solid、4 Face 和 23 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder锁定镜像平面 `X=0`,按平移和镜像顺序生成并融合四个实例;名义结果为有效 1 Solid、48 Face、体积 `190.7882692`,包含 313 条原生 history。
- `4 -> 3 -> 4` 平移轨迹使体积在 `190.7882692 -> 155.9773894 -> 190.7882692` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Revolution naming 证据向下游传播恢复态语义摘要与名义态一致FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定 ordered builder、镜像平面、单 Solid 约束、平移变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-groove-fuse`
`groove->fuse` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成体积 `995.287611` 的有效单 Solid、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder专用 `8 -> 7 -> 8` 工具 X 偏移轨迹保持实体交叠并融合为单 Solid。
- 轨迹使体积在 `1070.287611 -> 1045.287611 -> 1070.287611` 间变化并精确恢复名义摘要、history 与语义 naming名义结果为 17 Face包含 52 条原生 history。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Groove/Fuse builder、专用交叠轨迹、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-groove-cut`
`groove->cut` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成体积 `995.287611` 的有效单 Solid、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder对 Groove 结果继续执行减料;名义结果为有效 1 Solid、14 Face、体积 `931.287611`,包含 22 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使体积在 `931.287611 -> 968.287611 -> 931.287611` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Groove/Cut builder、工具变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-groove-common`
`groove->common` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder与 Groove 结果及交叠工具执行布尔交集;名义结果为有效 1 Solid、6 Face、体积 `75`,包含 197 条原生 history。
- `7 -> 6 -> 7` 工具 X 偏移轨迹使体积在 `75 -> 100 -> 75` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Groove/Common builder、交叠轨迹、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-groove-rotate`
`groove->rotate` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder对 Groove 结果绕 Z 轴旋转;名义结果保持有效 1 Solid、10 Face、体积 `995.287611`,包含 154 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹改变包围盒(名义 `[-2.5881906, -1e-7, -1e-7, 9.6592584, 12.2474488, 10.0000001]`,编辑态 `[-3.8268344, -1e-7, -1e-7, 9.2387954, 13.0656297, 10.0000001]`并精确恢复名义摘要、history 与语义 naming。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Groove/Transform builder、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-groove-pad`
`groove->pad` 已完成原生拒绝分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- OCCT `BRepPrimAPI_MakePrism` 对 Groove Solid 在 `5 -> 7.5 -> 5` 长度轨迹中稳定于 builder 阶段拒绝,三次均不产生结果 Shape 或 history。
- FreeCAD `PartDesign::Pad` 使用同一 Groove Solid 作为 Profile返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,结果 Shape 为空且状态含 `Invalid`;未伪造下游命名或变异证据。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定拒绝阶段、诊断、回滚和持久化证据。
### `TSN-PAIR-groove-pocket`
`groove->pocket` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder对 Groove 结果执行减料拉伸;名义结果为有效 1 Solid、13 Face、体积 `966.8584073`,包含 91 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使体积在 `966.8584073 -> 972.8584073 -> 966.8584073` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Groove/Pocket builder、深度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-groove-loft`
`groove->loft` 已完成原生拒绝分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中生成有效 Shape 和 24 条 history但该结果仅作为 `kernel-superset-only` 诊断,不提升 FreeCAD 能力。
- FreeCAD `Part::Loft` 对 Groove Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`,结果 Shape 为空且状态含 `Invalid`;未伪造下游命名或接受变异证据。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定 FreeCAD 决策权、kernel 诊断、回滚和持久化证据。
### `TSN-PAIR-groove-pipe`
`groove->pipe` 已完成原生拒绝分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中均产生无效结果,仅记为 `kernel-invalid-result`,不伪造接受 Shape/history。
- FreeCAD `Part::Sweep` 对 Groove Solid section 返回 `A fatal error occurred when making the sweep`,结果 Shape 为空且状态含 `Invalid`。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定 FreeCAD 决策权、kernel 无效诊断、回滚和持久化证据。
### `TSN-PAIR-groove-revolution`
`groove->revolution` 已完成原生拒绝分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 对 Groove Solid 在 `360 -> 270 -> 360` 角度轨迹中稳定于 builder 阶段拒绝,三次均不产生结果 Shape 或 history。
- FreeCAD `Part::Revolution` 使用同一 Groove Solid 作为 Source返回 `Solids are not Processed`,结果 Shape 为空且状态含 `Invalid`;未伪造下游命名或变异证据。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定拒绝阶段、诊断、回滚和持久化证据。
### `TSN-PAIR-groove-groove`
`groove->groove` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游再次使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder并将第二阶段 profile 真实放置在 `profileX=2` 以切削不同半径区域;名义结果为有效 1 Solid、14 Face、体积 `983.5066386`,包含 18 条原生 history。
- `360 -> 180 -> 360` 角度轨迹改变拓扑(编辑态 11 Face、28 Edge并精确恢复名义摘要、history 与语义 naming未采用同 profile 的 no-op 轨迹。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
- focused ordered-pair gate 已锁定两阶段 Groove/Groove builder、专用 profile、角度变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-groove-fillet`
`groove->fillet` 已完成原生拒绝分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder对 10x10 Box 执行旋转减料,生成有效 1 Solid、体积 `995.287611`、10 Face、24 Edge 和 18 条原生 history。
- 下游按 native contract 使用 `BRepFilletAPI_MakeFillet` 对全部 24 条源边执行圆角;`0.4 -> 0.6 -> 0.4` 半径轨迹三次均稳定在 OCCT builder 阶段以 Emscripten C++ 异常拒绝,没有产生 Shape、history 或下游 naming。
- FreeCAD 1.1.1 `Part::Fillet` 对同一 Groove Solid 和全部源边返回 `BRep_API: command not done`;结果 Shape 为空、状态包含 `Invalid`,与 OCCT 拒绝结论一致。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定拒绝阶段、异常传输、精确诊断、回滚和持久化证据。
### `TSN-PAIR-groove-chamfer`
`groove->chamfer` 已完成原生拒绝分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder生成有效 1 Solid、体积 `995.287611`、10 Face、24 Edge 和 18 条原生 history。
- 下游按 native contract 使用 `BRepFilletAPI_MakeChamfer` 对全部 24 条源边执行对称倒角;`0.4 -> 0.6 -> 0.4` 距离轨迹稳定触发原生 WASM `memory access out of bounds`,三次均不产生 Shape、history 或下游 naming。
- FreeCAD 1.1.1 `Part::Chamfer` 对同一 Groove Solid 和全部源边返回 `BRep_API: command not done`;结果 Shape 为空且状态包含 `Invalid`。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定 WASM 崩溃签名、FreeCAD 精确诊断、回滚和持久化证据。
### `TSN-PAIR-groove-hole`
`groove->hole` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder在 Groove 结果中心执行贯穿孔;名义结果为有效 1 Solid、11 Face、体积 `963.8716845`,包含 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `963.8716845 -> 924.6017763 -> 963.8716845` 间变化并精确恢复名义摘要、history 与语义 naming。
- 下游获得无歧义 `native-evidence` naming上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定两阶段 builder、变异、恢复和持久化证据。
### `TSN-PAIR-groove-draft`
`groove->draft` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepOffsetAPI_DraftAngle` 单输入 builder对锁定的原生 Face、中性面和 +Z 方向执行拔模;名义结果为有效 1 Solid、10 Face、体积 `951.8050786`,包含 9 条原生 history。
- `5 -> 8 -> 5` 角度轨迹使体积在 `951.8050786 -> 925.4360727 -> 951.8050786` 间变化并精确恢复名义摘要、history 与语义 naming。
- 下游 9 条选定 history 均形成无歧义 `native-evidence` namingFreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定 Face 选择、方向、变异、恢复和持久化证据。
### `TSN-PAIR-groove-thickness`
`groove->thickness` 已完成原生拒绝分类,并显式保留 Web 原生与 FreeCAD profile 的能力差异:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- Web 原生下游使用 `BRepOffsetAPI_MakeThickSolid` 对锁定的第二个 Face 执行厚壳;`-0.4 -> -0.6 -> -0.4` offset 轨迹稳定触发 WASM `memory access out of bounds`,三次均不产生 Shape、history 或下游 naming。
- FreeCAD 1.1.1 `Part::Thickness` 对同一 Groove Solid、`Face2` 和 `Value=-0.4` 生成有效 Shape状态为 `Valid`;该 FreeCAD 接受证据没有被用于伪造 Web 原生接受能力。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定崩溃签名、FreeCAD 接受诊断、回滚和持久化证据。
### `TSN-PAIR-groove-linear-pattern`
`groove->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder沿 X 方向复制并融合 Groove 结果;名义结果为有效 1 Solid、19 Face、体积 `1795.287611`,包含 119 条原生 history。
- `8 -> 9 -> 8` 平移轨迹始终保持单 Solid使体积在 `1795.287611 -> 1894.1260552 -> 1795.287611` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定交叠融合、变异、恢复和持久化证据。
### `TSN-PAIR-groove-polar-pattern`
`groove->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 默认 `30°` 及小角度 `10°/15°` 交叠融合轨迹均触发原生 WASM 越界,未被误记为接受;最终采用稳定且仍具真实拓扑变异的 `90 -> 120 -> 90` 专用轨迹。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder`90°` 名义态为有效 1 Solid、19 Face、体积 `1990.575222` 和 98 条 history`120°` 编辑态真实变为 2 Solid恢复后摘要、history 与语义 naming 精确复原。
- FreeCAD FCStd save/reopen/resave 三阶段保持名义单 Solid Shape 与 naming evidence 一致focused gate 已锁定专用角度轨迹、真实多实体编辑态、恢复和持久化证据。
### `TSN-PAIR-groove-mirrored`
`groove->mirrored` 已完成原生接受分类:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder关于 `x=5` 的名义镜像让两侧缺口互补融合,得到有效 1 Solid、10 Face、体积 `1000` 和 216 条原生 history。
- `5 -> 6 -> 5` 镜像平面轨迹使体积在 `1000 -> 1190.575222 -> 1000` 间变化,编辑态增至 22 Face并精确恢复名义摘要、history 与语义 naming。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定镜像平面、互补融合、变异、恢复和持久化证据。
### `TSN-PAIR-groove-multi-transform`
`groove->multi-transform` 已完成原生接受分类,并闭合 Groove 起始行的全部 19 个有序操作对:
- 上游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder生成有效 1 Solid、体积 `995.287611`、10 Face 和 18 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder依次执行 X 平移和关于 `x=5` 的镜像并融合;名义结果为有效 1 Solid、24 Face、体积 `2600`,包含 525 条原生 history。
- `8 -> 9 -> 8` 首步 X 平移轨迹使体积在 `2600 -> 2797.6768884 -> 2600` 间变化,编辑态增至 40 Face并精确恢复名义摘要、history 与语义 naming。
- 上游 Groove naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定 ordered builder、变异、恢复和持久化证据。
### `TSN-PAIR-fillet-fuse`
`fillet->fuse` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder并以相交工具形成有效 1 Solid名义结果为 33 Face、体积 `1071.3666774`,包含 79 条原生 history。
- `8 -> 7 -> 8` 工具 X 偏移轨迹使体积在 `1071.3666774 -> 1046.4010137 -> 1071.3666774` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定相交融合、变异、恢复和持久化证据。
### `TSN-PAIR-fillet-cut`
`fillet->cut` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder对 Fillet 结果执行减料;名义结果为有效 1 Solid、31 Face、体积 `932.1027009`,包含 42 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使体积在 `932.1027009 -> 969.0683646 -> 932.1027009` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定减料变异、恢复和持久化证据。
### `TSN-PAIR-fillet-common`
`fillet->common` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder以相交工具求 Fillet 结果的布尔交集;名义结果为有效 1 Solid、10 Face、体积 `74.5643421`,包含 360 条原生 history。
- `7 -> 6 -> 7` 工具 X 偏移轨迹使体积在 `74.5643421 -> 99.5300058 -> 74.5643421` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定有体积交集、变异、恢复和持久化证据。
### `TSN-PAIR-fillet-rotate`
`fillet->rotate` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder 绕 Z 轴旋转 Fillet 结果;名义结果保持有效 1 Solid、26 Face 和体积 `995.9653557`,包含 338 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹改变包围盒(名义 `[-2.4982926, 0.0898978, -1e-7, 9.5693604, 12.1575509, 10.0000001]`,编辑态 `[-3.7042092, 0.1226251, -1e-7, 9.1161702, 12.9430046, 10.0000001]`并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定刚体变换、恢复和持久化证据。
### `TSN-PAIR-fillet-pad`
`fillet->pad` 已完成原生拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- OCCT `BRepPrimAPI_MakePrism` 对 Fillet Solid 在 `5 -> 7.5 -> 5` 长度轨迹中稳定于 builder 阶段拒绝,三次均不产生结果 Shape 或 history。
- FreeCAD `PartDesign::Pad` 使用同一 Fillet Solid 作为 Profile返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,结果 Shape 为空且状态含 `Invalid`;未伪造下游 naming 或接受变异证据。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定拒绝阶段、诊断、回滚和持久化证据。
### `TSN-PAIR-fillet-pocket`
`fillet->pocket` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder对 Fillet 结果执行减料拉伸;名义结果为有效 1 Solid、28 Face、体积 `966.2980048`,包含 100 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使体积在 `966.2980048 -> 972.2636685 -> 966.2980048` 间变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定减料拉伸、恢复和持久化证据。
### `TSN-PAIR-fillet-loft`
`fillet->loft` 已完成原生拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中生成有效 1 Solid 和 24 条 history但该结果仅作为 `kernel-superset-only` 诊断,不提升 FreeCAD 能力。
- FreeCAD `Part::Loft` 对 Fillet Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`,结果 Shape 为空且状态含 `Invalid`;未伪造下游 naming 或接受变异证据。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定 FreeCAD 决策权、kernel 诊断、回滚和持久化证据。
### `TSN-PAIR-fillet-pipe`
`fillet->pipe` 已完成原生拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中均产生无效零体积 Shape 和 28 条 history仅记为 `kernel-invalid-result`,不伪造接受 Shape。
- FreeCAD `Part::Sweep` 对 Fillet Solid section 返回 `A fatal error occurred when making the sweep`,结果 Shape 为空且状态含 `Invalid`。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定 FreeCAD 决策权、kernel 无效诊断、回滚和持久化证据。
### `TSN-PAIR-fillet-revolution`
`fillet->revolution` 已完成原生拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 对 Fillet Solid 在 `360 -> 270 -> 360` 角度轨迹中稳定于 builder 阶段拒绝,三次均不产生结果 Shape 或 history。
- FreeCAD `Part::Revolution` 使用同一 Fillet Solid 作为 Source返回 `Solids are not Processed`,结果 Shape 为空且状态含 `Invalid`;未伪造下游 naming 或接受变异证据。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定拒绝阶段、精确诊断、回滚和持久化证据。
### `TSN-PAIR-fillet-groove`
`fillet->groove` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder 对 Fillet 结果执行旋转减料;名义结果为有效 1 Solid、30 Face、体积 `991.2529668`,包含 18 条原生 history。
- `360 -> 180 -> 360` 角度轨迹使拓扑从 30 Face 变为 27 Face 后恢复并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定旋转减料、变异、恢复和持久化证据。
### `TSN-PAIR-fillet-fillet`
`fillet->fillet` 已完成原生拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 第二个 OCCT `BRepFilletAPI_MakeFillet` 对已圆角 Solid 在 `0.4 -> 0.6 -> 0.4` 半径轨迹中稳定于 builder 阶段拒绝,三次均不产生结果 Shape 或 history。
- FreeCAD `Part::Fillet` 使用同一 Fillet Solid 作为 Base返回 `There are no suitable edges for chamfer or fillet`,结果 Shape 为空且状态含 `Invalid`;未伪造下游 naming 或接受变异证据。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定拒绝阶段、精确诊断、回滚和持久化证据。
### `TSN-PAIR-fillet-chamfer`
`fillet->chamfer` 已完成原生拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- OCCT `BRepFilletAPI_MakeChamfer` 对 Fillet Solid 在 `0.4 -> 0.6 -> 0.4` 距离轨迹中稳定于 builder 阶段拒绝,三次均不产生结果 Shape 或 history。
- FreeCAD `Part::Chamfer` 使用同一 Fillet Solid 作为 Base返回 `There are no suitable edges for chamfer or fillet`,结果 Shape 为空且状态含 `Invalid`;未伪造下游 naming 或接受变异证据。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定拒绝阶段、精确诊断、回滚和持久化证据。
### `TSN-PAIR-fillet-hole`
`fillet->hole` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder 对 Fillet 结果执行中心贯穿孔;名义结果为有效 1 Solid、27 Face、体积 `964.5494292`,包含 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `964.5494292 -> 925.279521 -> 964.5494292` 间变化并精确恢复名义摘要、history 与语义 naming。
- 下游获得无歧义 `native-evidence` naming上游 Fillet 证据已传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定。
### `TSN-PAIR-fillet-draft`
`fillet->draft` 已完成原生拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 只读原生适用性扫描枚举 Fillet 结果的全部 26 个 Face在锁定的 +Z 拉伸方向与 XY 中性面下均无有效 Draft Shape没有用选面 fallback 伪造接受。
- OCCT `BRepOffsetAPI_DraftAngle` 在 `5 -> 8 -> 5` 角度轨迹中稳定于 builder 阶段拒绝,三次均不产生结果 Shape 或 history。
- FreeCAD `PartDesign::Draft` 通过事务内 Body、DatumPlane、DatumLine 和 `PartDesign::Feature` Base 评估同一 Fillet 几何Base 的有效性、拓扑数、体积、面积和边界摘要精确一致,同时显式记录 FreeCAD 元素映射导致的 BREP 重序列化哈希差异。
- FreeCAD 结果合同为空状态字符串、空 Shape 和 `Touched/Invalid`transaction abort 后 Body 及所有临时对象消失,顶层源 Shape 的 BREP 哈希精确恢复,干净 FCStd save/reopen/resave 三阶段一致。
### `TSN-PAIR-fillet-thickness`
`fillet->thickness` 已完成原生 no-op 拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 只读原生扫描确认:全部 26 个 Face 在 `-0.4/-0.6` offset 下均返回与输入同摘要的 Shape6 个主面的 `0.4/0.6` 正向 offset 只产生无效 Shape 或 builder 拒绝,没有可用的真实变异轨迹。
- OCCT `BRepOffsetAPI_MakeThickSolid` 在 `-0.4 -> -0.6 -> -0.4` 轨迹中每次均返回有效 Shape 和 1 条 history但有效性、Solid/Face/Edge/Vertex、体积、面积、边界与 history 哈希全部不变,因此被显式分类为 `kernel-no-op`,不冒充接受。
- FreeCAD `Part::Thickness` 对同一 Fillet Solid 和 `Face2` 返回 `Valid/Up-to-date` 且 Shape 非空,但结果 Shape 摘要与输入逐字段相同,因此同样记为 `freecadProfileNoOp`。
- transaction abort 后对象集、源 Shape 和 BREP 哈希精确恢复;干净 FCStd save/reopen/resave 三阶段一致focused gate 已锁定双 no-op、回滚和持久化证据。
### `TSN-PAIR-fillet-linear-pattern`
`fillet->linear-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 沿 X 方向复制并融合 Fillet 结果;名义结果为有效 1 Solid、42 Face、体积 `1794.8665943`,包含 266 条原生 history。
- `8 -> 9 -> 8` 平移轨迹使体积在 `1794.8665943 -> 1894.7292492 -> 1794.8665943` 间变化X 上界从 18 变为 19 后恢复并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定交叠融合、变异、恢复和持久化证据。
### `TSN-PAIR-fillet-polar-pattern`
`fillet->polar-pattern` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 绕 Z 轴旋转复制并融合 Fillet 结果30 度名义结果为有效 1 Solid、46 Face、体积 `1417.6209625`,包含 234 条原生 history。
- `30 -> 45 -> 30` 角度轨迹使体积在 `1417.6209625 -> 1580.485276 -> 1417.6209625` 间变化面积和边界也同步变化并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定旋转融合、变异、恢复和持久化证据。
### `TSN-PAIR-fillet-multi-transform`
`fillet->multi-transform` 已完成原生接受分类,并闭合 Fillet 起始行中尚需分类的全部有序操作对:
- 上游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder对 10x10x10 Box 的全部边执行圆角,生成有效 1 Solid、26 Face、体积 `995.9653557` 和 150 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder依次执行 X 平移、关于 `x=5` 的镜像并融合;名义结果为有效 1 Solid、58 Face、体积 `2593.7678329`,包含 1103 条原生 history。
- `8 -> 9 -> 8` 首步 X 平移轨迹使体积在 `2593.7678329 -> 2793.4931426 -> 2593.7678329` 间变化,边界从 `[-8, 18]` 扩展为 `[-9, 19]` 后恢复并精确恢复名义摘要、history 与语义 naming。
- 上游 Fillet naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定 ordered builder、变异、恢复和持久化证据。
### `TSN-PAIR-chamfer-fuse`
`chamfer->fuse` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 10x10x10 Box 的全部边执行倒角,生成有效 1 Solid、26 Face、体积 `990.7413333` 和 150 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder以相交工具融合 Chamfer 结果;名义结果为有效 1 Solid、33 Face、体积 `1066.6586667`,包含 78 条原生 history。
- `8 -> 7 -> 8` 工具 X 偏移轨迹使体积在 `1066.6586667 -> 1041.7386667 -> 1066.6586667` 间变化X 上界从 13 变为 12 后恢复并精确恢复名义摘要、history 与语义 naming。
- 上游 Chamfer naming 证据向下游传播FreeCAD FCStd save/reopen/resave 三阶段 Shape 与 naming evidence 稳定focused gate 已锁定相交融合、变异、恢复和持久化证据。
### `TSN-PAIR-chamfer-cut`
`chamfer->cut` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 10x10x10 Box 的全部边执行倒角,生成有效 1 Solid、26 Face、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder名义结果为有效 1 Solid、31 Face、体积 `927.0613333`、面积 `604.1774417` 和 42 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使体积在 `927.0613333 -> 963.9813333 -> 927.0613333` 间变化编辑态面积同步变化恢复态的几何摘要、history hash 和语义 naming 精确回到名义态。
- 上游 Chamfer naming evidence 向下游传播;下游结果因对称拓扑保持 `ambiguous`,未伪造唯一私有 tokenJSON round-trip 稳定。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持有效 1 Solid、31 Face、63 Edge、34 Vertex、体积 `927.0613333`、面积 `604.1774417` 及 naming evidence hash `fbd3e2b6...` 一致focused ordered-pair gate 已通过。
- 机器队列已自动前移一项;新的活动任务仍以 `config/freecad-active-work-queue.json.nextTask` 为唯一来源。
### `TSN-PAIR-chamfer-common`
`chamfer->common` 已完成原生接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 10x10x10 Box 的全部边执行倒角,生成有效 1 Solid、26 Face、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder以相交工具对 Chamfer 结果求交;名义结果为有效 1 Solid、10 Face、21 Edge、13 Vertex、体积 `74.0026667`、面积 `106.6536521` 和 339 条原生 history。
- `7 -> 6 -> 7` 工具 X 偏移轨迹使体积在 `74.0026667 -> 98.9226667 -> 74.0026667` 间变化,面积和 X 下界同步变化恢复态的几何摘要、history hash 和语义 naming 精确回到名义态。
- 上游 Chamfer naming evidence 向下游传播;下游对称拓扑保持 `ambiguous`,未伪造唯一私有 tokenJSON round-trip 稳定。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持有效 1 Solid、10 Face、21 Edge、13 Vertex、体积 `74.0026667`、面积 `106.6536521` 及 naming evidence hash `ec6b2670...` 一致focused ordered-pair gate 已通过。
- 机器队列已自动前移一项;新的活动任务仍以 `config/freecad-active-work-queue.json.nextTask` 为唯一来源。
### `TSN-PAIR-chamfer-rotate`
`chamfer->rotate` 已完成真实 FreeCAD/OCCT 接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 10x10x10 Box 全部边执行倒角,生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder 绕 Z 轴旋转;名义结果保持相同 Solid、拓扑数、体积和面积并生成 314 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹将包围盒从 `[-2.4846629, 0.1035275, -1e-7, 9.5557307, 12.1439212, 10.0000001]` 改为 `[-3.6737611, 0.1530733, -1e-7, 9.0857221, 12.9125564, 10.0000001]` 后精确恢复history hash 和语义 naming 同时恢复。
- 上游 Chamfer naming evidence 向下游传播;下游对称拓扑保持 `ambiguous`,未按索引伪造唯一 tokenJSON round-trip 稳定。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 及 naming evidence hash `d5ff71d2...` 一致。
- 真实执行未发现 `web-implementation-defect`、过度接受或过度拒绝focused gate 已通过,机器队列只前移一项。
### 真实 desktop oracle BIM 首启隔离纠正
- 基线审计先发现旧 desktop report 缺少确定性归一化声明,`check:freecad-desktop-oracle` 正确 fail-closed没有继续使用陈旧报告。
- 完整真实 desktop probe 随后在 `BIMWorkbench` 激活处达到默认 300 秒超时,而 BIM registration-only 探针正常完成,问题被缩小到 full-scope 首启路径。
- 根因是 `scripts/freecad-reference-probe.py` 只为 `gui-commands` scope 设置 BIM `FirstTime=false`,却对所有隔离 scope 声称首启已抑制。
- harness 已改为所有隔离 GUI probe 在 workbench 激活前设置并读回 BIM 首启参数;报告只在真实读回 false 时声明抑制成功。
- 修复后完整 FreeCAD 1.1.1 desktop probe 通过,重新锁定 34 模块、352 个 TypeId 候选、348 个可实例化对象、4 个明确不可实例化对象和 5510 条 Property 记录。
- desktop oracle、oracle coverage、1111 命令 GUI 清册和 26 个三方 Boolean 场景均通过;该纠正提高 oracle 可信度,不提升 WEB exact 等级。
- 派生 Property 语义报告已按新 desktop report hash 重新生成并通过85 种/5510 条记录中 4987 条由原生 codec 表示523 条仍为 opaque proxy未被错误提升。
### `TSN-PAIR-chamfer-pad`
`chamfer->pad` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder对 10x10x10 Box 全部边执行倒角,生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游真实 `BRepPrimAPI_MakePrism` builder 对实体输入执行 `5 -> 7.5 -> 5` 长度轨迹;三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,且不产出 result、Shape 或 history恢复尝试保持相同拒绝签名。
- FreeCAD 1.1.1 文档内构造真实 `PartDesign::Pad` 并重算,锁定诊断 `FeatureExtrusion: Length: Could not extrude the sketch!`、`Touched/Invalid` 状态以及 null/invalid Shape没有用通用 Shape fallback 伪造接受。
- abort 前后对象集与 Chamfer 源 Shape 完全一致,只保留有效 `Part::Feature`;临时 Body、Origin 和失败 Pad 均未污染文档。
- FCStd save/reopen/resave 三阶段均保持有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 及源 BREP hash `fa5d7bd7...` 一致。
- focused ordered-pair gate 已锁定 OCCT 拒绝阶段、参数轨迹、FreeCAD 精确诊断、事务回滚和干净持久化;该原生拒绝是正确分类,不提升为 Web 接受。
### `TSN-PAIR-chamfer-pocket`
`chamfer->pocket` 已完成真实 FreeCAD/OCCT 接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder在 Chamfer 结果上切除矩形棱柱;名义结果为有效 1 Solid、28 Face、57 Edge、31 Vertex、体积 `961.4986667`、面积 `573.5635876` 和 97 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使体积在 `961.4986667 -> 967.4186667 -> 961.4986667` 间变化面积同步变化恢复态精确回到名义几何摘要、history hash 与语义 naming。
- 上游 Chamfer naming evidence 向下游传播;下游对称拓扑保持 `ambiguous`JSON round-trip 稳定,没有按索引伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持有效单 Solid、相同拓扑、体积、面积及 naming evidence hash `0292a471...` 一致focused gate 已锁定 builder、变异、恢复、naming 和持久化证据。
### `TSN-PAIR-chamfer-loft`
`chamfer->loft` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 对实体与第二 section 执行 `false -> true -> false` ruled 轨迹,三次均生成有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `704.4`、面积 `552.5525865` 和 24 条 history恢复态与名义态完全一致但该结果只代表 kernel superset。
- 真实 FreeCAD `Part::Loft` 文档重算以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝实体 section状态为 `Touched/Invalid` 且 Shape 为 null/invalid分类权威是 `freecad-document`,未把 OCCT 可构造性误报为生产接受。
- abort 前后只保留原 Chamfer `Part::Feature`对象集、Shape 与 BREP hash `fa5d7bd7...` 完全恢复;临时 Section 和失败 Loft 未污染文档。
- FCStd save/reopen/resave 三阶段均保持原 Chamfer 有效单 Solid、相同拓扑、体积和面积focused gate 已锁定 kernel 诊断、FreeCAD 精确拒绝、回滚和干净持久化。
### `TSN-PAIR-chamfer-pipe`
`chamfer->pipe` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 对实体 profile 与线性 spine 执行 `15 -> 12 -> 15` 轨迹;三次均产生 Shape 和 28 条原生 history但 Shape 无效且体积为 0编辑态面积与 Z 上界变化,恢复态精确回到名义 invalid-result 摘要。
- 真实 FreeCAD `Part::Sweep` 文档重算返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid没有把“产生了无效 Shape”误报为接受。
- abort 前后只保留原 Chamfer `Part::Feature`对象集、Shape 与 BREP hash `fa5d7bd7...` 完全一致;临时 Spine 和失败 Sweep 均未污染文档。
- FCStd save/reopen/resave 三阶段保持原 Chamfer 的有效单 Solid、拓扑、体积和面积focused gate 已锁定 kernel invalid-result、FreeCAD 精确诊断、事务回滚和干净持久化。
### `TSN-PAIR-chamfer-revolution`
`chamfer->revolution` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游真实 `BRepPrimAPI_MakeRevol` 对实体输入执行 `360 -> 270 -> 360` 角度轨迹;三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history恢复态拒绝签名一致。
- 真实 FreeCAD `Part::Revolution` 文档重算返回 `Solids are not Processed`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid没有用通用旋转 Shape 代理替代原生 profile 合同。
- abort 前后只保留原 Chamfer `Part::Feature`对象集、Shape 与 BREP hash `fa5d7bd7...` 完全一致;失败 Revolution 未污染文档。
- FCStd save/reopen/resave 三阶段保持原 Chamfer 有效单 Solid、相同拓扑、体积和面积focused gate 已锁定 builder 拒绝、FreeCAD 精确诊断、事务恢复和干净持久化。
### `TSN-PAIR-chamfer-groove`
`chamfer->groove` 已完成真实 FreeCAD/OCCT 接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder360 度名义结果为有效 1 Solid、30 Face、60 Edge、32 Vertex、体积 `986.0289444`、面积 `577.966554` 和 18 条原生 history。
- `360 -> 180 -> 360` 角度轨迹使编辑态回到体积 `990.7413333`、27 Face、52 Edge随后精确恢复名义几何摘要、history hash 和语义 naming。
- 上游 Chamfer naming evidence 向下游传播;下游保持显式 `ambiguous`JSON round-trip 稳定,没有索引型伪唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `d8501450...`focused gate 已锁定 builder、变异、恢复、naming 和持久化证据。
### `TSN-PAIR-chamfer-fillet`
`chamfer->fillet` 已完成真实 FreeCAD/OCCT 差异拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- Web 原生 `BRepFilletAPI_MakeFillet` 对全边 Chamfer 结果执行 `0.4 -> 0.6 -> 0.4` 半径轨迹;首次无覆盖探针真实触发 Wasm `memory access out of bounds`,锁定后续三次均为相同 builder crash signature且不伪造 result、Shape、history 或 naming。
- 独立 FreeCAD 1.1.1 `Part::Fillet` 对相同 48 Edge、半径 `0.4` 的 profile 重算成功,生成有效 1 Solid、98 Face、192 Edge、96 Vertex、体积 `989.9595415`、面积 `567.3942825`;该差异证明当前 Web builder 仍不能提升为接受。
- FreeCAD 成功 feature 在事务内完成诊断后 abort前后只保留原 Chamfer `Part::Feature`,对象集、源 Shape 与 BREP hash `fa5d7bd7...` 完全恢复。
- 源 FCStd save/reopen/resave 三阶段保持相同有效单 Solid、拓扑、体积和面积focused gate 已锁定 Wasm crash、FreeCAD profile acceptance、事务恢复和干净持久化。
### `TSN-PAIR-chamfer-chamfer`
`chamfer->chamfer` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- Web 原生 `BRepFilletAPI_MakeChamfer` 对全边 Chamfer 结果执行 `0.4 -> 0.6 -> 0.4` 距离轨迹;首次无覆盖探针真实触发 Wasm `memory access out of bounds`,锁定的三次尝试均保持相同 crash signature且不伪造 result、Shape、history 或 naming。
- 独立 FreeCAD 1.1.1 `Part::Chamfer` 对相同 48 Edge、距离 `0.4` 的文档重算以 `BRep_API: command not done` 拒绝,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- abort 前后只保留原 Chamfer `Part::Feature`,对象集、源 Shape 与 BREP hash `fa5d7bd7...` 完全一致;失败的第二个 Chamfer 未污染文档。
- FCStd save/reopen/resave 三阶段保持原 Chamfer 有效单 Solid、相同拓扑、体积和面积focused gate 已锁定 Wasm crash、FreeCAD 精确拒绝、事务恢复和干净持久化。
### `TSN-PAIR-chamfer-hole`
`chamfer->hole` 已完成真实 FreeCAD/OCCT 接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder 构造中心贯穿孔;名义结果为有效 1 Solid、27 Face、51 Edge、26 Vertex、体积 `959.3254068`、面积 `627.9488512` 和 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `959.3254068 -> 920.0554986 -> 959.3254068` 间变化面积同步变化恢复态精确回到名义几何摘要、history hash 和语义 naming。
- 下游获得唯一 `native-evidence` naming2 条选择记录无歧义;上游 Chamfer naming evidence 正确传播JSON round-trip 稳定。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `c09894a0...`focused gate 已锁定 builder、变异、恢复、naming 和持久化证据。
### `TSN-PAIR-chamfer-draft`
`chamfer->draft` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游真实 `BRepOffsetAPI_DraftAngle` 对锁定 Face、中性面和方向执行 `5 -> 8 -> 5` 角度轨迹;三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- 真实 FreeCAD `PartDesign::Draft` 使用 Body 内 `DraftBase/DatumPlane/DatumLine` 重算,状态为 `Touched/Invalid` 且 Shape 为 null/invalid原生 status string 为空,检查器同时锁定结构化状态而不伪造诊断文本。
- `DraftBase` 与源 Chamfer 的 Shape 摘要逐字段一致,源/副本 BREP hash 的序列化差异被显式记录abort 后临时 Body、datum 和 Draft 全部移除,源对象集与 Shape 完全恢复。
- FCStd save/reopen/resave 三阶段保持原 Chamfer 有效单 Solid、相同拓扑、体积、面积及源 BREP hash `fa5d7bd7...`focused gate 已锁定拒绝、输入转移、事务恢复和干净持久化。
### `TSN-PAIR-chamfer-thickness`
`chamfer->thickness` 已完成真实 FreeCAD/OCCT no-op 拒绝分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- OCCT `BRepOffsetAPI_MakeThickSolid` 对锁定 `Face2` 执行 `-0.4 -> -0.6 -> -0.4` offset 轨迹;三次均返回有效 1 Solid 和 1 条原生 history但 Shape 摘要与上游逐字段相同,因此明确记为 `kernel-no-op`,不伪造接受变异。
- 真实 FreeCAD `Part::Thickness` 对同一 Chamfer Solid 返回 `Valid/Up-to-date`,结果 Shape 非空且有效,但输入与结果的有效性、拓扑数、体积、面积和边界完全一致,分类为 `freecadProfileNoOp`。
- 事务 abort 后对象集和实体几何恢复;源 BREP 因 FreeCAD 元素映射从 `fa5d7bd7...` 重序列化为稳定的 `0c4fbfd8...`TShape identity 不同,但有效性、拓扑数、体积、面积和边界逐字段一致,双向布尔差体积均为 `0`,该差异已显式登记而未冒充字节级恢复。
- 干净 FCStd save/reopen/resave 三阶段保持唯一源对象和相同 Shape 摘要,文档无临时 Thickness 污染focused probe 独立复跑两次得到相同目标 artifact SHA-256 `9e3811fc...`。
- focused ordered-pair gate 已锁定 OCCT/FreeCAD 双 no-op、参数恢复、几何等价回滚、BREP 重序列化和持久化证据;机器队列只推进一项。
### `TSN-PAIR-chamfer-linear-pattern`
`chamfer->linear-pattern` 已完成真实 OCCT 接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 沿 X 方向复制并融合 Chamfer 结果;名义结果为有效 1 Solid、42 Face、80 Edge、40 Vertex、体积 `1788.1813333`、面积 `883.902117` 和 258 条原生 history。
- `8 -> 9 -> 8` 平移轨迹使体积在 `1788.1813333 -> 1887.8613333 -> 1788.1813333` 间变化X 上界从 `18` 扩展到 `19` 后恢复几何摘要、history hash 和语义 naming 精确恢复。
- 上游 Chamfer naming evidence 向下游传播;下游保持原生 `ambiguous` 分类JSON round-trip 稳定,没有按索引伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `0de89018...`focused gate 已锁定交叠融合、变异、恢复、naming 和持久化证据。
- 机器队列只推进一项;后继任务继续由最新 `nextTask` 唯一决定。
### `TSN-PAIR-chamfer-polar-pattern`
`chamfer->polar-pattern` 已完成真实 OCCT 接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 绕 Z 轴旋转复制并融合 Chamfer 结果30 度名义结果为有效 1 Solid、46 Face、90 Edge、46 Vertex、体积 `1411.0585231`、面积 `735.5718725` 和 228 条原生 history。
- `30 -> 45 -> 30` 角度轨迹使体积在 `1411.0585231 -> 1573.5395566 -> 1411.0585231` 间变化面积和边界同步变化恢复态精确回到名义几何摘要、history hash 和语义 naming。
- 上游 Chamfer naming evidence 向下游传播;下游保持原生 `ambiguous` 分类JSON round-trip 稳定,没有伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `271f87be...`focused gate 已锁定旋转融合、变异、恢复、naming 和持久化证据。
- 机器队列只推进一项;后继任务继续由最新 `nextTask` 唯一决定。
### `TSN-PAIR-chamfer-mirrored`
`chamfer->mirrored` 已完成真实 OCCT 接受分类:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 默认 `x=5` 镜像面位于对称 Chamfer 实体中心,名义 Shape 与输入完全相同,未被误记为接受;改用保持副本相交且名义态真实改变几何的 `6 -> 7 -> 6` 专用轨迹。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder 镜像复制并融合;名义结果为有效 1 Solid、42 Face、80 Edge、40 Vertex、体积 `1190.1013333`、面积 `649.5256668` 和 258 条原生 history。
- 镜像面轨迹使体积在 `1190.1013333 -> 1389.4613333 -> 1190.1013333` 间变化X 上界从 `12` 扩展到 `14` 后恢复几何摘要、history hash 和语义 naming 精确恢复。
- 上游 Chamfer naming evidence 向下游传播;下游保持原生 `ambiguous` 分类JSON round-trip 稳定,没有伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `f63fc775...`focused gate 已锁定非 no-op 镜像、变异、恢复、naming 和持久化证据,机器队列只推进一项。
### `TSN-PAIR-chamfer-multi-transform`
`chamfer->multi-transform` 已完成真实 OCCT 接受分类,并闭合 Chamfer 起始行中尚需分类的全部有序操作对:
- 上游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder生成有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder依次执行 X 平移和关于 `x=5` 的镜像并融合;名义结果为有效 1 Solid、58 Face、112 Edge、56 Vertex、体积 `2585.6213333`、面积 `1196.4040506` 和 1027 条原生 history。
- `8 -> 9 -> 8` 首步 X 平移轨迹使体积在 `2585.6213333 -> 2784.9813333 -> 2585.6213333` 间变化,边界从 `[-8, 18]` 扩展为 `[-9, 19]` 后恢复几何摘要、history hash 和语义 naming 精确恢复。
- 上游 Chamfer naming evidence 向下游传播;下游保持原生 `ambiguous` 分类JSON round-trip 稳定,没有伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `9abb2623...`focused gate 已锁定 ordered builder、变异、恢复、naming 和持久化证据。
- 机器队列从 Chamfer 行末严格跨到下一起始操作行,没有跳号或第二个活动微任务;后继任务仍只读取最新 `nextTask`。
### `TSN-PAIR-hole-fuse`
`hole->fuse` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder 对 10x10x10 Box 执行中心贯穿孔,生成有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735`、面积 `656.5486678` 和 23 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder以相交工具融合 Hole 结果;名义结果为有效 1 Solid、14 Face、32 Edge、20 Vertex、体积 `1043.5840735`、面积 `716.5486678` 和 52 条原生 history。
- `8 -> 7 -> 8` 工具 X 偏移轨迹使体积在 `1043.5840735 -> 1018.5840735 -> 1043.5840735` 间变化X 上界从 `13` 变为 `12` 后恢复几何摘要、history hash 和语义 naming 精确恢复。
- 上游 Hole 的无歧义 `native-evidence` naming 向下游传播;下游对称拓扑保持 `ambiguous` 分类JSON round-trip 稳定,没有按索引伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `91e34b16...`;聚焦原生探针重跑仍得到相同分类。
- focused ordered-pair gate 已锁定两阶段 builder、双输入、变异、恢复、history、naming 和持久化证据;队列仅前移一项,后继任务仍以机器队列的最新 `nextTask` 为唯一来源。
### `TSN-PAIR-hole-cut`
`hole->cut` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder 对 10x10x10 Box 执行中心贯穿孔,生成有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735`、面积 `656.5486678` 和 23 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder 对 Hole 结果再次减料;名义结果为有效 1 Solid、12 Face、31 Edge、20 Vertex、体积 `904.5840735`、面积 `688.5486678` 和 36 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使体积在 `904.5840735 -> 941.5840735 -> 904.5840735` 间变化拓扑和面积同步变化恢复态精确回到名义几何摘要、history hash 和语义 naming hash。
- 上游 Hole 的无歧义 `native-evidence` naming 向下游传播;下游保持 `ambiguous` 分类且 JSON round-trip 稳定,没有按索引伪造唯一 token。
- 连续三次聚焦原生探针均得到 accepted、相同几何/history/语义 naming 和 FCStd 结果;跨进程只有恢复态完整原始 naming evidence 的序列化 hash 变化,未被误记为字节级恢复或语义漂移。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及名义态 naming evidence hash `a115b41a...`focused gate 已锁定两阶段 builder、双输入、变异、语义恢复、history、naming 和持久化证据。
- 机器队列仅前移一项,且只保留一个 `in_progress`;后继任务仍以最新 `nextTask` 为唯一来源。
### `TSN-PAIR-hole-common`
#### 执行过程
1. 从机器队列读取唯一活动任务,确认依赖已闭合,且退出条件要求接受证据包含 builder、变异、naming 和 FCStd resave。
2. 审计 Common 默认输入后发现 `x=10` 工具仅与 Hole 边界接触,不能形成有效体积交集;因此锁定保持实体交叠的 `7 -> 6 -> 7` X 偏移轨迹,没有将空交集误记为接受。
3. 执行器追加该有序操作对的连续前缀和专用参数;检查器同步锁定两阶段 builder、输入数、变异轨迹与分类汇总。
4. 真实聚焦探针执行 4 次 OCCT builder 和 FreeCAD 1.1.1 的 3 个 FCStd 阶段,然后通过 ordered-pair focused gate。
5. 生成器将刚完成任务标记为 `completed`,队列只前移一项,并继续保持唯一 `in_progress`。
#### 完成证据
`hole->common` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder 生成有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735`、面积 `656.5486678` 和 23 条原生 history。
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder 求交;名义结果为有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `75`、面积 `110` 和 140 条原生 history。
- `7 -> 6 -> 7` 工具 X 偏移轨迹使体积在 `75 -> 100 -> 75` 间变化,面积在 `110 -> 130 -> 110` 间变化X 下界从 `7` 移至 `6` 后恢复几何摘要、history hash 和语义 naming 精确恢复。
- 上游 Hole 的 `native-evidence` naming 向下游传播;下游对称拓扑保持 `ambiguous` 分类JSON round-trip 稳定,没有伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `7202e431...`focused gate 已锁定 builder、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-hole-rotate`
#### 执行过程
1. 在前一任务生成队列后重新读取唯一 `nextTask`,确认新任务是连续前缀中的下一有序操作对。
2. 执行器显式锁定 `BRepBuilderAPI_Transform` 和 `15 -> 22.5 -> 15` 角度轨迹;检查器追加单输入 builder、变异与分类汇总断言。
3. 聚焦原生探针完成 4 次 OCCT builder 和 3 个 FreeCAD FCStd 阶段ordered-pair focused gate 通过后才重建队列。
4. 队列生成器只将本项改为 `completed`,同时将下一项维持为唯一 `in_progress`。
#### 完成证据
`hole->rotate` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Hole 保持有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735`、面积 `656.5486678` 和 23 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder 绕 Z 轴旋转;名义结果保持相同 Solid、拓扑、体积和面积并生成 97 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹将世界坐标边界从 `[-2.5881906, 0, 0, 9.6592584, 12.2474488, 10]` 改为 `[-3.8268344, 0, 0, 9.2387954, 13.0656297, 10]` 后恢复;未因体积不变而误判为 no-op。
- 恢复态精确回到名义几何摘要、history hash 和语义 naming上游 Hole naming 向下游传播,下游保持 `ambiguous` 而没有伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段均保持名义 Shape 及 naming evidence hash `99df97fe...`focused gate 已锁定 builder、边界变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-hole-pad`
#### 执行过程
1. 从新生成的队列读取唯一活动项,将 Solid-as-Profile 预期明确为待探测的原生拒绝,没有预先伪造接受结果。
2. 执行器锁定 `BRepPrimAPI_MakePrism`、`5 -> 7.5 -> 5` 长度轨迹和 `occt-builder` 决策权;检查器锁定 `PartDesign::Pad` 类型与精确诊断。
3. 聚焦探针完成 OCCT 拒绝尝试、FreeCAD 文档重算、transaction abort 和 FCStd save/reopen/resavefocused gate 通过后队列才前移一项。
#### 完成证据
`hole->pad` 已完成真实 OCCT/FreeCAD 拒绝分类:
- 上游 Hole 保持有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735`、面积 `656.5486678` 和 23 条原生 history。
- `BRepPrimAPI_MakePrism` 对 Hole Solid 执行 `5 -> 7.5 -> 5` 长度轨迹,三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产生 result、Shape 或 history。
- FreeCAD 1.1.1 `PartDesign::Pad` 文档重算返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,状态为 `Touched/Invalid`Shape 为 null/invalid没有使用通用 Shape fallback。
- transaction abort 前后只保留原 `Part::Feature`对象集、Shape 摘要和源 BREP hash `d3a3dd33...` 精确恢复;失败 Pad、Body 和 Origin 没有污染文档。
- 干净 FCStd save/reopen/resave 三阶段均保持唯一源对象与相同有效 Shapefocused gate 已锁定拒绝阶段、参数轨迹、精确诊断、回滚和持久化证据。
### `TSN-PAIR-hole-pocket`
#### 执行过程
1. 重读机器队列并领取唯一活动项,锁定 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 两阶段减料和 `5 -> 4 -> 5` 深度轨迹。
2. 聚焦探针完成 4 次原生 builder 和 3 个 FreeCAD FCStd 阶段;检查器确认 Shape 变化、恢复、history、naming 和持久化后,队列生成器只前移一项。
#### 完成证据
`hole->pocket` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Hole 生成有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735` 和 23 条原生 history。
- 下游使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder名义结果为有效 1 Solid、10 Face、24 Edge、16 Vertex、体积 `938.5840735` 和 42 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使体积在 `938.5840735 -> 944.5840735 -> 938.5840735` 间变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上游 Hole naming 向下游传播,下游保持 `ambiguous` 分类与稳定 JSON round-tripFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `e47fa122...`。
- focused gate 已锁定 builder、变异、恢复、history、naming 和持久化证据;队列继续保持唯一 `in_progress`。
### `TSN-PAIR-hole-loft`
#### 执行过程
1. 从队列领取唯一活动项,将 OCCT kernel 可构造性与 FreeCAD 文档 profile 适用性分层检查。
2. 执行 `false -> true -> false` ruled 轨迹、FreeCAD `Part::Loft` 重算、transaction abort 和干净 FCStd 三阶段;聚焦门禁通过后才生成新队列。
#### 完成证据
`hole->loft` 已完成真实 OCCT/FreeCAD 分层拒绝分类:
- 上游 Hole 保持有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735` 和 23 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` 轨迹中均生成有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `750`、面积 `580.2775638` 和 24 条 history该结果只记为 `kernel-superset-only`。
- FreeCAD 1.1.1 `Part::Loft` 以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝 Solid section状态为 `Touched/Invalid` 且 Shape 为 null/invalid分类权威保持 `freecad-document`。
- abort 前后只保留原 Hole `Part::Feature`对象集、Shape 摘要和 BREP hash `d3a3dd33...` 精确恢复FCStd save/reopen/resave 三阶段无临时 Section 或 Loft 污染。
- focused gate 已锁定 kernel 超集证据、FreeCAD 精确诊断、回滚和干净持久化;队列只前移一项。
### `TSN-PAIR-hole-pipe`
#### 执行过程
1. 从最新队列领取唯一活动项,锁定 `15 -> 12 -> 15` spine 长度轨迹。
2. 分开采集 OCCT Shape 有效性、FreeCAD `Part::Sweep` 诊断、transaction abort 和 FCStd 往返focused gate 通过后队列只前移一项。
#### 完成证据
`hole->pipe` 已完成真实 OCCT/FreeCAD 拒绝分类:
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` 轨迹中每次都产生 Shape 和 28 条 history但 Shape 无效且体积为 `0`;面积在 `500 -> 440 -> 500` 间变化,恢复态回到名义 invalid-result 摘要。
- FreeCAD 1.1.1 `Part::Sweep` 返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid没有把“产生了无效 Shape”误报为接受。
- abort 前后只保留原 Hole `Part::Feature`对象集、Shape 和 BREP hash `d3a3dd33...` 一致;临时 Spine/Sweep 未污染文档。
- FCStd save/reopen/resave 三阶段保持源 Shapefocused gate 已锁定 kernel invalid-result、FreeCAD 精确诊断、回滚和持久化证据。
### `TSN-PAIR-hole-revolution`
#### 执行过程
1. 重读队列后领取唯一活动项,锁定 `BRepPrimAPI_MakeRevol`、`360 -> 270 -> 360` 角度轨迹与 `Part::Revolution` 文档诊断。
2. 完成原生拒绝探针、FreeCAD 重算、transaction abort、FCStd 三阶段和 focused gate队列只前移一项。
#### 完成证据
`hole->revolution` 已完成真实 OCCT/FreeCAD 拒绝分类:
- OCCT `BRepPrimAPI_MakeRevol` 对 Hole Solid 执行 `360 -> 270 -> 360` 轨迹,三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产生 result、Shape 或 history。
- FreeCAD 1.1.1 `Part::Revolution` 返回 `Solids are not Processed`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid没有使用通用旋转 Shape 代替 profile 合同。
- abort 前后唯一 Hole 源对象、Shape 摘要和 BREP hash `d3a3dd33...` 精确恢复FCStd save/reopen/resave 三阶段一致。
- focused gate 已锁定 builder 拒绝、FreeCAD 精确诊断、回滚和干净持久化证据。
### `TSN-PAIR-hole-groove`
#### 执行过程
1. 从队列领取唯一活动项,锁定真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder 与 `360 -> 180 -> 360` 轨迹。
2. 完成原生探针、变异恢复、naming、FCStd 三阶段和 focused gate队列只前移一项。
#### 完成证据
`hole->groove` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 360 度名义结果为有效 1 Solid、11 Face、27 Edge、18 Vertex、体积 `963.8716845`、面积 `663.1150384` 和 18 条原生 history。
- `360 -> 180 -> 360` 轨迹使编辑态变为 8 Face、19 Edge、14 Vertex、体积 `968.5840735`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上游 Hole naming 向下游传播,下游保持 `ambiguous` 分类FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `05e968b8...`。
- focused gate 已锁定 builder、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-hole-fillet`
#### 执行过程
1. 从最新队列领取唯一活动项,锁定 `BRepFilletAPI_MakeFillet` 和 `0.4 -> 0.6 -> 0.4` 半径轨迹。
2. 执行原生 builder、变异恢复、naming、FCStd 三阶段和 focused gate全部通过后队列只前移一项。
#### 完成证据
`hole->fillet` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder名义结果为有效 1 Solid、29 Face、63 Edge、28 Vertex、体积 `964.0793949`、面积 `633.7505843` 和 173 条原生 history。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使体积在 `964.0793949 -> 958.5016007 -> 964.0793949` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上游 Hole naming 向下游传播,下游保持 `ambiguous` 分类FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `6313804f...`。
- focused gate 已锁定 builder、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-hole-chamfer`
#### 执行过程
1. 从最新队列领取唯一活动项,锁定 `BRepFilletAPI_MakeChamfer` 和 `0.4 -> 0.6 -> 0.4` 距离轨迹。
2. 聚焦探针完成 builder、变异恢复、naming 和 FCStd 往返focused gate 通过后队列只前移一项。
#### 完成证据
`hole->chamfer` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder名义结果为有效 1 Solid、29 Face、55 Edge、28 Vertex、体积 `958.1860559`、面积 `625.4207803` 和 173 条原生 history。
- `0.4 -> 0.6 -> 0.4` 距离轨迹使体积在 `958.1860559 -> 945.4217374 -> 958.1860559` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上游 Hole naming 向下游传播,下游保持 `ambiguous` 分类FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `b9282639...`。
- focused gate 已锁定 builder、变异、恢复、history、naming 和持久化证据。
### `TSN-PAIR-hole-hole`
#### 执行过程
1. 从最新队列领取唯一活动项;审计发现复用默认中心与半径会使名义下游退化为 no-op因此将第二贯穿孔锁定在 `(2, 2)`。
2. 执行 `1 -> 1.5 -> 1` 半径轨迹、原生 history/naming、FCStd 三阶段和 focused gate证明名义态真实改变上游 Shape 后才推进队列。
#### 完成证据
`hole->hole` 已完成真实 OCCT/FreeCAD 接受分类:
- 第二阶段使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` builder 生成偏置贯穿孔;名义结果为有效 1 Solid、8 Face、18 Edge、12 Vertex、体积 `937.1681469`、面积 `713.0973355` 和 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `937.1681469 -> 897.8982388 -> 937.1681469` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上下游都获得无歧义 `native-evidence` naming没有伪造私有 tokenFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `daeee873...`。
- focused gate 已锁定偏置输入、变异、恢复、history、naming 和持久化证据。
后续任务必须从机器队列的最新 `nextTask` 继续,不在本文手工维护任务名称。
### `TSN-PAIR-hole-draft`
#### 执行过程
1. 从机器队列领取唯一活动项,使用真实 `BRepOffsetAPI_DraftAngle` 对 Hole 结果执行 `5 -> 8 -> 5` 角度轨迹。
2. 采集原生 builder、Shape 变化与恢复、history/naming 和 FCStd save/reopen/resave 证据;聚焦门禁通过后队列只前移一项。
#### 完成证据
`hole->draft` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Hole 为有效 1 Solid、7 Face、15 Edge、10 Vertex体积 `968.5840735`、面积 `656.5486678` 和 23 条原生 history。
- 下游拔模名义结果保持有效单 Solid体积 `924.8397417`、面积 `639.4329188` 和 5 条原生 history。
- `5 -> 8 -> 5` 角度轨迹使体积在 `924.8397417 -> 898.3136561 -> 924.8397417` 间变化,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上下游均为无歧义 `native-evidence` namingFCStd 三阶段保持 Shape 及 naming evidence hash `7e449b85...`。
### `TSN-PAIR-hole-thickness`
#### 执行过程
1. 从最新队列领取唯一活动项;先对 Hole 的候选面与两档 offset 做只读原生可构造性探测,确认默认面不是 no-op。
2. 将该对加入连续分类前缀和聚焦检查器,执行 4 次真实 `BRepOffsetAPI_MakeThickSolid` builder 及 3 个 FreeCAD FCStd 阶段。
3. 聚焦门禁、`git diff --check` 通过后生成队列;完成数只增加 1且仍只有一个 `in_progress`。
#### 完成证据
`hole->thickness` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游厚度使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder名义结果为有效 1 Solid、13 Face、30 Edge、20 Vertex体积 `212.6892722`、面积 `1078.4410513` 和 55 条原生 history。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹使体积在 `212.6892722 -> 311.4218728 -> 212.6892722` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- Hole 的无歧义 naming 向下游传播,厚度结果保持原生 `ambiguous` 分类和稳定 JSON round-trip没有伪造唯一 token。
- FreeCAD 1.1.1 FCStd save/reopen/resave 三阶段保持相同有效单 Solid、拓扑、体积、面积及 naming evidence hash `49370f17...`。
- focused ordered-pair gate 已锁定 builder、变异、恢复、history、naming 和持久化证据;队列仅前移一项。
### `TSN-PAIR-hole-linear-pattern`
#### 执行过程
1. 从机器队列读取唯一活动项 `TSN-PAIR-hole-linear-pattern`,确认前置 `TSN-PROD-DRIFT-001` 已满足,领取该任务。
2. 审计执行器与既有阵列合同,锁定下游候选为真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse`,先按 `8 -> 9 -> 8` 平移轨迹执行聚焦探针;当前不预设超出原生结果的 fallback 或能力结论。
3. 聚焦探针完成 4 次原生 builder 和 3 个 FreeCAD FCStd 阶段,实测分类为 `accepted`;逐字段确认 Shape 变化、恢复、history、naming 和持久化后,仅同步检查器的精确汇总常量。
#### 完成证据
`hole->linear-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Hole 保持有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735` 和 23 条原生 history。
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入阵列 builder名义结果为有效 1 Solid、16 Face、34 Edge、20 Vertex、体积 `1737.1681469`、面积 `1033.0973355` 和 66 条原生 history。
- `8 -> 9 -> 8` 平移轨迹使体积在 `1737.1681469 -> 1837.1681469 -> 1737.1681469` 间变化,边界同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上游 Hole naming 向下游传播,下游保持 `ambiguous` 原生分类FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence 稳定。
- ordered-pair focused gate、活动队列 gate、execution-plan gate、全部 JSON 解析和 `git diff --check` 通过;队列从 `370` 完成项前移到 `371`,唯一新活动项为 `TSN-PAIR-hole-polar-pattern`。
### `TSN-PAIR-hole-polar-pattern`
#### 执行过程
1. 从新生成的机器队列领取唯一活动项 `TSN-PAIR-hole-polar-pattern`,锁定真实旋转变换加 Fuse 的极轴阵列路径与 `30 -> 45 -> 30` 角度轨迹。
#### 完成证据
`hole->polar-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入极轴阵列 builder名义结果为有效 1 Solid、16 Face、30 Edge、20 Vertex、体积 `1422.6497308`、面积 `769.0598923` 和 96 条原生 history。
- `30 -> 45 -> 30` 角度轨迹使编辑态变为 21 Face、51 Edge、28 Vertex、体积 `1554.3705111` 和 127 条 history恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上游 Hole naming 向下游传播,下游保持 `ambiguous` 分类FCStd save/reopen/resave 三阶段保持相同 Shape 及 naming evidence hash `f773ce34...`。
- focused gate、活动队列 gate 和 `git diff --check` 通过;队列完成项增加到 `372`,唯一新活动项为 `TSN-PAIR-hole-mirrored`。
### `TSN-PAIR-hole-mirrored`
#### 执行过程
1. 从机器队列领取唯一活动项;审计发现 Hole 关于默认 `x=5` 镜像面对称,会使名义镜像退化为 no-op因此锁定 `6 -> 7 -> 6` 非对称平面轨迹后再采集真实 builder 证据。
#### 完成证据
`hole->mirrored` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 单输入镜像 builder名义结果为有效 1 Solid、18 Face、32 Edge、18 Vertex、体积 `1200`、面积 `680` 和 108 条原生 history。
- 非退化 `6 -> 7 -> 6` 镜像面轨迹使编辑态变为 18 Face、40 Edge、24 Vertex、体积 `1400`、面积 `760`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `ff14b8f0...`。
- focused gate、活动队列 gate 和 `git diff --check` 通过;队列完成项增加到 `373`,唯一新活动项为 `TSN-PAIR-hole-multi-transform`。
### `TSN-PAIR-hole-multi-transform`
#### 执行过程
1. 从机器队列领取 Hole 行最后一个活动项;确认 builder 按“线性副本后镜像整个中间结果”的固定顺序执行,因此沿用非退化 `8 -> 9 -> 8` 线性距离轨迹与 `x=5` 镜像面。
#### 完成证据
`hole->multi-transform` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游使用真实有序 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)` 单输入 builder名义结果为有效 1 Solid、26 Face、56 Edge、32 Vertex、体积 `2505.7522204`、面积 `1409.6460033` 和 441 条原生 history。
- `8 -> 9 -> 8` 线性距离轨迹使体积在 `2505.7522204 -> 2705.7522204 -> 2505.7522204` 间变化,边界同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `a4b7e760...`。
- focused gate 和 `git diff --check` 通过Hole 行 19/19 有序操作对全部闭合,队列完成项增加到 `374`,唯一新活动项为 `TSN-PAIR-draft-fuse`。
### `TSN-PAIR-draft-fuse`
#### 执行过程
1. 从新生成的机器队列领取唯一活动项 `TSN-PAIR-draft-fuse`;在开始新行前先执行 Hole 行边界的完整项目门禁,确保已有增量可作为稳定接续基线。
2. 完整 `./npmw run verify` 通过包括构建、PWA、79 个签名发布文件、release closure 和 Ed25519 验签;系统能力仍保持 `0 exact / 26 compatible / 5 proxy / 3 development` 的 fail-closed 状态。
3. 对照相邻实体 dress-up 行,将 Fuse 工具锁定为有重叠的 `8 -> 7 -> 8` 偏移轨迹,避免默认偏移 12 产生断开 Compound 后误当作代表性接受证据。
#### 完成证据
`draft->fuse` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Draft 为有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `956.2556682`、面积 `582.884251` 和 5 条原生 history。
- 下游真实 `BRepAlgoAPI_Fuse` 双输入结果为有效 1 Solid、13 Face、29 Edge、18 Vertex、体积 `1031.2556682`、面积 `642.884251` 和 52 条原生 history。
- `8 -> 7 -> 8` 工具偏移轨迹使体积在 `1031.2556682 -> 1006.2556682 -> 1031.2556682` 间变化,恢复态精确回到名义 Shape、history hash 和语义 namingFCStd 三阶段稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `375`,唯一新活动项为 `TSN-PAIR-draft-cut`。
### `TSN-PAIR-draft-cut`
#### 执行过程
1. 从机器队列领取唯一活动项;确认默认 Cut 工具位于 Draft 实体内部,采用真实 `BRepAlgoAPI_Cut` 与 `4 -> 3 -> 4` 工具尺寸轨迹采样。
#### 完成证据
`draft->cut` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Cut` 双输入结果为有效 1 Solid、10 Face、24 Edge、16 Vertex、体积 `892.2556682`、面积 `614.884251` 和 22 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使体积在 `892.2556682 -> 929.2556682 -> 892.2556682` 间变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游原生 naming 为 `ambiguous`FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `092779b6...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `376`,唯一新活动项为 `TSN-PAIR-draft-common`。
### `TSN-PAIR-draft-common`
#### 执行过程
1. 从机器队列领取唯一活动项;默认 Common 工具从 `x=10` 起只与 Draft 边界接触,因此锁定有实体重叠的 `7 -> 6 -> 7` 工具偏移轨迹。
#### 完成证据
`draft->common` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Common` 双输入结果为有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `75`、面积 `110` 和 121 条原生 history。
- `7 -> 6 -> 7` 工具偏移轨迹使体积在 `75 -> 100 -> 75` 间变化,边界同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游原生 naming 为 `ambiguous`FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `6bafa6dc...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `377`,唯一新活动项为 `TSN-PAIR-draft-rotate`。
### `TSN-PAIR-draft-rotate`
#### 执行过程
1. 从最新机器队列领取唯一活动项;沿用真实 `BRepBuilderAPI_Transform` 单输入 builder 和 `15 -> 22.5 -> 15` 角度轨迹,采集 Draft 实体的旋转、恢复、history/naming 与 FCStd 三阶段证据。
#### 完成证据
`draft->rotate` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepBuilderAPI_Transform` 单输入结果保持有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `956.2556682`、面积 `582.884251`,生成 78 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹将包围盒从 `[-2.5881906, -1e-7, -1e-7, 9.6592584, 12.2474488, 10.0000001]` 改为 `[-3.8268344, -1e-7, -1e-7, 9.2387954, 13.0656297, 10.0000001]` 后精确恢复history hash 与语义 naming 同步恢复。
- 上游 Draft 为无歧义 `native-evidence`,下游旋转保持 `ambiguous`FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `cceb25e8...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `378`,唯一新活动项为 `TSN-PAIR-draft-pad`。
### `TSN-PAIR-draft-pad`
#### 执行过程
1. 从机器队列领取唯一活动项;按实体输入合同执行真实 `BRepPrimAPI_MakePrism` 的 `5 -> 7.5 -> 5` 长度轨迹,并以真实 `PartDesign::Pad` 文档重算、事务回滚和干净 FCStd 三阶段作为拒绝分类证据。
#### 完成证据
`draft->pad` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游真实 `BRepPrimAPI_MakePrism` 对 Draft 实体执行 `5 -> 7.5 -> 5` 长度轨迹;三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `PartDesign::Pad` 重算返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后只保留有效源 `Part::Feature`,对象集与源 BREP hash `a18f0adb...` 完全一致;失败 Pad、Body 和 Origin 未污染文档。
- FCStd save/reopen/resave 三阶段保持 Draft 源实体的有效单 Solid、拓扑、体积和面积focused gate 与 `git diff --check` 通过,队列完成项增加到 `379`。
### `TSN-PAIR-draft-pocket`
#### 执行过程
1. 从最新队列领取唯一活动项;使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder 执行 `5 -> 4 -> 5` 深度轨迹,并采集 Shape/history/naming 恢复和 FCStd 三阶段证据。
#### 完成证据
`draft->pocket` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入结果为有效 1 Solid、9 Face、21 Edge、14 Vertex、体积 `929.5364931`、面积 `581.5146235` 和 58 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使体积在 `929.5364931 -> 934.3553962 -> 929.5364931` 间变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `d487a421...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `380`,唯一新活动项为 `TSN-PAIR-draft-loft`。
### `TSN-PAIR-draft-loft`
#### 执行过程
1. 从机器队列领取唯一活动项;使用真实 `BRepOffsetAPI_ThruSections` 执行 `false -> true -> false` ruled 轨迹,同时以真实 `Part::Loft` 文档重算判定实体 section 是否满足 FreeCAD profile 合同。
#### 完成证据
`draft->loft` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_ThruSections` 的三次 ruled 尝试均生成有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `315.6164976`、面积 `549.6140595` 和 24 条 history恢复态一致但只属于 kernel superset。
- FreeCAD 1.1.1 真实 `Part::Loft` 文档重算以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝实体 section状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后只保留 Draft 源对象Shape 与 BREP hash `a18f0adb...` 完全恢复FCStd save/reopen/resave 三阶段干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `381`,唯一新活动项为 `TSN-PAIR-draft-pipe`。
### `TSN-PAIR-draft-pipe`
#### 执行过程
1. 从最新队列领取唯一活动项;以真实 `BRepOffsetAPI_MakePipe` 执行 `15 -> 12 -> 15` spine 长度轨迹,并用真实 `Part::Sweep` 文档重算区分 kernel invalid-result 与 FreeCAD 拒绝。
2. 首轮聚焦探针 fail-closedDraft 输入上的 OCCT Pipe 实测生成有效 1 Solid并非相邻实体常见的 `invalid-result`;将该对的 kernel 预期纠正为实测 `accepted` 后重新采样,最终权威仍保持 `freecad-document`。
#### 完成证据
`draft->pipe` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_MakePipe` 的三次尝试均生成有效 1 Solid、6 Face、12 Edge、8 Vertex 和 28 条 history`15 -> 12 -> 15` 轨迹使体积在 `131.2329953 -> 104.9863962 -> 131.2329953` 间变化后精确恢复。
- 真实 FreeCAD `Part::Sweep` 文档重算返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalidkernel 接受仅作为 superset 诊断。
- 事务 abort 后源对象集、Shape 与 BREP hash `a18f0adb...` 完全恢复FCStd 三阶段保持干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `382`,唯一新活动项为 `TSN-PAIR-draft-revolution`。
### `TSN-PAIR-draft-revolution`
#### 执行过程
1. 从机器队列领取唯一活动项;以真实 `BRepPrimAPI_MakeRevol` 执行 `360 -> 270 -> 360` 角度轨迹,并用真实 `Part::Revolution` 重算、回滚和 FCStd 三阶段锁定实体输入拒绝合同。
#### 完成证据
`draft->revolution` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游真实 `BRepPrimAPI_MakeRevol` 对 Draft 实体执行 `360 -> 270 -> 360` 角度轨迹;三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- 真实 FreeCAD `Part::Revolution` 文档重算返回 `Solids are not Processed`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后源对象集与 BREP hash `a18f0adb...` 完全一致FCStd 三阶段保持有效 Draft 源实体且无失败 Revolution 污染。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `383`,唯一新活动项为 `TSN-PAIR-draft-groove`。
### `TSN-PAIR-draft-groove`
#### 执行过程
1. 从最新队列领取唯一活动项;使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder 执行 `360 -> 180 -> 360` 角度轨迹采集切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`draft->groove` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 结果为有效 1 Solid、10 Face、24 Edge、16 Vertex、体积 `951.8050786`、面积 `588.75249` 和 18 条原生 history。
- `360 -> 180 -> 360` 轨迹使编辑态变为 7 Face、16 Edge、12 Vertex体积回到 Draft 源值 `956.2556682`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `7f3be10c...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `384`,唯一新活动项为 `TSN-PAIR-draft-fillet`。
### `TSN-PAIR-draft-fillet`
#### 执行过程
1. 从最新机器队列领取唯一活动项;先仅扩展连续执行前缀,以真实 `BRepFilletAPI_MakeFillet` 对 Draft 边集合执行 `0.4 -> 0.6 -> 0.4` 半径轨迹,结论完全由原生探针决定。
#### 完成证据
`draft->fillet` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepFilletAPI_MakeFillet` 结果为有效 1 Solid、26 Face、56 Edge、24 Vertex、体积 `952.2666777`、面积 `562.3270603` 和 150 条原生 history。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使体积在 `952.2666777 -> 947.3773367 -> 952.2666777` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `03590c56...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `385`,唯一新活动项为 `TSN-PAIR-draft-chamfer`。
### `TSN-PAIR-draft-chamfer`
#### 执行过程
1. 从机器队列领取唯一活动项;先只扩展连续前缀,以真实 `BRepFilletAPI_MakeChamfer` 对 Draft 全边执行 `0.4 -> 0.6 -> 0.4` 距离轨迹,再按实测结果锁定分类。
#### 完成证据
`draft->chamfer` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepFilletAPI_MakeChamfer` 结果为有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `947.1369614`、面积 `554.6660823` 和 150 条原生 history。
- `0.4 -> 0.6 -> 0.4` 距离轨迹使体积在 `947.1369614 -> 936.1225793 -> 947.1369614` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `86475869...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `386`,唯一新活动项为 `TSN-PAIR-draft-hole`。
### `TSN-PAIR-draft-hole`
#### 执行过程
1. 从机器队列领取唯一活动项;以真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 对 Draft 实体执行 `1 -> 1.5 -> 1` 半径轨迹,先采集原生结果再锁定分类。
#### 完成证据
`draft->hole` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 结果为有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `924.8397417`、面积 `639.4329188` 和 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `924.8397417 -> 885.5698335 -> 924.8397417` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 上下游均为无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `4d76f9b3...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `387`,唯一新活动项为 `TSN-PAIR-draft-draft`。
### `TSN-PAIR-draft-draft`
#### 执行过程
1. 从最新队列领取唯一活动项;以真实 `BRepOffsetAPI_DraftAngle` 对已拔模实体再次执行 `5 -> 8 -> 5` 角度轨迹,先由 builder 的有效 Shape 或拒绝签名确定分类。
#### 完成证据
`draft->draft` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepOffsetAPI_DraftAngle` 名义 5 度结果保持有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `956.2556682`、面积 `582.884251`,并产生独立原生 history。
- `5 -> 8 -> 5` 轨迹使编辑态体积变为 `929.7295826`、面积变为 `572.8745903`,随后精确恢复名义 Shape、history hash 和语义 naming因此该能力不是恒定 no-op。
- 上下游均为无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `1e36c081...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `388`,唯一新活动项为 `TSN-PAIR-draft-thickness`。
### `TSN-PAIR-draft-thickness`
#### 执行过程
1. 从机器队列领取唯一活动项;先以真实 `BRepOffsetAPI_MakeThickSolid` 对锁定面执行 `-0.4 -> -0.6 -> -0.4` offset 轨迹由有效变异、invalid-result 或 no-op 实测决定分类。
#### 完成证据
`draft->thickness` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepOffsetAPI_MakeThickSolid` 结果为有效 1 Solid、11 Face、24 Edge、16 Vertex、体积 `180.8661951`、面积 `920.33342` 和 38 条原生 history。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹使体积在 `180.8661951 -> 262.3727637 -> 180.8661951` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `502f0c67...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `389`,唯一新活动项为 `TSN-PAIR-draft-linear-pattern`。
### `TSN-PAIR-draft-linear-pattern`
#### 执行过程
1. 从机器队列领取唯一活动项;以真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `8 -> 9 -> 8` 平移轨迹,采集交叠副本的 Shape、history、naming 和 FCStd 三阶段证据。
#### 完成证据
`draft->linear-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 结果为有效 1 Solid、14 Face、28 Edge、16 Vertex、体积 `1756.2556682`、面积 `902.884251` 和 66 条原生 history。
- `8 -> 9 -> 8` 平移轨迹使体积在 `1756.2556682 -> 1856.2556682 -> 1756.2556682` 间变化X 上界同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `35cb7d6b...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `390`,唯一新活动项为 `TSN-PAIR-draft-polar-pattern`。
### `TSN-PAIR-draft-polar-pattern`
#### 执行过程
1. 从机器队列领取唯一活动项;以真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `30 -> 45 -> 30` 角度轨迹采集拓扑、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`draft->polar-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 结果为有效 1 Solid、14 Face、30 Edge、18 Vertex、体积 `1378.1688669`、面积 `754.9351384` 和 66 条原生 history。
- `30 -> 45 -> 30` 角度轨迹使体积在 `1378.1688669 -> 1540.7663948 -> 1378.1688669` 间变化,边界同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `d1dd374c...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `391`,唯一新活动项为 `TSN-PAIR-draft-mirrored`。
### `TSN-PAIR-draft-mirrored`
#### 执行过程
1. 从最新队列领取唯一活动项;先以默认真实镜像变换加 Fuse 的 `5 -> 6 -> 5` 平面轨迹探测 Draft 实体是否仍关于 x=5 对称,再据实锁定代表性分类。
#### 完成证据
`draft->mirrored` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 的 x=5 镜像结果为有效 1 Solid、12 Face、22 Edge、12 Vertex、体积 `1000`、面积 `600` 和 118 条原生 history镜像补齐了非对称 Draft 的楔形差异,不是 no-op。
- `5 -> 6 -> 5` 镜像面轨迹使编辑态变为 14 Face、28 Edge、16 Vertex、体积 `1112.5113365`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `7a5113cd...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `392`,唯一新活动项为 `TSN-PAIR-draft-multi-transform`。
### `TSN-PAIR-draft-multi-transform`
#### 执行过程
1. 从机器队列领取 Draft 行最后一个活动项;使用真实有序 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)` 执行 `8 -> 9 -> 8` 线性距离轨迹,并锁定后续镜像整个中间结果的顺序语义。
#### 完成证据
`draft->multi-transform` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实有序 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)` 结果为有效 1 Solid、28 Face、54 Edge、28 Vertex、体积 `2600`、面积 `1240` 和 376 条原生 history。
- `8 -> 9 -> 8` 距离轨迹使编辑态变为 32 Face、62 Edge、32 Vertex、体积 `2800`、面积 `1320`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `bed9f818...`。
- focused gate 与 `git diff --check` 通过Draft 行 19/19 有序操作对全部闭合,队列完成项增加到 `393`,唯一新活动项为 `TSN-PAIR-thickness-fuse`。
### Draft 行边界完整验证
#### 执行过程
1. 在跨入 Thickness 行前运行完整 `./npmw run verify`验证本批分类、活动队列、构建、PWA、发布文件与签名闭环。
#### 完成证据
- 完整 `./npmw run verify` 通过263 个有序操作对分类、全套浏览器与单元测试、fuzz、生产构建、PWA、79 个发布文件、release closure 与 Ed25519 签名均通过。
- 发布矩阵仍严格保持 `0 exact / 26 compatible / 5 proxy / 3 development`,没有因局部有序操作对闭合而提升系统级 exact 声明。
### `TSN-PAIR-thickness-fuse`
#### 执行过程
1. 从机器队列领取 Thickness 行首个活动项;将 Fuse 工具锁定为与厚度实体有重叠的 `8 -> 7 -> 8` 偏移轨迹,避免默认断开 Compound并执行真实 `BRepAlgoAPI_Fuse`、恢复与 FCStd 三阶段采样。
#### 完成证据
`thickness->fuse` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Thickness 为有效 1 Solid、11 Face、24 Edge、16 Vertex、体积 `187.456`、面积 `953.28` 和 38 条原生 history。
- 下游真实 `BRepAlgoAPI_Fuse` 结果为有效 1 Solid、19 Face、47 Edge、30 Vertex、体积 `304.776`、面积 `1055.6` 和 58 条原生 history。
- `8 -> 7 -> 8` 工具偏移轨迹使体积在 `304.776 -> 300.936 -> 304.776` 间变化,恢复态精确回到名义 Shape、history hash 和语义 namingFCStd 三阶段稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `394`,唯一新活动项为 `TSN-PAIR-thickness-cut`。
### `TSN-PAIR-thickness-cut`
#### 执行过程
1. 从机器队列领取唯一活动项;使用真实 `BRepAlgoAPI_Cut` 和默认内部工具的 `4 -> 3 -> 4` 尺寸轨迹采集厚度壳体的切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`thickness->cut` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Cut` 结果为有效 1 Solid、15 Face、42 Edge、28 Vertex、体积 `175.296`、面积 `901.76` 和 54 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使体积在 `175.296 -> 180.736 -> 175.296` 间变化,恢复态精确回到名义 Shape、history hash 和语义 namingFCStd 三阶段稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `395`,唯一新活动项为 `TSN-PAIR-thickness-common`。
### `TSN-PAIR-thickness-common`
#### 执行过程
1. 从机器队列领取唯一活动项;将 Common 工具锁定为有实体交叠的 `7 -> 6 -> 7` 偏移轨迹,使用真实 `BRepAlgoAPI_Common` 采集交集、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`thickness->common` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Common` 结果为有效 1 Solid、8 Face、18 Edge、12 Vertex、体积 `11.52`、面积 `67.68` 和 203 条原生 history。
- `7 -> 6 -> 7` 工具偏移轨迹使体积在 `11.52 -> 15.36 -> 11.52` 间变化;恢复态精确回到名义 Shape、history hash 和语义 namingFCStd 三阶段稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `396`,唯一新活动项为 `TSN-PAIR-thickness-rotate`。
### `TSN-PAIR-thickness-rotate`
#### 执行过程
1. 从机器队列领取唯一活动项;使用真实 `BRepBuilderAPI_Transform` 对 Thickness 实体执行 `15 -> 22.5 -> 15` 角度轨迹采集刚体边界变化、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`thickness->rotate` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepBuilderAPI_Transform` 保持有效 1 Solid、11 Face、24 Edge、16 Vertex、体积 `187.456`、面积 `953.28`,生成 155 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹改变包围盒后精确恢复名义 Shape、history hash 和语义 namingFCStd save/reopen/resave 三阶段保持稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `397`,唯一新活动项为 `TSN-PAIR-thickness-pad`。
### `TSN-PAIR-thickness-pad`
#### 执行过程
1. 从机器队列领取唯一活动项;以真实 `BRepPrimAPI_MakePrism` 执行 `5 -> 7.5 -> 5` 长度轨迹,并使用真实 `PartDesign::Pad` 重算、事务回滚和干净 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`thickness->pad` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游真实 `BRepPrimAPI_MakePrism` 的 `5 -> 7.5 -> 5` 三次尝试均在 builder 阶段稳定拒绝,不产出 result、Shape 或 history。
- 真实 FreeCAD `PartDesign::Pad` 重算返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- abort 前后只保留 Thickness 源对象Shape 与 BREP hash `eafb7b89...` 完全一致FCStd save/reopen/resave 三阶段无临时 Body/Pad 污染。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `398`,唯一新活动项为 `TSN-PAIR-thickness-pocket`。
### `TSN-PAIR-thickness-pocket`
#### 执行过程
1. 从最新队列领取唯一活动项;使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 执行 `5 -> 4 -> 5` 深度轨迹采集厚度实体的切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`thickness->pocket` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 结果为有效 1 Solid、14 Face、39 Edge、26 Vertex、体积 `176.592`、面积 `906.32` 和 72 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使体积在 `176.592 -> 178.432 -> 176.592` 间变化,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `6cb05565...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `399`,唯一新活动项为 `TSN-PAIR-thickness-loft`。
### `TSN-PAIR-thickness-loft`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_ThruSections` 执行 `false -> true -> false` ruled 轨迹,并用真实 `Part::Loft` 重算区分 OCCT kernel 能力与 FreeCAD 实体 profile 合同。
#### 完成证据
`thickness->loft` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_ThruSections` 的三次 ruled 尝试均生成有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `750`、面积 `580.2775638` 和 24 条 history恢复态一致但只属于 kernel superset。
- FreeCAD 1.1.1 真实 `Part::Loft` 文档重算以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝 Thickness 实体 section状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后仅保留有效 Thickness 源对象Shape 与 BREP hash `eafb7b89...` 完全恢复FCStd save/reopen/resave 三阶段干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `400`,唯一新活动项为 `TSN-PAIR-thickness-pipe`。
### `TSN-PAIR-thickness-pipe`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_MakePipe` 执行 `15 -> 12 -> 15` spine 长度轨迹,并以真实 `Part::Sweep` 重算锁定最终 FreeCAD 合同。
#### 完成证据
`thickness->pipe` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_MakePipe` 的三次尝试均返回无效 Shape1 Solid、6 Face、12 Edge、8 Vertex、体积 `0` 和 28 条 history`15 -> 12 -> 15` 使面积 `500 -> 440 -> 500` 后恢复kernel 结论为稳定 `invalid-result`。
- FreeCAD 1.1.1 真实 `Part::Sweep` 文档重算返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后仅保留有效 Thickness 源对象Shape 与 BREP hash `eafb7b89...` 完全恢复FCStd 三阶段干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `401`,唯一新活动项为 `TSN-PAIR-thickness-revolution`。
### `TSN-PAIR-thickness-revolution`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepPrimAPI_MakeRevol` 执行 `360 -> 270 -> 360` 角度轨迹,并用真实 `Part::Revolution` 重算、回滚和 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`thickness->revolution` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游真实 `BRepPrimAPI_MakeRevol` 对 Thickness 实体执行 `360 -> 270 -> 360`;三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `Part::Revolution` 文档重算返回 `Solids are not Processed`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后只保留 Thickness 源对象Shape 与 BREP hash `eafb7b89...` 完全一致FCStd 三阶段无失败 Revolution 污染。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `402`,唯一新活动项为 `TSN-PAIR-thickness-groove`。
### `TSN-PAIR-thickness-groove`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 执行 `360 -> 180 -> 360` 角度轨迹采集薄壁实体切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`thickness->groove` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 结果为有效 1 Solid、16 Face、45 Edge、30 Vertex、体积 `184.9681824`、面积 `947.4500354` 和 29 条原生 history。
- `360 -> 180 -> 360` 轨迹使编辑态回到 Thickness 源体积 `187.456` 和面积 `953.28`,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `3aeb7354...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `403`,唯一新活动项为 `TSN-PAIR-thickness-fillet`。
### `TSN-PAIR-thickness-fillet`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepFilletAPI_MakeFillet` 对 Thickness 边集合执行 `0.4 -> 0.6 -> 0.4` 半径轨迹,并采集 FreeCAD profile、回滚与 FCStd 证据。
#### 完成证据
`thickness->fillet` 已完成原生 builder 拒绝与 FreeCAD 选边接受的分层分类:
- 原生 history WASM 对 Thickness 全边 Fillet 的首次真实执行触发 `null function or function signature mismatch`;锁定后的 `0.4 -> 0.6 -> 0.4` 三次 builder 轨迹均为无 result、无 Shape、无 history 的稳定 abort。
- 原始 FreeCAD 全边 fixture 同样触发 SIGSEGV将真实 profile 输入收窄为 GUI/生产合同中的显式 `Edge1` 后,`Part::Fillet` 重算成功为有效 1 Solid、12 Face、27 Edge、18 Vertex、体积 `187.1126371`、面积 `951.4945127`。
- 事务 abort 后仅保留 Thickness 源对象Shape 与 BREP hash `eafb7b89...` 完全恢复FCStd save/reopen/resave 三阶段干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `404`,唯一新活动项为 `TSN-PAIR-thickness-chamfer`。
### `TSN-PAIR-thickness-chamfer`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepFilletAPI_MakeChamfer` 对 Thickness 边集合执行 `0.4 -> 0.6 -> 0.4` 距离轨迹,先由实测 builder 结果决定分类。
#### 完成证据
`thickness->chamfer` 已完成原生 builder 拒绝与 FreeCAD 选边接受的分层分类:
- 原生 `BRepFilletAPI_MakeChamfer` 对 Thickness 全边距离轨迹 `0.4 -> 0.6 -> 0.4` 三次均以 Emscripten C++ exception 拒绝,不产出 result、Shape 或 history。
- FreeCAD 全边 fixture 在同一薄壁输入上触发原生 SIGSEGV按 GUI 显式选边合同收窄为 `Edge1` 后,真实 `Part::Chamfer` 重算成功为有效 1 Solid、12 Face、27 Edge、18 Vertex、体积 `186.656`、面积 `950.7768542`。
- 事务 abort 后仅保留 Thickness 源对象Shape 与 BREP hash `eafb7b89...` 完全恢复FCStd 三阶段干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `405`,唯一新活动项为 `TSN-PAIR-thickness-hole`。
### `TSN-PAIR-thickness-hole`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 执行 `1 -> 1.5 -> 1` 半径轨迹采集孔切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`thickness->hole` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 结果为有效 1 Solid、13 Face、30 Edge、20 Vertex、体积 `184.9427259`、面积 `945.7401776` 和 28 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `184.9427259 -> 181.8011332 -> 184.9427259` 间变化,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游为无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `6d68be45...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `406`,唯一新活动项为 `TSN-PAIR-thickness-draft`。
### `TSN-PAIR-thickness-draft`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_DraftAngle` 对锁定薄壁面执行 `5 -> 8 -> 5` 角度轨迹,由有效 Shape 或原生拒绝决定分类。
#### 完成证据
`thickness->draft` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepOffsetAPI_DraftAngle` 结果为有效 1 Solid、11 Face、24 Edge、16 Vertex、体积 `143.7116682`、面积 `936.164251` 和 5 条原生 history。
- `5 -> 8 -> 5` 角度轨迹使体积在 `143.7116682 -> 117.1855826 -> 143.7116682` 间变化,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游为无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `facf324c...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `407`,唯一新活动项为 `TSN-PAIR-thickness-thickness`。
### `TSN-PAIR-thickness-thickness`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_MakeThickSolid` 对已厚度实体执行 `-0.4 -> -0.6 -> -0.4` offset 轨迹由有效变异、no-op、invalid-result 或拒绝实测确定分类。
#### 完成证据
`thickness->thickness` 已完成 OCCT/FreeCAD 双层 no-op 分类:
- OCCT `BRepOffsetAPI_MakeThickSolid` 的 `-0.4 -> -0.6 -> -0.4` 三次尝试均返回与上游输入摘要完全一致的有效 1 Solid、11 Face、24 Edge、16 Vertex、体积 `187.456`、面积 `953.28` 和 1 条稳定 history。
- FreeCAD 1.1.1 真实 `Part::Thickness` 对 `Face2` 重算保持 `Valid/Up-to-date`,结果 Shape 与输入逐字段一致,明确归类为 no-op 而非 accepted mutation。
- 事务 abort 后源对象集与 BREP hash `eafb7b89...` 完全一致FCStd save/reopen/resave 三阶段干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `408`,唯一新活动项为 `TSN-PAIR-thickness-linear-pattern`。
### `TSN-PAIR-thickness-linear-pattern`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `8 -> 9 -> 8` 平移轨迹采集薄壁实体阵列、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`thickness->linear-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 结果为有效 1 Solid、29 Face、60 Edge、36 Vertex、体积 `344.192`、面积 `1722.24` 和 130 条原生 history。
- `8 -> 9 -> 8` 平移轨迹使体积在 `344.192 -> 359.552 -> 344.192` 间变化X 上界同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `52354b96...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `409`,唯一新活动项为 `TSN-PAIR-thickness-polar-pattern`。
### `TSN-PAIR-thickness-polar-pattern`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `30 -> 45 -> 30` 角度轨迹采集拓扑、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`thickness->polar-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 结果为有效 1 Solid、27 Face、66 Edge、42 Vertex、体积 `326.5688209`、面积 `1625.3550126` 和 152 条原生 history。
- `30 -> 45 -> 30` 角度轨迹使体积在 `326.5688209 -> 339.6931926 -> 326.5688209` 间变化history 与边界同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `60e3972b...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `410`,唯一新活动项为 `TSN-PAIR-thickness-mirrored`。
### `TSN-PAIR-thickness-mirrored`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实镜像 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `5 -> 6 -> 5` 平面轨迹采集对称态、偏移态、恢复、naming 与 FCStd 证据。
#### 完成证据
`linear-pattern->mirrored` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实镜像 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 的 x=5 结果为有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240`、X 下界 `-8` 和 258 条原生 history。
- `5 -> 6 -> 5` 镜像面轨迹使编辑态变为 30 Face、60 Edge、32 Vertex、体积 `2400`、X 下界 `-6`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `02771940...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `430`,唯一新活动项为 `TSN-PAIR-linear-pattern-multi-transform`。
### `TSN-PAIR-linear-pattern-multi-transform`
#### 执行过程
1. 从最新机器队列领取 Linear Pattern 行最后一个活动项;扩展连续探针前缀,使用真实有序 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)` 执行 `8 -> 9 -> 8` 线性距离轨迹,并锁定后续镜像整个中间结果的顺序语义。
#### 完成证据
`linear-pattern->multi-transform` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实有序 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)` 结果为有效 1 Solid、38 Face、76 Edge、40 Vertex、体积 `4200`、面积 `1880` 和 783 条原生 history。
- `8 -> 9 -> 8` 距离轨迹使编辑态变为 54 Face、108 Edge、56 Vertex、体积 `4400`、面积 `1960`,边界与 history 同步扩展;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `7770e81b...`。
- focused gate 与 `git diff --check` 通过Linear Pattern 行 19/19 有序操作对全部闭合,队列完成项增加到 `431`,唯一新活动项为 `TSN-PAIR-polar-pattern-fuse`。
### Linear Pattern 行边界完整验证
#### 执行过程
1. 在跨入 Polar Pattern 行前运行完整 `./npmw run verify`验证新增分类、no-op/BREP 重序列化合同、活动队列、构建、PWA、发布文件与签名闭环。
#### 完成证据
- 完整 `./npmw run verify` 通过301 个逐对原生分类与 4 个既有生产转换覆盖、全套浏览器与单元测试、FCStd/几何/Sketch fuzz、生产构建、PWA、79 个发布文件、release closure 与 Ed25519 签名全部通过。
- 发布矩阵继续严格保持 `0 exact / 26 compatible / 5 proxy / 3 development`,系统级 `systemExact=false`;局部有序操作对闭合没有越权提升能力声明。
### `TSN-PAIR-polar-pattern-fuse`
#### 执行过程
1. 从完整验证后的最新机器队列领取 Polar Pattern 行首个活动项;扩展连续探针前缀,以真实上游旋转阵列和下游 `BRepAlgoAPI_Fuse` 工具执行变异、恢复、naming 与 FCStd 三阶段采样。首轮默认 x=12 工具与上游不相交,返回 2 Solid Compound 且无 history被门禁正确阻止将工具轨迹修正为真实相交的 `8 -> 7 -> 8` 后重跑。
#### 完成证据
`polar-pattern->fuse` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Polar Pattern 为有效 1 Solid、12 Face、26 Edge、16 Vertex、体积 `1422.6497308`、面积 `769.0598923` 和 78 条原生 history。
- 下游真实 `BRepAlgoAPI_Fuse` 结果为有效 1 Solid、21 Face、46 Edge、27 Vertex、体积 `1497.6497308`、面积 `829.0598923` 和 64 条原生 history。
- x=`8 -> 7 -> 8` 工具轨迹使体积在 `1497.6497308 -> 1472.6497308 -> 1497.6497308` 间变化,恢复态精确回到名义 Shape、history hash 和语义 namingFCStd 三阶段保持 naming evidence hash `7edcf077...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `432`,唯一新活动项为 `TSN-PAIR-polar-pattern-cut`。
### `TSN-PAIR-polar-pattern-cut`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepAlgoAPI_Cut` 执行 `4 -> 3 -> 4` 工具尺寸轨迹采集旋转阵列切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`polar-pattern->cut` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Cut` 结果为有效 1 Solid、17 Face、41 Edge、26 Vertex、体积 `1358.6497308`、面积 `801.0598923` 和 34 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使体积在 `1358.6497308 -> 1395.6497308 -> 1358.6497308` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `567c4970...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `433`,唯一新活动项为 `TSN-PAIR-polar-pattern-common`。
### `TSN-PAIR-polar-pattern-common`
#### 执行过程
1. 从最新机器队列领取唯一活动项;根据上游实测 X 上界 `10` 避免默认 x=10 的退化接触,以真实 `BRepAlgoAPI_Common` 执行 `7 -> 6 -> 7` 工具偏移轨迹采集体积交集、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->common` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Common` 名义结果为有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `75`、面积 `110` 和 213 条原生 history。
- `7 -> 6 -> 7` 工具偏移轨迹使编辑态体积变为 `100`、面积变为 `130`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `726029e7...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `434`,唯一新活动项为 `TSN-PAIR-polar-pattern-rotate`。
### `TSN-PAIR-polar-pattern-rotate`
#### 执行过程
1. 从最新机器队列领取唯一活动项;使用真实 `BRepBuilderAPI_Transform` 执行 `15 -> 22.5 -> 15` 角度轨迹采集刚体边界变化、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`polar-pattern->rotate` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Polar Pattern 为有效 1 Solid、12 Face、26 Edge、16 Vertex、体积 `1422.6497308`、面积 `769.0598923` 和 78 条原生 history。
- 下游真实 `BRepBuilderAPI_Transform` 保持有效 1 Solid、12 Face、26 Edge、16 Vertex、体积 `1422.6497308`、面积 `769.0598923`,生成 168 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹改变包围盒但保持质量属性,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `0f073ae2...`。
- 单对原生探针、focused gate 与队列生成通过,队列完成项增加到 `435`,唯一新活动项为 `TSN-PAIR-polar-pattern-pad`。
### `TSN-PAIR-polar-pattern-pad`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepPrimAPI_MakePrism` 执行 `5 -> 7.5 -> 5` 长度轨迹,并用真实 `PartDesign::Pad` 重算、事务回滚和 FCStd 三阶段锁定实体 Profile 拒绝合同。
#### 完成证据
`polar-pattern->pad` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游真实 `BRepPrimAPI_MakePrism` 的三次长度尝试均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `PartDesign::Pad` 重算返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- abort 前后只保留有效 Polar Pattern 源对象Shape 与 BREP hash `35c40a35...` 完全一致FCStd save/reopen/resave 三阶段无临时 Body/Pad 污染。
- focused gate 与队列生成通过,队列完成项增加到 `436`,唯一新活动项为 `TSN-PAIR-polar-pattern-pocket`。
### `TSN-PAIR-polar-pattern-pocket`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 执行 `5 -> 4 -> 5` 深度轨迹采集阵列实体切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`polar-pattern->pocket` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 结果为有效 1 Solid、16 Face、38 Edge、24 Vertex、体积 `1392.6497308`、面积 `799.0598923` 和 55 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使体积在 `1392.6497308 -> 1398.6497308 -> 1392.6497308` 间变化,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `c0fb0f57...`。
- focused gate 与队列生成通过,队列完成项增加到 `437`,唯一新活动项为 `TSN-PAIR-polar-pattern-loft`。
### `TSN-PAIR-polar-pattern-loft`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_ThruSections` 执行 `false -> true -> false` ruled 轨迹,并用真实 `Part::Loft` 重算区分 OCCT kernel 能力与 FreeCAD 实体 section 合同。
#### 完成证据
`polar-pattern->loft` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_ThruSections` 的三次 ruled 尝试均生成有效 1 Solid、6 Face、12 Edge、8 Vertex、面积 `556.1837862` 和 24 条 history恢复态一致但只属于 kernel superset。
- FreeCAD 1.1.1 真实 `Part::Loft` 重算以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝 Polar Pattern 实体 section状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后只保留有效 Polar Pattern 源对象Shape 与 BREP hash `35c40a35...` 完全恢复FCStd 三阶段干净稳定。
- focused gate 与队列生成通过,队列完成项增加到 `438`,唯一新活动项为 `TSN-PAIR-polar-pattern-pipe`。
### `TSN-PAIR-polar-pattern-pipe`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_MakePipe` 执行 `15 -> 12 -> 15` spine 长度轨迹,并以真实 `Part::Sweep` 重算锁定最终 FreeCAD 合同。
#### 完成证据
`polar-pattern->pipe` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_MakePipe` 三次尝试均返回无效 Shape1 Solid、6 Face、12 Edge、8 Vertex、体积 `0``15 -> 12 -> 15` 使面积 `500 -> 440 -> 500` 后恢复kernel 结论为稳定 `invalid-result`。
- FreeCAD 1.1.1 真实 `Part::Sweep` 重算返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后仅保留有效 Polar Pattern 源对象Shape 与 BREP hash `35c40a35...` 完全恢复FCStd 三阶段干净稳定。
- focused gate 与队列生成通过,队列完成项增加到 `439`,唯一新活动项为 `TSN-PAIR-polar-pattern-revolution`。
### `TSN-PAIR-polar-pattern-revolution`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepPrimAPI_MakeRevol` 执行 `360 -> 270 -> 360` 角度轨迹,并用真实 `Part::Revolution` 重算、回滚和 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`polar-pattern->revolution` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游真实 `BRepPrimAPI_MakeRevol` 的三次角度尝试均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `Part::Revolution` 重算返回该拓扑特有的 `BRep_API: command not done`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid检查器据原生事实锁定该诊断没有套用其他实体的通用文本。
- 事务 abort 前后只保留 Polar Pattern 源对象Shape 与 BREP hash `35c40a35...` 完全一致FCStd 三阶段无失败 Revolution 污染。
- focused gate 与队列生成通过,队列完成项增加到 `440`,唯一新活动项为 `TSN-PAIR-polar-pattern-groove`。
### `TSN-PAIR-polar-pattern-groove`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 执行 `360 -> 180 -> 360` 角度轨迹采集旋转阵列实体切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`polar-pattern->groove` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Groove 结果为有效 1 Solid、16 Face、41 Edge、26 Vertex、体积 `1413.279598`、面积 `787.2071345` 和 23 条原生 history。
- `360 -> 180 -> 360` 角度轨迹使编辑态回到 Polar Pattern 源体积与面积,但拓扑与 history 同步改变;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `bbb3977c...`。
- focused gate 与队列生成通过,队列完成项增加到 `441`,唯一新活动项为 `TSN-PAIR-polar-pattern-fillet`。
### `TSN-PAIR-polar-pattern-fillet`
#### 执行过程
1. 从最新机器队列领取唯一活动项;首次按接受路径运行真实 `BRepFilletAPI_MakeFillet`,原生 WASM 在构造阶段崩溃,门禁 fail-closed随后显式转为拒绝探针重复 `0.4 -> 0.6 -> 0.4` 并采集 FreeCAD 文档重算、事务回滚与 FCStd 三阶段证据。
#### 完成证据
`polar-pattern->fillet` 已完成真实 FreeCAD/OCCT 拒绝分类:
- OCCT 全边 `BRepFilletAPI_MakeFillet` 的三次半径尝试均在 builder 阶段稳定触发 `null function or function signature mismatch`,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `Part::Fillet` 对全部 26 条边重算返回 `BRep_API: command not done`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后只保留 Polar Pattern 源对象Shape 与 BREP hash `35c40a35...` 完全一致FCStd 三阶段无失败 Fillet 污染。
- focused gate 与队列生成通过,队列完成项增加到 `442`,唯一新活动项为 `TSN-PAIR-polar-pattern-chamfer`。
### `TSN-PAIR-polar-pattern-chamfer`
#### 执行过程
1. 从最新机器队列领取唯一活动项;首次按接受路径运行真实 `BRepFilletAPI_MakeChamfer` 时 builder 抛出原生 C++ exception门禁 fail-closed随后显式转为拒绝探针执行 `0.4 -> 0.6 -> 0.4` 并采集 FreeCAD 文档重算、事务回滚和 FCStd 三阶段证据。
#### 完成证据
`polar-pattern->chamfer` 已完成真实 FreeCAD/OCCT 拒绝分类:
- OCCT 全边 `BRepFilletAPI_MakeChamfer` 的三次距离尝试均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `Part::Chamfer` 对全部 26 条边重算返回 `BRep_API: command not done`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后只保留 Polar Pattern 源对象Shape 与 BREP hash `35c40a35...` 完全一致FCStd 三阶段无失败 Chamfer 污染。
- focused gate 与队列生成通过,队列完成项增加到 `443`,唯一新活动项为 `TSN-PAIR-polar-pattern-hole`。
### `TSN-PAIR-polar-pattern-hole`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 执行 `1 -> 1.5 -> 1` 半径轨迹采集孔切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`polar-pattern->hole` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Hole 结果为有效 1 Solid、13 Face、29 Edge、18 Vertex、体积 `1391.2338043`、面积 `825.6085601` 和 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `1391.2338043 -> 1351.9638961 -> 1391.2338043` 间变化,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游为无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `82648785...`。
- focused gate 与队列生成通过,队列完成项增加到 `444`,唯一新活动项为 `TSN-PAIR-polar-pattern-draft`。
### `TSN-PAIR-polar-pattern-draft`
#### 执行过程
1. 从最新机器队列领取唯一活动项;首次按接受路径运行真实 `BRepOffsetAPI_DraftAngle` 时 builder 抛出原生 C++ exception门禁 fail-closed随后切换为拒绝探针执行 `5 -> 8 -> 5` 并采集真实 `PartDesign::Draft` 重算、Shape 转移、事务回滚和 FCStd 三阶段证据。
#### 完成证据
`polar-pattern->draft` 已完成真实 FreeCAD/OCCT 拒绝分类:
- OCCT Draft 的三次角度尝试均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `PartDesign::Draft` 通过 `DraftBase` 接收逐字段一致的 Shape 摘要,但 BREP 明确重序列化;重算状态为 `Touched/Invalid`、Shape 为 null/invalid诊断字符串为空均被检查器精确锁定。
- 事务 abort 后源对象集、Shape 摘要与原始 BREP hash `35c40a35...` 完全恢复FCStd 三阶段无 DraftBase、Datum 或失败 Draft 污染。
- focused gate 与队列生成通过,队列完成项增加到 `445`,唯一新活动项为 `TSN-PAIR-polar-pattern-thickness`。
### `TSN-PAIR-polar-pattern-thickness`
#### 执行过程
1. 从最新机器队列领取唯一活动项;接受路径因 `-0.4 -> -0.6 -> -0.4` 三阶段 Shape/history 不变而 fail-closed随后转入显式 `occt-no-op` 分支。STEP 往返带来单个边界值 `1e-7` 的重序列化差异,因此新增仅对该任务启用的“拓扑精确 + 几何度量 `1e-6` 容差”no-op 合同,并采集 FreeCAD 文档状态与回滚证据。
#### 完成证据
`polar-pattern->thickness` 已完成 OCCT/FreeCAD 双层 no-op 分类:
- OCCT `BRepOffsetAPI_MakeThickSolid` 的三次 offset 尝试均返回有效 1 Solid、12 Face、26 Edge、16 Vertex、体积 `1422.6497308`、面积 `769.0598923` 和 1 条稳定 history参数变异没有产生厚壳效果。
- 输出与输入仅在 Y 上界存在约 `1e-7` 的 STEP 数值重序列化,检查器显式要求 `noOpComparison=topology-and-metrics-within-1e-6`,未把该漂移隐藏为逐字段 exact。
- FreeCAD 1.1.1 真实 `Part::Thickness` 对 `Face2` 重算保持 `Valid/Up-to-date`,结果 Shape 摘要与输入一致;事务 abort 后几何双向差体积为零,但 BREP hash 从 `35c40a35...` 变为 `3258844f...`,该重序列化已明确分类。
- focused gate 与队列生成通过,队列完成项增加到 `446`,唯一新活动项为 `TSN-PAIR-polar-pattern-linear-pattern`。
### `TSN-PAIR-thickness-multi-transform`
#### 执行过程
1. 从最新机器队列领取 Thickness 行最后一个活动项;扩展连续探针前缀,使用真实有序 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)` 执行 `8 -> 9 -> 8` 线性距离轨迹,并锁定后续镜像整个中间结果的顺序语义。
#### 完成证据
`thickness->multi-transform` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实有序 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)` 结果为有效 1 Solid、50 Face、104 Edge、64 Vertex、体积 `534.784`、面积 `2645.76` 和 714 条原生 history。
- `8 -> 9 -> 8` 距离轨迹使编辑态体积变为 `565.504`、面积变为 `2799.36`,边界同步扩展;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `9b00aefd...`。
- focused gate 与 `git diff --check` 通过Thickness 行 19/19 有序操作对全部闭合,队列完成项增加到 `412`,唯一新活动项为 `TSN-PAIR-linear-pattern-fuse`。
### Thickness 行边界完整验证
#### 执行过程
1. 在跨入 Linear Pattern 行前运行完整 `./npmw run verify`,验证新增分类、原生崩溃/选边分层合同、活动队列、构建、PWA、发布文件与签名闭环。
#### 完成证据
- 完整 `./npmw run verify` 通过282 个逐对原生分类与 4 个既有生产转换覆盖、全套浏览器与单元测试、FCStd/几何/Sketch fuzz、生产构建、PWA、79 个发布文件、release closure 与 Ed25519 签名全部通过。
- 发布矩阵继续严格保持 `0 exact / 26 compatible / 5 proxy / 3 development`,系统级 `systemExact=false`;局部有序操作对闭合没有越权提升能力声明。
### `TSN-PAIR-linear-pattern-fuse`
#### 执行过程
1. 从最新机器队列领取 Linear Pattern 行首个活动项;扩展连续探针前缀,以真实上游平移阵列和下游 `BRepAlgoAPI_Fuse` 工具执行变异、恢复、naming 与 FCStd 三阶段采样。
#### 完成证据
`linear-pattern->fuse` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Linear Pattern 为有效 1 Solid、14 Face、28 Edge、16 Vertex、体积 `1800`、面积 `920` 和 66 条原生 history。
- 默认工具完全位于上游实体内部而成为 no-op将下游 Fuse 工具修正为部分越出实体的 `16 -> 15 -> 16` 偏移轨迹后,名义结果体积 `1875`、编辑态体积 `1850`,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游真实 `BRepAlgoAPI_Fuse` 结果为有效 1 Solid、21 Face、45 Edge、26 Vertex 和 52 条原生 historyFCStd 三阶段保持 Shape 及 naming evidence hash `2834ea3b...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `413`,唯一新活动项为 `TSN-PAIR-linear-pattern-cut`。
### `TSN-PAIR-linear-pattern-cut`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepAlgoAPI_Cut` 执行 `4 -> 3 -> 4` 工具尺寸轨迹采集阵列实体切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`linear-pattern->cut` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Cut` 结果为有效 1 Solid、18 Face、40 Edge、24 Vertex、体积 `1736`、面积 `952` 和 22 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使体积在 `1736 -> 1773 -> 1736` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `2c8836f5...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `414`,唯一新活动项为 `TSN-PAIR-linear-pattern-common`。
### `TSN-PAIR-linear-pattern-common`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepAlgoAPI_Common` 执行 `10 -> 9 -> 10` 工具偏移轨迹采集交集、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`linear-pattern->common` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Common` 名义结果为有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `125`、面积 `150` 和 205 条原生 history。
- `10 -> 9 -> 10` 工具偏移轨迹保持体积 `125`,但编辑态变为 8 Face、17 Edge、11 Vertex边界与 history 同步改变;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `655fa2c5...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `415`,唯一新活动项为 `TSN-PAIR-linear-pattern-rotate`。
### `TSN-PAIR-linear-pattern-rotate`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,使用真实 `BRepBuilderAPI_Transform` 执行 `15 -> 22.5 -> 15` 角度轨迹采集刚体边界变化、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`linear-pattern->rotate` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepBuilderAPI_Transform` 保持有效 1 Solid、14 Face、28 Edge、16 Vertex、体积 `1800`、面积 `920`,生成 182 条原生 history。
- `15 -> 22.5 -> 15` 角度轨迹改变包围盒但保持质量属性,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `aceb3c19...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `416`,唯一新活动项为 `TSN-PAIR-linear-pattern-pad`。
### `TSN-PAIR-linear-pattern-pad`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepPrimAPI_MakePrism` 执行 `5 -> 7.5 -> 5` 长度轨迹,并用真实 `PartDesign::Pad` 重算、回滚和 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`linear-pattern->pad` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游真实 `BRepPrimAPI_MakePrism` 的 `5 -> 7.5 -> 5` 三次尝试均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `PartDesign::Pad` 重算返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- abort 前后仅保留 Linear Pattern 源对象Shape 与 BREP hash `3294bb87...` 完全一致FCStd save/reopen/resave 三阶段无临时 Body/Pad 污染。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `417`,唯一新活动项为 `TSN-PAIR-linear-pattern-pocket`。
### `TSN-PAIR-linear-pattern-pocket`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,使用真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 执行 `5 -> 4 -> 5` 深度轨迹采集阵列实体切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`linear-pattern->pocket` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 结果为有效 1 Solid、17 Face、37 Edge、22 Vertex、体积 `1770`、面积 `920` 和 42 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使体积在 `1770 -> 1776 -> 1770` 间变化,恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `b06bd539...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `418`,唯一新活动项为 `TSN-PAIR-linear-pattern-loft`。
### `TSN-PAIR-linear-pattern-loft`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_ThruSections` 执行 `false -> true -> false` ruled 轨迹,并用真实 `Part::Loft` 重算区分 OCCT kernel 能力与 FreeCAD 实体 section 合同。
#### 完成证据
`linear-pattern->loft` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_ThruSections` 的三次 ruled 尝试均生成有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `750`、面积 `580.2775638` 和 24 条 history恢复态一致但只属于 kernel superset。
- FreeCAD 1.1.1 真实 `Part::Loft` 文档重算以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝 Linear Pattern 实体 section状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后仅保留有效 Linear Pattern 源对象Shape 与 BREP hash `3294bb87...` 完全恢复FCStd save/reopen/resave 三阶段干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `419`,唯一新活动项为 `TSN-PAIR-linear-pattern-pipe`。
### `TSN-PAIR-linear-pattern-pipe`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_MakePipe` 执行 `15 -> 12 -> 15` spine 长度轨迹,并以真实 `Part::Sweep` 重算锁定最终 FreeCAD 合同。
#### 完成证据
`linear-pattern->pipe` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_MakePipe` 的三次尝试均返回无效 Shape1 Solid、6 Face、12 Edge、8 Vertex、体积 `0` 和 28 条 history`15 -> 12 -> 15` 使面积 `500 -> 440 -> 500` 后恢复kernel 结论为稳定 `invalid-result`。
- FreeCAD 1.1.1 真实 `Part::Sweep` 文档重算返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后仅保留有效 Linear Pattern 源对象Shape 与 BREP hash `3294bb87...` 完全恢复FCStd 三阶段干净稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `420`,唯一新活动项为 `TSN-PAIR-linear-pattern-revolution`。
### `TSN-PAIR-linear-pattern-revolution`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepPrimAPI_MakeRevol` 执行 `360 -> 270 -> 360` 角度轨迹,并用真实 `Part::Revolution` 重算、回滚和 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`linear-pattern->revolution` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游真实 `BRepPrimAPI_MakeRevol` 对 Linear Pattern 实体执行 `360 -> 270 -> 360`;三次均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 真实 `Part::Revolution` 文档重算返回 `Solids are not Processed`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后只保留 Linear Pattern 源对象Shape 与 BREP hash `3294bb87...` 完全一致FCStd 三阶段无失败 Revolution 污染。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `421`,唯一新活动项为 `TSN-PAIR-linear-pattern-groove`。
### `TSN-PAIR-linear-pattern-groove`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,使用真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 执行 `360 -> 180 -> 360` 角度轨迹采集阵列实体切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`linear-pattern->groove` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 结果为有效 1 Solid、18 Face、40 Edge、24 Vertex、体积 `1795.287611`、面积 `926.5663706` 和 18 条原生 history。
- `360 -> 180 -> 360` 角度轨迹使编辑态回到 Linear Pattern 源体积 `1800` 和面积 `920`,但拓扑与 history 同步改变;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `1200720c...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `422`,唯一新活动项为 `TSN-PAIR-linear-pattern-fillet`。
### `TSN-PAIR-linear-pattern-fillet`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepFilletAPI_MakeFillet` 对 Linear Pattern 边集合执行 `0.4 -> 0.6 -> 0.4` 半径轨迹,先由实测 builder 结果决定分类。
#### 完成证据
`linear-pattern->fillet` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepFilletAPI_MakeFillet` 结果为有效 1 Solid、42 Face、88 Edge、40 Vertex、体积 `1794.8665943`、面积 `893.7231781` 和 270 条原生 history。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使体积在 `1794.8665943 -> 1788.5462621 -> 1794.8665943` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `b22c4cbd...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `423`,唯一新活动项为 `TSN-PAIR-linear-pattern-chamfer`。
### `TSN-PAIR-linear-pattern-chamfer`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepFilletAPI_MakeChamfer` 对 Linear Pattern 边集合执行 `0.4 -> 0.6 -> 0.4` 距离轨迹,先由实测 builder 结果决定分类。
#### 完成证据
`linear-pattern->chamfer` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepFilletAPI_MakeChamfer` 结果为有效 1 Solid、42 Face、80 Edge、40 Vertex、体积 `1788.1813333`、面积 `883.902117` 和 270 条原生 history。
- `0.4 -> 0.6 -> 0.4` 距离轨迹使体积在 `1788.1813333 -> 1773.792 -> 1788.1813333` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `a68b7d31...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `424`,唯一新活动项为 `TSN-PAIR-linear-pattern-hole`。
### `TSN-PAIR-linear-pattern-hole`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 执行 `1 -> 1.5 -> 1` 半径轨迹采集孔切除、恢复、naming 与 FCStd 三阶段证据。
#### 完成证据
`linear-pattern->hole` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 结果为有效 1 Solid、15 Face、31 Edge、18 Vertex、体积 `1768.5840735`、面积 `976.5486678` 和 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使体积在 `1768.5840735 -> 1729.3141653 -> 1768.5840735` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游为无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `c92719e0...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `425`,唯一新活动项为 `TSN-PAIR-linear-pattern-draft`。
### `TSN-PAIR-linear-pattern-draft`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_DraftAngle` 对锁定阵列面执行 `5 -> 8 -> 5` 角度轨迹,由有效 Shape 或原生拒绝决定分类。
#### 完成证据
`linear-pattern->draft` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepOffsetAPI_DraftAngle` 结果为有效 1 Solid、14 Face、28 Edge、16 Vertex、体积 `1756.2556682`、面积 `902.884251` 和 5 条原生 history。
- `5 -> 8 -> 5` 角度轨迹使体积在 `1756.2556682 -> 1729.7295826 -> 1756.2556682` 间变化,面积同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游为无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `43f06ae0...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `426`,唯一新活动项为 `TSN-PAIR-linear-pattern-thickness`。
### `TSN-PAIR-linear-pattern-thickness`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实 `BRepOffsetAPI_MakeThickSolid` 对阵列实体执行 `-0.4 -> -0.6 -> -0.4` offset 轨迹由有效变异、no-op、invalid-result 或拒绝实测确定分类。首次按 accepted mutation 运行因三阶段 Shape/history 完全不变而 fail-closed随后显式转入 `occt-no-op` 分支采集 FreeCAD 文档合同。
#### 完成证据
`linear-pattern->thickness` 已完成 OCCT/FreeCAD 双层 no-op 分类:
- OCCT `BRepOffsetAPI_MakeThickSolid` 的 `-0.4 -> -0.6 -> -0.4` 三次尝试均返回与上游输入摘要完全一致的有效 1 Solid、14 Face、28 Edge、16 Vertex、体积 `1800`、面积 `920` 和 1 条稳定 history。
- FreeCAD 1.1.1 真实 `Part::Thickness` 对 `Face2` 重算保持 `Valid/Up-to-date`,结果 Shape 与输入逐字段一致,明确归类为 no-op 而非 accepted mutation。
- 事务 abort 后源 Shape 的几何、拓扑摘要与双向对称差体积精确恢复,但 FreeCAD 明确重序列化 BREPhash 从 `3294bb87...` 变为 `aa2fbaf6...`FCStd save/reopen/resave 三阶段稳定。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `427`,唯一新活动项为 `TSN-PAIR-linear-pattern-linear-pattern`。
### `TSN-PAIR-linear-pattern-linear-pattern`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以第二次真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `8 -> 9 -> 8` 平移轨迹采集重复阵列的顺序几何、恢复、naming 与 FCStd 证据。
#### 完成证据
`linear-pattern->linear-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游第二次真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 结果为有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240`、X 上界 `26` 和 258 条原生 history。
- `8 -> 9 -> 8` 平移轨迹使编辑态变为 30 Face、60 Edge、32 Vertex、体积 `2700`、X 上界 `27`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `d86c008d...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `428`,唯一新活动项为 `TSN-PAIR-linear-pattern-polar-pattern`。
### `TSN-PAIR-linear-pattern-polar-pattern`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `30 -> 45 -> 30` 角度轨迹采集顺序阵列几何、恢复、naming 与 FCStd 证据。
#### 完成证据
`linear-pattern->polar-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 结果为有效 1 Solid、34 Face、74 Edge、42 Vertex、体积 `2745.5216016`、面积 `1227.4462449` 和 190 条原生 history。
- `30 -> 45 -> 30` 角度轨迹使编辑态变为 31 Face、65 Edge、36 Vertex、体积 `3100`、面积 `1398.5786438`,边界与 history 同步变化;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `786f8db0...`。
- focused gate 与 `git diff --check` 通过,队列完成项增加到 `429`,唯一新活动项为 `TSN-PAIR-linear-pattern-mirrored`。
### `TSN-PAIR-linear-pattern-mirrored`
#### 执行过程
1. 从最新机器队列领取唯一活动项;扩展连续探针前缀,以真实镜像 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `5 -> 6 -> 5` 平面轨迹采集对称态、偏移态、恢复、naming 与 FCStd 证据。
#### 完成证据
`linear-pattern->mirrored` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游镜像与 Fuse 结果为有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240` 和 258 条原生 history。
- `5 -> 6 -> 5` 平面轨迹使编辑态变为 30 Face、60 Edge、32 Vertex、体积 `2400`、面积 `1160`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `027719405b2d...`。
- focused gate 通过,队列完成项增加到 `430`,唯一新活动项为 `TSN-PAIR-linear-pattern-multi-transform`。
### `TSN-PAIR-linear-pattern-multi-transform`
#### 执行过程
1. 扩展连续探针前缀,以有序的真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `8 -> 9 -> 8` 多变换平移轨迹采集顺序几何、恢复、naming 与 FCStd 证据。
#### 完成证据
`linear-pattern->multi-transform` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游有序多变换结果为有效 1 Solid、38 Face、76 Edge、40 Vertex、体积 `4200`、面积 `1880` 和 783 条原生 history。
- `8 -> 9 -> 8` 轨迹使编辑态变为 54 Face、108 Edge、56 Vertex、体积 `4400`、面积 `1960`;恢复态精确回到名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd 三阶段保持 Shape 及 naming evidence hash `7770e81b7b87...`。
- focused gate 通过,队列完成项增加到 `431`,唯一新活动项为 `TSN-PAIR-polar-pattern-fuse`。
### `TSN-PAIR-polar-pattern-fuse`
#### 执行过程
1. 进入 Polar Pattern 行,以真实 `BRepAlgoAPI_Fuse` 执行 `8 -> 7 -> 8` 工具偏移轨迹采集布尔、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->fuse` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Fuse 结果为有效 1 Solid、21 Face、46 Edge、27 Vertex、体积 `1497.6497308`、面积 `829.0598923` 和 64 条原生 history。
- `8 -> 7 -> 8` 轨迹使体积在 `1497.6497308 -> 1472.6497308 -> 1497.6497308` 间变化,恢复态精确返回名义 Shape、history hash 和语义 naming。
- FCStd 三阶段保持 Shape 及 naming evidence hash `7edcf0776ed0...`;队列完成项增加到 `432`,唯一新活动项为 `TSN-PAIR-polar-pattern-cut`。
### `TSN-PAIR-polar-pattern-cut`
#### 执行过程
1. 以真实 `BRepAlgoAPI_Cut` 执行 `4 -> 3 -> 4` 工具尺寸轨迹采集切除、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->cut` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Cut 结果为有效 1 Solid、17 Face、41 Edge、26 Vertex、体积 `1358.6497308`、面积 `801.0598923` 和 34 条原生 history。
- `4 -> 3 -> 4` 轨迹使体积在 `1358.6497308 -> 1395.6497308 -> 1358.6497308` 间变化,恢复态精确返回名义证据。
- FCStd 三阶段保持 Shape 及 naming evidence hash `567c4970bb66...`;队列完成项增加到 `433`,唯一新活动项为 `TSN-PAIR-polar-pattern-common`。
### `TSN-PAIR-polar-pattern-common`
#### 执行过程
1. 以真实 `BRepAlgoAPI_Common` 执行 `7 -> 6 -> 7` 工具偏移轨迹采集交集、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->common` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Common 结果为有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `75`、面积 `110` 和 213 条原生 history。
- `7 -> 6 -> 7` 轨迹使编辑态体积变为 `100`、面积变为 `130`,恢复态精确返回名义证据。
- FCStd 三阶段保持 Shape 及 naming evidence hash `726029e76f1c...`;队列完成项增加到 `434`,唯一新活动项为 `TSN-PAIR-polar-pattern-rotate`。
### `TSN-PAIR-polar-pattern-rotate`
#### 执行过程
1. 以真实 `BRepBuilderAPI_Transform` 执行 `15 -> 22.5 -> 15` 角度轨迹采集刚体边界变化、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->rotate` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Rotate 保持有效 1 Solid、12 Face、26 Edge、16 Vertex、体积 `1422.6497308`、面积 `769.0598923`,并生成 168 条原生 history。
- 角度轨迹改变包围盒而保持质量属性,恢复态精确返回名义 Shape、history hash 和语义 naming。
- FCStd 三阶段保持 Shape 及 naming evidence hash `0f073ae2b76e...`;队列完成项增加到 `435`,唯一新活动项为 `TSN-PAIR-polar-pattern-pad`。
### `TSN-PAIR-polar-pattern-pad`
#### 执行过程
1. 以真实 `BRepPrimAPI_MakePrism` 执行 `5 -> 7.5 -> 5` 长度轨迹,并用真实 `PartDesign::Pad` 重算、回滚和 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`polar-pattern->pad` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游 Prism builder 的三次尝试均以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 `PartDesign::Pad` 重算返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- abort 前后仅保留 Polar Pattern 源对象Shape 与 BREP hash `35c40a356cdc...` 恢复FCStd 三阶段无失败 Pad 污染。
- focused gate 通过,队列完成项增加到 `436`,唯一新活动项为 `TSN-PAIR-polar-pattern-pocket`。
### `TSN-PAIR-polar-pattern-pocket`
#### 执行过程
1. 以真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 执行 `5 -> 4 -> 5` 深度轨迹采集切除、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->pocket` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Pocket 结果为有效 1 Solid、16 Face、38 Edge、24 Vertex、体积 `1392.6497308`、面积 `799.0598923` 和 55 条原生 history。
- `5 -> 4 -> 5` 轨迹使编辑态体积变为 `1398.6497308`、面积变为 `793.0598923`,恢复态精确返回名义证据。
- FCStd 三阶段保持 Shape 及 naming evidence hash `c0fb0f578a88...`;队列完成项增加到 `437`,唯一新活动项为 `TSN-PAIR-polar-pattern-loft`。
### `TSN-PAIR-polar-pattern-loft`
#### 执行过程
1. 以真实 `BRepOffsetAPI_ThruSections` 执行 `false -> true -> false` ruled 轨迹,并用真实 `Part::Loft` 重算锁定 FreeCAD 实体 section 合同。
#### 完成证据
`polar-pattern->loft` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_ThruSections` 生成有效 1 Solid、6 Face、12 Edge、8 Vertex 和 24 条 history恢复态一致但该结果只属于 kernel superset。
- FreeCAD 1.1.1 `Part::Loft` 以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝 Polar Pattern 实体 section状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- abort 后源 Shape 与 BREP hash `35c40a356cdc...` 恢复FCStd 三阶段干净稳定;队列完成项增加到 `438`,唯一新活动项为 `TSN-PAIR-polar-pattern-pipe`。
### `TSN-PAIR-polar-pattern-pipe`
#### 执行过程
1. 以真实 `BRepOffsetAPI_MakePipe` 执行 `15 -> 12 -> 15` spine 长度轨迹,并用真实 `Part::Sweep` 重算锁定最终 FreeCAD 合同。
#### 完成证据
`polar-pattern->pipe` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT Pipe 三次均返回无效 Shape1 Solid、6 Face、12 Edge、8 Vertex、体积 `0` 和 28 条 history并在参数恢复后精确返回名义无效结果。
- FreeCAD 1.1.1 `Part::Sweep` 返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- abort 后源 Shape 与 BREP hash `35c40a356cdc...` 恢复FCStd 三阶段干净稳定;队列完成项增加到 `439`,唯一新活动项为 `TSN-PAIR-polar-pattern-revolution`。
### `TSN-PAIR-polar-pattern-revolution`
#### 执行过程
1. 以真实 `BRepPrimAPI_MakeRevol` 执行 `360 -> 270 -> 360` 角度轨迹,并用真实 `Part::Revolution` 重算、回滚和 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`polar-pattern->revolution` 已完成真实 FreeCAD/OCCT 拒绝分类:
- Revol builder 三次均以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 `Part::Revolution` 重算返回 `BRep_API: command not done`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- abort 后源 Shape 与 BREP hash `35c40a356cdc...` 恢复FCStd 三阶段无失败 Revolution 污染;队列完成项增加到 `440`,唯一新活动项为 `TSN-PAIR-polar-pattern-groove`。
### `TSN-PAIR-polar-pattern-groove`
#### 执行过程
1. 以真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 执行 `360 -> 180 -> 360` 角度轨迹采集旋转减料、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->groove` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Groove 结果为有效 1 Solid、16 Face、41 Edge、26 Vertex、体积 `1413.279598`、面积 `787.2071345` 和 23 条原生 history。
- `360 -> 180 -> 360` 轨迹使编辑态变为 14 Face、36 Edge、25 Vertex质量属性回到上游值恢复态精确返回名义证据。
- FCStd 三阶段保持 Shape 及 naming evidence hash `bbb3977c389a...`;队列完成项增加到 `441`,唯一新活动项为 `TSN-PAIR-polar-pattern-fillet`。
### `TSN-PAIR-polar-pattern-fillet`
#### 执行过程
1. 以真实 `BRepFilletAPI_MakeFillet` 对 Polar Pattern 全边执行 `0.4 -> 0.6 -> 0.4` 半径轨迹,并用真实 `Part::Fillet` 验证失败回滚。
#### 完成证据
`polar-pattern->fillet` 已完成真实 FreeCAD/OCCT 拒绝分类:
- Fillet builder 三次均在 builder 阶段以稳定 Emscripten wasm abort `null function or function signature mismatch` 拒绝,不产出 Shape 或 history。
- FreeCAD 1.1.1 `Part::Fillet` 重算返回 `BRep_API: command not done`,状态为 `Touched/Invalid`。
- abort 后源 Shape 与 BREP hash `35c40a356cdc...` 恢复FCStd 三阶段干净稳定;队列完成项增加到 `442`,唯一新活动项为 `TSN-PAIR-polar-pattern-chamfer`。
### `TSN-PAIR-polar-pattern-chamfer`
#### 执行过程
1. 以真实 `BRepFilletAPI_MakeChamfer` 对 Polar Pattern 全边执行 `0.4 -> 0.6 -> 0.4` 距离轨迹,并用真实 `Part::Chamfer` 验证失败回滚。
#### 完成证据
`polar-pattern->chamfer` 已完成真实 FreeCAD/OCCT 拒绝分类:
- Chamfer builder 三次均在 builder 阶段以稳定 Emscripten C++ exception 拒绝,不产出 Shape 或 history。
- FreeCAD 1.1.1 `Part::Chamfer` 重算返回 `BRep_API: command not done`,状态为 `Touched/Invalid`。
- abort 后源 Shape 与 BREP hash `35c40a356cdc...` 恢复FCStd 三阶段干净稳定;队列完成项增加到 `443`,唯一新活动项为 `TSN-PAIR-polar-pattern-hole`。
### `TSN-PAIR-polar-pattern-hole`
#### 执行过程
1. 以真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 执行 `1 -> 1.5 -> 1` 半径轨迹采集孔切除、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->hole` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Hole 结果为有效 1 Solid、13 Face、29 Edge、18 Vertex、体积 `1391.2338043`、面积 `825.6085601` 和 23 条原生 history。
- `1 -> 1.5 -> 1` 轨迹使编辑态体积变为 `1351.9638961`、面积变为 `849.170505`,恢复态精确返回名义证据。
- 下游获得无歧义 `native-evidence` namingFCStd 三阶段保持 Shape 及 naming evidence hash `826487854eec...`。
- focused gate 通过,队列完成项增加到 `444`,唯一新活动项为 `TSN-PAIR-polar-pattern-draft`。
### `TSN-PAIR-polar-pattern-draft`
#### 执行过程
1. 以真实 `BRepOffsetAPI_DraftAngle` 对锁定阵列面执行 `5 -> 8 -> 5` 角度轨迹,并用真实 `PartDesign::Draft` 重算锁定失败合同。
#### 完成证据
`polar-pattern->draft` 已完成真实 FreeCAD/OCCT 拒绝分类:
- Draft builder 的三次尝试均以 Emscripten C++ exception 稳定拒绝,不产出 Shape 或 history。
- FreeCAD 1.1.1 `PartDesign::Draft` 产出 null/invalid Shape 和 `Touched/Invalid` 状态,无伪造成功结果。
- abort 后源 Shape 与 BREP hash `35c40a356cdc...` 恢复FCStd 三阶段干净稳定;队列完成项增加到 `445`,唯一新活动项为 `TSN-PAIR-polar-pattern-thickness`。
### `TSN-PAIR-polar-pattern-thickness`
#### 执行过程
1. 以真实 `BRepOffsetAPI_MakeThickSolid` 执行 `-0.4 -> -0.6 -> -0.4` offset 轨迹,并通过真实 `Part::Thickness` 重算区分接受变异与 no-op。
#### 完成证据
`polar-pattern->thickness` 已完成 OCCT/FreeCAD 双层 no-op 分类:
- OCCT ThickSolid 三次均返回与上游输入摘要一致的有效 1 Solid、12 Face、26 Edge、16 Vertex、体积 `1422.6497308`、面积 `769.0598923` 和 1 条稳定 history。
- FreeCAD 1.1.1 `Part::Thickness` 保持 `Valid/Up-to-date`,结果 Shape 与输入摘要一致,明确归类为 no-op。
- abort 后几何和拓扑摘要精确恢复,但 FreeCAD 重序列化 BREPhash 从 `35c40a356cdc...` 变为 `3258844f37ad...`FCStd 三阶段稳定。
- focused gate 通过,队列完成项增加到 `446`,唯一新活动项为 `TSN-PAIR-polar-pattern-linear-pattern`。
### `TSN-PAIR-polar-pattern-linear-pattern`
#### 执行过程
1. 从最新机器队列领取唯一活动项;以真实平移 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `8 -> 9 -> 8` 轨迹采集顺序阵列几何、恢复、naming 与 FCStd 证据。
#### 完成证据
`polar-pattern->linear-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Linear Pattern 结果为有效 1 Solid、36 Face、78 Edge、44 Vertex、体积 `2376.9059892`、面积 `1149.1931763` 和 175 条原生 history。
- `8 -> 9 -> 8` 轨迹使编辑态变为 33 Face、71 Edge、40 Vertex、体积 `2477.3502692`、面积 `1190.9401077`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd 三阶段保持 Shape 及 naming evidence hash `fa130287b001...`。
- `./npmw run check:freecad-ordered-operation-pairs` 通过,队列完成项增加到 `447`,唯一新活动项为 `TSN-PAIR-polar-pattern-polar-pattern`。
### `TSN-PAIR-polar-pattern-polar-pattern`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器,以第二次真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `30 -> 45 -> 30` 角度轨迹。
2. 首次聚焦检查仅因汇总锁停在 317 项而失败;将汇总同步为已分类 318、接受 230、拒绝 88、剩余 43 后重跑通过。
#### 完成证据
`polar-pattern->polar-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游第二次 Polar Pattern 结果为有效 1 Solid、20 Face、44 Edge、26 Vertex、体积 `1845.2994616`、面积 `938.1197846` 和 228 条原生 history。
- `30 -> 45 -> 30` 轨迹使编辑态变为 30 Face、66 Edge、38 Vertex、体积 `2077.9724736`、面积 `1031.1889895`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `47e7c088e25a...`。
- focused gate 通过,队列完成项增加到 `448`,唯一新活动项为 `TSN-PAIR-polar-pattern-mirrored`。
### `TSN-PAIR-polar-pattern-mirrored`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器,以真实镜像 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `5 -> 6 -> 5` 平面轨迹。
#### 完成证据
`polar-pattern->mirrored` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游 Mirrored 结果为有效 1 Solid、21 Face、47 Edge、28 Vertex、体积 `1834.9364905`、面积 `920.5771366` 和 250 条原生 history。
- `5 -> 6 -> 5` 轨迹使编辑态变为 32 Face、70 Edge、40 Vertex、体积 `2045.2994616`、面积 `1018.1197846`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `72f0a2e0f8fa...`。
- focused gate 通过,队列完成项增加到 `449`,唯一新活动项为 `TSN-PAIR-polar-pattern-multi-transform`。
### `TSN-PAIR-polar-pattern-multi-transform`
#### 执行过程
1. 从最新机器队列领取 Polar Pattern 行最后一项;将操作对加入连续探针前缀与聚焦检查器,以有序的真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `8 -> 9 -> 8` 多变换平移轨迹。
#### 完成证据
`polar-pattern->multi-transform` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游有序 Multi Transform 结果为有效 1 Solid、115 Face、241 Edge、128 Vertex、体积 `3052.108193`、面积 `1415.9432402` 和 1187 条原生 history。
- `8 -> 9 -> 8` 轨迹使编辑态变为 91 Face、193 Edge、104 Vertex、体积 `3291.7085548`、面积 `1506.9573233`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `2fe760a0f6d3...`。
- focused gate 通过,队列完成项增加到 `450`,唯一新活动项为 `TSN-PAIR-mirrored-fuse`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;机器队列保持恰好一个 `in_progress` 任务。
### `TSN-PAIR-mirrored-fuse`
#### 执行过程
1. 从最新机器队列领取 Mirrored 行首项;将操作对加入连续探针前缀与聚焦检查器,首先以通用 `12 -> 11 -> 12` 工具偏移轨迹执行真实 `BRepAlgoAPI_Fuse`。
2. 首次探针 fail-closed工具与上游实体脱离OCCT 返回有效 2-Solid Compound、体积 `1125`,但 history 为空,不符合接受证据合同。
3. 为该操作对锁定部分相交的 `8 -> 7 -> 8` 工具偏移轨迹,重跑真实 Fuse、参数恢复、naming 和 FCStd 三阶段。
#### 完成证据
`mirrored->fuse` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Mirrored 为有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `1000`、面积 `600` 和 156 条原生 history。
- 下游真实 `BRepAlgoAPI_Fuse` 结果为有效 1 Solid、13 Face、29 Edge、18 Vertex、体积 `1075`、面积 `660` 和 52 条原生 history。
- `8 -> 7 -> 8` 轨迹使编辑态体积变为 `1050`、面积变为 `640`、X 上界变为 `12`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `79a9b1faa46b...`。
- focused gate 通过,队列完成项增加到 `451`,唯一新活动项为 `TSN-PAIR-mirrored-cut`。
### `TSN-PAIR-mirrored-cut`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器,以真实 `BRepAlgoAPI_Cut` 执行 `4 -> 3 -> 4` 工具尺寸轨迹。
#### 完成证据
`mirrored->cut` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Cut` 结果为有效 1 Solid、10 Face、24 Edge、16 Vertex、体积 `936`、面积 `632` 和 22 条原生 history。
- `4 -> 3 -> 4` 轨迹使编辑态体积变为 `973`、面积变为 `618`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `20a01c32bcfc...`。
- focused gate 通过,队列完成项增加到 `452`,唯一新活动项为 `TSN-PAIR-mirrored-common`。
### `TSN-PAIR-mirrored-common`
#### 执行过程
1. 从最新机器队列领取唯一活动项;根据上游 X=`0..10` 边界,为该操作对锁定体交集 `7 -> 6 -> 7` 工具偏移轨迹,避免通用 X=`10` 边界接触产生空交集。
2. 以真实 `BRepAlgoAPI_Common` 执行参数变异与恢复,采集 history、naming 和 FCStd save/reopen/resave 证据。
#### 完成证据
`mirrored->common` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 `BRepAlgoAPI_Common` 结果为有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `75`、面积 `110` 和 121 条原生 history。
- `7 -> 6 -> 7` 轨迹使编辑态体积变为 `100`、面积变为 `130`、X 下界变为 `6`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd 三阶段保持 Shape 及 naming evidence hash `0e46d8968ef1...`。
- focused gate 通过,队列完成项增加到 `453`,唯一新活动项为 `TSN-PAIR-mirrored-rotate`。
### `TSN-PAIR-mirrored-rotate`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器,以真实 `BRepBuilderAPI_Transform` 执行 `15 -> 22.5 -> 15` 角度轨迹。
#### 完成证据
`mirrored->rotate` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Rotate 保持有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `1000`、面积 `600`,并生成 78 条原生 history。
- `15 -> 22.5 -> 15` 轨迹保持质量属性,但将包围盒从名义 X=`-2.5881906..9.6592584`、Y=`0..12.2474488` 改为编辑态 X=`-3.8268344..9.2387954`、Y=`0..13.0656297`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `2267188ff909...`。
- focused gate 通过,队列完成项增加到 `454`,唯一新活动项为 `TSN-PAIR-mirrored-pad`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;队列只读重建确认恰好一个 `in_progress` 任务。
### `TSN-PAIR-mirrored-mirrored`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以第二次真实镜像 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `5 -> 6 -> 5` 平面轨迹,区分名义对称态、偏移变异态与恢复态。
#### 完成证据
`mirrored->mirrored` 已完成真实 OCCT/FreeCAD 接受分类:
- 名义二次 Mirrored 保持有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `1000`、面积 `600`,但生成 156 条独立下游原生 history不被误当作未执行。
- `5 -> 6 -> 5` 平面轨迹使编辑态变为有效 1 Solid、14 Face、28 Edge、16 Vertex、体积 `1200`、面积 `680`、X 上界 `12`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `a4b701c6a129...`。
- focused gate 通过,队列完成项增加到 `467`,唯一新活动项为 `TSN-PAIR-mirrored-multi-transform`。
### `TSN-PAIR-mirrored-multi-transform`
#### 执行过程
1. 从最新机器队列领取 Mirrored 行最后一个机器任务;将该操作对加入连续探针前缀与聚焦检查器。
2. 以有序的真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 先执行线性变换、再执行镜像合并,对 `multiTranslationX` 执行 `8 -> 9 -> 8` 轨迹。
#### 完成证据
`mirrored->multi-transform` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游有序 Multi Transform 结果为有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240`、X 边界 `-8..18` 和 355 条原生 history。
- `8 -> 9 -> 8` 轨迹使编辑态体积变为 `2800`、面积变为 `1320`、X 边界变为 `-9..19`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `7daca50c6b9e...`。
- focused gate 通过Mirrored 行机器任务闭合,队列完成项增加到 `468`,唯一新活动项为 `TSN-PAIR-multi-transform-fuse`。
- 行级收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;有序操作对剩余最后 19 项 Multi Transform 行任务。
### `TSN-PAIR-multi-transform-fuse`
#### 执行过程
1. 从最新机器队列领取 Multi Transform 行首项;确认上游 X 范围为 `-8..18`,避免使用完全内含工具产生 Fuse no-op。
2. 为该操作对锁定部分越出实体的 `16 -> 15 -> 16` 工具偏移轨迹,以真实 `BRepAlgoAPI_Fuse` 采集变异、恢复、naming 与 FCStd 证据。
#### 完成证据
`multi-transform->fuse` 已完成真实 OCCT/FreeCAD 接受分类:
- 上游 Multi Transform 为有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240` 和 355 条原生 history。
- 下游真实 Fuse 结果为有效 1 Solid、29 Face、61 Edge、34 Vertex、体积 `2675`、面积 `1300`、X 上界 `21` 和 52 条原生 history。
- `16 -> 15 -> 16` 轨迹使编辑态体积变为 `2650`、面积变为 `1280`、X 上界变为 `20`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `89d7ded3221b...`focused gate 通过,队列完成项增加到 `469`。
- 唯一新活动项为 `TSN-PAIR-multi-transform-cut`。
### `TSN-PAIR-multi-transform-cut`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepAlgoAPI_Cut` 执行 `4 -> 3 -> 4` 工具尺寸轨迹采集切除几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->cut` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Cut 结果为有效 1 Solid、26 Face、55 Edge、31 Vertex、体积 `2536`、面积 `1272` 和 47 条原生 history。
- `4 -> 3 -> 4` 工具尺寸轨迹使编辑态体积变为 `2573`、面积变为 `1258`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `d9529dc97da1...`。
- focused gate 通过,队列完成项增加到 `470`,唯一新活动项为 `TSN-PAIR-multi-transform-common`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;有序操作对剩余 17 项未分类任务。
### `TSN-PAIR-multi-transform-common`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepAlgoAPI_Common` 执行 `10 -> 9 -> 10` 工具偏移轨迹检查交集位置、拓扑、history、naming 和 FCStd 恢复。
#### 完成证据
`multi-transform->common` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Common 名义结果为有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `125`、面积 `150`、X 边界 `10..15` 和 309 条原生 history。
- `10 -> 9 -> 10` 偏移轨迹保持体积与面积,但将编辑态变为 8 Face、17 Edge、11 Vertex、X 边界 `9..14` 和 304 条 history该变异不以质量属性相同误判为 no-op。
- 恢复态精确返回名义 Shape、history hash 和语义 namingFCStd 三阶段保持 naming evidence hash `09387999ac8c...`。
- focused gate 通过,队列完成项增加到 `471`,唯一新活动项为 `TSN-PAIR-multi-transform-rotate`。
### `TSN-PAIR-multi-transform-rotate`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepBuilderAPI_Transform` 执行 `15 -> 22.5 -> 15` 角度轨迹采集刚体边界变化、history、naming、恢复与 FCStd 证据。
#### 完成证据
`multi-transform->rotate` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Rotate 保持有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240`,并生成 286 条原生 history。
- `15 -> 22.5 -> 15` 轨迹保持质量属性,但将编辑态 X 边界改为 `-11.2178707..16.6298317`、Y 边界改为 `-3.0614676..16.1270972`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `6309013fed1b...`。
- focused gate 通过,队列完成项增加到 `472`,唯一新活动项为 `TSN-PAIR-multi-transform-pad`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;有序操作对剩余 15 项机器任务。
### `TSN-PAIR-multi-transform-pad`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与拒绝检查器。
2. 以真实 `BRepPrimAPI_MakePrism` 执行 `5 -> 7.5 -> 5` 长度轨迹,并以真实 `PartDesign::Pad` 文档重算、事务 abort 与 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`multi-transform->pad` 已完成真实 FreeCAD/OCCT 拒绝分类:
- OCCT `BRepPrimAPI_MakePrism` 的 `5 -> 7.5 -> 5` 三次尝试均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 `PartDesign::Pad` 重算返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后只保留 Multi Transform 源对象Shape 与 BREP hash `77e9b4530db9...` 精确恢复FCStd 三阶段无临时 Body/Pad 污染。
- focused gate 通过,队列完成项增加到 `473`,唯一新活动项为 `TSN-PAIR-multi-transform-pocket`。
### `TSN-PAIR-multi-transform-pocket`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 执行 `5 -> 4 -> 5` 深度轨迹采集切除几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->pocket` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Pocket 结果为有效 1 Solid、26 Face、54 Edge、30 Vertex、体积 `2570`、面积 `1270` 和 74 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使编辑态体积变为 `2576`、面积变为 `1264`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `54344de3b84e...`。
- focused gate 通过,队列完成项增加到 `474`,唯一新活动项为 `TSN-PAIR-multi-transform-loft`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;有序操作对剩余 13 项机器任务。
### `TSN-PAIR-mirrored-thickness`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器,先按 accepted mutation 合同实测。
2. 以真实 `BRepOffsetAPI_MakeThickSolid` 执行 `-0.4 -> -0.6 -> -0.4` offset 轨迹由是否产生有效变异、no-op、invalid-result 或拒绝决定最终分类。
#### 完成证据
`mirrored->thickness` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 ThickSolid 结果为有效 1 Solid、11 Face、24 Edge、16 Vertex、体积 `187.456`、面积 `953.28` 和 38 条原生 history不是 no-op。
- `-0.4 -> -0.6 -> -0.4` offset 轨迹使编辑态体积变为 `272.064`、面积变为 `930.88`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `42ff0285de04...`。
- focused gate 通过,队列完成项增加到 `465``mirrored->linear-pattern` 已由既有顺序命名证据覆盖,因此唯一新活动项为 `TSN-PAIR-mirrored-polar-pattern`。
### `TSN-PAIR-mirrored-polar-pattern`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `30 -> 45 -> 30` 角度轨迹采集阵列几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`mirrored->polar-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Polar Pattern 结果为有效 1 Solid、12 Face、26 Edge、16 Vertex、体积 `1422.6497308`、面积 `769.0598923` 和 78 条原生 history。
- `30 -> 45 -> 30` 角度轨迹使编辑态体积变为 `1585.7864376`、面积变为 `834.3145751`,同时改变 X/Y 边界;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `d24473db6bed...`。
- focused gate 通过,队列完成项增加到 `466`,唯一新活动项为 `TSN-PAIR-mirrored-mirrored`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;队列只读重建确认恰好一个 `in_progress` 任务。
### `TSN-PAIR-mirrored-hole`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 执行 `1 -> 1.5 -> 1` 半径轨迹采集孔切除、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`mirrored->hole` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Hole 结果为有效 1 Solid、7 Face、15 Edge、10 Vertex、体积 `968.5840735`、面积 `656.5486678` 和 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使编辑态体积变为 `929.3141653`、面积变为 `680.1106127`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游获得无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `676552c44f78...`。
- focused gate 通过,队列完成项增加到 `463`,唯一新活动项为 `TSN-PAIR-mirrored-draft`。
### `TSN-PAIR-mirrored-draft`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器,不预设复杂阵列实体的拒绝结论。
2. 以真实 `BRepOffsetAPI_DraftAngle` 对锁定面执行 `5 -> 8 -> 5` 角度轨迹采集拔模几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`mirrored->draft` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Draft 结果为有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `956.2556682`、面积 `582.884251` 和 5 条原生 history。
- `5 -> 8 -> 5` 角度轨迹使编辑态体积变为 `929.7295826`、面积变为 `572.8745903`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游获得无歧义 `native-evidence` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `e187fbca3911...`。
- focused gate 通过,队列完成项增加到 `464`,唯一新活动项为 `TSN-PAIR-mirrored-thickness`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;队列只读重建确认恰好一个 `in_progress` 任务。
### `TSN-PAIR-mirrored-fillet`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepFilletAPI_MakeFillet` 对 Mirrored 全边集合执行 `0.4 -> 0.6 -> 0.4` 半径轨迹采集圆角几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`mirrored->fillet` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Fillet 结果为有效 1 Solid、26 Face、56 Edge、24 Vertex、体积 `995.9653557`、面积 `579.2169851` 和 150 条原生 history。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使编辑态体积变为 `991.0184753`、面积变为 `568.6895487`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `fdf15e219a78...`。
- focused gate 通过,队列完成项增加到 `461`,唯一新活动项为 `TSN-PAIR-mirrored-chamfer`。
### `TSN-PAIR-mirrored-chamfer`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepFilletAPI_MakeChamfer` 对 Mirrored 全边集合执行 `0.4 -> 0.6 -> 0.4` 距离轨迹采集倒角几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`mirrored->chamfer` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Chamfer 结果为有效 1 Solid、26 Face、48 Edge、24 Vertex、体积 `990.7413333`、面积 `571.4001834` 和 150 条原生 history。
- `0.4 -> 0.6 -> 0.4` 距离轨迹使编辑态体积变为 `979.552`、面积变为 `556.7387245`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `167858fc2d46...`。
- focused gate 通过,队列完成项增加到 `462`,唯一新活动项为 `TSN-PAIR-mirrored-hole`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;队列只读重建确认恰好一个 `in_progress` 任务。
### `TSN-PAIR-mirrored-revolution`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与拒绝检查器。
2. 以真实 `BRepPrimAPI_MakeRevol` 执行 `360 -> 270 -> 360` 角度轨迹,并以真实 `Part::Revolution` 文档重算、事务 abort 与 FCStd 三阶段锁定实体输入合同。
#### 完成证据
`mirrored->revolution` 已完成真实 FreeCAD/OCCT 拒绝分类:
- OCCT `BRepPrimAPI_MakeRevol` 的 `360 -> 270 -> 360` 三次尝试均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 `Part::Revolution` 重算返回 `Solids are not Processed`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后只保留 Mirrored 源对象Shape 与 BREP hash `a7a1463754da...` 精确恢复FCStd save/reopen/resave 三阶段无失败 Revolution 污染。
- focused gate 通过,队列完成项增加到 `459`,唯一新活动项为 `TSN-PAIR-mirrored-groove`。
### `TSN-PAIR-mirrored-groove`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 执行 `360 -> 180 -> 360` 角度轨迹采集旋转减料、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`mirrored->groove` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Groove 结果为有效 1 Solid、10 Face、24 Edge、16 Vertex、体积 `995.287611`、面积 `606.5663706` 和 18 条原生 history。
- `360 -> 180 -> 360` 轨迹使编辑态变为 7 Face、16 Edge、12 Vertex、体积 `1000`、面积 `600` 和 56 条 history虽质量属性回到上游值拓扑与 history 明确变化。
- 恢复态精确返回名义 Shape、history hash 和语义 naming下游保持原生 `ambiguous` naming。
- FCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `dc3dd5eb0ad3...`。
- focused gate 通过,队列完成项增加到 `460`,唯一新活动项为 `TSN-PAIR-mirrored-fillet`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;队列只读重建确认恰好一个 `in_progress` 任务。
### `TSN-PAIR-mirrored-loft`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与分层拒绝检查器。
2. 以真实 `BRepOffsetAPI_ThruSections` 执行 `false -> true -> false` ruled 轨迹,再以真实 `Part::Loft` 重算、事务 abort 和 FCStd 三阶段锁定 FreeCAD 文档层输入合同。
#### 完成证据
`mirrored->loft` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_ThruSections` 在三次 ruled 轨迹中均生成有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `750`、面积 `580.2775638` 和 24 条 history恢复态精确一致但该结果只属于 kernel superset。
- FreeCAD 1.1.1 `Part::Loft` 以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝 Mirrored 实体 section状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后只保留源对象Shape 与 BREP hash `a7a1463754da...` 精确恢复FCStd save/reopen/resave 三阶段干净稳定。
- focused gate 通过,队列完成项增加到 `457`,唯一新活动项为 `TSN-PAIR-mirrored-pipe`。
### `TSN-PAIR-mirrored-pipe`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与分层拒绝检查器。
2. 以真实 `BRepOffsetAPI_MakePipe` 执行 `15 -> 12 -> 15` spine 长度轨迹,再以真实 `Part::Sweep` 文档重算、事务 abort 和 FCStd 三阶段锁定最终合同。
#### 完成证据
`mirrored->pipe` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- OCCT `BRepOffsetAPI_MakePipe` 三次均返回可生成但无效的 Shape1 Solid、6 Face、12 Edge、8 Vertex、体积 `0` 和 28 条 history。
- `15 -> 12 -> 15` 轨迹使无效结果面积在 `500 -> 440 -> 500` 间变化、Z 上界在 `25 -> 22 -> 25` 间变化恢复态精确一致kernel 权威为 `invalid-result`。
- FreeCAD 1.1.1 `Part::Sweep` 重算返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后只保留源对象Shape 与 BREP hash `a7a1463754da...` 精确恢复FCStd 三阶段干净稳定。
- focused gate 通过,队列完成项增加到 `458`,唯一新活动项为 `TSN-PAIR-mirrored-revolution`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;队列只读重建确认恰好一个 `in_progress` 任务。
### `TSN-PAIR-mirrored-pad`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦拒绝检查器。
2. 以真实 `BRepPrimAPI_MakePrism` 执行 `5 -> 7.5 -> 5` 长度轨迹,并以真实 `PartDesign::Pad` 文档重算、事务 abort 和 FCStd save/reopen/resave 锁定实体输入合同。
#### 完成证据
`mirrored->pad` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 下游 Prism builder 的 `5 -> 7.5 -> 5` 三次尝试均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 `PartDesign::Pad` 重算返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 前后只保留 Mirrored 源对象Shape 与 BREP hash `a7a1463754da...` 精确恢复FCStd 三阶段无临时 Body/Pad 污染。
- focused gate 通过,队列完成项增加到 `455`,唯一新活动项为 `TSN-PAIR-mirrored-pocket`。
### `TSN-PAIR-mirrored-pocket`
#### 执行过程
1. 从最新机器队列领取唯一活动项;将该操作对加入连续探针前缀与聚焦检查器。
2. 以真实 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 执行 `5 -> 4 -> 5` 深度轨迹采集切除几何、history、naming、恢复和 FCStd 三阶段证据。
#### 完成证据
`mirrored->pocket` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Pocket 结果为有效 1 Solid、9 Face、21 Edge、14 Vertex、体积 `970`、面积 `600` 和 42 条原生 history。
- `5 -> 4 -> 5` 深度轨迹使编辑态体积变为 `976`,同时保持面积与包围盒;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `41a368e2c236...`。
- focused gate 通过,队列完成项增加到 `456`,唯一新活动项为 `TSN-PAIR-mirrored-loft`。
- 批次收尾运行 `./npmw run check:execution-plan` 与 `git diff --check` 均通过;队列只读重建确认恰好一个 `in_progress` 任务。
### `TSN-PAIR-multi-transform-loft`
#### 执行过程
1. 从机器队列领取唯一活动项,以 `FREECAD_ONLY_PAIR='multi-transform->loft'` 重跑真实 OCCT/FreeCAD 聚焦探针。
2. 以真实 `BRepOffsetAPI_ThruSections` 执行 `false -> true -> false` ruled 轨迹,再以 `Part::Loft` 重算、事务 abort 和 FCStd save/reopen/resave 锁定 FreeCAD 文档层输入合同。
#### 完成证据
`multi-transform->loft` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- 上游 Multi Transform 使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)`,生成有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240` 和 355 条原生 history。
- OCCT `BRepOffsetAPI_ThruSections` 在三次 ruled 轨迹中均生成有效 1 Solid、6 Face、12 Edge、8 Vertex、体积 `1150`、面积 `758.6473016` 和 24 条 history恢复态精确一致但该结果只属于 kernel superset。
- FreeCAD 1.1.1 `Part::Loft` 以 `Profile shape is not a single vertex, edge, wire nor face.` 拒绝 Multi Transform 实体 section状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后只保留源对象Shape 几何与 BREP hash `77e9b4530db9...` 恢复FCStd save/reopen/resave 三阶段干净稳定。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `475`,唯一新活动项为 `TSN-PAIR-multi-transform-pipe`。
### `TSN-PAIR-multi-transform-pipe`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->pipe` 加入连续探针前缀与 focused checker。
2. 以真实 `BRepOffsetAPI_MakePipe` 执行 `15 -> 12 -> 15` spine 长度轨迹,再以 `Part::Sweep` 重算、事务 abort 和 FCStd 三阶段锁定拒绝合同。
#### 完成证据
`multi-transform->pipe` 已完成真实 FreeCAD/OCCT 分层拒绝分类:
- 上游 Multi Transform 使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)`,生成有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240` 和 355 条原生 history。
- OCCT `BRepOffsetAPI_MakePipe` 在三次轨迹中均返回无效 Shape1 Solid、6 Face、12 Edge、8 Vertex、体积 `0`,面积按 spine 长度为 `500 -> 440 -> 500`,且均有 28 条 history恢复态精确一致kernel 权威为 `invalid-result`。
- FreeCAD 1.1.1 `Part::Sweep` 重算返回 `A fatal error occurred when making the sweep`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后只保留 Multi Transform 源对象Shape 与 BREP hash `77e9b4530db9...` 精确恢复FCStd save/reopen/resave 三阶段干净稳定。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `476`,唯一新活动项为 `TSN-PAIR-multi-transform-revolution`。
### `TSN-PAIR-multi-transform-revolution`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->revolution` 加入连续探针前缀与 focused checker。
2. 以真实 `BRepPrimAPI_MakeRevol` 执行 `360 -> 270 -> 360` 角度轨迹,再以 `Part::Revolution` 重算、事务 abort 和 FCStd 三阶段锁定拒绝合同。
#### 完成证据
`multi-transform->revolution` 已完成真实 FreeCAD/OCCT 拒绝分类:
- 上游 Multi Transform 使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)`,生成有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240` 和 355 条原生 history。
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 三次尝试中均在 builder 阶段以 Emscripten C++ exception 稳定拒绝,不产出 result、Shape 或 history。
- FreeCAD 1.1.1 `Part::Revolution` 重算返回精确诊断 `BRep_API: command not done`,状态为 `Touched/Invalid` 且 Shape 为 null/invalid。
- 事务 abort 后只保留 Multi Transform 源对象Shape 与 BREP hash `77e9b4530db9...` 精确恢复FCStd save/reopen/resave 三阶段无失败 Revolution 污染。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `477`,唯一新活动项为 `TSN-PAIR-multi-transform-groove`。
### `TSN-PAIR-multi-transform-groove`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->groove` 加入连续探针前缀与 focused checker。
2. 以真实 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 执行 `360 -> 180 -> 360` 角度轨迹采集旋转减料、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->groove` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Groove 名义结果为有效 1 Solid、26 Face、56 Edge、32 Vertex、体积 `2590.575222`、面积 `1259.1327412` 和 18 条原生 history。
- `360 -> 180 -> 360` 轨迹使编辑态变为 24 Face、52 Edge、32 Vertex、体积 `2600`、面积 `1240` 和 34 条 history恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `7e1cca710b45...`。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `478`,唯一新活动项为 `TSN-PAIR-multi-transform-fillet`。
### `TSN-PAIR-multi-transform-fillet`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->fillet` 加入连续探针前缀与 focused checker。
2. 以真实 `BRepFilletAPI_MakeFillet` 执行 `0.4 -> 0.6 -> 0.4` 半径轨迹采集圆角几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->fillet` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Fillet 名义结果为有效 1 Solid、58 Face、120 Edge、56 Vertex、体积 `2593.7678329`、面积 `1208.2293711` 和 390 条原生 history。
- `0.4 -> 0.6 -> 0.4` 半径轨迹使编辑态体积为 `2586.0740489`、面积为 `1192.2081276`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `9a6a00ac52f1...`。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `479`,唯一新活动项为 `TSN-PAIR-multi-transform-chamfer`。
### `TSN-PAIR-multi-transform-chamfer`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->chamfer` 加入连续探针前缀与 focused checker。
2. 以真实 `BRepFilletAPI_MakeChamfer` 执行 `0.4 -> 0.6 -> 0.4` 距离轨迹采集倒角几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->chamfer` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Chamfer 名义结果为有效 1 Solid、58 Face、112 Edge、56 Vertex、体积 `2585.6213333`、面积 `1196.4040506` 和 390 条原生 history。
- `0.4 -> 0.6 -> 0.4` 距离轨迹使编辑态体积为 `2568.032`、面积为 `1174.2445253`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `0e83ffacf7be...`。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `480`,唯一新活动项为 `TSN-PAIR-multi-transform-hole`。
### `TSN-PAIR-multi-transform-hole`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->hole` 加入连续探针前缀与 focused checker。
2. 以真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 执行 `1 -> 1.5 -> 1` 半径轨迹采集孔切除、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->hole` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Hole 名义结果为有效 1 Solid、23 Face、47 Edge、26 Vertex、体积 `2568.5840735`、面积 `1296.5486678` 和 23 条原生 history。
- `1 -> 1.5 -> 1` 半径轨迹使编辑态体积为 `2529.3141653`、面积为 `1320.1106127`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游获得原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `e44576e22071...`。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `481`,唯一新活动项为 `TSN-PAIR-multi-transform-draft`。
### `TSN-PAIR-multi-transform-draft`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->draft` 加入连续探针前缀与 focused checker。
2. 以真实 `BRepOffsetAPI_DraftAngle` 对锁定面执行 `5 -> 8 -> 5` 角度轨迹采集拔模几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->draft` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Draft 名义结果为有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2486.2647374`、面积 `1209.4972389` 和 17 条原生 history。
- `5 -> 8 -> 5` 角度轨迹使编辑态体积为 `2417.2969149`、面积为 `1191.9604684`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `3027a08991dc...`。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `482`,唯一新活动项为 `TSN-PAIR-multi-transform-thickness`。
### `TSN-PAIR-multi-transform-thickness`
#### 执行过程
1. 先按接受合同执行真实 `BRepOffsetAPI_MakeThickSolid`,发现 `-0.4 -> -0.6 -> -0.4` 未改变几何/history随后切换原生 no-op 分支重放。
2. 采集 OCCT no-op 轨迹、FreeCAD `Part::Thickness` 重算状态、事务 abort 和 FCStd save/reopen/resave 三阶段证据。
#### 完成证据
`multi-transform->thickness` 已完成真实 FreeCAD/OCCT no-op 拒绝分类:
- 上游 Multi Transform 使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)`,生成有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240`和 355 条原生 history。
- OCCT `BRepOffsetAPI_MakeThickSolid` 在 `-0.4 -> -0.6 -> -0.4` 三次均返回与输入同拓扑和指标的有效 Shape每次仅 1 条 history权威为 `kernel-no-op`。
- FreeCAD 1.1.1 `Part::Thickness` 返回 `Valid/Up-to-date`,结果 Shape 等于输入 Shape是明确 no-op而非虚构成功几何。
- abort 后对象集、体积、面积、拓扑全部恢复,仅 BREP 因原生重序列化发生漂移(`sourceBrepReserialized=true`FCStd 三阶段干净稳定。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `483`,唯一新活动项为 `TSN-PAIR-multi-transform-linear-pattern`。
### `TSN-PAIR-multi-transform-linear-pattern`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->linear-pattern` 加入连续探针前缀与 focused checker。
2. 以真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `8 -> 9 -> 8` 平移轨迹采集阵列几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->linear-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Linear Pattern 名义结果为有效 1 Solid、30 Face、60 Edge、32 Vertex、体积 `3400`、面积 `1560` 和 466 条原生 historyX 边界为 `-8..26`。
- `8 -> 9 -> 8` 平移轨迹使编辑态体积为 `3500`、面积为 `1600`、X 边界扩展至 `-8..27`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `b394abb85573...`。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `484`,唯一新活动项为 `TSN-PAIR-multi-transform-polar-pattern`。
### `TSN-PAIR-multi-transform-polar-pattern`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->polar-pattern` 加入连续探针前缀与 focused checker。
2. 以真实旋转 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `30 -> 45 -> 30` 角度轨迹采集阵列几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->polar-pattern` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Polar Pattern 名义结果为有效 1 Solid、55 Face、119 Edge、66 Vertex、体积 `3627.2391992`、面积 `1586.2768775`、XY 边界 `-11.9282034..18` / `-4..17.6602542` 和 317 条原生 history。
- `30 -> 45 -> 30` 角度轨迹使编辑态体积为 `3974.4155877`、面积为 `1756.0606076`XY 边界扩展至 `-12.7279222..18` / `-5.6568544..19.79899`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `9b336c1a8cd0...`。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `485`,唯一新活动项为 `TSN-PAIR-multi-transform-mirrored`。
### `TSN-PAIR-multi-transform-mirrored`
#### 执行过程
1. 从机器队列领取唯一活动项,将 `multi-transform->mirrored` 加入连续探针前缀与 focused checker。
2. 以真实镜像 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` 执行 `5 -> 6 -> 5` 平面参数轨迹采集几何、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->mirrored` 已完成真实 OCCT/FreeCAD 接受分类:
- 下游真实 Mirrored 名义结果为有效 1 Solid、22 Face、44 Edge、24 Vertex、体积 `2600`、面积 `1240` 和 572 条原生 history。
- `5 -> 6 -> 5` 轨迹使编辑态变为 38 Face、76 Edge、40 Vertex、体积 `2800`、面积 `1320`、X 上界 `20`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `a8d686199c1b...`。
- 聚焦探针与 focused gate 通过,队列完成项增加到 `486`,唯一新活动项为 `TSN-PAIR-multi-transform-multi-transform`。
### `TSN-PAIR-multi-transform-multi-transform`
#### 执行过程
1. 从机器队列领取最后一个有序操作对,将 `multi-transform->multi-transform` 加入连续探针前缀与 focused checker。
2. 以真实有序 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)` 执行 `8 -> 9 -> 8` 多变换轨迹采集复合阵列、history、naming、恢复与 FCStd 三阶段证据。
#### 完成证据
`multi-transform->multi-transform` 已完成真实 OCCT 接受分类,并闭合全部 19×19 有序操作对:
- 下游真实 Multi Transform 名义结果为有效 1 Solid、38 Face、76 Edge、40 Vertex、体积 `4200`、面积 `1880`和 1187 条原生 historyX 边界为 `-16..26`。
- `8 -> 9 -> 8` 轨迹使编辑态变为 62 Face、124 Edge、64 Vertex、体积 `4400`、面积 `1960`、X 边界为 `-17..27`;恢复态精确返回名义 Shape、history hash 和语义 naming。
- 下游保持原生 `ambiguous` namingFCStd save/reopen/resave 三阶段保持 Shape 及 naming evidence hash `ce7e7e2afb3a...`。
- 聚焦探针与 focused gate 通过19×19 有序操作对全部分类完成,队列完成项增加到 `487`,下一个唯一活动项为 `PROP-app-propertyacceleration-A`。
### `PROP-app-propertyacceleration-A/B`
#### 执行过程与完成证据
- A 阶段生成 `config/freecad-property-acceleration-inventory.json`,锁定 `App::PropertyAcceleration` 的唯一原生记录:适用对象 `Robot::TrajectoryDressUpObject`、属性 `Acceleration`、分组 `TrajectoryDressUp`、默认 `1000.0 mm/s^2`、量纲 `length/time^2`、空依赖,且保留 `opaque-fcstd-proxy` 分类。`check:freecad-property-acceleration-inventory` 通过。
- B 阶段使用真实 FreeCAD 1.1.1 实例化对象,采集默认 `1000`、名义 `500`、下界 `0`、负值边界 `-500 mm/s^2`四次赋值均无异常property status 为空,单位返回为 FreeCAD 加速度量纲Shape 明确记为不适用。`check:freecad-property-acceleration-success` 通过。
- 账本已追加 A/B 两项机器证据,队列完成项增加到 `489`,下一个唯一活动项为 `PROP-app-propertyacceleration-C`。
### `PROP-app-propertyacceleration-C`
#### 执行过程
1. 从机器队列领取 `App::PropertyAcceleration` 的原生失败/取消任务,复跑既有探针后发现文档未启用 `UndoMode`,导致 `abortTransaction()` 未形成可回滚事务;同时既有产物缺少禁用态证据。
2. 将探针收紧为两类非法输入、`ReadOnly + Immutable` 禁用态和启用 Undo 的事务取消,并逐阶段对比属性值与文档对象集。
3. focused checker 锁定原生异常类型与精确消息、禁用状态、事务活动/关闭状态、回滚结果和文档无污染;不把同步属性 setter 伪装成支持原生 cancel hook。
#### 完成证据
- `5 mm` 以 `ArithmeticError: Not matching Unit!` 拒绝,`not-a-quantity` 以 `ParserError: syntax error` 拒绝;两次失败前后均保持 `1000 mm/s^2` 和唯一 `Robot::TrajectoryDressUpObject` 对象。
- 禁用态同时记录 editor `ReadOnly` 与属性 `Immutable`,写入 `750 mm/s^2` 精确返回 `AttributeError: Object attribute 'Acceleration' is read-only`;解除状态后 status/editor mode 均恢复为空。
- 原生 setter 为同步操作且没有 cancel hook明确保持 `supported: false`;取消替代路径使用启用 `UndoMode=1` 的活动文档事务,`1000 -> 250 -> abort -> 1000 mm/s^2` 完整恢复,活动事务关闭且对象集不变。
- `probe:freecad-property-acceleration-failure` 与 `check:freecad-property-acceleration-failure` 通过C 阶段证据已追加到连续账本,等待机器队列生成并核对下一任务。
### `PROP-app-propertyacceleration-D`
#### 执行过程与完成证据
- 先用 FreeCAD console 验证有效原生对象图:`Robot::TrajectoryObject` 提供两个 waypoint`Robot::TrajectoryDressUpObject` 绑定 Source 并启用 `UseAcceleration` 后重算为 `Valid / Up-to-date`。
- 新增变异探针,以 XML parser 解析原生 `Trajectory.Content`,执行 `1000 -> 500 -> 1000 mm/s^2`;三阶段重算计数为 `2 / 1 / 1`,两个 waypoint 的 `acc` 均按 `1000 -> 500 -> 1000` 变化。
- 编辑后原生对象状态为 `Touched` 且 `MustExecute=false`;这是实际 FreeCAD 语义,重算仍执行一次并将输出轨迹 Duration 从 `0.141421356` 变为 `0.2`,恢复后返回原值。
- 恢复态的属性值、轨迹结构、Duration、XML 内容 hash、property status、editor mode、Source link 和对象状态均与 before 逐字段一致Source 轨迹和文档对象集全程不变。
- 该对象没有 Shape几何边界明确记录为 `not-applicable-no-shape-property`,未伪造拓扑证据。`probe/check:freecad-property-acceleration-mutation` 均通过D 阶段证据已加入连续账本。
### `PROP-app-propertyacceleration-E`
#### 执行过程与完成证据
- 将 `App::PropertyAcceleration` 加入 Facade 的 `NativeEditablePropertyType`,并接入数值校验、属性设置、表达式适用类型和 UI 数值编辑器;保留 FreeCAD 允许负加速度的原生边界,没有套用 Length 的非负限制。
- 单位系统新增 acceleration 量纲及 `mm/cm/m/in/ft per s^2` 换算Facade 快照使用原生基准单位 `mm/s^2`;聚焦测试确认 `9.81 m/s^2 = 9810 mm/s^2`。
- FCStd writer/reader 将该类型作为原生 `<Float>` 编解码,并把 `Robot::TrajectoryObject`/`Robot::TrajectoryDressUpObject` 纳入识别清册;`Acceleration` 写入静态原生属性,不使用动态 `group/doc/attr` fallback。
- 新增 `test:freecad-property-acceleration-facade`,只通过公开 Facade 设置 `1000 -> 500`验证版本、dirty、重算 touched、类型/单位保持;字符串和 Infinity 均被有限数值校验拒绝,归档检查与 decoder 返回原生数值 `500`。
- focused test 与完整 `./npmw run build` 通过;构建仅保留既有 OCCT chunk 体积警告。E 阶段生产实现与检查证据已加入连续账本。
### `PROP-app-propertyacceleration-F`
#### 执行过程与完成证据
- 在 `SetPropertyInput` 增加可选 `expectedDocumentVersion` 和 `AbortSignal`;同步属性写入对预取消 signal 返回 `AbortError`,对旧版本返回精确 stale 诊断,两者都在 observer 事件和历史栈写入前 fail-closed。
- 成功写入 `1000 -> 500` 只产生一组同 transaction ID 的 `property.before-change -> property.changed -> transaction.committed`,提交记录锁定版本 `1 -> 2` 和 `property.set` 操作。
- Facade undo 将属性和值恢复到版本 1redo 返回版本 2/值 500redo 后旧版本写入、预取消写入和非法字符串写入均保持文档 JSON、事件数及 undo/redo 可用性不变。
- 属性事务不分配几何 Shape测试逐项比较 `shapeCount`、`kernelReferenceCount` 和 `releasedShapeCount`,前后完全一致。
- `test:freecad-property-acceleration-transaction` 与 E 阶段 focused test 均通过F 阶段证据已加入连续账本。
### `PROP-app-propertyacceleration-G`
#### 执行过程与完成证据
- 新增受限的 `rewriteFcstdNumericProperty`:先用现有 ZIP/XML 安全边界校验对象、Property TypeId、`Float` payload、有限目标值和期望旧值再用 `fast-xml-parser/XMLBuilder` 结构化修改,禁止正则替换原生 XML。
- 首轮重写暴露 builder 会把 `CustomEnum=""` 压为被读取器禁止的布尔属性并二次转义已编码实体已明确设置保留空属性值、自闭合空节点和不重复处理实体FreeCAD 可正常读取。
- 第二轮原生检查发现只改 `<Float>` 会让 FreeCAD 沿用归档内旧派生轨迹;重写器现同时把目标对象声明标记为 `Touched="1"`,强制原生重算。这一缺陷曾使 focused check 失败,未被写成虚假通过。
- 最终真实链路为 FreeCAD 创建 `1000` -> Web 校验并编辑 `500` -> FreeCAD reopen/recompute -> saveAs -> reopen属性值为 `1000 -> 500 -> 500 -> 500`,两个 waypoint 的 `acc` 在后两次原生打开时均为 `500`。
- Web 编辑前后对象集及除目标值外的属性语义一致;本次 FreeCADCmd 归档只含 `Document.xml`,外部 opaque 条目数为 0保留判定为真且未虚构资源证据。`probe/check:freecad-property-acceleration-roundtrip` 均通过G 阶段证据已加入连续账本。
### `PROP-app-propertyacceleration-H`
#### 执行过程与完成证据
- 新增真实 Chrome harness直接复用生产 `PropertyEditor` 和 `createProductionFacade`,通过数值输入框的真实 focus/input/blur 事件完成 `1000 -> 500 mm/s^2`;文档版本 `1 -> 2`、dirty 为真、对象状态变为 `touched`UI 未产生错误。
- 通过具名 `bitbybit-persistence` Worker 执行 initialize、save/load、checkpoint、recovery、resource put/get/release 和 disposeChrome 报告锁定 `sqlite-opfs`、SQLite WASM/OPFS 均可用、恢复完整性为 `ok`。
- 浏览器内 FCStd metadata 仍编码为原生 `App::PropertyAcceleration` / `<Float value="500">`OPFS 资源 36 bytes 往返一致release 后读取为 null独立 marker 已删除。
- Facade 新增显式 `project.dispose()`,取消待执行 autosave 并关闭持久化 Worker最终 Shape 数和 kernel 引用数均为 0Worker 终止事件已记录。
- `build`、`test/check:chrome-property-acceleration`、E/F 聚焦测试均通过H 阶段机器证据已追加到连续账本,等待队列重建后领取 I 阶段。
### `PROP-app-propertyacceleration-I`
#### 执行过程与完成证据
- 新增独立 promotion 生成器与 focused checker逐项读取 A-H 连续账本、原生成功/失败/变异、Facade/事务、FCStd 往返和 Chrome 报告;缺少任一阶段或任一报告非 pass 时均拒绝提升。
- 将 `App::PropertyAcceleration` 加入全局原生可编辑 codec 清册;`config/freecad-native-property-semantics.json` 现记录该类型为 `native-editable-codec`,保持 1 个原生 record 和 1 个对象类型。
- 全局支持分区由 `22 / 4304 native-editable`、`58 / 523 opaque` 收敛为 `23 / 4305 native-editable`、`57 / 522 opaque`;连同 5 类 specialized codecnative codec 总记录数为 4988。
- exact blocker 同步为 `57 runtime property types and 522 records remain opaque-only`;系统级 exact 继续 fail-closed不因单类型完成而提前宣称整体 exact。
- 队列生成器现在会从进度账本携带已开始/已提升的 Property 类型,避免类型退出 opaque 集合后丢失 A-I 历史,同时继续从当前 opaque 清册生成后续任务。
- `probe/check:freecad-native-property-semantics` 与 `generate/check:freecad-property-acceleration-promotion` 均通过I 阶段证据已追加到连续账本。
### `PROP-app-propertyarea-A`
#### 执行过程与完成证据
- 从锁定的 FreeCAD 1.1.1 runtime oracle 提取唯一 `App::PropertyArea` 记录:宿主 `Measure::MeasureArea`、属性 `Area`、分组 `Measurement`、默认 `0.0 mm^2`、状态位 `PropReadOnly + PropOutput`。
- 原生值模型锁定为 `length^2` 的只读派生 quantity结果不拥有 Shape不能把测量值伪装成几何对象。
- 输入合同锁定为 `Elements: App::PropertyLinkSubList`scope 为 Global、允许外部文档且必须至少一个元素`Elements` 变化会立即重算 `Area`。
- 选择适用性锁定为非空且全部有效,只接受 PLANE/CYLINDER/SURFACE/VOLUMEINVALID/POINT/LINE/CURVE 明确不适用。执行语义为逐元素面积求和,失效诊断固定为 `Cannot calculate area`。
- inventory 同时锁定 runtime oracle 与 `MeasureArea.cpp/.h` 的 bytes/SHA-256并由 focused checker复核源代码中的 Global、allowExternal、ReadOnly/Output 与诊断声明;`generate/check:freecad-property-area-inventory` 均通过。
### `PROP-app-propertyarea-B`
#### 执行过程与完成证据
- 使用真实 FreeCAD 1.1.1 创建 Box、Cylinder、Sphere 与 `Measure::MeasureArea`,覆盖 empty default、planar Face、cylindrical Face、surface Face、完整 solid 和多元素求和六个成功态。
- 原生结果依次为 `0`、`10`、`75.398223877`、`50.265483856`、`160`、`95.398223877 mm^2`;每项都以源 Shape 的真实 `Area` 独立求和并在 OCCT 测量容差内一致。
- 六个阶段的 `Area` TypeId 均为 `App::PropertyArea`,原生状态位固定为 `24/27`、editor mode 为 `ReadOnly`,对象均为 `Valid / Up-to-date`。
- 测量对象全程没有 Shape源几何则逐项锁定 ShapeType、有效性、Face/Edge/Vertex 数;未用伪造拓扑替代只读 quantity 的真实边界。
- `probe/check:freecad-property-area-success` 均通过B 阶段证据已加入连续账本。
### `PROP-app-propertyarea-C`
#### 执行过程与完成证据
- 用真实 FreeCAD 1.1.1 将 `Measure::MeasureArea.Elements` 分别指向 `Vertex1` 和 `Edge1`;赋值本身不抛异常,`document.recompute()` 仍返回 true但测量对象稳定进入 `Touched + Invalid`,精确诊断为 `Cannot calculate area`,旧的最后有效面积 `10 mm^2` 保持不变。
- 每个失败态都恢复到 `AreaBox.Face1` 并重新计算,`Area`、`Elements`、对象状态和文档对象集精确回到初值;没有把重算返回值误当成对象成功状态。
- 原生 `PropReadOnly + PropOutput`/editor `ReadOnly` 只限制 GUIPython 仍可临时写入派生 `Area`;叠加 `Immutable` 后写入 `30 mm^2` 精确抛出 `AttributeError: Object attribute 'Area' is read-only`,解除状态并重算后恢复原生只读派生值。
- 该测量重算没有原生 cancel hook报告明确分类为同步重算并用活动 Document transaction abort 作为取消边界;`Elements` 从 Box Face 改到 Cylinder Face 后 abort重算恢复 `10 mm^2`,事务、对象集和文档状态无污染。
- `probe/check:freecad-property-area-failure` 与 execution-plan 门禁通过C 阶段证据已加入连续账本。
### `PROP-app-propertyarea-D`
#### 执行过程与完成证据
- 只变异输入 `Elements`:从 `AreaBox.Face1` 改为 `AreaBox.Face1 + AreaBox.Face2 + AreaCylinder.Face1`,派生值按原生同步通知从 `10` 变为 `95.398223877 mm^2`,随后恢复为 `10 mm^2`。
- 首轮 checker 因用 JSON 字符串比较对象而错误地把键顺序当成语义差异,保持 fail-closed已改为结构化深比较。原生 artifact 同时揭示 `MeasureArea::onChanged` 在 `Elements` 赋值时即同步更新 `Area`,对象进入 `Touched` 但 `MustExecute=false`,因此 checker 按真实行为锁定,而非假定等待 recompute 才更新。
- before/edit/restore 三态均保持 `App::PropertyArea`、`ReadOnly`、状态位 `24/27`、无 Shape 和 `Valid / Up-to-date`;源 Box/Cylinder 的拓扑、边界、面积、体积全部未变,文档对象集保持三对象。
- 原生探针独立复跑两次得到相同 artifact SHA-256 `fb9a6b4d6d396335e85bf242a270931ac40df5421ada0f48131a807d13e4972b``probe/check:freecad-property-area-mutation` 均通过D 阶段证据已加入连续账本。
### `PROP-app-propertyarea-E`
#### 执行过程与完成证据
- 将 `App::PropertyArea` 接入 typed Property snapshot、有限数值 codec 和 Property UI 分支;当前原生记录携带 `PropReadOnly + PropOutput`,因此生产 UI 走只读文本路径,公开 `setProperty(Area)` 在事件和版本变更前拒绝。
- FCStd writer/reader 新增 `App::PropertyArea` 原生 `<Float>` 编解码,并把 `Measure::MeasureArea` 及其静态 `Area/Elements` 纳入原生对象清册;两项属性不再落入带 `group/doc/attr` 的动态 fallback`Elements` 保持原生 `<LinkSubList>`。
- 生产 Facade 在修改 `Measure::MeasureArea.Elements` 时,从源对象稳定 face topology signature 同步求和并更新只读 `Area`;支持 `FaceN`、ElementMap 映射、稳定 TopoRef 和 whole-object face 汇总,缺失拓扑、非 Face、歧义或非法面积统一在提交前以 `Cannot calculate area` fail-closed。
- 聚焦测试锁定 `AreaBox.Face1 -> Face1+Face2` 时 `Area 10 -> 20 mm^2`、测量对象 touched、单事务事件序列以及 `Edge1` 失败时状态/事件零变化FCStd inspect 将对象识别为 `recognized` 并结构化解码 Area/Elements。
- `test:freecad-property-area-facade`、完整 `test:facade` 199 项和 `build` 均通过;构建仅保留既有 OCCT chunk 体积警告E 阶段证据已加入连续账本。
### `PROP-app-propertyarea-F`
#### 执行过程与完成证据
- 通过公开 Facade 将 `Elements` 从 `AreaBox.Face1` 改为 `Face1 + Face2`,在同一 transaction ID 内只产生一组 `property.before-change -> property.changed -> transaction.committed`,文档版本 `1 -> 2`,派生 `Area 10 -> 20 mm^2`。
- undo 同时恢复单 Face 输入、`Area=10` 和版本 1redo 同时恢复双 Face 输入、`Area=20` 和版本 2历史栈可用性按预期切换。
- redo 后依次注入旧版本写入、预取消 signal、`Edge1` 非适用输入和直接写只读 `Area`;四项均在提交前 fail-closed文档 JSON、属性事务事件数及 undo/redo 可用性完全不变。
- 测量事务不分配几何 Shape前后 `shapeCount`、`kernelReferenceCount` 和 `releasedShapeCount` 完全一致,并显式 dispose 项目持久化边界。
- `test:freecad-property-area-transaction` 与 E 阶段 focused test 均通过F 阶段证据已加入连续账本。
### `PROP-app-propertyarea-G/H/I` 与 `PROP-app-propertyboollist-A`
#### 执行过程与完成证据
- Area G 首次真实 FreeCAD -> Web -> FreeCAD 回放发现 checker 用 JSON 字符串比较对象键顺序,误报 `nativeOutputMatches=false`;保持 fail-closed 后改为结构化深比较,并让 runner 顶层 status 跟随 `zeroUnknownDrift`,避免报告自称 pass。修正后 `Area 10 -> 20 -> 20 mm^2`、LinkSubList 两个面、源几何、对象集和唯一 opaque 归档项均无未知漂移。
- Area H 新增真实 headless Chrome harness复用生产 `PropertyEditor`。Area 按原生 `PropReadOnly + PropOutput` 保持只读,真实点击 `Clear subshape links` 将 `Elements 2 -> 0`,派生 UI 值 `20 -> 0 mm^2`SQLite OPFS、FCStd Float/LinkSubList、checkpoint/recovery、OPFS 资源释放和 `bitbybit-persistence` Worker 终止均通过。
- Area I 新增独立 promotion 生成器/checkerA-H 连续证据全部通过;`App::PropertyArea` 以 `read-only-derived-mm^2-with-link-sub-list-input` 值模型提升到 native codec。全局分区更新为 `24 / 4306 native-editable`、`56 / 521 opaque`native codec 总记录 `4989`exact blocker 同步为 `56 runtime property types and 521 records remain opaque-only`,系统 exact 仍为 false。
- 随后领取 `PROP-app-propertyboollist-A`,从 FreeCAD 1.1.1 oracle 锁定 7 条 `App::PropertyBoolList` 记录:`App::FeatureTest`、`App::FeatureTestException`、四种 Link/LinkPython `VisibilityList` 和 `Surface::GeomFillSurface.ReversedList`。清册 checker 通过3 条默认可写、4 条 `Immutable + Hidden + LockDynamic`,当前仍保持 `opaque-fcstd-proxy`。
- 本轮门禁Area Chrome、Area Facade/transaction/FCStd、Area promotion、native property semantics、execution plan、active queue、JSON parse、`git diff --check` 均通过;生产 build 通过,仅保留既有 OCCT chunk 体积警告。
### `PROP-app-propertyboollist-B`
#### 执行过程与完成证据
- 首轮真实 FreeCAD 探针因错误使用不存在的 `App::Feature` 目标中止,未生成通过产物;修正为真实 `Part::Feature`,并用四条闭合边界为 `Surface::GeomFillSurface` 建立有效 Shape。
- `App::FeatureTest` 与 `App::FeatureTestException.BoolList` 均接受 empty、singleton、mixed、257 项大列表和恢复值;后者的 `execute()` 按类型设计固定报 `Testexception ;-)`artifact 将其分类为 intrinsic host diagnostic不误判为 BoolList setter 失败。
- `Surface::GeomFillSurface.ReversedList` 在 all-false、one-reversed、alternating、all-reversed 与恢复阶段均保持有效单 Face、4 Edge、4 Vertex 和 `Valid / Up-to-date`。
- 四种 Link/LinkPython 宿主不绕过 `Immutable` 直接写值,而是使用原生 LinkBaseExtension `setElementVisible()`;四项都得到 `[true,true] -> [false,true] -> [true,true]`,返回码为 1状态保持 `Immutable + Hidden + LockDynamic`。
- `probe/check:freecad-property-boollist-success` 均通过B 阶段证据已加入连续账本。
### `PROP-app-propertyboollist-C`
#### 执行过程与完成证据
- 首轮失败探针发现标量整数 `7` 和字符串 `"10201"` 是原生接受分支,分别归一化为 `[true]` 与 `[true,false,false,false,true]`;两项移入 `acceptedCoercions`,没有伪造成拒绝。
- 真正非法输入 `None`、含 float 子项和含 string 子项均以精确 `TypeError: type in list must be bool or int, not ...` 拒绝,值和对象集保持不变。
- 普通 `BoolList` 在 `ReadOnly + Immutable` 状态下返回精确 `AttributeError`,解除状态后 status/editor mode 回空;活动事务将 `[false] -> [true,false,true] -> abort -> [false]` 完整恢复。
- 四类 Link 的直接 `VisibilityList` 写入均因 immutable 拒绝,无效元素名返回 `-1` 且无变异;有效隐藏后 abort 立即恢复值但原生对象保持 `Touched`,随后一次 recompute 返回 `Up-to-date / Valid`,这一两阶段恢复由 checker 锁定。
- 原生 setter/Link extension 没有 cancel hook明确记录同步取消边界由 Document transaction abort 代替;`probe/check:freecad-property-boollist-failure` 均通过。
### `PROP-app-propertyboollist-D`
#### 执行过程与完成证据
- 对 7 个宿主分别执行 before/edit/recompute/restore/recompute所有 case 的 BoolList 值、文档对象集和适用 Shape 均恢复到原生初始态。
- `App::FeatureTest` 执行 `[false] -> [true,false,true] -> [false]`,赋值后 `Touched`、重算后 `Up-to-date / Valid``FeatureTestException` 保留其固有 Invalid 诊断,但属性值仍精确恢复。
- 有效 `GeomFillSurface` 在 reversal 编辑时面积、边界和拓扑计数不变,但 BREP SHA-256 从 `ea7baeb0...` 变为 `f6c587bb...`;恢复后精确返回 `ea7baeb0...`,证明不是仅比较最终数值。
- 四类 Link 均执行 `[true,true] -> [false,true] -> [true,true]`C++ Link 变体 touched 时 `MustExecute=false`Python Link 变体为 true重算后均回到 `Up-to-date / Valid`。
- `probe/check:freecad-property-boollist-mutation` 均通过D 阶段证据已加入连续账本。
### `PROP-app-propertyboollist-E`
#### 执行过程与完成证据
- 将 `App::PropertyBoolList` 加入 Facade 原生可编辑类型和 `PropertyValue`,布尔数组在文档快照、事务历史及公开对象读取中保持独立深拷贝;生产 setter 只接受逐项 boolean 的数组,字符串、数字和混合数组在事件与版本变更前 fail-closed。
- 对照锁定 FreeCAD `src/App/PropertyStandard.cpp` 的 `PropertyBoolList::Save/Restore` 实现,将 FCStd codec 固定为原生反序 `dynamic_bitset` 字符串:例如 `[true,false,false]` 编码为 `<BoolList value="001"/>`,读取时按低位顺序恢复;未使用通用 JSON 或伪造的列表子节点。
- `App::FeatureTest`、`App::FeatureTestException`、`Surface::GeomFillSurface` 及四类 Link 宿主进入 FCStd 识别清册;其 `BoolList/ReversedList/VisibilityList` 作为静态原生属性写入,不携带动态 `group/doc/attr` fallback。`VisibilityList` 的 `Immutable + Hidden + LockDynamic` 状态位保持为 266公开 setter 明确拒绝直接写入。
- 生产 `PropertyEditor` 新增可逆的 BoolList 编辑分支,接受 `true/false` 与 `1/0` 逗号列表,非法 token 恢复旧显示值;隐藏的 Link `VisibilityList` 继续由原生 Hidden 状态从属性面板过滤。
- 聚焦测试锁定 `[false] -> [true,false,true]`、文档版本/dirty/touched、事务事件、非法输入零污染、immutable Link 拒绝、原生 bitset XML 和结构化 decoder`test:freecad-property-boollist-facade`、完整 `test:facade` 199 项、`build` 与 `git diff --check` 均通过。构建仅保留既有 OCCT chunk 体积警告。
### `PROP-app-propertyboollist-F`
#### 执行过程与完成证据
- 通过公开 Facade 将普通 `App::FeatureTest.BoolList` 从 `[false]` 改为 `[true,false,true]`;同一 transaction ID 内只产生 `property.before-change -> property.changed -> transaction.committed`,文档版本 `1 -> 2`、dirty 为真且宿主进入 touched。
- setter 对调用方数组做深拷贝,`getObject()` 返回的数组也不能反向修改内部状态undo 精确恢复 `[false]`/版本 1redo 返回 `[true,false,true]`/版本 2历史栈可用性按预期切换。
- redo 后注入旧版本写入、预取消 signal、含字符串的混合数组和 immutable `VisibilityList` 直接写入;四项均在提交前 fail-closed文档 JSON、属性事务事件数及 undo/redo 可用性完全不变。
- BoolList 属性事务不分配 Shape前后 `shapeCount`、`kernelReferenceCount` 和 `releasedShapeCount` 完全一致,并显式 dispose 项目持久化边界。
- `test:freecad-property-boollist-transaction` 与 E 阶段 focused test 均通过F 阶段证据已加入连续账本。
### `PROP-app-propertyboollist-G`
#### 执行过程与完成证据
- 新增受限的 `rewriteFcstdBoolListProperty` 及 Facade `project.fcstd.rewriteBoolList`:先验证对象、属性、`App::PropertyBoolList` TypeId、原生 `BoolList` payload、纯布尔目标数组和预期旧值再用结构化 XML parser/builder 修改反序 bitset目标对象标记 touched其他 ZIP 条目逐项复制。
- 首次真实检查发现 `App::FeatureTest.FloatList` 使用合法的外部 `<FloatList file="FloatList"/>`,旧 parser 错误要求内联 `count`;已按 FreeCAD 格式把 resource-backed FloatList 留在 opaque 边界。第二次检查发现普通 `App::PropertyPath` 使用 `<Path value="c:\\temp"/>`,已按 TypeId 与 CAM `Path::PropertyPath file="*.nc"` 分流,两次失败均未写成通过报告。
- 最终真实链路为 FreeCAD 1.1.1 创建 `[false]` -> Web 校验并编辑 `[true,false,true,false]` -> FreeCAD reopen/recompute -> saveAs -> reopen原生重开与再保存均精确返回目标数组宿主保持 `App::FeatureTest`、普通 property status/editor mode、无 Shape。
- Web 编辑前后对象集及目标属性之外的 inspection 语义一致;原生归档的 `ColourList`、`FloatList`、`MaterialList`、`VectorList` 四个 opaque 条目逐字节保留,未知语义漂移为零。
- `probe/check:freecad-property-boollist-roundtrip` 与生产 `build` 均通过G 阶段证据已加入连续账本。
### `PROP-app-propertyboollist-H`
#### 执行过程与完成证据
- 新增真实 Chrome harness直接复用生产 `PropertyEditor` 和 `createProductionFacade`;通过文本输入框真实 focus/input/blur 将 `false` 改为 `true, false, true, false`,文档版本 `1 -> 2`、dirty 为真、宿主状态为 touchedUI 无错误。
- 通过具名 `bitbybit-persistence` Worker 执行 initialize、save/load、checkpoint、recovery、resource put/get/release 和 dispose报告锁定 `sqlite-opfs`、SQLite WASM/OPFS 可用及恢复完整性 `ok`。
- 浏览器持久化重载保持 `App::PropertyBoolList` 和目标数组FCStd metadata 识别为原生 `BoolList` 并结构化解码为 `[true,false,true,false]`。
- OPFS 资源 32 bytes 往返一致release 后读取为 null独立 marker 已删除;最终 Shape/内核引用均为 0持久化 Worker 终止事件已记录。
- `build`、`test/check:chrome-property-boollist`、E/F 聚焦测试均通过H 阶段机器证据已追加到连续账本。
### `PROP-app-propertyboollist-I`
#### 执行过程与完成证据
- 新增 BoolList 独立 promotion 生成器/checker对 A-H 的连续证据、原生值模型、FCStd `BoolList` payload、真实 FreeCAD 回放及 Chrome 持久化结果进行闭环校验。
- `App::PropertyBoolList` 的 7 条记录全部从 opaque 提升为 native-editable3 条普通可写属性4 条 Link `VisibilityList` 保持 `Immutable + Hidden + LockDynamic`,没有因提升放宽原生编辑边界。
- 全局语义分区更新为 `25 / 4313 native-editable`、`5 / 683 specialized`、`55 / 514 opaque`native codec 总记录为 `4996`exact blocker 同步为 `55 runtime property types and 514 records remain opaque-only`,系统 exact 仍为 false。
- `EX-DOC-01` 及早期 Acceleration/Area promotion 报告已同步到当前全局快照,避免已完成证据携带过期分区统计;两项旧 promotion checker 重跑通过。
- `generate/check:freecad-property-boollist-promotion`、`probe/check:freecad-native-property-semantics` 均通过;首次 execution-plan 总检仅在末尾指出活动队列尚未在 I 登记后重生成,本节记账后立即重建并复验。
### `PROP-app-propertycolor-A`
#### 执行过程与完成证据
- BoolList I 登记后活动队列重建为 `514 completed / 1 in-progress / 1241 pending``check:execution-plan` 全部通过,唯一队首切换到 `PROP-app-propertycolor-A` 并直接接领。
- 从 FreeCAD 1.1.1 运行时清册锁定 8 条 `App::PropertyColor` 记录,覆盖 `App::FeatureTest`、`App::FeatureTestException`、`App::Part`、两种 Assembly 对象和三种 TechDraw 视图8 个宿主均 available、状态为空且可写。
- 默认值精确分为黑色不透明 `[0,0,0,1]` 与白色全透明 `[1,1,1,0]`;值模型锁定为 RGBA 四通道浮点 tuplealpha `1=opaque / 0=transparent`,无 Shape 前置且无跨属性依赖。
- 源码溯源锁定三类 setter3/4 元同类 float tuple、3/4 元同类 integer tuple按 255 归一化)及 32 位 `0xRRGGBBAA` packed integerFCStd 存储为 `<PropertyColor value="unsigned-decimal"/>`1.1 前文档读取时单独反转 alpha byte。
- `generate/check:freecad-property-color-inventory` 通过A 阶段仅锁定 inventory/preconditions能力分类仍为 `opaque-fcstd-proxy`,成功边界留给 B 的真实 FreeCAD 探针。
### `PROP-app-propertycolor-B`
#### 执行过程与完成证据
- 在 8 个清册宿主上逐个新建独立 FreeCAD 文档,经公开 Python property setter 依次写入 3 元 float、4 元 float、3 元 byte、4 元 byte、`0x11223344` packed integer、全透明边界最后恢复宿主原默认值。
- 3 元 float 精确归一为 `[0.25,0.5,0.75,1]`byte tuple 按 255 归一化,`0x11223344` 按 `RRGGBBAA` 顺序解码为 `17/255,34/255,51/255,68/255`float32 回读精度和 alpha 全透明值均由 checker 锁定。
- `TechDraw::DrawViewSpreadsheet` 首轮未关联 Source 时出现可避免的 `No spreadsheet linked`;探针补建有效 `Spreadsheet::Sheet` 后重跑7 个普通宿主每个阶段均为 `Up-to-date / Valid`。
- `App::FeatureTestException` 仍按类型设计在变更后固定报 `Testexception ;-)`,颜色值与恢复不受影响;该诊断标记为 intrinsic host diagnostic没有误归类为 PropertyColor setter 失败。
- 所有阶段的 TypeId、空 status/editor mode、宿主对象集、无 Shape 适用性、重算状态和诊断均已入机器产物;`probe/check:freecad-property-color-success` 通过。
### `PROP-app-propertycolor-C`
#### 执行过程与完成证据
- 真实失败探针先分离原生接受的 coercionfloat tuple 通道不夹取,超出 `[0,1]` 的值原样保留integer tuple 即使超出 byte 范围仍直接除以 255bool tuple 按 integer 处理。
- packed integer 锁定低 32 位语义:`0xFFFFFFFF -> [1,1,1,1]`、`0x100000000 -> [0,0,0,0]`、`-1 -> [1,1,1,1]`,三项均为原生接受分支,未伪造成拒绝。
- `None`、list、长度 2/5 tuple、首项 string、float/int 混合 tuple 及标量 float 共 8 类非法输入均以精确 `TypeError` 拒绝,属性值、文档对象集和后续事务基线零污染。
- editor `ReadOnly` 只约束 UIPython setter 仍可写;追加 `Immutable` 后精确拒绝并报 `Object attribute 'Colour' is read-only`,解除后 status/editor mode 恢复为空。
- 活动事务中将 `[0,0,0,1]` 改为 `[0.75,0.5,0.25,0.125]`abort 立即恢复 RGBA 但对象保持 Touched后续 recompute 返回 `Up-to-date / Valid`;取消边界明确为同步 setter 无 cancel hook由 Document transaction abort 替代。
- `probe/check:freecad-property-color-failure` 通过C 阶段机器证据已加入连续账本。
### `PROP-app-propertycolor-D`
#### 执行过程与完成证据
- 对 8 个原生宿主分别执行 `before -> edit -> recompute -> restore -> recompute`,统一目标为 `[0.125,0.375,0.625,0.875]`;每个宿主都检测到真实值变异并恢复自身默认 RGBA。
- 7 个普通宿主的状态序列精确为 `Valid -> Touched -> Valid -> Touched -> Valid`;这锁定了 setter 立即写值与 recompute 清除 touched 的两阶段语义。
- `App::FeatureTestException` 在第一次重算后进入固有 `Touched + Invalid / Testexception ;-)`,恢复属性不清除该宿主诊断,但 RGBA 仍精确回到 `[0,0,0,1]`。
- `TechDraw::DrawViewSpreadsheet` 使用有效 `Spreadsheet::Sheet` 前置App::Part/Assembly 自动创建的 Origin 对象集以及所有其他宿主对象集在变异和恢复中完全不变。
- 8/8 的 TypeId、空 status/editor mode、无 Shape 适用性、对象集与恢复值均通过 focused checker`probe/check:freecad-property-color-mutation` 通过。
### `PROP-app-propertycolor-E`
#### 执行过程与完成证据
- 将数据域 `App::PropertyColor` 固定为四通道有限数值 RGBA并与视图域既有 `#RRGGBB` 表示分流Facade 的输入、对象快照和事务历史均深拷贝颜色数组,错误长度、非数值和非有限通道在版本及事件变更前 fail-closed原生允许的有限越界通道不被擅自夹取。
- FCStd codec 按 FreeCAD 原生 `<PropertyColor value="unsigned-decimal"/>` 实现 `0xRRGGBBAA` 打包和读取,写出使用与 C++ `lround` 一致的半值远离零舍入;同时保留 GuiDocument 视图颜色的既有编码路径,未混淆数据属性与显示属性。
- `App::FeatureTest`、`App::FeatureTestException`、`App::Part`、两类 Assembly 对象及三类 TechDraw 视图进入 FCStd 静态宿主清册;`Colour/Color/TextColor` 作为原生静态属性写入,不携带动态 `group/doc/attr` fallback结构化 decoder 可恢复四通道 byte fraction。
- 生产 `PropertyEditor` 为数据颜色增加原生颜色 swatch 与独立 alpha 数值输入swatch 仅为浏览器显示夹取 RGB提交仍保留原生有限数值语义失败时控件恢复旧值视图颜色继续使用原来的不透明十六进制编辑器。
- 聚焦测试锁定八类宿主、深拷贝、事件/版本、非法输入零污染、有限越界值、透明/不透明 packed 边界、无动态属性元数据及数据/视图作用域分离;`test:freecad-property-color-facade`、完整 `test:facade` 199 项、生产 `build` 与 `git diff --check` 均通过。构建仅保留既有 OCCT chunk 体积警告。
### `PROP-app-propertycolor-F`
#### 执行过程与完成证据
- 通过公开 Facade 将普通 `App::FeatureTest.Colour` 从 `[0,0,0,1]` 改为 `[0.125,0.375,0.625,0.875]`;同一 transaction ID 内只产生 `property.before-change -> property.changed -> transaction.committed`,文档版本 `1 -> 2`、dirty 为真且宿主进入 touched。
- setter 对调用方 RGBA 数组做深拷贝,`getObject()` 暴露的数组也不能反向修改内部状态undo 精确恢复黑色不透明值和版本 1redo 返回目标 RGBA 和版本 2历史栈可用性按预期切换。
- redo 后依次注入旧版本写入、预取消 signal、NaN 通道和 immutable 颜色直接写入;四项均在提交前 fail-closed文档 JSON、属性事务事件数及 undo/redo 可用性完全不变。
- PropertyColor 属性事务不分配 Shape前后 `shapeCount`、`kernelReferenceCount` 和 `releasedShapeCount` 完全一致,并显式 dispose 项目持久化边界。
- `test:freecad-property-color-transaction` 与 E 阶段 focused test 均通过F 阶段证据已加入连续账本。
### `PROP-app-propertycolor-G`
#### 执行过程与完成证据
- 新增受限的 `rewriteFcstdColorProperty` 及 Facade `project.fcstd.rewriteColor`:先验证对象、属性、`App::PropertyColor` TypeId、唯一原生 `PropertyColor` payload、四通道有限目标值和预期旧值再用结构化 XML parser/builder 修改 packed RGBA目标对象标记 touched其他 ZIP 条目逐项复制。
- focused test 锁定 `0x11223344 -> 0x336699CC`、错误 expectedValue 和 NaN 目标的 fail-closed 边界;改写后重新 inspect/decode确保 FCStd 的 byte 量化结果与目标四通道一致。
- 真实链路由 FreeCAD 1.1.1 创建 `0x11223344` -> Web 校验并编辑为 `[0.2,0.4,0.6,0.8]`/packed `862362060` -> FreeCAD reopen/recompute -> saveAs -> reopen两次原生回读均为同一组预期 float32 值 `[0.200000003,0.400000006,0.600000024,0.800000012]`。
- Web 编辑前后对象集及目标属性之外的 inspection 语义一致;`Document.xml` 之外的 4 个原生归档条目逐字节保留,宿主保持 `App::FeatureTest`、普通 property status/editor mode、无 Shape未知语义漂移为零。
- `probe/check:freecad-property-color-roundtrip`、完整 `test:facade` 199 项、生产 `build` 与 `git diff --check` 均通过G 阶段证据已加入连续账本,构建仅保留既有 OCCT chunk 体积警告。
### `PROP-app-propertycolor-H`
#### 执行过程与完成证据
- 新增真实 Chrome harness直接复用生产 `PropertyEditor` 和 `createProductionFacade`;通过原生 HTMLInputElement value setter 与浏览器事件真实操作颜色 swatch `#000000 -> #336699`,再将 alpha `1 -> 0.8`,最终 RGBA 为 `[0.2,0.4,0.6,0.8]`,文档版本 `1 -> 3`、dirty 为真、宿主 touched 且 UI 无错误。
- 首次浏览器运行因直接赋 `input.value` 同步了 React value tracker未触发颜色 `onChange`;该次报告保持 failed 并完整 dispose。harness 改为绕过 tracker 的原生 setter 后重新执行通过,没有把测试注入问题伪造成产品成功。
- 通过具名 `bitbybit-persistence` Worker 执行 initialize、save/load、checkpoint、recovery、resource put/get/release 和 dispose报告锁定 `sqlite-opfs`、SQLite WASM/OPFS 可用及恢复完整性 `ok`。
- 浏览器持久化重载保持 `App::PropertyColor` 与四通道目标值FCStd metadata 识别为原生 `PropertyColor`packed 值为 `862362060`。OPFS 资源 29 bytes 往返一致release 后读取为 null独立 marker 已删除。
- 最终 Shape/内核引用均为 0持久化 Worker 终止事件已记录;`test/check:chrome-property-color`、E/F focused 测试、生产 `build` 与 `git diff --check` 均通过H 阶段机器证据已追加到连续账本。
### `PROP-app-propertycolor-I`
#### 执行过程与完成证据
- 新增 Color 独立 promotion 生成器/checker对 A-H 的连续证据、四通道有限 RGBA 值模型、FCStd `PropertyColor` packed payload、真实 FreeCAD 回放及 Chrome 持久化结果进行闭环校验。
- `App::PropertyColor` 的 8 条记录全部从 opaque 提升为 native-editable8 个宿主属性均保持普通可写状态,数据域四通道 RGBA 与视图域 `#RRGGBB` 继续分流FCStd 明确保留 8-bit packed 量化边界。
- 全局语义分区更新为 `26 / 4321 native-editable`、`5 / 683 specialized`、`54 / 506 opaque`native codec 总记录为 `5004`exact blocker 同步为 `54 runtime property types and 506 records remain opaque-only`,系统 exact 仍为 false。
- `EX-DOC-01`、当前工作文档、主执行计划及早期 Acceleration/Area/BoolList promotion 报告已同步到当前全局快照,避免已完成证据携带过期分区统计;三项旧 promotion checker 重跑通过。
- `generate/check:freecad-property-color-promotion`、`probe/check:freecad-native-property-semantics`、Property status oracle 与 `git diff --check` 均通过I 阶段证据已加入连续账本,下一步重建活动队列并运行 execution-plan 总检。
### `PROP-app-propertycolorlist-A`
#### 执行过程与完成证据
- Color I 登记后活动队列重建为 `523 completed / 1 in-progress / 1232 pending``check:execution-plan` 全部通过,唯一队首切换到 `PROP-app-propertycolorlist-A` 并直接接领。
- 从 FreeCAD 1.1.1 运行时清册锁定 2 条 `App::PropertyColorList` 记录,宿主为 `App::FeatureTest` 与 `App::FeatureTestException` 的 `ColourList`;两项均 available、状态为空且可写默认值均为单个黑色不透明颜色 `[[0,0,0,1]]`,无 Shape 或跨属性前置。
- 列表输入边界由 `PropertyListsBase` 与 `PropertyColorList::getPyValue` 源码共同锁定:接受 sequence、iterable、单个颜色值及整数索引字典字典 `-1/current-size` 可追加;每个元素复用 PropertyColor 的 3/4 元 float tuple、3/4 元 integer tuple和 packed `0xRRGGBBAA` setter。
- FCStd XML 为 `<ColorList file="property-name"/>`,非空值写入同名外部二进制资源,布局固定为 little-endian `uint32 count` 后接逐项 `uint32 packed RRGGBBAA`;空列表使用空 file 属性1.1 前读取时逐项反转 alpha。
- `generate/check:freecad-property-colorlist-inventory` 与 `git diff --check` 均通过A 阶段仍保持 `opaque-fcstd-proxy`,真实成功、失败和变异边界留给 B/C/D。
### `PROP-app-propertycolorlist-B`
#### 执行过程与完成证据
- 在 `App::FeatureTest` 与 `App::FeatureTestException` 两个清册宿主上经公开 Python property setter 覆盖 empty、单 float tuple、混合 float/byte/packed 元素、单 packed 标量、generator iterable、字典索引更新/追加、257 项大列表和恢复值。
- 原生容器归一化符合 A 阶段源码边界:单 packed 标量变为单项列表generator 被完整消费;`{1: 0x11223344, -1: (0,255,0,128)}` 在两项基线上更新索引 1 并追加第三项,值顺序和 alpha 均精确锁定。
- 混合元素逐项复用 PropertyColor float32/byte/packed 归一化257 个 `0x01020304` 全部回读为同一 RGBA未发生截断、重排或共享引用最后精确恢复默认 `[[0,0,0,1]]`。
- 普通宿主每阶段均为 `Up-to-date / Valid``FeatureTestException` 在第一次实际变更重算后固定进入 `Touched + Invalid / Testexception ;-)`,属性写入、列表长度和恢复不受影响,该诊断明确归类为 intrinsic host diagnostic。
- 两宿主的 TypeId、空 status/editor mode、无 Shape 适用性和对象集均保持稳定;`probe/check:freecad-property-colorlist-success` 与 `git diff --check` 均通过B 阶段机器证据已加入连续账本。
### `PROP-app-propertycolorlist-C`
#### 执行过程与完成证据
- 真实失败探针分离 6 个原生接受 coercionbool packed 标量、bytes 整数序列、裸 3/4 元同类 float/integer tuple 单颜色、2 元 packed tuple 颜色序列和空字典清空tuple 的单颜色/列表消歧据实回写 A 清册,没有把接受分支伪造成失败。
- `None`、裸 float list、float/int 混合 tuple、短 nested tuple、含 `None` 的列表、标量 float、字符串、nested list、非整数字典键和正负越界索引共 11 项精确拒绝且保持原列表;对象集全程不变。
- 字典 `{0: 0x01020304, 1: None}` 是唯一非原子失败:索引 0 已变更后,索引 1 抛出 TypeError原生属性留下部分变异checker 显式锁定该行为,后续 Facade 必须把公开事务边界设计与此原生 Python setter 风险区分开。
- editor `ReadOnly` 只约束 UIPython setter 仍可将两项列表替换为一项;追加 `Immutable` 后精确拒绝并报 `Object attribute 'ColourList' is read-only`,解除状态后 status/editor mode 恢复为空。
- 活动事务中将两项基线改为三项混合颜色abort 立即恢复列表但对象保持 Touched后续 recompute 返回 `Up-to-date / Valid`;同步 setter 无 cancel hook由 Document transaction abort 替代。
- `probe/check:freecad-property-colorlist-failure`、更新后的 A checker 与 `git diff --check` 均通过C 阶段机器证据已加入连续账本。
### `PROP-app-propertycolorlist-D`
#### 执行过程与完成证据
- 对 `App::FeatureTest` 与 `App::FeatureTestException` 分别执行 `before -> edit -> recompute -> restore -> recompute`;统一目标含 float、packed、byte 和全透明四种颜色,完整列表顺序与逐通道 float32 回读均由 checker 锁定。
- 两宿主都从默认 `[[0,0,0,1]]` 真实变异为四项列表,并在恢复阶段精确返回默认值;对象集、无 Shape 适用性、TypeId、空 status/editor mode 全程保持不变。
- 普通宿主状态序列精确为 `Valid -> Touched -> Valid -> Touched -> Valid`,证明整表 setter 立即触发 touched 且 recompute 清除状态。
- `FeatureTestException` 在第一次重算后进入固有 `Touched + Invalid / Testexception ;-)`,恢复属性不清除该宿主诊断,但颜色列表仍精确恢复。
- `probe/check:freecad-property-colorlist-mutation` 与 `git diff --check` 均通过D 阶段机器证据已加入连续账本。
### `PROP-app-propertycolorlist-E`
#### 执行过程与完成证据
- 将 `App::PropertyColorList` 接入 typed `ColorListValue`、Facade 原生可编辑类型与文档/持久化快照深拷贝;公开 setter 只接受有序四通道有限 RGBA 数组非法长度、NaN 和字符串输入均在事件及版本变更前原子拒绝,未复刻原生 Python 字典逐项写入可能留下部分变异的非原子风险。
- FCStd writer 按 FreeCAD 原生格式输出 `<ColorList file="..."/>` 和 little-endian `uint32 count + uint32 packed RRGGBBAA[]` 外部资源;同名属性按 `ColourList`、`ColourList1` 唯一化,空列表固定 `file=""` 且不生成资源,数据属性不再携带动态 `group/doc/attr` fallback。
- inspector 新增严格 ColorList hydration缺失、截断、count/字节数不一致或非法资源路径全部 fail-closed结构化 decoder 恢复逐项 8-bit RGBA 量化值。`rewriteMetadata` 会移除旧的已知 ColorList 条目并按当前文档重建,避免与 opaque 资源碰撞或保留陈旧 payload。
- 生产 `PropertyEditor` 新增 ColorList 逐项编辑器,每项提供颜色 swatch、独立 alpha 数值输入和删除按钮,并提供添加颜色按钮;所有提交仍经公开 Facade未从 UI 直接写文档状态。
- 聚焦测试锁定嵌套数组双向深拷贝、单事务事件序列、非法嵌套值零污染、两个同名宿主的资源唯一化、二进制字节布局、空列表、缺失资源拒绝和 metadata rewrite 量化结果。`test:freecad-property-colorlist-facade`、完整 `test:facade` 199 项、PropertyColor/BoolList 相邻回归、`test:fcstd-roundtrip`、生产 `build` 与 `git diff --check` 均通过;构建仅保留既有 OCCT chunk 体积警告。
### `PROP-app-propertycolorlist-F`
#### 执行过程与完成证据
- 通过公开 Facade 将普通 `App::FeatureTest.ColourList` 从单个黑色不透明项改为两个 RGBA 项;同一 transaction ID 只产生 `property.before-change -> property.changed -> transaction.committed`,文档版本 `1 -> 2`、dirty 为真且宿主进入 touched。
- setter、Facade 快照、history undo/redo 均验证嵌套颜色项的深拷贝:修改调用方数组或 `getObject()` 返回值不会反向改变文档undo 恢复单项和版本 1redo 恢复双项和版本 2历史栈可用性符合预期。
- redo 后依次注入旧版本写入、预取消 signal、含 NaN 的嵌套颜色和 immutable ColorList 写入;四项均在提交前 fail-closed文档 JSON、属性事务事件数及 undo/redo 可用性完全不变。
- ColorList 事务不分配几何 Shape前后 `shapeCount`、`kernelReferenceCount` 和 `releasedShapeCount` 完全一致,并显式 dispose 项目持久化边界。
- `test:freecad-property-colorlist-transaction` 与 E 阶段 focused test 均通过F 阶段证据已加入连续账本。
### `PROP-app-propertycolorlist-G`
#### 执行过程与完成证据
- 新增受限 FCStd 直改入口 `rewriteFcstdColorListProperty` 并经公开 Facade `project.fcstd.rewriteColorList` 暴露;入口校验对象、属性、原生类型、唯一 XML declaration/data/payload、外部资源路径、旧值前置条件及目标 RGBA 有限值,任一歧义均 fail-closed。
- 直改保持原有 `ColourList` 资源路径,只将目标二进制按 `uint32 count + packed RRGGBBAA[]` 重写并标记宿主 touched写后重新 inspect/decode按 8-bit 原生量化值闭环校验。聚焦测试同时锁定正常改写、旧值不匹配和 NaN 拒绝。
- 真实 FreeCAD 链路从单项 `0x11223344` 文件开始,经 Web 改成 `[[0.2,0.4,0.6,0.8],[17/255,34/255,51/255,68/255]]`,随后由 FreeCAD 打开、recompute、另存并再次打开两次原生回读均为相同 float32 量化结果,未发生顺序或 alpha 漂移。
- `ColourList` 路径保持不变,资源由 8 字节变为 12 字节且内容确实改变;其余 3 个 opaque archive entry 逐字节保持对象集合、TypeId、status/editor mode、无 Shape 状态及非目标语义对象均保持,`zeroUnknownDrift=true`。
- `probe/check:freecad-property-colorlist-roundtrip`、E/F 聚焦测试、完整 `test:facade` 199 项、生产 `build` 与 `git diff --check` 均通过G 阶段机器证据已加入连续账本。
### `PROP-app-propertycolorlist-H`
#### 执行过程与完成证据
- 新增独立真实 Chrome `PropertyColorList` harness直接挂载生产 `PropertyEditor` 和 `createProductionFacade`;页面在 cross-origin isolation 下启动实际 `bitbybit-persistence` Worker没有使用 DOM 外捷径写文档。
- 真实 UI 从单项黑色列表出发,连续点击两次新增达到 3 项、删除第 3 项回到 2 项,再通过两个原生 color input 和两个 alpha number input 写成 `[[0.2,0.4,0.6,0.8],[17/255,34/255,51/255,0.4]]`;所有 aria label、输入类型、颜色显示值、项目数和无 UI 错误均由 checker 锁定。
- 7 次 UI 提交将文档版本从 1 推进到 8dirty 为真且宿主为 touchedSQLite OPFS save/load、version 8 checkpoint 和 recovery integrity 均恢复完整嵌套列表与 `App::PropertyColorList` 类型。
- 浏览器内 FCStd 检查确认原生 `ColorList` 元素、`ColourList` 外部资源路径和 12 字节二进制 payload独立资源 put/get/release 往返成功OPFS marker 创建后可删除。
- Worker 请求覆盖 initialize/save/load/checkpoint/recovery/resource/dispose最终 persistence Worker 已 terminate几何 `shapeCount=0`、`kernelReferenceCount=0`。`test/check:chrome-property-colorlist`、E/F 聚焦测试、生产 `build`、JSON 校验与 `git diff --check` 均通过H 阶段机器证据已加入连续账本。
### `PROP-app-propertycolorlist-I`
#### 执行过程与完成证据
- 新增 ColorList 独立 promotion 生成器/checker逐项核对 A-H 连续账本、两个可写原生宿主、有序变长 RGBA 值模型、外部 FCStd 二进制资源、真实 FreeCAD 往返和 Chrome OPFS 结果。
- `App::PropertyColorList` 的 2 条记录从 `opaque-fcstd-proxy` 提升为 `native-editable-codec`;能力报告锁定 `ColorList` 元素、`ColourList` 路径、12 字节双项 payload、逐项 8-bit packing 和零未知语义漂移。
- 全局 Property 分区同步为 `27 / 4323 native-editable`、`5 / 683 specialized`、`53 / 504 opaque`native codec 总记录为 `5006`exact blocker 更新为 `53 runtime property types and 504 records remain opaque-only`,系统 exact 保持 false`EX-DOC-01` 继续 in-progress。
- 主执行计划、当前工作文档、exact parity blocker 以及 Acceleration/Area/BoolList/Color 四份既有 promotion 报告均同步到新快照;四个旧 checker 与 ColorList 新 checker 全部重跑通过,没有保留陈旧分区数字。
- `generate/check:freecad-property-colorlist-promotion`、`probe/check:freecad-native-property-semantics`、Property status oracle、exact parity plan、JSON 校验和 `git diff --check` 均通过I 阶段证据已加入连续账本。
### `PROP-app-propertydirection-A`
#### 执行过程与完成证据
- 从锁定 FreeCAD 1.1.1 运行时清册确认 2 条 `App::PropertyDirection``Part::Mirroring.Normal`Plane 组)和 `Part::ProjectOnSurface.Direction`Projection 组);两项均 available、无 status、可写默认值均为 `[0,0,1]`。
- 源码锁定 Direction 直接继承 `App::PropertyVector`,属性 setter 接受 `Base.Vector` 或恰好三个 float/integer 分量的 tuple属性层不执行归一化暴露 `x/y/z` 子路径,编辑器为 `Gui::PropertyEditor::PropertyDirectionItem`,并沿用 `Base::Unit::Length`。
- FCStd 继承 `<PropertyVector valueX="..." valueY="..." valueZ="..."/>` 三个 decimal double 属性,无外部资源;外层 Property TypeId 仍为 `App::PropertyDirection`。
- 属性写入本身不要求 Shape但宿主成功执行依赖几何输入且下游 `gp_Dir` 要求非零方向Mirroring 依赖 Source/BaseMirrorPlane 可覆盖 Base/Normal 并令两者 ReadOnlyProjectOnSurface 依赖单一 SupportFace 与 Projection 列表。
- `generate/check:freecad-property-direction-inventory`、JSON 校验和 `git diff --check` 均通过A 阶段保持 `opaque-fcstd-proxy`,真实 setter、重算、失败和 Shape 变异证据留给 B/C/D。
### `PROP-app-propertydirection-B`
#### 执行过程与完成证据
- 真实 FreeCAD 为 `Part::Mirroring.Normal` 建立 2×3×4 Box 镜像,为 `Part::ProjectOnSurface.Direction` 建立 z=-5 的封闭 Wire、z=0 平面 Face、Edges 模式投影夹具;两个宿主默认和恢复均为 `[0,0,1]`、Valid、Up-to-date。
- 每个宿主依次接受轴向 tuple、整数 tuple `[1,1,2]`、非单位 float tuple `[0.25,-0.5,1.5]`、`Base.Vector`、近轴有限值和大有限值;属性回读逐分量保持请求值,没有隐式单位化。
- Mirroring 每个成功阶段均产出有效 Solid1 solid/6 faces/12 edges/8 verticesvolume 24area 52ProjectOnSurface 每个成功阶段均产出有效 Compound4 edges/4 vertices无 solids/faces对象集和属性 TypeId/status/editor mode 均稳定。
- setter 后两宿主都进入 TouchedMirroring `MustExecute=true`ProjectOnSurface 保持原生 `MustExecute=false`,随后 recompute 均返回成功并恢复 Up-to-date/Valid。除重复轴向项外各方向均产生不同 BRep 哈希,恢复阶段与默认 BRep/bounds 精确一致。
- `probe/check:freecad-property-direction-success`、JSON 校验与 `git diff --check` 均通过B 阶段机器证据已加入连续账本零向量、NaN/Inf、空依赖和取消行为留给 C。
### `PROP-app-propertydirection-C`
#### 执行过程与完成证据
- 原生 setter 进一步锁定 Python coercion混合 integer/float 三元 tuple 和 bool 三元 tuple 均被接受bool 按 `1/0` 回读;`None`、list、长度 2/4 tuple、含 string 分量、标量 float/int 共 7 类输入精确 TypeError 拒绝,方向值和对象集零污染。
- 零向量在 Property 层被接受,但两个真实宿主重算后均进入 `Touched + Invalid / gp_Dir() - input vector has zero norm``document.recompute()` 仍返回 true最后有效 Solid/Compound Shape 及 BREP hash 保持不变,没有把宿主错误误报成 setter 拒绝。
- NaN 与正负 Infinity 的宿主边界改用独立 FreeCAD 子进程并各复跑两次Mirroring 六次均在 setter 触发的同步 `onChanged/recompute` 内达到 5 秒硬超时ProjectOnSurface 六次均记录 `Courbes non jointives` 后以状态 0 提前退出且无完成标记。两类结果均稳定,主探针不会被单个原生挂起吞掉。
- 移除 Mirroring Source 和 ProjectOnSurface SupportFace 分别得到 `No object linked`、`No support face specified` 并保留最后有效 Shape清空 Projection 是原生合法边界,宿主保持 Valid 并产出 Null Shape未伪造成依赖失败。
- editor `ReadOnly` 仍只约束 UIPython setter 可写;`Immutable` 精确拒绝并报 `Object attribute 'Normal' is read-only`。活动事务中方向变异后 abort 恢复 `[0,0,1]` 和对象集,宿主经重算回到 Up-to-date/Valid同步 setter 无 cancel hook由 Document transaction abort 替代。
- `probe/check:freecad-property-direction-failure`、JSON 校验与 `git diff --check` 均通过C 阶段机器证据已加入连续账本。
### `PROP-app-propertydirection-D`
#### 执行过程与完成证据
- 对 `Part::Mirroring.Normal` 和 `Part::ProjectOnSurface.Direction` 分别执行 `before -> [0.25,-0.5,1.5] -> recompute -> [0,0,1] -> recompute`,两个宿主的属性值均真实变异并精确恢复。
- Mirroring 的 BREP SHA-256 由 `ba656082...` 变为 `78c098a6...` 后恢复ProjectOnSurface 由 `ba524197...` 变为 `3c78808d...` 后恢复;两者的 bounds、拓扑数、面积、体积和完整 Shape 快照均回到初值,不是仅比较方向数值。
- 两个宿主状态序列均为 `Valid -> Touched -> Valid -> Touched -> Valid`Mirroring setter 后 `MustExecute=true`ProjectOnSurface 延续原生 `MustExecute=false`,重算后均回到 Up-to-date/Valid。
- 属性 TypeId、空 status/editor mode、对象集和有效 Solid/Compound 拓扑全程不变;`probe/check:freecad-property-direction-mutation` 与 `git diff --check` 均通过D 阶段机器证据已加入连续账本。
### `PROP-app-propertydirection-E`
#### 执行过程与完成证据
- 将 `App::PropertyDirection` 加入 Facade 原生可编辑类型并复用 `VectorValue` 的三轴有限数值模型、深拷贝和事务路径;公开 setter 接受非单位有限向量及原生属性层允许的零向量NaN、数组和缺分量对象在事件与版本变更前原子拒绝。
- FCStd writer 保留外层 `App::PropertyDirection` TypeId内层严格写为 `<PropertyVector valueX="..." valueY="..." valueZ="..."/>`decoder 只接受该原生 payload伪装成 String 的 JSON 向量保持 fail-closed。
- `Part::Mirroring.Normal` 与 `Part::ProjectOnSurface.Direction` 加入静态原生宿主清册,写出时不携带动态 `group/doc/attr` fallback两个对象 TypeId 进入 recognized 范围,结构化 inspector 可恢复完整非单位方向。
- 生产 `PropertyEditor` 复用三轴数值编辑器,所有提交继续经过公开 Facade没有增加 UI 到内核或 FCStd 的旁路,也没有在 UI 层擅自归一化方向。
- 聚焦测试锁定深拷贝、事件/版本、零向量、非法值零污染、两个宿主的原生 XML 和严格 decoder`test:freecad-property-direction-facade`、完整 `test:facade` 199 项、Color/ColorList 相邻回归、`test:fcstd-roundtrip`、生产 `build` 与 `git diff --check` 均通过,构建仅保留既有 OCCT chunk 体积警告。
### `PROP-app-propertydirection-F`
#### 执行过程与完成证据
- 通过公开 Facade 将 `Part::Mirroring.Normal` 从 `{x:0,y:0,z:1}` 改为 `{x:0.25,y:-0.5,z:1.5}`;同一 transaction ID 内只产生 `property.before-change -> property.changed -> transaction.committed`,文档版本 `1 -> 2`、dirty 为真且宿主进入 touched。
- setter、公开对象快照和 history 均保持向量深拷贝undo 精确恢复初值/版本 1redo 返回非单位目标值/版本 2历史栈可用性按预期切换。
- redo 后依次注入旧版本写入、预取消 signal、Infinity 分量和 immutable Direction 写入;四项均在提交前 fail-closed文档 JSON、属性事务事件数及 undo/redo 可用性完全不变。
- Direction 属性事务不分配 Shape前后 `shapeCount`、`kernelReferenceCount` 和 `releasedShapeCount` 完全一致,并显式 dispose 项目持久化边界。
- `test:freecad-property-direction-transaction` 与 E 阶段 focused test 均通过F 阶段证据已加入连续账本。
### `PROP-app-propertydirection-G`
#### 执行过程与完成证据
- 新增受限的 `rewriteFcstdDirectionProperty` 及 Facade `project.fcstd.rewriteDirection`:先验证对象、属性、`App::PropertyDirection` TypeId、唯一 `PropertyVector` payload、三轴有限目标值和预期旧值再结构化修改 valueX/Y/Z 并标记宿主 touched写后重新 inspect/decode 闭环确认。
- 真实链路由 FreeCAD 1.1.1 创建 `Part::Box + Part::Mirroring`、初始 Normal `{x:0,y:0,z:1}`,经 Web 改成 `{x:0.25,y:-0.5,z:1.5}`,随后 FreeCAD reopen/recompute、saveAs/reopen两次原生方向回读均精确保持目标值。
- 目标 Direction 令镜像 Solid 的 bounds 与 BREP 确实变化,同时保持 1 solid/6 faces/12 edges/8 vertices、area 52、volume 24。首次真实检查发现重开重算 BREP hash `78c098a6...` 在 FreeCAD 保存再开后变为 `d2f2dec7...`,未把报告伪写为通过。
- 第二次独立 verify/saveAs/reopen 精确复现相同 `78c098a6... -> d2f2dec7...` 演进方向、bounds、拓扑、质量属性和 validity 在四个快照中一致,故按主文档登记为 `native-allowed-evolution / brep-serialization`,结构漂移与未知语义漂移均为零。
- Web 编辑前后目标属性之外的 inspection 语义一致,`Document.xml` 外 3 个归档条目逐字节保持对象集、TypeId、status/editor mode 均稳定;`probe/check:freecad-property-direction-roundtrip`、E/F 聚焦测试与 `git diff --check` 均通过。
### `PROP-app-propertyfile-E`
#### 执行过程与完成证据
- 接续时机器队列唯一活动任务为 `PROP-app-propertyfile-E`A-D 的原生清册、成功、失败和变异 checker 全部通过,锁定 `App::PropertyFile` 是继承 `PropertyString` 的外部文件路径语义,宿主绝对路径不能直接写入浏览器项目。
- Facade 将 `App::PropertyFile` 纳入原生可编辑属性类型,公开 setter 只接受空值或最长 4096 字符的安全项目相对路径绝对路径、盘符、URL scheme、反斜杠、NUL、空路径段和 `.`/`..` 路径段均在事务事件和文档版本变化前 fail-closed。
- FCStd writer 保持 FreeCAD 原生 `<Property name="..." type="App::PropertyFile"><String value="..."/></Property>` 结构;`Mesh::Import.FileName` 作为静态原生属性写出,不携带动态属性 fallback。decoder 只接受 `String` payload并拒绝宿主绝对路径和伪造元素类型。
- 生产 `PropertyEditor` 的普通文本输入仍只调用 `facade.app.document.setProperty()`,没有 UI 到文档或 FCStd 的旁路;`createProductionFacade` 与聚焦测试使用同一 Facade 核心,能力边界是显式项目资源引用代理,不伪装成宿主文件系统访问。
- 首次 focused test 发现 `decodeFcstdPropertyValue()` 的 PropertyFile `try/catch` 分支缺少闭合花括号,已修复语法后重跑。`test:freecad-property-file-facade` 2/2、生产 `build`、四个 A-D checker 和 `git diff --check` 均通过;构建仅保留既有 OCCT chunk 体积警告。
### `PROP-app-propertyfile-F`
#### 执行过程与完成证据
- 新增独立 PropertyFile 事务夹具,普通与 `Immutable` 两个 `Mesh::Import.FileName` 属性均通过公开 Facade 操作;一次成功写入只产生同一 transaction ID 的 `property.before-change -> property.changed -> transaction.committed`,版本 `1 -> 2`、dirty 和 touched 状态正确。
- undo 精确恢复 `mesh-data/cube.stl` 与版本 1redo 恢复 `project-files/updated.stl` 与版本 2历史栈可用性按预期切换。
- redo 后依次注入旧版本写入、预取消 signal、`..` 目录穿越、超过 4096 字符的引用和 Immutable 属性写入;五项均在提交前 fail-closed文档 JSON、属性事务事件数和 undo/redo 状态完全不变。
- PropertyFile 事务不分配 Shape前后 `shapeCount`、`kernelReferenceCount` 和 `releasedShapeCount` 完全一致,并显式 dispose 项目持久化边界。
- `test:freecad-property-file-transaction` 1/1、E 阶段 focused test 2/2 与 `git diff --check` 均通过F 阶段证据已加入连续账本。
### `PROP-app-propertyfile-G`
#### 执行过程与完成证据
- 新增受限 `rewriteFcstdFileProperty` 并经公开 Facade `project.fcstd.rewriteFile` 暴露;入口只接受唯一 `App::PropertyFile/String` payload、安全项目相对路径和可选旧值前置条件结构化修改目标 XML、标记宿主 touched并逐项复制其他归档条目。
- focused test 锁定成功直改、旧值不匹配和宿主绝对路径拒绝;一次测试失败仅因 XML 属性顺序断言过窄,改为无序属性匹配后通过,未改动实现语义。
- 真实 FreeCAD 链路创建 `Mesh::Import.FileName = .cache/freecad/FreeCAD/data/tests/mesh.obj`Web 改为 `.cache/freecad/property-file-roundtrip/alternate.obj`FreeCAD 再开、重算、另存并重开;三阶段路径值均与预期一致。
- 外部资源没有伪装为 FCStd 内嵌数据:初始 OBJ 哈希对应 12 facets/8 points、bounds `[-5,-5,-5,5,5,5]`,目标 OBJ 哈希对应 1 facet/3 points、bounds `[0,0,0,4,3,0]`;目标 Mesh 在原生 resave 后完全稳定,证明 FreeCAD 实际消费了新引用。
- Web 编辑前后目标属性之外的 inspection 语义一致,`Document.xml` 外原生归档条目逐字节保持对象集、TypeId、status/editor mode、无 Shape/有 Mesh 边界均稳定,`zeroUnknownDrift=true`。
- `probe/check:freecad-property-file-roundtrip`、E/F focused 测试、生产 `build`、JSON 校验与 `git diff --check` 均通过;构建仅保留既有 OCCT chunk 体积警告G 阶段证据已加入连续账本。
### `PROP-app-propertyfile-H`
#### 执行过程与完成证据
- 新增独立真实 Chrome `PropertyFile` harness直接挂载生产 `PropertyEditor` 和 `createProductionFacade`;页面在 cross-origin isolation 下启动实际 `bitbybit-persistence` Worker没有从 DOM 外直接修改文档。
- 真实文本输入将 `FileName` 从 `project-files/initial.obj` 改为 `project-files/chrome-updated.obj`;文档版本 `1 -> 2`、dirty 为真、宿主进入 touchedUI 没有错误,输入类型和 aria label 分别为 `text`、`File name`。
- SQLite OPFS save/load、version 2 checkpoint 和 recovery integrity `ok` 均恢复目标字符串与 `App::PropertyFile` TypeId浏览器内 FCStd metadata 固定为原生 `String` 元素和相同项目相对路径。
- 63 bytes OBJ 资源通过项目资源 API put/get/release释放后读取为 null独立 OPFS marker 创建并删除成功。Worker 请求覆盖 initialize/save/load/checkpoint/recovery/resource/dispose最终 persistence Worker 已 terminate。
- 最终 `shapeCount=0`、`kernelReferenceCount=0``test/check:chrome-property-file`、E/F focused、G checker、生产 `build`、JSON 校验与 `git diff --check` 均通过H 阶段机器证据已加入连续账本。
### `PROP-app-propertyfile-I`
#### 执行过程与完成证据
- 新增 PropertyFile 独立 promotion 生成器/checker逐项核对 A-H 连续账本、16 条可写原生宿主、项目相对路径值模型、`String` FCStd payload、真实 FreeCAD 往返与 Chrome OPFS/Worker 释放证据。
- `App::PropertyFile` 的 16 条记录从 `opaque-fcstd-proxy` 提升为 `native-editable-codec`Facade 边界固定为最长 4096 字符的安全项目相对路径宿主绝对路径、URL scheme、目录穿越和非法分隔符仍 fail-closed外部资源字节不伪装成 FCStd 内嵌数据。
- 全局 Property 分区同步为 `29 / 4341 native-editable`、`5 / 683 specialized`、`51 / 486 opaque`native codec 总记录为 `5024`exact blocker 更新为 `51 runtime property types and 486 records remain opaque-only`,系统 exact 保持 false`EX-DOC-01` 继续 in-progress。
- 主执行计划、当前工作文档、exact parity blocker 以及既有 Acceleration/Area/BoolList/Color/ColorList/Direction promotion 报告已同步到同一全局快照,未携带过期分区数字。
- `generate/check:freecad-property-file-promotion`、`check:freecad-native-property-semantics` 及 Property status oracle 通过I 阶段证据已追加到连续账本,下一步重建活动队列并直接接领 `PROP-app-propertyfileincluded-A`。
### `PROP-app-propertyfileincluded-A`
#### 执行过程与完成证据
- PropertyFile I 登记后活动队列重建为 `550 completed / 1 in-progress / 1205 pending`,唯一队首切换到 `PROP-app-propertyfileincluded-A`并直接接领。
- 从锁定 FreeCAD 1.1.1 运行时清册确认 20 条 `App::PropertyFileIncluded` 记录、15 个宿主类型20/20 可实例化,状态分区为 11 条空状态、8 条 `ReadOnly`、1 条 `PropOutput`8 条默认为空12 条已有文档 transient 副本。
- 源码锁定该类型不是普通路径字符串setter 要求源文件存在,将外部文件复制到文档 transient 目录,或将可写 transient 文件重命名后接管并将目标设为只读替换、同名冲突、Copy/Paste 与 Undo/Redo 都维护每属性文件所有权。
- FCStd 普通归档使用 `<FileIncluded file="..."/>` 并将原始字节作为独立 ZIP entryforce-XML 模式使用 `data` 属性内嵌二进制流;重开后属性值是运行时 transient 路径,不是可移植语义值。浏览器边界因此必须保存项目资源标识与字节,不得暴露或持久化宿主路径。
- 6 条 App/VRML/Image/Robot/Sketcher 记录为直接资源14 条 TechDraw 记录分别从 `FileGeomPattern/FileHatchPattern/FilePattern/HatchPattern/Template/SymbolFile/ImageFile` 经宿主 `onChanged` 复制字节,派生关系已逐项进入机器清册。
- `generate/check:freecad-property-fileincluded-inventory`、JSON 解析和 `git diff --check` 通过A 阶段仍保持 `opaque-fcstd-proxy`,真实 setter、字节哈希、同名冲突和宿主派生成功边界留给 B。
### `PROP-app-propertyfileincluded-B`
#### 执行过程与完成证据
- 在 `App::DocumentObjectFileIncluded.File` 上真实验证 UTF-8 字符串路径、bytes 路径、`(sourcePath, archiveName)` 改名、打开的 IO 文件和 `{filename,filter}` 字典五类入口;所有输入均复制到文档 transient 目录,目标字节 SHA-256 与源文件一致且写权限位为 0。
- 已有值后设置空字符串是原生成功 no-op路径、字节和状态不变两个属性同时请求 `collision.bin` 时第二个稳定改名为 `collision1.bin`,两份资源路径和字节哈希均不同,没有覆盖。
- 对清册中 20 条宿主属性分别注入匹配的 BIN/VRML/PNG/Robot CSV/SKF/PAT/SVG 真实资源20/20 都返回 transient 只读文件、20/20 字节哈希精确一致、20/20 对象集不变且重算后为 `Up-to-date / Valid`。
- 8 条 `ReadOnly` 记录的 Python setter 仍按 FreeCAD 原生语义写入,但 editor mode 保持 `ReadOnly`;普通属性写入后进入 Touched唯一 `PropOutput` 的 `DrawSVGTemplate.PageResult` 按原生语义抑制 touch`recompute()` 返回 false 且宿主保持 Valid。
- 唯一带 Shape 的 `Sketcher::SketchObjectSF` 在资源写入前后均为空 Shape边数/面数/点数为 0其他 19 条明确记录 Shape 不适用,未用伪几何补足成功证据。
- `probe/check:freecad-property-fileincluded-success`、A checker、JSON 解析和 `git diff --check` 均通过B 阶段机器证据已追加到连续账本。
### `PROP-app-propertyfileincluded-C`
#### 执行过程与完成证据
- 缺失源文件、错误标量类型、错误 tuple 长度、tuple 文件名类型、字典 filename 类型和当前 transient 路径重复设置共 6 类输入分别稳定抛出 `OSError/TypeError`;每项都保持旧路径、字节 SHA-256、只读权限和对象集。
- 首次探针发现目录路径不被原生 setter 拒绝FreeCAD 在无异常情况下先删除旧 transient 文件,随后将属性留为指向目录的非文件值。该行为已单独分类为 `accepted non-atomic risk`,并验证可通过合法文件重建有效只读副本;后续 Facade 必须预先原子拒绝目录。
- 仅含 `filter` 的字典被接受为值 no-op文件与对象集不变。editor `ReadOnly` 不禁止 Python setter仍可生成新的只读 transient 副本;追加 `Immutable` 后精确拒绝并报 `Object attribute 'File' is read-only`,解除后 status 恢复为空。
- 首次事务探针因未开启 `UndoMode=1` 而没有形成 pending transaction该次报告保持失败并未伪写。补齐原生前置后重跑编辑使用不同字节 hashabort 后恢复旧路径与 hash新 `transaction-write.bin` 副本已删除pending/active transaction 归零,对象集不变。
- setter 是同步边界且没有 native cancel hook取消语义明确由活动 Document transaction abort 承担。`probe/check:freecad-property-fileincluded-failure`、B/A checker、JSON 解析和 `git diff --check` 均通过C 阶段已入账。
### `PROP-app-propertyfileincluded-D`
#### 执行过程与完成证据
- 对清册 20 条宿主属性分别执行 `before -> edited -> recompute -> restored -> recompute`,每个 case 都在同一归档名上用两份不同 BIN/VRML/PNG/Robot CSV/SKF/PAT/SVG 字节替换,排除仅路径改名的假变异。
- 20/20 的 edited SHA-256 与 before 不同20/20 的 restored SHA-256 精确返回 before每个 case 的 transient 路径和 basename 三阶段不变,文件始终存在、位于文档 transient 目录且写权限位为 0。
- 19 条非 `PropOutput` 记录的状态序列为 `Valid -> Touched -> Valid -> Touched -> Valid`8 条 `ReadOnly` 仍保持原 editor mode。`DrawSVGTemplate.PageResult` 在两次替换中都保持 `Up-to-date / Valid`,两次 recompute 均返回 false锁定 `PropOutput` touch 抑制。
- 20/20 对象集全程不变;`Sketcher::SketchObjectSF` 的唯一 Shape 边界在 before/edited/restored 都为 Null Shape 且 0 edges/faces/vertices其他宿主保持 Shape 不适用。
- `probe/check:freecad-property-fileincluded-mutation`、A/B/C focused checker 和 `git diff --check` 均通过D 阶段机器证据已追加到连续账本。
### `PROP-app-propertyfileincluded-E`
#### 执行过程与完成证据
- 将 `App::PropertyFileIncluded` 接入 typed `IncludedFileValue` 与可编辑 Facade可移植值只保存安全归档基名、SHA-256 资源标识、字节数和 MIME权威字节始终由项目资源库持有没有暴露宿主 transient 路径。
- 新增专用 `setIncludedFile` 边界:先深拷贝并存储 `Uint8Array`,再提交结构化属性;同名资源按 FreeCAD 规则分配 `name1.ext`,失败时释放新资源,目录穿越、分隔符、控制字符、非 SHA-256 标识和过大 payload 均在事件及版本变更前 fail-closed。
- FCStd writer 使用原生 `<FileIncluded file="..."/>` 并将字节写为独立 ZIP entryinspector 对缺失资源、非安全基名和冲突字节拒绝打开,`extractIncludedFiles/storeIncludedFiles` 在导入后重建项目资源标识,空值保持 `<FileIncluded file=""/>`。
- 生产 `PropertyEditor` 新增文件选择器,读取浏览器 `File` 字节后仅通过 Facade 提交20 条原生宿主的 XML、资源字节、解析、提取、存储、空值和缺失资源边界已由 focused 测试锁定。
- `test:freecad-property-fileincluded-facade`、A-D focused checker 和 `git diff --check` 均通过E 阶段证据已加入连续账本。
### `PROP-app-propertyfileincluded-F`
#### 执行过程与完成证据
- 新增独立 PropertyFileIncluded 事务夹具,从空资源值经公开 `setIncludedFile` 提交 5 bytes 二进制负载;唯一 transaction ID 下仅产生 `property.before-change -> property.changed -> transaction.committed`,版本 `1 -> 2`、dirty 与 touched 状态正确。
- 调用方 `Uint8Array` 在提交后变异不会污染已存字节undo 精确恢复 null/版本 1redo 恢复结构化资源值/版本 2且权威字节在两侧都可读没有将历史状态与资源生命周期割裂。
- 预检 stale、预取消和 Immutable 写入全部在资源存储前拒绝;资源写入后取消和 MIME 校验失败均回收已存 hash文档、事务事件和历史栈零污染。
- 两个同版本并发提交稳定地只允许一个胜者进入版本 3败者以 stale 拒绝并立即删除其资源;胜者资源仍能完成第二轮 undo/redo。PropertyFileIncluded 事务全程不分配几何 Shape。
- 首次完整 Facade 回归发现 E 阶段将只读 FCStd 的 GuiDocument 和 resource 覆盖错误合并为泛化诊断;已恢复 GuiDocument 既有精确错误并为 opaque/resource 保留独立 fail-closed 分支。`test:freecad-property-fileincluded-transaction`、E 阶段 focused test、A-D checker、完整 `test:facade` 199 项、生产 `build`、JSON 校验与 `git diff --check` 均通过。
### `PROP-app-propertyfileincluded-G`
#### 执行过程与完成证据
- 新增受限 `rewriteFcstdIncludedFileProperty` 并经公开 Facade `project.fcstd.rewriteIncludedFile` 暴露;目标与可选旧值均先按 SHA-256 从项目资源库取回权威字节,再校验唯一对象/属性/`FileIncluded` payload、字节数和逐字节旧值前置条件。
- 直改严格保持原生 `file="payload.bin"` 归档身份,只替换对应 ZIP entry 并标记宿主 touched改名、缺失项目资源、元数据/字节不匹配和旧值不符全部 fail-closed。写后重新 inspect 闭环核对路径、字节数和内容摘要。
- 真实 FreeCAD 1.1.1 链路创建 `App::DocumentObjectFileIncluded.File`,内嵌 13 bytes `payload.bin`Web 经项目资源身份替换为 20 bytes 二进制FreeCAD 随后 reopen/recompute/saveAs/reopen 的 transient 文件 SHA-256 两次均精确为 `09f4e485...`。
- 原生重开和再保存后的资源基名始终为 `payload.bin`,字节始终为 20文件位于 Document transient 目录且写权限位为 0对象集、TypeId、property status/editor mode、Up-to-date/Valid 和无 Shape 边界稳定。
- 该最小原生归档精确只含 `Document.xml + payload.bin`,所以排除目标后 opaque 条目数锁定为 0而非伪造“至少 1 条”。`probe/check:freecad-property-fileincluded-roundtrip`、E/F focused test、完整 `test:facade` 199 项、生产 `build`、JSON 校验与 `git diff --check` 均通过,`zeroUnknownDrift=true`。
### `PROP-app-propertyfileincluded-H`
#### 执行过程与完成证据
- 新增独立真实 Chrome `PropertyFileIncluded` harness直接挂载生产 `PropertyEditor` 和 `createProductionFacade`;通过 `DataTransfer + File` 驱动真实 `<input type="file">` change 事件,没有从 DOM 外直改文档。
- UI 将空 `App::DocumentObjectFileIncluded.File` 提交为 16 bytes `chrome-resource.bin`;输入类型/标签为 `file / Embedded file`,显示从 `Empty` 变为目标归档名,成功通知只出现一次,文档版本 `1 -> 2`、dirty 和 touched 正确。
- SQLite OPFS save/load、version 2 checkpoint 和 recovery integrity `ok` 均恢复完整 `IncludedFileValue` 与 `App::PropertyFileIncluded` TypeId浏览器内 FCStd 检查确认 `FileIncluded file="chrome-resource.bin"`、16 bytes 内嵌 entry 与目标字节逐项一致。
- 文档资源按 SHA-256 回读为同一 16 bytes独立 48 bytes 资源的 put/get/release 后读取为 nullOPFS marker 已创建并删除。Worker 请求覆盖 initialize/save/load/checkpoint/recovery/resource/dispose最终 persistence Worker 已 terminate。
- 最终 `shapeCount=0`、`kernelReferenceCount=0``test/check:chrome-property-fileincluded`、E/F focused test、G checker、生产 `build`、JSON 校验与 `git diff --check` 均通过H 阶段机器证据已加入连续账本。