A decision is only allowed to act when its confidence is calibrated: when a stated 0.9 is right about 90% of the time on data the component has not seen. Calibration is measured per primitive and recorded in a manifest.
Architecture contract
The calibration manifest
DecisionCalibrationManifestV1 is the deployed unit of calibration. It is bound to the exact component revision, tokenizer, quantization, serving runtime, question, candidate schema, candidate set and threshold profile, and carries a fingerprint of that scope. If anything in the scope changes, the manifest no longer binds and the decision falls back.
The go-live gate
S1 stays in shadow until calibrated. For each primitive, going live requires:- a calibration artifact bound to the exact scope above
- expected calibration error (ECE) of at most 0.05 on held-out data
- at most 5% observed error on the subset the decision would act on automatically
- a statistically meaningful held-out sample, reported with confidence bounds
- reversible, low-consequence decisions only at first
Current implementation
On main, the decision runtime has manifests with scope fingerprints and exact-binding checks, the go-live gate as code (including minimum sample floors, bounds on the auto-act error, and the reversible-only rule), and the metrics above. The gate cannot take agreement with another model as an input.Passing the gate
The gate on main is Q26. Held-out data the component was not trained on is split in two: one split tunes the confidence threshold, the other certifies it. A primitive passes when the Clopper-Pearson upper bound on its auto-act error over the certification split stays under its error budget (5% at 95% confidence by default). Permission and vendor-consequential primitives are never eligible to act automatically, whatever their scores. As of 2026-10-02, one primitive has passed:judge.first_pass.tool (is a tool call safe to run on the first pass), with an auto-act error upper bound of 0.58% at full coverage on 2,937 held-out decisions. The route, model-routing, error-classification and node-judge primitives did not pass and stay in shadow.
Canary
Passing the gate does not switch a primitive on. It makes it eligible for a canary, the only way a Q26 manifest acts:- Exposure budget. At most N live decisions per day per primitive (20 to start). Past the budget, decisions go back to shadow until the next day.
- Audits. Every live decision is audited, plus a random 2–5% slice of shadow decisions (3% by default).
- Automatic rollback. Audited outcomes feed a Bernoulli CUSUM. If the observed error drifts above the budget, the primitive rolls back to shadow on its own.
- Growth. After 50 clean audits the budget can be doubled.
~/.allternit/system-one/canary.json and managed with system-one canary <status|enable|grow|sync|rollback>. enable refuses a primitive that the Q26 report does not mark eligible.
Live mode
S1 consults the canary only in live mode. In Allternit Desktop, live mode is a saved System One setting (liveMode in ~/.allternit/system-one/settings.json). It is off by default and can also be set with ALLTERNIT_S1_MODE=live. Changing it restarts the System One process so it applies. While live mode is on, Desktop runs system-one canary sync about a minute after S1 starts and every 15 minutes after that, so audited outcomes reach the rollback check.
With live mode off, everything stays shadow-only, including primitives in canary: S1 records what it would have decided and takes no action.