Skip to main content

incident.response/1

Respond to an incident through two obligations that progress independently: restore_service, on which emergency mode is left, and investigate_cause, which stays open after emergency mode ends until a cause analysis of a current revision of the service or the release identifies the cause. A rollback of the release is verified only on a complete rollback result from a verifier the case lists as another principal than the one who rolled it back. The service 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

incident.response/1

Respond to an incident through two obligations that progress independently: restore_service, on which emergency mode is left, and investigate_cause, which stays open after emergency mode ends until a cause analysis of a current revision of the service or the release identifies the cause. A rollback of the release is verified only on a complete rollback result from a verifier the case lists as another principal than the one who rolled it back. The service is healthy only on an observation at most 30 minutes old.

  • Actions6
  • Evidence kinds4
  • Claims4
  • Obligations2
  • Precondition, traced on hover
  • Needs authority
ACTIONemergency.leaveACTION · READlogs.searchACTION · READmetrics.inspectACTION · READrelease.inspectACTION · WRITErelease.rollbackACTION · WRITEtraffic.shiftEVIDENCE KINDcause_analysisEVIDENCE KINDimpact_assessmentEVIDENCE KINDoperational_observationEVIDENCE KINDrollback_resultCLAIMcause.identifiedCLAIMimpact.boundedCLAIMrollback.verifiedCLAIMservice.healthyOBLIGATIONinvestigate_causeOBLIGATIONrestore_service

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

Protocol as text
Actions
NameDescriptionRuleLeads to
emergency.leaveleave emergency mode; admissible once restore_service is discharged and the impact is bounded, whatever is known of the causeall of claim impact.bounded claim service.healthy—
logs.searchsearch the system's logseffect readproduces cause_analysis
metrics.inspectread the system's metricseffect readproduces impact_assessment; produces operational_observation
release.inspectread what a release containseffect readproduces cause_analysis
release.rollbackreturn to a previous releaseneeds release.rollback effect writeproduces rollback_result
traffic.shiftmove traffic between deploymentsneeds traffic.shift effect write—
Evidence kinds
NameDescriptionRuleLeads to
cause_analysisan analysis of why an incident happened—establishes cause.identified (identified)
impact_assessmentan assessment of who and what an incident affects—establishes impact.bounded (bounded about service)
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 service.healthy (healthy about service)
rollback_resultthe result of returning a release to the one before it; its result is complete or partial—establishes rollback.verified (complete about release, independent on different_principal)
Claims
NameDescriptionRuleLeads to
cause.identifiedthe incident's cause is knownevidence = identified: cause_analysisrequires investigate_cause
impact.boundedthe incident's impact is known and containedevidence = bounded: impact_assessmentgates emergency.leave
rollback.verifiedthe release's rollback is complete, by a rollback result from a producer the case lists as another principal than the one who rolled it backevidence = complete: rollback_result—
service.healthythe service is running healthilyevidence = healthy: operational_observationrequires restore_service; gates emergency.leave
Obligations
NameDescriptionRuleLeads to
investigate_causeestablish why the incident happened; stays open after emergency mode ends until a cause analysis of a current revision of the service or the release identifies the causeclaim cause.identified—
restore_serviceurgent; bring the affected service back to healthclaim service.healthy—

Source: protocols/incident-response/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
emergency.leaveleave emergency mode; admissible once restore_service is discharged and the impact is bounded, whatever is known of the causeall of (impact.bounded is TRUE; service.healthy is TRUE)no authoritynot declaredno evidence
logs.searchsearch the system's logsnoneno authorityreadcause_analysis
metrics.inspectread the system's metricsnoneno authorityreadimpact_assessment, operational_observation
release.inspectread what a release containsnoneno authorityreadcause_analysis
release.rollbackreturn to a previous releasenonerelease.rollbackwriterollback_result
traffic.shiftmove traffic between deploymentsnonetraffic.shiftwriteno 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
cause_analysisan analysis of why an incident happenedno limitlogs.search, release.inspectcause.identified
impact_assessmentan assessment of who and what an incident affectsno limitmetrics.inspectimpact.bounded
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 observedmetrics.inspectservice.healthy
rollback_resultthe result of returning a release to the one before it; its result is complete or partialno limitrelease.rollbackrollback.verified

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
cause.identifiedthe incident's cause is knownevidence cause_analysis with result identified
impact.boundedthe incident's impact is known and containedevidence impact_assessment with result bounded about service
rollback.verifiedthe release's rollback is complete, by a rollback result from a producer the case lists as another principal than the one who rolled it backevidence rollback_result with result complete about release, from a producer independent on different_principal
service.healthythe service is running healthilyevidence operational_observation with result healthy about service

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.

ObligationDescriptionDischarged when
investigate_causeestablish why the incident happened; stays open after emergency mode ends until a cause analysis of a current revision of the service or the release identifies the causecause.identified is TRUE
restore_serviceurgent; bring the affected service back to healthservice.healthy is TRUE

Outcomes​

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

This protocol declares no outcomes.

Artifacts​

The things whose revisions evidence is bound to.

ArtifactDescription
releasea versioned, deployable unit of the system
servicethe running service a case concerns

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_principalthe producer is another principal than the one who did the case's work