@zanii/insurance
v0.1.1
Published
Machine-verifiable underwriting for agent liability - risk FACTS from the ledger's own un-inflatable aggregate (never a score), a co-signed policy, and claims that resolve against Merkle-proven receipts instead of disputes. Zanii states facts; insurers pr
Readme
@zanii/insurance
Machine-verifiable underwriting for agent liability. The commercial unlock for a transparency ledger is an insurable agent: an insurer prices a policy off the agent's ledger history, and a claim resolves against Merkle-proven receipts instead of a dispute.
npm install @zanii/insurance @zanii/core @zanii/a2a-directory @zanii/paymentsimport { riskProfile, buildPolicyBody, signPolicy, assemblePolicy, buildClaimBody, signClaim, assembleClaim, assessClaim } from '@zanii/insurance';
// 1. Risk FACTS from the ledger's own un-inflatable aggregate — never a score.
const profile = await riskProfile(agent.did, { asOf: now, delegation: certs });
profile.facts; // receipts, counterparties, age_days, revoked, anchored, scopes…
profile.flags; // ['THIN_HISTORY', 'WILDCARD_AUTHORITY', …] — named conditions, not numbers
// 2. A policy insurer and holder co-sign. Money in integer minor units.
const body = buildPolicyBody({
insurer: insurer.did, holder: owner.did, subject: agent.did,
premium: '120.00', coverageLimit: '50000.00', currency: 'USD',
coveredScopes: ['deploy.*', 'email.send'],
period: { start, end }, riskProfileHash: riskProfileHash(profile), // pin the underwriting basis
createdAt: now,
});
const policy = assemblePolicy(body, [signPolicy(body, insurer.did, insurerKey), signPolicy(body, owner.did, ownerKey)]);
// 3. A claim cites incident receipts by hash; assessment is deterministic.
const claim = assembleClaim(claimBody, [signClaim(claimBody, owner.did, ownerKey)]);
const a = assessClaim(claim, policy, { [receiptHash]: { receipt, sth, index, proof } });
a.ok; // terms verdict: holder-signed, within limit, every incident in-period + in-scope
a.proven; // incidents proven in the log by supplied evidence
a.unproven; // cited but unproven — a fact for the adjuster, not a failurePython: from zanii.insurance import build_risk_profile, verify_policy, assess_claim, ...
— byte-identical JCS objects and hashes.
Why facts, never a score
A score Zanii invents gets gamed and creates liability — insurers price, we state
facts and raise deterministic flags (REVOKED, NOT_FULLY_ANCHORED, THIN_HISTORY,
STALE, WILDCARD_AUTHORITY). The profile derives from the same /v1/reputation
aggregate AgentCV uses: counted by the log, not asserted by the agent.
The limit, stated up front
Ledger silence is unknown, not good. An agent that never receipts its failures looks safer than it is — thin or stale history is flagged, not rewarded, and an underwriter must treat uncovered activity as unknown risk. Cryptography verifies attestations, not reality: a proven incident receipt shows what was recorded, not everything that happened.
