runner.pool-reconcile-fargate
Controller reconcile loop for warm-pool runner groups on ECS Fargate. Observes GitHub + ECS tasks + the engine DB every tick and converges the pool toward min_warm_idle / max_count. A warm runner is an idle, non-ephemeral ECS task. Idempotent; safe to run on a stable workflow_id per group.
Per-group warm-pool reconcile loop for ECS Fargate.
Inherits the full state machine + reconcile rules from :class:BasePoolReconcileWorkflow. Overrides only the cloud-specific knobs plus the VM-observation adapter, which on Fargate is an ECS DescribeTasks sweep rather than an LTIP compute_vm.describe.
Overview
| Property | Value |
|---|---|
| Workflow type | Linear |
| Library | App-runners-aws |
| Version | 1.0 |
Input Schema
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
runner_group_uuid | uuid | Yes | — | UUID of the RunnerGroup to reconcile, picked from the organization's list of runner groups. |
Output Schema
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
runner_group_uuid | uuid | No | — | UUID of the RunnerGroup this reconcile tick operates on, picked from the organization's list of runner groups; echoed on output alongside terminal/error payloads. |
started_at | string | No | — | — |
completed_at | string | No | — | — |
warm_pool_enabled | boolean | No | — | — |
observation | json | No | — | — |
degraded | boolean | No | — | — |
observation_errors | list | No | — | — |
transitions | list | No | — | — |
action_taken | string | No | — | — |
launched_workflow_uuid | string | No | — | Engine run id of the runner.pool-launch-fargate workflow started by this reconcile tick, when one was launched. Internal engine correlation id, not a business-entity foreign key — no source is attached. |
terminated_instance_uuid | uuid | No | — | UUID of the RunnerInstance terminated or drained during this reconcile tick, when one was taken. |
desired_alive | integer | No | — | — |
composition | json | No | — | — |
observation_lag_ms | integer | No | — | — |
failure_reason | string | No | — | — |
failed_at | string | No | — | — |
step_errors | list | No | — | — |
error | string | No | — | — |
error_type | string | No | — | — |
failed_at_state | string | No | — | — |
failed_layer | string | No | — | — |
failed_step | string | No | — | — |
States
| State | Initial | Terminal | Success | Auto-advance | Description |
|---|---|---|---|---|---|
pending | Yes | No | — | observe | — |
emitting_snapshot | No | No | — | complete | — |
enforcing_floor_cap | No | No | — | emit_snapshot | — |
observing | No | No | — | diff_and_transition | — |
transitioning | No | No | — | enforce_floor_cap | — |
completed | No | Yes | Yes | — | — |
failed | No | Yes | No | — | — |
State Diagram
Transitions
| From | Action | To | Description |
|---|---|---|---|
pending | observe | observing | — |
observing | diff_and_transition | transitioning | — |
transitioning | enforce_floor_cap | enforcing_floor_cap | — |
enforcing_floor_cap | emit_snapshot | emitting_snapshot | — |
emitting_snapshot | complete | completed | — |
* (any state) | fail | failed | — |
API Usage
bash
POST /api/workflows/start
Content-Type: application/json
{
"workflow_type": "runner.pool-reconcile-fargate",
"initial_data": {
"runner_group_uuid": "value"
}
}