Operations Process Design CLN v2.9

Standard Operating Procedure

Why SOPs fail in practice — and why CLN is the notation layer they have always needed but never had.

Reading time: 14 min Level: Intermediate Updated: March 2026 Related: Incident Postmortem · Decision Log

What a Standard Operating Procedure is

A Standard Operating Procedure (SOP) is a documented, step-by-step instruction set that defines how a recurring task should be performed to achieve a consistent, predictable outcome. SOPs are the operational backbone of any organisation that cares about reliability: hospitals use them for clinical protocols, airlines for cockpit procedures, software teams for deployment and incident response, food companies for HACCP compliance.

Definition

Standard Operating Procedure — a documented sequence of steps, roles, decision criteria, and risk checkpoints that enables any qualified person to perform a task to the same standard every time, without relying on informal knowledge or tribal memory.

The purpose is deceptively simple: make the right action the easy action. A good SOP eliminates the need for real-time judgement on known problems, freeing cognitive resources for genuinely novel situations. In aviation, every non-normal procedure has an SOP precisely because abnormal situations are the worst time to invent a solution.

In practice, most SOPs fail at this purpose. Not because the ideas are wrong — but because the writing format is wrong.

Why SOPs fail — the prose problem

The majority of SOPs are written as prose paragraphs, numbered lists without semantic distinction, or dense tables copied from regulatory templates. They are written to satisfy an audit, not to guide an execution. The result is a document that looks like a procedure but functions like a wall of text — read once during onboarding, forgotten by week three, consulted only in crisis when it is too late for careful reading.

The core failure mode has a name in cognitive science: passive encoding. A reader can process an SOP paragraph without performing any classification — without deciding whether each sentence is a step, a condition, a risk, or a verification. The text flows and the eye moves, but no semantic work is done. See Encoding Depth for the mechanism.

Steps buried in prose
Actions mixed with rationale, context, and caveats in undifferentiated paragraphs. Executor cannot scan for what to do next.
→ CLN fix: every action on a . line, standalone, scannable
Risks invisible until too late
"Note: do not do X unless Y" buried in paragraph 4. Executor is already past that branch point.
→ CLN fix: ! lines always visible in left column before they are relevant
No verification checkpoints
Steps list what to do but not how to confirm it was done correctly. Errors propagate silently.
→ CLN fix: → expected result on every step requiring confirmation
Owner and trigger undefined
The document exists. No one knows when to start it, who runs each step, or what done looks like.
→ CLN fix: @ metadata at header level — owner, trigger, SLA, version
Decision branches missing
"If X, proceed to section 4.3.2." Executor must stop, search, reorient. Cognitive overhead breaks the flow state.
→ CLN fix: inline branching with → and ##anchor — jump targets visible in place
Escalation path absent
No instruction for what to do when the SOP doesn't cover the situation. Executor improvises or freezes.
→ CLN fix: ? open-decision lines + escalation @ contact explicit

CLN as SOP notation layer

CLN was not designed specifically for SOPs — it was designed as a general-purpose notation for structured thinking. But its operator set maps with unusual precision onto the semantic categories that every SOP needs to express: actions, preconditions, risks, verification states, ownership, decision branches, and escalation paths.

The match is not coincidental. Both CLN and good SOPs are solving the same underlying problem: how do you make the semantic type of a statement immediately visible without reading its content? In CLN, this is done with operators in the left column. In aviation checklists, it is done with bold/normal alternation and response items. In surgical protocols, it is done with colour-coded laminated cards. CLN generalises this principle to plain text.

Positioning statement

CLN is not a replacement for your SOP management system, wiki, or ITSM platform. It is the notation layer that makes SOP text machine-parseable, human-scannable, and cognitively safe to execute under pressure. Write your SOP in CLN; store it anywhere.

A CLN SOP can be stored in Confluence, Notion, Google Docs, GitHub, or a plain text file. The format is independent of the tool. An SOP in CLN that lives in a Notion database is better than an SOP in prose that lives in a purpose-built SOP platform.

The operator map for SOP writing

Each CLN operator has a specific meaning in the SOP context. Using them consistently creates a document that any trained CLN reader can navigate without reading — only scanning.

Op Name SOP role Example
= Equals Purpose, scope, definition — what this SOP achieves and when it applies = goal: restore service within RTO · scope: all P1 incidents
. Dot Every executable action step. One step per line. Verb-first. Present tense. . run: kubectl rollout undo deployment/api
@ At Owner, trigger, SLA, version, review date — the who/when/where of the procedure @ owner: on-call SRE · trigger: PagerDuty P1 alert
! Bang Risk, precaution, prerequisite that must be checked before acting. Non-optional. ! verify backup completed before proceeding !!
→ Arrow Expected result / verification state. What success looks like after this step. → expected: pods show Running · error rate < 0.1%
| Pipe Tool, system, credential, or resource required to execute this step | tool: kubectl · access: cluster-admin role required
? Question Decision point / conditional branch — executor must evaluate before continuing ? is the database accessible? → yes: §db-recovery · no: §escalate
* Star Context, rationale, tip — explains why without being a step or risk * this step is irreversible in production — re-read before executing
~ Tilde Known ambiguity or tradeoff — where the SOP cannot specify a universal answer ~ rollback speed vs data loss: faster rollback = more uncommitted writes lost
✔ / ☐ Check Execution state marker. ☐ = not done. ✔ = completed & verified. . notify incident channel ☐ → ✔ once posted

Anatomy of a CLN SOP

A CLN SOP has a fixed skeleton. Every section has a semantic reason to exist. Nothing is decorative.

1
Header block — @
Document identity: SOP name, version, owner, trigger condition, SLA, last review date. This block answers "when do I use this?" before the executor reads a single step.
@ owner · @ trigger · @ sla · @ version · @ reviewed
2
Scope & purpose — =
What this SOP achieves, what it does not cover, and who is qualified to execute it. A single = block. Executor confirms this is the right SOP before proceeding.
= goal · = scope · = out-of-scope · = prerequisites
3
Pre-flight checks — !
Everything that must be true before the first step. Access, tools, system states, safety conditions. A ! block before the procedure begins. Non-negotiable.
! confirm access · ! verify tool versions · ! check system state
4
Procedure — .
The steps. Each . line is one atomic action. Child → lines verify the result. Child ! lines flag step-specific risks. Child | lines specify tools. Dividers (⟶) separate phases.
⟶ Phase 1 · . step · → expected result · ! risk · | tool
5
Decision branches — ?
Conditional forks in the procedure. A ? line states the condition; child → lines give the targets for each branch using ##anchors.
? condition → [yes] ##anchor-a · → [no] ##anchor-b
6
Completion & handoff — @
What done looks like: verification state, notification targets, documentation required, next SOP in chain if applicable.
@ notify · @ document · @ next-sop · @ close-ticket
7
Escalation — !
What to do when the SOP does not cover the situation. Contact, threshold, and handoff procedure. Every SOP must have one. An SOP with no escalation path is a trap.
! escalate to: · @ contact · @ threshold condition

Before & after: the same procedure

The same oncall deployment rollback procedure — first in typical prose SOP format, then rewritten in CLN. Same information. Radically different cognitive load during execution.

✕ Prose SOP — typical format
When a deployment causes a service degradation, the on-call engineer should first verify that the issue is related to the deployment by checking the error rate in Datadog. If the error rate has increased by more than 5% compared to the baseline, a rollback should be initiated. Before rolling back, it is important to notify the #incidents channel with an initial assessment. The rollback should be performed using kubectl. After the rollback, verify that the error rate has returned to normal. If the issue persists, escalate to the backend lead.
✓ CLN SOP — same procedure
@ owner: on-call SRE @ trigger: error rate spike post-deploy @ sla: rollback complete < 15 min ! confirm spike is deployment-caused !! * check Datadog · baseline delta > 5% . post to #incidents ☐ → message posted · timestamp noted . run: kubectl rollout undo deployment/api ☐ → pods: Running · error rate < 0.5% ! irreversible in prod — re-read !! ? error rate recovered? → yes: »[§complete]##complete → no: »[§escalate]##escalate

Notice what changed: every sentence in the prose version required the reader to classify it on-the-fly — "is this a step? a precondition? a verification?" In the CLN version, the classification is done by the author at write time, encoded in the operator, and readable by the executor in zero seconds of active processing. Under incident pressure, this difference is the difference between a procedure that works and one that gets skipped.

Full example: production deployment SOP

SOP-ENG-001 · Production Deployment · v2.3
TASK: SOP-ENG-001 — Production Deployment @ owner: releasing engineer + on-call SRE @ trigger: approved PR merged to main · CI green @ sla: deployment complete within 30 min of trigger @ version: 2.3 · reviewed: 2026-02-15 · next review: 2026-08-15 @ tooling: kubectl 1.28+ · Datadog · PagerDuty · Slack #deployments = goal: deploy a new version to production with zero downtime = scope: all backend services · excludes database schema migrations (→ SOP-DB-003) = prerequisites: engineer holds cluster-admin role · PR has 2+ approvals · staging passed ─────────────────────────────────────────────────────── // ##preflight Pre-flight checks ! CI pipeline: all checks green on the commit to deploy !! ! staging smoke test: passed within last 2 hours !! ! no active incident: check PagerDuty — no open P1/P2 !! ! deploy window: Mon–Thu 09:00–16:00 UTC only !! * exception: hotfix P0 — requires CTO sign-off · use SOP-ENG-002 ⟶ Phase 1 · Announce & prepare . post deploy notice to #deployments ☐ * format: "🚀 Deploying [service] [version] — ETA 15 min · owner: @you" → message posted · thread opened for updates . open Datadog dashboard: [service]-production ☐ → baseline visible: error rate, p99 latency, RPS | bookmark: datadog.com/dashboard/SOP-ENG-001 ⟶ Phase 2 · Deploy . run deploy command ☐ | kubectl set image deployment/[service] app=[registry]/[service]:[version] ! double-check [version] tag — do NOT deploy :latest !! . watch rollout ☐ | kubectl rollout status deployment/[service] --timeout=5m → "successfully rolled out" in stdout ~ timeout does not mean failure — check pod events before aborting ⟶ Phase 3 · Verify . watch Datadog for 5 minutes post-rollout ☐ → error rate: within ±0.5% of baseline → p99 latency: within ±20ms of baseline → no new alerts firing ? metrics within acceptable range? → yes: proceed to §complete → no: proceed to §rollback // ##complete Completion . post success update to #deployments thread ☐ * format: "✅ [service] [version] deployed · stable · @channel" . update deployment log: JIRA / Linear ticket → Deployed ☐ . close PagerDuty maintenance window if opened ☐ // ##rollback Rollback (if metrics out of range) ! do not wait — rollback immediately if error rate >1% above baseline !! . run rollback ☐ | kubectl rollout undo deployment/[service] → previous version running · metrics returning to baseline . post rollback notice to #deployments ☐ . open post-mortem ticket → assign to releasing engineer ☐ * use SOP-ENG-005 (Post-Mortem) — complete within 48 hours // ##escalate Escalation ! escalate if: rollback fails · metrics do not recover · unknown blast radius !! @ escalate to: backend lead → CTO (P1 pager) @ escalation threshold: 10 min without recovery path identified → activate SOP-INC-001 (Incident Response) · this SOP is suspended

Checklist mode — executing against a CLN SOP

A CLN SOP doubles as a real-time checklist. The ☐ marker on every . line is not decoration — it is the execution state. During a deployment or incident, the executor marks ☐ → ✔ as each step completes, making progress visible at a glance and preventing skipped steps.

Execution invariant

A . line with ☐ is a statement of intent. A . line with ✔ is a statement of fact. A CLN SOP in active execution is a living document — its state reflects what has been done, not just what should be done.

This is the same principle as the WHO Surgical Safety Checklist: the value is not in the list existing but in the list being used as a synchronisation point. The cognitive act of checking ☐ → ✔ forces a verification pause that passive execution skips.

For AI-assisted execution — an agent walking through an SOP — the ☐/✔ system provides unambiguous state. The agent can resume mid-procedure after interruption by scanning for the last ✔ and continuing from the next ☐. No prose SOP supports this without custom parser logic.

SOP-specific directives

CLN's directives system (§23) can be applied to SOPs to control validation, output, and execution mode:

SOP directives — header block
%version: 2.9 %domain: engineering %validation: +risks +links ← enforce: every ! has a consequence · every ? has targets %export: html ← render as interactive checklist %flow: interactive ← for ?? input fields (form-style SOPs) %form: id=SOP-ENG-001 version=2.3 ← SOP identity for versioning and audit trail ── Validators catch structural SOP errors at write time, not execution time ── WARN [RISK:NO-CONSEQUENCE] → ! line with no child line WARN [LINK:DEAD-ANCHOR] → ? branch pointing to ##nonexistent WARN [INPUT:NO-QUESTION] → ?? with no content (v2.9 Forms Engine) WARN [PROHIBITION:WEAK] → ✗ with no sanctions defined

SOPs and AI execution agents

As AI agents take on more operational tasks — running deployments, responding to alerts, executing runbooks — the format of SOPs becomes a first-class engineering concern. An agent executing a prose SOP faces the same problem a junior engineer faces: it must parse semantic categories from syntax-free text before it can act. This is an unnecessary tax on both reliability and token budget.

A CLN SOP is a machine-readable procedure by construction. The operator column is a structured type annotation that an AI agent can parse without a language model — it is closer to a state machine than to natural language. — CLN Spec v2.9, §14 AI Instructions, Rule 22

A CLN SOP gives an AI agent exactly what it needs at each point in execution:

agent-execution-loop.cln — how an AI reads a CLN SOP
TASK: Agent execution model for CLN SOPs = input: CLN SOP document · current execution state (☐/✔ per step) ⟶ Step classification (O(1) — read operator, not content) . dot line → execute · mark ☐ → ✔ · read child → for expected result ! bang line → assert condition · halt if false · surface to human ? question line → evaluate condition · follow → child matching branch → arrow line → verify output · flag deviation as !! @ at line → metadata · use for context · do not execute | pipe line → resource/tool required · check availability before parent . ⟶ State management . maintain: last completed ✔ step + ##anchor . on resumption: find last ✔ · continue from next ☐ . on unhandled state: surface ? to human operator · do not proceed ! never skip !! bang lines — they are assertions, not suggestions !! → result: deterministic execution with structured human escalation points

SOP templates by domain

Engineering — incident response skeleton

SOP-INC-001 · Incident Response (skeleton)
INCIDENT: SOP-INC-001 — Incident Response @ owner: incident commander (IC) @ trigger: PagerDuty P1/P2 · or manual declaration @ sla: IC assigned < 5 min · comms < 15 min · resolution or escalation < RTO ! declare IC immediately — no action without IC assigned !! ! do not assume scope — blast radius unknown until §assess !! ⟶ T0 · Triage (0–5 min) . claim IC role in #incidents ☐ . open incident bridge: Zoom / Meet ☐ . post initial status to #incidents ☐ * template: "🔴 INCIDENT · [service] · IC: @you · investigating" ⟶ T1 · Assess (5–15 min) . identify: what is broken · who is affected · since when ☐ . assign: investigation lead · comms lead ☐ ? is the cause known? → yes: proceed to §mitigate → no: hypothesis-driven investigation · timebox 10 min per hypothesis // ##mitigate Mitigation . apply fastest safe mitigation (rollback / feature flag / scale) ☐ → customer impact reducing: confirmed in metrics . update status page ☐ // ##close Closure . confirm: all metrics normal · no residual customer impact ☐ . post all-clear to #incidents + status page ☐ . open post-mortem ticket → assign · due: 48h ☐ → use SOP-ENG-005 (Post-Mortem)

Medical / clinical — procedure safety skeleton

SOP-CLIN-014 · Pre-procedure checklist (WHO pattern, CLN)
TASK: SOP-CLIN-014 — Pre-procedure Safety Checklist @ owner: lead surgeon + anaesthesiologist + scrub nurse @ trigger: before skin incision · all three present required @ authority: WHO Surgical Safety Checklist, 2009 · adapted ⟶ Sign In (patient arrives in theatre) ! patient confirmed own identity · procedure · site !! ! site marked (if applicable) !! ! anaesthesia safety check complete !! ! pulse oximeter on patient and functioning !! ? known allergy? → yes: documented · team briefed · antagonist available → no: proceed ? aspiration risk / difficult airway? → yes: airway equipment & specialist present → no: proceed ⟶ Time Out (before incision — all pause) . confirm: all team members introduce name and role ☐ . confirm aloud: patient name · procedure · incision site ☐ ! anticipated critical events reviewed by each team member !! * surgeon: critical steps · duration · blood loss * anaesthesia: concerns * nursing: sterility confirmed · equipment issues ! prophylactic antibiotics given within last 60 min !! → team confirms: safe to proceed

SOP maintenance with CLN

SOPs decay. The most dangerous SOP is one that was accurate when written and has since been silently invalidated by a system change, a staffing change, or a learned lesson from an incident. CLN provides structural hooks for maintenance that prose SOPs lack.

SOP maintenance hooks — convention
@ version: 2.3 @ reviewed: 2026-02-15 · next: 2026-08-15 @ review-owner: backend-lead @ change-log: »[changelog]##changelog // ##changelog @ v2.3 · 2026-02-15 · added: §rollback NMEA timeout handling @ v2.2 · 2025-10-01 · updated: Phase 3 verify window 3min→5min (post-mortem INC-0047) @ v2.1 · 2025-06-12 · added: ✗ do not deploy :latest constraint // ##review-checklist SOP review criteria (for maintainer) ? does every . step still reflect current tooling versions? ☐ ? do all ## anchors in ? branches still exist? ☐ ? are any @owner values outdated (role changes)? ☐ ? did any incident post-mortem since last review reveal a gap? ☐ ? are all ✗ prohibitions still legally/technically accurate? ☐

Because CLN's @ metadata is structured, a simple script can scan a directory of CLN SOPs and report every document whose @next-review date has passed. No manual tracking spreadsheet required. The SOP itself carries its maintenance schedule.