mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-08-17 18:25:42 +02:00
53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
import inspect
|
|
"""Clause: every surfaced error carries the full flight envelope.
|
|
|
|
`cli_binary_missing` shipped without one and nobody noticed, because the only way to see it is to
|
|
force a failure class that cannot be forced on a dev box (the SDK falls back to the system `claude`,
|
|
then to ~/.claude/local/claude). An audit of the source is the sensor that does not need the repro."""
|
|
|
|
import re
|
|
|
|
from backend.apps.agents.manager.run import handle_run_error as p_handler_mod
|
|
from backend.apps.agents import agent_manager as p_manager_mod
|
|
|
|
P_SOURCES = {
|
|
"handle_run_error": p_handler_mod,
|
|
"agent_manager": p_manager_mod,
|
|
}
|
|
|
|
|
|
def p_diagnostic_blocks(src: str):
|
|
return re.findall(r'submit_diagnostic\(\{(.*?)\}\)', src, re.S)
|
|
|
|
|
|
def test_every_error_diagnostic_carries_a_flight_envelope():
|
|
import inspect
|
|
missing = []
|
|
for name, mod in P_SOURCES.items():
|
|
for block in p_diagnostic_blocks(inspect.getsource(mod)):
|
|
kind = re.search(r'"kind":\s*"([a-z_]+)"', block)
|
|
kind = kind.group(1) if kind else "?"
|
|
# `recovered` rows are near-miss ledger entries, built by record_recovery, not error cards.
|
|
if kind == "recovered":
|
|
continue
|
|
if '"flight"' not in block:
|
|
missing.append(f"{name}:{kind}")
|
|
assert not missing, f"error diagnostics with no envelope: {missing}"
|
|
|
|
|
|
def test_the_cli_missing_class_specifically_is_covered():
|
|
import inspect
|
|
src = inspect.getsource(p_handler_mod)
|
|
block = [b for b in p_diagnostic_blocks(src) if '"cli_binary_missing"' in b]
|
|
assert block, "the cli_binary_missing diagnostic disappeared"
|
|
assert '"flight"' in block[0]
|
|
|
|
|
|
def test_silent_quit_diagnostic_carries_a_full_envelope():
|
|
"""A silent quit is the hardest class to diagnose later, so it must not ship envelope-less.
|
|
Found live: empty_finish_nudge was the ONE family writing only kind/model/session_id."""
|
|
import backend.apps.agents.manager.run.empty_finish as ef
|
|
src = inspect.getsource(ef.maybe_nudge_empty_finish) if hasattr(ef, "maybe_nudge_empty_finish") else inspect.getsource(ef)
|
|
assert "build_envelope" in src, "empty_finish_nudge must attach a flight envelope"
|
|
assert '"flight"' in src, "the envelope must ride under the standard 'flight' key"
|