Runtime & Integrations · Evaluation Core
Decision Policy
What it takes for an estimate to clear a gate. experimental
DecisionPolicy is a host-owned, content-addressed rule for turning an
Estimate into pass / fail /
blocked. By default it decides on the confidence bound on
the threatened side — not the point. Built in the framework; not yet in the version the
plugin installs.
Estimate is not decision. The policy makes the rule explicit: which statistic is compared, how much evidence is required before it will decide at all, and — because it is content-addressed — exactly which rule an authority grant approved.
The policy
| Field | Type · default | Meaning |
|---|---|---|
threshold | float | The bar the chosen statistic must clear. |
direction | higher_is_better · lower_is_better | Which side of the threshold passes. |
decision_statistic | point · lower_confidence_bound · upper_confidence_bound · null | Which statistic is compared. null resolves to the conservative bound for the direction (below). |
min_n_effective | int ≥ 1 · 2 | Below this effective n, the gate blocks rather than guesses. |
max_missing_fraction | float [0, 1] · 0.0 | The most missing / non-scored evidence the decision tolerates. |
interval_level | float (0, 1) · 0.95 | The confidence level the bound is read at. |
required_study | str | null | An optional prerequisite study the run must carry. |
policy_id | str | null | An optional name — used to declare a deliberate, named exception (below). |
The lower-bound rule
When decision_statistic is left null — the default — the policy resolves to
the conservative bound for the direction: the lower confidence bound
for higher_is_better, the upper bound for lower_is_better.
The gate reads the edge of the interval that could hurt you, not the hopeful point.
The named exception
The escape hatch is explicit, never silent: a named policy (a policy_id)
that sets decision_statistic: point decides on the point value — a smoke / dev check that
trades the interval’s caution for speed. A deliberate, recorded choice, not the default.
Adequacy guards — it blocks, it does not guess
Applying a policy returns pass, fail, or blocked. It blocks — never fabricates a pass — whenever the evidence is inadequate:
| Condition | Outcome · reason |
|---|---|
| no measured point | blocked · no_measured_value |
n_effective < min_n_effective | blocked · insufficient_samples |
missing fraction > max_missing_fraction | blocked · excessive_missing_evidence |
| a bound is required but the estimate has no interval | blocked · decision_statistic_unavailable |
| the chosen statistic clears the threshold | pass |
| it does not | fail |
DecisionPolicy.digest() hashes every decision-bearing field (with the direction-resolved
statistic), so an AuthorityGrant approves the
exact policy — change any field and the approval no longer matches. The policy is a pure
rule; it never is the verdict — the
Verdict Engine consumes it.
Next steps
The point + interval this policy reads.
The one function that consumes the decision.
The reader’s walkthrough — soon.