Skip to main content

software.change/1

Deliver a change to a software system: implement it, verify the current implementation revision, merge it under authority, release and deploy it, and accept it once its objective is realized; or close it declined, superseded or abandoned on an explicit decision, or rolled back on a complete rollback result. A case fixes its risk, which selects the obligations that apply, and its change kind, which selects whether a regression must be reproduced before the implementation is edited, and whether its regression test must fail on its first run, before the implementation is first changed; and whether it affects a security boundary, in which case the implementation is verified only once a principal other than the implementer approved its security review. A deployment is healthy only on an observation at most 30 minutes old.

Dependency graph​

Which actions may produce which evidence, which claims that evidence establishes, and which outcomes and obligations rest on those claims. Hover or focus a node to trace what it rests on.

Protocol · revision 1

software.change/1

Deliver a change to a software system: implement it, verify the current implementation revision, merge it under authority, release and deploy it, and accept it once its objective is realized; or close it declined, superseded or abandoned on an explicit decision, or rolled back on a complete rollback result. A case fixes its risk, which selects the obligations that apply, and its change kind, which selects whether a regression must be reproduced before the implementation is edited, and whether its regression test must fail on its first run, before the implementation is first changed; and whether it affects a security boundary, in which case the implementation is verified only once a principal other than the implementer approved its security review. A deployment is healthy only on an observation at most 30 minutes old.

  • Actions6
  • Evidence kinds9
  • Claims9
  • Outcomes5
  • Obligations6
  • Claim supports claim
  • Precondition, traced on hover
  • Needs authority
ACTION · WRITEimplementation.editACTION · WRITErelease.rollbackACTION · READrepository.inspectACTION · WRITErepository.mergeACTION · READtests.runACTION · WRITEtests.writeEVIDENCE KINDbuild_provenanceEVIDENCE KINDcode_reviewEVIDENCE KINDimplementation_changeEVIDENCE KINDobjective_observationEVIDENCE KINDoperational_observationEVIDENCE KINDregression_test_resultEVIDENCE KINDrollback_resultEVIDENCE KINDsecurity_reviewEVIDENCE KINDtest_resultCLAIMdeployment.healthyCLAIMimplementation.reviewedCLAIMimplementation.verifiedCLAIMobjective.realizedCLAIMregression.reproducedCLAIMregression.shown_firstCLAIMrelease.provenCLAIMsecurity.reviewedCLAIMtests.passOUTCOMEabandonedOUTCOMEacceptedOUTCOMEdeclinedOUTCOMErolled_backOUTCOMEsupersededOBLIGATIONhealth.requiredOBLIGATIONprovenance.requiredOBLIGATIONred_first.requiredOBLIGATIONreview.requiredOBLIGATIONsecurity_review.requiredOBLIGATIONtests.required

Hover or focus a node to trace what it rests on and what rests on it. Press Enter to pin it, Escape to clear.

Case inputs

affects_security_boundary
falsetruewhether the change affects a security boundary; one that does needs an approving security review from a principal other than the implementer before its implementation is verified
change_kind
bugfixfeaturerefactorwhat the change is; a bugfix must reproduce its regression with a failing test before the implementation is edited, and its regression test must fail on its first run, before the implementation is first changed
risk
criticalelevatedstandardtrivialhow much proof the change must carry; each level applies every obligation of the level below it and one more
Protocol as text
Actions
NameDescriptionRuleLeads to
implementation.editchange the implementation in the repository's working revision; a bugfix needs its regression reproduced firstany of claim regression.reproduced input change_kind in feature, refactor effect writeproduces implementation_change
release.rollbackreturn to a previous release; needs authority to roll back, and invoking it earns no outcome until a rollback result says it is completeneeds release.rollback effect writeproduces rollback_result
repository.inspectread the repositoryeffect read—
repository.mergemerge a revision into the repository's mainline; needs the current implementation revision verified and authority to merge, never only a connection to the repository hostclaim implementation.verified needs repository.merge effect write—
tests.runrun the tests against an implementation revisioneffect readproduces regression_test_result; produces test_result
tests.writechange the tests in the repository's working revisioneffect write—
Evidence kinds
NameDescriptionRuleLeads to
build_provenancethe record of how a release was built from an implementation—establishes release.proven (about release)
code_reviewa review of an implementation revision; its result is approved or rejected—establishes implementation.reviewed (approved about implementation)
implementation_changethe record that the implementation was changed, moving it to a new revision—establishes regression.shown_first (after regression_test_result about implementation)
objective_observationan observation of whether the intent's objective is met; its result is satisfied or unsatisfied—establishes objective.realized (satisfied about intent)
operational_observationan observation of the running system; its result is healthy or unhealthy, and it applies for 30 minutes after it is observed, after which it no longer says anything—establishes deployment.healthy (healthy about deployment)
regression_test_resultthe result of running a bugfix's regression test against an implementation revision; its result is pass or fail—establishes regression.reproduced (first fail about implementation); establishes regression.shown_first (before implementation_change about implementation); establishes regression.shown_first (first fail about implementation)
rollback_resultthe result of returning a release to the one before it; its result is complete or partial——
security_reviewa review of an implementation revision's effect on a security boundary; its result is approved or rejected—establishes security.reviewed (approved about implementation, independent on different_principal)
test_resultthe result of running tests against an implementation revision; its result is pass or fail—establishes implementation.verified (pass about implementation); establishes regression.reproduced (fail about implementation); establishes tests.pass (pass about implementation)
Claims
NameDescriptionRuleLeads to
deployment.healthythe deployment is running healthilyevidence = healthy: operational_observationrequires accepted; requires health.required
implementation.reviewedthe current implementation revision is reviewedevidence = approved: code_reviewrequires review.required
implementation.verifiedthe current implementation revision is verified: its tests pass and, when the change affects a security boundary, it is security reviewedall of any of claim security.reviewed input affects_security_boundary in false evidence = pass: test_resultsupports release.proven; gates repository.merge
objective.realizedthe intent's objective is metevidence = satisfied: objective_observationrequires accepted
regression.reproducedthe regression a bugfix repairs is reproduced: a test has failed on the current implementation revision, or the first run of the regression test, on any revision of the implementation, failedany of evidence = fail: test_result first evidence = fail: regression_test_result about implementationgates implementation.edit
regression.shown_firstthe regression test failed first, before the implementation was first changed: the first regression test result about the implementation failed, and it was observed before the implementation's first changeall of evidence regression_test_result before implementation_change about implementation first evidence = fail: regression_test_result about implementationrequires red_first.required
release.proventhe current implementation revision is verified and the current release revision carries build provenance; nothing here ties that release to the verified implementation revisionall of claim implementation.verified any evidence: build_provenancerequires accepted; requires provenance.required
security.reviewedthe current implementation revision's security review is approved by a producer the case lists as another principal than the implementerevidence = approved: security_reviewsupports implementation.verified; requires security_review.required
tests.passthe tests pass for the current implementation revisionevidence = pass: test_resultrequires tests.required
Outcomes
NameDescriptionRuleLeads to
abandonedthe case closed because the change was explicitly abandoned without reaching any planned outcome——
acceptedthe case closed with its result accepted; needs the release proven, the deployment healthy and the objective realizedall of claim deployment.healthy claim objective.realized claim release.proven—
declinedthe case closed because the change was explicitly declined; needs no implementation——
rolled_backthe case closed with its release rolled back; needs a rollback result about the current release revision that says the rollback is completeevidence = complete: rollback_result—
supersededthe case closed because another change explicitly superseded it——
Obligations
NameDescriptionRuleLeads to
health.requiredthe deployment is healthy; applies at critical riskapplicable when input risk in critical claim deployment.healthy—
provenance.requiredthe release is proven; applies at elevated risk and aboveapplicable when input risk in critical, elevated claim release.proven—
red_first.requiredthe regression test failed on its first run, before the implementation was first changed; applies to a bugfix, at every riskapplicable when input change_kind in bugfix claim regression.shown_first—
review.requiredthe current implementation revision is reviewed; applies at standard risk and aboveapplicable when input risk in critical, elevated, standard claim implementation.reviewed—
security_review.requiredthe current implementation revision is security reviewed by another principal than the implementer; applies to a change that affects a security boundary, at every riskapplicable when input affects_security_boundary in true claim security.reviewed—
tests.requiredthe tests pass for the current implementation revision; applies at every riskapplicable when input risk in critical, elevated, standard, trivial claim tests.pass—

Source: protocols/software-change/1.yaml

Actions​

What can be done in a case: what it needs first, which authority it requires, the class of effect it has and the evidence it may produce.

ActionDescriptionPreconditionRequires capabilityEffectMay produce
implementation.editchange the implementation in the repository's working revision; a bugfix needs its regression reproduced firstany of (regression.reproduced is TRUE; input change_kind is one of feature, refactor)no authoritywriteimplementation_change
release.rollbackreturn to a previous release; needs authority to roll back, and invoking it earns no outcome until a rollback result says it is completenonerelease.rollbackwriterollback_result
repository.inspectread the repositorynoneno authorityreadno evidence
repository.mergemerge a revision into the repository's mainline; needs the current implementation revision verified and authority to merge, never only a connection to the repository hostimplementation.verified is TRUErepository.mergewriteno evidence
tests.runrun the tests against an implementation revisionnoneno authorityreadregression_test_result, test_result
tests.writechange the tests in the repository's working revisionnoneno authoritywriteno evidence

Evidence kinds​

The kinds of evidence this protocol admits. A kind with a maximum age applies for that long after a record's observed_at: evaluated at a later instant, the record is excluded as expired.

Evidence kindDescriptionApplies forProduced byUsed by claims
build_provenancethe record of how a release was built from an implementationno limitno actionrelease.proven
code_reviewa review of an implementation revision; its result is approved or rejectedno limitno actionimplementation.reviewed
implementation_changethe record that the implementation was changed, moving it to a new revisionno limitimplementation.editno claim
objective_observationan observation of whether the intent's objective is met; its result is satisfied or unsatisfiedno limitno actionobjective.realized
operational_observationan observation of the running system; its result is healthy or unhealthy, and it applies for 30 minutes after it is observed, after which it no longer says anything30m after it is observedno actiondeployment.healthy
regression_test_resultthe result of running a bugfix's regression test against an implementation revision; its result is pass or failno limittests.runno claim
rollback_resultthe result of returning a release to the one before it; its result is complete or partialno limitrelease.rollbackno claim
security_reviewa review of an implementation revision's effect on a security boundary; its result is approved or rejectedno limitno actionsecurity.reviewed
test_resultthe result of running tests against an implementation revision; its result is pass or failno limittests.runimplementation.verified, regression.reproduced, tests.pass

Claims​

Each claim is TRUE, FALSE or UNKNOWN, established from evidence by its predicate. Missing or stale evidence leaves a claim UNKNOWN, never FALSE.

ClaimDescriptionTrue when
deployment.healthythe deployment is running healthilyevidence operational_observation with result healthy about deployment
implementation.reviewedthe current implementation revision is reviewedevidence code_review with result approved about implementation
implementation.verifiedthe current implementation revision is verified: its tests pass and, when the change affects a security boundary, it is security reviewedall of (any of (security.reviewed is TRUE; input affects_security_boundary is one of false); evidence test_result with result pass about implementation)
objective.realizedthe intent's objective is metevidence objective_observation with result satisfied about intent
regression.reproducedthe regression a bugfix repairs is reproduced: a test has failed on the current implementation revision, or the first run of the regression test, on any revision of the implementation, failedany of (evidence test_result with result fail about implementation; the first regression_test_result about implementation is fail)
regression.shown_firstthe regression test failed first, before the implementation was first changed: the first regression test result about the implementation failed, and it was observed before the implementation's first changeall of (the first regression_test_result before the first implementation_change, both about implementation; the first regression_test_result about implementation is fail)
release.proventhe current implementation revision is verified and the current release revision carries build provenance; nothing here ties that release to the verified implementation revisionall of (implementation.verified is TRUE; evidence build_provenance about release)
security.reviewedthe current implementation revision's security review is approved by a producer the case lists as another principal than the implementerevidence security_review with result approved about implementation, from a producer independent on different_principal
tests.passthe tests pass for the current implementation revisionevidence test_result with result pass about implementation

Obligations​

What must be done before a case can be complete, and what discharges it. An obligation stays open until its predicate is TRUE; its predicate being UNKNOWN does not discharge it.

ObligationDescriptionApplies whenDischarged when
health.requiredthe deployment is healthy; applies at critical riskinput risk is one of criticaldeployment.healthy is TRUE
provenance.requiredthe release is proven; applies at elevated risk and aboveinput risk is one of critical, elevatedrelease.proven is TRUE
red_first.requiredthe regression test failed on its first run, before the implementation was first changed; applies to a bugfix, at every riskinput change_kind is one of bugfixregression.shown_first is TRUE
review.requiredthe current implementation revision is reviewed; applies at standard risk and aboveinput risk is one of critical, elevated, standardimplementation.reviewed is TRUE
security_review.requiredthe current implementation revision is security reviewed by another principal than the implementer; applies to a change that affects a security boundary, at every riskinput affects_security_boundary is one of truesecurity.reviewed is TRUE
tests.requiredthe tests pass for the current implementation revision; applies at every riskinput risk is one of critical, elevated, standard, trivialtests.pass is TRUE

Outcomes​

The legitimate terminal interpretations of a case, and what each requires.

OutcomeDescriptionRequires
abandonedthe case closed because the change was explicitly abandoned without reaching any planned outcomedecision explicitly_abandoned
acceptedthe case closed with its result accepted; needs the release proven, the deployment healthy and the objective realizedall of (deployment.healthy is TRUE; objective.realized is TRUE; release.proven is TRUE)
declinedthe case closed because the change was explicitly declined; needs no implementationdecision explicitly_declined
rolled_backthe case closed with its release rolled back; needs a rollback result about the current release revision that says the rollback is completeevidence rollback_result with result complete about release
supersededthe case closed because another change explicitly superseded itdecision explicitly_superseded

Artifacts​

The things whose revisions evidence is bound to.

ArtifactDescription
deploymenta release running in an environment
implementationa revision of the code that realizes the plan
intentwhat the change is meant to achieve
planthe intended steps toward the intent
releasea versioned, deployable unit of the system
system_specificationthe specified behaviour of the system concerned

Case inputs​

What a case fixes when it opens: each input takes one of the values listed, and is never UNKNOWN.

InputDescriptionValues
affects_security_boundarywhether the change affects a security boundary; one that does needs an approving security review from a principal other than the implementer before its implementation is verifiedfalse, true
change_kindwhat the change is; a bugfix must reproduce its regression with a failing test before the implementation is edited, and its regression test must fail on its first run, before the implementation is first changedbugfix, feature, refactor
riskhow much proof the change must carry; each level applies every obligation of the level below it and one morecritical, elevated, standard, trivial

Independence dimensions​

What an evidence match may demand of a record's producer (independent_on). The case lists, for each producer, the dimensions on which it is independent of the case's work; a match that demands a dimension reads only records whose producer the case lists on it. A record that fails the demand neither establishes nor contradicts the match, so a match only such records would decide is UNKNOWN.

DimensionDescription
different_agent_runthe producer is another agent run than the one that did the case's work
different_principalthe producer is another principal than the one who did the case's work