search-with-proof: 1 GiB spooled verifier archive, tolerant text replies, transport retries

Built projects spool to /workspace without package caches (cap 1 GiB, both
sides); a plain-text model reply is fed back once; mailbox PUT/GET retry for up
to 90 s with idempotent re-send by seq; executor tasks are deleted on every exit
path.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
Marius Ciepluch
2026-10-06 08:18:34 +02:00
co-authored by Claude Fable 5.1
parent 30cbc1ac76
commit 72ab4c8925
11 changed files with 450 additions and 95 deletions
+7 -2
View File
@@ -355,6 +355,7 @@ class Worker:
self.evidence = set()
self.observations = []
malformed = 0
plain_text = 0
for index in range(self.max_steps):
messages[0]["content"] = (
EXPLORE_PROMPT
@@ -367,7 +368,11 @@ class Worker:
messages.append(message)
calls = message.get("tool_calls", [])
if not isinstance(calls, list) or not calls:
raise ValueError("explore must use tools or finish")
plain_text += 1
if plain_text >= 2:
return {"status": "execution_failure", "failure": "second plain-text reply: " + str(message.get("content", ""))[:300]}
messages.append({"role": "user", "content": "Use a tool or call finish; plain text is not accepted."})
continue
finishes = [call for call in calls if isinstance(call, dict) and call.get("function", {}).get("name") == "finish"]
if finishes:
if len(calls) > 1:
@@ -410,7 +415,7 @@ class Worker:
raise ValueError("incomplete demonstration")
schema = load_demo(self.demo)
family = (yaml.safe_load(task.snapshot) or {}).get("family")
if family not in (None, "unknown"):
if family is not None and family != "unknown":
validate_oracle(family, schema["oracle"])
fact["oracle"] = schema["oracle"]
return {"fact": fact}