A step stopped at its time limit loses a nearly finished report: tell the agent when time is nearly up #117

Closed
opened 2026-10-01 23:13:10 -04:00 by cmoriarty · 1 comment
Owner

The same run as #116 (run_01M3WX1VW43K77HWNQ328RBGJK, agent.test.browser). 104 s before the one-hour limit the browser checks C1 to C8 had all passed, and the agent's last thought, cut off by the engine, was about to write its report. The work was lost to the clock, not to a failure: the step was stopped with .osf/test/browser.json unwritten.

The engine knows the deadline (timeout_s); the agent does not, and nothing tells it.

Asked for:

  • Shortly before a step's time limit (about a tenth of it, between one and ten minutes) the engine sends the agent one message saying how long is left, that what is on disk is what will be judged, and to write the files the step requires now with what it has, saying inside them what is unfinished.
  • It is sent once per attempt, sent again if the attempt has moved to a fresh session, and not at all for a step with too little time for it to matter.
  • It appears in the transcript as the engine's own row, so a step that wrapped up early reads as one that was asked to.
The same run as #116 (run_01M3WX1VW43K77HWNQ328RBGJK, agent.test.browser). 104 s before the one-hour limit the browser checks C1 to C8 had all passed, and the agent's last thought, cut off by the engine, was about to write its report. The work was lost to the clock, not to a failure: the step was stopped with `.osf/test/browser.json` unwritten. The engine knows the deadline (`timeout_s`); the agent does not, and nothing tells it. Asked for: - Shortly before a step's time limit (about a tenth of it, between one and ten minutes) the engine sends the agent one message saying how long is left, that what is on disk is what will be judged, and to write the files the step requires now with what it has, saying inside them what is unfinished. - It is sent once per attempt, sent again if the attempt has moved to a fresh session, and not at all for a step with too little time for it to matter. - It appears in the transcript as the engine's own row, so a step that wrapped up early reads as one that was asked to.
Author
Owner

Shipped and deployed, and archived as step-last-call. Commit b14d8f2, live since ac2caaf (2026-10-02 05:12 UTC); production now runs 3bc80ce.

A tenth of an agent step's limit before its deadline, never under a minute and never over ten, the engine sends the agent one message: about how long is left, that what is on disk is what gets judged, to start nothing new, and to write the files the step asks for now with what it has, saying inside them what is unfinished. It is sent once for each deadline (a handoff restarts the clock, so a fresh session can be told again), not for a limit under ten minutes, not to a scripted step, and not while a redirect is between its abort and its prompt. It extends nothing: the step is still stopped at its deadline. The transcript shows it as a row of the engine's own, in amber (⏱ 6m left of 1h: asked the agent to write its files now), because opencode shows the message as a user turn, which reads as the operator's.

Verified against a real opencode with a fake model and by the executor tests. Not yet seen on production: no step has come within its lead of a limit since the deploy (run #36's resumed browser check finished in 21 of its 60 minutes). That one task (4.3) stays open in the archived change, with a note, until it happens.

Shipped and deployed, and archived as `step-last-call`. Commit b14d8f2, live since ac2caaf (2026-10-02 05:12 UTC); production now runs 3bc80ce. A tenth of an agent step's limit before its deadline, never under a minute and never over ten, the engine sends the agent one message: about how long is left, that what is on disk is what gets judged, to start nothing new, and to write the files the step asks for now with what it has, saying inside them what is unfinished. It is sent once for each deadline (a handoff restarts the clock, so a fresh session can be told again), not for a limit under ten minutes, not to a scripted step, and not while a redirect is between its abort and its prompt. It extends nothing: the step is still stopped at its deadline. The transcript shows it as a row of the engine's own, in amber (`⏱ 6m left of 1h: asked the agent to write its files now`), because opencode shows the message as a user turn, which reads as the operator's. Verified against a real opencode with a fake model and by the executor tests. Not yet seen on production: no step has come within its lead of a limit since the deploy (run #36's resumed browser check finished in 21 of its 60 minutes). That one task (4.3) stays open in the archived change, with a note, until it happens.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cmoriarty/braid#117
No description provided.