Safety · Deployment

Production is the only environment that counts.

A model can be excellent in evaluation and still fail a customer: a provider times out, a tool call leaks, a search budget runs dry. Deployment safety is the set of controls between a good model and a good answer.

Controls

What runs on every answer

Answer guard

Every answer streams through a guard. Text that opens like machine output is held until it is clearly prose. A leaked tool call is never shown: the route retries once with grounded search, then falls back to a plain recovery message. Each leak is logged as an event.

Provider chain

Requests route through an ordered list of reviewed providers under a cost policy. A failing provider is skipped, not waited on. The catalogue is served from a reviewed snapshot and refreshed in the background.

Search budget

Live search has a fixed time budget per request. When it is spent, the assistant answers from what it knows and flags staleness in one line rather than hanging.

Approval gates

Connected-app actions that send, change or delete are queued as pending actions. The customer confirms each one. Read-only tools run without a prompt.

Input limits

Messages are capped in length and history is windowed, which bounds cost per turn and removes a class of abuse.

No silent degradation

If no model, search or agent runtime is configured the route returns a clear error instead of an empty stream.

Monitoring

Every five minutes

A reliability job probes the product the way a customer uses it and raises incidents to the on-call owner.

Incidents are written to the owner's notification stream. The cron and its thresholds are documented in the engineering notes.
ProbeWhat it checksReadsOn failure
Direct chat probeThe provider chain returns a real answer to a fixed promptNothing from customersCritical incident
Live search probeGrounded search returns within budgetNothing from customersCritical incident
Agent canarySpecialist runtime completes a turn for a synthetic customer with no profile row, so it only reads and never writesNothing from customersHigh incident; customers still served by the direct chain
Real answer rateUser turns in the last hour that received no assistant reply within 3 minutesTimestamps and roles only, never contentCritical incident at 2+ unanswered and 25%+ of judged turns

Release process

From change to production

  1. 01

    Tests that encode the guard

    The test suite asserts that the chat stream loop still passes through the answer guard; a refactor that bypasses it fails the build.

  2. 02

    Review against four questions

    What can this send or delete? What does the customer see on failure? What alert fires? How is it rolled back?

  3. 03

    Deploy with a canary

    Production deploys are immutable; the previous deployment stays promotable. The five-minute probes run against the new build immediately.

  4. 04

    Roll back, then diagnose

    When a probe fails after a deploy, the previous build is promoted first. Diagnosis happens on the rolled-back incident, not on live customers.

  5. 05

    Write it up

    Impact is counted, never quoted. The write-up ends with a system change, and the research index is updated when the change is material.

Known limits

What this does not yet cover

  • Model output quality is not independently benchmarked by ELP. Guards catch malformed answers, not wrong ones; the product tells customers to verify high-stakes conclusions.
  • Connected-app actions are only as safe as the permissions the customer grants to the app. We request the narrowest scopes the connector offers.
  • Third-party provider incidents are outside our control. The provider chain limits their impact; it cannot eliminate it.

This page describes controls in production as of October 2026. It is updated when controls change.

See how we measure it

The reliability work is published in the research index.