> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/infra-controller/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/infra-controller/_mcp/server.

# Operation Rule Execution

Operator guide: [Operation Rules](/infra-controller/documentation/operations-day-2/flow-operations/operation-rules).

## Resolution and execution

The task manager resolves an explicit `rule_id` first, then a rack association, then a global operation default, and finally the built-in fallback. Failure to load an explicit rule returns an error without trying lower-priority sources. The resolved definition travels in workflow input rather than being reloaded from the database during execution.

The parent executes stages in ascending order. `executeGenericStageParallel` launches one `GenericComponentStepWorkflow` per component-type step with targets and waits for the stage. Missing target types are skipped. A stage failure stops the task without rolling back earlier hardware actions.

Each child runs pre-operation actions, the main action, and post-operation actions in sequence. Its target contains all selected component IDs of that type. Action executors perform component batching and external activities. Cross-component verification receives the complete target map.

## Timeouts and retries

`buildActivityOptions` uses the step timeout as the activity start-to-close timeout, defaulting to 20 minutes. The step retry policy supplies activity retry defaults. Without it, defaults are three attempts, a one-second initial interval, twofold backoff, and a one-minute maximum interval. Individual action executors may override activity options.

`childWorkflowExecutionTimeout` derives a separate execution budget: a base of the step timeout (30 minutes when zero), multiplied by configured attempts, plus configured backoff, declared pre/post action timeouts, and a two-minute buffer. When `retry` is omitted, this calculation uses one attempt and no backoff, even though activities default to three attempts. With all timeouts omitted, the child budget is 32 minutes versus 20 minutes per activity attempt, so the child deadline can cut off the default retries.

See [workflow helpers](https://github.com/dsx-ai-factory/infra-controller/blob/main/rest-api/flow/internal/task/executor/temporalworkflow/workflow/helpers.go), [child orchestration](https://github.com/dsx-ai-factory/infra-controller/blob/main/rest-api/flow/internal/task/executor/temporalworkflow/workflow/genericcomponentstep.go), and [action executors](https://github.com/dsx-ai-factory/infra-controller/blob/main/rest-api/flow/internal/task/executor/temporalworkflow/workflow/actions.go) for the execution paths. The [action validator](https://github.com/dsx-ai-factory/infra-controller/blob/main/rest-api/flow/internal/task/operationrules/actions.go) defines accepted user-rule actions; internal executor registration alone does not make an action accepted by that validator.