<!-- last-reviewed: 2026-06-01 · owner: Delivery (PMO) (Project Manager) -->
SOP-076 — Manual integrity-gate run (reconcile + km-index at each wave checkpoint)
SOP · owner: Delivery (PMO) (Project Manager). Layer: SOP/Runbook (
docs/canon.md). The interim delivery of the program’s two headline integrity gates while AR-003 leaves the cadence un-wired: the PMO runshandoff-reconcile+km-index-checkat every wave checkpoint and records the green/red number intracker.md(wave-schedule.md§9.1; master plan R6/RK-3, G-3). Operations owns the gate mechanism; this SOP documents the run, not the mechanism. ID is proposed (SOP-074…076 block); confirm with Operations (docs/sop/registry.md).
Interface Contract
- Inputs: wave checkpoint reached (full edge-set + KM index) ← from self (SOP-074) · trigger:
briefing posted - Inputs: preserved record ← from Archivist · trigger:
preservation complete - Outputs: recorded gate result (green/red number) → to all agents · trigger:
briefing posted - Outputs: approved
tracker.mdsnapshot (with the gate record) → to Archivist · trigger:artifact approved - Handoff trigger (in): a wave checkpoint is reached (before the wave’s batched push), OR a roster change lands and the affected edges must be re-run
- Handoff trigger (out): the gate’s green/red number is recorded in
tracker.mdwith date + edge-set version; a RED defect is routed to its owner - Definition of Done before handoff:
- [ ]
node scripts/handoff-reconcile.mjsrun on the current full edge-set (not stale) - [ ]
node scripts/km-index-check.mjsrun; both KM indices reconcile - [ ]
./scripts/archive-manifest.sh verifyshows 0 drift / 0 missing (post-registration) - [ ] the green/red number (unmatched edges + overlaps; KM index drift) recorded in
tracker.md§3 with the date and the edge-set version it was run against - [ ] any RED defect routed to its owner (GAP → owning agent; OVERLAP → canon RACI/COO; UNREGISTERED TRIGGER → Operations) — not fixed by the PMO
- [ ] run before the wave’s batched push (GR-7), never after, never on a stale edge-set
- [ ] learnings captured to
docs/knowledge/if any (reported for indexing, SOP-024)
- [ ]
Trigger status: all phrases are registered (
briefing posted,preservation complete,artifact approved— Wave-0/1 seed). The recorded gate result is broadcast via the canonicalbriefing posted; the recorded number itself is an intra-unit entry intracker.mdwith no separate downstream consumer edge, so no new trigger is required. Any future gate-result event needing a phrase is proposed to Operations, not invented inline (docs/handoff-triggers.md).
Purpose
Deliver the two headline integrity gates on cadence while they are scripted-in-design but manual-in-practice (AR-003 un-wired): the Handoff Register reconciliation and the two-index KM check. A manual control with no named owner, no fixed cadence, and no recorded result is exactly the control that quietly lapses — the same failure mode as the no-op it replaces (RK-3, G-3). This SOP makes the run repeatable, recorded, and auditable so a wave’s “done” rests on a real green number, not an assertion. It is the interim delivery of the gate; the script’s existence + a green pilot run remain the hard Wave 0 exit gate (master plan §9).
When to use
- At every wave checkpoint, before that wave’s batched push (the unit of
batching;
wave-schedule.md§9.1). Never after the push; never on a stale edge-set. - After any roster change mid-program — re-run for the affected edges (R5 horizontal creep; a late hire / rename invalidates frozen Interface Contracts).
- Whenever the COO/Principal asks for a current integrity read.
Flow
flowchart LR
A["Wave checkpoint reached<br/>(before the push)"] --> B["Refresh edge-set:<br/>all ICs registered"]
B --> C["Run handoff-reconcile.mjs"]
C --> D["Run km-index-check.mjs"]
D --> E["Run archive-manifest.sh verify"]
E --> F{"All GREEN<br/>(0 defects)?"}
F -->|no| G["Route defect to owner<br/>(GAP/OVERLAP/UNREG)"]
F -->|yes| H["Record green number<br/>in tracker.md §3"]
G --> I["Re-run after fix"]
I --> C
H --> J["Batched push (GR-7)<br/>+ snapshot → Archivist"]
classDef s fill:#1d4ed8,color:#fff,stroke:#1e3a8a
classDef d fill:#0f766e,color:#fff,stroke:#134e4a
class A,B,C,D,E,G,H,I,J s
class F d
Text fallback: at a wave checkpoint, before the push, confirm the edge-set is
current (every wave SOP’s Interface Contract is registered) → run
node scripts/handoff-reconcile.mjs → run node scripts/km-index-check.mjs → run
./scripts/archive-manifest.sh verify → if any is non-zero, route the defect to its
owner (a GAP to the owning agent, an OVERLAP to canon RACI / the COO, an UNREGISTERED
TRIGGER to Operations) and re-run after the fix → when all read GREEN (0 defects),
record the green number in tracker.md §3 with the date and the edge-set version →
take the wave’s one batched push (GR-7) and hand the tracker snapshot (with the gate
record) to the Archivist (artifact approved).
Steps
- Confirm it’s a checkpoint, before the push. This runs at the wave checkpoint,
on the current edge-set, before the batched push — never after, never stale
(
wave-schedule.md§9.1). If a roster change landed, re-run the affected edges. - Run the Handoff Register reconciliation.
node scripts/handoff-reconcile.mjs. It parses every Interface Contract block, builds the edge list, and emits a single red/green number (unmatched edges + overlaps + unregistered triggers). For a partial register (a wave’s edges), cross-wave counterparties reconcile as pending — that is GREEN for the wave (interface-contract-spec.md§3.1.1). - Run the two-index KM check.
node scripts/km-index-check.mjs. It fails if adocs/knowledge/*.mdfile is absent from the README index or the canon Knowledge row. Both indices must reconcile (master plan §6.2 / §10; K2/K7). - Verify archive integrity.
./scripts/archive-manifest.sh verify— 0 drift / 0 missing after the wave’s artifacts are registered (read-only; neverupdateto mass- rewrite hashes — GR-8). - Interpret the result.
- All GREEN (0 defects): proceed to record.
- RED: identify the defect class and route it to its owner — a GAP to the
owning agent to fix, an OVERLAP to canon RACI / the COO (not peer-negotiated,
R8), an UNREGISTERED TRIGGER to Operations to add or fold (
docs/handoff-triggers.md). The PMO does not fix contracts, edit the registry, or rewrite the reconciler — route and re-run.
- Record the number (the non-negotiable step). Write the green/red number into
tracker.md§3 as a dated PMO manual integrity-gate record, naming the date and the edge-set version (e.g. “@ Wave 3 checkpoint”). A run that happened but wasn’t recorded did not happen for delivery purposes. A wave is not “done” without a recorded green run for its edges. - Then push (GR-7 / R9). Only after a recorded green run, take the wave’s one
batched push; hand the tracker snapshot (with the gate record) to the Archivist
(
artifact approved). - Capture. File any run learning to
docs/knowledge/(report for indexing, SOP-024).
Roles / approvers
- Project Manager (PMO) — runs the gate, interprets the result, records the
number, and routes defects; the named owner of the manual cadence
(
wave-schedule.md§9.1). Does not fix contracts or edit the mechanism. - Process Engineer (Operations) — owns the gate mechanism (
handoff-reconcile.mjs,km-index-check.mjs), the trigger registry, and the eventual AR-003 wiring that retires this manual run. Receives UNREGISTERED-TRIGGER and mechanism defects. - Quality & Risk — independent assurance the register stays green (second line); the PMO run is a first-line delivery control, not the assurance proof (master plan R11).
- Owning agent / canon RACI / COO — receive routed GAP / OVERLAP defects.
- Archivist — preserves the tracker snapshot carrying the recorded result (0 drift).
Guardrails
- Run before the push, never on a stale edge-set (charter rule 2;
wave-schedule.md§9.1). - Record the number, always — date + edge-set version in
tracker.md§3; an unrecorded run does not count (charter quality bar). - Route defects, don’t fix them — GAP → owner, OVERLAP → canon RACI/COO, UNREGISTERED → Operations. The PMO never edits contracts, the registry, or the reconciler (charter rules 4/7; R8).
- Never
update/refreshthe manifest to silenceverify; never bypass the archive check (GR-8) —verifyis authoritative. - This is interim delivery, not a substitute for the scripted Wave 0 exit gate (master plan §9); when AR-003 wires the cadence, this run retires to CI.
- Personal information is PA-only — never in scope here.
- Links to policy:
hr/employee-handbook.md,hr/policies/*; rulesCLAUDE.md(GR-7, GR-8).
See also: docs/units/delivery-pmo/charter.md · SOP-074 (wave-schedule run) ·
SOP-075 (status reporting) · wave-schedule.md §9.1 · interface-contract-spec.md §3 ·
docs/documentation-program/tracker.md §3 · scripts/handoff-reconcile.mjs ·
scripts/km-index-check.mjs · scripts/archive-manifest.sh ·
job-aids/JA-076-wave-checkpoint-runbook.md (the executable card).