Accept optional saved-state smoke skips

This commit is contained in:
2026-07-26 17:18:38 +03:00
parent 9d7c4f38f3
commit c1d5d06f6d
4 changed files with 71 additions and 8 deletions
+61 -6
View File
@@ -686,7 +686,14 @@ def validate_saved_state_form(
if status not in {"skipped_no_saved_state", "verified_and_rolled_back"}: if status not in {"skipped_no_saved_state", "verified_and_rolled_back"}:
failures.append({"code": "saved_state_form_status_unexpected", "path": str(path), "status": status}) failures.append({"code": "saved_state_form_status_unexpected", "path": str(path), "status": status})
if status in {"skipped_no_saved_state", "verified_and_rolled_back"}: if status in {"skipped_no_saved_state", "verified_and_rolled_back"}:
validate_saved_state_preflight(preflight, failures, "saved_state_form", path, expected_count_keys=("forms", "scanned", "limit")) expected_count_keys = ("forms", "limit") if status == "skipped_no_saved_state" else ("forms", "scanned", "limit")
validate_saved_state_preflight(
preflight,
failures,
"saved_state_form",
path,
expected_count_keys=expected_count_keys,
)
if status == "skipped_no_saved_state": if status == "skipped_no_saved_state":
if report.get("skipped") is not True: if report.get("skipped") is not True:
failures.append({"code": "saved_state_form_skip_flag_missing", "path": str(path), "skipped": report.get("skipped")}) failures.append({"code": "saved_state_form_skip_flag_missing", "path": str(path), "skipped": report.get("skipped")})
@@ -745,7 +752,8 @@ def validate_saved_state_module(
write_plan = report.get("write_plan") if isinstance(report.get("write_plan"), dict) else {} write_plan = report.get("write_plan") if isinstance(report.get("write_plan"), dict) else {}
preflight = report.get("saved_state_preflight") if isinstance(report.get("saved_state_preflight"), dict) else {} preflight = report.get("saved_state_preflight") if isinstance(report.get("saved_state_preflight"), dict) else {}
preflight_counts = preflight.get("counts") if isinstance(preflight.get("counts"), dict) else {} preflight_counts = preflight.get("counts") if isinstance(preflight.get("counts"), dict) else {}
table = table_from_module_ref(report.get("module_ref")) table = report.get("table") or report.get("saved_state_table") or table_from_module_ref(report.get("module_ref"))
skip_statuses = {"skipped_no_saved_state", "skipped_no_saved_state_candidate"}
summary = { summary = {
"path": str(path), "path": str(path),
"status": report.get("status"), "status": report.get("status"),
@@ -763,15 +771,26 @@ def validate_saved_state_module(
expect_report_identity(report, failures, label, path, expected_base_id=base_id) expect_report_identity(report, failures, label, path, expected_base_id=base_id)
if table not in SAVED_STATE_TABLES: if table not in SAVED_STATE_TABLES:
failures.append({"code": "saved_state_module_table_unexpected", "path": str(path), "module_ref": report.get("module_ref")}) failures.append({"code": "saved_state_module_table_unexpected", "path": str(path), "module_ref": report.get("module_ref")})
if require_write and report.get("status") == "skipped_no_saved_state": if require_write and report.get("status") in skip_statuses:
failures.append({"code": "saved_state_module_write_required", "path": str(path)}) failures.append({"code": "saved_state_module_write_required", "path": str(path)})
if report.get("status") not in {"skipped_no_saved_state", "verified_and_rolled_back"}: if report.get("status") not in skip_statuses | {"verified_and_rolled_back"}:
failures.append({"code": "saved_state_module_status_unexpected", "path": str(path), "status": report.get("status")}) failures.append({"code": "saved_state_module_status_unexpected", "path": str(path), "status": report.get("status")})
if report.get("status") in {"skipped_no_saved_state", "verified_and_rolled_back"}: if report.get("status") in {"skipped_no_saved_state", "verified_and_rolled_back"}:
validate_saved_state_preflight(preflight, failures, "saved_state_module", path, expected_count_keys=("modules", "scanned", "limit")) expected_count_keys = ("modules", "limit") if report.get("status") == "skipped_no_saved_state" else ("modules", "scanned", "limit")
if report.get("status") == "skipped_no_saved_state": validate_saved_state_preflight(
preflight,
failures,
"saved_state_module",
path,
expected_count_keys=expected_count_keys,
)
if report.get("status") in skip_statuses:
if report.get("skipped") is not True: if report.get("skipped") is not True:
failures.append({"code": "saved_state_module_skip_flag_missing", "path": str(path), "skipped": report.get("skipped")}) failures.append({"code": "saved_state_module_skip_flag_missing", "path": str(path), "skipped": report.get("skipped")})
if report.get("status") == "skipped_no_saved_state_candidate":
diagnostics = report.get("diagnostics") if isinstance(report.get("diagnostics"), dict) else {}
if not str(diagnostics.get("message") or "").strip():
failures.append({"code": "saved_state_module_skip_diagnostics_missing", "path": str(path)})
if report.get("status") == "verified_and_rolled_back": if report.get("status") == "verified_and_rolled_back":
if write_plan.get("allowed") is not True: if write_plan.get("allowed") is not True:
failures.append({"code": "saved_state_module_write_plan_not_allowed", "path": str(path), "write_plan": write_plan}) failures.append({"code": "saved_state_module_write_plan_not_allowed", "path": str(path), "write_plan": write_plan})
@@ -1906,6 +1925,40 @@ def run_self_test() -> dict[str, Any]:
if soft["failures"]: if soft["failures"]:
failures.append({"code": "self_test_soft_unexpected_failures", "failures": soft["failures"]}) failures.append({"code": "self_test_soft_unexpected_failures", "failures": soft["failures"]})
public_skip_dir = reports_root / "public_skip"
write_self_test_reports(public_skip_dir, base_id="public_skip", composed=False, saved_state_written=False)
public_form_path = public_skip_dir / "saved-state-write-routes-smoke.json"
public_form_report = json.loads(public_form_path.read_text(encoding="utf-8"))
public_form_report["saved_state_preflight"]["counts"].pop("scanned", None)
write_json(public_form_path, public_form_report)
public_module_path = public_skip_dir / "module-stream-write-smoke-script.json"
public_module_report = json.loads(public_module_path.read_text(encoding="utf-8"))
public_module_report.update({
"status": "skipped_no_saved_state_candidate",
"table": "ConfigCASSave",
"diagnostics": {"message": "no safe saved-state BSL module stream candidates found"},
})
public_module_report.pop("module_ref", None)
public_module_report.pop("saved_state_preflight", None)
public_module_report.pop("write_plan", None)
public_module_report.pop("metadata_write", None)
write_json(public_module_path, public_module_report)
public_skip = validate_base("public_skip", public_skip_dir, validator_args())
if public_skip["failures"]:
failures.append({"code": "self_test_public_skip_unexpected_failures", "failures": public_skip["failures"]})
public_skip_strict = validate_base(
"public_skip",
public_skip_dir,
validator_args(require_saved_state_write_smoke=True),
)
public_skip_strict_codes = {str(failure.get("code")) for failure in public_skip_strict["failures"]}
if "saved_state_module_write_required" not in public_skip_strict_codes:
failures.append({
"code": "self_test_public_skip_strict_expected_failure_missing",
"expected": "saved_state_module_write_required",
"actual": sorted(public_skip_strict_codes),
})
strict_skip = validate_base( strict_skip = validate_base(
base_id, base_id,
report_dir, report_dir,
@@ -2339,6 +2392,8 @@ def run_self_test() -> dict[str, Any]:
"schema": "onec_verify_reports_self_test.v1", "schema": "onec_verify_reports_self_test.v1",
"passed": not failures, "passed": not failures,
"soft": soft, "soft": soft,
"public_skip": public_skip,
"public_skip_strict_failure_codes": sorted(public_skip_strict_codes),
"strict_skip_failure_codes": sorted(strict_codes), "strict_skip_failure_codes": sorted(strict_codes),
"coverage_failure_codes": sorted(coverage_codes), "coverage_failure_codes": sorted(coverage_codes),
"consistency_failure_codes": sorted(consistency_codes), "consistency_failure_codes": sorted(consistency_codes),
+4
View File
@@ -171,6 +171,10 @@ def check_adapter_verify_wiring(scripts: list[Path], executable: str) -> list[st
failures.append("verify_1c_adapter_deployment.ps1 must pass --require-write-plan-composition to both REST and MCP selector-chain smoke commands.") failures.append("verify_1c_adapter_deployment.ps1 must pass --require-write-plan-composition to both REST and MCP selector-chain smoke commands.")
if "--allow-empty-saved-state" not in verify_text or "if (-not $RequireSavedStateWriteSmoke)" not in verify_text: if "--allow-empty-saved-state" not in verify_text or "if (-not $RequireSavedStateWriteSmoke)" not in verify_text:
failures.append("verify_1c_adapter_deployment.ps1 must allow empty saved-state only when -RequireSavedStateWriteSmoke is not set.") failures.append("verify_1c_adapter_deployment.ps1 must allow empty saved-state only when -RequireSavedStateWriteSmoke is not set.")
if '"skipped_no_saved_state_candidate"' not in verify_text:
failures.append("verify_1c_adapter_deployment.ps1 must accept a missing safe module candidate in optional saved-state smoke mode.")
if "$RequireWrite -and $report.status -in $skipStatuses" not in verify_text:
failures.append("verify_1c_adapter_deployment.ps1 must reject all saved-state module skip statuses in strict mode.")
if "function Get-DuplicateValues" not in verify_text or "Duplicate BaseId value(s)" not in verify_text: if "function Get-DuplicateValues" not in verify_text or "Duplicate BaseId value(s)" not in verify_text:
failures.append("verify_1c_adapter_deployment.ps1 must reject duplicate -BaseId values before writing reports.") failures.append("verify_1c_adapter_deployment.ps1 must reject duplicate -BaseId values before writing reports.")
if "function Normalize-BaseIds" not in verify_text or '-split ","' not in verify_text: if "function Normalize-BaseIds" not in verify_text or '-split ","' not in verify_text:
@@ -99,6 +99,7 @@ def main() -> int:
"status": "skipped_no_saved_state_candidate", "status": "skipped_no_saved_state_candidate",
"skipped": True, "skipped": True,
"base_id": args.base_id, "base_id": args.base_id,
"table": args.table,
"saved_state_table": args.table, "saved_state_table": args.table,
"diagnostics": {"message": str(exc)}, "diagnostics": {"message": str(exc)},
} }
@@ -127,6 +128,7 @@ def main() -> int:
"status": "skipped_no_saved_state", "status": "skipped_no_saved_state",
"skipped": True, "skipped": True,
"base_id": args.base_id, "base_id": args.base_id,
"table": args.table,
"module_ref": module_ref, "module_ref": module_ref,
"saved_state_preflight": {"status": saved_state.get("status"), "counts": saved_state.get("counts")}, "saved_state_preflight": {"status": saved_state.get("status"), "counts": saved_state.get("counts")},
} }
@@ -181,6 +183,7 @@ def main() -> int:
"schema": "onec_module_stream_write_smoke.v1", "schema": "onec_module_stream_write_smoke.v1",
"status": "verified_and_rolled_back", "status": "verified_and_rolled_back",
"base_id": args.base_id, "base_id": args.base_id,
"table": args.table,
"module_ref": module_ref, "module_ref": module_ref,
**({"saved_state_preflight": auto_target.get("discovery")} if auto_target else {}), **({"saved_state_preflight": auto_target.get("discovery")} if auto_target else {}),
"write_plan": { "write_plan": {
+3 -2
View File
@@ -336,10 +336,11 @@ function Assert-SavedStateModuleWriteReport {
[switch]$RequireWrite [switch]$RequireWrite
) )
$report = Read-JsonReport -Label $Label -Path $Path $report = Read-JsonReport -Label $Label -Path $Path
if ($RequireWrite -and $report.status -eq "skipped_no_saved_state") { $skipStatuses = @("skipped_no_saved_state", "skipped_no_saved_state_candidate")
if ($RequireWrite -and $report.status -in $skipStatuses) {
throw "$Label report skipped saved-state module write in strict mode: $Path" throw "$Label report skipped saved-state module write in strict mode: $Path"
} }
if ($report.status -notin @("skipped_no_saved_state", "verified_and_rolled_back")) { if ($report.status -notin ($skipStatuses + @("verified_and_rolled_back"))) {
throw "$Label report has unexpected status '$($report.status)': $Path" throw "$Label report has unexpected status '$($report.status)': $Path"
} }
if ($report.status -eq "verified_and_rolled_back" -and $report.write_plan.allowed -ne $true) { if ($report.status -eq "verified_and_rolled_back" -and $report.write_plan.allowed -ne $true) {