Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

HAZOP of the core primitives

This is the current-core HAZOP. It treats the seven deploy terms as ten nodes and applies fifteen guide words to each node’s parameters. The worksheet is spec/hazop/worksheet.yaml; the method is in the audit charter.

Design intent

NodeIntentInvariantsParameters
root-installOnly the installer registers component URIs; keys are unique; versions are positiveL1, L2installer, key, URI, version, kind, term order
identityOne address maps to one identity; only the owner updates itL1, L2address, owner, patch, entry
issuer-credential-proofScoped issuance; non-retroactive one-shot proofC1–C3, L3issuer, subject, scope, status, issuedAt, expiresAt, proof use
claim-validationOne transition; one K-Asset; eligible validatorC1–C3status, validator, deadline, verdict, K-Asset id
kasset-nestingState-machine approval; proof authority; forest orderK1–K3status, approver, approvedAt, childRefs, proof, scope
value-propositionValidate once; caller- and height-bound proofV1, V2status, proposer, caller, atHeight, deadline
oracleDecide/execute once; subject-bound applicationO1, O2adjudicator, subjectRef, decision, execute, evidence, deadline
provenanceWriter-gated append-only anchorsP1assetRef, writers, hash, comment
registries-factoriesAppend-only creation; resolvable recordsL1, L2key, entry, counter, directory/factory state
deployment-phloCorrect order and URI binding; private capabilities; bounded costL1, L4term order, URI binding, private Apply, phlo, install auth

Coverage

The worksheet has 150 coverage cells (10 nodes × 15 guide words): 145 are covered by a full row and five are marked not applicable with a reason. There are 146 rows. Seventy-seven rows are negative results: the considered deviation has a holding safeguard. Sixty-nine rows have a partial or no safeguard and therefore name a Lean item (LR-###), a Rholang item (RR-###), or accept-risk.

A negative row is evidence that a specific deviation was considered, not a claim that the node is safe. The most useful negative results are:

SafeguardEvidence
A proof take is one-shotProof.take used flag; proof_take_once_versioned
Approve refuses the claimant and validatorKAsset.rho conflict guard
Approve requires an Approver credential and a VP proofproveAndCheck / checkApprovalVp
Nest refuses same-parent duplicates and cyclesnestCheck, nestProofs
Oracle apply is bound to the case id and the private ApplyApply.applyDecision
Anchor hashes are non-empty and unique per recordProvenance.anchor
Claim comment is open-window onlyClaim.comment
Validate refuses self-validation and late validationClaim.validate
Revoke blocks later proveCredential status guard
Duplicate root keys are refusedGenRoot.register
Install order and placeholders are checkedinstall.py ORDER, dry-run, parse-check
A peek is not a commit authoritycheck_concurrency.py

Deviations that feed the backlog

The rows below are representative, not the full register. Each has a finding and an action in the worksheet; the action is either a Lean item in the rigor roadmap or a Rholang item in the improvement plan.

HAZOP rowDeviationSafeguardAction
HZ-CLAIM-007Unknown verdict maps to Claim validated and K-Asset rejectedNoneRR-04 / RGA-020
HZ-CLAIM-015K-Asset minted before the claim write is completeNoneRR-11 / RGA-032
HZ-KASSET-003Model admits an approver the deployed arm would refuseModel omits the requirementLR-01 / RGA-004
HZ-KASSET-015Child proofs consumed before the parent write is acknowledgedNo receiptRR-11 / RGA-033
HZ-VP-005Proof carries a caller-chosen heightConsumers compare heightRR-03 / RGA-021
HZ-ORACLE-004Public open with caller-supplied partiesAdjudicator/Apply binding onlyRR-01 / RGA-023
HZ-ORACLE-015Execute spans two contracts without a receiptApply refuses a second case applicationRR-08 / RGA-024
HZ-PROV-012Anyone can create provenance for any assetRefNone; advisory recordRR-02 / RGA-022
HZ-ID-011Identity and directory writes are not recovery-safeFirst-writer-wins onlyRR-11 / RGA-031
HZ-CRED-009Deployed prove has no issuedAt lower boundExpiry guard onlyLR-08 / RGA-004
HZ-DEPLOY-002Nest work is unbounded in childRefsNo capRR-05 / RGA-025
HZ-CLAIM-016Claim can be born expired or with an impossible comment windowNoneRR-07 / RGA-026
HZ-REG-013Registry entry and object state can divergeNoneRR-11 / RGA-031

How to read a row

A row is a deviation from design intent, not a bug report by itself. safeguard_status: holds means the arm or platform check was found and is cited. partial means the safeguard narrows but does not close the deviation. none means no safeguard was found for the considered case. The action field is the disposition: a Lean item, a Rholang item, accept-risk, or none for a closing safeguard.

Limits

The HAZOP is qualitative. It does not cover the node’s Rholang semantics, phlo accounting, or the extension primitives. It is not exhaustive over all parameter values; it covers the fifteen guide words per node and the parameters listed above. A clean coverage cell is a considered not-applicable, not proof of safety.