feat(cadfs): expand selector provenance coverage

This commit is contained in:
2026-09-14 11:00:14 +08:00
parent 994d06aaea
commit de21ee8a5b
45 changed files with 19837 additions and 842 deletions
@@ -24,9 +24,11 @@ def _execute_boolean_bodies(node: FeaturePlanNode, session: "ExecutionSession")
params = node.params
target_ids = _member_sources(
node, session, "target_feature_ids", pattern_instance_parameter="target_pattern_instance_refs",
allow_transform_copies=True, transform_copy_parameter="target_transform_copy_refs",
)
tool_ids = _member_sources(
node, session, "tool_feature_ids", pattern_instance_parameter="tool_pattern_instance_refs",
allow_transform_copies=True, transform_copy_parameter="tool_transform_copy_refs",
)
targets = {feature_id: session.body_members[feature_id] for feature_id in target_ids}
tools = {feature_id: session.body_members[feature_id] for feature_id in tool_ids}
@@ -49,6 +51,12 @@ def _execute_boolean_bodies(node: FeaturePlanNode, session: "ExecutionSession")
}
members[node.feature_id] = result
if bool(params.get("keep_tools")):
# In a targetless FeatureScript body-set operation every selected
# member is semantically a tool. Lowering chooses the first source
# member only to satisfy CDSL's binary executor shape, so retain that
# left operand too when the explicit targetless contract requests it.
if bool(params.get("targetless_body_set")):
members.update(targets)
members.update(tools)
session.register_body(
node.feature_id, _combine_members(session, members), body_members=members, topology_delta=topology_delta,