MONARKFleetNarabiUkemiBellit abstains so DeFi can act.
Documentation menu
docs · the gatebuilt

Commit, defer or abstain. Never a probability.

Hikae is the gate. An upstream predictor gives a reading. The gate conforms it into a region at a target coverage, then a closed policy reads the region and the budget the caller carries and returns one word. It reports a region you can audit and a budget you can watch, never how likely it is to be right.

The answers

The gate has three answers, a closed list in the frozen contract GateDecision. Each one is an answer, including the last.

commitThe intended act lies inside a region small enough to act on, and the budget the caller sent is not below the caller's floor. The act is authorized, and the budget comes back as it was sent.
deferThe region is too large to act on yet: the set holds every label, or the interval is too wide. While the decision window is open, the gate waits for a better reading. The budget is untouched.
abstainThe gate states no region it stands behind: too few calibration points, an intent outside the region, a budget below the floor, a missing or refused testimony, a window that closed. It is an answer, with its reason, and it invents no success.

One decision, end to end

A decision passes through four stages. Each stage can end it, and when it does, it keeps what it refused with a reason code from a closed list. The commits run on to the act, and they are kept too: both threads can be replayed from the recorded bytes.

One decision, end to end: read the input, calibrate, decide, act. Each stage keeps what it refuses, with its reason code.Read the inputOrigin and bytes ride along asnamed residuals. Never truth.abstainupstream_timeoutattestation_absentattestation_refusedbinding_brokennon_evaluableCalibrateNonconformity scores, then aquantile, then a region at thetarget coverage.abstainunder_calibno_label_schemaDecideThe region and the budget thecaller carries give exactlyone answer.abstainintent_not_in_regionbudget_exhaustedclock_expiredActExecutes on commit only. Thegate never calls the toolitself.deferset_too_large · interval_too_widecommit · coveredKept: each stage keeps what it refuses, with its reason code.Kept too: the commits.Both threads are kept. Both are replayable and auditable.
One decision, end to end, adapted from the pitch deck’s airlock. The action words and the reason codes are read from the frozen contract; which stage emits which code is this page’s reading of the policy below.

Before the policy runs, the adapter that reads the input can already answer: a testimony that is missing when the class requires one, refused by its verifier, or not bound to the prediction ends the decision there, with its code.

How a region is built

The region is conformal. Take the predictor’s track record on calibration points it did not see, score how wrong it was on each, and keep the score at a rank fixed by the target coverage. For a new reading, every answer whose score is at most that margin is in the region.

How a region is built: sorted calibration scores, a margin at a rank fixed by the target, and the answers scored under it.Calibration: how wrong the model was, on points it did not seesmall score: the model was closelarge score: the model was far offq-hatthe score at the rank fixed by the target coverageA new reading: every answer whose score is at most q-hat is keptanswer keptkeptkeptleft outleft outThe kept answers form the region. One answer kept: small enough to act on. Every answer kept: too large, wait.An illustration of the method. No data, no value.
How a region is built. An illustration of the method: no data, no value is drawn.

The region is a set of labels for a classification (a direction, a venue, a yes or a no) or an interval for a regression (a liquidable amount, a curve residual). One label kept is small enough to act on; every label kept means nothing is ruled out yet. An interval acts when its width is under the caller’s threshold and the intended value lies inside it. The prediction the gate conforms is the frozen Prediction, and what it states is the frozen CoverageVerdict: schema_version, task_class, method, alpha, n_calib, region, qhat, abstain, reason, residual, calib_digest, produced_at.

The closed policy

The policy is a closed predicate with a declared order of priority. The schema draws the order the code declares for a set of labels; for an interval the code declares another order: an interval of zero width abstains with under_calib first, then the budget, then the width, and the intended value last. Its first No ends the decision. When the region is too large, the gate waits while the decision window is open and abstains once it has closed: waiting is an answer only while there is time.

The closed policy: questions in a fixed order; the first No ends the decision with its reason codes.a reading and the caller’s terms enter at the topCan the input be read, and did the upstream answer in time?noabstain: non_evaluable, upstream_timeoutyesDoes the class hold enough calibration points for a region?noabstain: under_calibyesDoes the intended act lie inside the region?noabstain: intent_not_in_regionyesIs the budget the caller sent at or above the caller's floor?noabstain: budget_exhaustedyesIs the region small enough to act on?nodefer while the window is open:set_too_large, interval_too_wideabstain once it closes: clock_expiredyescommit · coveredProfit and loss never enter the policy.
The closed policy for a set of labels, in its declared order of priority. The codes are the frozen contract’s.

Abstention is a first-class answer, and the idea is old: C. K. Chow (1970) described the tradeoff between errors and rejections, where some would-be correct answers are also turned away. The gate makes that tradeoff explicit, per class, with a stated coverage instead of a hunch.

The budget the caller carries

B_t is caller-carried: the caller keeps B_t and sends it with each call, and the gate returns it unchanged; when the B_t a caller sends is below that caller's floor, the gate abstains with the reason budget_exhausted. The budget is a right to act, metered: not a return, not a deposit, not an oracle. Every decision carries it back in remaining_budget, and profit and loss never enter the policy.

The name of the budget borrows its vocabulary from risk-controlling prediction sets (Stephen Bates, Anastasios N. Angelopoulos, Lihua Lei, Jitendra Malik and Michael I. Jordan (2021)). That is the origin of the word only: what the served gate does with the budget is the rule above, nothing more. See also the token page.

Attestation, and the three strands

An attested conformal decision joins three strands. An attestation carries bytes, a hash and named residual hypotheses: origin, never truth. The conformal region decides. The budget, carried by the caller, meters the right to act. On the served gate the attestation is optional: the attestation is carried by the caller; the verifier is not executed here; BYO classes do not accept `attested`.

Three strands, one decision: the attestation rides along, the conformal region decides, the budget is carried by the caller.Attestationoptional on the served pathbyteshashnamed residual hypothesesOrigin and bytes, never truth.Conformalthe decision drivernonconformity scoresquantileregion at the target coverageA region, never a probability.Budget B_tcarried by the callerthe caller keeps B_tsends it with each callreturned unchangedA right to act, metered. Below the caller’s floor, the gate abstains.GateDecisionschema_versionactionallowtoolintentverdictremaining_budgetreasonno score field, anywhereThe residual of a testimony rides into the verdict; on the served path the decision is the region’s and the budget’s.
Three strands, one decision, adapted from the pitch deck. The keys of the decision are read from the frozen schema GateDecision.

Recorded decisions

These decisions were recorded over the MCP transport of an in-process server bound to 127.0.0.1, and are replayed by an integration test. Each row is read from the committed trace; none is typed.

steptooltask classanswerreason
cascade-gategatecascade-liquidable-24habstainunder_calib
btc-dir-gategatebtc-dir-15mcommitcovered
attested-gategatebtc-dir-15mcommitcovered

The class btc-dir-15m behind the recorded commit is served as declared synthetic — a plumbing fixture, not a measured predictor. The answer it returned, as recorded:

structuredContent of the recorded gate call, as committed in the trace
{
  "schema_version": "1.0.0",
  "action": "commit",
  "allow": true,
  "tool": "perps_order_preview",
  "intent": "up",
  "verdict": {
    "schema_version": "1.0.0",
    "task_class": "btc-dir-15m",
    "method": "split",
    "alpha": 0.1,
    "n_calib": 150,
    "region": {
      "kind": "set",
      "labels": [
        "up"
      ],
      "label_schema": "up|down"
    },
    "qhat": 0,
    "abstain": false,
    "reason": "covered",
    "residual": [],
    "calib_digest": "fcebed27fd3f9607bba94898f5ae4ebba548ced519d1d800b49890235358eda6",
    "produced_at": "2026-09-04T00:00:00Z"
  },
  "remaining_budget": 0.1,
  "reason": "covered"
}

The reason codes

The frozen contract lists 13 codes, one closed list. A new reason needs a versioned revision of the contract, not a deploy. The codes below are read from the schema; the glosses are this page’s.

codeanswerstagemeaning
coveredcommitActthe intent lies in a region small enough to act on, and the budget is not below its floor
set_too_largedeferDecidethe set holds every label: nothing is ruled out yet
interval_too_widedeferDecidethe interval is wider than the act can tolerate
intent_not_in_regionabstainDecidethe intended act lies outside what the region allows
under_calibabstainCalibratetoo few calibration points to state a region at all
no_label_schemaabstainCalibratethe task declares no label schema to conform against
budget_exhaustedabstainDecidethe budget the caller sent is below the caller's floor; no bar is lowered
clock_expiredabstainDecidethe region was too large and the decision window has closed, so waiting is no longer an answer
upstream_timeoutabstainRead the inputthe upstream sensor or predictor did not answer in time
attestation_absentabstainRead the inputa class that requires a testimony received none
attestation_refusedabstainRead the inputthe verifier refused the testimony: a hash or a signature did not hold
binding_brokenabstainRead the inputthe prediction is not bound to the testimony it claims
non_evaluableabstainRead the inputthe input cannot be evaluated against the contract at all

What the gate says, and what it never says

Coverage holds on average over exchangeable calibration data, at one minus the chosen miscoverage level. It is marginal: it is not conditional on the individual input, and the error of one committed act is not bounded by the level. Coverage conditional on one input cannot be promised in general (Vladimir Vovk (2012)), which is why the gate keeps one region per task class and predictor, and why every other population abstains.

The gate emits a decision; it never calls the tool it names. It holds no key, moves no fund and carries no score field, anywhere: a contract carrying a forbidden key throws instead of serialising.

Sources

  • Anastasios N. Angelopoulos and Stephen Bates (2023) Conformal Prediction: A Gentle Introduction. Foundations and Trends in Machine Learning, vol. 16, no. 4, pp. 494-591. read in part Used for the split-conformal quantile and the meaning of marginal coverage.
  • Vladimir Vovk (2012) Conditional validity of inductive conformal predictors. Proceedings of the Asian Conference on Machine Learning, PMLR vol. 25, pp. 475-490. read in part Used for why coverage conditional on one input cannot be promised in general, and why a region is kept per category.
  • Vladimir Vovk, David Lindsay, Ilia Nouretdinov and Alex Gammerman (2003) the title names the method with a word the site does not print; the paper is the working paper of the series below. On-line Compression Modelling Project (New Series), Working Paper 4. read in full Used for one region per category of a taxonomy fixed in advance, with validity per category and never per case.
  • Rina Foygel Barber, Emmanuel J. Candes, Aaditya Ramdas and Ryan J. Tibshirani (2023) Conformal Prediction Beyond Exchangeability. The Annals of Statistics, vol. 51, no. 2, pp. 816-845. read in part Used for the sentence served with a class whose calibration is not exchangeable: no coverage is measured.
  • C. K. Chow (1970) On Optimum Recognition Error and Reject Tradeoff. IEEE Transactions on Information Theory, vol. 16, no. 1, pp. 41-46. read in part Used for abstention as a first-class answer: trading errors for rejections.
  • Stephen Bates, Anastasios N. Angelopoulos, Lihua Lei, Jitendra Malik and Michael I. Jordan (2021) Distribution-Free, Risk-Controlling Prediction Sets. Journal of the ACM, vol. 68, no. 6, article 43. read in part Used for the origin of the budget vocabulary only; the served budget is not that mechanism.