pub struct Policy {Show 16 fields
pub auto_apply_enabled: bool,
pub auto_apply: Vec<AutoApplyGrant>,
pub deny: Vec<String>,
pub severity_floors: BTreeMap<String, Severity>,
pub telemetry: TelemetryMode,
pub discover_objective: DiscoverObjective,
pub outcome_evalset: Option<OutcomeEvalset>,
pub evidence_attribution: EvidenceAttribution,
pub cadence: Cadence,
pub skills: SkillAuthoring,
pub min_evidence: u32,
pub plans: PlanAuthoring,
pub premise_drift: bool,
pub premise_drift_open_all: bool,
pub near_duplicate: NearDuplicateMode,
pub plan_replay: Option<PlanReplayPolicy>,
}Expand description
The parsed host policy. Everything default-closed — the two fields whose
closed state is not the zero value (skills, min_evidence) say so in
their own Default.
Fields§
§auto_apply_enabled: boolMaster opt-in (same posture as allow_destructive_ops: default off).
Auto-apply never fires unless this is true AND a grant matches.
auto_apply: Vec<AutoApplyGrant>Auto-apply grants (default: none).
deny: Vec<String>Analyzer families the host disables entirely.
severity_floors: BTreeMap<String, Severity>Per-analyzer severity floors (family → floor); combined with the file’s floors by taking the stricter of the two.
telemetry: TelemetryMode§discover_objective: DiscoverObjectiveThe DISCOVER scoring rule (default: the review-queue objective).
outcome_evalset: Option<OutcomeEvalset>Measure every applicable LLM-authored proposal against this evalset after apply (default: none — authored lessons carry no metric).
evidence_attribution: EvidenceAttributionWhether an Observation names its observer in the evidence bundle (default: named).
cadence: CadenceWhen a pass is due (default: whenever it is called).
skills: SkillAuthoringSkill authoring by the LLM proposer (default: on, two steps minimum).
min_evidence: u32The fewest distinct evidence grains an LLM draft must cite to be
offered as a change rather than an advisory finding (default 1 — a
single instance may become a rule). An independent audit of 88 governed
decisions found that 15 of 28 approvals had generalised one instance
into standing policy; 2 is the setting that audit argues for. A draft
under the threshold is still stored and still reviewable — it simply
carries nothing a reviewer could apply.
plans: PlanAuthoringPlan authoring by the LLM proposer (default: on, two steps minimum).
premise_drift: boolThe Verify gate’s second question (default: on). An applied
recommendation cites the grains it was derived from; when one of them
is later superseded by a DIFFERENT value, or retracted, the premise
the reviewer approved no longer holds. A lesson that outlives its
premise is measured harm: on PAST-Bench a rule encoding the old
regime’s flag cost the governed arm 0.32 on the migration family it
was learned in (crates/areev-bench/PERSIST.md). With this on, the
gate records drifted and proposes the revert; a value-identical
supersession (consolidation) is not drift.
premise_drift_open_all: boolWhether EVERY cited grain must have moved before the engine withdraws an open recommendation (#317), or any one is enough.
true (the default, "all") because a finding derived from six
grains of which one changed is weakened, not baseless — deciding that
is a reviewer’s job. false is "any", for hosts that want the
stricter sweep.
near_duplicate: NearDuplicateModeWhat to do with an authored lesson that near-duplicates a live one on
the same entity (default flag: queue it, marked).
plan_replay: Option<PlanReplayPolicy>The pre-apply rehearsal gate on plan revisions (default none).
Implementations§
Source§impl Policy
impl Policy
Sourcepub fn from_json(s: &str) -> Result<Self>
pub fn from_json(s: &str) -> Result<Self>
Parse a policy JSON string. Unknown keys are rejected (fail-closed).
Sourcepub fn severity_floor(&self, family: &str) -> Option<Severity>
pub fn severity_floor(&self, family: &str) -> Option<Severity>
The host severity floor for a family, if any.
Sourcepub fn grants_auto_apply(
&self,
family: &str,
target_class: &str,
severity: Severity,
) -> bool
pub fn grants_auto_apply( &self, family: &str, target_class: &str, severity: Severity, ) -> bool
Does a grant permit auto-applying this family to target_class at
severity? Only the memory class is ever eligible.
query was eligible until definition rewrites became executable
(issue #28). A grain edit changes one remembered value; a saved-query
or template rewrite changes what EVERY future context contains — the
blast radius is every turn from now on, not one fact. So a definition
rewrite always requires a human APPROVE + APPLY with BECAUSE, and
the class is excluded here by name, exactly as code/evalset are.