Autonomous Pricing & Capital Optimization
Let a pricing model reprice, renew, decline, or bind coverage while signed envelopes bound every decision and drift forces rollback.
On this page
Reprice, renew, decline, and bind decisions can come from a pricing model while the operator keeps the limits. Each decision is a signed record that cites its evidence, stays inside a signed authority envelope, and remains interruptible, with a rollback plan for the drift it can detect.
Your pricing model computes the decision. The chio-autonomy validators check the ten signed records that tie it to evidence, authority, execution gates, and rollback. The decision reads underwriting, credit, and liability-market records and dispatches binds onto the web3 settlement rail, a module that is off by default.
A decision inside the ceilings may bind
Suggested coverage and premium sit under the envelope's ceilings, in its currency, and the active envelope permits bind. The execution record lists every safety gate it passed, names a rollback plan and a human interrupt contact, and reaches executed only when every gate passes.
Every decision cites the evidence it was computed over
A pricing input, an explanation factor, and a drift signal each point at prior Chio records through an AutonomousEvidenceReference. Reference ids inside one record are unique; a duplicate fails with DuplicateValue.
pub struct AutonomousEvidenceReference {
pub kind: AutonomousEvidenceKind,
pub reference_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub observed_at: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub locator: Option<String>,
}AutonomousPricingInputArtifact is the bundle a decision is computed over: the subject, provider, coverage class, and currency, with the loss, capital, reputation, and settlement state the model used. It must cite underwriting_decision, exposure_ledger, credit_scorecard, and capital_book evidence. A non-zero pending or settled loss requires a credit_loss_lifecycle reference, and a recorded web3 settlement state requires a web3_settlement_receipt reference; a claimed state without its evidence fails with UnknownReference.
Read more in Underwriting, which produces the decision evidence a pricing input cites.
The authority envelope bounds what automation may decide
The envelope is the signed grant behind every decision. It names the subject, provider, and currency, the permitted_actions, the coverage and premium ceilings, the rate-change and daily-decision caps, and the review thresholds. Its kind is operator_policy, regulated_role, or delegated_market_authority, and its automation_mode is shadow, advisory, or active.
{
"schema": "chio.autonomous-pricing-authority-envelope.v1",
"envelope_id": "ape-1",
"issued_at": 1743379200,
"subject_key": "subject-1",
"provider_id": "carrier-1",
"currency": "USD",
"kind": "delegated_market_authority",
"automation_mode": "active",
"permitted_actions": [
"reprice",
"renew",
"decline",
"bind"
],
"authority_chain_refs": [
"underwriting-committee-approval",
"operator-treasury-approval"
],
"max_coverage_amount": {
"units": 150000,
"currency": "USD"
},
"max_premium_amount": {
"units": 6000,
"currency": "USD"
},
"max_rate_change_bps": 750,
"max_daily_decisions": 20,
"requires_human_review_for_bind": false,
"requires_human_review_above_premium": {
"units": 5000,
"currency": "USD"
},
"delegated_authority_reference": "lpa-1",
"not_before": 1743379200,
"not_after": 1743465600,
"support_boundary": {
"delegated_authority_required": true,
"live_bind_supported": true,
"reserve_optimization_required": true,
"operator_override_supported": true
},
"note": "Binds automation to one delegated pricing authority envelope."
}The example envelope is active and permits bind, with a premium ceiling of 6,000 units, human review above 5,000, at most a 750 bps rate change, and 20 decisions a day. Only an active envelope may list bind. A decision embeds its own input, envelope, and model provenance, so a verifier revalidates the whole chain in one pass, and it fails when automation steps outside the grant:
- suggested coverage or premium above a ceiling, or in a currency other than the envelope’s, or an input whose subject, provider, or currency differs from it;
- an auto-approved premium above the human-review threshold, or a
manual_reviewdisposition markedauto_approved; - a
shadowenvelope withoutreview_state: shadow_only, orshadow_onlyunder any other envelope; bind_within_envelopewithoutbindpermission, withoutlive_bind_supportedon the support boundary, or auto-approved when the envelope setsrequires_human_review_for_bind.
Read more in Liability coverage, which runs the quote and bind workflow these decisions automate.
Capital moves through explicit records the operator executes
Reserve and capital changes are records of their own. CapitalPoolOptimizationArtifact references the pricing decision and capital book it acts on, names the facilities in scope, sets the target reserve ratio, the facility-utilization cap, and the bind-capacity ceiling, and lists recommendations: increase_reserve, decrease_reserve, shift_capacity, hold_capacity, or defer_claim.
{
"schema": "chio.capital-pool-optimization.v1",
"optimization_id": "cpo-1",
"issued_at": 1743379320,
"subject_key": "subject-1",
"currency": "USD",
"pricing_decision_ref": "apd-1",
"capital_book_ref": "cb-1",
"facility_refs": [
"facility-1",
"facility-2"
],
"pending_claim_refs": [
"claim-1"
],
"target_reserve_ratio_bps": 3500,
"max_facility_utilization_bps": 7000,
"max_bind_capacity_units": 250000,
"recommendations": [
{
"action": "increase_reserve",
"source_ref": "pool:primary",
"amount": {
"units": 25000,
"currency": "USD"
},
"rationale": "Raise reserve coverage before new autonomous binds."
},
{
"action": "shift_capacity",
"source_ref": "facility-2",
"destination_ref": "facility-1",
"amount": {
"units": 15000,
"currency": "USD"
},
"rationale": "Move capacity toward the lower-loss facility."
}
],
"support_boundary": {
"live_mutation_supported": false,
"scenario_comparison_supported": true,
"cross_currency_optimization_supported": false,
"web3_reconciliation_required": true,
"operator_override_required": true
},
"note": "Keeps optimization bounded and override-ready."
}The default support boundary keeps live_mutation_supported false and operator_override_required true: the record recommends, and the operator moves capital. A CapitalPoolSimulationReport sets a baseline optimization beside a candidate under what_if or shadow, revalidates both, reports the deltas, and closes with a recommended_operator_action. The report changes no live position.
Read more in Credit facilities, which owns the capital book and facilities an optimization acts on.
Execution stays interruptible, and critical drift forces rollback
AutonomousExecutionDecisionArtifact is where a decision becomes an action. It names the decision, the optimization, and the envelope by id, the action taken, its lifecycle_state (prepared, executed, interrupted, rolled_back, or blocked), the safety gates it cleared, and a rollback control that names a plan and a human interrupt contact. executed requires every gate to pass; blocked requires at least one to fail. An executed bind dispatches settlement only through its settlement_dispatch_ref.
AutonomousRollbackPlanArtifact names a safe state (shadow_mode_only, delegated_only, bind_disabled, or full_pause), the drift triggers that engage it, and the actions it takes. AutonomousDriftReport embeds that plan and a comparison report, then lists drift signals, each with a kind, a severity of warning or critical, and an observed value against a non-zero threshold.
{
"schema": "chio.autonomous-drift-report.v1",
"drift_report_id": "adr-1",
"generated_at": 1743379620,
"subject_key": "subject-1",
"pricing_decision_ref": "apd-1",
"optimization_ref": "cpo-1",
"drift_signals": [
{
"kind": "settlement_failure_rate",
"severity": "critical",
"metric_name": "failed_settlement_rate_bps",
"observed_value": 275,
"threshold_value": 100,
"description": "Settlement failures exceeded the automation safe-state threshold.",
"evidence_refs": [
{
"kind": "web3_settlement_receipt",
"reference_id": "receipt-web3-1",
"observed_at": 1743379000,
"locator": "web3-settlement:receipt-web3-1"
}
]
}
],
"rollback_plan": {
"schema": "chio.autonomous-rollback-plan.v1",
"plan_id": "arp-1",
"issued_at": 1743379560,
"subject_key": "subject-1",
"safe_state": "delegated_only",
"triggers": [
"settlement_failure_rate",
"premium_variance"
],
"actions": [
"switch_to_safe_state",
"cancel_pending_execution",
"require_human_approval"
],
"requires_operator_ack": true,
"note": "Falls back to delegated pricing when automation drifts beyond the accepted envelope."
},
"comparison_report": {
"schema": "chio.autonomous-comparison-report.v1",
"comparison_id": "acr-1",
"generated_at": 1743379500,
"pricing_decision_ref": "apd-1",
"manual_decision_ref": "uwd-manual-1",
"disposition": "narrower_than_manual",
"deltas": [
{
"field": "premium_units",
"automated_value": "4800",
"manual_value": "5100",
"description": "Automation priced inside the manual ceiling."
}
],
"note": "Shows automation staying narrower than the comparable manual decision."
},
"fail_safe_engaged": true,
"note": "Fail-safe engaged after settlement drift breached the critical threshold."
}Any critical signal requires fail_safe_engaged: true, and its kind must appear in the plan’s triggers; otherwise the report fails with InvalidDrift. In the reference report, a settlement failure rate of 275 against a threshold of 100 is critical, the plan lists settlement_failure_rate, and automation falls back to delegated_only.
Automated decisions are measured against manual ones
AutonomousComparisonReport holds an automated decision against a comparable manual one. Its disposition is match, narrower_than_manual, wider_than_manual, or manual_override. Anything but match carries at least one delta with every field filled, and manual_override names its override_reference.
AutonomousQualificationMatrix records the profile’s bounded claim as cases, each tying requirement ids to an expected and an observed outcome of pass or fail_closed. The matrix in docs/standards/CHIO_AUTONOMOUS_QUALIFICATION_MATRIX.json qualifies four claims:
- autonomous pricing stays bounded by explicit authority envelopes;
- capital-pool optimization remains simulation-backed and override-ready;
- automatic bind execution stays interruptible and rollback-safe;
- critical drift triggers a fail-safe rollback without hidden widening.
The claim is scoped to the signed envelope family. It excludes open-ended insurer-network automation, model authority outside the envelope, settlement dispatch beyond the Chio web3 settlement rail, and trust widened from imported evidence or external execution alone.
Autonomy records and validators
Search for bind, shadow_only, or InvalidDrift.
Record types
Ten wire record types ship, each with a validator. Each is a serde struct with deny_unknown_fields and a Signed<Name> alias for SignedExportEnvelope<Name>, for example SignedAutonomousPricingDecision. A validator rejects an unknown schema id, an empty required field, a duplicate reference, or a currency code that is not uppercase.
| Schema id | Record type | Validator |
|---|---|---|
chio. | Autonomous | validate_ |
chio. | Autonomous | validate_ |
chio. | Autonomous | validate_ |
chio. | Capital | validate_ |
chio. | Capital | validate_ |
chio. | Autonomous | validate_ |
chio. | Autonomous | validate_ |
chio. | Autonomous | validate_ |
chio. | Autonomous | validate_ |
chio. | Autonomous | validate_ |
Evidence kinds
AutonomousEvidenceKind has eleven variants: underwriting_decision, exposure_ledger, credit_scorecard, capital_book, credit_facility, credit_loss_lifecycle, web3_settlement_receipt, liability_quote_response, liability_auto_bind_decision, claim_workflow, and runtime_assurance_appraisal.
Pricing input rules
currencyis a three-letter uppercase code, matched by exact string comparison with no case-folding or trimming; the requested coverage amount’s currency must equal it.receipt_history_window_secsandavailable_capital_unitsare non-zero, andreputation_score_bpsis at most 10000.evidence_refsincludes at leastunderwriting_decision,exposure_ledger,credit_scorecard, andcapital_bookevidence.- Any non-zero
pending_loss_unitsorsettled_loss_unitsrequires acredit_loss_lifecyclereference; a setlatest_web3_settlement_staterequires aweb3_settlement_receiptreference. - The support boundary on the input defaults to
delegated_authority_requiredandreserve_optimization_required, with bind and operator override supported.
Authority envelope rules
permitted_actionsandauthority_chain_refsare non-empty and free of duplicates.max_coverage_amount,max_premium_amount, and anyrequires_human_review_above_premiumthreshold share the envelope currency, and the review threshold is at mostmax_premium_amount.max_rate_change_bpsis between 1 and 10000,max_daily_decisionsis non-zero, andnot_beforeis strictly earlier thannot_after.- A
regulated_roleenvelope names its role; adelegated_market_authorityenvelope names its delegation reference. - A shadow or advisory envelope that lists
bindfails withInvalidEnvelope.
Pricing decision fields
disposition is reprice, renew, decline, bind_within_envelope, or manual_review. review_state is auto_approved, human_review_required, shadow_only, or blocked. The decision also carries suggested coverage and premium, a confidence score, and the weighted explanation factors behind the price.
confidence_bps and every factor’s weight_bps are between 1 and 10000, and explanation factor codes are unique. In the model provenance, model_id, model_version, engine_family, input_hash, and explanation_version are non-empty, and training_cutoff is no later than published_at.
Optimization and simulation rules
An optimization requires unique facility_refs and pending_claim_refs, both ratio ceilings between 1 and 10000, a non-zero max_bind_capacity_units, and at least one recommendation. Each recommendation carries a positive amount in the optimization currency, and shift_capacity names a destination_ref. A simulation’s two optimizations share the report’s subject and currency, carry distinct optimization ids, and set scenario_comparison_supported; its recommended_operator_action is non-empty.
Execution references by action
repriceandrenewcarry aquote_response_refand embed no bind or settlement reference.declineembeds no bind or settlement reference.bindrequires aquote_response_ref, anauto_bind_decision_ref, and abound_coverage_ref; anexecutedbind also requires asettlement_dispatch_refonto the web3 settlement rail.
Gate names are unique. The quote, auto-bind, and bound-coverage references point into the liability market workflow, and the settlement dispatch reference points at on-chain settlement. Rollback plan triggers and actions are non-empty and duplicate-free.
{
"schema": "chio.autonomous-execution-decision.v1",
"execution_id": "aed-1",
"issued_at": 1743379440,
"pricing_decision_ref": "apd-1",
"optimization_ref": "cpo-1",
"authority_envelope_ref": "ape-1",
"subject_key": "subject-1",
"provider_id": "carrier-1",
"currency": "USD",
"action": "bind",
"lifecycle_state": "executed",
"quote_response_ref": "quote-response-1",
"auto_bind_decision_ref": "auto-bind-1",
"bound_coverage_ref": "bound-coverage-1",
"settlement_dispatch_ref": "dispatch-web3-1",
"safety_gates": [
{
"name": "authority-within-envelope",
"passed": true,
"description": "Coverage and premium remain inside the active authority envelope."
},
{
"name": "capital-headroom",
"passed": true,
"description": "Capital-pool optimization preserved minimum reserve headroom."
}
],
"rollback_control": {
"rollback_plan_ref": "arp-1",
"interruptible": true,
"human_interrupt_contact": "ops@chio.example"
},
"note": "Executes one bounded autonomous bind over the official web3 lane."
}Drift signal kinds
loss_ratio_spike, premium_variance, capital_utilization, settlement_failure_rate, override_rate, model_version_mismatch, and evidence_staleness. Rollback actions include switch_to_safe_state, cancel_pending_execution, and require_human_approval.
Error model
Every validator returns Result<(), AutonomyContractError>. The error is a closed thiserror enum, so callers match on the variant instead of parsing a message.
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
pub enum AutonomyContractError {
#[error("unsupported schema: {0}")]
UnsupportedSchema(String),
#[error("missing field: {0}")]
MissingField(&'static str),
#[error("duplicate value: {0}")]
DuplicateValue(String),
#[error("unknown reference: {0}")]
UnknownReference(String),
#[error("invalid envelope: {0}")]
InvalidEnvelope(String),
#[error("invalid decision: {0}")]
InvalidDecision(String),
#[error("invalid optimization: {0}")]
InvalidOptimization(String),
#[error("invalid execution: {0}")]
InvalidExecution(String),
#[error("invalid drift: {0}")]
InvalidDrift(String),
#[error("invalid qualification case: {0}")]
InvalidQualificationCase(String),
}Validating records
Deserialize with serde, then call the matching validator. The pricing decision and the drift report embed their dependencies, so validating the outer record revalidates the embedded ones.
use chio_autonomy::{
AutonomousPricingDecisionArtifact, validate_autonomous_pricing_decision,
};
let bytes = std::fs::read("decision.json")?;
let decision: AutonomousPricingDecisionArtifact = serde_json::from_slice(&bytes)?;
validate_autonomous_pricing_decision(&decision)?;
// The embedded input, authority envelope, and model provenance are checked here.The crate’s regression test reference_artifacts_parse_and_validate deserializes and validates every reference example under docs/standards/CHIO_AUTONOMOUS_*.json and docs/standards/CHIO_CAPITAL_POOL_*.json, so the JSON on this page is the JSON the validators are tested against. Unit tests are named for the rules they hold, such as pricing_decision_rejects_future_training_cutoff, pricing_input_requires_capital_book_evidence, non_active_authority_cannot_permit_bind, and bind_decision_cannot_auto_approve_when_human_review_required.
Source and profile
Type and field names come from crates/economy/chio-autonomy/src/model.rs and crates/economy/chio-autonomy/src/validation.rs; the integration tests are in crates/economy/chio-autonomy/tests/integration_smoke.rs. docs/standards/CHIO_AUTONOMOUS_PRICING_PROFILE.md specifies the bounded claim, and chio-core re-exports the crate as autonomy.