1890 lines
173 KiB
Markdown
1890 lines
173 KiB
Markdown
# CADFS 全量能力闭环目标
|
||
|
||
## 目标
|
||
|
||
将 CADFS FeatureScript 的完整建模历史通用地转换为 CDSL,再由 CDSL engine
|
||
重建 STEP。目标不是让少数代表模型通过,也不是为某个样本拟合最终 STEP;目标是
|
||
补齐当前 CADFS 全量语料实际出现的所有建模语义,使每个可比较模型都能以完整
|
||
feature history 生成工程相似的 STEP。
|
||
|
||
工程验收使用 `comparison.json.rp.passed == true`:双向 surface max/p99 与 bbox
|
||
不超过 `0.02 mm`、体积和面积相对误差不超过 `0.005`、实体数相等。`strict` 的
|
||
`0.01 mm` / `1e-5` 阈值保留为高精度诊断,不能因严格失败而隐藏已工程相似的模型,
|
||
也不能因生成 STEP 就把几何错误的模型标为成功。
|
||
|
||
本文件的范围是
|
||
`output-history/20260907-235209` 的 9,347 条历史快照。后续重新扫描全量数据时,
|
||
必须以新快照的真实样本数和能力矩阵更新本文件及本地能力台账。
|
||
|
||
## 不可妥协的实现原则
|
||
|
||
这是绘图引擎和通用 converter,不是样本修复脚本。每项能力必须由 FeatureScript
|
||
语义、CDSL contract 和内核拓扑共同定义,并对同类输入普遍成立。
|
||
|
||
- 禁止以 `sample_id`、文件路径、特定尺寸、特定坐标、特定 feature ID 或 gold STEP
|
||
测量值驱动行为。不得为让单条样本通过而植入分支、偏移量、默认 profile 或 selector。
|
||
- 不得读取原 STEP 来补齐 FeatureScript 未提供的参数、反推 CDSL 尺寸或决定建模策略。
|
||
原 STEP 只用于最终比较、诊断和已验证的 source exception 证据。
|
||
- 不得把未知语义降级成任意盲拉伸、默认 union、任意当前 body、任意相近 face/edge
|
||
或静默跳过。无法唯一表达或绑定时必须保留可执行前缀、输出明确诊断,并记录能力
|
||
缺口。
|
||
- 优先扩展显式 CDSL schema、typed runtime state、body graph 和 kernel-level topology
|
||
delta;不得以 parsing/lowering 层的临时重写替代应由 runtime/adapter 承担的几何语义。
|
||
- 允许针对几何类别采用受限算法,但适用前提必须由通用的、可验证的几何条件表达,
|
||
并有正向、反向和边界测试。条件不满足时必须拒绝并诊断,不得猜测。
|
||
- 若已有实现反复依赖样本化补丁、不能表达已出现的通用语义或受内核 API 结构性限制,
|
||
必须评估替代方案,不得沿错误方向继续累积补丁。替换需要可复现根因、成熟实现或最小
|
||
原型的对照、contract/迁移影响评估和回归计划;单个样本或偶发内核失败不足以触发重写。
|
||
- 每项 FeatureScript operation、query 或枚举语义的 lowering,必须对照源文件声明的
|
||
FeatureScript/standard library 版本对应的官方 API/query contract,并在能力矩阵记录
|
||
文档或标准库来源、已采用的语义与未覆盖边界。当前官网或其它版本的文档不得替代源版本
|
||
的默认值和行为。文档只用于确定源语义,不能替代 CDSL provenance、OCC builder history
|
||
或 selector 的唯一性证据。
|
||
- 每项能力必须同时具备:FeatureScript lowering、CDSL schema/semantic validation、
|
||
runtime/adapter 实现、selector/body 语义、单元测试、多个语料回归和比较工件;缺少
|
||
任一层只能标记为“部分完成”。
|
||
|
||
## 全量基线
|
||
|
||
历史快照的主要操作和当前能力缺口如下。数量是出现次数或受该缺口阻塞的模型数,
|
||
只用于排序,不代表一个操作只有一种语义。
|
||
|
||
| FeatureScript 操作 | 历史出现次数 | 当前主要缺口数 |
|
||
| --- | ---: | ---: |
|
||
| `newSketch` | 20,857 | 草图/工作平面诊断 7,043 |
|
||
| `extrude` | 18,168 | 3,600 |
|
||
| `fillet` | 5,210 | 1,904 |
|
||
| `revolve` | 2,087 | 662 |
|
||
| `chamfer` | 1,818 | 588 |
|
||
| `cPlane` | 1,620 | 168 |
|
||
| `hole` | 1,203 | 582 |
|
||
| `shell` | 729 | 696 |
|
||
| `mirror` | 483 | 241 |
|
||
| `transform` | 468 | 252 |
|
||
| `sweep` | 378 | 326 |
|
||
| `loft` | 377 | 107 |
|
||
| `circularPattern` | 252 | 139 |
|
||
| `booleanBodies` | 228 | 187 |
|
||
|
||
已发现的派生 profile / topology 语义必须单独覆盖,不能合并为笼统的 `extrude`
|
||
或 `loft` 支持:
|
||
|
||
| 语义 | 历史缺口数 |
|
||
| --- | ---: |
|
||
| `extrude_profile_topology:intersect` | 383 |
|
||
| `extrude_profile_topology:cap_face` | 201 |
|
||
| `extrude_profile_topology:cap_edge` | 134 |
|
||
| `extrude_profile_topology:swept_face` | 99 |
|
||
| `extrude_extent:up_to_surface` | 100 |
|
||
| `loft_profile_topology:cap_face` | 30 |
|
||
| `extrude_profile_topology:offset_face` | 18 |
|
||
| `extrude_profile_topology:swept_edge` | 16 |
|
||
| `loft_profile_topology:swept_face` | 9 |
|
||
| `extrude_extent:up_to_vertex` | 7 |
|
||
| `extrude_surface_or_mixed` | 4 |
|
||
| `extrude_extent:up_to_body` | 2 |
|
||
| `extrude_profile_topology:mid_cap_edge` | 2 |
|
||
| `loft_profile_topology:cap_edge` / `cap_vertex` | 1 / 1 |
|
||
|
||
`extrude_surface_or_mixed` 的既有 4 条计数只描述当时的混合/闭合 wire
|
||
诊断,不是纯曲面全量覆盖计数。当前已额外实现一个受限的纯曲面 tuple:
|
||
`ToolBodyType.SURFACE` 的同一 source sketch 中明确原始非 construction 的一个或多个 `line`,或
|
||
一个或多个 `circle`,blind/symmetric extent,且 operation 为缺省或
|
||
`NewBodyOperationType.ADD`。line 直接扫为 ruled shell;circle 保持既有独立圆柱 shell
|
||
语义。多 line 时每个连通分量必须是由有限、互异的原始 line 构成的非分叉开链;可存在多个
|
||
断开的开链,并分别输出 shell。普通开放 contour 不会因此获准,只有 solver 输出的显式
|
||
source-wire witness 才能进入该 surface contract;都不创建 active solid/body-member 或 CAP/SWEPT
|
||
selector lineage。arc/ellipse/spline、construction、跨 sketch、重复/退化/闭合/分叉 line set、query
|
||
filters/combinators、REMOVE、surface-solid boolean/trim、pattern 和后续 selector/body lifecycle 仍为未完成项。
|
||
|
||
历史报告还记录了 1,335 个未支持操作诊断。当前已知的 P2 操作包括 `draft`、
|
||
`thicken`、`split`、`moveFace`、`deleteFace`、`replaceFace`、完整 `transform`、
|
||
`derive`、`import` 和 `bend_add`。重新扫描时必须从诊断原文生成完整操作清单;
|
||
未列出的新操作不能被静默归入已有能力。
|
||
|
||
## 覆盖模型
|
||
|
||
每一项能力的回归选择必须覆盖下面五个维度,而不是只覆盖操作名称:
|
||
|
||
1. 操作和参数:operation mode、实体/曲面模式、extent、方向、offset、draft、
|
||
角度、数量、终止条件和 result mode。
|
||
2. 几何输入:直线、圆弧、圆、椭圆、B-spline、开口/闭合 wire、多 region、孔洞、
|
||
退化和自交拒绝路径。
|
||
3. 拓扑来源:原草图、`CAP_FACE`、`CAP_EDGE`、`CAP_VERTEX`、`SWEPT_FACE`、`SWEPT_EDGE`、
|
||
`OFFSET_FACE`、`INTERSECT`、`MID_CAP_EDGE`、`COPY` 和 boolean 后继。
|
||
4. body 生命周期:`NEW`、`ADD`、`REMOVE`、`INTERSECT`、keep tools、copy、
|
||
transform、delete、mirror、linear/circular/nested pattern、多实体输出。
|
||
5. 比较状态:strict、RP、实际几何拒绝、conversion defer、semantic validation failure、
|
||
runtime ineligible、rebuild failure、comparison timeout 与 source exception。
|
||
|
||
转换阶段必须将 source parse、lowering 和 CDSL semantic validation 分别分类。语义无效的
|
||
CDSL 不是 parse failure,也不得成为 rebuild 输入;系统应保留 history、诊断和 rejected
|
||
candidate 工件。未证明的 provenance selector 必须在 lowering 阶段以 capability diagnostic
|
||
defer,不能借 stable ID、几何、current body 或最终 STEP 形成“待 runtime 决定”的引用。
|
||
|
||
维护三个固定层级的回归集:
|
||
|
||
| 层级 | 用途 | 通过条件 |
|
||
| --- | --- | --- |
|
||
| 原子语义矩阵 | 每个 operation/参数/拓扑/body tuple 的最小合成模型 | CDSL contract、可执行性和精确几何断言。 |
|
||
| 核心 17 | 跨能力的稳定烟雾回归 | 完整 history、工程相似或有归因明确的 source/comparison 证据。 |
|
||
| 扩展 100+ | 每个已出现 tuple 至少多个真实语料样本 | RP 工程相似率、失败诊断和能力覆盖均可追溯。 |
|
||
| 全量 9,347 | 完整发布前的能力验证 | 每条都有完整分类;支持的完整 history 均工程相似,剩余项仅能是有证据的 source exception 或未实现 capability。 |
|
||
|
||
扩展集必须从能力矩阵自动选择并保留历史失败样本。修复能力后应扩大相应 tuple 的
|
||
样本数;不得因当前失败而从 manifest 中移除样本,也不得以新的贪心选择替换已有
|
||
反例。
|
||
|
||
## 实施路线
|
||
|
||
### Selector 精度与覆盖目标(2026-09-10 起)
|
||
|
||
本节是 CADFS `select` 能力的实施目标。它补充本文件的全量路线;
|
||
`FEATURESCRIPT_QUERY_CAPABILITY_MATRIX.md` 仍只记录当前已经可以执行的
|
||
versioned allow-list,路线中的项目在具备完整证据前不得加入该矩阵。
|
||
|
||
目标不是让 OCC 在最终形状中找一张“看起来像”的面,而是把 FeatureScript 查询
|
||
解释为一个有来源、集合基数和 body 生命周期约束的请求:
|
||
|
||
```text
|
||
FeatureScript query AST + exact source/library version
|
||
-> CDSL selector_intent (set expression, source anchors, policy)
|
||
-> one ordered OCC replay
|
||
-> per-operation topology delta + output roles + body-member graph
|
||
-> resolver proves active result set, or emits one attributable diagnostic
|
||
```
|
||
|
||
最终 STEP 只能用于离线比较或 candidate-recovery 诊断;stable ID、几何相似度、
|
||
current aggregate body 和最终 STEP 都不得成为 provenance selector 的生产回退。
|
||
`all_fragments` 必须返回完整结果集,不能把集合拆成若干任意的 single-select 决策。
|
||
|
||
#### 目标状态
|
||
|
||
完成后的 selector 系统应具有下列性质:
|
||
|
||
1. **查询是集合表达式。** CDSL 保留可递归解释的 query AST,而不只保留
|
||
`makeQuery` 的一个 owner。它应支持 `qUnion`、`qIntersection`、
|
||
`qSubtraction`、`qAdjacent`、`qOwnerBody`、`qBodyType`、construction filter,
|
||
以及一般 `qCreatedBy`/created/modified/generated 关系。任何 filter 或
|
||
combinator 缺失都必须是 deferred source query,而不是在 lowering 时静默抹去。
|
||
2. **拓扑关系是 operation-wide N:M 图。** 每个 operation 的输入、输出、
|
||
`preserved`、`modified`、`generated`、`deleted`、section 和 output role 都带有
|
||
snapshot/body-member 身份、source/result kind、coverage 和 evidence。resolver
|
||
在完整 relation component 上检查 split、merge、replacement 和 deletion,不能把
|
||
多个 OCC 回调误当一对一 continuation。
|
||
3. **body 是一等 provenance 对象。** `NEW`、ADD、REMOVE、INTERSECT、keep tools、
|
||
copy、transform、delete、mirror 和 pattern instance 都转换为显式 member graph
|
||
转移。一个 selector 的最终结果必须同时是来源证明的后继和 consumer 指定的 active
|
||
member;不能只因它位于导出的 Compound 中而选中。
|
||
4. **output role 可跨已证明后继传播。** `CAP_*`、`SWEPT_*`、`OFFSET_*`、
|
||
`MID_CAP_*`、boolean section 与 sweep/loft/revolve start/end 都以 source
|
||
qualification、target kind 和 cardinality policy 解释。允许跨 feature 的前提是
|
||
每一段 relation 都完整、proven、且仍落在 active member。
|
||
5. **consumer 接受集合而非单个猜测。** extent、fillet/chamfer、shell、hole、
|
||
transform/pattern 和 reference plane 都声明所需 kind、空集/多集语义、方向与
|
||
body scope。`up_to_surface`、`up_to_next`、`up_to_body`、`up_to_vertex`、双向
|
||
和 offset extent 以真正的 target body 相交或已证明 source reference 计算终止。
|
||
|
||
#### 实施工作包与优先级
|
||
|
||
工作包按依赖关系排序,但同层 family 可并行实现。优先级由全量缺口和可复用性决定,
|
||
不按某一个样本是否能重建决定。
|
||
|
||
| 优先级 | 通用工作包 | 需要新增或修改的 contract | 首批覆盖的 family / consumer | 当前全量影响 |
|
||
| --- | --- | --- | --- | ---: |
|
||
| S0 | Query AST 与集合语义 | versioned `selector_intent.query_expr`;显式 set kind、filter、body scope、empty/multiple policy;lowering 不再只接受 singleton `qUnion` | `qUnion`、`qIntersection`、`qSubtraction`、`qBodyType`、construction filter、`qCreatedBy` | 所有 deferred composed query |
|
||
| S0 | 通用 topology delta 与 relation component | adapter 对每个支持 builder 输出 exact input/final handles;registry 保存 N:M component、cross-kind relation、coverage/status | boolean、extrude/revolve、fillet/chamfer、shell、transform | `INTERSECT`/IMPRINT 383,CAP 335,SWEPT 115 |
|
||
| S1 | CAP/SWEPT/role propagation | `CAP_FACE`、`CAP_EDGE`、`SWEPT_FACE`、`SWEPT_EDGE`、`MID_CAP_*` 的 source anchor、role 和 all-fragments policy | boolean/dress-up 后继、revolve、sweep、loft、transform | CAP_FACE 201,CAP_EDGE 134,SWEPT_FACE 99 |
|
||
| S1 | Body lifecycle 与 COPY provenance | body-member transition graph、instance-qualified source set、active/inactive diagnostic | `SWEPT_BODY`、`qOwnerBody`、booleanBodies、COPY、mirror、circular/nested pattern | booleanBodies 187,transform 252,pattern 139 |
|
||
| S1 | Extent 与 dress-up consumers | set-valued target contract、direction and hit policy、tangent-chain policy | up-to-surface/next/body/vertex、fillet、chamfer、shell、hole host face | up-to-surface 100,up-to-next 49 |
|
||
| S2 | Datum / adjacency / geometry-derived queries | explicit datum versus topology provenance distinction;curve/surface tangent and adjacency contracts | cPlane、revolve axis、sweep path/axis、hole location | cPlane 168 与下游 consumers |
|
||
| S2 | Wider operation producers | complete deltas and output roles for sweep/loft/revolve surface, split, move/delete/replace face, thicken | all selectors produced after those operations | 由下一轮全量 capability scan 计数 |
|
||
|
||
当前进度(2026-09-10):S0 的 source-preservation foundation 已落地:
|
||
`selector_intent.query_expr@1.0` 已将 parser 的 `qUnion` / `qIntersection` /
|
||
`qSubtraction` set 边界、`qAdjacent` / `qOwnerBody` / `qBodyType` /
|
||
construction filter,以及已知和未知 query calls 递归、版本化地写入 CDSL,schema 和
|
||
semantic validation 共同校验其形状和 version。其上已有一个严格受限的可执行 direct set bridge:
|
||
对顶层、直接 `makeQuery` leaves,且每个 leaf 已通过现有 direct-provenance lowering path 时,
|
||
`fillet` / `chamfer` 才可 lower 为一个 `QUERY_SET` parent。它支持
|
||
`qUnion([..])`、`qIntersection([..])` / 双参 `qIntersection(a, b)`,以及双参
|
||
`qSubtraction(a, b)`;该 parent 显式声明 `set_kind`、`active_member` body scope、empty reject 与
|
||
multiple all policy,且每个 child 的 typed expression 必须逐项等于 parent source leaf。
|
||
runtime 仍要求 parent 和每个 child 通过 FeatureScript 1511 / `geometry.fs@1511.0` source gate;
|
||
resolver 递归组合 child 的 complete active records:union 按 source 顺序以 exact record ID 去重,
|
||
intersection 保留第一 operand 的顺序且只取所有 operand 共同的 exact ID,subtraction 保留左
|
||
operand 顺序并移除右 operand 的 exact ID。每个 operand(包括 nested set parent)必须非空且完整
|
||
proven;空集、kind/source-version 不一致、output-role 混用、inactive member 或 partial lineage
|
||
都拒绝并保留可归因 diagnostic;不会使用 stable ID、最终 STEP、current aggregate 或 geometry
|
||
fallback。`QUERY_SET` 不独立授权任何 FeatureScript topology family,所有 leaf 仍逐一经过已有的
|
||
versioned capability gate。
|
||
|
||
当前 corpus 未出现实际 `qIntersection` / `qSubtraction` source call;两者的 FeatureScript 1511
|
||
source semantics、合成 relation algebra 和由 `00000715` 改写的真实 1511 history 变体验证仅证明
|
||
这个窄 bridge,不构成真实语料 family coverage,故不加入 capability matrix。nested union 已在
|
||
lowering、schema、semantic validation 和 resolver 中保留递归 AST,并有合成与 `00000715` 变体
|
||
重建证据;但 nested `qIntersection`/`qSubtraction` 尚无真实语料证据。`qAdjacent`、runtime
|
||
`qBodyType`、construction filter、general `qCreatedBy`,以及 extent/hole/transform/reference-plane
|
||
consumers 仍只有 source-preservation/deferred contract,尚未具备 filter/body-scope active-member
|
||
解释或 producer relation coverage;不得因这一 bridge 加入通用 allow-list。shell 对直接叶子
|
||
`qUnion` 继续使用既有 flat removal-face contract,nested/intersection/subtraction shell set
|
||
仍未开放。当前聚焦验证为 selector provenance 35 项、lowering 117 项、runtime foundation
|
||
140 项(1 项既有 skip);fresh Core-17 与固定 25-sample shard 均保持既有
|
||
strict/RP/rejected/rebuild-failure 分类。
|
||
|
||
`qOwnerBody` 现有一个独立、受限的 `exact_input_owner` bridge:仅在 `UP_TO_BODY` 中,
|
||
FeatureScript 1511 的 `qOwnerBody` 可包裹一个 direct-prism `SWEPT_FACE` 或 immediate
|
||
direct-builder `CAP_FACE`。lowering 必须保留 `filter: owner_body` AST、唯一 typed child、相同
|
||
FeatureScript/library tuple 和 `active_member`/reject-empty/one-result policy;runtime 先按 child
|
||
的既有 provenance contract 解析,只有其恰返回一个 record,且该 record 的 `body_id` 与 active
|
||
aggregate 完全相等并存在唯一同 ID 的 non-transient body record 时才返回 owner。它不从
|
||
`session.body`、producer、geometry、stable/snapshot/binding ID 或 aggregate 猜测 owner;集合、
|
||
multi-solid member、部分/非 active lineage、later lifecycle、non-direct producer 和其它 consumer
|
||
均拒绝并保留 `selector_owner_body_*` diagnostic。合成 `00694309` 变体(以
|
||
`qOwnerBody(SWEPT_FACE)` 取代等价 direct `SWEPT_BODY`)完成重建,但语料尚无 native call;
|
||
因此这是执行边界,不是通用 `qOwnerBody` 或 body-filter 完成项。
|
||
|
||
`COPY@1511` 现有一个独立、受限的 `primary_cut_cap_edge` bridge:只接受紧邻 primary
|
||
`extrude_cut_blind` 的 fillet/chamfer consumer 所使用的 direct
|
||
`COPY(CAP_EDGE)`。lowering 同时保留 outer COPY 的 typed AST、nested CAP_EDGE AST 和同一
|
||
FeatureScript/library tuple;nested edge 必须来自该 cut 的 direct、undrafted blind prism
|
||
source profile。adapter/runtime 只接受两条连续的 complete/proven kernel relation:source
|
||
edge -> transient `extrude.start|end` cap boundary,随后是同 feature `subtract` 的一对一
|
||
continuation 到唯一 active edge。transient tool 从不成为 selectable topology,resolver
|
||
返回 `copy_lineage`,不读取 stable ID、geometry、current body 或 source STEP。`00252195`
|
||
F4 的 selector 已解析至 `body:f_F3:edge:7`;其随后 chamfer 因 OCC feasibility 失败,故
|
||
保留 F3 STEP checkpoint,不能误报为该模型的质量通过。`00113994` 的七个 general COPY
|
||
variants 不满足此 contract,继续以 `selector_query_unsupported` deferred。COPY face/body、
|
||
pattern/transform copy、nested/later lifecycle、draft/two-sided/non-direct tools、多个 relation
|
||
或任何 partial/split/merge history 均不属于这条 bridge,general COPY family 仍未完成。
|
||
|
||
`COPY(FACE)` 现另有一个不共享上述 edge contract 的 `primary_cut_cap_face_workplane` bridge。
|
||
它只接受 1511、紧邻 default primary `extrude_cut_blind` 的 direct undrafted blind tool,以及 outer
|
||
`COPY(FACE)` 同 owner、nested direct `CAP_FACE` 完整 OSD 等于未变 source profile 的工作平面。
|
||
lowering 只保存 outer/nested typed query 和 local sketch data,不复用 CAP static frame;runtime 必须先以
|
||
`extrude.start|end` 得到唯一 transient cap,再以同 owner `subtract` 的唯一 complete/proven continuation
|
||
得到一个 active planar face。只有此后才从该 exact face 的 native UV direction 和 support plane 物化右手
|
||
workplane 并重新解析 local profile;hole 同样从该 runtime face 计算 local locations。没有 geometry、stable/
|
||
snapshot ID、current body 或 source STEP fallback,transient tool 也永远不可选。`00573124` F3--F5(hole)和
|
||
`00951631` F3--F5(blind cut)都以 `copy_lineage` rebuild;fresh strict pipeline
|
||
`/private/tmp/copy-face-attachment-20260913` 的两个完整结果均 strict/RP rejected,故仅为执行证据。
|
||
`00252794` 的 F8 则在 F3 之后已有 F5/F6/F7 body mutations,不满足 immediate active-successor lifecycle,仍以
|
||
`COPY(FACE) workplane requires a dedicated complete/proven runtime face relation` deferred 并保留 F1--F5 prefix。
|
||
`COPY(SWEPT_FACE)` 现另有独立的 `primary_cut_swept_face_workplane` bridge:只接受 1511、同 owner、紧邻 default direct undrafted `extrude_cut_blind` 的一个 original source-profile edge。runtime 仅接受该 edge anchor 到唯一 transient prism side face 的完整/proven relation,再接受同 owner subtract 到唯一 active planar face 的完整/proven continuation;随后才从此 exact face 物化 sketch frame。当前 9,347-history fresh lowering materializes 12 个此类 attachment hosts;这只是 contract-shape 覆盖,不能代表 runtime 或 comparison 通过。`00321940` F3--F5 已完整 rebuild,但 fresh comparison 是 strict/RP rejected;`00171671` F3--F4 完成 attachment lowering 但 F5 的独立 selector 仍 deferred,均仅为 execution/lowering evidence。`00326645` 的相同 source form 因没有唯一 subtract continuation 在 runtime 明确拒绝,证明不能将 source edge、静态 frame 或任何近似面当作 successor。two-sided/IMPRINT/partial/non-direct profile、multiple source edges、non-immediate lifecycle、nonplanar/split/merge/inactive successor、COPY body/pattern/transform、其它版本及 geometry/stable/snapshot/current-body/source STEP fallback 均不属于该 bridge;general COPY family 仍未完成。
|
||
COPY `SWEPT_FACE`/body、pattern/transform、draft/two-sided/non-direct tools、partial/split/merge/nonplanar/
|
||
multi-member relation、oppositeDirection attached hole、其它版本和 non-immediate lifecycle 都不属于此 bridge;
|
||
general COPY family 仍未完成。
|
||
|
||
direct-prism `CAP_*` / `SWEPT_*` source anchor 现按 selector 明示的 producer owner 限定:
|
||
后续 feature 即使用同一 source sketch 再次 materialize 相同 source entity 或 endpoint pair,
|
||
也不是该 producer 的第二个 anchor。resolver 只从该 owner 的 source anchor 出发,再检查
|
||
complete/proven relation 与 active result;缺少 owner 直接产生 `selector_source_unavailable`,
|
||
不会因跨 feature source-label 重复变成 ambiguity 或选择较新的 producer。`00407468` F3 的
|
||
四个 `qUnion(SWEPT_EDGE)` children 因而各自从 F1 anchor 经 F2 的一对一 continuation 解析;
|
||
此规则只修复 direct source-anchor identity,不扩大 generic SWEPT/CAP、boolean/IMPRINT/COPY/
|
||
pattern 或 N:M lineage coverage。fresh `output/swept-edge-producer-anchor-00407468-20260912`
|
||
中 F1--F3 均执行,四个 child 返回 F2 `edge:19/22/25/28`,RP engineering comparison
|
||
通过;strict 仍因面积与体积精度检查失败,不能以此标记 general family 完成。
|
||
|
||
`CAP_EDGE@2491` 现有一个独立的 `symmetric_direct_prism` bridge:只接受紧邻
|
||
fillet/chamfer 的、无 draft、独立 `new_body`、两侧均 blind 且 profile 完整等于 original
|
||
source sketch 的 `extrude_add_two_sided`。executor 为两个 `BRepPrimAPI_MakePrism` 保存
|
||
独立 topology delta;primary extent 的 final `LastShape(source_edge)` 是
|
||
`extrude.end`,reverse extent 的 final `LastShape(source_edge)` 被明确映射为
|
||
`extrude.start`,source-plane `FirstShape` 接缝从不作为 cap 结果。每条 role relation 仍需
|
||
在 fused final snapshot 上以 exact `IsSame` 成立,resolver 只接受 immediate `boundary`,不允许
|
||
continuation、stable ID、geometry、current body 或 STEP fallback。`00049094` F2 的四项
|
||
CAP_EDGE query set 全部解析并使 F1--F8 rebuild;其完整 comparison 为 rejected,不能宣称
|
||
RP/strict。`00404726` 的多区域/IMPRINT profile 不满足完整 direct-profile contract,仍在 F2
|
||
`selector_query_unsupported` 并保留 F1 checkpoint。其它 source/library versions、CUT、draft、
|
||
非 blind、partial/multi-region/IMPRINT、fused、boolean/COPY/pattern 和任何 later lifecycle
|
||
都不在该 bridge 内,general CAP_EDGE family 仍未完成。
|
||
|
||
`CAP_EDGE@1511` 现有一个更窄的 `primary_add_union_continuation` bridge,作为 S1
|
||
body-lifecycle 的局部验证,而不是 general ADD 或 CAP_EDGE 完成项。producer 必须是默认
|
||
ADD/fuse 的 direct、undrafted blind `extrude_add_blind`;旧 active body 和 tool 都必须恰为
|
||
一个 solid,tool 必须具有 complete/proven direct-prism delta 和 source anchors。executor 先把
|
||
tool 登记为 transient prism snapshot,再且仅在 `BRepAlgoAPI_Fuse` 返回 exact topology history
|
||
时登记它到 active union result 的 continuation;tool 本身不能成为可选拓扑。lowering 只对
|
||
1511 `CAP_EDGE` immediate fillet/chamfer 写 `boundary + continuation`,resolver 要求完整的
|
||
`extrude -> union` 一对一链和 active member。`00953397` F7、`00957101` F4 均由
|
||
`kernel_lineage` 解析并在 fresh pipeline 中 RP approximate;`00406939` 的 multi-solid tool
|
||
没有唯一 lifecycle proof,保持 deferred。split/merge、multi-solid、IMPRINT/partial profile、
|
||
missing/partial/fuzzy union、非 CAP_EDGE family、later lifecycle、COPY/pattern 以及 geometry、
|
||
stable-ID、current-body、source STEP fallback 一律不在范围内。这条 bridge 不完成 S1 body graph、
|
||
general ADD 或 general CAP_EDGE。
|
||
|
||
`CAP_FACE@1511` 另有同一 lifecycle 的 `primary_add_shell_union_continuation` bridge,
|
||
但 consumer 严格限定为紧邻 shell 的一个 removal face。producer 仍必须是 default ADD/fuse 的
|
||
direct、undrafted blind `extrude_add_blind`,旧 active body 与 tool 都为单一 solid;tool 只作为
|
||
transient prism snapshot 存在,只有 exact `BRepAlgoAPI_Fuse` history 能把其 cap role 以完整
|
||
proven、一对一 `extrude -> union` relation 交给 active final member。27 个真实 history 的 fresh
|
||
scan 中只有 7 个具备这个 relation;`00074047` F4 与 `00350698` F7 由 `operation_role` 解析后分别
|
||
进入 native shell,再因 OCC shell feasibility 失败,说明 selector 成功不等于模型质量成功。
|
||
`00293014` 的一对多 output role 保持 `selector_output_role_ambiguous`,`00590599` multi-solid ADD
|
||
保持 `selector_query_unsupported`。它不开放 extent、dress-up、多 removal、split/merge、
|
||
multi-solid/IMPRINT/partial profile、missing/partial/fuzzy union、later lifecycle、COPY/pattern 或
|
||
任何 geometry、stable-ID、current-body、source STEP fallback;不完成 S1 body graph、general ADD、
|
||
CAP_FACE 或 shell。
|
||
|
||
`CAP_FACE@1511` 还具备独立的 `primary_add_up_to_surface_union_continuation` bridge:
|
||
仅单向 `up_to_surface` extent 可消费紧邻 default ADD/fuse、undrafted blind
|
||
`extrude_add_blind` 的一个 cap role。lowering 将这条消费意图显式标成该 contract;runtime
|
||
要求一个 old active solid、一个 transient prism tool、exact `BRepAlgoAPI_Fuse` history,且
|
||
cap 至 active member 的 `extrude -> union` relation 必须 complete/proven 且一对一。
|
||
`00007973` F5 -> F7 fresh rebuild 通过 `operation_role` 解析并完成重建;`00638700` F3 -> F5
|
||
在一对多 union successor 上保持 `selector_output_role_ambiguous`,证明 role 不会因同名 cap
|
||
或几何相近而被任选。双向 extent、非紧邻 producer、split/merge/multi-solid/IMPRINT 或
|
||
partial/fuzzy union、draft、later lifecycle、其它 consumer,以及 geometry、stable-ID、
|
||
current-body、source STEP fallback 都不在范围内;这不完成 general `CAP_FACE`、general ADD、
|
||
general `up_to_surface` 或 S1 body graph。
|
||
|
||
`CAP_FACE@1511` 的 `primary_add_dressup_union_continuation` bridge 允许同一 strict primary
|
||
ADD cap contract 的紧邻 `fillet` 或 `chamfer` consumer。face 先必须通过 complete/proven、一对一
|
||
`extrude -> union` relation 解析到 active member;dress-up executor 随后只展开这个已解析物理
|
||
face 的真实 body-boundary edges,周期 seam 不会被当作边界。`00051494` F3 -> F4 以
|
||
`operation_role` 解析并完整 rebuild;`00660816` F3 -> F4 的一对多 union successor 保持
|
||
`selector_output_role_ambiguous` 与 F3 prefix。非紧邻 consumer、shell/extent 以外的其他操作、
|
||
多个 CAP face、split/merge/multi-solid/IMPRINT/partial profile、draft、later lifecycle,以及
|
||
geometry、stable-ID、current-body、source STEP 或 transient-tool fallback 均不开放;它不完成
|
||
general CAP_FACE、general ADD、fillet/chamfer 或 S1 body graph。
|
||
|
||
`CAP_FACE@1511` 另有一个 independent `symmetric_circle_shell` bridge:只接受紧邻
|
||
shell 的独立、无 draft、`new_body`、两端 blind 的 `extrude_add_two_sided`,且完整 source
|
||
profile 恰为一个原始 circle,两个 CAP OSD 也必须各自只指向这个同一 source edge。与双向
|
||
CAP_EDGE 一样,两个 prism builder 在 source plane 的 `FirstShape` 都是内部 seam;executor
|
||
只将 primary/reverse 的 far final handles 分别注册为 `extrude.end`/`extrude.start`,并以 final
|
||
snapshot `IsSame` 证明。lowering、semantic validation 与 capability preflight 均只允许该 role
|
||
作为 immediate shell removal 的 `boundary`,不开放 extent、dress-up、continuation 或其它 consumer。
|
||
`00019252` F1->F2 的双 cap shell fresh RP comparison 通过(strict 仍不通过);独立的
|
||
`00000316` F2->F3 同样解析两端并执行 shell,之后才在无关 F6 `OFFSET_EDGE` query 停止,保留
|
||
F3 prefix。multi-edge/hole/IMPRINT/split profile、draft、ADD/CUT、非 blind、later lifecycle、其它
|
||
version 及任何 stable-ID、geometry、current-body/source-STEP fallback 继续拒绝。这只是 CAP_FACE
|
||
的窄 consumer bridge,S1 CAP family 与双向 generic output-role propagation 仍未完成。
|
||
|
||
S0 topology-delta 的一个受限 producer bridge 现已落地:对同一 workplane 的多区域
|
||
`planar_imprint`,仅在无 draft、单向 blind prism 的情况下,adapter 为每个区域保留
|
||
`BRepPrimAPI_MakePrism` 的 direct output,再以一个 `BRepAlgoAPI_Fuse` history 将每一条
|
||
intermediate handle 映射到最终 snapshot。registry 只接收原 profile anchor 到最终
|
||
`CAP_*` / `SWEPT_*` handle 的 composed relation;fuse 删除、未返回或不在最终 B-rep 的
|
||
handle 必须以 `coverage: partial` / `status: unknown` 保留,不能被 final geometry、stable ID
|
||
或邻近 shape 补齐。它使已完整存活的 IMPRINT side/cap/edge lineage 可供现有 set-valued
|
||
fillet/chamfer consumer 使用,但不把被 fuse 删除的 seam、complex/trimmed/multi-extent/drafted
|
||
profile、不同 sketch,或之后的 boolean/COPY/pattern 变成已支持 selector。该 bridge 不改变
|
||
query allow-list,也不表示通用 IMPRINT/SWEPT 完成。
|
||
|
||
2026-09-12 的通用 builder-history 修正补齐了 dress-up 的 cross-kind 事实:
|
||
`BRepFilletAPI_MakeFillet` / `BRepFilletAPI_MakeChamfer.Generated(inputEdge)` 的实际
|
||
OCC 类型按最终 B-rep 成员分组记录。因此输入 `edge` 生成的 final patch `face` 以
|
||
complete/proven `edge -> face` relation 保留,不再被错误标为 edge 或静默丢弃;非最终、
|
||
部分或未知生成物仍显式标记 partial/unknown。该事实目前只供诊断和后续通用 component
|
||
设计使用。受限 `BLEND_EDGE` contract 也不能从 patch face 的任意 boundary edge 推断
|
||
source `blendedInto` face;它必须同时取得下文规定的 edge/face source pair 和 exact relation。
|
||
|
||
同一 adapter 现进一步记录 exact `source edge + source face + generated patch face -> final
|
||
shared edge` transition:只有 patch face 的 final boundary edge 与唯一 final
|
||
`Modified(source_face)` 的 boundary edge 通过 `IsSame`,且 source edge、source face、patch
|
||
face、modified target face 和结果边均为唯一 complete/proven history 时,该 relation 才标记为
|
||
`exact_blend_boundary`。它与普通单源 lineage 分开保存,
|
||
不会改变 owner transfer 或现有 selector 的 cardinality。该内核证据现已接入一个受限
|
||
`BLEND_EDGE@1511` contract:outer query 必须是一个 direct `CAP_EDGE`,以及同一 direct source
|
||
prism 的完整 `CAP_FACE`,或与该 cap-edge 共用同一 source-profile edge 的 `SWEPT_FACE`,作为
|
||
`blendedFrom` 和同语义的唯一 `blendedInto`;producer 为独立、无 draft、`new_body` blind prism,
|
||
consumer 必须紧邻 native fillet/chamfer。lowering 将 source pair 写为 `blend_sources`,resolver 同时
|
||
验证 cap-edge anchor、cap-face role 或 exact `Generated(source-edge -> swept-face)` relation,及唯一
|
||
active `exact_blend_boundary` relation。它仍不是 family completion:`SWEPT_*`、`MERGE`、`SPLIT`、
|
||
`COPY`、`BLEND_FACE`、multi-set、非 immediate lifecycle、angle/two-offset dress-up、其他版本或
|
||
producer 都保持 deferred,且没有 geometry、stable-ID、current-body 或 source STEP fallback。
|
||
|
||
S0 是降低 `selector_query_unsupported` 的最快路径,但只应将 source query
|
||
转换为可执行 contract;若下游 producer 没有完整 OCC relation,结果仍必须是
|
||
`selector_kernel_history_missing`,不得降级为 geometry binding。S1 旨在让已存在的
|
||
direct-prism 特例变成由同一 lineage rule 支撑的普遍能力,而不是继续增加
|
||
“immediate `new_body`”分支。
|
||
|
||
#### 分层改造边界
|
||
|
||
| 层 | 责任 | 不允许承担的工作 |
|
||
| --- | --- | --- |
|
||
| `cadfs_to_cdsl/lowering.py` | 解析并保留完整 query AST、source version/import、source sketch/entity anchors、consumer policy | 根据最终 STEP、样本 ID、OCC 面号或几何评分填充 selector |
|
||
| CDSL schema / semantic validation | 校验 expression 类型、kind、基数、owner/body scope、consumer 集合要求和版本化 contract | 决定“哪个候选长得最像”或替换 source 语义 |
|
||
| `build123d_adapter.py` | 从一个 OCC builder,或同一次 feature replay 内显式闭合至最终 snapshot 的 builder chain,捕获 exact handles、relation、section edge、output role 和 coverage | 从不同 replay、无 exact final-history bridge 的 builder,或 geometry fingerprint 拼接 lineage |
|
||
| runtime body graph | 原子 feature 的 member create/mutate/copy/delete/activate 转移;保留 tool 生命周期 | 用 current aggregate body 补全来源不明的 query |
|
||
| `TopologyRegistry.resolve` | 解释 AST、计算完整 relation component、验证 policy/cardinality/active body,并返回 record set 与 evidence | 对 provenance selector 走 stable-ID 或 geometry fallback |
|
||
| offline candidate recovery | 排序假设、搜索分支、以 strict STEP 判断唯一行为候选 | 修改 production resolver 的证明标准 |
|
||
|
||
#### Query family 的推广顺序
|
||
|
||
1. 先将目前 parser 已记录的 composed query 规范化为不丢失顺序和集合边界的 AST;
|
||
对 `qUnion` 先实现集合并集,再实现与 `qIntersection`/`qSubtraction` 的交叉,最后
|
||
接入 `qAdjacent` 和 owner/body filters。每个 operator 需要明确空集、重复项、kind
|
||
不匹配、不同 body 和 construction entity 的语义。
|
||
2. 将 `qCreatedBy`、CAP、SWEPT、OFFSET、INTERSECT 统一为“source anchor + relation
|
||
predicate + result-set policy”,而不是由 family 名称分散处理。保留 family-specific
|
||
source semantics,但共用 cardinality、coverage、body-member 和 version gates。
|
||
3. 对每种 producer 先实现完整 delta,再开放其 selector 后继:direct boolean 与
|
||
fillet/chamfer/shell 优先;随后 revolve、sweep、loft、transform;最后 COPY/pattern、
|
||
split 和 face-edit operations。没有 delta 的 executable fallback 可以保留可执行模型,
|
||
但必须截断 provenance propagation。
|
||
4. 对每个 consumer 明确要求:例如 `fillet` 可以消费 edge set,`shell` 可以消费
|
||
removal-face set,`up_to_surface` 必须能定义同方向首个有效 hit,`up_to_body` 只能
|
||
接受 body-member set,`up_to_vertex` 必须处理投影距离是否一致。consumer 不得以
|
||
“取第一个 record”替代集合语义。
|
||
|
||
#### 快速推进与验收方式
|
||
|
||
“快”指按能力族推进并批量验证,不指围绕单个失败模型反复改 selector:
|
||
|
||
1. 每个工作包先交付 schema/lowering/adapter/resolver/consumer 的最小纵向 contract,
|
||
并以合成原子矩阵覆盖一对一、split、merge、deleted、inactive、empty 和 multiple。
|
||
2. 然后从 capability matrix 为该 tuple 自动抽取至少三个不同几何/生命周期的真实样本,
|
||
不以其中一个样本的 STEP 量测指导实现;再运行受影响核心 17、扩展矩阵和可控全量 shard。
|
||
3. 一次 batch 只报告能力级指标:已解析 selector 数、按 diagnostic code 的失败数、可执行
|
||
prefix 数、strict/RP 分类和未覆盖 tuple。单样本只作为可复现证据,不作为优先级或
|
||
行为分支。
|
||
4. 每个合并的 family 更新当前 allow-list、能力矩阵和
|
||
`ENGINE_CAPABILITY_GAPS_PROGRESS.local.md`。只有真实 FeatureScript source contract、
|
||
CDSL contract、exact kernel evidence、consumer 执行和多样本回归齐备,才将 status
|
||
从“部分完成”改为“完成”。
|
||
|
||
下列失败码是能力推进的正常信号,不能用其它层掩盖:
|
||
`selector_query_unsupported` 表示 AST/family/consumer 未实现;
|
||
`selector_query_version_unknown` 表示来源语义缺证据;
|
||
`selector_kernel_history_missing` 表示 producer delta 不完整;
|
||
`selector_relation_non_unique` 表示 policy 尚不能表达真实 N:M 关系;
|
||
`selector_body_member_inactive` 表示 body lifecycle 尚未覆盖。每一种都必须保留最后
|
||
可执行 STEP/GLB/checkpoint,并进入下一次 capability scan,而不是重试同一模型直到偶然成功。
|
||
|
||
### 开源实现策略
|
||
|
||
每个新的内核级能力在自研前,先检查官方 OCCT/OCP API、项目现有依赖和成熟开源实现。
|
||
本地首选参考是 `/Users/lk/Downloads/SimpleCADAPI-master 4`:其
|
||
`topology/tracking.py` 保留 OCC builder 的 `Modified`、`Generated`、`IsDeleted` 和
|
||
section-edge 历史,`ocp_booleans.py` 展示了保留 history 的 boolean 与 same-domain
|
||
cleanup,其他 kernel/operators/tests 覆盖 transform、shell、sweep、loft、fillet 和
|
||
chamfer。这些实现对 P0 topology delta、body provenance 和 P2 feature adapter 具有
|
||
直接参考价值。
|
||
|
||
采用外部方案时必须确认许可证、OCP/OCCT 版本和异常语义,并将算法适配到本项目的
|
||
CDSL contract、body graph 和 selector resolver。SimpleCADAPI 强制单一 `Solid` 的
|
||
boolean helper 不能直接使用,因为 CADFS 需要独立 body、copy、keep-tools 和 pattern
|
||
instance 生命周期。每项采用或拒绝外部方案的决定、理由和回归证据都记录在本地能力
|
||
台账;不得不经评估地复制代码,或为复用外部 API 破坏现有 contract。
|
||
|
||
### P0:通用几何状态和拓扑基础
|
||
|
||
1. 建立显式 body graph:feature 输出 body ID、result mode、copy、transform、delete、
|
||
keep tools、pattern instance 和多 body 聚合语义。当前可用的受限增量是以 source
|
||
feature body 为输入的 rigid translation/rotation 与受限 non-rigid uniform-scale
|
||
`transform_bodies` / `delete_bodies` contract;它不能
|
||
代替 fused body 或 pattern instance 的完整 provenance,后两者在唯一性未证明时
|
||
必须诊断而不能退化为 current body。capability preflight 已镜像 runtime 的显式
|
||
body-member 生命周期:fused/dress-up 输出、boolean 消耗、delete 和 pattern replay
|
||
会撤销旧 member 的可选资格;只有 `new_body`、`keep_tools`、明确 transform 输出,或
|
||
经 sole-body lineage 已证明的 current successor,才能被后续 body query 选中。受限的
|
||
`pattern_circular` 现在可对所有 source 都是明确可选 member 的 `NEW` additive body,或
|
||
一个 direct `SWEPT_BODY` 经该 sole-body successor 保留的 current member,以
|
||
`pattern_feature_id` / `source_feature_id` / `instance_index` 记录 direct COPY
|
||
member;后续 `transform_bodies` 可精确引用该 COPY 而无需写入 runtime ID。CADFS 的
|
||
direct `SWEPT_BODY` transform 现可将 `TRANSLATION_3D`、rotation,以及单一线性
|
||
sketch/`CAP_EDGE` 或有 physical cap frame 的 direct `CAP_FACE` direction 的非负
|
||
`TRANSLATION_DISTANCE` lower 为同一刚体 contract。系统 datum plane、已显式 lower 的
|
||
reference plane,以及能由 direct planar source 唯一构成 frame 的 `SWEPT_FACE` 也可提供该
|
||
direction;圆柱/曲面 `SWEPT_FACE`、`SWEPT_EDGE`、OFFSET/COPY face 和没有可证明 frame 的
|
||
plane query 继续诊断而不猜测。`SCALE_UNIFORMLY` 在 factor 有限且为
|
||
正数、scale point 是 Origin、direct sketch vertex(含 circle center)或 direct
|
||
`CAP_VERTEX` 时 lower 为显式 `uniform_scale` body transform,不烘焙回草图。`TRANSLATION_ENTITY` 在 direct source
|
||
仍是可选独立 body 时接受一个线性
|
||
sketch/`CAP_EDGE` 的端点差或两个 sketch/`CAP_VERTEX` 的有序点差;move 的 bake path
|
||
另要求 source 是紧邻的 `NEW` body。对于 exact single-source `makeCopy` transform,
|
||
后续 `COPY(instanceName=1)` body/line/vertex 可递归验证其 `derivedFrom` 链并引用已生成
|
||
body member。一个单源链式 COPY 的 source query 可继续保留最初 `SWEPT_BODY` 的
|
||
FeatureScript owner,而实际执行成员已是前一个明确 COPY output;此时 lowering 只在
|
||
`make_copy:true`、一个 direct source、一个 recursive `derivedFrom` 链和一个 preceding
|
||
active member 都成立时写入 `{source_feature_id, active_member_feature_id}`
|
||
`source_member_aliases`。它是 source provenance metadata:运行时仍且只能从
|
||
`source_feature_ids` 选择 body member,semantic validation 要求 alias member 与该唯一
|
||
source 完全相同,绝不把 alias 解释为 current-body/aggregate 选择。对于前序 direct
|
||
multi-source `makeCopy`,CDSL 以
|
||
`transform_copy_refs(transform_feature_id, source_feature_id)` 表示被查询的唯一直接 source,
|
||
runtime 分别物化各 source 的 transformed member,aggregate 只用于 STEP 导出且不伪造
|
||
topology owner/delta。schema、semantic validation、capability preflight 和 runtime 都要求
|
||
owner 是 preceding multi-source `make_copy:true` transform,且 source 是该 transform 的
|
||
直接选择项;single-source、source 外、fused、pattern 和无源限定的 aggregate reference
|
||
一律拒绝。无位移的 direct `TransformType.COPY` 以显式 zero translation 与
|
||
`make_copy:true` 产生一个独立 identity body member,绝不将其写成 non-copy successor
|
||
alias。CAP edge/vertex 的 source-local in-plane coordinates 保持 profile frame,
|
||
仅映射到 selected physical cap origin。face、
|
||
generic face、swept/offset、pattern 或未证明 COPY/curve direction、多个 direction、已吸收 body 与其它非刚体
|
||
transform 仍必须明确诊断。对于已证明只有一个 CADFS body 的受限 lineage,direct
|
||
`SWEPT_BODY` 可从初始 `new_body` 经 ordinary fusing add、单 body fillet/chamfer/shell
|
||
与 exact non-copy transform 续接到当前 CDSL member;cut 保留所选 member,因而不虚构
|
||
一个 cut successor。直接 circular ADD 且 source 唯一等于该 current member 时保留这份
|
||
证明,并以该成员的实际 B-rep 物化每个 COPY instance;第二个 `new_body`、`make_copy`
|
||
transform、boolean、其它 pattern、delete 或任何未列出的 body atomic 都清空它。它绝不以
|
||
aggregate/current body 兜底,
|
||
也不为 linear/nested pattern、被排除 instance 或无明确 source member 建立 ownership。
|
||
唯一新增的
|
||
mirror 例外是:直接 `pattern_mirror` 的每个 source 都仍为可选的
|
||
`result_mode: new_body` member 时,runtime 以实际 B-rep mirror 物化其唯一的
|
||
`instance_index: 1` COPY member;CDSL semantic validation、capability preflight 与
|
||
runtime 都要求这一完整条件。普通 additive/cut/dress-up 后继、已吸收 source、linear
|
||
或 nested mirror 仍走 feature replay,不能借该例外暴露 aggregate member。
|
||
本轮 327 条 transform shard 中 `00120430`、`00496729`、`00749755` 因该 provenance
|
||
rule 完整 lower;只有 source 在 mirror 前未被后续 mutation 吸收的 `00749755` 可执行到
|
||
RP `rebuilt_approximate`,另两条保留 `runtime_ineligible` 和已有前缀/诊断,绝不以
|
||
converter 完整状态冒充 runtime 或相似通过。新增的 multi-source COPY path 令 `00699847`
|
||
的 F3 两源 copy 和 F4 的 source-qualified F3/F1、F3/F2 queries 完整 lower,强制
|
||
pipeline 为 `rebuilt_strict`;`00950564` 证明 F1 的 direct `SWEPT_BODY` 在 F3/F5/F7/F9
|
||
ordinary add 和 F10/F11 chamfer 后精确 lower 为 F12 的 `source_feature_ids:["f_F11"]`,
|
||
不引用 current aggregate。`output/single-body-successor-20260909` 的完整 history 为
|
||
`converted_complete`、runtime eligible、8/8 feature executed、`rebuilt_approximate`;
|
||
RP 通过(bbox delta `0`,体积/面积相对误差 `0.00011913` / `0.00016132`,实体数 `1`)。
|
||
strict 仍因 max/p99 surface `0.01 mm` 与体积/面积阈值失败而保留为诊断。通常 copy、boolean、
|
||
pattern 与 delete 均清空 sole-body successor lineage;这不阻止前述受限的 direct
|
||
single-source transform COPY provenance metadata。`00184423` 的 F3--F5 与 `00322866`
|
||
的多层链均由原始 owner 到每一层 explicit active member 记录 alias,强制 RP pipeline
|
||
分别为 `rebuilt_strict` 与 `rebuilt_approximate`。multi-source/aggregate COPY、pattern 或
|
||
boolean/deletion 后继、非-`makeCopy` transform、缺失或不匹配 member,以及任何 selector
|
||
topology propagation 仍属未完成 contract,继续保留明确诊断。
|
||
`SWEPT_BODY@1511` 另有一条不能与上述 successor lineage 混同的即时终止 contract:只有
|
||
singleton `qUnion([makeQuery(..., SWEPT_BODY, EntityType.BODY)])` 引用紧邻前序独立、无 draft、
|
||
`new_body` blind prism,且其 producer body record 仍唯一 active 时,单侧 `up_to_body` 才能
|
||
以 `active_body_member` / `direct_new_body` 解析该 record。resolver 以 producer identity 与
|
||
active-member lifecycle 证明 `body_member`,不读 stable ID、binding ID、几何、aggregate 或
|
||
current body。`00694309` F3 是正向 body-member evidence;该样本的 F4 strict/RP pass 由下述
|
||
独立 `CAP_EDGE` continuation contract 证明,而非放宽 body-member 规则。later successor、`ADD`、cut、
|
||
revolve、sweep、`COPY`、boolean/pattern/delete、多 body/multiple-query 和其它 FeatureScript
|
||
version 都不属于这个 contract。fresh `output/core-17-swept-body-up-to-body-member-20260910` 的
|
||
`tier=all` pipeline/RP run 完成 17/17,分类为 1 `comparison_timeout`、10 `rebuild_failed`、
|
||
1 `rebuilt_approximate`、5 `rebuilt_rejected`;它只证明本窄 selector contract 未改变核心集
|
||
的既有分类,不能标记 general `SWEPT_BODY` 或 `up_to_body` 完成。
|
||
2. 在 adapter 层记录每次建模操作的 `preserved`、`modified`、`generated`、`deleted`
|
||
topology delta 及 CAP/SWEPT/boolean 等输出角色;runtime 以该记录完成后继 selector
|
||
绑定,不以“当前形状中最相近元素”猜测。当前增量已覆盖 OCC 刚体
|
||
`transform_bodies`(含 OCP `gp_Trsf.SetScale` 的 uniform scale)、单实体
|
||
`boolean_bodies` 的 union/subtract/intersect 以及 direct
|
||
single-body fillet/chamfer,以及单一 selected solid 的 `shell`:adapter 返回 opaque
|
||
kernel relation,registry 只在 source/result snapshot 的 exact relation 唯一时传递
|
||
owner 和 successor,并在 rebuild 输出 `topology_deltas`。shell 沿既有
|
||
`BRepOffsetAPI_MakeThickSolidByJoin` builder 的 `Modified`、`Generated`、`IsDeleted`
|
||
历史记录 delta;未返回 `IsDeleted` 的内核输入不会被虚构为 deleted。该受限 shell path
|
||
还记录可由 source subshape 和 kernel event 证明的 `shell.body_face`、
|
||
`shell.offset_face`、`shell.closing_descendant` 和 `shell.wall` evidence role。当前
|
||
`shell.offset_face` 只有一个受限 lowering consumer:紧邻 shell 后续的 shell face query,
|
||
且 FeatureScript 以 `TDD`/`trueDependencyDisambiguation` 明确指向前序 direct `new_body`
|
||
blind-prism 的 `extrude.start` 或 `extrude.end`。CDSL 以
|
||
`output_role_source(owner_feature_id, output_role)` 保留此关系;registry 只接受 exact
|
||
kernel-history relation 的唯一 active snapshot,不能以相同 geometry、bare offset role 或
|
||
任意嵌套 CAP query 替代。它仍不是可 lower 的通用 CAP/SWEPT/OFFSET query。对于 primary
|
||
`REMOVE` 的一个 solid tool 和一个含多个独立 solid 的 active target,adapter 现在逐 target
|
||
调用 `BRepAlgoAPI_Cut(SetToFillHistory)`,仅拼接每个 builder 的 exact relation,并以
|
||
`per_member_exact_cut_history` 标记组合 delta;它不按 member index、aggregate/current body
|
||
或几何相近性建立跨成员 relation。未相交或未修改的成员仍只依赖 body graph 的 exact
|
||
equivalence;任何 tool 多实体、member 间 relation、N:M section/CAP/SWEPT propagation 或 selector
|
||
consumer 仍不由该 delta 开放。真实 `00423838` 的 F4 已有 exact circular instance owner,先前缺口
|
||
是 F6 六个成员主切除丢失 builder history;fresh
|
||
`/private/tmp/circular-instance-owner-20260913-member-delta-final` 现在在 F6 记录 281 条
|
||
exact relation 并保留六实体 checkpoint,但 F7 的 outer `INTERSECT(VERTEX)` 仍为
|
||
`selector_query_unsupported`。多实体 boolean、
|
||
非 direct-builder dress-up fallback、复杂 sweep/loft history 及 CAP/SWEPT/section
|
||
query roles 仍属未完成范围。受限的单闭合无内环 profile、无 guide/transition 的 direct
|
||
solid sweep 在 initial 或 `new_body` final member 上,会记录
|
||
`BRepOffsetAPI_MakePipeShell.FirstShape/LastShape` 的 `sweep.start`/`sweep.end`
|
||
evidence;受限的 initial closed-wire solid loft 会记录
|
||
`BRepOffsetAPI_ThruSections.FirstShape/LastShape` 的 `loft.start`/`loft.end` evidence。
|
||
后续 fuse 会重建 topology,因此不复用已经失效的 sweep/loft builder history。当前
|
||
CDSL `selectorRef.output_role` 现公开 direct-prism `extrude.start`/`extrude.end` 与四个
|
||
sweep/loft direct-builder cap role;registry 只会在
|
||
relation 的唯一 result snapshot 上写入 `TopologyRecord.output_roles`,resolver 要求
|
||
owner、active body snapshot 与唯一 role 命中,并拒绝 stable ID、geometry、snapshot ID
|
||
混用。`extrude_add_blind`/`extrude_cut_blind` 的
|
||
`params.end_condition.reference` 与 `shell` 的 `feature.selectors` 各有一个有界 direct-cap
|
||
contract:仅紧邻前序、`result_mode: new_body`、blind extrusion 的 `extrude.start`/
|
||
`extrude.end` 可作为 `up_to_surface` reference 或 shell removal face,且必须由该 producer 的
|
||
完整/已证明 cap role 解析;schema、semantic preflight 与 runtime 同时拒绝非紧邻 producer、
|
||
其它 role、stable ID、binding ID 和 geometry fallback。CADFS lowering 现对独立 `new_body`
|
||
blind prism 的 CAP_FACE,以及满足全部条件的
|
||
`LocOpe_DPrism` drafted extrusion 生成该 contract:单一闭合外环、无内环、单向 blind
|
||
extent,且拉伸方向与实际端盖法向同向。`extrude_from_face` 直接拉伸该 B-rep 面,不能把
|
||
CAP_FACE 还原为原始草图。registry 只会让唯一 OCC `modified`/`preserved` relation 跨
|
||
boolean 删除成员后的 Compound member-index 改变继续传递 owner/output role;几何回退仍按
|
||
member index 隔离,绝不以相似性跨成员继承。该路径不覆盖 drafted 内环、fused/multi-region/
|
||
multi-extent/loft/sweep/pattern 或一般 CAP_FACE,故 `CAP_FACE`/`SWEPT_FACE` lowering 仍为
|
||
部分完成。`00016195` 的 F1 -> fillet -> F3 和 `00835610` 的 drafted F3 -> F4 subtract ->
|
||
F5 都是正例;后者为 `converted_complete` / `rebuilt_approximate`,9 个 feature、3 个实体,
|
||
RP 通过(bbox delta `0.0008 mm`、体积相对误差 `0.00020848`、面积相对误差
|
||
`0.00021742`)。`00268467` 的 drafted 内环则明确保留 capability diagnostic 和可执行
|
||
前缀,不伪造可绑定 selector。
|
||
`TopologyDeltaRelation` 还必须显式记录 `source_kind` 与 `result_kind`,禁止把 face、edge
|
||
或其它 subshape 的 relation 混作同一种后继。每个 `TopologyDelta` 必须随操作输出 input/
|
||
output snapshot、body member 和 history 状态证据;当前 contract 的状态为 `proven`、
|
||
`partial`、`unknown` 或 `rejected`,并可带原因。只有完整、可追溯的 kernel relation 才能
|
||
进入 lineage;`IsDeleted` 不等于存在 replacement,缺失的 `IsDeleted` 也不等于 deleted。
|
||
boolean 的 section edge 可以作为 builder 生成事实记录,但没有 source-face 的精确 relation
|
||
时不得被提升为 source-qualified lineage。当前 `INTERSECT@1511` 仅有一个受限 consumer:
|
||
explicit `boolean_bodies` 的单一 target/tool subtract/intersect 中,两个 direct-prism
|
||
`CAP_FACE`/`SWEPT_FACE` input 必须分别由 OCC `Generated(face)` 返回同一 `SectionEdges()`
|
||
edge,且三个 handle 都以 `IsSame` 绑定 input/final snapshot;resolver 再要求唯一 relation、
|
||
`intersection`/`one` policy 和 active result member。另有一条同样受限的 primary `REMOVE` 路径:
|
||
immediate `extrude_cut_blind` 只可在一个 active target solid/member、一个 direct-prism tool、完整
|
||
source anchor/history 且 source query 没有未核实 disambiguation 时注册 `transient:<feature>` tool
|
||
snapshot;它仅作紧随 cut 的 source-qualified section 历史输入,永不成为 active/selectable topology。
|
||
普通 `SectionEdges()`、多输出、keep-tools、多 member、COPY/transform/pattern/TDD/IMPRINT/non-prism、
|
||
primary query 的未核实 `disambiguationData` inputs 均不执行。
|
||
这不构成通用 INTERSECT coverage,真实语料 RP 矩阵仍待补齐。这些记录是通用 topology 事实,不是由 stable ID
|
||
或最终几何相似性反推的替代品。
|
||
|
||
2026-09-13 的同心圆 IMPRINT profile source-identity 修复补齐了一条前置事实:当多个
|
||
bounded IMPRINT region 的 union 唯一物化为一个圆盘时,materializer 现在只在该圆盘的
|
||
outer boundary 恰对应一条唯一 source circle 时保留 `source_entity_id`。例如 `00423838` F6
|
||
由 E4 两侧区域的 union 物化为 E5 外圆;lowered `sketch_F5__f_F6` 因而明确携带 E5,
|
||
而非以半径或 final geometry 猜测它。环域、非圆 profile、重复 source boundary 和任何不唯一
|
||
mapping 仍不标记 source identity。该项只恢复 materialized profile 到其实际原始边界的 source
|
||
contract;adapter 将 direct `profile.type: circle` 的显式 `source_entity_id` 原样转为 exact circle-wire
|
||
anchor,而不再错误读取通用 `sketch.entities`,也不以半径或圆心反推 identity。F6 的 multi-member
|
||
primary cut 因而可在 direct-prism history、tool singleton 与完整 source anchor 都具备时登记
|
||
`transient:f_F6` tool snapshot;它是不可选择的历史输入,不改变六个 target member 的
|
||
`per_member_exact_cut_history`,也不使任何 multi-member selector 自动可用。仍没有 OCC section-edge
|
||
或 complete source-face-set -> vertex relation,因此 F7 `INTERSECT(VERTEX)` 保持
|
||
`selector_query_unsupported`。这不扩展 general IMPRINT、SWEPT_FACE、primary-cut section 或
|
||
pattern/COPY selector capability,也不允许 geometry、stable ID、current body 或 source STEP fallback。
|
||
3. 建立统一 selector resolver,并让 runtime 与诊断性的 prefix binder 共用
|
||
`TopologyRegistry.resolve` 及已导出的 topology facts。resolver 按“语义 source -> kernel
|
||
lineage -> derivation policy/cardinality -> active body member”顺序绑定,报告实际分支使用的
|
||
`resolution_mode` 和 evidence,而不是从 selector 字段事后推断模式。stable ID 只可定位
|
||
source,不能直接在 active record 上成功;owner、output role 或 geometry 也不能绕过完整
|
||
lineage、允许的 derivation policy、operation-wide cardinality 与 active-body 证明。
|
||
`none`、`source_qualified`、`one` 与 `all_fragments` 都必须有明确、可审计的语义:merge 即使
|
||
最终只有一个 result 仍按 N:1 检查,`all_fragments` 遇到任一分支缺失或 partial 必须拒绝。
|
||
resolver 失败不得自动改走 legacy 成功路径;只有已文档化的 legacy explicit-geometry selector
|
||
可保留 geometry fallback,provenance/COPY instance selector 不得回退到几何相近、current body
|
||
或普通 context selector。找不到、多解、历史不完整、版本不支持和 policy/cardinality 不满足
|
||
都必须稳定诊断并保留可执行前缀。
|
||
`selector_intent.version` 是唯一 canonical intent version;顶层
|
||
`selector_intent_version` 仅为兼容字段,存在时必须一致。schema 可接收只有
|
||
`selector_intent` 的语义 selector,并将 FeatureScript 标准库路径、精确 import version、全部 direct
|
||
import 列表与 source language version 元数据和 runtime ID 分离保存。lowering 不得为缺失 source
|
||
version 虚构 `"0"`;resolver 应返回 `selector_query_version_unknown`。query family/language
|
||
version/direct standard-library revision 通过显式 allow-list 注册,不得从 `15xx` 数字前缀、相同 import
|
||
path 或单一样本推断兼容性。当前
|
||
`FEATURESCRIPT_QUERY_CAPABILITY_MATRIX.md` 将 FeatureScript `1511` 的受限
|
||
`CAP_FACE`、`OFFSET_FACE`、direct-prism `SWEPT_FACE`/`SWEPT_EDGE` contract,以及受限
|
||
`1511` / `2491` full-solid-revolve `SWEPT_EDGE` contract 标为
|
||
端到端可执行。后两者只适用于紧邻独立、无 draft、`new_body` blind prism 的 consumer:
|
||
adapter 必须保留 direct source-profile edge/vertex construction handle,并分别由
|
||
`BRepPrimAPI_MakePrism.Generated(edge)` 的 edge -> side-face 或
|
||
`Generated(vertex)` 的 vertex -> vertical-edge relation 完整证明;resolver 再检查
|
||
`boundary` policy、source qualification 和 active member。`00111611` F3、`00974931` F2、
|
||
`00594348` F2 和 `00000715` F3 是这些受限路径的真实语料证据。`SWEPT_EDGE` 的 direct
|
||
profile contract 现还接受一个 analytic contour region 的 hole wires:adapter 将外环和全部内环一次
|
||
交给 `BRepBuilderAPI_MakeFace`,只在 source edge/vertex 经 finished-face `IsSame` 验证后登记
|
||
anchor;`00007264` F2 的四个 selector 已 `kernel_lineage` resolved(最终 comparison rejected),
|
||
`00039669` F2 strict/RP passing,`00151159` F2 RP passing。含 hole 的多 region profile 必须继续走
|
||
既有 `Face.make_holes` geometry path 且不登记 anchor,避免改变 prism combine 语义;`00248377` 是
|
||
该拒绝/保留边界,仍导出 F4 checkpoint。`00594348` 的 immediate
|
||
shell 仅接受 direct source 的 non-construction line wall,并从同一 edge -> face relation
|
||
解析两张 removal face;它不输出 geometry 或 stable-ID hint。direct all-circle construction 可保留一个
|
||
annular hole 的 outer/inner source edge;多个独立 direct circle region 只在每个 prism
|
||
result 都仍位于 final snapshot 时保留各自 relation(当前为原子证据,尚非多语料完成项)。
|
||
`CAP_FACE` 还可作为上述受限 `up_to_surface` nested reference 或 immediate shell removal
|
||
face 的 cap role;`00212904` F2 与 `00789939` F2 分别以 `extrude.start` 和 `extrude.end`
|
||
的 `operation_role` 执行。fresh `output/cap-face-immediate-shell-00212904-20260910-v1`
|
||
证明前者执行到 F5,但 strict/RP 均拒绝;fresh
|
||
`output/cap-face-immediate-shell-00789939-20260910-v1` 证明 F2 及后续同一 direct-cap
|
||
shell F5 都执行,F6 仍为 `selector_query_unsupported` 并保留 F5 STEP checkpoint。fresh
|
||
`output/core-17-cap-face-immediate-shell-20260910-v1` 的 `tier=all` / pipeline / RP run 为
|
||
17/17 completed、1 `rebuilt_strict`、1 `rebuilt_approximate`、6 `rebuilt_rejected`、8
|
||
`rebuild_failed`、1 `comparison_timeout`;其中 `00212904` 的分类由 selector failure 变为
|
||
executable-but-rejected,不能将此记为几何相似通过。它们不允许在 producer 后续 mutation、
|
||
non-immediate owner、stable ID、binding ID 或 geometry fallback 中继续解析;
|
||
`CAP_FACE@1511` 现还有一个单独的 initial-direct-loft shell bridge:producer 必须是首个
|
||
实体结果、恰好两个 direct closed-IMPRINT sheet profile、default/`NEW` operation,且没有
|
||
wire profile、connection/match 或端点 derivative 参数。lowerer 将这组 source profile 顺序写为
|
||
`cap_output_profile_sources`;CAP query 的 OSD 必须唯一命中其中一个 profile,再映射到 adapter 的
|
||
`BRepOffsetAPI_ThruSections.FirstShape/LastShape` `loft.start`/`loft.end` relation。`isStart` 不
|
||
决定 OCC role,因此不会把 source 的 cap-direction 名称误当作 wire order。仅紧邻 `shell` 能消费该
|
||
role,semantic/preflight/registry 都要求唯一 complete/proven active boundary relation,且 selector
|
||
不带 stable ID、binding ID、geometry 或 snapshot fallback。fresh
|
||
`output/loft-cap-shell-20260912` 中 `00023963`、`00051031`、`00059941` 均以 `operation_role`
|
||
解析并执行 shell,但 RP comparison rejected;`00157619`、`00139197` 均在 selector 成功后由 native
|
||
OCC thick-solid 拒绝。`00330207` 的非 initial loft 和 `00842069` 的 1549 source 均保留 deferred
|
||
selector;这不是 general loft/CAP_FACE 或 shell completion。
|
||
`CAP_FACE@1511` 另有一个 initial-direct-sweep shell bridge:仅独立 `new_body`
|
||
direct PipeShell sweep 记录 `initial_output_roles` 及 profile edge/path edge 的
|
||
source contract。CAP OSD 必须精确含该 profile edge 和 source path 的对应
|
||
`start`/`end` vertex;lowering 记录 path 是否为 profile attachment 而反向,随后将
|
||
source endpoint 映射为物理 `sweep.start`/`sweep.end`,resolver 仍只接受唯一
|
||
complete/proven active `FirstShape`/`LastShape` relation。`00330012` F3 以
|
||
`sweep.end` 解析并完整 rebuild;`00658358` F4 的 source pair 不匹配而保持
|
||
`selector_query_unsupported` 和 F3 checkpoint。该 bridge 不开放 segmented/spatial/
|
||
hollow/fused/additive sweep、COPY/pattern/later lifecycle、non-shell consumer、其他版本
|
||
或 general sweep CAP 语义,且绝无 geometry、stable-ID、current-body 或 source STEP fallback。
|
||
`CAP_EDGE@1511` 另有独立的 immediate direct-sweep dress-up bridge:PipeShell 不提供
|
||
`FirstShape(source_edge)` / `LastShape(source_edge)` 重载,因此只接受一个 retained direct
|
||
circle profile edge、一个 direct source path edge、以及匹配 `start`/`end` endpoint 的完整 OSD。
|
||
adapter 仅在 `FirstShape`/`LastShape` cap face 恰有一条 boundary edge 且该 edge 以 `IsSame`
|
||
属于 final solid 时,记录 profile edge -> role-qualified `sweep.start`/`sweep.end` boundary
|
||
relation;executor 把同一 profile edge 注册为 transient source anchor。lowering、semantic
|
||
validation 和 preflight 共同限制 consumer 为紧邻的 `fillet`/`chamfer`。`00330012` 的真实
|
||
source CAP_EDGE 变体经 `kernel_lineage` resolve 并 rebuilt;端点 `isStart` 语义不一致的
|
||
variant 保留 F2 checkpoint。多 edge/inner-wire/split profile、segmented/spatial/hollow/fused/
|
||
additive sweep、continuation、COPY/pattern/later lifecycle、非 dress-up consumer 与 generic
|
||
sweep CAP_EDGE 都继续 deferred;不得把 cap face 的任意边、几何、stable ID、current body 或
|
||
source STEP 当成 edge lineage。
|
||
`SWEPT_FACE@1511` 也新增同一 initial direct-PipeShell 的独立 bridge:PipeShell
|
||
`Generated(profile_edge)` 的 final `FACE` outputs 逐一通过 solid `IsSame` membership,作为
|
||
profile edge -> side face 的 complete/proven `boundary` relation。当前接受一个完整、直接、无 inner
|
||
wire 的 analytic closed profile(每条 source edge 必须在 contract 内唯一出现)和单一 direct source
|
||
path edge 的 exact OSD pair,且仅紧邻 `fillet`/`chamfer` 能消费;path source 只在 intent
|
||
disambiguation 中保留,运行时 anchor 始终是被选的 profile edge。`00330012` 的 circle source variant
|
||
及其 four-edge direct-profile source-form variant 都以 `kernel_lineage` resolve 并 rebuilt;profile/path
|
||
pair 不匹配保留无 geometry/stable-ID 的 deferred query。真实 `00954785` 的 multi-segment qUnion path
|
||
不得借其 representative leaf 进入此 contract。inner/split profile、segmented/spatial/hollow/fused/additive
|
||
sweep、continuation、COPY/pattern/
|
||
later lifecycle、shell/extent/sketch-host 等其他 consumers、其他版本与 generic sweep side-face
|
||
semantics 均未完成。
|
||
`sweep` 的 source-wire path 现在还接受同一 source sketch 的直接
|
||
`qUnion([sQuery(EDGE), ...])`。每一个 leaf 必须是原始、非 construction 的 line、arc 或
|
||
非周期 B-spline,不能跨 sketch、重复实体,也不能是 nested/filter/derived query;全部 source
|
||
endpoint 必须唯一组成一个开放、连通、无分支的 wire。lowering 以 endpoint 拓扑排列完整 segment
|
||
集合并保留精确圆弧方向,绝不允许 parser 的末尾 representative leaf 替代该集合。`00684140`、
|
||
`00687707`、`00293516`、`00860314` 的 line/arc path 都已在 runtime 无诊断 rebuild。closed、
|
||
disconnected、branched、construction、跨 sketch、重复 leaf、runtime/derived path 仍拒绝。这只扩展
|
||
source wire path 的显式选择,不生成 CAP/SWEPT output lineage,也不构成一般 sweep/query 完成。
|
||
`SWEPT_EDGE@1511` 另有独立的 initial direct-PipeShell bridge:PipeShell
|
||
`Generated(profile_vertex)` 的 final `EDGE` outputs 逐一通过 solid `IsSame` membership,作为
|
||
profile vertex -> swept edge 的 complete/proven `boundary` relation。仅完整、直接、无 inner wire 的
|
||
analytic closed profile 可记录所有唯一 source edge;SWEPT_EDGE OSD 必须恰含两条相邻 profile edge
|
||
和一条 direct source path edge,前两者作为 runtime vertex anchor,path 仅保留在 disambiguation。
|
||
lowerer、schema、semantic/preflight 均限制为 independent `new_body`、紧邻 `fillet`/`chamfer`,并拒绝
|
||
non-adjacent pair、circle/inner/split profile、multi-segment/spatial/hollow/fused/additive path、continuation、
|
||
COPY/pattern/later lifecycle 和所有其他 consumers。`00330012` 的 four-edge/one-line source-form variant
|
||
以 `kernel_lineage` resolve 并 rebuilt;现有全量语料的 12 条 sweep SWEPT_EDGE history 没有一条满足
|
||
该 strict direct contract,故这不是 real-corpus coverage 或 general sweep completion,且绝无 geometry、
|
||
stable-ID、current-body 或 source STEP fallback。
|
||
1511 direct-prism `SWEPT_EDGE` dress-up consumer no longer treats feature order as
|
||
topology proof: lowering can retain `boundary + continuation`, but the registry must
|
||
still trace the same source vertex through complete/proven one-to-one relations into
|
||
the active member. `00094474` F3 is a strict real-corpus positive after an intervening
|
||
datum feature. `00370320` F4 proves the same source edge through its F3 subtract
|
||
continuation and is RP passing. `00027017` F3 finds a non-unique post-fillet relation and is rejected
|
||
with its F2 checkpoint. Split/merge/deletion/partial history and IMPRINT, draft,
|
||
fused, multi/two-sided, boolean, sweep/loft/COPY/pattern producers remain deferred.
|
||
direct-prism `SWEPT_FACE` 也可作为单侧 `up_to_surface` reference,但它不是 output role:lowering
|
||
只保留一个 direct source-profile edge anchor,resolver 必须逐段验证 `boundary` 以及后续
|
||
`continuation` 的 complete/proven kernel relation、operation-wide cardinality 和 active body。
|
||
`00925274` 的 F3 以 `extrude.start` 的 `operation_role` 解析;F6、F9、F12 与 F15 都以 F1 E0
|
||
side-wall `kernel_lineage` 依次经过 complete/proven 的 F3、F6、F9、F12 target-side subtract
|
||
continuation 解析。单实体 primary cut 现在始终保留其 cut builder 的 target snapshot history;仅
|
||
transient tool snapshot 仍要求 direct-prism tool history,故没有扩大 source-qualified `INTERSECT`
|
||
的工具可选范围。resolver 只在 selector 请求的 source/result topology kind 内计算 complete/proven
|
||
final-snapshot relation 的基数;没有 final snapshot member 的 partial intermediate handle 及 cross-kind
|
||
section diagnostic 保留在 delta 中但不伪造成 face fragment。任何绑定到 final result 的 partial、split、
|
||
merge、inactive 或无 history relation 仍稳定拒绝,绝不以 geometry、stable ID、binding ID 或 current
|
||
body 猜测。fresh `output/core-17-swept-face-final-20260910` 的 `tier=all` / pipeline / RP run 完成
|
||
17/17:2 `rebuilt_strict`(`00694309`、`00925274`)、1 `rebuilt_approximate`、6
|
||
`rebuilt_rejected`、7 `rebuild_failed`、1 `comparison_timeout`;`00925274` 为 strict/RP pass,不能
|
||
推广为一般到面终止或 general SWEPT_FACE completion。受控完整 `0040` shard 的 fresh
|
||
`output/shard-0040-swept-face-final-20260910-v2` 也完成 71/71:7 strict、9 approximate、16 rejected、
|
||
34 rebuild-failed、3 runtime-ineligible、1 timeout、1 deferred,并保留 32 个 comparison artifact;它是
|
||
shared runtime 回归分类证据,不把非 strict/RP 样本重述为 selector success。IMPRINT/split source profile、draft、多/two-sided extent、fused source result、未证明或
|
||
split continuation、boolean/SPLIT 后继、revolve、
|
||
sweep、loft、copy/pattern 及一般 SWEPT query 仍未完成,绝不能标记为 query-family 完成。
|
||
2026-09-14 的 `immediate_retained_source_prism_swept_face_up_to_surface` 是此处单侧 extent 的另一条
|
||
独立、非 continuation contract:producer 必须是紧邻的 1511 independent、undrafted、blind `new_body`
|
||
`extrude_add_blind`。它允许 IMPRINT profile 没有保留完整 source sketch,但 OSD 只能指向一个在 selected
|
||
profile 与原 source sketch 中均恰好出现一次、workplane 与完整 segment 完全相同的 original edge;selector
|
||
仅允许 `boundary`、不带 output role/stable ID/geometry/binding ID,也只能作为下一 feature 的
|
||
one-sided `up_to_surface` reference。semantic validation 与 capability preflight 重复检查 producer、source
|
||
import、精确 source edge 和即时 owner;runtime 仍只接受 adapter 已登记的 exact `Generated(source edge -> face)`
|
||
final-snapshot relation。`00408613` F1 -> F3 以 `F0/E0.bottom` 由 `kernel_lineage` 解析并执行;F4 仍在既有
|
||
`CAP_EDGE` query 停止,F3 checkpoint STEP 被保留。把 source entity 篡改为被 IMPRINT 排除的 `E1` 会同时被
|
||
semantic validation 与 runtime preflight 拒绝。该条不授权任意 IMPRINT region、多个/changed/split edge、draft、
|
||
ADD/CUT/two-sided、later continuation、其他 consumer/version,或任何 geometry/stable-ID/current-body/STEP fallback。
|
||
2026-09-13 增加的 `symmetric_direct_prism_shell_swept_face_up_to_surface_pair` 是另一条严格的双侧 extent
|
||
tuple:1511 direct undrafted `new_body` blind prism 之后必须紧邻一个只依赖该 prism 的 shell;两条
|
||
`SWEPT_FACE` query 必须来自同一 producer 的两个不同原始、非 construction line,且 shell 不能移除任一
|
||
target side。runtime 仍逐条证明 `edge -> prism side -> shell.offset_face` 的 complete/proven relation;不接受
|
||
`shell.closing_descendant`、partial/split/merge、其他 lifecycle 或任何 geometry/stable-ID/current-body/STEP
|
||
fallback。`00180262` F1 -> F2 -> F4 的两个 target 都以 `kernel_lineage` resolve 并执行,且新的 planar
|
||
supporting-surface extent 仅在有限 planar target 对全部 profile ray 都无 hit、但支持平面给出唯一正向等距时使用;
|
||
partial finite-face hit 仍走已有 trimmed-solid 语义。该 full rebuild 的 RP comparison 是 rejected,故这是
|
||
executable selector/extent evidence,不是相似性或 general two-sided `up_to_surface` completion。
|
||
`SWEPT_FACE` 还有一个与 extent 分离的 shell-removal continuation tuple:1511 的 independent、undrafted、
|
||
direct-source blind prism 后可有且仅有一个直接依赖它的 blind `extrude_cut_blind`,紧邻 shell 才可继续消费
|
||
prism 的一个 original non-construction line side face。runtime 必须先证明 source edge 到 prism side face 的
|
||
complete boundary,再证明 cut 的 target-side `BRepAlgoAPI_Cut` 将同一 face 一对一、complete/proven 地继续到
|
||
active member;shell 不可从 tool face、closing descendant、面几何、stable ID、current body 或 source STEP
|
||
取代其中任一环。`00020670` F1 -> F3 -> F4 是当前唯一的 native positive,F4 由两段
|
||
`kernel_lineage` relation 执行,完整 history 随后才在既有 F10 selector 停止并保留 F8 STEP checkpoint。
|
||
source-wide 9,347-history scan 的另外五条表面相似 form 分别是 immediate case、pattern COPY、two-sided 或
|
||
non-direct-profile/lifecycle rejection,故这是 bounded execution evidence,不是 general shell、general
|
||
SWEPT_FACE 或 RP acceptance;ADD、boolean、dress-up、COPY/pattern、multi-step、split/merge/deleted/inactive
|
||
continuation、revolve/sweep/loft、IMPRINT/partial profile 和其它版本均继续 deferred。
|
||
CADFS production rebuild 以一个 `IncrementalCdslExecution` 按 history 顺序执行:每个 feature
|
||
在执行前只对本 session 已登记的 topology snapshot 调用 resolver,随后立即执行并登记新的
|
||
body/history evidence。`binding_feature_id` 读取同一 session 保留的历史 snapshot,不能通过
|
||
重建 prefix 或复制 OCC body 获得结果。feature 或 selector 失败时,系统直接从该 session 导出
|
||
最后已执行 checkpoint;不会为尝试更早 prefix 而重放历史。`bind_candidate_selectors` 仍可为
|
||
不完整的外部/诊断 CDSL 显式运行 legacy prefix adapter,但不得进入 production success/failure
|
||
path,也不得将 provenance 或 output-role selector 降级为 geometry binding。
|
||
4. 完成草图 region/wire 模型:多轮廓、内环、开口 reference geometry、B-spline/ellipse、
|
||
profile query、显式 construction 和退化检测。
|
||
非周期 `skFitSpline` 的两点受限变体现已贯通:仅当端点不同、同时给出两端导数,且
|
||
CDSL 显式携带严格递增的参数域时,lowering 才以真实的 two-point B-spline 输出;它
|
||
绝不退化为直线。schema、semantic validation、sketch solver 与 adapter 共同拒绝缺失
|
||
导数/参数、周期两点和重合端点。solver 以参数域上的 cubic Hermite 采样检查闭环面积,
|
||
adapter 仍把端点切线与参数交给 OCP 插值,而非近似多段直线。历史快照中 453 个此类
|
||
entity 都带两端导数;当前 10 条历史反例矩阵的 9 个可生成候选保留了 18 条该曲线。
|
||
该增量只完成此一 profile contract,不覆盖由 `INTERSECT`、`CAP/SWEPT` 等拓扑查询
|
||
派生的 profile,也不把后续 dress-up 或内核失败误记为 spline 成功。
|
||
2026-09-14 增加了一个独立的同平面多来源 profile contract:一个 extrude 的顶层
|
||
`qUnion`(可含只由 `qUnion` 组成的关联嵌套包装)仅当每个 leaf 都是 `qSketchRegion(source, true)`、至少两个 source sketch
|
||
都已在 executable prefix 中、均无 runtime attachment、且其 `origin_mm` / `x_dir` /
|
||
`normal` 完全一致时,才 lower 为 `multi_source_regions`。CDSL 保留每个完整 direct
|
||
`circle` / `polygon` / `analytic_contours` child 及 source-sketch 列表,但不写单一
|
||
`source_sketch_id`,故 adapter 不会为这个合成 profile 伪造 source topology anchors。
|
||
sketch solver 对每个 child 独立分类 outer/hole region 后才组合,而不是把来自另一草图的
|
||
同心/嵌套 contour 误作孔;primary extrusion 对生成的 faces 仍使用现有 fuse 语义。`00011635`
|
||
的 F7 从 F6 两个三角区及 F4 两个 circle region 生成该 profile,F1--F7 fresh prefix
|
||
rebuild 全部执行。`00383990`、`00415720` 与 `00984782` 在该 contract 下完整 rebuild;
|
||
`00766980` 的 profile extrusion 执行后才在独立的后续 selector active-lineage 缺口停止,
|
||
`00891962` 则在其上游 CAP_FACE profile gap 前 defer。原子 runtime 回归以不同 source 的同心 `r=5` / `r=2` circle 证明结果为
|
||
外圆柱 `2*pi*5^2`,而不是带孔圆环。derived/CAP/SWEPT/IMPRINT/COPY/MERGE query、
|
||
`qIntersection` / `qSubtraction` 或 mixed combinator、future/unavailable source、attachment、不同或反向 frame、重复 source、
|
||
open/non-executable profile,以及所有 selector lineage/后续 topology consumer 都继续 defer;
|
||
任一 composed sketch-region union 未满足这些条件时必须以
|
||
`extrude_multi_source_sketch_region` defer,不能回退到 parser 最后遇到的 source sketch。
|
||
|
||
### P1:派生 profile 与拉伸终止
|
||
|
||
1. 用 P0 topology registry 通用重放 `CAP_FACE`、`CAP_EDGE`、`SWEPT_FACE`、
|
||
`SWEPT_EDGE`、`OFFSET_FACE`、`INTERSECT`、`MID_CAP_EDGE`,将其物化为可追溯的
|
||
profile/wire,而不是复用原草图或写入样本特例。现有 direct-prism,以及单闭合无内环、
|
||
法向同向的 `LocOpe_DPrism` draft CAP_FACE,是受限例外:它们以 builder-proven output
|
||
role 直接消费物理 B-rep 面,未试图物化或重建 profile。`OFFSET_FACE` 的端到端 status
|
||
同样只限于 capability matrix 所列、带 TDD source cap 的 direct shell output role;它不代表
|
||
任意 offset query 已可重放。`SWEPT_FACE` 与 `SWEPT_EDGE` 现在各有一条 1511 direct-prism
|
||
纵向 contract:source profile edge 经 `Generated(edge)` 到 side face,以及由完整 incident
|
||
source-edge set 唯一命名的 source vertex 经 `Generated(vertex)` 到 vertical edge。lowering 只在
|
||
producer 紧邻、独立、无 draft、`new_body` blind prism 且原 profile 未变时产生语义 selector;
|
||
adapter 只将 direct wire/face construction 中 exact `IsSame` anchor 注册为 transient source fact,
|
||
resolver 则只沿 complete/proven 跨 kind relation 解析。单一 analytic region 的 direct hole wires
|
||
也可在 finished face identity 未改变时提供这份 evidence:`00007264` 的四个 vertical-edge selector
|
||
皆已解析,`00039669` strict/RP passing,`00151159` RP passing;含 hole 的 multi-region profile
|
||
继续使用旧 geometry path 并明确不产生 anchor。`00111611` F3 的圆 edge -> side face、
|
||
`00974931` F2 的 direct annulus outer edge -> side face,与 `00000715` F3 的两个 incident-edge
|
||
pair -> vertical edge 为其它真实语料证据。direct all-circle construction 还保留 annular inner edge
|
||
及每个 direct circle region 的独立 delta;后者目前只有原子 executor evidence。IMPRINT 或 split
|
||
profile、draft、multiple/two-sided extent、fused result、boolean/SPLIT、revolve、
|
||
sweep、loft、copy/pattern 及 profile/wire consumer 也未覆盖。FeatureScript `2491` 另有一个
|
||
独立 full-solid-revolve `SWEPT_EDGE` contract:unchanged direct profile 的完整 incident source-edge
|
||
set 唯一命名一个 vertex,adapter 仅以 `BRepPrimAPI_MakeRevol.Generated(vertex)` 且 final-snapshot
|
||
`IsSame` 证明对应 circular edge;`00404735` F3 为执行证据,F2 的非共享 OSD pair 仍 deferred。
|
||
因此这些只是受限 end-to-end contract,`SWEPT_*` family 和 P1 的通用派生 profile 目标仍未完成,
|
||
不能由 AST、unit relation 或上述样本提前完成。
|
||
`BLEND_EDGE@1511` 也仅有一个独立 direct-prism/dress-up contract:`Generated(source_edge)`
|
||
patch face、唯一 `Modified(source_face)` target face 与它们 final `IsSame` shared boundary edge
|
||
必须全由 builder history 证明;source face 仅可为完整 direct `CAP_FACE`,或与 CAP edge 共用一条
|
||
original profile edge 的 direct `SWEPT_FACE`。`00414347` F2->F3 与 `00690433` F2->F3 均以
|
||
`blend_boundary` 执行;前者 fresh pipeline 为 RP pass(strict volume/area diagnostic 约
|
||
`5.7e-5` / `4.0e-5`),后者 comparison rejected。`00596552` F4->F5 与 `00456146` F3->F4
|
||
已验证 SWEPT_FACE source-pair lowering 和 exact resolver contract;其 fresh replay 分别在已有的
|
||
native chamfer feasibility 与其它 selector ambiguity 停止,故同样不构成 strict/RP 通过证据。
|
||
`BLEND_FACE@1511` 另有独立的 runtime-attached sketch contract:outer query 只能是一个
|
||
immediate native fillet/chamfer 的单一 `BLEND_FACE`,其唯一 OSD source edge 必须等于该 dress-up
|
||
已消费的、role-qualified direct-prism `CAP_EDGE`。producer 只限独立、无 draft、blind `new_body`
|
||
direct profile prism;adapter/runtime 只接受 complete/proven `Generated(cap_edge -> patch_face)` 的唯一
|
||
active final patch face,再由该实际 planar B-rep face materialize sketch frame。`00313870` F2->F3/F4
|
||
与 `00436592` F3->F4 是 source/lowering/runtime-attachment evidence:前者 full replay 在已有 native
|
||
F2 chamfer feasibility failure 前保留 F1 checkpoint,后者在已执行 F3 后因 later F6 unsupported query
|
||
停止,均不是 strict/RP 通过。multi-edge OSD、two-sided/IMPRINT/split/drafted or non-direct profile、
|
||
non-immediate/nested dress-up、MERGE/SPLIT/COPY/pattern/boolean successor、non-planar/ambiguous/partial/
|
||
inactive patch、other versions 以及 geometry/stable-ID/current-body/source-STEP fallback 仍拒绝;这不完成
|
||
general `BLEND_FACE` 或 generic face attachment。
|
||
`MID_CAP_EDGE` 仍未获得这一类 relation:对默认 smooth `BRepOffsetAPI_ThruSections`
|
||
loft,OCP 7.9.3.1 的 `Generated(source_edge)` 只给侧面,source 和中间 section edge
|
||
均不在 final snapshot;`FirstShape`/`LastShape` 也没有 source-shape overload。虽然
|
||
`ruled:true` 会保留 section edge,当前 23 条真实 MID 历史均未要求 ruled loft,不能以此
|
||
改写默认 loft 语义。`capPos` 不能通过排序、面边界遍历或几何邻近推测,故保持有界 defer,
|
||
直到有 exact source-section-to-final-edge witness 和多语料 consumer 回归。
|
||
`00614954` 的 cap role mismatch 和 `00407186` 的 revolve/SWEPT tuple 继续拒绝,不能把
|
||
patch face 或任意输出 edge 当作可用替代。
|
||
`CAP_VERTEX@1511` 现另有一条严格的 direct-prism `up_to_vertex` contract:OSD 必须恰好包含同一
|
||
unchanged direct profile 中两个不同、共享唯一原始端点的 source edge;adapter 以
|
||
`BRepPrimAPI_MakePrism.FirstShape(source_vertex)` / `LastShape(source_vertex)` 获取端帽 vertex,并以
|
||
final B-rep explorer 的 `IsSame` 将历史句柄绑定到最终顶点 record。由于 build123d 重复
|
||
`body.vertices()` 调用不会保留该句柄 identity,vertex record 改为从最终 B-rep explorer 导出;这不是
|
||
坐标或近邻匹配。lowering 只接受 `1511`、紧邻、独立、无 draft 的 `new_body` blind
|
||
`extrude_add_blind` producer 与 one-sided `UP_TO_VERTEX` consumer;resolver 只沿唯一
|
||
`boundary`、complete/proven、role-qualified `vertex -> vertex` relation。若 consumer 前仅插入
|
||
reference plane 或 independent undrafted `new_body` blind prism,且 session 对旧成员和新 Compound
|
||
member 的全部 face/edge/vertex 逐项作 reciprocal `IsSame`,registry 才追加 `body_member_preserve`
|
||
continuation;aggregate `body` metadata 不参与该 B-rep 校验,也没有几何等价匹配。真实 `00330726`
|
||
的 F1 -> F3 -> F5 因而已由 `extrude` + `body_member_preserve` 的 kernel lineage 执行;fresh
|
||
`output/cap-vertex-body-member-20260912` 完整历史仍因 F7/F8/F9/F10 的既有 sketch/cPlane/loft
|
||
缺口而 `converted_partial` / `rebuilt_rejected`(3 vs 4 solids),不能误报为质量通过。two-sided/draft/
|
||
ADD/CUT、IMPRINT/split/multi-profile、成员变异/替换/删除、不完整或不唯一 `IsSame`、COPY/pattern/
|
||
boolean、其它 consumer/version 与任何 stable-ID、geometry、current-body/source-STEP fallback 均不在
|
||
范围内,不能标记 `CAP_VERTEX` family 或 P1 extent 完成。
|
||
`source VERTEX@1511` 另有一条不经过 topology resolver 的 `UP_TO_VERTEX` datum contract:当 extent
|
||
query 恰为一个 direct source-sketch `sQuery(..., VERTEX, ...)`,lowering 保留
|
||
`{source_sketch_id, source_entity_id, point_mm}`,runtime 只将该已验证 source point 沿 extrusion
|
||
direction 作 uniform-distance 检查。selector-binding 明确不绑定该 datum,因而没有 runtime record、
|
||
`selector_intent`、stable ID、几何或 current-body fallback。`00444951` 的三个单向 datum extent 完整
|
||
convert/rebuild,fresh `/private/tmp/cadfs-source-vertex-extent-20260914-r2` strict/RP 均通过;
|
||
2026-09-14 的全语料 source audit 发现 16 个 `UP_TO_VERTEX` history:15 个已 lower target 为这条
|
||
direct datum(`00444951` 三个、`00510558` 四个、`00753006` 两个、`00894150` 三个以及
|
||
`00383982`/`00503730`/`00975649` 各一个),其余一个是 `CAP_VERTEX`、一个是
|
||
`INTERSECT(VERTEX)`;其余 history 在上游 capability 前停止。7-sample matrix
|
||
`/private/tmp/cadfs-source-vertex-extent-matrix-20260914` 中,`00510558`、`00753006`、`00894150`、
|
||
`00975649` 的所有 datum feature 均执行,`00503730` 也保留 F5 executable prefix;它们的整模 rejected/
|
||
partial 分别由 independent shell/workplane/pattern/geometry gaps 造成。`00383982` 在到达 datum feature
|
||
前因 unbounded IMPRINT profile runtime failure 停止,不能计入 datum success。`qAdjacent`/`COPY`/pattern/IMPRINT/
|
||
derived vertex、`INTERSECT(VERTEX)`、非 1511 source、非唯一/非有限 source point 和任意 selector consumer
|
||
仍 defer。这只补齐原草图 vertex 的 extent datum,不完成 general `up_to_vertex`、`CAP_VERTEX` 或 vertex
|
||
selector family。
|
||
`CAP_EDGE` 现在也有一条独立的 1511 direct-prism contract,但它不物化 profile/wire:source
|
||
sketch entity 必须仍对应一个 exact direct-profile edge,query 的 `isStart` 被保存为
|
||
`lineage_role: extrude.start|extrude.end`,adapter 以
|
||
`BRepPrimAPI_MakePrism.FirstShape(source_edge)` / `LastShape(source_edge)` 取得 cap edge,并以
|
||
final snapshot 的 `IsSame` 证明该 handle 未失效。resolver 只沿这个 source edge 与 role-qualified
|
||
`boundary` relation 解析;stable ID、几何、owner propagation 和 current-body 均不是回退路径。
|
||
`00021014` F2 的九个 CAP_EDGE selector 覆盖两个 role,完整 history strict/RP 通过。该例外只接受
|
||
紧邻、独立、无 draft 的 `new_body` blind prism 与未变 direct profile。一个 direct all-circle
|
||
annulus(一个外圆和一个包含的内圆)也可保留 outer/inner 的 exact source anchor:`00479470`、
|
||
`00501170`、`00526649` 在 F2 的 CAP_EDGE consumer 后 RP 通过,`00621329` strict/RP 通过;
|
||
`00566233` 的两个 F2 selector 已由 kernel lineage 解析,随后才因 OCC chamfer feasibility 失败,
|
||
`00614954`/`00678961` 也都在 F2 解析后才被后续未支持 query 截断。对于线段外环加圆孔,solver
|
||
仅给同一 source circle 拆出的全部四条 arc 加 `logical_circle_source_entity_id`;adapter 再要求这个
|
||
ID 在原 profile 中唯一指向一个未拆分圆、重建 native wire,并以 finished-face `IsSame` 重新证明。
|
||
任一 marker、source 或 final membership 缺失都没有 anchor。`00735367` 的 F2 因而以
|
||
`kernel_lineage` 解析。完整 candidate 在后续 F6 选择已不再独立存在的 F2 body 时保持
|
||
`runtime_ineligible`;rebuild 仍增量重放 F1--F3,随后在 F4 的
|
||
`selector_query_unsupported` 导出 F3 checkpoint,绝不因预检失败隐藏该 STEP。
|
||
不完整 logical-circle loop 不产生该 circle 的 anchor;含 hole 的 multi-region、trimmed/split profile、
|
||
draft、multiple/two-sided extent、fused result、boolean/SPLIT successor、revolve、sweep、loft、copy/
|
||
pattern 继续拒绝。
|
||
对 direct-prism `CAP_EDGE` 的 fillet/chamfer consumer,boundary-only policy 另可在运行时存在
|
||
完整 kernel continuation 时扩展为 `boundary + continuation`:每一跳都必须为 exact
|
||
`preserved`/`modified` relation、`coverage: complete`、`status: proven`,且 operation-wide
|
||
cardinality 保持 1:1;任何 partial、split/merge、inactive result 或无 history 都稳定拒绝。
|
||
`00694309` 证明这一条:F4 的 F1 `extrude.start` cap edge 经 F3 primary-cut `preserved`
|
||
continuation 解析为 `body:f_F3:edge:1`,完整 pipeline `output/cap-edge-continuation-after-primary-cut-20260910-v1`
|
||
的三 feature history strict/RP passing。任何 boolean/SPLIT、COPY/pattern 或其它中间操作也必须
|
||
提供同样完整的 1:1 relation;它们目前没有独立的 corpus coverage,不能仅按 owner/operation 名称
|
||
通过。这个 contract 也不接受任意 CAP_EDGE source,且没有 geometry、stable-ID、
|
||
binding-ID 或 current-body fallback。fresh
|
||
`output/core-17-cap-edge-continuation-20260910-v1` 的 `tier=all` / pipeline / RP run 完成 17/17:
|
||
1 `rebuilt_strict`(`00694309`)、1 `rebuilt_approximate`、5 `rebuilt_rejected`、9
|
||
`rebuild_failed`、1 `comparison_timeout`。这只确认该完整 relation contract 将此样本从 F3
|
||
executable prefix 推进为实际 strict/RP pass,不能作为 CAP_EDGE family completion 或 general
|
||
boolean continuation 的证据。
|
||
共享 selector/runtime suite 为 261 passed、1 skipped;强制 core-17
|
||
重跑 `output/core-17-direct-prism-cap-edge-hole-20260910` 为 1 RP、5 rejected、10 rebuild-failed、1
|
||
comparison timeout,与 selector-migration 基线分类一致。因此 `CAP_EDGE` family 与 P1 的通用派生
|
||
profile 目标仍未完成。
|
||
`OFFSET_FACE` 现有一个独立的受限 profile 物化路径:只有 inward shell 直接消费一个
|
||
`new_body` blind additive prism,shell 恰移除该 prism 的一个 CAP,且 OFFSET query 恰指向
|
||
其未修改、单闭合凸线性 profile 中的一条非 construction line,lowering 才根据 source
|
||
profile 的相邻边 offset 交点、shell thickness、实际 start/end cap frame 构造四边内壁。
|
||
它不复用整张 source sketch,也不从 STEP 反推 trim;draft、cut/fused/multi-body source、
|
||
多 removal cap、曲线/凹/多 contour profile、多个 source edge 和非正交 span 都保留
|
||
`extrude_profile_topology:offset_face` 诊断。`00789939` 的 F15 是严格通过的完整 history
|
||
正例;`00588094` 的非直接 provenance 则保持 partial conversion 和五 feature executable
|
||
prefix,后续 F15 的 output-role binding failure 仍单独报告。`output/offset-face-linear-wall-20260909-r3`
|
||
记录前者 strict/RP 通过;当前 26 条含 `OFFSET_FACE` history 的受控 shard
|
||
`output/offset-face-profile-shard-20260909-r1` 为 1 strict、17 rejected、7 rebuild failure、
|
||
1 deferred-no-executable-feature,仍有 17 条明确的 `extrude_profile_topology:offset_face`
|
||
gap。`output/core-17-offset-face-linear-wall-20260909-r2` 为 4 strict、3 RP、9 rejected、1
|
||
comparison timeout,故这仍是派生 profile 的部分完成项而非 general OFFSET replay。
|
||
另一个不重建草图的 1511 端盖 profile 例外为
|
||
`shell_retained_direct_prism_cap_offset_face_profile`:紧邻 shell 必须只依赖一个未拔模的
|
||
direct `new_body` blind prism、恰移除该 prism 的一个 CAP;后续 OFFSET query 必须由一个
|
||
OSD 完整列出未改变 direct profile 的全部 source edge。lowering 用被移除 CAP 的反角色
|
||
source-qualify `shell.offset_face`,semantic/preflight 复核 direct producer、唯一 removal、
|
||
immediate owner、完整 source set 与单侧 blind additive `new_body` consumer;runtime 仍要求
|
||
唯一 active `CAP -> shell.offset_face` complete/proven kernel relation,绝不以 wall、closing
|
||
descendant 或几何接近面代替。`00719927` F1--F4 在
|
||
`output/offset-face-retained-cap-20260913` 全部执行,F3 绑定 `F1/extrude.start` 的 retained
|
||
cap;其 strict/RP 均 rejected,故这是 executable evidence,不改变上述受控 shard 的历史计数,
|
||
更不代表 general OFFSET_FACE 完成。partial/multi-source OSD、多 CAP removal、被移除 cap、
|
||
draft/cut/fused/revolve/sweep/COPY/pattern producer、non-immediate lifecycle、非 1511 和所有
|
||
geometry/stable-ID/current-body/source-STEP fallback 继续拒绝。
|
||
对 CAP_EDGE,现有的受限 outer-profile 规则还会递归展开仅由 `qUnion` 构成的关联嵌套,
|
||
再要求恰有一个原始闭合 IMPRINT 外 region 和一个唯一 CAP_EDGE-derived IMPRINT region,
|
||
并由两个明确 face-side 判断完整外 region 或外环加孔。该展开只消除 FeatureScript 局部
|
||
alias 引入的集合包装,不改变 query provenance,也不放宽 owner、曲线或 side 的唯一性。
|
||
`00950564` 的 F3/F5 是这一语义的真实证据:两个 CAP_EDGE profile 都完整 lower,F1--F12
|
||
history 也因上述单 body successor rule 完整执行并 RP 通过。它不覆盖一般 CAP_EDGE、CAP
|
||
edge 物理重放、COPY/boolean/pattern 后继或未证明的 region 选择。双向 blind extrusion
|
||
同样沿用单向 CAP 顺序:`isStart:true` 是主方向的反侧端盖,`isStart:false` 是主方向端盖;
|
||
因而 second depth 趋近于零时保持同一 contract,不按 primary/reverse 字段名称猜测。
|
||
`00247322` 的 F4 以 `z=40.3 mm` 的反侧 cap 附着 F6,F5 后该 F4 owner 仍有唯一
|
||
continuation,F7 的 CAP_EDGE hole profile 可执行。后续 F9 选择已被 F5 消耗的 F4 member,
|
||
故保持 `body_source_unavailable`,不烘焙 transform 回 F4 草图或替换为 aggregate body。
|
||
刷新的 `output/cap-edge-two-sided-frame-matrix-20260909` 三样本矩阵为 1 个
|
||
`rebuilt_approximate`(`00950564`)、1 个 `rebuilt_rejected`(`00803284`)和 1 个
|
||
`runtime_ineligible`(`00247322`,但 F1--F7 prefix 可执行)。共享 lowering 的固定核心
|
||
17 工件 `output/core-17-two-sided-cap-frame-final-20260909` 分类为 3 strict、3 RP、9 rejected、
|
||
1 rebuild failure、1 comparison timeout,与此前共享基线一致。受控全量 24 条 shard
|
||
`output/full-shard-two-sided-cap-frame-20260909` 记录 1 strict、2 RP、10 rejected、6 rebuild
|
||
failure、3 runtime-ineligible、1 timeout 和 1 无可执行 feature;其 conversion diagnostics
|
||
仍归因为已有的 `cPlane`、CAP_EDGE、fillet/chamfer、hole、revolve 与 shell selector 缺口,
|
||
没有将它们重分类为双向 CAP frame 成功或失败。
|
||
`INTERSECT` 的第一条通用受限路径现以 CDSL `planar_imprint` 保存同一草图的原始
|
||
analytic entities、IMPRINT 面侧、可选 INTERSECT vertex order 与 fragment side;solver
|
||
仅转换这些精确曲线,adapter 用 OCP `BOPAlgo_Splitter` 切分有界 support face 后选取实际
|
||
B-rep region。top-level `IMPRINT FACE` 的 multi-face query 只有既有的
|
||
`_profile_selection_sketch` 不能将它缩减为单一/圆形/open 专用 profile 时,才进入该 typed
|
||
arrangement profile;不能把 nested `INTERSECT` 误当作 outer profile family,也不能抢占
|
||
existing circle/open/surface IMPRINT contracts。没有唯一 fragment、选中无界 support-boundary
|
||
region、construction/source alias、split failure 或不完整 query 都稳定拒绝,不把 B-spline/arc
|
||
采样成多边形,也不复用整张草图。该路径覆盖 bounded line/arc/circle/ellipse/B-spline
|
||
arrangement 的 shared contract,但尚未覆盖不同 sketch、surface/topology producer、trim/copy/
|
||
pattern 后继或完整 FeatureScript IMPRINT query grammar,因此仍是 P1 部分完成项。
|
||
`output/planar-imprint-multiface-20260910` 的 seven-source forced RP matrix 验证这个收紧后的
|
||
分派:`00304488`、`00253824` rebuilt_rejected;`00354246` 在 F2 deferred `SWEPT_FACE` 时保留
|
||
F1 checkpoint,`00306689` 在 F1 OCC `BRep_API: command not done` 失败,`00784127` 在 F1、
|
||
`00782218` 在 F2 因 selected region unbounded 拒绝(后者保留 F1 checkpoint),`00429745`
|
||
在 F1 OCC extrude 无有效 solid 时拒绝。该 matrix 不把任一 IMPRINT-derived profile 的下游
|
||
`SWEPT_FACE` 视为完成:它们保留 source intent 并由 shared resolver 有界拒绝。当前 shared
|
||
selector/runtime suite 为 262 passed、1 skipped;强制 core-17
|
||
`output/core-17-planar-imprint-multiface-20260910` 为 1 RP、5 rejected、10 rebuild-failed、1
|
||
comparison timeout,与 selector-migration 基线一致。工件
|
||
`output/planar-imprint-intersect-20260909-runtime` 是 CAP_FACE 扩展前的历史工件:
|
||
`00082324` 与当时的 `00835610` 都保留可执行 STEP 但 `rp.passed == false`,`00071859` 和
|
||
`00093912` 分别保留既有 `TopoDS::Solid` 和 revolution-segmentation runtime failure。
|
||
当前 `output/drafted-cap-face-20260909` 已证明 `00835610` 在 drafted CAP_FACE continuation
|
||
与该 IMPRINT 后续均执行时 RP 通过;这不改变 `planar_imprint` 的其它失败分类,也不构成
|
||
该能力的完整覆盖。共享核心 17 回归
|
||
`output/core-17-planar-imprint-20260909` 分类保持 3 strict、2 RP、10 rejected、1
|
||
rebuild failure、1 comparison timeout。
|
||
2026-09-10 的 direct prism/fuse bridge 只对多个 bounded IMPRINT region、blind one-direction
|
||
extrusion 且每一条 source anchor 均由 exact splitter image 给出的 path 启用。每一区域先由
|
||
`BRepPrimAPI_MakePrism` 产生 direct history,随后一个 `BRepAlgoAPI_Fuse` 将 direct cap、side face、
|
||
cap edge 与 vertex-swept edge 映射至 final B-rep;registry 只登记 final-handle relation。fuse
|
||
删除的 source seam 显式以 partial/unknown relation 保留,`all_fragments` 必须报
|
||
`selector_kernel_history_missing`,而不是在 final solid 中找相邻面。合成矩阵覆盖 complete
|
||
outer side、split outer source、deleted seam、single-result ambiguity 和两端 CAP set;`00354246`
|
||
的 F2 seven `SWEPT_FACE` queries 现由 native kernel lineage 解析,并随后以 OCC 的
|
||
`Failed creating a fillet with radius of 5.08` 失败,证明失败层已从 selector 转移至 dress-up。
|
||
`00403485` 的 F2 仍因两个 deleted side branches 报 `selector_kernel_history_missing` 并保留
|
||
F1 STEP;不能用它作为 completed family 或通过 geometry recovery。`00253824`、`00304488`、
|
||
`00354246`、`00403485` 的 fresh forced RP pipeline 位于
|
||
`/private/tmp/cadfs-imprint-prism-fuse-20260910`:1 rebuilt_rejected、3 rebuild_failed,所有
|
||
可执行 prefix 保留。共享 selector/runtime tests 为 162 passed、1 skipped;fresh core-17
|
||
`/private/tmp/cadfs-core17-prism-fuse-20260910` 为 2 strict、1 RP、6 rejected、7 rebuild failed、
|
||
1 comparison timeout,与既有分类一致。此项仍为部分完成,尚缺三条可 RP/strict 接受的真实
|
||
IMPRINT 生命周期、一般 fused relation component、draft/trim/multi-extent、多 body 与后继 lifecycle。
|
||
对同一逻辑 circle source,solver 现在保留一条带 workplane frame 的 OCC circle edge,而不将
|
||
它预拆为四条 contour arc;fragment 的 directed successor/predecessor 由 splitter image 在
|
||
精确交点处的端点和原 curve 同向切向解析,避免周期参数接缝的数值排序歧义。无 fragment
|
||
的 source 代表全体 splitter descendants:只有其给定 face side 的每一个 B-rep face 都有界时,
|
||
adapter 才保留完整 face 集;任一 support-boundary face、非唯一 side 或 fragment 都拒绝,
|
||
不按 image 顺序/长度选择或静默省略。`output/intersect-circle-imprint-matrix-20260909-r2`
|
||
记录 `00001313` F1/F3 完整执行但 RP 拒绝(bbox delta `0.023571 mm`)、`00004246`
|
||
的 F1/F3 executable prefix 和三个仍有归因的失败。`00040869` 的 line/ellipse
|
||
`OD(0)` pairs 以 OCP exact distance 均为 `0.004240908 mm`,没有 splitter image 或
|
||
section edge,故 `output/intersect-circle-imprint-source-gap-20260909-r1` 保留 F1 prefix
|
||
并报告 source/anchor 无实际交点,绝不以容差补点;核心 17
|
||
`output/core-17-intersect-circle-imprint-20260909-r2` 为 4 strict、3 RP、9 rejected、1
|
||
comparison timeout。故这仍只是同草图有界 exact-curve arrangement 的 P1 扩展,不能宣称
|
||
general INTERSECT replay 已完成。
|
||
2. `UP_TO_NEXT` 已 lower 为 CDSL `through_next`,并有一个受限的 current-body
|
||
contract:所有 profile sample ray 都在当前 body 命中时,保留 profile 到首个正向
|
||
命中面之前的外部材料;只有部分 ray 命中时,以实际命中 face 做有限体层裁剪;没有
|
||
命中时明确拒绝,不退化为盲拉伸。`00192744` 的 F5/F10/F14 已由该 contract 完整
|
||
执行,但其独立 body 与 source STEP 的融合差异、后续 multi-body transform 和 source
|
||
history/STEP 不一致仍单独分类。这是部分完成,不代表复杂 profile、多 body target、
|
||
source body lifecycle 或第二方向终止已支持。
|
||
3. 在上述受限路径之外,完成 `up_to_surface`、`up_to_next`、`up_to_body`、
|
||
`up_to_vertex`、two-sided、through-all、surface/mixed 的有限交集语义和多 body
|
||
target 选择。
|
||
4. 仅在所有 profile rays、target body 和 offset 均能由通用几何验证时执行;否则保留
|
||
前缀并说明哪一个终止条件无法证明。
|
||
|
||
### P2:实体特征的完整语义
|
||
|
||
1. `extrude`、`revolve`、`loft`、`sweep`:补齐实体/曲面模式、复杂 profile、导轨、
|
||
section correspondence、twist/transition、path/axis selector 和结果 body。现有 direct
|
||
initial/new-body simple sweep 与 initial simple loft 现可将 builder-proven cap evidence
|
||
作为受限 CDSL output-role selector 供 downstream feature 消费;同一 contract 还支持
|
||
independent blind prism CAP_FACE 的 `extrude_from_face`。这些路径仍不能代替完整的
|
||
derived-topology selector 语义,CADFS lowering 也尚未以此表示一般 CAP/SWEPT query。
|
||
capability matrix 中 `SWEPT_FACE@1511` 与 `SWEPT_EDGE@1511` 另有 direct-prism 的受限
|
||
end-to-end contract:独立、无 draft、`new_body` blind prism 的 direct source profile edge/
|
||
vertex(含一个 analytic region 的 exact hole wires)由 exact construction anchor 和 `Generated`
|
||
cross-kind history 绑定给紧邻 consumer;含 hole 的 multi-region profile 不产生这类 anchor。
|
||
这不覆盖本段 sweep/loft/revolve 的 output role,亦不把任一受限 output role 或特征专用
|
||
selector 升级为通用 CADFS query-family 支持。`SWEPT_EDGE@2491` 还登记了一个独立 full-solid
|
||
revolve source-vertex -> circular-edge contract;它必须以 `MakeRevol.Generated(vertex)` 的 complete
|
||
final-snapshot relation 解析,不与上述 prism contract 共用版本或 producer 假设。
|
||
对 `sweep.path`,另有一个 source-sketch-only lowering contract:FeatureScript 1511 和直接
|
||
`onshape/std/geometry.fs@1511.0` import 下的 exact singleton
|
||
`qUnion([qBodyType(qCreatedBy(sketch, EDGE), WIRE)])`,可带 exact
|
||
`qConstructionFilter(..., NO)`。它从 source sketch 的 `EDGE` 曲线集取路径,绝不是 runtime
|
||
`qBodyType` selector;`skPoint` 不属于该集。singleton `line` / open `skArc` / `bspline` 保持既有
|
||
contract;另外允许一个原始闭合 `skCircle`:它可由唯一 direct `sQuery` 命名,或由上述 exact
|
||
source-wire query 的完整结果唯一选择,携带精确 center/radius 与 source workplane,并作为一条
|
||
closed `Wire` 传给 PipeShell。arc 与 circle 都不能从
|
||
`qUnion` representative leaf 截断或伪造 singleton。闭合 circle 没有 physical start/end cap,因而不写
|
||
`cap_output_contract`、`swept_face_contract`、`swept_edge_contract` 或任何 endpoint output role。两点
|
||
`skFitSpline` 必须同时携带 source start/end derivative,
|
||
否则拒绝,绝不改成 chord。多段 form 有两种
|
||
source-only 边界:一个直接 source sketch 的完整 query result 可含至少两条 `line` / `arc` /
|
||
non-periodic `bspline`;或 outer `qUnion` 可含至少两个上述 exact wire-query operand,每个 operand
|
||
仍独立经过相同 version/filter/source gate。前者使用同一 workplane;后者把每条 direct source curve
|
||
通过其显式 sketch workplane 捕获为 global 3D segment,绝不将多个 sketch 的局部坐标投影到任意一个
|
||
sketch,也不读取 datum output、OCC result、final STEP 或 current body。filter 存在时去除 construction
|
||
curves;无 filter 时只要任一 operand 的 source result 含 construction curve 即 deferred。lowering
|
||
仅按精确 source endpoints 验证、排序为 connected、non-branching、open wire,且拒绝重复
|
||
`(source_sketch_id, source_entity_id)`;跨 sketch variant 的 self-contained `path.segments` 不携带虚构的
|
||
common `workplane`,只保留每段 global geometry、方向与 source identity。两种 form 均由
|
||
`BRepBuilderAPI_MakeWire` / `BRepOffsetAPI_MakePipeShell` 执行;profile 在 terminal point 时仅反转已
|
||
捕获路径方向,circular pattern 也会显式旋转所有 global curve point/vector fields。closed、
|
||
disconnected、repeated/branching、degenerate、ellipse/unknown curve、非 exact wrapper/filter、其它
|
||
version,以及 loft guide/surface/profile/runtime-body consumers 均继续拒绝或 deferred;该 CDSL
|
||
`path.segments` contract 不产生 `selector_intent`、topology lineage、CAP output-role 或 stable-ID fallback
|
||
permission。
|
||
`00175627` F2 是 singleton direct `skArc` 的 execution evidence:以显式 source arc 完整 rebuild,
|
||
但 RP comparison 当前 rejected,不能称为相似通过。`00007135` F2 还证明 direct arc 的 CAP endpoint
|
||
contract 可准确解析;其后 F3 shell 是独立 OCC failure,F2 STEP prefix 保留。`00030209` F6 也能 lower
|
||
arc path,随后因既有 multi-region profile runtime boundary 停止。相同 source-wire contract 的 exact
|
||
`qBodyType(qCreatedBy(sketch, EDGE), WIRE)` 结果若完整选择恰好一条原始 open `skArc`,也可作为
|
||
singleton path:这是 complete source set 的 cardinality proof,不是 parser 保留的 `qUnion` representative
|
||
leaf。`00109840` F2 与 `00627942` F2 均 converted/rebuilt;`00071885` 已通过该 path gate,但其 profile
|
||
attachment 独立失败为 `reference plane x direction is degenerate`,故没有 CDSL 可执行 feature。该边界
|
||
不开放 general `qBodyType`、runtime topology selector、general circle path 或 multi-leaf representative fallback。
|
||
`00498974` F2 进一步证明 filtered source-wire 的完整结果唯一为 circle 时,可不经 parser leaf 执行并
|
||
rebuilt;其 F3 以后的 `SWEPT_FACE` host 仍独立 deferred,故只保留 F2 prefix。多 circle、mixed curve、
|
||
construction ambiguity、closed multi-segment wire 与其它 source version 仍不在此 closed-circle tuple 内。
|
||
fresh 9,347-history lowering scan 因此为 6,625 `converted_complete`、2,371 `converted_partial`、351
|
||
`deferred_no_executable_feature`、zero exception;`sweep_path` 已为 zero,仍有 62 条独立的
|
||
`sweep_path_query` contract rejection。closed-circle source-wire bridge 后的同一 fresh scan 保持 zero
|
||
exception,`sweep_path_query` 降为 61。
|
||
`00232443` F2 和 `00310959` F2 是
|
||
direct singleton `skCircle` 的完整 executable evidence:二者均重建为一个 solid;`00074481` F2 同样
|
||
执行并在后续无关 F4 OCC failure 前保留 STEP prefix。该结果只证明闭合-spine execution,不是
|
||
strict/RP similarity claim,也不为 CAP/SWEPT selector 生成角色。closed/derived arc、multi-`sQuery`
|
||
representative arc/circle、closed multi-segment wire 与其它 source version 继续不支持。`00896761` F2(F1/E2 two-point B-spline)现在
|
||
converted/rebuilt 且无 runtime diagnostic,artifact bundle
|
||
`output/qbodytype-direct-sketch-wire-20260910-v2` 包含 STEP、GLB 和七视图;但 RP comparison 在 60s
|
||
预算超时,分类为 `comparison_timeout`,不是相似通过。fresh seven-sample RP matrix
|
||
`output/qbodytype-direct-sketch-wire-matrix-20260910-v1` confirms all direct-path cases rebuild: `00191739`
|
||
strict, `00726304` RP-only approximate, `00227428`/`00287471`/`00500952`/`00816123` rejected, and
|
||
`00896761` timed out during comparison. `00885126` F2 is the first unfiltered multi-segment evidence:
|
||
`E0 -> E2.filletArc -> E1` rebuilt as an independent STEP in
|
||
`/private/tmp/cadfs-segmented-wire-00885126-20260910`, while the full sample is RP-rejected because F3+ remain
|
||
deferred. These classifications are execution evidence, not similarity claims. `00786708` is the filtered
|
||
line/arc/line evidence: F2 lowers and executes, as do downstream F5 and F7; its complete three-feature
|
||
history is `rebuilt_rejected`, not deferred at F2 or a similarity success. This is not generic `qBodyType`,
|
||
`qConstructionFilter`, general sweep path, loft guide, circle/closed or derived arc path, or sweep completion. `00610979` supplies the
|
||
first cross-sketch execution evidence: F4's outer union of F1 and F3 exact filtered wires is captured as four
|
||
connected global segments and executes as one independent solid in forced pipeline
|
||
`output/cadfs-spatial-wire-00610979-20260910`; F2/F4 have no runtime diagnostic and the artifact contains the
|
||
executable STEP, GLB and seven-view render bundle. Its complete history remains `converted_partial` / `rebuilt_rejected` because F5/F9 CAP_FACE
|
||
attachment and their downstream operations remain deferred; source final STEP has four solids while the retained
|
||
F4 prefix has one. This is a bounded executable-prefix classification, not RP/strict or sweep-family completion.
|
||
同一 source-wire query 另有一个严格独立的曲面 loft bridge:`ToolBodyType.SURFACE`、`NEW`、无
|
||
spine/guide/connection/match/endpoint derivative/sheet profile 时,两个来自不同 source sketch 的完整
|
||
non-construction closed wire 才可 lower 为 `loft_surface`。它支持单一 circle 或由 direct line/arc/B-spline
|
||
组成的 connected non-branching closed cycle;adapter 以 `BRepOffsetAPI_ThruSections(False, False)` 生成
|
||
shell 并独立登记,绝不 fuse 到 active solid,也不开放 surface topology 的 selector continuation。
|
||
`00174697` 以两条圆 source wire fresh rebuild 为一张 shell(`surface_count: 1`、`solid_count: 0`)。
|
||
open/branched/disconnected/inner/derived/runtime wire、construction ambiguity、spine/guide/derivative、
|
||
非 `NEW` 或其它 source version 一律 `loft_surface_wire_profiles` deferred;这不是 general loft、general
|
||
`qBodyType`/construction filter 或 surface selector completion。
|
||
`sweep_cut` 现是一个独立 primary body operation:对已经满足现有 closed-profile 与 open-path
|
||
contract 的 `NewBodyOperationType.REMOVE/CUT`,runtime 将 PipeShell 结果只作为 transient tool,逐个
|
||
active body member 调用带 history 的 `BRepAlgoAPI_Cut`;只有 target-side complete/proven delta 才进入
|
||
body graph,tool 的 sweep builder history、CAP/SWEPT roles 和 source anchors 不得泄漏为 selector lineage。
|
||
`00259897` F7 与 `00229963` F10 都完成完整 replay,但当前 RP 均 rejected,因此这是 operation execution
|
||
evidence 而不是 geometry acceptance 或 generic sweep/selector completion。INTERSECT、tool selector、guide/
|
||
transition、open/多 profile、surface sweep、后续 sweep-derived topology query 与不支持的 path source 仍 deferred。
|
||
2. `shell`:单一 selected solid 的 direct-builder topology delta 与有限 output-role
|
||
evidence 已覆盖。CADFS lowering 现额外接受一个受限的 removal selector:直接 blind 或
|
||
two-sided linear extrusion 的立即后继 shell,可从同一未修改 source profile 中唯一的、非
|
||
construction `line` 原始实体生成平面 `SWEPT_FACE` placeholder,再由 prefix snapshot
|
||
唯一绑定。该规则要求 owner、profile、start/end frame、blind extent 和单 body
|
||
lifecycle 都可证明;revolve/sweep/loft、圆或其它非线性 source、changed profile、copy/
|
||
pattern/boolean/dress-up continuation 和多 target body 均继续诊断,不能回退到当前 body
|
||
或相近面。CADFS `oppositeDirection` 已显式 lower 为 `inward:false`,由既有 OCC
|
||
`MakeThickSolidByJoin` 的有符号 offset 执行;这只复用已验证的 removal selector 和单一
|
||
selected solid contract,不会将 OCC feasibility failure 伪装成 inward shell 成功。仍需任意
|
||
稳定 removal face、多 body target、其它 join/offset 参数语义和更广的 kernel failure
|
||
诊断回归。作为进一步的窄例外,紧邻 shell 的 `OFFSET_FACE` removal query 可在其
|
||
`disambiguationData` 中只有一个 direct `TDD` CAP source,且 source 是前序 direct
|
||
`new_body` blind-prism cap 时 lower 为 `shell.offset_face` 加 source-qualified output role。
|
||
没有 `TDD`、多个 source、draft/fused/COPY/pattern/boolean source、非邻接 owner 或无
|
||
active unique snapshot 都稳定诊断。`shell.parts` 现有一个独立且同样受限的 body-source
|
||
lifecycle contract:只有 parts query 可唯一解析为仍存活的 direct `SWEPT_BODY` independent
|
||
member 时,lowering 才写入 CDSL `target_feature_id`;capability preflight 和 runtime 都要求
|
||
该 ID 的 exact B-rep solid 仍在 active member graph 中,不能以 `session.body`、current
|
||
aggregate 或几何近似替代。`00107631` F3 中 F1 可证明地继续为 `f_F2`,因而是正例;
|
||
`00542223` F7 在 fuse/pattern 后不再有独立 member;runtime 仅在 pattern 前后都是一个
|
||
可执行实体且 source 唯一时保留 direct source 的 sole-body alias,因此 parts-scoped shell
|
||
可以验证为当前实体,而不把 aggregate 伪装成一个独立 member。此路径尚未覆盖 multi-part /
|
||
multi-body parts query、COPY、boolean 或 pattern instance 的通用 successor;这些情形必须
|
||
保留可执行前缀或既有运行路径,不能宣称 explicit target-body semantics。实现参考
|
||
SimpleCADAPI(Apache-2.0)`IsSame` member identity 语义,未复用代码;其单 Solid boolean
|
||
假设未被采用,因为它与 CADFS 的独立 body 生命周期不兼容。当前验证为:受影响
|
||
lowering/integration/selector/runtime suite `218 passed`(3 条既有 workplane warning);
|
||
`output/core-17-shell-parts-20260909` 为 3 strict、3 RP、9 rejected、1 rebuild failure、1
|
||
comparison timeout。`output/shell-parts-matrix-20260909` 的 21 实样本中,10 个 shell 写入
|
||
explicit `target_feature_id`,结果为 13 rebuilt-rejected、7 rebuild-failed、1 runtime-ineligible。
|
||
`00107631` 的 F3 在这项 target contract 下通过 converter/preflight。其普通、非 instance-locked
|
||
`CAP_FACE` selector 只有在 active owner candidates 均不满足完整 geometry signature 时,才可在
|
||
当前 active member 中选择唯一的 threshold-qualified face;这不能替代 `output_role` relation,
|
||
也不适用于 `owner_match_required` COPY provenance。因而 F3 的两张 removal faces 分别严格绑定
|
||
为 `f_F2:face:1` 和由 `(f_F1, extrude.start)` 证明的 `f_F2:face:5`。该 feature 随后由 OCC
|
||
报告 invalid thick-solid,而不是 selector-not-found;系统保留 F2 executable STEP prefix,不会
|
||
修改厚度、重选面或伪造 shell 成功。`00542223` 的完整 history 现可 rebuild,但仍因几何比较
|
||
rejected;这不是 RP 通过声明。`output/core-17-fused-sole-body-pattern-provenance-20260909-r2`
|
||
的新代码工件为 3 strict、3 RP、10 rejected、1 comparison timeout;五样本
|
||
`output/fused-sole-body-pattern-provenance-20260909-r2` 中 `00542223` 与 `00423838` 均为
|
||
rebuilt/rejected,`00293508` 保持 RP,`00253824` 仍在无关 `planar_imprint` 路径失败并保留
|
||
F3 prefix。这些结果不能作为 complete shell 或 RP 相似通过的证据。
|
||
无 geometry 的普通 context selector 同时保留既有的唯一 active same-kind record 回退;它只在
|
||
source owner 没有 active record、context 内候选唯一时成立。`owner_match_required` 的
|
||
COPY/instance selector 没有此路径,零 owner candidates 仍是 `selector_not_found`。该边界的
|
||
原子正反测试与完整 CADFS 测试均通过(11 个 selector test、118 个 CADFS test)。刷新后的
|
||
`output/core-17-selector-context-full-20260909` 仍为 3 strict、3 RP、9 rejected、1 rebuild
|
||
failure、1 comparison timeout;`output/shell-parts-selector-context-fallback-matrix-20260909` 的
|
||
21 条分类仍为 13 rebuilt-rejected、7 rebuild-failed、1 runtime-ineligible。这是 selector
|
||
绑定范围修正,不增加 shell 的已完成语义,也不改变 OCC invalid-shape 的保留前缀诊断。
|
||
3. `fillet`、`chamfer`、`hole`:完整 selector、tangent propagation、参数变体、
|
||
feasibility 检查和 dress-up 后继。当前 fillet/chamfer lowering 对 direct blind/
|
||
mid-plane extrusion 的唯一源端点,以及 direct two-section loft 的每 section 一对唯一
|
||
源端点,可生成可绑定的 endpoint-bbox `SWEPT_EDGE` selector;前者额外证明为直线,
|
||
后者不声称曲线类型,因为内核可将其物化为 B-spline。`1511` 与 `2491` 均有一个独立 `NEW`
|
||
full-solid revolve 的 source-vertex contract:profile 与 line axis 必须来自同一 source sketch,
|
||
original-set 的至少两条 non-construction edges 必须唯一指向一个 non-axis vertex;adapter 仅接受
|
||
`BRepPrimAPI_MakeRevol.Generated(vertex)` 中仍属于 final snapshot 的 exact edge。`1511` 只接受
|
||
原始、非 `IMPRINT` 的 profile source;`2491` 可额外接受 materialized workplane 和完整 profile
|
||
均经显式验证未改变的 complete materialization。`00025622` F2 与 `00048326` F3 已 strict rebuild,
|
||
`00407186` 仅证明 F2 初始 dress-up,F3 的非唯一 continuation 仍必须拒绝。此处不使用 axis
|
||
projection、circle centre/radius 或 OCC geometry signature 绑定。任何 changed/incomplete/split
|
||
materialization 或实际 region 选择都不继承 revolve source vertex。该受限路径不覆盖 sweep、surface/partial/fused revolve、
|
||
multi-section loft、generated/trimmed/transformed profile 或 boolean/pattern 后继;任一
|
||
端点、axis 或 owner 不唯一时必须保留前缀并诊断。内核不能完成时不能伪造较小半径或不同
|
||
孔型。旧 endpoint-bbox 与 circle-signature selector 只能保留为诊断,不能作为 provenance
|
||
fallback。除 1511 direct-prism 和 1511/2491 full-solid-revolve 两条 versioned contracts 外,其他 generator/
|
||
consumer 仍须逐一补齐后,才可将整个 query family 标记为完成。
|
||
`hole` 现增加一个独立且更窄的 source-location/body-scope contract:lowering 仅接受原始
|
||
`sQuery`/`sketchEntityQuery(VERTEX, ...)` 的 `skPoint`、`skCircle.center`、`skLineSegment`
|
||
的 `.start`/`.end`,以及由同一原始 `skArc(start, mid, end)` 精确计算的 `.start`/`.end`/`.center`,
|
||
并要求所有 location 都来自同一显式草图平面;派生 suffix、
|
||
CAP/SWEPT/COPY topology、query combinator 与几何邻近性均不会成为 location fallback。只有这个
|
||
direct source-vertex form 在其 source sketch 未能执行时才报告上游
|
||
`hole_location_sketch_unavailable`;wrapper/combinator 即使递归包含 `sQuery`,仍如实报告
|
||
`hole_location_vertex`,不会被误归因成 host failure。CADFS
|
||
`scope` 必须是一个直接 `SWEPT_BODY`,并在 lowering-time body graph 中仍是一个显式、独立且存活的成员,才写入
|
||
`hole_wizard.params.scope_feature_id`。scope 不要求它是唯一 active solid:schema、semantic validation、
|
||
capability preflight 和 executor 共同确认该指定成员仍 active;executor 只切除该成员并以原 scope
|
||
member key 注册结果,其它独立 active members 原样保留。因而后续 CADFS hole 可以继续引用同一 body,
|
||
而无 scope 的既有 CDSL hole 仍保留 feature-owned lifecycle。`00219259` 的 F6 是多成员正例:F1
|
||
与 F3 同时存活时,F6 的直接 `SWEPT_BODY(F1)` scope 仅切除 F1,rebuild 保留两个 solid。这是执行
|
||
证据,不是 strict/RP 比较通过声明。以当前 lowerer 重放,`00039800` F7 同样在 F1 与 F5 两个
|
||
独立成员共存时只切 F5,`00302703` F3 则只切 F2;二者均 `converted_complete` 且 rebuilt。它们
|
||
证明 explicit direct scope 不要求 sole active solid,但不扩大为 COPY、boolean、pattern、transform、
|
||
fused/replaced/deleted successor 或 aggregate/current-body scope。
|
||
`00406667` 的 F1/F3/F5 是端到端证据:两个 `skCircle.center` hole 与同一 F1 revolve scope 完整执行,
|
||
`output/hole-direct-sketch-vertex-20260910-v2` 分类为 `rebuilt_approximate`(RP passed,strict failed)。
|
||
`00392565` 的两个 direct `skArc.center` hole、`00091356` 与 `00486207` 的 direct arc-center source
|
||
forms 已完成 lowering regression;它们不以 runtime arc fitting 推断圆心。此路径不覆盖 B-spline/interior
|
||
vertex、多个 host plane、多个 scope body、COPY/boolean/pattern/transform
|
||
successor、fused/replaced/deleted member、non-direct query、全部 hole start/end styles 或完整孔型/螺纹语义。
|
||
对上游未执行草图的 direct `CAP_FACE` hole host 复核确认,当前五个真实 history 不是同一缺失的
|
||
direct-prism attachment:`00590640` 的 host producer 带 IMPRINT profile、typed ADD 与 draft cut,
|
||
`00606499` 的 producer 同时 draft、offset 和 second direction,`00215642` 是双向
|
||
UP_TO_SURFACE 且 hole scope 为两个 body,`00758713` 的 profile 来自 revolve side-face 上的 IMPRINT,
|
||
`00622779` 则是多 region IMPRINT profile。单凭 outer `CAP_FACE`、owner 或静态 cap frame 都不能证明
|
||
这些 host 的 active planar successor。它们继续保留 `hole_location_sketch_unavailable` 与最后可执行
|
||
checkpoint;未来 capability 必须分别提供 source-to-materialized-profile identity、完整 producer delta、
|
||
active member/scope 与 runtime face attachment relation,不能以 frame、geometry、stable ID、current body
|
||
或 source STEP 回退。
|
||
direct source-line `SWEPT_FACE` 的静态 sketch host 同时修复了一个 source-frame 判定错误:先前以
|
||
contour 顶点平均值寻找边的内侧,在有效但不对称的闭合 profile 中该平均值可刚好落到选中边所在直线,
|
||
从而错误报告 `swept face interior is degenerate`。现在仅当 source contour 闭合、non-zero signed area、
|
||
且恰有一条有序 segment 匹配原始 non-construction line 时,才由 contour winding 计算其 left/right
|
||
interior,再形成 attachment frame;没有这些 source witness 时仍走既有有界诊断。`00139790` F6 与
|
||
`00140109` F5 的 hole 完整 rebuild,`00140261` F3 hole 已执行并保留,后续 F4 仍因独立的 open/
|
||
disconnected profile preflight failure 停止。17 条 direct SWEPT_FACE hole host 中其余 14 条仍由未闭合
|
||
profile、unresolved owner frame、INTERSECT、MERGE 或 scope lifecycle 阻塞。该改动不生成 runtime
|
||
SWEPT_FACE selector lineage,不检查 final B-rep/geometry,也不完成 general SWEPT_FACE、hole host 或
|
||
selector family。fresh 9,347-history lowering scan 为 6,620 `converted_complete`、2,371
|
||
`converted_partial`、356 `deferred_no_executable_feature`,无 lowering exception,且没有残留
|
||
`swept face interior is degenerate` diagnostic。
|
||
当前 source corpus 没有 `qAdjacent(...)` 调用,故其递归 AST preservation 仍不能升级为 runtime
|
||
filter capability。`SPLIT(FACE)` hole host 的六条实际 history 也未形成可复用的单一 contract:分别包含
|
||
extrude side-face 与 CAP_FACE 的 split、shell OFFSET_FACE split、多段/derived source 及 MERGE
|
||
ancestry。`TD(SWEPT_FACE)` 或 nested CAP frame 只能说明 split 输入,不是 active split result 的 N:M
|
||
relation;在 adapter 记录完整 split component、source cardinality 和 active member 前,二者继续 deferred
|
||
并保留 prefix。
|
||
`COPY(CAP_FACE)` 的九条 hole-host census 同样确认 selected-region 不是现有 full-profile bridge 的一行
|
||
放宽:`00950758` 是 1511 primary blind cut,但 CAP OSD 只选择包含 additional `E4/E5` source geometry
|
||
中的 `E3` boundary;`00482362` 则是 1549 的独立 circular cut tool;其余分别带有 IMPRINT
|
||
subset/multi-region、`surfaceEntities`、`UP_TO_SURFACE`、mirror 或 non-immediate lifecycle。future contract
|
||
必须显式保存 selected-region 的 source membership,并证明该 region 的 transient cap 经 same-owner subtract
|
||
continuation 到唯一 active face。partial OSD、owner、cached frame 或近似平面均不能升级为面选择,也不能使用
|
||
geometry、stable ID、current body 或 source STEP 回退。
|
||
4. `booleanBodies`、`mirror`、`circularPattern`:显式 source/target bodies、实例输出、
|
||
nested pattern、remove/intersect/keep-tools 和 transform 后继。当前 direct circular
|
||
`NEW` COPY -> rigid transform,以及 direct mirror 的 `NEW` source -> `instance 1`
|
||
COPY -> transform 是受限增量;不代表 linear/nested pattern、镜像 aggregate source 或
|
||
fused instance 已有完整 output body lifecycle。mirror 的 `mirrorPlane` 另有一个受限
|
||
`SWEPT_FACE` contract:唯一 direct full solid `revolve_add` 的原始 source line 与 revolve
|
||
axis 可由既有 `_query_plane` 证明为同一物理平面时,lowering 物化显式
|
||
`reference_plane` 后交给现有 `pattern_mirror` 执行。它不从 STEP 或 current body 推断
|
||
plane;partial revolve、非 revolve、curve/derived face 或任一未解析 frame 都保留原有
|
||
mirror-plane diagnostic。`00000385` 的 F5 是正例(XY plane,F5 executed);
|
||
`00023074` 保留拒绝边界。五样本
|
||
`output/mirror-revolve-plane-matrix-20260909` 为 2 RP、3 rejected,且只移除了
|
||
`00000385` F5 的 plane defer,F2 chamfer 与 F7 fillet 仍如实诊断。
|
||
mirror plane 另有第二条、同样非 runtime-selector 的 direct-prism datum contract:仅
|
||
FeatureScript 1511、紧邻、无 draft、blind `new_body` `extrude_add_blind` 的同一个
|
||
`SWEPT_BODY` mirror source,才可将其 direct `CAP_FACE` 或单一原始 non-construction line
|
||
`SWEPT_FACE` 物化为 `reference_plane`。CAP 必须先满足现有 direct builder output-role
|
||
证明;side face 必须先满足既有完整 direct-profile/source-edge contract。该平面只来自 source
|
||
AST 与 producer frame,不查询 runtime face、current body、stable ID、geometry 或 STEP。
|
||
`00094392` F1 -> F2 的 `CAP_FACE`(`y=-204.44 mm`)和 `00051481` F1 -> F2 的 line
|
||
`SWEPT_FACE` 都 fresh rebuild 且 mirror executed;前者完整 history rebuilt,后者后续仍在独立
|
||
MERGE/CAP_EDGE capability 停止。draft、two-sided/CUT/ADD、IMPRINT/partial/derived source、非
|
||
1511、任何 intervening mutation、plane owner 与 mirrored source 不同,以及所有 generic face
|
||
query 保持 mirror-plane defer。这不完成 general CAP/SWEPT selector、mirror plane 或 mirror lifecycle。
|
||
`booleanBodies` 现在也有一个独立、受限的 COPY body contract:direct `SWEPT_BODY` 和已存活的
|
||
mirror/circular `COPY(SWEPT_BODY)` 分别 lower 为 feature ID 和
|
||
`{pattern_feature_id, source_feature_id, instance_index}`,runtime/body graph 仅从该
|
||
tuple 解析对应独立 body member,绝不以 producer aggregate 或 current body 代替。显式
|
||
target/tool 还接受前序 multi-source `make_copy:true` transform 的
|
||
`{transform_feature_id, source_feature_id}`:source 必须是该 transform 的直接输入,且其
|
||
source-qualified COPY member 仍 active;schema、semantic validation、capability
|
||
preflight 与 executor 都拒绝 owner/source 不匹配、单来源 COPY、aggregate 和失活成员。
|
||
direct `SWEPT_BODY` 若唯一解析到上述 fused sole-body successor,也会以 successor 而非
|
||
creator 作为 circular source;`00253824` 的 F4 明确为 `NewBodyOperationType.ADD`,在 CDSL
|
||
body graph 中 fuse 为 active `f_F4` member,因此 F5 circular source 和 F6 targetless UNION
|
||
都明确绑定 `f_F4` 与 F5/F4/instance-1,2 ownership。该完整样本目前在无关的 F7
|
||
`MERGE(FACE)` workplane provenance 缺口停止,并保留 F1--F6 executable prefix,不能作为
|
||
pattern/boolean RP 通过证据。合成 fused-body
|
||
circular COPY -> boolean runtime 回归完整执行。多 body、boolean 后继、nested/linear
|
||
pattern、被排除 instance 和 CAP/face topology ownership 仍未覆盖。
|
||
targetless FeatureScript `UNION` / `INTERSECTION` 现只在至少两个 explicit、存活的 source body members
|
||
时按 direct member 优先、否则第一个 qualified COPY member 的确定性 body-graph policy 选一个 CDSL
|
||
target、其余 members 为 tools;同一 structured direct member、pattern instance 或 transform COPY member
|
||
若在 source set 中重复出现,只保留首次出现,避免同一 member 同时成为 CDSL target 与 tool。两种操作均为 commutative set,不以此 choice 改变几何。`00293508` 的 direct F1/F3 UNION 以 F1
|
||
target、F3 tool 完整执行并 RP 通过,`00073309` F7 与 `00104425` F4 的 targetless INTERSECTION
|
||
同样完整 rebuild。`keepTools:true` 明确保留完整原 input set(含为 CDSL binary shape 而选出的 left
|
||
member)及 boolean result;`00215642` F6 由 F3 left / F1 right 的 UNION 执行至其独立后续 F8
|
||
runtime-ineligible checkpoint。targetless subtract、混合 pattern/transform COPY query、无效或已经吸收的
|
||
instance,及任何缺少 source-order/member proof 的 body set 仍保持拒绝。当前语料没有 native multi-source
|
||
COPY-to-boolean history;FeatureScript 1540 的 `00699847` 真实 F3 two-source COPY history 加入 source-only F5
|
||
boolean contract variant 后,两个 source-qualified refs 完整 lower 并执行,但不作为该样本
|
||
的 strict/RP evidence,也不标记 general COPY lifecycle 完成。受影响的 unit suites 为
|
||
167 lowering/parser/selector 与 142 runtime tests(1 skipped);`output/core-17-multisource-copy-boolean-20260911`
|
||
保持 2 strict、1 RP、6 rejected、7 rebuild failed、1 timeout,固定 25-sample shard
|
||
`output/multisource-copy-boolean-shard-004000-20260911` 为 1 strict、6 RP、7 rejected、11 rebuild
|
||
failed,均未出现 runtime/protocol fault。`00000385` 的 F6 因而以 `f_F1` 为 target、
|
||
F5/F1/instance-1 为 tool 完整 lower 并执行,F2/F7 保持其原有 diagnostics。四样本
|
||
`output/boolean-pattern-copy-provenance-matrix-20260909` 为 3 rejected、
|
||
1 runtime-ineligible;其中其它 sweep、keep-tools/subtract、shell/hole 和 selector 缺口均
|
||
未被重分类。新的 `output/core-17-boolean-pattern-copy-provenance-20260909` 仍为 3 strict、
|
||
3 RP、9 rejected、1 rebuild failure、1 comparison timeout。direct circular ADD 现将每个
|
||
transformed COPY 的面、边、顶点沿 exact OCC transform/fuse history 传入 final active snapshot;
|
||
只有一个 source 和一个 final result 的 relation 才传递 `f_pattern.cN.f_source` owner,
|
||
split/merge/no-history 仍不声明 owner。`00542223` 的 F7 removal faces 和 `00423838` 的
|
||
`COPY(CAP_FACE)` 因而都在 active snapshot 中绑定为真实 instance owner;后二者的最终 STEP
|
||
仍分别 rejected,不能将 selector 可执行性描述为几何相似通过。direct-new wedge 的原子回归同时
|
||
验证三个 copy owner 都出现在最终 fused body。nested/linear pattern、boolean 后继、被排除
|
||
instance 和没有 exact history 的 CAP/face ownership 仍未覆盖。
|
||
CADFS 的静态数值表达式还允许无歧义的 `round(N)`,但仅当 `N` 已是有限整数,因而该
|
||
表达式可被证明为恒等;`00003011` 的 `round(8)` pattern 由此完整 lower。非整数
|
||
`round`、变量和其它函数不会在 converter 中猜测 FeatureScript 的数值语义。这只是
|
||
lowering 前置条件,不能作为 COPY owner、pattern instance lifecycle 或 RP 相似通过的
|
||
证据。
|
||
|
||
`MERGE(FACE)` 不得从它的 `derivedFrom` 内部 `CAP_FACE` 或 `SWEPT_FACE` 继承静态
|
||
workplane。`parse_query` 为诊断而递归遍历,不代表外层 MERGE 已有一个 active face
|
||
successor。`00013930` F7、`00020631` F4 和 `00036155` F5 均因此在外层 MERGE 处以
|
||
`sketch_deferred` 停止,并保留此前 executable prefix;后续 feature 不得消费臆造的
|
||
宿主面。全量 294 个 direct outer MERGE host 中,261 个是 1511;即使其中 77 个具有
|
||
两条单 OSD SWEPT_FACE source,也仍缺少从 FeatureScript merge owner 到 CDSL
|
||
body-member merge 的 source contract 与 OCC N:M final-face relation。尤其不能只因 owner
|
||
名称包含 `boolean.opBoolean` 推断某个特定的 source-face merge relation;typed
|
||
`NewBodyOperationType.ADD` 虽然按 FeatureScript 语义进入 merge scope,但单纯的 fuse
|
||
结果或 aggregate 仍不能证明 N:M face successor。
|
||
只有 source-to-member transition、complete/proven final relation、active scope 和 attached
|
||
sketch consumer 同时具备后才可开放;geometry、face order、stable ID、aggregate/current
|
||
body 与 source STEP 都不是回退。
|
||
|
||
2026-09-14 ADD lifecycle correction: Onshape's standard-library definition of
|
||
`NewBodyOperationType.ADD` performs a boolean union with its merge scope; only
|
||
`NEW` creates an independent body. The lowerer therefore emits `result_mode:
|
||
new_body` only for `NEW`, while typed ADD uses the existing fuse execution path.
|
||
`00953397` F7 and `00957101` F4 now resolve CAP_EDGE through exact
|
||
`extrude -> union` lineage; `00074047` F4 and `00350698` F7 resolve CAP_FACE
|
||
shell inputs through the same chain; and `00007973` F5 -> F7 uses the explicit
|
||
`primary_add_up_to_surface_union_continuation` contract. `00293014` and
|
||
`00638700` reject an ambiguous union successor rather than choosing a face.
|
||
This corrects source/body lifecycle semantics but does not establish generic
|
||
ADD, N:M MERGE(FACE), multi-solid fuse provenance, pattern ownership, or any
|
||
geometry/stable-ID/current-body/source-STEP fallback.
|
||
5. `cPlane`:所有历史出现的 plane constructor、曲线/曲面 attachment、方向手性和
|
||
退化输入。`CPlaneType.OFFSET` 必须将 CADFS `oppositeDirection` 编译为 source plane
|
||
normal 上的负 signed offset,而不是忽略该 flag 或翻转 plane frame;后者会镜像同一草图的
|
||
local coordinates。该 shared lowering contract 已覆盖 272 条实际带该 flag 的 history。
|
||
`00777619` 将 Right plane 的 `76.2 mm` offset 修正为 `x=-76.2 mm`;因其 profile 只有部分
|
||
射线到达 selected `SWEPT_BODY`,`up_to_body` 仍以非均匀 target 诊断保留 F2 prefix,不能
|
||
被这一 plane 修复伪装成成功。Right/Front/Top 的三个真实 matrix 例与 24 条分层 shard
|
||
`output/cplane-offset-opposite-shard-20260909` 分别验证 frame 和独立分类:3 strict、1 RP、
|
||
13 rejected、7 rebuild failure。共享 core-17
|
||
`output/core-17-cplane-offset-opposite-20260909` 分类保持 3 strict、3 RP、9 rejected、1
|
||
rebuild failure、1 comparison timeout。它仍只是 cPlane 的一项通用 frame contract,不覆盖
|
||
曲面/曲线 attachment、退化输入或完整 derived-topology plane semantics。
|
||
`LINE_ANGLE` 现额外覆盖单一 direct `skCircle` edge:FeatureScript 1511 的
|
||
`cplane.fs::lineAnglePlane` 将该选择传入 `evAxis`,而同版本 `query.fs` 将 circle
|
||
列为 `ALLOWS_AXIS`。lowering 因此只用 circle centre 与 source sketch plane normal
|
||
作为 axis,并按同版本 `vector.fs::perpendicularVector` 的确定性阈值分支适配 zero-angle
|
||
direction,再按
|
||
`angle` 和 `oppositeDirection` 的 signed angle 旋转;不会以 circle centre vertex、
|
||
`CAP_EDGE`/`SWEPT_*`/COPY 等派生 topology 或 current body 替代这个 source contract。
|
||
该语义依据来自 MIT 许可的 Onshape standard-library mirror 的 1511.0 commit
|
||
`eaef87b22d3b15e9377d8b1c6cb701f8111b6a0c`;适配该 MIT 算法但未引入依赖。`00030209`
|
||
的 F1/F2/F4/F5 是现有的四个真实 direct-circle evidence:
|
||
`output/cplane-line-angle-direct-circle-20260910` 不再含 cPlane diagnostic,并保留
|
||
四个 executable `reference_plane`。该 source 后续 arc sweep path 现可 lower;其 multi-region profile
|
||
仍超出当前 PipeShell solid contract,因而没有
|
||
solid feature,pipeline 正确分类为 `runtime_ineligible`,没有将工作平面 lowering
|
||
误报为 STEP/RP 成功。多实体 reference、direct arc/cylinder/cone 等其他 `evAxis`
|
||
输入和一般 derived topology 仍未覆盖。focused shared selector/runtime suite 为
|
||
`263 passed, 1 skipped`(142.98 s;仅既有 build123d deprecation 与 workplane
|
||
re-orthogonalization warnings)。强制 RP Core-17 refresh
|
||
`output/core-17-line-angle-direct-circle-20260910` 为 1 `comparison_timeout`、10
|
||
`rebuild_failed`、1 `rebuilt_approximate`、5 `rebuilt_rejected`,与既有核心集分类一致;
|
||
它只证明共享改动没有改写这些既有结果,不构成 generic `LINE_ANGLE` 或 STEP/RP success。
|
||
两实体 `LINE_ANGLE` 现额外覆盖 source-only contract:direct `skLineSegment`/`skCircle`
|
||
提供 axis,默认 datum 或已 lower reference plane、direct `skPoint` 或 direct line endpoint
|
||
提供第二 reference。实现严格镜像 1511 `cplane.fs::lineAnglePlane`:第一个 selection
|
||
不是 axis 而第二个是 axis 时交换;两个非平行 axis 用第二 direction,平行 axis 用两 origin
|
||
之差,plane 用 `cross(axis, plane.normal)`,point 用 `point - axis.origin`,再以 signed angle
|
||
旋转 `cross(axis, secondInPlaneDirection)`。共线/零长度选择明确 defer。此 direct branch
|
||
只接受未组合的 `sQuery`/`sketchEntityQuery`,不通过 `_query_line`、current body 或 geometry hint
|
||
推导 CAP/SWEPT/COPY/trim/derived query;
|
||
它继续引用 MIT-licensed Onshape standard-library mirror commit
|
||
`eaef87b22d3b15e9377d8b1c6cb701f8111b6a0c`,未引入依赖或复制外部代码。lowering regression
|
||
覆盖 datum-first swap、axis-first、nonparallel/parallel-offset axes、direct point、reversed
|
||
point/axis、`oppositeDirection`、degenerate reject,并断言 direct helper 不接受 `CAP_EDGE`。
|
||
真实 matrix `output/cplane-line-angle-two-entity-matrix-20260910` 的六条直接 axis/default-plane
|
||
history(`00067847`、`00185138`、`00217351`、`00298026`、`00586156`、`00831400`)均无 cPlane
|
||
diagnostic 且保留 rebuild STEP:`00586156` strict/RP pass,`00298026` RP pass/strict diagnostic,
|
||
前三条为独立 `rebuilt_rejected`,`00831400` 在后续 F5 `BRep_API: command not done` 保留 prefix。
|
||
这只证明受限 frame lowering,不能将后续 geometry 分类归为 `LINE_ANGLE` 成功;direct arc、
|
||
non-source vertex、任意 derived topology、一般 face/curve/mate-connector axis 和完整 cPlane
|
||
coverage 仍未完成。`qBodyType(qCreatedBy(sourceSketch, EDGE), WIRE)` 另有一个 source-only
|
||
datum-axis bridge:只在 1511 / `geometry.fs@1511.0`、完整 query 恰选中同一 source sketch 的一条
|
||
`line` 时,`LINE_ANGLE` 才读取该 line 的 explicit source workplane;construction line 在 datum
|
||
axis 中合法,和 sweep-path 的 construction filter 规则不同。`00506444` 的 F6 由两个这类
|
||
construction-wire axes 构成并使 F8 完整执行/rebuild;多线、arc/B-spline、query composition、
|
||
runtime topology 和其它版本仍 defer。此路径不生成 selector intent、不读取 active body/geometry
|
||
fallback,也不构成 runtime `qBodyType` family completion。
|
||
`cPoint` 现有一条独立的 explicit source-datum contract:一个未带 suffix 的 direct
|
||
source-sketch `line` 与有限 `[0, 1]` parameter 按 source workplane 中端点的 affine interpolation
|
||
lower 为 `reference_point.point_mm`。1511 另接受两个非 runtime-selector 的 direct-prism datum form:
|
||
两条原始 source line 唯一确定 shared endpoint 的 `SWEPT_EDGE`,以已证明的 direct blind prism span
|
||
作 interpolation;以及一条原始 source line、明确 start/end role 的 `CAP_EDGE`,以同一 direct blind
|
||
prism 的 explicit physical cap frame 作 interpolation。三者都不注册 runtime topology record,仅供同一
|
||
lowering pass 的 `qCreatedBy(cPoint, VERTEX)` 被既有 cPlane frame 规则读取。CDSL schema、profile
|
||
contract、capability preflight 与 executor 都要求三维有限坐标,executor 不改变 active body。
|
||
`00240949` F3 生成 `[15.05, 0, 22.985]`,F4 使用该 origin,fresh incremental replay 保留 F1--F9
|
||
executable prefix;F10 在既有 fillet selector capability 处停止。`00503730` F1/F2 也生成并消费
|
||
direct datum,后续仍因无关 topology query 保持 partial。`00289068` F3/F4 分别以 `SWEPT_EDGE` 和
|
||
`CAP_EDGE` source form 生成 `[25.85, -42.6, 38.1]` 与 `[25.85, -4.5, 76.2]`,F5/F7 完整执行。
|
||
该完整 history 的 fresh file-backed pipeline 为 `converted_complete` / `rebuilt_rejected`,strict 与 RP
|
||
均未通过,故 datum/replay 成功不能被表述成模型几何通过。
|
||
1560 `00238956`、多个 entity、curve、derived suffix、非唯一 source vertex、非 blind/draft/非 direct
|
||
prism、out-of-range/non-finite parameter、跨 pass/runtime topology 和任何 geometry/stable-ID/current-body/
|
||
STEP fallback 均稳定 defer;这不完成 `cPoint` 的一般 curve/topology 语义,也不扩大任何 runtime selector family。
|
||
`SWEPT_EDGE` 另有一条不同的 1511 source-datum bridge:紧邻的 undrafted `new_body`
|
||
`extrude_add_blind` 必须保留完整未变的 direct source profile,而 OSD 必须刚好由两条不同的
|
||
source profile edge 唯一确定一个 shared endpoint。lowering 以该 source vertex 的 start-cap copy
|
||
和显式 start-to-end prism span 计算 `LINE_ANGLE` axis;它产生 reference-plane frame,不注册
|
||
runtime selector、不查询当前 body、stable ID、几何相似度或 STEP。`00040198` F2 的单轴和
|
||
`00722278` F2 的 axis-plus-Front-datum 两种形式均 `converted_complete` 并 fresh rebuild;
|
||
两样本 fresh comparison 分别为 `00040198` rejected(下游 hole 几何不符)和 `00722278` RP pass
|
||
/ strict precision diagnostic,不能把 datum-frame 结果概括为两者完整 strict 成功;
|
||
`00644299` F2 的另一参照是 derived `SWEPT_FACE`,仍稳定 defer。derived/combined query、非紧邻
|
||
producer、draft、ADD/CUT/two-sided/IMPRINT/changed profile、非唯一 endpoint、其它版本和一般
|
||
derived cPlane 均不在该 contract 内。
|
||
`CAP_VERTEX` 也有一条单独的 1511 source-datum point bridge,供 `THREE_POINT` 和
|
||
`PLANE_POINT` 的 cPlane 计算 frame,不能与 runtime extent selector 混用:owner 必须是 direct
|
||
undrafted `new_body` blind prism,lowered profile 与完整 original source profile 相同,OSD 必须恰为
|
||
两个 distinct non-construction source edge 且唯一共享一个 endpoint。lowering 在 source profile
|
||
plane 中计算该 endpoint,再只以 requested start/end prism cap 的显式 frame 平移;不会读取 runtime
|
||
topology、current body、stable ID、几何近邻或 source STEP。producer 后只允许 datum、独立的无 draft
|
||
`new_body` blind prism,或一个恰由同一 producer 的 qualified `extrude.start|end` CAP_FACE 移除的
|
||
direct single-cap shell;后者仍读取 producer history 的 source-defined point,不将 shell result
|
||
vertex 当作 selector。hole/boolean/其它 dress-up/transform/COPY/pattern/delete、draft/ADD/CUT/two-sided、
|
||
IMPRINT/split/multi-profile、重复或不共端的 OSD、其它版本均 defer。`00243142` 和 `00245768` 的
|
||
F2 THREE_POINT 都产生并执行 reference plane。`00245768` 随后的 F4 还暴露并验证了通用
|
||
analytic-contour region 修复:共享顶点或边的 closed loops 不再被 parity ray-cast 误分类为
|
||
self-identical hole,只有所有 sampled boundary 点严格在 outer 内部的 loop 才是 hole;因此
|
||
F4 可完整执行。`00053942` 在 F1 与 F4 间有 hole,正确以 `CAP_VERTEX datum source is unsupported`
|
||
defer。`00212904` F2 direct CAP shell 后的 F3 也完整 lower;mutating the shell to remove the other
|
||
CAP remains valid datum history for the same reason. fresh `output/cplane-cap-vertex-datum-20260912-r2` 三条均为 `rebuilt_rejected`:`00243142`
|
||
和 `00245768` 都是完整 history 已执行但 RP 比较分别有 volume/area 与 volume/area/solid-count
|
||
mismatch,不能把 frame 或 runtime 成功宣称为 RP success。此路径不注册 selector intent 或放宽
|
||
`CAP_VERTEX` runtime family,完整 THREE_POINT/PLANE_POINT cPlane 仍未完成。
|
||
`PLANE_POINT` 的实体角色现按保留的 FeatureScript query kind 判定,而不再以是否出现
|
||
`qCreatedBy` 猜测平面:一个 source `VERTEX` 与一个 `FACE`(包括 direct-prism `CAP_FACE`)才可
|
||
构成该 frame;两个 face、两个 vertex 或额外实体稳定 defer。`00228556` F3 使用 F1 的 direct
|
||
`CAP_FACE` 及 F2 的 direct source vertex,F1/F3/F6 已在
|
||
`output/cplane-plane-point-cap-face-20260912` 完整执行并 RP 通过;strict 仍因
|
||
volume/area 相对误差 `3.89e-5` / `7.29e-5` 未通过。这个判别只读取 source AST、已 lower 的
|
||
physical cap frame 与 source vertex,不查询 runtime body、stable ID、几何近邻或 STEP;一般
|
||
topology face/vertex、composition、歧义集合和完整 PLANE_POINT coverage 仍未完成。
|
||
既有圆柱母线 compatibility path 也已收紧为单一 direct `makeQuery`
|
||
`CAP_EDGE` 或 `SWEPT_FACE` 的 source `skCircle`,要求 producer start/end frame 与另一显式 datum/
|
||
lowered reference plane;qAdjacent/qUnion composition、CAP/SWEPT line、trim/COPY/boolean source 均稳定
|
||
defer,不能因 AST 内出现 source token 获得 `_query_line` fallback。1511 `query.fs`/`evaluate.fs` 确实
|
||
将 arc 列为 `ALLOWS_AXIS`/`evAxis` 输入,但当前 9,347 条 corpus 未发现 direct `skArc` 被
|
||
`LINE_ANGLE` 实际选择的 history;这只是待验证语义,不能提前宣称 direct-arc coverage。
|
||
`CURVE_POINT` 现额外接受同一 direct source curve 的精确切线:`skArc.start/end` 由解析
|
||
圆心、半径和方向生成切线,`skFitSpline.start/end` 只在 FeatureScript 导出了相应 endpoint
|
||
derivative 时执行。它还受限支持 source token `E<n>.<index>.internal`:必须是同一 direct、
|
||
non-periodic `skFitSpline`,并有完整 interpolation points、centripetal parameters 与两端
|
||
derivatives。lowerer 复用 runtime 的 `Edge.make_spline(..., scale=False)` 构造,再在显式
|
||
parameter[index] 以 OCC `BRepAdaptor_Curve.D1` 读取导数,同时核验返回点仍等于 source
|
||
interpolation point;绝不以 adjacent interpolation-point chord 代替曲线切线。`00827798`
|
||
F1 与 `00845891` F3 是两个真实 B-spline endpoint 证据,`00456498` F1 (`E0.2.internal`)
|
||
与 `00812557` F2 (`E0.3.internal`) 是 source interpolation-token 证据;`00057273` 的受控
|
||
`skArc` endpoint 变体覆盖圆弧方向。derived suffix、越界 index、无完整 interpolation
|
||
data、无导数/periodic spline、curve/surface topology source 和退化 tangent 继续明确拒绝。
|
||
两条新增样本 pipeline `output/cplane-curve-point-bspline-interpolation-20260910` 均已无
|
||
cPlane diagnostic;`00456498` 在后续 sweep OCC solid failure 停止,`00812557` 在后续
|
||
sweep OCC valid-solid failure 停止,保留诊断和可用工件,不误报为整体成功。shared
|
||
selector/runtime suite 为 `277 passed, 1 skipped`(既有 workplane re-orthogonalization
|
||
warning)。RP Core-17 refresh `output/core-17-cplane-curve-point-bspline-interpolation-20260910`
|
||
为 1 `comparison_timeout`、10 `rebuild_failed`、1 `rebuilt_approximate`、5
|
||
`rebuilt_rejected`,与 prior semantic-selector baseline 分类一致;它不构成完整 cPlane
|
||
或 generic curve-attachment completion。
|
||
|
||
### P3:尚未支持的 FeatureScript 操作
|
||
|
||
按当前 source parser 建立版本化 operation registry,并与 conversion diagnostics 分开报告。
|
||
`cadfs_to_cdsl.operation_registry.v1` 必须从每次 scan 的完整 FeatureScript source 生成,记录
|
||
每个 observed operation 的 feature/sample 计数与 parse failure;路线项而未出现在当前 source 的
|
||
operation 必须显示为 `not_observed_in_current_source`,不得由旧 output diagnostics 推断为已观测或
|
||
已支持。parser 必须保留每个 direct `operation(context, id + "F...", definition)` 调用,
|
||
未知 operation 进入 history 并以 `unsupported_operation` defer,不能因名称未列入 parser 表而静默丢失。
|
||
2026-09-14 的 9,347-history scan 有零 parse failure,`assignVariable` 为 34 次、`transform` 为 468 次;
|
||
`draft`、`thicken`、`split`、`moveFace`、`deleteFace`、`replaceFace`、`derive`、`import` 和
|
||
`bend_add` 均为零次。因此这些零计数项仍是待接入的 P3 work item,尚无当前真实 source form 可用来
|
||
完成多语料实现/回归;不得创建虚构的 CDSL mapping 或把 import declaration 误作 `import` feature。
|
||
有实际 source 证据后,逐项建立 schema、lowering、runtime、adapter 和回归。外部资产或生成器缺失时,
|
||
必须将 capability 标为不可执行并提供部署诊断,不能在 import 时影响无关模型。
|
||
|
||
`assignVariable` 现已完成当前 observed scalar source form 的纵向 contract:仅接受有序的、一次声明的
|
||
非空 name,以及恰好一个有限常量 `anyValue` 或 `lengthValue` expression。lowering 只替换后续精确
|
||
`getVariable(context, name)`,保留原有单位算术再交给目标参数的既有 number lowering;未声明、畸形 lookup、
|
||
重复 name、双 value variant、非有限值、非标量/动态 expression 均显式 defer。CDSL `assign_variable` 是一个
|
||
非 body-mutating、non-replayable context feature:schema、semantic validation、preflight 和 executor 都保证
|
||
它不产生 body 或 topology record,也不改变 immediate producer/consumer 的 selector lifecycle。真实
|
||
`00067276`(2 个 `anyValue`)、`00722518`(1 个 `anyValue`)、`00565626`(2 个 `lengthValue`)和
|
||
`00865178`(3 个参与对称 depth 算术的 `anyValue`)均已在 fresh incremental rebuild 中执行变量 feature;
|
||
前三者保留其后续可执行 checkpoint,后两者的完整结果仍受独立 runtime/modeling 缺口影响。此条仅完成当前
|
||
34 occurrences 的 scalar declaration/ordered lookup contract,不宣称通用 FeatureScript variable type、
|
||
reassignment、map/array/enum、dynamic expression 或 runtime context state 支持。
|
||
|
||
FeatureScript 标量 parser 现额外将前缀 `+` / `-` 解析为既有的算术 AST,因而
|
||
`-(138.6) / 2 * mm` 不再截断为字符串 `"-"`。这是一项通用的常量表达式修复:
|
||
`00292242` F2 的平移可重新 lower,source sketch origin 为 `[-69.3, 0, 0]`,并以既有非-copy
|
||
transform contract 烘焙进该 source sketch;parser 回归同时确认 `-(10 + 2) / 2 * mm` 仍经 number
|
||
lowering 得到 `-6 mm`。它不增加 transform family、body lifecycle 或任何 selector/query capability;
|
||
动态/非标量表达式仍按各自既有 contract defer。
|
||
|
||
### P4:比较、来源和性能
|
||
|
||
1. 保留 strict 与 RP 两层几何比较,并为被精确量快速拒绝的边缘模型提供可控的
|
||
离线 surface 诊断预算;comparison timeout 是基础设施问题,不能混入几何失败。
|
||
2. 输出 source/rebuild 多视图、局部差异、body 体积/面积和最近 feature 的关联证据。
|
||
截图只用于人工复核,不能替代多视角 B-rep 比较。
|
||
3. 识别 source STEP 非闭合、FeatureScript literal 与 export 精度不一致、缺失资产等
|
||
source exception。它们必须保留原始导入/检查证据,不能修饰 CDSL 以伪造通过。
|
||
4. 使用 capability shard、缓存中间工件和可恢复 worker 隔离完成全量回归;任何 failure
|
||
都必须保留最后一个重新绑定 selector 并以 strict 模式实际执行成功的前缀 STEP、GLB
|
||
和诊断。不得把未绑定候选或当前 body fallback 伪装成可执行工件。
|
||
|
||
## 每项能力的完成定义
|
||
|
||
一项能力仅在满足以下条件时可标记完成:
|
||
|
||
1. 有版本化的 CDSL 表达,且 schema/semantic validation 拒绝不完整或歧义输入。对
|
||
FeatureScript query,`selector_intent.version`、source query family、精确 language version 和直接
|
||
standard-library import path/version 必须有明确契约;缺版本和未注册 family/language/library revision
|
||
必须诊断,不能以 legacy 顶层版本、数字前缀、相同路径或默认版本补齐。
|
||
2. lowering 仅根据 FeatureScript source 产生该表达,并保留 source feature、selector
|
||
和 body provenance。仅有 runtime CDSL contract 而未由 lowering 产生的能力必须标为
|
||
部分完成。
|
||
3. runtime/adapter 按通用算法执行,记录结果 body 和 topology delta,不依赖样本信息。派生
|
||
selector 必须具有 source/result kind、输入/输出 snapshot、body member、history status 及
|
||
kernel relation evidence;resolver 必须据此证明 derivation policy、operation-wide cardinality
|
||
和 active member,并输出实际 `resolution_mode` 与 evidence。
|
||
4. 能力矩阵记录对应 FeatureScript API/query 的源版本文档或标准库依据、采用的语义和
|
||
未覆盖边界;原子语义矩阵包含正向、边界和拒绝测试,且至少多个真实语料样本覆盖
|
||
不同几何和生命周期组合。只有 parser/AST 或 resolver unit test 的 query family 只能标为
|
||
resolver-level/部分完成;必须同时具备 lowering、schema、adapter、consumer 和多个真实样本
|
||
的端到端证据后才可标为 complete。
|
||
5. 受影响核心集、扩展集和全量 shard 有可复现结果,工程相似通过率、失败数和剩余
|
||
exception 均更新到本地台账。
|
||
6. 代码审查确认没有 sample-specific 分支、gold STEP 参数回填、隐式默认尺寸或为
|
||
通过比较而降低 RP 阈值的行为。
|
||
|
||
## 执行节奏
|
||
|
||
每次改动依次执行:受影响原子测试 -> 受影响真实样本 -> 核心 17 -> 扩展能力矩阵 ->
|
||
对应全量 shard。完成一个 capability family 后,更新
|
||
`ENGINE_CAPABILITY_GAPS_PROGRESS.local.md`,记录新增的通用 contract、剩余边界、
|
||
样本列表、比较证据和下一优先级;该本地台账不提交 Git。
|
||
|
||
全量目标完成时,报告必须按“工程相似”“严格一致”“source exception”“未实现能力”
|
||
和“基础设施失败”分别给出分母、样本 ID、工件和原因。任何仍可执行的模型都必须
|
||
保留输出,不能因未满足最终几何目标而丢弃。
|
||
|
||
## Selector 迁移台账(2026-09-09)
|
||
|
||
已完成第一条迁移边界,而非完整 query-family 实现:CDSL schema 允许保留未知的
|
||
大写 FeatureScript query family;CADFS lowering 对全部 topology fallback 写入 source
|
||
AST、版本、语义 family 和 `feature_script_query` evidence。未在版本化 capability matrix
|
||
登记的 query 使用非空 derivation policy 加 `multiplicity: none`,因此 resolver 在 stable ID、
|
||
geometry、owner 或 current-body fallback 前稳定返回 `selector_query_unsupported`。嵌套的
|
||
extent、COPY 和 INTERSECT selector 同样递归写入 source metadata;COPY/INTERSECT 保留外层
|
||
query family,不错误继承其内部 CAP/SWEPT component。显式 datum plane 单独为
|
||
`GEOMETRIC` / `explicit_datum`,不构成派生 topology 的逃逸通道。
|
||
|
||
此前 core-17 candidate inventory 中有 14 个 runtime-snapshot edge、7 个 runtime-snapshot
|
||
face、7 个 SolidWorks face 和 2 个 plane legacy selector,只有少数 direct-prism provenance
|
||
selector。此次不把这些历史 geometry hint 宣称为 lineage:`00005267`(FeatureScript 1793)F4
|
||
的四个 loft `SWEPT_EDGE` 已从 strict geometry success 改为 F3 executable checkpoint 加
|
||
`selector_query_unsupported`。同类未实现的 CAP/SWEPT/OFFSET/COPY/INTERSECT 及未覆盖的 BLEND
|
||
tuple 必须保留
|
||
候选、bound CDSL、最后 STEP/GLB(可生成时)和诊断,直到具备 source API evidence、lowering、
|
||
adapter history、resolver policy 和 corpus regression 的完整 contract。受限
|
||
`CAP_EDGE@1511`、`SWEPT_FACE@1511`、`SWEPT_EDGE@1511`、`BLEND_EDGE@1511` direct-prism contracts 与
|
||
`SWEPT_EDGE@1511/@2491` full-solid-revolve contracts 不受影响;它们仍只在 capability matrix 的已证明边界内执行。
|
||
|
||
2026-09-10 的 source-version migration 补齐了 import-level evidence:parser 逐条保留直接
|
||
`onshape/std/*` import 的 `{path, version}`,CDSL 顶层 `source_featurescript` 和嵌套 selector
|
||
`source_query` 同时保留 primary import 与完整 import list。resolver 对 provenance selector 先要求
|
||
language version、direct `standard_library` 和 `standard_library_version`,再按 capability matrix 的精确
|
||
三元组匹配。缺 import version 返回 `selector_query_version_unknown`;未登记 library revision 返回
|
||
`selector_query_unsupported`,且不会进入 stable-ID、geometry、owner 或 current-body fallback。全量
|
||
9,347 条 source scan 记录到 `geometry.fs` 与 FeatureScript 版本一一成对变化;只有现有
|
||
`1511` / `geometry.fs@1511.0` direct contracts 保持 executable。该迁移只完善来源证据门槛,不新增
|
||
`COPY`、`SPLIT` 或其他 query family 的执行能力。验证包括 parser/lowering/provenance suite
|
||
`140 passed`、runtime foundation `130 passed, 1 skipped`、以及 fresh `00212904` RP pipeline
|
||
(完整 F1--F5 replay,`rebuilt_rejected`)和 `core-17-selector-standard-library-revision-20260910-v1`
|
||
(1 strict、1 approximate、6 rejected、8 rebuild-failed、1 timeout);所有结果保留各自 STEP/checkpoint。
|
||
同步的 integration/binder regression 也确认现有 immediate CAP shell contract 的真实前缀:`00789939`
|
||
执行 F2/F5 后在 F6 停止并保留两-solid F5 checkpoint,`00090436` 与 `00107631` 的 outward F1/F2
|
||
prefix 都可 rebuild;combined selector/lowering/binding/integration suite 为 `168 passed`。
|
||
|
||
`intersection_of` vertex 是由 `ExecutionSession` 从已解析的 face component 直接计算的特殊
|
||
consumer,因而不能绕开 outer selector 的 provenance gate。runtime 现将 nested/legacy version
|
||
一致性、FeatureScript source version、capability allow-list 和 derivation policy 抽为
|
||
`TopologyRegistry.resolve` 与该 session path 共用的 contract:`multiplicity:none`、未知 version 或
|
||
未登记 capability 的 outer `INTERSECT` 在任何 component resolve 或 OCC 求交前稳定拒绝。没有
|
||
`selector_intent` 的既有显式几何 intersection selector 仍维持其 legacy contract。原子回归覆盖这三种
|
||
拒绝以及 legacy 正向路径(`backend.tests.test_selector_provenance_contract`: 21 passed);这只关闭
|
||
provenance bypass,不新增 general `INTERSECT`、vertex provenance 或 source-qualified section-edge 覆盖。
|
||
当前代码的 shared selector/runtime suite 为 `264 passed, 1 skipped, 43 subtests`(142.57 s;仅既有
|
||
build123d deprecation 与 workplane re-orthogonalization warnings)。真实 `00423838` 以
|
||
`output/session-intersection-outer-gate-20260910` 强制 single-sample pipeline 验证:F7 outer deferred
|
||
`INTERSECT` 在 incremental replay 中报告 `selector_query_unsupported`,并导出 F6 的三个 feature
|
||
executable `rebuild.step` checkpoint;结果是 `rebuild_failed`,不是该 query family 的 RP 成功。
|
||
|
||
2026-09-13 selector 增量:`CAP_FACE@1511` 现在支持一个严格的
|
||
`symmetric_direct_prism_two_sided_up_to_surface_cap_pair`。它不是双向 extent 的通用
|
||
fallback:仅立即前驱、独立 `new_body`、无 draft、两端 blind 的 direct
|
||
`extrude_add_two_sided` 可向其后一个同时双侧 `up_to_surface` 的 extrusion 提供两个远端
|
||
`MakePrism.LastShape` CAP role。两条 source query 必须来自同一 owner、完整且未变的原
|
||
source profile,角色必须恰为 `{extrude.start, extrude.end}`;任一侧单独、同 role、不同
|
||
owner、ADD/CUT、非盲端、IMPRINT/split/partial profile、后续 lifecycle 和所有
|
||
geometry/stable-ID/current-body/STEP fallback 均拒绝。`00215642` F1 -> F3 的 fresh prefix
|
||
rebuild 解析两端 `operation_role` 并成功;`00935255` F7 的两个 owner 不同,保持 deferred。
|
||
这只推进 S1/S2 中一个 CAP output-role consumer tuple,不改变“全量 selector、双向
|
||
up_to_surface 与 body lifecycle 尚未完成”的路线判断。
|
||
|
||
2026-09-13 的 `INTERSECT` 真实语料复核没有扩大该 family 的 allow-list。独立强制
|
||
pipeline `output/intersect-section-matrix-20260913` 重跑了先前 lowering 计数中的六个
|
||
候选:`00739738`、`00380281`、`00962295`、`00980729`、`00491632`、`00789417`。其中只有
|
||
`00491632` F4 是 immediate primary blind cut 的实际
|
||
`source_qualified_primary_section`:两个 direct `SWEPT_FACE` anchor 经同一 OCC section
|
||
relation 唯一以 `kernel_intersection` 解析到 `body:f_F3:edge:36`;后续 chamfer 被 OCC 以
|
||
`Failed creating a chamfer` 拒绝,故它是 selector execution evidence,而非 RP 或 strict
|
||
通过。`00789417` F12 是唯一 explicit `boolean_bodies` section-source form。其 `CAP_FACE` source
|
||
先前会把 F3 builder cap 与 F5 continuation 上缓存的同一 role 误判为多个 input snapshot;resolver
|
||
现只接受 F3 delta 中唯一 complete/proven builder-role relation,故在 F10 snapshot 唯一以
|
||
`kernel_intersection` 解析 section edge。F11 没有该 section edge 到 active member 的 complete/proven
|
||
continuation,F12 在 F11 后仍正确报告 `selector_body_member_inactive`,不能改绑 F10、推断后继或以几何
|
||
替代。因此该样本仍没有 F12 consumer 的 runtime comparison evidence,完整 replay 现保留 F11 prefix。
|
||
|
||
同次运行时修复补齐了 compound body 中单 member dress-up 的历史保留:当所有 fillet/chamfer
|
||
selected edges 以 exact `IsSame` 唯一归属一个 solid member 时,adapter 只向该 member 的 OCC
|
||
builder 请求 `Modified`/`Generated`/`IsDeleted` history,并将其余 member 不变地放回 compound;
|
||
session 仅在每个未选 member 与一个 result member 逐个 reciprocal `IsSame` 时记录
|
||
`body_member_preserve`。跨 member selection、edge 归属不唯一、多个 changed member、非等距/face
|
||
supported chamfer 和 builder failure 仍回到无 lineage 的既有执行路径。`00789417` F11 现导出其
|
||
target member 的 17 条 kernel relations 与未选 member preservation;其 section edge 仍被 OCC
|
||
`IsDeleted`,无 `Modified`/`Generated` result,故不得从物理 result membership 伪造 F10 -> F11
|
||
continuation。这是 operation-wide body/member topology foundation,不增加 general INTERSECT 或
|
||
dress-up selector completion。
|
||
另外四个并非已接受 section contract:它们要么是 deferred `feature_script_query`、要么在
|
||
更早的 selector/lifecycle 或其它 feature capability 处停止。该矩阵结果为 4
|
||
`rebuild_failed`、1 `runtime_ineligible`、1(修复前)`parse_failed`;修复后 `00789417` 为
|
||
`converted_partial` / `rebuild_failed` 并保留 F10 checkpoint。修复只让
|
||
`BLEND_EDGE` 的 `feature_script_query` + `multiplicity:none` preservation state 与已存在的
|
||
`INTERSECT` deferred state 同样可通过 semantic validation;它禁止该 state 声称
|
||
`blend_sources`,runtime 仍在 provenance/geometry fallback 前拒绝。由此保留先前可执行模型,
|
||
但不增加 generic `INTERSECT`、explicit boolean、BLEND_EDGE 或 section-edge completion claim。
|
||
|
||
2026-09-13 的 `OFFSET_EDGE` source-form 审计登记了下一条 selector 工作项,但没有开放
|
||
allow-list。全量 parser 扫描得到 111 个 direct `OFFSET_EDGE` occurrence,主要是 1511 的
|
||
shell 后 `fillet`/`chamfer`。必须先区分两种不可互换的 FeatureScript form:(a) 一个 direct
|
||
source profile edge,外加同一 direct-prism `CAP_EDGE` role 的 TDD;(b) 无 TDD 的一个或多个
|
||
source-edge OSD pair。`output/offset-edge-shell-audit-20260913` 中,`00000316` 与
|
||
`00059593` 已证明 shell builder 能对部分 direct cap-edge 输入给出 complete/proven 的 final
|
||
`shell.wall` edge relation(分别为双向圆筒 inner rim 与矩形 wall edge)。这只能成为 form (a)
|
||
的潜在 source witness,不能解释 form (b) 的 vertex/component query;`00127440` 更在一个
|
||
fillet 中混合了两者,`00154938` 则显示 non-immediate mutation 需要独立 lifecycle proof。
|
||
后续实现须同时具备 versioned source contract、same source-edge/role 的 exact shell relation、
|
||
active member、set-valued dress-up consumer 和多历史 runtime matrix;不得用 output role、
|
||
source role、face-boundary traversal、stable ID、geometry、current body 或 source STEP 代替。
|
||
|
||
随后对这个候选复核发现先前将 `OFFSET_EDGE` 误限为 `shell.wall`:一侧 direct-prism 的
|
||
真实 TDD 例子 `00650671`、`00768679` 请求 `CAP_EDGE:start`,而 shell 删除相反的
|
||
`CAP_FACE:end`。它们的正确 witness 不是 deleted-cap 的 inner wall,而是 source edge 到
|
||
`extrude.start` CAP boundary、再到 shell active member 的 complete/proven one-to-one
|
||
continuation。现已注册严格的 `direct_prism_shell_offset_edge_tdd`:outer `OFFSET_EDGE` 必须
|
||
恰有 singleton OSD 和 singleton TDD(CAP_EDGE),二者指向同一 direct original source edge;
|
||
producer 必须是 1511、independent、undrafted、one-sided blind `new_body` prism;immediate
|
||
inward shell 只能依赖该 producer 并删除相反 cap;immediate fillet/chamfer 才能消费。resolver
|
||
从 source anchor 开始,以 TDD role 过滤 prism boundary,再要求完整 active shell continuation,
|
||
不会选择 `shell.wall`、face boundary、stable ID、geometry、current body 或 source STEP。
|
||
`00650671` F3 因而执行并保留 F3 checkpoint,后续 F4 的 CAP_EDGE ambiguity 独立失败;
|
||
`00768679` F8 完整 rebuild,但 fresh `output/offset-edge-tdd-matrix-20260913` 的 RP/strict
|
||
comparison 仍 rejected(volume/area mismatch),故这是执行证据而非模型质量通过。`00791920`
|
||
的同一 fillet 混合四个 OSD-only 与四个 TDD leaves,整组仍按 set 语义拒绝;two-sided
|
||
`00000316`、non-immediate `00027838`/`00377525`、mixed `00127440`、mutated `00154938`、
|
||
其它版本均不在此 TDD contract。
|
||
|
||
OSD-only 的 source form 现另有 `direct_prism_shell_offset_edge_vertex`,但它不是 retained-cap
|
||
的替代实现:outer `OFFSET_EDGE` 必须恰有一个 OSD,其中恰有两个不同的 direct original profile
|
||
edge,且仅共享一个显式 source endpoint。该 endpoint 的 direct-prism `SWEPT_EDGE` 必须经 immediate
|
||
inward shell 的 complete/proven one-to-one continuation 到 active member;producer 仍严格为 1511、
|
||
independent、undrafted、one-sided blind `new_body` prism,shell 只依赖 producer 且删除一个 CAP face,
|
||
consumer 只能是紧邻 fillet/chamfer。resolver 从 grouped source-vertex anchor 开始,允许 boundary 和
|
||
continuation,但不把 deleted-cap `shell.wall`、cap edge、face boundary、stable ID、geometry、current
|
||
body 或 source STEP 当作证据。`00059593` 的四个 OSD-only OFFSET leaves 与其余 direct prism leaves
|
||
均解析,完整 history 在 `output/offset-edge-vertex-matrix-20260913` 中 rebuild;其 comparison 是
|
||
rejected,故仍只是执行证据。`00791920` 的 OSD-only vertex leaves 与 TDD retained-cap leaves 混在同一
|
||
set,lowering 保留 TDD leaves、将 OSD leaves deferred,整组 `rebuild_failed`,绝不将两种 source
|
||
semantics 合并。two-sided `00000316`、non-immediate/mutated、partial/IMPRINT/split profile、multiple
|
||
removal faces、ADD/CUT、COPY/pattern/transform、OSD component/non-unique vertex、mixed set、其它版本和
|
||
所有 fallback 仍拒绝。`QUERY_SET` parent 不会绕过 leaf lifecycle gate:semantic validation 与
|
||
capability preflight 都递归复核 TDD/vertex leaf 的 shell、producer、source anchor 与 consumer;general
|
||
OFFSET_EDGE、inner shell wall 和 general component/vertex 语义仍未完成。
|
||
|
||
后续的 `TDD(SWEPT_EDGE)` 也不能借用上述任一 contract。全量文本扫描仅发现三个同时含
|
||
`OFFSET_EDGE` / `SWEPT_EDGE` 的 history:`00239888` 的 direct-prism form 仍是 IMPRINT profile,且 shell
|
||
之前已有 fillet;`00882527` 经 `BLEND_EDGE`,`00902029` 经 revolve/`BLEND_EDGE`。因此它们都没有
|
||
independent direct-profile prism -> immediate shell -> complete active continuation 的证据。`00239888` 的
|
||
真实回归固定为 `converted_partial`,在 F6 保留 `swept edge source endpoint provenance is unsupported`,
|
||
绝不将 `TDD(SWEPT_EDGE)` 改写成 CAP-edge retained boundary 或 OSD-only source vertex。此 family 仍需要
|
||
多个符合 source/lifecycle 约束的真实 history、完整 final-snapshot relation 和 dress-up replay evidence;
|
||
IMPRINT/materialized profile、pre-shell dress-up、BLEND/revolve successor 及所有 fallback 继续拒绝。
|
||
|
||
2026-09-14 selector semantic-slot reconciliation: a proven `QUERY_SET` located in an
|
||
operation's declared `feature.selectors` slot now carries that slot recursively to
|
||
its ordered `query_operands`. This permits the already-contractual immediate
|
||
`CAP_FACE` output-role leaves of a fillet/chamfer set to be validated as actual
|
||
consumers, instead of falsely treating them as arbitrary nested mappings. Every
|
||
leaf still receives its own versioned source query, runtime-snapshot evidence,
|
||
owner ordering, direct blind-prism/planar-IMPRINT consumer check, and set
|
||
cardinality/provenance validation. `00965724` F2's `{extrude.start, extrude.end}`
|
||
CAP union now converts completely and rebuilds; a mutated nested owner is rejected.
|
||
This does not admit output roles in metadata, non-`query_operands` structures,
|
||
other operation slots, generic CAP/SWEPT lifecycle, or geometry/stable-ID/current-
|
||
body/source-STEP fallback.
|
||
|
||
2026-09-14 semantic-rejection prefix preservation: a semantic-invalid complete
|
||
candidate remains diagnostic-only as `candidate.invalid.cdsl.json` and is
|
||
never passed to the runtime. The pipeline now separately seeks the longest
|
||
contiguous CDSL feature prefix that independently passes semantic validation,
|
||
saves it as `candidate.prefix.cdsl.json`, and may rebuild it only into
|
||
`prefix.rebuild.*` artifacts. Top-level conversion status remains
|
||
`semantic_validation_failed`; a prefix rebuild never converts it into a full
|
||
candidate success. The regression forces a two-feature real history to reject
|
||
only its complete candidate, verifies the one-feature prefix independently,
|
||
and rebuilds that prefix. No source query, selector, operation, geometry,
|
||
stable-ID, current-body or STEP fallback is admitted by this recovery path.
|
||
|
||
2026-09-14 executable-owner reconciliation: a fillet/chamfer source selector
|
||
whose outer FeatureScript owner has not been lowered into the executable CDSL
|
||
prefix now causes an attributable `selector_owner_unavailable` lowering defer.
|
||
It no longer emits a supported selector with an absent owner and turns a
|
||
recoverable partial model into `semantic_validation_failed`. `00508029` F14 is
|
||
correctly absent after its non-executable profile, F16 defers with that typed
|
||
diagnostic, and the retained CDSL converts partially and rebuilds; its strict
|
||
and RP comparison is rejected, so this is prefix-preservation evidence only. This does
|
||
not resolve the deferred `INTERSECT` query, infer a producer, or add any
|
||
stable-ID, geometry, current-body, or source-STEP fallback.
|
||
|
||
2026-09-14 attached planar-IMPRINT runtime foundation: an already proven
|
||
runtime sketch attachment may now retain its exact native planar face in live
|
||
session state and pass it to the planar-IMPRINT OCC splitter as the support
|
||
argument. This avoids replacing an attached support with the existing artificial
|
||
finite workplane box. The face never enters CDSL, selector metadata, stable IDs
|
||
or a geometry fallback. The contract is only applicable when selected source
|
||
curves exactly partition that support; internal unattached curve fragments do
|
||
not become a region merely because they lie on the same plane. Unattached
|
||
IMPRINT retains its prior unbounded-region rejection. This is foundation only
|
||
for generic use: attached CAP-edge anchors, their support-boundary relation,
|
||
source-region membership, `CAP_EDGE` profile lowering and all generic attached
|
||
IMPRINT/COPY/MERGE forms remain deferred until a complete/proven kernel relation
|
||
and multiple real-history evidence exist. The single direct-prism CAP-edge
|
||
source tuple documented below is deliberately separate from this generic claim.
|
||
|
||
2026-09-14 direct CAP_FACE runtime workplane: a `newSketch` can now attach to
|
||
one direct blind independent prism cap under the explicit
|
||
`direct_prism_cap_face_workplane` contract. It retains the source CAP query and
|
||
requires the immediate feature consumer to resolve the builder's active native
|
||
output role; no static plane, record ID, geometry or aggregate-body inference
|
||
is serialized. `00126630` F1 -> F2 lowers as this attachment, and an
|
||
equivalent immediate consumer resolves by `operation_role`; delayed consumers
|
||
are rejected by semantic validation. This supplies the support face for the
|
||
bounded attached IMPRINT contract below; CUT/ADD, boolean/COPY/pattern
|
||
successors and all generic CAP_FACE sketch-host behavior remain deferred.
|
||
|
||
2026-09-14 attached IMPRINT external-boundary contract: `planar_imprint` can
|
||
now retain a named external edge selector only under a runtime face attachment;
|
||
the fragment selects that external anchor instead of a same-sketch curve.
|
||
Execution resolves the edge in the active feature context and accepts it only
|
||
when native `IsSame` proves that it is a boundary of the already resolved
|
||
support face. The splitter receives that live edge only in session memory; no
|
||
edge geometry, record ID or support topology is serialized into materialized
|
||
sketch data. Missing, dual, non-edge or non-boundary anchors reject. Generic
|
||
use remains runtime/CDSL foundation only. A narrow source admission now exists
|
||
for `00126630`'s direct-prism form: one local circle, one direct
|
||
same-owner CAP-edge, one `INTERSECT(VERTEX)` fragment witness, and the immediate
|
||
`direct_prism_cap_face_workplane` attachment from that same output role. The
|
||
lowerer emits an external anchor only after every predicate holds; session
|
||
requires the resolved edge to be an exact support boundary, and converts source
|
||
IMPRINT face-side orientation only in the live attachment frame. F1 -> F3
|
||
lowers and its prefix rebuilds with CAP face `operation_role` and CAP edge
|
||
`kernel_lineage` evidence; mutating the CAP-edge owner preserves the old named
|
||
F3 defer. This is one real history and does not complete CAP-edge/attached-
|
||
IMPRINT family coverage: multiple anchors/fragments, B-splines/periodic seams,
|
||
SWEPT_FACE/COPY/MERGE hosts, CUT/ADD, later lifecycle, pattern/boolean and
|
||
generic region cardinality remain deferred pending multiple-corpus evidence.
|