fix: 修正 CaseRun HWPOD 合同复核

This commit is contained in:
root
2026-07-16 16:40:31 +02:00
parent 814ea533f3
commit bb0e3230df
5 changed files with 116 additions and 13 deletions
+17 -4
View File
@@ -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"):