Treat finished PCB review as complete, not a raw SSE error.

The status watcher synthesized pcb_error with pcb_status=complete (terminal)
when the worker finished before pcb_complete arrived. Map that hatch to
pcb_complete, publish the event before flipping status, and send /pcb to
the layout report tree.
This commit is contained in:
2026-09-20 10:23:53 +02:00
parent 1f3876eadc
commit 187605763d
6 changed files with 136 additions and 22 deletions
+43
View File
@@ -0,0 +1,43 @@
"""PCB SSE terminal mapping — complete is not pcb_error."""
from backend.services.pcb_pipeline import pcb_sse_terminal_from_status
def test_complete_status_is_pcb_complete_not_error():
ev, data = pcb_sse_terminal_from_status(
"complete",
{"findings": 38, "domains": 3, "groups": 4},
"pcb_status=complete (terminal)",
)
assert ev == "pcb_complete"
assert data["findings"] == 38
assert data["domains"] == 3
assert data["groups"] == 4
assert "error" not in data
def test_complete_reason_without_status_still_completes():
ev, data = pcb_sse_terminal_from_status(
"running",
{},
"pcb_status=complete (terminal)",
)
assert ev == "pcb_complete"
assert data.get("synthetic") is True
def test_error_status_stays_pcb_error():
ev, data = pcb_sse_terminal_from_status(
"error",
{"error": "parse failed"},
"pcb_status=error (terminal)",
)
assert ev == "pcb_error"
assert data["error"] == "parse failed"
def test_cancelled_status_is_pcb_cancelled():
ev, _data = pcb_sse_terminal_from_status(
"cancelled", {}, "pcb_status=cancelled (terminal)",
)
assert ev == "pcb_cancelled"