Block conflicting extension write selectors

This commit is contained in:
2026-07-26 17:54:52 +03:00
parent d99d57eaf9
commit ad4bd3ec72
7 changed files with 394 additions and 15 deletions
+34 -1
View File
@@ -401,7 +401,7 @@ def validate_write_preflight(
failures.append({"code": "write_preflight_not_ok", "label": label, "path": str(path), "status": report.get("status")})
if report.get("failures"):
failures.append({"code": "write_preflight_failures_present", "label": label, "path": str(path), "failures": report.get("failures")})
for check in ("method_exposed", "effective_path_preflight", "concrete_saved_state_preflight", "name_first_extension_form_preflight"):
for check in ("method_exposed", "effective_path_preflight", "concrete_saved_state_preflight", "name_first_extension_form_preflight", "conflicting_extension_selector_preflight"):
if check not in checks:
failures.append({"code": "write_preflight_check_missing", "label": label, "check": check, "path": str(path)})
expect_check(checks, failures, label, path, "method_exposed", {"status": "ok"}, failure_code="write_preflight_check_field_unexpected")
@@ -470,6 +470,31 @@ def validate_write_preflight(
"repository_layer_id": repository_layer or None,
"support_layer_id": support_layer or None,
})
conflicting_extension = checks.get("conflicting_extension_selector_preflight") if isinstance(checks.get("conflicting_extension_selector_preflight"), dict) else {}
if conflicting_extension.get("status") == "skipped_no_public_extension_form_target":
if require_name_first_form:
failures.append({
"code": "write_preflight_extension_conflict_check_required",
"label": label,
"path": str(path),
})
else:
expect_check(
checks,
failures,
label,
path,
"conflicting_extension_selector_preflight",
{
"schema": "onec_metadata_write_preflight.v1",
"status": "blocked",
"allowed": False,
"resolution_status": "conflict",
"error": "extension_selector_conflict",
"layer_id": "extension:unresolved",
},
failure_code="write_preflight_check_field_unexpected",
)
if require_mcp_initialize:
if "mcp.initialize" not in checks:
failures.append({"code": "write_preflight_check_missing", "label": label, "check": "mcp.initialize", "path": str(path)})
@@ -1633,6 +1658,14 @@ def write_self_test_reports(report_dir: Path, *, base_id: str, composed: bool, s
"name_first": True,
"extension": "test2",
},
"conflicting_extension_selector_preflight": {
"schema": "onec_metadata_write_preflight.v1",
"status": "blocked",
"allowed": False,
"resolution_status": "conflict",
"error": "extension_selector_conflict",
"layer_id": "extension:unresolved",
},
},
"failures": [],
}