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
+41 -1
View File
@@ -49,6 +49,42 @@ def _failed_feature_id(error: Exception) -> str | None:
return match.group(1) if match else None
def _last_preflight_executable_prefix(
cdsl: dict[str, Any], analysis: Any, output: Path,
) -> dict[str, Any] | None:
"""Persist the contiguous executable prefix rejected by later preflight."""
feature_results = list(getattr(analysis, "feature_results", ()) or ())
first_blocked = next(
(index for index, result in enumerate(feature_results) if not result.executable),
None,
)
if first_blocked in (None, 0):
return None
features = list(cdsl.get("features") or [])
if first_blocked > len(features):
return None
prefix = deepcopy(cdsl)
prefix["features"] = features[:first_blocked]
try:
prefix_result = rebuild_candidate(prefix, output)
except Exception:
return None
if prefix_result.get("status") != "rebuilt":
nested_prefix = prefix_result.get("last_executable_prefix")
return nested_prefix if isinstance(nested_prefix, dict) else None
result = prefix_result.get("result")
if not isinstance(result, dict):
return None
return {
"failed_feature_id": feature_results[first_blocked].feature_id,
"feature_count": first_blocked,
"last_feature_id": features[first_blocked - 1].get("id"),
"bound_cdsl": prefix_result.get("bound_cdsl", prefix),
"result": result,
}
def rebuild_candidate(cdsl: dict[str, Any], output: Path) -> dict[str, Any]:
from engine.cdsl_engine.runtime import analyze_cdsl, finalize_cdsl_execution
from .selector_binding import bind_and_execute_candidate_selectors
@@ -56,7 +92,11 @@ def rebuild_candidate(cdsl: dict[str, Any], output: Path) -> dict[str, Any]:
analysis = analyze_cdsl(cdsl)
analysis_dict = analysis.as_dict() if hasattr(analysis, "as_dict") else {"runtime_eligible": analysis.runtime_eligible}
if not analysis.runtime_eligible:
return {"status": "runtime_ineligible", "analysis": analysis_dict}
result = {"status": "runtime_ineligible", "analysis": analysis_dict}
prefix = _last_preflight_executable_prefix(cdsl, analysis, output)
if prefix is not None:
result["last_executable_prefix"] = prefix
return result
try:
replay = bind_and_execute_candidate_selectors(cdsl)
result = finalize_cdsl_execution(replay.execution, output)