The pool watchdog counts only the time a worker spends running code, so a read that blocks the worker never trips it. The margin above code_timeout therefore guarded a race that cannot happen, and only bought a runaway call 90s where 60s was configured. Pass code_timeout straight through. The two limits are disjoint: the watchdog bounds a call that computes, and the read deadline bounds a call that reads. Drop the ordering test, which was true for any positive margin. The containment test no longer sets code_timeout to zero, because that value now also disables the watchdog and kills the worker before the read guard can refuse. It patches the guard instead. Monty 0.0.19 runs a plain class and a class with __enter__ and __exit__. Only inheritance and metaclasses raise. Say that in the instructions. MemoryFile is no longer constructed, so drop the import, the annotation, and the stale references in the sandbox docstring and CLAUDE.md. That CLAUDE.md line also still claimed a ThreadPoolExecutor, _run_async, and a fresh interpreter per call. |
||
|---|---|---|
| .. | ||
| index.md | ||
| processing.md | ||
| prompts.md | ||
| providers.md | ||
| qa.md | ||
| storage.md | ||