Files
cdsl-cad/cadfs_to_cdsl/CADFS_FULL_CAPABILITY_TARGET.md

1890 lines
173 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 shellcircle 保持既有独立圆柱 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 policylowering 不再只接受 singleton `qUnion` | `qUnion``qIntersection``qSubtraction``qBodyType`、construction filter、`qCreatedBy` | 所有 deferred composed query |
| S0 | 通用 topology delta 与 relation component | adapter 对每个支持 builder 输出 exact input/final handlesregistry 保存 N:M component、cross-kind relation、coverage/status | boolean、extrude/revolve、fillet/chamfer、shell、transform | `INTERSECT`/IMPRINT 383CAP 335SWEPT 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 201CAP_EDGE 134SWEPT_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 187transform 252pattern 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 100up-to-next 49 |
| S2 | Datum / adjacency / geometry-derived queries | explicit datum versus topology provenance distinctioncurve/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 递归、版本化地写入 CDSLschema 和
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 recordsunion 按 source 顺序以 exact record ID 去重,
intersection 保留第一 operand 的顺序且只取所有 operand 共同的 exact IDsubtraction 保留左
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 contractnested/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 policyruntime 先按 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 tuplenested edge 必须来自该 cut 的 direct、undrafted blind prism
source profile。adapter/runtime 只接受两条连续的 complete/proven kernel relationsource
edge -> transient `extrude.start|end` cap boundary,随后是同 feature `subtract` 的一对一
continuation 到唯一 active edge。transient tool 从不成为 selectable topologyresolver
返回 `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 均不属于这条 bridgegeneral 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 frameruntime 必须先以
`extrude.start|end` 得到唯一 transient cap,再以同 owner `subtract` 的唯一 complete/proven continuation
得到一个 active planar face。只有此后才从该 exact face 的 native UV direction 和 support plane 物化右手
workplane 并重新解析 local profilehole 同样从该 runtime face 计算 local locations。没有 geometry、stable/
snapshot ID、current body 或 source STEP fallbacktransient tool 也永远不可选。`00573124` F3--F5hole)和
`00951631` F3--F5blind cut)都以 `copy_lineage` rebuildfresh 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 均不属于该 bridgegeneral 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 deltaprimary 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 都必须恰为
一个 solidtool 必须具有 complete/proven direct-prism delta 和 source anchors。executor 先把
tool 登记为 transient prism snapshot,再且仅在 `BRepAlgoAPI_Fuse` 返回 exact topology history
时登记它到 active union result 的 continuationtool 本身不能成为可选拓扑。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 都为单一 solidtool 只作为
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 将这条消费意图显式标成该 contractruntime
要求一个 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 memberdress-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` 都是内部 seamexecutor
只将 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 bridgeS1 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 relationfuse 删除、未返回或不在最终 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` contractouter 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 graphfeature 输出 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 membersemantic 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 memberaggregate 只用于 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 的受限 lineagedirect
`SWEPT_BODY` 可从初始 `new_body` 经 ordinary fusing add、单 body fillet/chamfer/shell
与 exact non-copy transform 续接到当前 CDSL membercut 保留所选 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 memberCDSL 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 relationregistry 只在 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 targetadapter 现在逐 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 historyfresh
`/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 roleregistry 只会在
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 snapshotresolver 再要求唯一 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
contractadapter 将 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 fallbackprovenance/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 wiresadapter 将外环和全部内环一次
交给 `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 bridgeproducer 必须是首个
实体结果、恰好两个 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` 能消费该
rolesemantic/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` vertexlowering 记录 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 bridgePipeShell 不提供
`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
relationexecutor 把同一 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 的独立 bridgePipeShell
`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 并 rebuiltprofile/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 bridgePipeShell
`Generated(profile_vertex)` 的 final `EDGE` outputs 逐一通过 solid `IsSame` membership,作为
profile vertex -> swept edge 的 complete/proven `boundary` relation。仅完整、直接、无 inner wire 的
analytic closed profile 可记录所有唯一 source edgeSWEPT_EDGE OSD 必须恰含两条相邻 profile edge
和一条 direct source path edge,前两者作为 runtime vertex anchorpath 仅保留在 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 rolelowering
只保留一个 direct source-profile edge anchorresolver 必须逐段验证 `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/172 `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/717 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 contractproducer 必须是紧邻的 1511 independent、undrafted、blind `new_body`
`extrude_add_blind`。它允许 IMPRINT profile 没有保留完整 source sketch,但 OSD 只能指向一个在 selected
profile 与原 source sketch 中均恰好出现一次、workplane 与完整 segment 完全相同的 original edgeselector
仅允许 `boundary`、不带 output role/stable ID/geometry/binding ID,也只能作为下一 feature 的
one-sided `up_to_surface` reference。semantic validation 与 capability preflight 重复检查 producer、source
import、精确 source edge 和即时 ownerruntime 仍只接受 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
tuple1511 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 tuple1511 的 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 membershell 不可从 tool face、closing descendant、面几何、stable ID、current body 或 source STEP
取代其中任一环。`00020670` F1 -> F3 -> F4 是当前唯一的 native positiveF4 由两段
`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 acceptanceADD、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 生成该 profileF1--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
纵向 contractsource 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` contractunchanged direct profile 的完整 incident source-edge
set 唯一命名一个 vertexadapter 仅以 `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 passstrict 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 contractouter 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 prismadapter/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`
loftOCP 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` contractOSD 必须恰好包含同一
unchanged direct profile 中两个不同、共享唯一原始端点的 source edgeadapter 以
`BRepPrimAPI_MakePrism.FirstShape(source_vertex)` / `LastShape(source_vertex)` 获取端帽 vertex,并以
final B-rep explorer 的 `IsSame` 将历史句柄绑定到最终顶点 record。由于 build123d 重复
`body.vertices()` 调用不会保留该句柄 identityvertex record 改为从最终 B-rep explorer 导出;这不是
坐标或近邻匹配。lowering 只接受 `1511`、紧邻、独立、无 draft 的 `new_body` blind
`extrude_add_blind` producer 与 one-sided `UP_TO_VERTEX` consumerresolver 只沿唯一
`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`
continuationaggregate `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/rebuildfresh `/private/tmp/cadfs-source-vertex-extent-20260914-r2` strict/RP 均通过;
2026-09-14 的全语料 source audit 发现 16 个 `UP_TO_VERTEX` history15 个已 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/wiresource
sketch entity 必须仍对应一个 exact direct-profile edgequery 的 `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 consumerboundary-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 prismshell 恰移除该 prism 的一个 CAP,且 OFFSET query 恰指向
其未修改、单闭合凸线性 profile 中的一条非 construction linelowering 才根据 source
profile 的相邻边 offset 交点、shell thickness、实际 start/end cap frame 构造四边内壁。
它不复用整张 source sketch,也不从 STEP 反推 trimdraft、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` consumerruntime 仍要求
唯一 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 都完整 lowerF1--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 附着 F6F5 后该 F4 owner 仍有唯一
continuationF7 的 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 sidesolver
仅转换这些精确曲线,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-repregistry 只登记 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 skippedfresh 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 sourcesolver 现在保留一条带 workplane frame 的 OCC circle edge,而不将
它预拆为四条 contour arcfragment 的 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 contractFeatureScript 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 failureF2 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` F2F1/E2 two-point B-spline)现在
converted/rebuilt 且无 runtime diagnosticartifact 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 cycleadapter 以 `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 graphtool 的 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 后不再有独立 memberruntime 仅在 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。实现参考
SimpleCADAPIApache-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 contractprofile 与 line axis 必须来自同一 source sketch
original-set 的至少两条 non-construction edges 必须唯一指向一个 non-axis vertexadapter 仅接受
`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-upF3 的非唯一 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 contractlowering 仅接受原始
`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 solidschema、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 仅切除 F1rebuild 保留两个 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 passedstrict 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 推断
planepartial revolve、非 revolve、curve/derived face 或任一未解析 frame 都保留原有
mirror-plane diagnostic。`00000385` 的 F5 是正例(XY planeF5 executed);
`00023074` 保留拒绝边界。五样本
`output/mirror-revolve-plane-matrix-20260909` 为 2 RP、3 rejected,且只移除了
`00000385` F5 的 plane deferF2 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 contractdirect `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 仍 activeschema、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 historyFeatureScript 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 tests1 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 relationtyped
`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` edgeFeatureScript 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 featurepipeline 正确分类为 `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 contractdirect `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 workplaneconstruction 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 使用该 originfresh incremental replay 保留 F1--F9
executable prefixF10 在既有 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 prismlowered 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 也完整 lowermutating 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 vertexF1/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 planeqAdjacent/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 featureschema、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 的平移可重新 lowersource sketch origin 为 `[-69.3, 0, 0]`,并以既有非-copy
transform contract 烘焙进该 source sketchparser 回归同时确认 `-(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 evidenceresolver 必须据此证明 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 familyCADFS 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 metadataCOPY/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 1793F4
的四个 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 evidenceparser 逐条保留直接
`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 都可 rebuildcombined 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 snapshotresolver
现只接受 F3 delta 中唯一 complete/proven builder-role relation,故在 F10 snapshot 唯一以
`kernel_intersection` 解析 section edge。F11 没有该 section edge 到 active member 的 complete/proven
continuationF12 在 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` prismimmediate
inward shell 只能依赖该 producer 并删除相反 capimmediate 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 仍 rejectedvolume/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 memberproducer 仍严格为 1511、
independent、undrafted、one-sided blind `new_body` prismshell 只依赖 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 混在同一
setlowering 保留 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 gatesemantic validation 与
capability preflight 都递归复核 TDD/vertex leaf 的 shell、producer、source anchor 与 consumergeneral
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.