Complete name-first MCP write-plan composition
This commit is contained in:
@@ -135,6 +135,13 @@ def first_unique_fragment(text: str) -> str:
|
||||
return text
|
||||
|
||||
|
||||
def is_optional_write_gate_block(result: dict[str, Any]) -> bool:
|
||||
return result.get("status") == "blocked" and result.get("error") in {
|
||||
"needs_repository_lock",
|
||||
"support_gate_blocked",
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description="Smoke-test agent-facing 1C code.write saved-state workflow.")
|
||||
parser.add_argument("--transport", choices=("rest", "mcp"), default="rest")
|
||||
@@ -146,6 +153,11 @@ def main() -> int:
|
||||
parser.add_argument("--object-name", default="t_Форма")
|
||||
parser.add_argument("--routine-name", default="ЗаменаДомена")
|
||||
parser.add_argument("--allow-missing-target", action="store_true")
|
||||
parser.add_argument(
|
||||
"--allow-blocked-write-gate",
|
||||
action="store_true",
|
||||
help="Skip successfully when the target exists but repository/support policy blocks the first write.",
|
||||
)
|
||||
parser.add_argument("--timeout", type=int, default=60)
|
||||
parser.add_argument("--report", type=str)
|
||||
parser.add_argument("--json", action="store_true")
|
||||
@@ -223,6 +235,33 @@ def main() -> int:
|
||||
"write_mode": write.get("write_mode"),
|
||||
}
|
||||
)
|
||||
if args.allow_blocked_write_gate and is_optional_write_gate_block(write):
|
||||
report = {
|
||||
"schema": "onec_code_write_saved_state_smoke.v1",
|
||||
"status": "skipped_write_gate",
|
||||
"skipped": True,
|
||||
"endpoint_url": endpoint_url,
|
||||
"transport": args.transport,
|
||||
"base_id": args.base_id,
|
||||
"target": {"object_type": args.object_type, "object_name": args.object_name, "routine_name": args.routine_name},
|
||||
"steps": steps,
|
||||
"write_gate": {
|
||||
"status": write.get("status"),
|
||||
"error": write.get("error"),
|
||||
"diagnostics": write.get("diagnostics"),
|
||||
},
|
||||
"failures": [],
|
||||
**({"mcp_initialize": initialize_result} if initialize_result and args.transport == "mcp" else {}),
|
||||
}
|
||||
if args.report:
|
||||
os.makedirs(os.path.dirname(os.path.abspath(args.report)), exist_ok=True)
|
||||
with open(args.report, "w", encoding="utf-8") as handle:
|
||||
json.dump(report, handle, ensure_ascii=False, indent=2)
|
||||
if args.json:
|
||||
print(json.dumps(report, ensure_ascii=False, indent=2))
|
||||
else:
|
||||
print(f"1C code.write saved-state smoke: {report['status']}")
|
||||
return 0
|
||||
write_mode = write.get("write_mode") if isinstance(write.get("write_mode"), dict) else {}
|
||||
require_saved_state_write(write, "code.write routine apply", failures)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user