Skip to content

Rollout

A phased rollout of one change: ordered steps with a ring, percent, bake, gates and a failure action. Advancing only opens a PR; rollback and pause are automatic.

Generated from schemas/rollout.schema.json; do not edit. Nested fields use dotted paths, [] marks array items and .* map values.

Field Type Required Default Allowed values Constraints Description
apiVersion string yes const halos.dev/v1 Document version.
axis string yes client, traffic client: a release digest moves through rings; traffic: a gateway model route.
baseline object Known-good state a rollback returns to.
baseline.release string Client axis: switch-back release digest.
change object yes What rolls out.
change.alias string Traffic axis: gateway model alias re-routed to the treatment’s route on completion.
change.release string pattern ^sha256:[0-9a-f]{64}$ Client axis: release digest (sha256:<64 hex>) the ring pointers move to. Step approvals are keyed on it.
change.version string Client axis: human label of the release.
experiment string Backing two-arm experiment (exposure, evidence, kill switch). Optional when every step is progressive or blue-green.
kind string yes const Rollout Document kind.
labels object Free-form labels.
labels.* string
name string yes pattern ^[a-z0-9][a-z0-9._-]{0,62}$ Unique name within its kind.
status string draft, active, paused, aborted, completed Only active rollouts are driven by the controller.
step string The live step, set by merged advance PRs; empty = not started.
steps array of object yes minItems 1 Ordered steps.
steps[] object One phase of the rollout.
steps[].bake string pattern ^([0-9]+d|([0-9]+(.[0-9]+)?(ns|us|µs|ms|s|m|h))+)$ Minimum time at this step: a Go duration (30m, 24h) or whole days (14d).
steps[].gates object All must pass before the step advances.
steps[].gates.approval boolean Hold until a human advances the step.
steps[].gates.guardrails array of object Metric guardrails; a breach triggers onFailure at any time.
steps[].gates.guardrails[] object A metric guardrail on the backing experiment’s arms.
steps[].gates.guardrails[].direction string yes increase, decrease Which direction is better.
steps[].gates.guardrails[].maxRegression number minimum 0 Relative worsening that fails the gate, e.g. 0.05 = 5%.
steps[].gates.guardrails[].metric string yes pattern ^halo.[a-z0-9_.]+$ Normalised halo.* metric name (see internal/policy MetricRegistry).
steps[].gates.scorecard object Eval scorecard gate (halo eval run –output json).
steps[].gates.scorecard.file string yes Scorecard JSON, relative to the policy repo.
steps[].gates.scorecard.maxRegression number minimum 0; maximum 1 Largest allowed pass-rate drop vs the scorecard control (0.02 = 2pp).
steps[].gates.scorecard.minPass1 number minimum 0; maximum 1 Absolute pass@1 floor.
steps[].gates.scorecard.variant string yes Scorecard variant to judge.
steps[].minSamples integer minimum 0 Minimum users per arm before the step may advance.
steps[].name string yes pattern ^[a-z0-9][a-z0-9._-]{0,62}$ Step name, unique within the rollout.
steps[].onFailure string rollback, pause What a gate breach does (default rollback).
steps[].percent number maximum 100 canary: treatment share; holdout: share kept on control; dark-launch: share of requests mirrored; progressive/blue-green: 100 (default).
steps[].ring string Target ring. Required for progressive/blue-green; percent steps expose the backing experiment’s rings.
steps[].strategy string yes progressive, canary, blue-green, dark-launch, holdout progressive / blue-green move the ring’s release pointer (client axis); canary / holdout set the backing experiment’s weights; dark-launch mirrors traffic via halo-shadow (traffic axis).