Time-outs and time zones

In DataMind Oda, slow work is bounded: a step that can stall runs under a time limit, and a step that passes its limit comes back as a timeout in place of its own result. A time zone value gets a check of its own as it arrives, before anything keeps it. This page is the reference for both: where the limits sit, what a timeout reports, how a limit's value is checked and which time zone names are accepted.

The two layers of a time limit

What a timeout reports

A limit that fires ends the wait and returns a timeout in place of the step's own result. The report carries a short code naming the kind of timeout, and, where the kind has one, the limit that fired:

CodeWhat fired
TOOL_TIMEOUTA tool call's own budget; the text reads timed out after <n>ms.
BASH_TIMEOUTA shell step's own time limit; the reason reads BASH_TIMEOUT after <n>ms.
WEB_FETCH_TIMEOUTThe page reader's own backstop, on a call that ran with no tool budget above it; the text reads web fetch timed out.
LLM_STREAM_IDLE_TIMEOUTA streaming reply that went quiet past the stream idle wait set for the route (Provider route settings reference).

What a limit does, and does not do

How a limit's value is checked

Before a time zone is stored

Questions, answered

Do reading and editing files have a time limit?

No. Reading, writing and editing files run without a time limit, on purpose: a deadline would kill work the operating system will still finish once it starts. Only steps that carry a limit get one, and file steps carry none.

Why can a timeout arrive late?

A timeout is a notification, not an enforced stop: it asks the step to stop, and the result arrives once the step responds, by ending its own process, socket or task. A step that ignores the ask can keep the wait going, so the timeout can come later than the limit.

What does the number in a timeout message mean?

It is the limit that ended the wait, written in milliseconds. The message pairs the kind of timeout with that number: a shell step's reason reads BASH_TIMEOUT after <n>ms, and a tool call's text reads timed out after <n>ms.

What happens if a limit's value cannot be used?

It is refused before any work starts, and the message says the value must be a positive finite number. A value that is too high is treated differently: it is capped at the limit's maximum. Left out, a limit falls back to the step's own default.

Can I change the time limits?

Yes, for the limits that have a setting of their own: the command limit in Shell settings, the stream idle wait on a provider route, and a server's tool call limit in MCP servers. A limit that comes with a step and has no setting is not changed in the app.

What does session/invalid-time-zone mean?

A time zone that arrived with a message was not UTC or a valid IANA name in Area/Location form, so it was refused before anything kept it. Write the zone as UTC or as an Area/Location name such as Europe/Berlin; a subagent continuation's refusal reads subagent/invalid-time-zone instead.

Is a lower-case utc accepted?

No. The short name is UTC, in capitals; a lower-case utc is refused, like any other spelling that is neither UTC nor a standard Area/Location name.