fix: 修正 CaseRun HWPOD 合同复核
This commit is contained in:
+17
-4
@@ -663,7 +663,7 @@ class NodeOpsExecutor:
|
||||
baud = args.get("baudRate") or args.get("baudrate")
|
||||
status = self._spawn_output([*command_base, "monitor", "status"], serial_dir, timeout_ms)
|
||||
status_body = self._parse_json(status.get("stdout"))
|
||||
data = status_body.get("data") if isinstance(status_body.get("data"), dict) else {}
|
||||
data = status_body.get("data") if isinstance(status_body, dict) and isinstance(status_body.get("data"), dict) else {}
|
||||
active_port = str(data.get("port") or "")
|
||||
active_baud = data.get("baudRate")
|
||||
monitor_start = None
|
||||
@@ -672,10 +672,23 @@ class NodeOpsExecutor:
|
||||
start_args = ["monitor", "start", *(["-p", port] if port else []), *(["-b", str(baud)] if baud else [])]
|
||||
start = self._spawn_output([*command_base, *start_args], serial_dir, timeout_ms)
|
||||
start_body = self._parse_json(start.get("stdout"))
|
||||
monitor_start = start_body or start
|
||||
if not start.get("ok") or start_body.get("success") is not True:
|
||||
monitor_start = start_body if isinstance(start_body, dict) and start_body else start
|
||||
if not start.get("ok") or not isinstance(start_body, dict) or start_body.get("success") is not True:
|
||||
ports = self._spawn_output([*command_base, "ports"], serial_dir, timeout_ms)
|
||||
return {"ok": False, "blockerCode": "hwpod_uart_monitor_start_failed", "summary": f"serial-monitor could not start on {port or 'the requested UART'}{('/' + str(baud)) if baud else ''}", "details": {"requestedPort": port or None, "baudRate": baud, "serialMonitor": {"dir": str(serial_dir), "command": command_base, "monitorStatus": status_body or status, "start": start_body or start, "ports": self._parse_json(ports.get("stdout")) or ports}}}
|
||||
return {"ok": False, "blockerCode": "hwpod_uart_monitor_start_failed", "summary": f"serial-monitor could not start on {port or 'the requested UART'}{('/' + str(baud)) if baud else ''}", "details": {"requestedPort": port or None, "baudRate": baud, "serialMonitor": {"dir": str(serial_dir), "command": command_base, "monitorStatus": status_body or status, "start": monitor_start, "ports": self._parse_json(ports.get("stdout")) or ports}}}
|
||||
confirmed_status = self._spawn_output([*command_base, "monitor", "status"], serial_dir, timeout_ms)
|
||||
confirmed_body = self._parse_json(confirmed_status.get("stdout"))
|
||||
confirmed_data = confirmed_body.get("data") if isinstance(confirmed_body, dict) and isinstance(confirmed_body.get("data"), dict) else {}
|
||||
confirmed_port = str(confirmed_data.get("port") or "")
|
||||
confirmed_baud = confirmed_data.get("baudRate")
|
||||
confirmed_matches = confirmed_status.get("ok") and isinstance(confirmed_body, dict) and confirmed_body.get("success") is True and confirmed_data.get("isMonitoring") is True and (not port or confirmed_port.lower() == port.lower()) and (not baud or int(confirmed_baud or 0) == int(baud))
|
||||
if not confirmed_matches:
|
||||
return {"ok": False, "blockerCode": "hwpod_uart_monitor_binding_mismatch", "summary": "serial-monitor did not confirm the requested UART binding after start", "details": {"requestedPort": port or None, "baudRate": baud, "serialMonitor": {"dir": str(serial_dir), "command": command_base, "monitorStatus": status_body or status, "start": monitor_start, "confirmedStatus": confirmed_body or confirmed_status}}}
|
||||
status = confirmed_status
|
||||
status_body = confirmed_body
|
||||
data = confirmed_data
|
||||
active_port = confirmed_port
|
||||
active_baud = confirmed_baud
|
||||
limit = max(1, min(safe_int(args.get("limit"), max(1, safe_int(args.get("maxBytes"), 4096) // 80)), 200))
|
||||
fetch_args = ["fetch", "-l", str(limit), "--session-only"]
|
||||
if args.get("since"):
|
||||
|
||||
Reference in New Issue
Block a user