← The Rails Phase 7 · Documentation Next: Phase 8 →

Home › Phase 7 · Documentation

Phase 7 · Documentation

Documentation, explained The week that decides whether the client can run this system after we leave — the idea beside the real example (expand any section for the full method), the complete worked example, and a quick reference. The core idea: docs are verified by use, not by reading.

How it works the idea beside the real example — expand any section for the full method · Example the complete Harbor artifacts · Steps the same procedure, no company, just the plugin · Reference the quick mechanics

A document that reads well and a document that works are two different things. You only find out which one you wrote by handing it to a stranger and watching them try to use it.

Phase 7 is where the documentation gets proven by use, not by reading — before the team that wrote the system walks out the door.

Every idea below is paired with the real thing — examples come from a fictional but fully worked engagement, Harbor Mutual, a regional insurer.

01

Why this phase exists at all

In a consulting engagement, the documentation is the handoff

The build is feature-complete. The system runs. And in a few weeks the people who wrote it are gone. Everything this phase produces is what the client lives with after that — so the only question worth asking is whether someone who isn't us can understand, run, and operate it from the documents alone.

The idea

This isn't hygiene and it isn't "write the docs at the end." Most of the record already exists — specs stayed current as the code changed, decisions were signed when they were made. Phase 7 consolidates what's there, checks it against the system as built, closes the open decisions, writes the operational manual — and then proves all of it.

The proof is the whole point. A document nobody has executed is a promise, not a fact.

At Harbor Mutual

Build closed feature-complete: 44 features merged, the system running in Harbor's dev and test environments, the claim-decision clock instrumented. One question remained for the week:

The only thing Phase 7 had to answer
"Can Harbor understand, run, and operate this system without us in the room?"

After this week the pod leaves. Whatever the docs don't say, Harbor's on-call engineer won't know — at 3 a.m., alone.

Treat it as "just docs" and…

It stays "just docs" right up until the client's on-call engineer is alone with the system at 3 a.m. In a consulting engagement, this phase is the product the client keeps.

Go deeper — the full method

Build is feature-complete; the gated phases resume. Phase 7 exists to answer one question: can someone who isn't us understand, run, and operate this system from its documentation alone? In a consulting engagement that question is not hygiene — it is the handoff. Everything this phase produces is what the client's team lives with after we leave.

This method generates most of its documentation as it goes: specs stay current by construction (the spec changes in the same PR as the behavior), ADRs were signed when decisions were made, and the harness is versioned in the repo. So Phase 7 is not "write the docs at the end." It is: consolidate what exists, verify it against the system as built, close the decision debt, write the operational docs — and then prove all of it by use, not by reading.

New features, deployment to production, and monitoring configuration are out of scope — they belong to the Build loop (now closed), Phase 8, and Phase 9. Defects found by documenting — an unintentional drift, a broken setup step — are in scope and ride the build loop as specs before the phase can close.

Treat the phase as a formality and…

It's "just docs" until the client's on-call engineer is alone with the system. In a consulting engagement, this phase is the product the client keeps.

02

The rule that governs everything

Claude drafts from the code; humans verify by use

The same spine runs through every phase: the AI does the reading, the diffing, and the first drafts; people make every decision and carry the accountability. Phase 7 has its own sharp edge — the AI wrote most of the system, so now it drafts most of the record of it, but it can never declare that record true.

The idea
  • Claude drafts the README from a fresh checkout, diffs every endpoint against the signed contracts, sweeps the build history for decisions nobody wrote down, and drafts the operations manual from the real pipeline.
  • People decide whether a difference was a choice or a defect, sign each decision, and — the part that matters — verify by use.

Why so strict? Reading your own output back is the author grading the author. The AI can't prove its own docs any more than it can review its own code.

At Harbor Mutual

Claude drafted the README, the API docs, and the runbook procedures. But none of those counted as done until a human used them. The phase belonged to Nadia Brooks, the Quality Engineer, whose job was to define what "verified" meant — and to make sure the people doing the verifying were not the pod.

The human rule of the phase
"Claude drafts from the code and the specs; humans verify by use."
Go deeper — the full method

Claude wrote most of the system; now it drafts most of the record of it. The human rule of the phase: Claude drafts from the code and the specs; humans verify by use.

  • Drafts the README and user-facing docs from the repo as it actually is, including setup against a fresh checkout — then gets corrected by what the cold run finds.
  • Generates the API documentation by diffing, not transcribing. Every endpoint is read from the implementation and compared against the Phase 2 contracts. Each drift gets a what, a when, and a why — or a defect flag. Transcribing the code would faithfully document the bugs; the diff is what finds them.
  • Sweeps the Build history for undocumented decisions. A read-only pass over the merge history and spec library, looking for the choices that never got an ADR: a dependency added, a pattern changed, an alternative rejected in a PR thread. Each finding becomes a drafted ADR for humans to sign or strike.
  • Drafts the RUNBOOK procedures from the real pipeline and infrastructure — then gets corrected by the ops walk-through.

What Claude never does: declare a document verified, decide whether a drift was intentional, or sign an ADR. Reading its own output back is not verification — that is the author grading the author, and the rule survives the Build loop intact.

03

What the week must answer

Four questions — and deliberately nothing else

Phase 7 isn't a place to add features, deploy to production, or wire up monitoring — each of those has its own home. Everything this week produces exists to answer exactly four questions.

The idea — the four questions
  1. Is the written system the built system? The API docs get diffed against the signed contracts; every difference is explained or fixed.
  2. Can a stranger run it? Proven by a newcomer doing a setup from scratch.
  3. Can a stranger operate it at 3 a.m.? Proven by an ops engineer walking real procedures in a real environment.
  4. Is the decision record complete? Every significant choice from the build has a written record — nothing lives only in someone's head.
At Harbor Mutual — the answers in motion
  1. The endpoint diff produced a catalog of exactly two differences — one a deliberate choice, one a defect.
  2. Ines Roy, a Harbor engineer hired three weeks earlier, ran the README on a clean machine.
  3. Tom Reilly, Harbor's platform engineer, executed a deploy, a rollback, and a simulated failure from the runbook.
  4. The history sweep found two decisions living in PR threads and one person's memory; both became signed records.
The temptation to resist

It feels efficient to start prepping the production deploy now, or to sketch the alerts. Don't. The runbook can point at things that don't exist yet — it must not invent them. Documenting a topology that isn't built is documenting fiction.

Go deeper — the full method

Phase 7 answers four questions, and nothing else:

  1. Is the written system the built system? (API docs diffed against the Phase 2 contracts, every drift explained or fixed; specs spot-audited against behavior)
  2. Can a stranger run it? (the README, proven by a cold checkout)
  3. Can a stranger operate it at 3 a.m.? (the RUNBOOK, proven by a cold walk-through of real procedures in a real environment)
  4. Is the decision record complete? (every significant Build-era decision has an ADR; nothing lives only in someone's head)

New features, deployment to production, and monitoring configuration are out of scope — they belong to the Build loop (now closed), Phase 8, and Phase 9. Defects found by documenting — an unintentional drift, a broken setup step — are in scope and ride the build loop as specs before the phase can close.

The temptation to resist

It feels efficient to start prepping the production deploy now, or to sketch the alerts. Don't. The runbook can point at things that don't exist yet — it must not invent them. Documenting a topology that isn't built is documenting fiction.

04

The technique that earns the phase

Diff the docs against the code — never transcribe

There are two easy, wrong ways to write API documentation. Copy the old contracts, and the docs describe a plan the system may have outgrown. Copy the code, and the docs faithfully describe every bug as if it were a feature. The honest way is to read both and compare them.

The idea

Every endpoint gets read from the implementation and held up against what it was promised to do. Each gap is a drift — and each drift gets a human label:

  • Intentional — somebody chose this during the build. Fine, but the why gets written down and the contract updated.
  • Unintentional — nobody decided this; it's a defect. It goes through the same fix-and-review loop as any other bug, before the phase can close.

The diff is what makes drift visible. Transcribing either side hides it.

At Harbor Mutual

Fourteen weeks of build, and the diff surfaced just two differences — the receipt for keeping specs current the whole way. One of each kind:

Intentional — a choice, now documented
The degraded "pending verification" response also carries the replica's last-refresh timestamp — added so adjusters could judge how stale it was. Approved at the time; the why is now in the contract.
Unintentional — a defect, fixed in-week
Claims-search returned a bare 500 with an empty body on a replica timeout, bypassing the standard error format. No decision behind it. Fixed through the loop, merged, deployed.
Why two drifts is good news

A short catalog after a long build is the discipline showing: behavior and its contract changed together all along, so the system mostly is the contract. A long catalog is a build-quality finding, not a documentation chore.

Go deeper — the full method

Two drafting streams run at once on day 2, because they touch nothing shared: one drafts the README and user-facing docs from the repo; the other reads every endpoint implementation and diffs it against the Phase 2 API contracts.

The diff produces the drift catalog: every difference between the contracts and the built system, each labeled by a human — intentional (the decision and its why get documented, the contract updated) or unintentional (a defect spec, into the loop, fixed before the phase closes). One row per drift: what the contract said, what the system does, the label, and the resolution. The catalog is reviewed with the client's lead engineer — the contracts are theirs after close.

Documenting the plan, not the build (transcribing the contracts) leaves the drift undetected and the docs lie from day one. Transcribing the code, bugs and all, faithfully documents the defects as features. The diff against the signed contracts is the only thing that makes drift visible — diff, never transcribe.

Why a short catalog is good news

Specs changed in the same PR as behavior all through Build, so the contract diff finds almost nothing — and what it finds, it finds before deployment instead of after. A long catalog is a Build-quality finding, not a documentation chore.

05

The one idea this phase is built around

Prove the README by handing it to someone who has never seen the repo

A senior engineer can read a setup guide, nod, and approve it — and still be wrong, because they fill every gap with what they already know. The only honest test is to give the document to someone with no prior knowledge and watch them follow it, word for word, without help.

The idea — the cold checkout

A person who has never touched the system follows the README exactly, on a clean machine, while the team watches in silence. Every place they stall — every assumed tool, every "wait, what's my…", every step they can't complete without asking — is a documentation defect, logged on the spot.

The defects get fixed the same day, and then the same person runs it again from step one, end to end. A partial re-run that starts at the broken step proves nothing about the steps above it.

"They managed with a little help" is a fail. The help is exactly the thing the client won't have after close.

At Harbor Mutual

Ines Roy — three weeks at Harbor, never opened the repo — was the week's most valuable contributor, precisely because the README is for her. She started at 9:00 with the pod silent.

Where she stalled — step 4
The local-secrets bootstrap assumed a vault read permission that new Harbor engineers don't have by default. Nobody helped. The stall was the data.
The fix, then the clean re-run
A bootstrap script plus a documented access-request path (with a named approver) merged before lunch. The 11:30 re-run was clean, end-to-end, forty minutes.

The README failing on a new hire's permissions in week one of the close — instead of month one of ownership — is the phase doing its job.

The way this test gets quietly broken

Someone leans over the verifier's shoulder: "oh, you just need to…". The run is now void. The stalls are the data; helping erases the data.

Go deeper — the full method

On day 5, a client engineer who has never opened the repo follows the README exactly, on a clean machine (a fresh OS account or VM with none of the project's toolchain pre-installed — the verifier installs everything the README tells them to, and nothing it doesn't), while the pod watches without helping.

Every stall, every assumed tool, every "wait, what's my…" is a documentation defect, fixed the same day and re-run. A stall is any step the verifier cannot complete as written without information from outside the document — having to ask, guess, or go searching counts; a typo they can read past does not. The QE observes and logs each stall as it happens: the step number, what was missing, and what the verifier did instead. That log is the doc-defect list.

The re-run is the same verifier, from step one, end to end — a partial run that starts at the failed step proves nothing about the fixes upstream, and the verifier is still cold for every step they never reached. "They got through it with a little help" never counts as a pass.

The helpful cold run

Someone leans over the verifier's shoulder: "oh, you just need to…" The run is now void. Stalls are the data; helping erases the data. The pod stays silent.

06

Writing for the worst moment

The operations manual is written for someone exhausted, stressed, and new

The runbook's reader isn't a calm engineer at their desk. It's whoever is on call when something breaks — possibly seeing the system for the first time, mid-incident, at 3 a.m. Every procedure is written for that reader, or it isn't written at all.

The idea

Every procedure is numbered steps, exact copy-pasteable commands, an observable check after each one ("you should now see…"), and a recovery path if a step fails. The failure scenarios aren't imagined — they come from what the engagement actually learned: the constraints, the designed-in degradations, the near-misses from the build.

"See the wiki" and "ask the team" are banned strings. After close, there is no wiki to trust and no team to ask. If it isn't in the runbook, it doesn't exist.

At Harbor Mutual

Five failure scenarios, every one earned during the engagement — the nightly data-replica refresh window, a failed sync, a storm-surge queue (sized from a real 2024 catastrophe event), an AI-accuracy regression, and a bad deploy. The first scenario opens with the question a 3 a.m. responder actually needs:

Failure scenario 1 — the first branch
"First question — what time is it? 02:00–04:30 Eastern: this is the replica's nightly refresh window. EXPECTED. Do nothing. Any other time: continue to step 1."

"See the wiki" and "ask the team" appear zero times. Each scenario also names the alert that should catch it — so when monitoring is configured later, the runbook and the alerts describe the same failures.

Go deeper — the full method

The reader of a runbook is exhausted, stressed, and possibly seeing the system for the first time, mid-incident. Every procedure is written for that reader: numbered steps, exact copy-pasteable commands, an observable check after each step ("you should now see…"), and a recovery path if the step fails.

The failure scenarios come from what the engagement actually learned: the constraints from Phase 0, the degradation behaviors designed in Phase 2, the incidents and near-misses from Build. Each scenario notes what Phase 9's monitoring should alert on — the runbook and the alerts must end up describing the same failures.

"See the wiki" and "ask the team" are banned strings. After close, there is no team to ask — every pointer to knowledge that lives outside the repo is a 3 a.m. failure deferred. Write it down or it doesn't exist.

07

Collecting the debt before the debtors leave

Sweep the build history for decisions nobody wrote down

During a long build, real decisions get made in passing — a dependency added, a pattern changed, an alternative rejected in a review thread. Each one that never got written down is tribal knowledge. And at close, the tribe leaves the building.

The idea

Claude does a read-only pass over the merge history and the spec library, looking for the hard-to-undo choices that never got a written decision record. Each candidate becomes a drafted record — context, options, decision, consequences — for humans to sign or strike.

This is debt collection, done while the people who made the choices are still in the room to confirm them. Anything found to be mere implementation detail is struck — and the fact that it was struck is itself recorded.

At Harbor Mutual

The sweep surfaced four candidates; the humans triaged them to two real ones:

The surge-queue retry policy — chosen after a near-miss in the first hardening pass, lived in a PR thread until today.
The claim-document retention tiering — a storage choice made with Harbor's data lead in a review, irreversible after go-live, written down nowhere.

Both got context, options, consequences — and signatures from the people who'll live with them. The other two candidates were struck as implementation detail, recorded as struck. No decisions left undocumented.

What happens if you skip it

The choices that live only in PR threads and pod memory walk out the door with the pod. Six months later the client hits one, asks "why is it built this way?", and there's no one left to answer.

Go deeper — the full method

On day 4, Claude's read-only sweep of the Build-era history surfaces candidate undocumented decisions. Humans triage — the Setup Owner with the client's lead engineer: each real one becomes an ADR — context, options, decision, consequences — co-signed by the client's lead engineer like every ADR before it. Open ADRs get closed as accepted or superseded.

This is debt collection. An unwritten decision is tribal knowledge, and at close, the tribe leaves. Anything found to be mere implementation detail is struck — and the fact that it was struck is itself recorded.

If the sweep dredges up a disagreement — a Build-era choice the client's engineer would not have signed — that is better surfaced now, in a room, than discovered after close. It gets an ADR with the disagreement recorded, or a re-opened decision, explicitly.

ADR debt walking out the door

Build-era decisions that live in PR threads and pod memory walk out with the pod at close. The sweep and the signatures are the collection mechanism — do it while they're here.

08

How a phase actually ends

A gate, not a calendar — and the verification is the gate

The default week is five days, but the phase doesn't close because five days passed. It closes when a specific list is true and a named human on each side signs to advance. The teeth on that list are the cold runs — the things proven by use, not by reading.

The idea

Automated checks confirm the mechanical parts; people own the judgment. Gates report; humans decide. And because the gate is a billing milestone, an unmet teeth item isn't something the pod quietly absorbs — the phase doesn't close until it's true.

If the client can't free a genuinely-new verifier, you slip the gate rather than verify by reading — and you say so at steering. The verification isn't a step in the phase; it is the phase.

At Harbor Mutual

Both cold runs passed — Ines on the README after her clean re-run, Tom on the runbook after one rewrite (a scale-up step had assumed a subscription role the pod held and Harbor didn't). The gate passed; the sponsor signed at steering with one honest line on the record:

Production topology and alert thresholds are documented as pointers to the next phases — not as content, because they don't exist yet. Billing milestone five. The engagement advanced to Deployment.

The full checklist — tick it:

  • A client engineer new to the repo completed the README cold checkout exactly as written — observed, unassisted, on a clean machine
  • The client's ops engineer executed a deploy, a rollback, and a failure scenario from the RUNBOOK, cold, with their own permissions
  • The API docs match the implementation; the drift catalog is empty, or every open item has an owner and a next-phase decision
  • No decisions left undocumented — the sweep ran and every significant build choice is recorded and co-signed
  • The spec-library sample audit passed, or its mismatches became defects, now fixed
  • Defects found by the cold runs are fixed and the failed run was re-run clean — "managed with a little help" is a fail
  • The next-phase handoff exists: inventory, honest gaps, the deployment checklist, decision status
  • A named human on each side has approved the move to the next phase
Go deeper — the full method

The default calendar is 5 business days. The first half drafts and diffs; the second half verifies by use and fixes what the verification finds. It stretches when the drift catalog is long or a cold run fails badly — both of which are the phase doing its job.

Phase 7 closes when all of these are true, verified at the gate:

  • A client engineer new to the repo completed the README cold checkout exactly as written — observed, unassisted, on a clean machine (verification teeth)
  • The client's ops engineer executed a deploy, a rollback, and at least one failure scenario from the RUNBOOK, cold, in the dev environment, with their own permissions (verification teeth)
  • API documentation matches the implementation; the drift catalog is empty or every open item has an owner and an explicit Phase 8 blocker decision.
  • No open ADRs; the decision sweep ran and every significant Build-era decision is recorded and co-signed.
  • The spec library sample audit passed (or its mismatches became defect specs, now merged).
  • Doc defects found by the cold runs are fixed and the failed run was re-run clean — "they managed with a little help" is a fail.
  • The Phase 8 handoff exists: inventory, gaps, deployment checklist, ADR status.
  • A named human on each side approved the advance — gates report, humans decide.

The bar is exact: a failed cold run is fixed and re-run clean, by the same verifier, from step one. If the client can't free the verifiers, slip the gate rather than verify by reading — and say so at steering. Because the gate is a billing milestone, an unmet teeth item is the client's problem to unblock, not the pod's to absorb.

09

Now watch the whole thing happen

The week, end to end

You've got the ideas; here's the actual rhythm at Harbor. The first half drafts and diffs; the second half verifies by use and fixes what the verification finds. The two streams — understanding the system and proving the docs — converge on Friday's cold runs. Step through it.

Day 1 · scope & audit

Decide who reads what, then trust-but-verify the specs

With the client in the room: who reads each document (their engineers, their ops, their users), what already exists and is current, what must be created. Then a sample of specs gets checked against live behavior — the pass that proves the specs really did stay current all through the build.

Day 2 · parallel drafts

The README and the contract diff, at the same time

Two drafting streams run at once because they share nothing: one drafts the README and user-facing docs from the repo as it actually is; the other reads every endpoint and diffs it against the signed contracts. The diff produces the drift catalog — reviewed with the client's lead engineer, since the contracts are theirs after close.

Day 3 · the RUNBOOK

Write for 3 a.m.

Every procedure as numbered steps, exact commands, an observable check, a recovery path. The failure scenarios come from what the engagement learned, not from a template's imagination. Each scenario names the alert that should catch it. "See the wiki" and "ask the team" are banned — after close, there's nobody to ask.

Day 4 · the decision sweep

Collect the decision debt before the debtors leave

A read-only sweep of the build history surfaces choices that never got a written record. Humans triage each candidate: the real ones become signed decision records, co-signed by the client's lead engineer; the rest are struck as implementation detail. Any defect the documenting surfaced rides the fix loop the same day.

Day 5 · verify by use, then the gate

The cold runs, then a signature

A new engineer follows the README on a clean machine while the pod stays silent — every stall fixed and re-run. The ops engineer walks real procedures in the real environment with their own permissions. Then the automated gate, the next-phase handoff, and steering: the sign-off, the billing milestone, advance to Deployment.

1 / 5
Go deeper — the full method

The default calendar is 5 business days. The first half drafts and diffs; the second half verifies by use and fixes what the verification finds.

Day 1 — scope, inventory, and audiences. The documentation scope gets decided with the client before anything is written: who reads each document (their engineers, their ops, their users), what already exists and is current (the spec library, the ADR registry, the harness docs), what must be created (README, API docs, RUNBOOK), and any client documentation standards the deliverables must follow. The spec library gets a sample audit: the QE picks five to ten specs, weighted toward HIGH-risk and recently changed, and executes each spec's acceptance checks by hand against dev — the trust-but-verify pass that proves the construction held.

Day 2 — parallel drafts: the README and the contract diff. Two drafting streams run at once, because they touch nothing shared: one drafts the README and user-facing docs from the repo; the other reads every endpoint implementation and diffs it against the Phase 2 API contracts. The diff produces the drift catalog, reviewed with the client's lead engineer — the contracts are theirs after close.

Day 3 — the RUNBOOK, written for 3 a.m. Every procedure for that reader: numbered steps, exact copy-pasteable commands, an observable check after each step, a recovery path. The failure scenarios come from the engagement's own history; each notes what Phase 9's monitoring should alert on. "See the wiki" and "ask the team" are banned strings.

Day 4 — the decision sweep. Claude's read-only sweep surfaces candidate undocumented decisions. Humans triage: each real one becomes an ADR, co-signed by the client's lead engineer; open ADRs get closed as accepted or superseded. Any defect the documenting surfaced rides the fix loop.

Day 5 — verified by use, then the gate. The cold checkout (a client engineer who has never opened the repo, clean machine, pod silent) and the cold walk-through (the ops engineer running real RUNBOOK procedures in dev with their own permissions). The QE stages the failure scenario in dev ahead of time and hands the ops engineer only the symptom. Defects fixed and re-run clean. Then the automated gate check, the Phase 8 handoff (inventory, honest gaps, the deployment checklist, ADR status), and steering: the sign-off, the billing milestone, advance to Deployment.

When the week stretches

A long drift catalog is a Build-quality finding, not a documentation chore — the phase holds until each open item has an owner and a Phase 8 blocker decision. A cold checkout that fails early and often is the test working; budget a re-run. The client can't free the verifiers → the verification is the phase, so slip the gate rather than verify by reading.

10

How it goes wrong

The failure modes, and the defense against each

Every one of these has happened to someone. Knowing them by name is half the defense — and Harbor's structure caught one of them in the act.

The trapWhat it looks likeThe defenseAt Harbor
Verified by readingSomeone senior reads the README, nods, approves itReading checks prose; only use checks truth. The cold run is the phase — protect it.Ines ran it cold; step 4 failed under observation
The helpful cold run"Oh, you just need to…" leaned over the verifier's shoulderStalls are the data; helping erases the data. The pod stays silent.Pod silent; the stall was logged, not solved
Documenting the planAPI docs transcribed from the old contracts, never checked against the codeDiff, never transcribe. The contract diff is what finds drift.Diff caught both drifts before deployment
Transcribing the codeDocs generated from the implementation, bugs documented as featuresDiff against the signed contracts; that's what makes a defect visible.The bare-500 defect surfaced and got fixed
"See the wiki"Pointers to knowledge that lives outside the repoThe 3 a.m. reader has nobody to ask. Write it down or it doesn't exist.Banned strings appeared zero times
Decision debt walking outBuild-era choices that live only in PR threads and memoryThe sweep plus signatures is the collection mechanism — do it while they're here.Two records signed; two struck on purpose
The documentation forkA shiny new "system specification" duplicating the specsTwo sources of truth means one starts lying. Consolidate and point.No fork — the specs stayed the truth
Go deeper — the full method
  • Verified by reading. Someone senior reads the README, nods, approves. Reading checks prose; only use checks truth. The cold run is the phase — protect it.
  • Documenting the plan, not the build. API docs transcribed from the Phase 2 contracts instead of diffed against the code. The drift goes undetected and the docs lie from day one. Diff, never transcribe.
  • Transcribing the code, bugs and all. Docs generated from the implementation with no contract comparison faithfully document defects as features. The diff against the signed contracts is what makes drift visible.
  • "See the wiki." Every pointer to knowledge outside the repo is a 3 a.m. failure deferred. The runbook reader has nobody to ask — write it down or it doesn't exist.
  • The helpful cold run. Someone leans over the verifier: "oh, you just need to…" The run is now void. Stalls are the data; helping erases the data.
  • ADR debt walking out the door. Build-era decisions that live in PR threads and pod memory. At close, that memory leaves the building. The sweep and the signatures are the collection mechanism.
  • The documentation fork. A shiny new "system specification" duplicating what the specs already say. Two sources of truth means one is lying within a quarter. Consolidate and point; don't fork.
  • Treating the phase as a formality. It's "just docs" until the client's on-call engineer is alone with the system. In a consulting engagement, this phase is the product the client keeps.

When Phase 7 is done

The proof is the deliverable

Documentation doesn't close because the documents read well. It closes because a stranger ran the system from them — a newcomer set it up cold, an ops engineer operated it cold, every difference between the docs and the code is explained or fixed, and every decision is written down and signed. That's a handoff the client can actually live with. Where to go next:

01

Before a word is written, the Build loop hands over a running system and one file

What Phase 7 received

Harbor Mutual — a fictional regional insurer — hired a five-person pod to rebuild how property-insurance claims get reported and decided. A claim takes a median of 11.4 days from FNOL (first notice of loss) to a coverage decision; the target is 5 days or less. The Build loop is not a gated phase — it ends when a human declares the backlog feature-complete. That declaration came Friday 2026-07-10: 44 specs merged since Foundation, both hardening passes done, the system running in Harbor's dev and test environments. Documentation does not start from a blank page — it starts from the system as built and the record already on disk.

Inherited from the Build loop — the feature-complete declaration's package phase7-handoff.md specs/ — 44 merged api-contracts.md — Phase 2 adr-registry.md — ADR-001…011 the running dev & test system
The one question — and what is already true by construction

Everything this week produces is what Harbor lives with after the pod leaves. So the week has exactly one question: can Harbor understand, run, and operate this system without us in the room?

Most of the record already exists. Specs stayed current in the same PR as the behavior; ADRs were signed when the decisions were made; the harness is versioned in the repo. Phase 7 is not "write the docs at the end" — it is consolidate, diff against the system as built, close the decision debt, write the operations manual, and then prove all of it by use.

The only thing Phase 7 had to answer
"Can Harbor understand, run, and operate this system without us in the room?"
The one new face — and why she matters

One person joins the story: Ines Roy, a Harbor engineer hired three weeks ago, who has never opened the repo. That is exactly why she was asked — she is this week's most valuable contributor, because the README is for her.

This is Nadia Brooks's phase. The Quality Engineer owns what "verified" means here, and makes sure the people doing the verifying are not the pod.

The system, in one line: portal/phone/email FNOL intake → a buffered claim queue → coverage verification against PolicyOne's nightly snapshot replica → fast-path recommendations for simple claims → acknowledgment dispatch. Claims live in a relational model plus an append-only event log.

Our pod

Maya ChenPod Lead — owns the drift triage and the Phase 8 handoff
Rob FeldSetup Owner — owns the RUNBOOK's truth; co-signs the swept ADRs
Jonah KimOrchestrator / Checker — drives the drafting agents; fixes doc defects through the loop
Sara WhitfieldOrchestrator / Checker — runs the contract diff
Nadia BrooksQuality Engineer — this is her phase; owns what "verified" means

Harbor Mutual

Karen VossVP Claims Operations — sponsor; approves the advance
Wes CarterLead engineer — reviews the drift catalog, co-signs the ADRs; inherits the decision record
Tom ReillyPlatform engineer — runs the RUNBOOK cold walk-through; inherits operations
Ines RoyNew engineer — the cold README verifier, three weeks in
Luis OrtegaProduct owner — confirms the user-facing docs
Dan KowalskiIT security — the access boundary behind the cold checkout's step 4
The ID codes, decoded

Every artifact in this engagement carries a stable identifier, so a decision made in week two can still be traced in month nine. The ones that surface this week:

PrefixMeansBorn inExample here
ADR-NNNAn architecture decision record — a signed choicePhase 2, or swept hereADR-001–011 (current); ADR-012, ADR-013 (found by the sweep)
REQ-NNNA functional requirementPhase 1REQ-014 same-business-day coverage status
Q-NNAn open question with an owner and a due dateanyQ-18 the 2024 surge load-test dataset (feeds the RUNBOOK scale steps)
NNNN specA Build-loop spec — one change, ridden through the loopBuild0045, the drift-defect fix that ran the loop this week
DOC-NNNA client document taken in at intakePhase 0the source corpus the specs still trace back to

The plugin's Phase 7 begins by reading phase7-handoff.md and diffing every endpoint against Phase 2's api-contracts.md. A drift with no label at the end of the week is a gate failure — that is the thread tying the Build loop's output to Phase 7's.

02

The machine's steps, the humans' five days, braided

The procedure, step by step

Phase 7 is a short workflow in claude-code-sdlc and five working days in this standard. The first half drafts and diffs; the second half verifies by use and fixes what the verification finds. Below, they're braided: what the tool runs, what the humans do that the tool cannot, and the file each day leaves behind. Step through it.

Legend a command does it — and writes the file a person does it — and it is recorded a person does it — and nothing records it
Day 1 — Mon 7/13 · plugin Step 0 opens

Scope the docs with the client; then trust-but-verify the specs

The plugin's Step 0 is a blocking human gate: before writing anything, Claude asks who reads each document, what already exists, what must be created, and which client standards apply. Then the human work no command performs — the Quality Engineer samples specs and executes their acceptance checks by hand against dev, the pass that proves the specs really did stay current all through Build.

Tooling /sdlc the Phase 7 scoping HITL gate human decision
Out documentation scope, decided with the client — not yet on disk spec-library sample audit — no plugin step runs it; no file records it
The gap you should know about

The standard makes the spec-library sample audit a Phase 7 deliverable and a gate line ("the spec library sample audit passed"). No step in claude-code-sdlc performs it, and no artifact records it. It happens because the QE runs it — and its receipt is a memory.

At Harbor

Scope session with Wes and Tom: three audiences (Harbor engineers, ops, adjusters' supervisors), four documents to create (README, API docs, RUNBOOK, intake-supervisor user guide), and one decision — Harbor has no documentation standard, so ours becomes theirs. Current by construction: 44 specs, ADR-001–011, the harness docs. Nadia samples eight specs against live behavior in dev — eight match.

Day 2 — Tue 7/14 · plugin Steps 1–2 · two streams at once

The README and the contract diff, in parallel

Two drafting agents spawn in a single message because they share nothing: one drafts the README and user-facing docs from the repo as it actually is; the other reads every endpoint and diffs it against the Phase 2 contracts. The diff — never a transcription — produces the drift catalog, reviewed with the client's lead engineer, because the contracts are theirs after close.

Tooling /sdlc doc-updater + backend-architect (parallel)
Out README.md api-docs.md drift-catalog.md — optional in the registry; the gate never checks it
At Harbor

README drafted from the repo — prerequisites, local setup, run modes, the loop in one page. The intake-supervisor user guide drafted alongside, reviewed by Luis and Dee Alvarez. The diff against the Phase 2 contracts produces a two-entry drift catalog — two differences after fourteen weeks of Build; Wes reviews it with Maya. One documented why, one defect. The full catalog is section 04.

Day 3 — Wed 7/15 · plugin Step 3

Write the operations manual for 3 a.m.

The RUNBOOK is drafted from the real pipeline and infrastructure for one reader: someone exhausted, stressed, and seeing the system for the first time, mid-incident. Every procedure is numbered steps, exact copy-pasteable commands, an observable check after each, and a recovery path. The failure scenarios come from what the engagement actually learned, not a template's imagination.

Tooling /sdlc-coach RUNBOOK template, from the real pipeline & Bicep Rob corrects — the Setup Owner owns the RUNBOOK's truth
Out RUNBOOK.md
At Harbor

Five failure scenarios, every one earned: the replica's 02:00–04:30 refresh window (a Phase 2 spike finding), a failed PolicyOne nightly sync, storm-surge queue depth (scale steps sized from the 2024 CAT profile, Q-18's dataset), an email-extraction accuracy regression, and a bad deploy. Each scenario names its Phase 9 alert. "See the wiki" and "ask the team" appear zero times. Scenario 1, verbatim, is section 06.

Day 4 — Thu 7/16 · plugin Step 4 · plus the defect fix

Sweep the build history for decisions nobody wrote down

A read-only Explore sweep reads the Build-era merge history and spec library for hard-to-undo choices that never got a written record. Each candidate becomes a drafted ADR — context, options, decision, consequences — for humans to sign or strike. Any defect the documenting surfaced rides the loop like any change, even in a docs week.

Tooling /sdlc Explore sweep /sdlc-coach ADR template spec 0045 — no plugin command; it rides the Build loop
Out — the new ADRs land under .sdlc/artifacts/02-design/adrs/ adrs/ADR-012, ADR-013 adr-registry.md — updated spec 0045 — through the loop
A stale reference to log

The plugin's sweep prompt tells Explore to "search the git history from Phase 4 onward." There is no Phase 4 — Implementation, Quality, and Testing collapsed into the continuous Build loop. The sweep should read the whole Build history; the prompt names a phase that does not exist. It's a drift, logged, not repeated here.

At Harbor

The sweep surfaces four candidates; Wes and Rob triage to two real ones. ADR-012 (surge queue retry and backoff, lived in a PR thread since a week-9 near-miss) and ADR-013 (claim-document retention tiering, made with Priti Shah in a Build review, irreversible after go-live, written down nowhere), both co-signed by Rob and Wes. The other two struck as implementation detail, recorded as struck. The drift defect — spec 0045, claims-search returning a bare 500 — rides the loop: graded, non-author checked, merged, deployed to dev.

Day 5 — Fri 7/17 · plugin Steps 5–7 · the gate

Verify by use, then the gate reports and a human decides

The teeth of the week. A client engineer who has never opened the repo follows the README on a clean machine while the pod stays silent; the ops engineer walks real RUNBOOK procedures in dev with their own permissions. Defects fixed and re-run clean. Then the automated gate runs, generates the report, and stops — advance_phase.py will not move the engagement without a named human's sign-off.

Tooling the cold runs — no plugin command; that is the point /sdlc-gate check_gates.py /visual-explainer /sdlc-phase-report /sdlc-next advance_phase.py --confirmed
Out phase8-handoff.md .sdlc/reports/phase07-report.html README cold-checkout record — the doc-defect log RUNBOOK cold walk-through record the sponsor's signature — billing milestone 5
What the gate actually checks

check_gates.py verifies that four files — README.md, api-docs.md, RUNBOOK.md, phase8-handoff.md — exist, are non-empty, and contain no placeholder text. The two cold-run conditions the registry lists as verification teeth are prose check: strings the script never executes. The human gate is real. The cold runs it should demand, the code cannot see.

At Harbor

9:00 cold checkout: Ines on a clean machine, pod silent; she stalls at step 4 (the local-secrets bootstrap assumed a Key Vault read permission new hires lack). Fix merges before lunch; the 11:30 re-run is clean, end-to-end, forty minutes. 13:00 cold walk-through: Tom executes a deploy, a rollback, and the simulated replica-window incident with his own permissions; one gap (a scale-up step named a subscription role the pod holds and Harbor doesn't), rewritten and re-walked clean. Gate passes; Karen signs at steering. Billing milestone 5; advance to Deployment.

1 / 5
03

Everything that exists on Friday and didn't on Monday

What Phase 7 produced

The documentation week's whole output, named. Blue rows are written by a command or agent and checked by the gate. Amber rows are the method's human work — required by this standard, produced by no tool, and today leaving no file behind. The amber rows here are the phase's own teeth: the cold runs that are the verification.

ArtifactWhat it actually isWritten bySigned byLives atFeeds
README.mdThe setup manual, proven against a fresh checkout: prerequisites, local setup, run modes, how to contribute. Not done until a stranger ran itdoc-updater agent, from the repoQuality Engineerrepo root — README.mdThe cold checkout; Harbor's next hire
api-docs.mdEvery current endpoint: request/response shapes, auth, the error catalog, and the changelog of drift from the Phase 2 contracts. Diffed, never transcribedbackend-architect agentSetup Owner.sdlc/artifacts/07-documentation/Phase 8; the client's engineers
drift-catalog.mdEvery difference between the signed contracts and the built system, each human-labeled intentional (with its why) or defect. One row per driftbackend-architect diff; humans labelPod Lead (with client lead engineer).sdlc/artifacts/07-documentation/The API-doc corrections; Phase 8 blockers
RUNBOOK.mdThe 3 a.m. operations manual: deployment, configuration reference, common operations, the top failure scenarios, and each one's Phase 9 alert. Proven by a cold walk-through/sdlc-coach drafts; Setup Owner correctsSetup Ownerrepo root — RUNBOOK.mdPhase 8 checklist; Phase 9 alerts
adrs/ADR-012, ADR-013
adr-registry.md
The Build-era decisions the sweep found, now written down and co-signed; the registry closed with no open ADRsClaude drafts from the Explore sweepSetup Owner + client counterpart — both.sdlc/artifacts/02-design/adrs/Close — the decision history Harbor inherits
phase8-handoff.mdDocumentation inventory, the honest gaps, the deployment checklist, and ADR status — the package Phase 8 opensClaude drafts; Pod Lead completesPod Lead.sdlc/artifacts/07-documentation/Phase 8, directly
phase07-report.html
phase07-visual.html
The gate packet and the documentation-completeness audit, self-contained. This is the document the sponsor reads before signinggenerate_phase_report.py · /visual-explainer.sdlc/reports/The manual sign-off gate
README cold-checkout recordThe doc-defect log: each stall a cold verifier hit — the step, what was missing, what they did instead — logged as it happened. "A little help" is a failQuality Engineer, observingQEno path — nothing writes itThe same-day fixes; the gate's teeth
RUNBOOK cold walk-through recordA deploy, a rollback, and one failure scenario, executed cold by the client's ops engineer with their own permissions — the gaps found and rewrittenClient ops engineer + QEQEno path — nothing writes itThe RUNBOOK rewrite; the gate's teeth
spec-library sample auditFive to ten specs, weighted to HIGH-risk and recently changed, their acceptance checks executed by hand against dev — the trust-but-verify pass that proves the construction heldQuality EngineerQEno path — no plugin step performs itThe exit gate ("spec library audit passed")
Read the amber rows again

Three of the phase's deliverables have nowhere to live — and they are the teeth. The two cold runs are the standard's verification teeth, and the plugin registry lists them as gate conditions, yet check_gates.py never executes those check: strings and no file records what the runs found. The spec-library audit has no plugin step at all. Human work is not the problem. Human work without a receipt is — and here the receipt-less work is exactly what decides whether the phase passed.

Deliberately not produced in Phase 7: documentation for things that don't exist yet (production topology is Phase 8, alert thresholds are Phase 9 — the RUNBOOK points at them, it doesn't invent them), new features of any kind (the Build loop is closed), and a separate "system specification" duplicating the spec library — two sources of truth means one starts lying.

04

The complete drift catalog — two entries after fourteen weeks of build

Diff the docs against the code — never transcribe

The diff against the Phase 2 contracts produced the drift catalog: two entries. A two-entry catalog after fourteen weeks of Build is the loop's discipline showing — contracts were carried through specs, so the system mostly is the contract. One of each kind; both resolved inside the week.

Artifact: the drift catalog (complete)

#Contract saidSystem doesLabelResolution
1 REQ-014 degraded response: coverage check returns "pending verification" when the replica is unreachable Response also carries staleness_as_of — the replica's last refresh timestamp Intentional. Added in Build week 7 so adjusters could judge how stale "pending" is; Luis approved it at triage; the why is now in the contract changelog Contract updated; API docs carry the field and the rationale
2 All endpoints return the standard error envelope { "error": "<message>" } on failure Claims-search returns a bare 500 with an empty body on replica timeout Unintentional. A timeout path added in Build week 11 bypassed the error middleware; no decision, no why — a defect Spec 0045, through the loop Thursday; fixed, graded, merged, deployed

Two entries, both resolved inside the week. The catalog is empty at the gate — and what it found, it found before deployment instead of after.

05

The stall that was a success, not an embarrassment

Prove the README by handing it to someone who has never seen the repo

Ines Roy — three weeks at Harbor, never opened the repo — followed the README on a clean machine while Nadia watched and the pod stayed silent. She stalled at step 4. The stall was the data.

9:00 — the cold checkout

The local-secrets bootstrap assumed a Key Vault read permission that new Harbor engineers don't have by default. Nobody helped her — the stall is the data.

Where she stalled — step 4
The local-secrets bootstrap assumes a Key Vault read permission new Harbor engineers don't have by default.
The fix, then the clean re-run
A bootstrap script plus a documented access-request path (Tom as the named approver) merged before lunch. The 11:30 re-run was clean, end-to-end, forty minutes.
Why the stall was the win

Step 4 failing under observation cost an hour. The same gap discovered by Harbor's next hire, alone, after close, costs a support escalation and a dent in trust. The cold run exists to buy failures early.

The README failing on a new hire's permissions in week one of the close — instead of month one of ownership — is the phase doing its job.

The verifiers were the least qualified people available — on purpose

Ines had never opened the repo; Tom ran procedures he didn't write with permissions the pod doesn't have. A README verified by its author's teammate has not been verified.

06

The 3 a.m. RUNBOOK — failure scenario one, verbatim

The operations manual is written for someone exhausted, stressed, and new

Five failure scenarios, every one earned during the engagement rather than imagined: the replica's refresh window (a Phase 2 spike finding), a failed nightly sync, storm-surge queue depth (scale steps sized from the 2024 CAT profile), an email-extraction accuracy regression, and a bad deploy. The first scenario's first branch is the question a 3 a.m. responder actually needs.

Artifact: RUNBOOK excerpt — failure scenario 1

RUNBOOK — Failure scenario 1: coverage checks degraded ("pending verification")
## Failure scenario 1: coverage checks degraded ("pending verification") Symptom: portal and adjuster screens show "pending verification" on new claims; the verification-service dashboard shows replica read failures. First question — what time is it? - 02:00-04:30 Eastern: this is the replica's nightly refresh window. EXPECTED. Do nothing. Intake is not blocked (claims queue normally and verify after the window). Confirm recovery after 04:30 at step 4. - Any other time: continue to step 1. 1. Check replica availability: az sql db show --name policyone-replica --resource-group harbor-claims-prod ... You should see: status "Online". If not, go to scenario 2 (failed nightly sync). 2. Check the verification service's circuit state: curl -s https://<env>/api/internal/verification/health You should see: { "replica": "open" | "closed", "staleness_as_of": "<timestamp>" } 3. If the circuit is open and the replica is online, restart the verification service: az containerapp revision restart ... You should see: new revision Healthy within 2 minutes. If not, roll back the latest deploy (Common operations > Rollback). 4. Confirm recovery: claims created in the last hour move from "pending verification" to a coverage status within 10 minutes of the replica returning. Alert cross-reference: VERIFY-DEGRADED fires after 5 minutes of replica read failures outside the refresh window (configured in Phase 9).

Numbered, copy-pasteable, observable, recoverable — and the first branch is the question a 3 a.m. responder actually needs: is this the window we already know about? Each scenario ends with the alert that should catch it — Phase 9 configures those alerts, and the runbook and the alerts must describe the same failures.

07

Decision debt collected while the debtors were still in the room

Sweep the build history for decisions nobody wrote down

The Explore sweep over the Build-era merge history and spec library surfaced four candidates; Wes and Rob triaged them to two real ones. Both now have signatures from the people who'll live with them.

The two ADRs the sweep found
ADR-012 — surge queue retry and backoff policy. Chosen in Build week 9 after a near-miss during the first hardening pass; it lived in a PR thread until today. Now it has context, options, consequences — and signatures.
ADR-013 — claim-document retention tiering. A storage-lifecycle choice made with Priti Shah (Harbor's data lead) in a Build review; significant, irreversible after go-live, and previously written down nowhere.

Both co-signed by Rob and Wes, like every ADR before them. The other two candidates were struck as implementation detail, recorded as struck. No open ADRs remain.

The defect fix rode the loop

The drift defect, spec 0045 (claims-search returns a bare 500 on replica timeout instead of the standard error envelope), rode the loop like any change — graded, checked by a non-author, merged, deployed to dev — and the API docs and contract now describe one truth.

What to notice
ADR-012 lived in a PR thread; ADR-013 lived in two people's memory. Decision debt got collected while the debtors were still in the room.
08

The handoff — and the honest gaps that travel with it

What Phase 8 receives

A phase ends by handing the next one a package, not a feeling. Everything below crosses the boundary into Deployment: the docs a stranger proved, the decision record closed and co-signed, and the gaps named honestly — the things Phase 7 could not document because they do not exist yet, carried forward as pointers, never invented.

Crosses into Phase 8 README.md — cold-verified api-docs.md — diffed, one defect fixed RUNBOOK.md — cold-walked phase8-handoff.md drift-catalog.md — empty at the gate adr-registry.md — through ADR-013, none open the two cold-run records — no receipt on disk

The Phase 8 handoff (summary). Maya's, drafted Friday, completed at the gate.

  • Inventory: README (created, cold-verified), API docs (created, diffed, one defect fixed), RUNBOOK (created, cold-walked), user guide for intake supervisors (created, reviewed by Luis and Dee Alvarez), ADR registry complete through ADR-013, spec library current (audited sample 8/8).
  • Honest gaps: production topology and alert thresholds are pointers to Phases 8 and 9, not content — they don't exist yet, and the docs say so rather than pretend; the RUNBOOK's scale procedures are dev/test-proven and get their production rehearsal in Phase 8.
  • Deployment checklist: carried into Phase 8 — secrets rotation before go-live, the production Bicep promotion, the go/no-go ceremony roles.
  • ADR status: none open; ADR-012 and ADR-013 signed this week.

The open threads, carried forward under their original IDs. No numbered question is dropped; each crosses the boundary with an owner.

ThreadCarried asOwnerLands in
Production topologyA pointer in the RUNBOOK and handoff — documented as "provisioned in Phase 8", not invented nowRob Feld + Tom ReillyPhase 8
Alert thresholdsEach RUNBOOK failure scenario names the alert that should catch it; the thresholds themselves are set against real baseline dataNadia Brooks + Harbor opsPhase 9
RUNBOOK scale proceduresSized from Q-18's 2024 CAT dataset and proven in dev/test; the production rehearsal is Phase 8'sTom ReillyPhase 8

One honest line went on the record at steering: production topology and alert thresholds are documented as pointers to the next phases — not as content, because they don't exist yet. Billing milestone 5. The engagement advanced to Deployment.

You've been handed a finished system and told to run Phase 7. This page is what you actually type, in order, and what you do between the typing.

Phase 7 takes about a week. Two days of it is writing. The rest is proving the writing works by handing it to strangers — and that part needs two of the client's people booked in advance. Read this once end to end before you start.

Before you type anything

What you need first

Four things. Two of them are people, and those are the long pole — nothing in this phase closes without them.

  • A project already in Phase 7. Run /sdlc-status. If it doesn't say Phase 7 active, you're in the wrong place — this phase opens after the Build loop is declared feature-complete and phase7-handoff.md has been read.
  • The project type, checked. Open .sdlc/state.yaml and read project_type. It decides what you owe: a service or app owes the full suite including a RUNBOOK; a library or cli skips the RUNBOOK and adds a CHANGELOG; a skill skips both the RUNBOOK and the API docs. Get this wrong and you'll spend a day writing operations procedures for something that has no server.
  • A client engineer who has never opened the repo, booked. Two to three hours, on a clean machine. Not you, not anyone on the pod. This person is the whole point of the phase.
  • The client's ops engineer, booked. Three to four hours in the dev environment, using their own permissions. Hardest person to get. Book them in the first two days.
The mistake new people make

Treating this as a writing week. The writing is the easy half and Claude does most of it. The phase is the verification — and if those two client people aren't on a calendar, the phase cannot close. No command will tell you that until day five.

01

Type this — then stop and talk to the client

Orient and scope the documentation

You type /sdlc

What happens: it reads .sdlc/state.yaml, loads the Phase 7 definition, and prints the phase's steps, the required artifacts with an exists/missing mark against each, and the exit criteria. Then the phase's first step is a stop: Claude asks you who each document is for, which docs already exist and need updating versus which must be written from scratch, whether the client has documentation standards or templates you must follow, and — for a library, cli, or skill project — which artifacts are genuinely not applicable. Nothing gets written until you answer.

What you do: read phase7-handoff.md from the Build loop first, then answer with the client, not from your own head. "Who reads the RUNBOOK" has a name attached to it at the client, and that name changes how you write it.

Don't move on until: you have written down which artifacts you owe and which are N/A for this project type. Deciding an artifact is N/A after the gate has already blocked on it is how people end up arguing with the tool instead of talking to the client.

02

Nothing to type — you and the running system

Spot-check the specs against reality

You type nothing — this one is done by hand, against dev

What you do: pick five to ten specs out of specs/, weighted toward the HIGH-risk ones and the ones that changed most recently. Execute each spec's acceptance checks by hand against the running dev system. Execute, not re-read — re-reading a spec tells you the spec is self-consistent, which was never in doubt.

Why this step exists: the specs stayed current all through Build because the spec changed in the same PR as the behavior. This is the pass that proves that discipline actually held. Any mismatch you find is a defect: author it as a spec with /sdlc-spec and put it through the loop like any other change, merged before this phase can close.

Write what you did into spec-audit-record.md: which specs you sampled and why those ones, each check re-executed with its result, and every divergence you found.

You now have spec-audit-record.md — optional; the gate won't block on it
Optional does not mean skip

The gate doesn't block on this file, but the approver is asked about it at sign-off. Write it while you're doing the work. A receipt reconstructed from memory a week later is worth less than no receipt at all — it looks like evidence and isn't.

03

Type this — two drafts run at once

Draft the README, diff the API

You type /sdlc

What happens: the phase tells Claude to run two drafting streams in one message, because they touch nothing shared. One drafts README.md from the repo as it actually is, including setup instructions written against a fresh checkout. The other reads every endpoint implementation and diffs it against api-contracts.md from Phase 2, producing api-docs.md plus a note on every difference — what changed, when, and why.

What you do: guard the diff. There are two ways to get this wrong and they look opposite. Docs transcribed from the code faithfully document your bugs as features. Docs transcribed from the Phase 2 contracts document the plan, not the build. Only the comparison finds drift, so check that every endpoint entry names both sides.

The README has to carry all six of these or it isn't done: what the project is and why, prerequisites, step-by-step local setup, how to run it in dev/test/production, configuration and where it lives, and how to contribute.

You now have README.md — at the repo root, not under .sdlc/ api-docs.md
Two names in the phase file that the plugin does not ship

The Phase 7 definition spawns two agents by name, doc-updater and backend-architect, and the phase registry names /update-docs as this phase's primary skill. None of the three ship with the plugin. They are assumed to already exist in your Claude Code install. If yours doesn't have them, nothing breaks and nothing warns you — Claude just does the drafting in the main conversation. Judge the output, not the agent name in the log.

README.md and RUNBOOK.md are checked at the repo root on purpose. A copy under .sdlc/ would validate a file no stranger ever opens, and it starts drifting from the real one at the next commit.

04

Nothing to type — a decision per row

Label every drift

You type nothing — Claude found the differences; you decide what each one is

What you do: take the differences from step 3 and put them in one table, one row each: what the contract promised, what the system actually does, the label, and the resolution. There are exactly two labels. Intentional — someone made this choice, so write down the why and update the contract. Unintentional — this is a defect; author it with /sdlc-spec, put it through the loop, fix it before the phase closes.

Review the finished table with the client's lead engineer. The contracts belong to them after close, so the labels have to be theirs too.

You now have drift-catalog.md — optional; the gate won't block on it
"We'll decide later" is not a label

An unlabeled drift doesn't disappear, it just moves. It becomes the client's surprise during Phase 8, when the people who could have explained it are already gone. If a row can't be resolved this week, it needs a named owner and an explicit decision about whether it blocks deployment.

05

Only for service and app projects — otherwise skip

Write the RUNBOOK for 3 a.m.

You type /sdlc-coach

What happens: Claude drafts the operational procedures from the real pipeline and infrastructure. /sdlc-coach walks you through it conversationally instead of handing you a checklist, which helps here because most of the content is knowledge that lives in the Setup Owner's head, not in a file Claude can read.

What you do: write for one specific reader — someone exhausted, stressed, and seeing this system for the first time, mid-incident. Every procedure gets numbered steps, exact copy-pasteable commands (never "run the deploy script"), an observable check after each step so they know it worked, and a recovery path if it didn't.

The RUNBOOK has to carry all five: the deployment procedure with its pre- and post-checks; a configuration reference listing every environment variable, secret and flag with its valid values; common operations — restart, scale, database migration, rollback; the top five failure scenarios with diagnosis and resolution steps; and a cross-reference saying which Phase 9 alert maps to which failure scenario.

You now have RUNBOOK.md — at the repo root
Two banned strings

"See the wiki" and "ask the team." Every one of those is a 3 a.m. failure you've deferred onto someone who has nobody to ask. After close, there is no team. Write it down or it doesn't exist.

A library, cli or skill project skips this step entirely — there is no server to operate. The gate agrees: it only requires RUNBOOK.md for service and app.

06

Type this — then triage what it finds

Sweep for decisions nobody wrote down

You type /sdlc

What happens: the phase runs a read-only pass over the git history from the start of the Build loop, plus implementation-notes.md, looking for choices that never got written up as a decision record: an architecture change, a dependency added, a pattern chosen, an alternative rejected in a commit message. It comes back with a list of candidates and the context for each.

What you do: triage the list with the client's lead engineer. Some candidates aren't real decisions — strike those. Each real one becomes an ADR: the context, the options, the decision, the consequences, co-signed the way every ADR before it was. Then add the new entries to adr-registry.md and close every still-open ADR as either accepted or superseded, based on how the implementation actually turned out.

This is debt collection, not paperwork

A decision that lives only in a PR thread and someone's memory is tribal knowledge. At close, the tribe leaves the building. If the sweep dredges up a choice the client's engineer would not have signed, that is the phase working — record the disagreement or re-open the decision, explicitly.

07

Nothing to type — this is the step the phase exists for

The cold checkout

You type nothing — you sit behind someone else and say nothing

A client engineer who has never opened this repo follows the README exactly as written, on a clean machine, while you watch without helping. Every place they stall is a documentation defect.

What "clean machine" means: a fresh OS account or a VM with none of the project's toolchain pre-installed. They install what the README tells them to install, and nothing it doesn't. Your laptop, with six years of tools on it, cannot run this test.

What "stall" means: any step they cannot complete as written without information from outside the document. Having to ask, guess, or go searching all count. A typo they can read past does not. Log each one as it happens — the step number, what was missing, and what they did instead. That log is your defect list.

Then fix and re-run. Same day, same verifier, from step one, end to end. A partial re-run that starts at the failed step proves nothing about the fixes upstream, and the verifier is still cold for every step they never reached the first time.

Write it up in readme-verification.md: who verified it and when, the starting point (clean clone, which OS, which toolchain versions), every stall as it happened, the README change each stall produced, and whether the second cold pass got through unassisted.

You now have readme-verification.md — required for every project type
"They managed with a little help" is a fail

The moment someone leans over the verifier's shoulder and says "oh, you just need to…", the run is void. The stalls are the data; helping erases the data. It is not a pass with an asterisk — log the help as a stall, fix the README, and run it again.

If the cold run genuinely did not happen, say so in the file: a line reading WAIVED: <name> — <reason>. The gate accepts that and reports it, by name, in the record the approver signs. A missing file still blocks. The escape is from the work, not from the record — an exception nobody can see is how a gate stops being a gate.

08

Nothing to type — service and app only

The cold walk-through of the RUNBOOK

You type nothing — the client's ops engineer drives, on their own account

The client's own operations engineer executes three things from the RUNBOOK, cold, in the dev environment: a deploy, a rollback, and one failure scenario.

The load-bearing part is "their own permissions." A walk-through done with the pod's access proves the RUNBOOK works for people who will not be here next month — which is the opposite of what you need to know. Every place they lack access the RUNBOOK assumed they had is a finding, and it is much cheaper found now than during a real incident.

What you do: stage the failure scenario in dev ahead of time — induce the condition or fake its symptoms — and hand the ops engineer only the symptom. They respond from the RUNBOOK alone. The pod stays silent, same rule as the checkout. And time the rollback: how long it actually took is the number an incident cares about.

Write it up in runbook-walkthrough.md: who walked it and when, the three exercises with what happened in each, every permission gap found, the timings, and what got rewritten as a result.

You now have runbook-walkthrough.md — required for service and app

Same waiver rule as step 7: if it did not happen, the file still has to exist and say WAIVED: <name> — <reason> in plain sight. And the same substitution ban — a pod member standing in for the client's operator is not a walk-through, it's a rehearsal of your own knowledge.

09

Type this — the machine checks your work

Write the handoff, run the gate

You type /sdlc-gate

Before you type it, write phase8-handoff.md: the documentation inventory (what was updated versus created), the honest gaps and why they're gaps, the deployment checklist — the ordered list of what Phase 8 must do before go-live, drawn from the RUNBOOK's deploy and rollback procedures plus whatever this phase knowingly left open — a straight answer on whether the RUNBOOK is sufficient for an on-call engineer, and the status of every ADR.

What happens: it runs the gate checks over the phase's required artifacts. One gate confirms each required file exists; the next confirms it isn't empty and has no leftover placeholder text — TODO, TBD, PLACEHOLDER and friends. Then it renders the phase's two written exit conditions — the cold checkout and the cold walk-through — for a human to read and judge. It writes a self-contained HTML report into .sdlc/reports/ and opens it in your browser.

What you do: fix what it flags and run it again until it's clean. A leftover TODO in the handoff is the usual culprit.

Optional and worth it: /sdlc-review before the gate for a multi-perspective read of the artifacts; /sdlc-enhance to generate a plain-language companion for a non-technical sponsor; /sdlc-phase-report to regenerate the HTML at any time. The phase also asks for an interactive visual report via a /visual-explainer skill that the plugin does not ship — the phase file says "or equivalent," so if you don't have it, the gate's own report is what stakeholders review.

What the gate can and cannot check

It can confirm readme-verification.md exists and isn't a stub. It cannot confirm that anyone followed the README. The two conditions this entire phase is built around — the cold checkout and the cold walk-through — are rendered for a human to sign against; they never block. A green gate means the receipts are on file. Whether the receipts are true is on you.

The same applies to the waiver: a receipt whose only content is WAIVED: <name> — <reason> passes and is reported by name. That is deliberate — it's an exception you can see. Reaching for it because the week ran short is how the phase quietly stops being a phase.

10

Type this — last thing in the phase

Get the sign-off and advance

You type /sdlc-next

Before you type it: run the steering review with the sponsor. Walk the documentation audit, the drift story, and the deployment readiness picture. Get a named human on each side to approve the advance. This is a billing milestone — it isn't ceremonial.

What happens: it re-runs the gates, shows you the report, then stops and asks you to confirm before it moves anything. Say yes and it advances the project to Phase 8. Then it blocks a second time: it pulls every open question out of phase8-handoff.md and makes you answer or explicitly defer each one, with a proposed default for each, before any Phase 8 work begins.

What you do: answer them properly. An open question waved through here is a question someone rediscovers during a deployment window.

Phase 7 is done when state.yaml says Phase 8 a named human on each side signed the cold runs happened, and their receipts say who and when

Keep these handy

Commands you'll use constantly

Type thisWhen
/sdlc-statusAny time you're lost. Shows what phase you're in and what's missing.
/sdlcStart of every work session. Tells you what to do next.
/sdlc-coachYou're stuck and want to be walked through it conversationally instead of following a list. Most useful on the RUNBOOK.
/sdlc-specEvery time a drift or an audit mismatch turns out to be a defect. Defects ride the loop; they don't get a footnote.

Rule of thumb for the whole phase: Claude drafts from the code; humans verify by use. Reading a document you wrote and finding it good is the author grading the author. If you're short on time and something has to give, do not let it be the cold run — the cold run is the phase.

Reference · Phase 7 · Documentation

The precise mechanics — the exact roles, calendar, artifacts, cadences, and gate, including the tooling specifics the How-it-works view leaves out. The full prose method sits under each section's “Go deeper” on the How it works tab; for the complete Harbor artifacts (every ID and command), see Example.

The four questions

Phase 7 answers four questions, and nothing else. New features, production deployment, and monitoring configuration are out of scope — they belong to the (now-closed) Build loop, Phase 8, and Phase 9. Defects found by documenting are in scope and ride the build loop as specs before the phase can close.

  1. Is the written system the built system? (API docs diffed against the Phase 2 contracts, every drift explained or fixed; specs spot-audited against behavior)
  2. Can a stranger run it? (the README, proven by a cold checkout)
  3. Can a stranger operate it at 3 a.m.? (the RUNBOOK, proven by a cold walk-through of real procedures in a real environment)
  4. Is the decision record complete? (every significant Build-era decision has an ADR; nothing lives only in someone's head)

The human / AI contract for this phase

Human drivesClaude doesMandatory human stops
Humans verify by use: a new engineer runs the README cold; an ops engineer walks the RUNBOOK cold. Humans label each drift, sign each ADR, and own the decision record.Drafts the README and user-facing docs from a fresh checkout; generates API docs by diffing every endpoint against the Phase 2 contracts; sweeps Build history for undocumented decisions; drafts RUNBOOK procedures from the real pipeline.Claude never declares a document verified, decides whether a drift was intentional, or signs an ADR. Reading its own output back is not verification. Phase advance.

Who is involved

Phase 7 is the Quality Engineer's phase: the QE owns what "verified" means here, and the verification is done by people who must not be us.

Our side

PersonLoadWorkstream
Quality Engineer70–90%Owns the verification design — who does each cold run, what counts as a stall, how doc defects get triaged. Audits the spec library against behavior on a sample.
Setup Owner50–70%Owns the RUNBOOK's truth — deploy, rollback, secrets, scaling. Owns the harness documentation the client inherits.
Orchestrators40–60%Drive the drafting agents, run the contract diff, fix the doc defects the cold runs surface — through the loop, like any change.
Pod Lead30–40%Routes drift decisions (intentional or defect?) to the right owner, schedules the client verifiers' time, runs the gate and the steering.

Client side

PersonNeeded forHow much
An engineer new to the repoThe README cold checkout — deliberately someone who has never opened the project, because that is who the README is for2–3 hours
Ops / platform engineerThe RUNBOOK cold walk-through in the real dev environment: a deploy, a rollback, one simulated failure scenario — with their own permissions, not ours3–4 hours
Lead engineerReviews the drift catalog and co-signs the new ADRs — the decision record is theirs after close2–3 hours
Product OwnerConfirms any user-facing documentation matches what users actually do~1 hour
SponsorSteering at the gate: the documentation audit and the deployment readiness picture45 min

If the client cannot field a cold verifier — someone genuinely new to the repo — that is a finding about the handoff, not a scheduling nuisance. A README verified by someone who already knows the system has not been verified.

The five-day calendar

The default is 5 business days. The first half drafts and diffs; the second half verifies by use and fixes what the verification finds.

DayFocusWhat happensTooling
1Scope & auditDocumentation scope decided with the client (audiences, what exists, what to create, client standards); QE samples 5–10 specs (weighted to HIGH-risk and recently changed) against live behavior in dev/sdlc
2Parallel draftsREADME + user-facing docs drafted from the repo; every endpoint diffed against the Phase 2 contracts → the drift catalog, labeled and reviewed with the client lead engineer/sdlc (doc-updater + backend-architect agents)
3The RUNBOOKProcedures drafted from the real pipeline & infrastructure; failure scenarios drawn from the engagement's own history; each notes its Phase 9 alert; "see the wiki" / "ask the team" banned/sdlc-coach
4Decision sweepRead-only sweep of Build merge history & specs surfaces undocumented decisions; humans triage; real ones become co-signed ADRs, open ADRs closed; doc-surfaced defects ride the loop/sdlc (Explore agent), /sdlc-coach
5Verify & gateThe cold checkout and the cold walk-through, observed and unassisted; defects fixed and re-run clean; gate check; Phase 8 handoff drafted; steering sign-off — billing milestone/sdlc-gate, /visual-explainer, /sdlc-phase-report, /sdlc-next

A clean machine means a fresh OS account or VM with none of the project's toolchain pre-installed — the verifier installs only what the README tells them to. A stall is any step the verifier cannot complete as written without information from outside the document; the re-run is the same verifier, from step one, end to end.

The artifacts

ArtifactDrafted byOwned byDone means
README + user-facing docsClaude (from the repo), OrchestratorsQuality EngineerA client engineer who never saw the repo completed the cold checkout exactly as written
API documentationClaude (diff against the Phase 2 contracts)Setup OwnerEvery endpoint current with the implementation; every drift labeled intentional-with-why or fixed
The drift catalogClaude (drafts), humans (label each entry)Pod LeadEmpty, or every open item has an owner and an explicit Phase 8 blocker decision
RUNBOOKClaude (drafts), Setup Owner (corrects)Setup OwnerThe client's ops engineer executed a deploy, a rollback, and a failure scenario from it, cold, with their own permissions
ADR closeoutClaude (sweep + drafts), humans (sign)Setup OwnerNo open ADRs; every significant Build decision recorded and co-signed; superseded ones marked
Spec library auditQuality EngineerQuality EngineerThe sample matches live behavior; any mismatch became a defect spec
Phase 8 handoffClaude (drafts)Pod LeadDocumentation inventory, honest gaps, the deployment checklist, ADR status

Deliberately not produced: documentation for things that don't exist yet (production topology is Phase 8, alert definitions are Phase 9 — the RUNBOOK points at them, it doesn't invent them), and a separate "specification document" duplicating the spec library — the specs are the feature documentation, and forking that truth creates two versions where one will start lying.

The cadences

RhythmWhoWhat
Daily 15-min pod syncWhole podDraft status, drift triage, cold-run scheduling, the doc-defect queue
Drift reviewPod Lead + client lead engineerEach catalog entry labeled: intentional (document the why) or defect (into the loop)
The cold runsClient verifiers + QE observingThe README checkout and the RUNBOOK walk-through — the phase's actual verification events
Setup reviewSetup Owner + deputyContinues from Build: doc PRs and harness-doc changes merge reviewed, on the rails like everything else
SteeringSponsor + Pod LeadFalls at the gate: the documentation audit, the drift story, deployment readiness

The exit gate

Phase 7 closes when all of these are true, verified at the gate:

  • A client engineer new to the repo completed the README cold checkout exactly as written — observed, unassisted, on a clean machine (verification teeth)
  • The client's ops engineer executed a deploy, a rollback, and at least one failure scenario from the RUNBOOK, cold, in the dev environment, with their own permissions (verification teeth)
  • API documentation matches the implementation; the drift catalog is empty or every open item has an owner and an explicit Phase 8 blocker decision
  • No open ADRs; the decision sweep ran and every significant Build-era decision is recorded and co-signed
  • The spec library sample audit passed (or its mismatches became defect specs, now merged)
  • Doc defects found by the cold runs are fixed and the failed run was re-run clean — "they managed with a little help" is a fail
  • The Phase 8 handoff exists: inventory, gaps, deployment checklist, ADR status
  • A named human on each side approved the advance — gates report, humans decide

The bar is exact: "they managed with a little help" is a fail. A failed cold run is fixed and re-run clean, by the same verifier, from step one. If the client can't free the verifiers, slip the gate rather than verify by reading — and say so at steering.

What goes wrong

  • Verified by reading. Someone senior reads the README, nods, approves. Reading checks prose; only use checks truth. The cold run is the phase — protect it.
  • Documenting the plan, not the build. API docs transcribed from the Phase 2 contracts instead of diffed against the code. The drift goes undetected and the docs lie from day one. Diff, never transcribe.
  • Transcribing the code, bugs and all. Docs generated from the implementation with no contract comparison faithfully document defects as features. The diff against the signed contracts is what makes drift visible.
  • "See the wiki." Every pointer to knowledge outside the repo is a 3 a.m. failure deferred. The runbook reader has nobody to ask — write it down or it doesn't exist.
  • The helpful cold run. Someone leans over the verifier: "oh, you just need to…" The run is now void. Stalls are the data; helping erases the data.
  • ADR debt walking out the door. Build-era decisions that live in PR threads and pod memory. At close, that memory leaves the building. The sweep and the signatures are the collection mechanism.
  • The documentation fork. A shiny new "system specification" duplicating what the specs already say. Two sources of truth means one is lying within a quarter. Consolidate and point; don't fork.
  • Treating the phase as a formality. It's "just docs" until the client's on-call engineer is alone with the system. In a consulting engagement, this phase is the product the client keeps.