Docs · reference

Rollout policy

Batches, healthy floor, bake, alarms, health checks, golden prompts and promotion rules for every deployment.

A stage's rollout policy decides how a deployment moves a release onto it. It is set under rollout, alarms and promote on each stage in denv.yaml, and health checks are set on the release.

Serving units

A deployment switches serving units, not GPUs.

  • For an aggregated release, a serving unit is one replica.
  • For a disaggregated release, a serving unit is one set of prefill and decode pools that serve requests together. A unit is switched as a whole: its prefill and decode members never run different releases.

replicas, batch and min-healthy all count serving units.

rollout

Field Meaning Default
batch Units switched at a time. A number (1) or a share (25%). 1
min-healthy Share of the stage's units that must be serving at every moment. A batch waits rather than break it. 75%
bake Time the stage is watched after the last batch before the deployment succeeds. 30m
on-alarm rollback puts the previous release back. pause holds the deployment for a person to decide. rollback

A stage too small to keep min-healthy while switching (one unit) needs denv deploy --allow-downtime, or more replicas during the deployment.

Health checks

Set on the release under health. They run on each unit after its engine starts and before it takes traffic.

Field Meaning Default
startup-timeout Time allowed to load weights and start the engine. 20m
warmup Synthetic requests sent before checks, to fill caches and compile graphs. 16
golden File of prompts the unit must answer correctly. none

A unit that fails any check never joins the router. The deployment treats it as a failure under on-alarm.

Golden prompts

A JSONL file, one case per line. Cases run at temperature: 0.

{"messages": [{"role": "user", "content": "What is 17 * 23?"}], "expect": {"contains": "391"}}
{"prompt": "The capital of France is", "expect": {"regex": "^\\s*Paris"}}
{"messages": [{"role": "user", "content": "Reply with OK."}], "adapter": "billing", "expect": {"equals": "OK"}}
{"messages": [{"role": "user", "content": "Hi"}], "expect": {"max-latency": "3s"}}
Field Meaning
messages or prompt Chat input or raw completion input.
adapter A LoRA adapter from the release, if the case should use one.
expect Exactly one of equals, contains, regex, max-latency.

Golden prompts catch a unit that is broken: wrong weights, a bad chat template, a failed adapter load. They do not compare against a reference; that is parity.

alarms

Watched during every batch and during bake, comparing the new release's units with the previous release's.

Alarm Fires when
ttft-p99 99th percentile time to first token is above the value.
itl-p99 99th percentile inter-token latency is above the value.
error-rate Share of requests failing is above the value.
throughput-drop Tokens per second per GPU fall by more than the share, relative to the previous release.
parity-fail That many parity runs fail during the deployment. The parity gate runs after each batch's health checks and golden prompts, before bake; a failure during bake also rolls back and blocks promotion.
custom [{ metric, above | below, for }] on any metric denv metrics reports.

An alarm triggers on-alarm. Every alarm, with its value and window, is recorded on the deployment.

promote

When a release may move from this stage to the next.

Field Meaning Default
bake Time the release must have run in this stage without alarms. 0
approval required waits for denv approve by someone with the deployer role. not required
windows Times promotion may start, such as ["Mon-Thu 09:00-16:00 America/Los_Angeles"]. any time
auto true promotes without a command once the other rules pass. false

A release rolled back from a stage cannot be promoted onward from earlier stages.

Rollbacks

denv rollback <env>/<stage> and automatic rollbacks deploy the previous release under the same batch and min-healthy rules, at full speed, and skip bake. They reuse the previous release's weights from local disk, so prefetch is short.

Stage pins

denv stage pin <env>/<stage> --release <m>@<v> --reason "…" refuses new deployments and promotions into the stage until denv stage unpin. Use it during an incident or a customer evaluation.

Defaults

Setting Default
batch 1
min-healthy 75%
bake 30m
on-alarm rollback
startup-timeout 20m
warmup 16 requests
promote.bake 0
promote.approval not required
Deployments per stage at once one