An agent's empty question holds its run until a person answers it: Braid should answer it itself #147
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What happened
In run 48 (git-flow, scratch-139),
agent.write-spec-testshad done its work: its background test task had just reported PASS. At 22:17:22Z the model then called opencode'squestiontool with{"questions": []}.awaiting_question.Why it matters
How often: production's log has four agent questions. The other three had one question each and were answered within about 2 minutes. This is the first empty one.
Proposal
question.askedcarries no questions, Braid replies{"answers": []}itself and opens no gate. opencode accepts that reply for a request with no questions, the tool call returns, and the model sees an empty answer.A simulated run now shows this bug (#149):
tests/sim/empty-question.yaml, a known failure of #147.agent.implement.known_failure: "#147"from the scenario in the same change: the sim lane fails until the marker goes.Run it alone with
python -m osf.sim empty-question.Shipped in
a68aeb5(live since f0213ef's deploy), archived asanswer-empty-agent-question.What changed
{"answers": []}itself, at once. It opens no gate, the step is never parked waiting on a question, and no notification goes out.reply_questionoperation like a forwarded answer. Its intent says the question had no content, so nobody was asked. The transcript still shows the question and its answer.agent-questions.Verified
tests/sim/empty-question.yamlpasses and itsknown_failuremarker is gone. With the fix reverted, it holds on the gate as run 48 did.Not in this change: whether waiting on a question should pause the step's time limit. It affects every question, so it is left for its own issue if wanted.
Deploy note: a68aeb5's own deploy failed the self-check on a
/tmp/tmp.*left behind, with every simulated run passing. The likeliest cause is the browser check's Chromium writing into its scratch directory after it was removed.f0213efkills that process group first, and lists what a leftover holds if one recurs.