Overview
A Runbook is a numbered, time-bounded sequence of steps that a human (or a future automation) follows to execute a known procedure — restart a service, rotate a certificate, restore a database, validate a deploy. Runbooks live under /ws/{slug}/runbooks and are the workspace's institutional memory: the thing you copy from when starting a change, and the thing you link from when documenting an incident.
Each runbook has a title, summary, category, version, ownership, and an ordered list of RunbookStep rows. A step carries an instruction (markdown), expected outcome, time estimate, optional verification command, optional rollback note, and flags for requires_approval and is_destructive.
Why it exists
The most common cause of weekend incidents is the same procedure done two different ways by two different operators. Runbooks remove that ambiguity. They also remove the "where is that doc?" problem: every change can be authored from a runbook, and every incident can be remediated via a runbook, with the same numbered steps and the same checkpoints. The audit trail captures every execution, so an auditor sees who ran what, when, with what timing variance, and with what outcome.
Vigilo treats runbooks as first-class data, not Confluence pages. They have versioning, they have execution history, they have inline ownership, and they sync bidirectionally with change implementation plans.
Key concepts
- Runbook fields —
title,key(RB-NNNNN, auto-incremented per workspace),description(markdown),category(free-text, used by filter chips),version(integer, bumps on every saved edit),owner(UserProfile),is_published(only published runbooks are pickable from the Change implementation-plan importer),archived_at(soft delete). - RunbookStep fields —
order(integer, 1-based),title,description(markdown),owner_role(which role is expected to run this step),est_minutes,verification(command or check the operator confirms),rollback_note,requires_approval(gates execution on a separate confirm dialog),is_destructive(renders the step with a danger badge). - RunbookExecution — a row created when an operator opens a runbook in "execute" mode and presses Start. The execution snapshots the runbook version, records the operator, and links to an optional
ChangeRequestorIncident. Each step run produces aRunbookStepEventwithstarted_at,completed_at, status (done,skipped,failed), and an optional note. - Versioning — every save bumps
versionand writes aRunbookVersionrow containing the prior body. The version history lives under the Runbook detail's History tab and supports a side-by-side diff. - Change ↔ Runbook sync — when authoring a change, click Import runbook on the implementation plan to copy a runbook's steps into the change. When the change reaches
completed, click Save as runbook to push the final step set back as a new runbook version. Both operations are non-destructive.
Common workflows
1. Author a runbook from scratch
- Open Work → Runbooks → + New runbook.
- Give it a title, category, owner, and a short description (markdown supported — paste links to dashboards, prerequisite docs, etc.).
- Add steps one by one. For each, set
est_minutes, the owner role, and any verification command. Toggleis_destructivefor anything that can't be undone trivially. - Click Publish when the runbook is ready to be imported. Drafts remain visible to the owner but won't appear in importer dropdowns.
2. Execute a runbook end-to-end
- Open the runbook detail and click Execute in the header.
- Optionally link the execution to an open
ChangeRequestorIncident— the link surfaces in the audit log on both sides. - Press Start. The first step expands; press Done when complete or Skip with a reason.
- Steps with
requires_approvalopen a confirm dialog before they can be marked done. - After the last step, the execution is sealed — no further edits. Timing variance (actual vs estimated minutes) appears on the execution summary.
3. Import a runbook into a change
- Open the change detail and click Implementation plan.
- Click Import runbook (icon in the plan footer). Pick a published runbook from the dropdown.
- The runbook's steps are copied into the change as implementation tasks. The Implementation plan now shows a Source: RB-XXX (v3) banner at the top.
- Edit the copied steps freely — they're now change-owned. If the source runbook ships a newer version, the banner shows a yellow chip; click Re-import to take the update or Clear source to dismiss.
4. Save a change's implementation plan back as a runbook
- After the change reaches
completed, open its Implementation plan tab. - Click Save as runbook in the plan footer.
- Either create a new runbook (give it a title and category) or update an existing one (the dropdown lists every published runbook). Updating bumps the version.
- The audit log records both the source change and the runbook target so the lineage is queryable.
5. Diff two versions of a runbook
- Open the runbook detail → History tab.
- Pick From and To versions (radio buttons). Click Compare.
- The diff shows added/removed/changed steps with line-level markers. Useful for an auditor reviewing what changed between two procedure versions.
Permissions
| Action | Roles |
|---|---|
| View published runbooks | All workspace members |
| View drafts | Owner of the runbook, Admin, Owner |
| Create runbook | Operator, Admin, Owner |
| Edit runbook (bumps version) | Owner of the runbook, Admin, Workspace Owner |
| Publish / unpublish | Owner of the runbook, Admin, Workspace Owner |
| Execute runbook | Operator, Admin, Owner |
| Save change plan back as runbook | Owner of the change, Admin, Workspace Owner |
| Archive runbook | Admin, Owner |
Runbook endpoints inherit WorkspaceScopedMixin, so a workspace cannot see another workspace's runbooks.
Troubleshooting
The Import-runbook picker is empty.
Only is_published runbooks appear. Open the runbook you want and click Publish.
A requires_approval step won't open the confirm dialog.
The operator's role does not satisfy the step's owner_role. Either change the step's role or escalate to someone who has it. Roles are checked at click-time, not at execution-start.
Save-as-runbook is greyed out.
Either the change isn't in completed yet, or every step in the plan is empty. Vigilo refuses to save a runbook with zero non-empty steps so that the resulting record is actually useful.
The runbook source banner disappeared after editing the change.
The banner relies on the change carrying a non-null source_runbook_id. If a user clicks Clear source, the link is removed deliberately and the banner won't return until a new import.
Related articles
- Change requests — see the Implementation plan section for the Import / Save-as flow.
- Incidents — link an execution to an incident for the remediation audit trail.
- Change FSM — runbook execution can gate the
start→in_progresstransition.