Skip to content

0.1.7

Latest

Choose a tag to compare

@Shashankss1205 Shashankss1205 released this 13 Aug 19:36
cf984f7

Published to PyPI: https://pypi.org/project/grapharc/0.1.7/

pip install --upgrade grapharc

Two defects closed, both found by re-verifying a stale bug backlog against main rather than from a report.

admission accepted a sentinel pointing the wrong way (#108)

START is the graph's entry and END its exit, but the endpoint check tested only whether an endpoint was a sentinel, never which side of the edge it sat on. END -> x and x -> START were admitted and then died in Materializer.

The run doesn't proceed either way — what was wrong is where the failure landed. GovernedLoop charges a MaterializationError to max_consecutive_execution_failures (2) rather than max_consecutive_rejections (3), so a planner got fewer retries for a mistake admission is supposed to catch than for one it does catch, and two in a row ended the run as EXECUTION_FAILED — a stop reason claiming the graph ran when nothing had. It also reached the planner as prose scraped off an exception rather than a code and a remedy, with nothing on the admission event's failed-check list, because admission hadn't failed.

a dead sandbox child escaped as a bare EOFError (#111)

poll() is true when the pipe is readable, and a closed pipe is readable — so a child killed rather than raising (os._exit, a segfault, an OOM-kill) fell through the timeout guard into recv(). AgentNode catches it under its blanket except Exception and renders f"TOOL_ERROR: {exc}", and str(EOFError('')) is '' — so the model was handed TOOL_ERROR: with nothing after the colon, and the trace recorded a failure it couldn't explain either.

Now a RuntimeError naming the tool and the exit code, with a negative one rendered as the signal that killed it. Deliberately still not a SandboxViolation: a child dying is not evidence it tried to escape confinement.

Full detail in CHANGELOG.md.