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