Skip to content

SOP-076 — Manual integrity-gate run (reconcile + km-index at each wave checkpoint)

Guide

<!-- 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 runs handoff-reconcile + km-index-check at every wave checkpoint and records the green/red number in tracker.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.md snapshot (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.md with date + edge-set version; a RED defect is routed to its owner
  • Definition of Done before handoff:
    • [ ] node scripts/handoff-reconcile.mjs run on the current full edge-set (not stale)
    • [ ] node scripts/km-index-check.mjs run; both KM indices reconcile
    • [ ] ./scripts/archive-manifest.sh verify shows 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 canonical briefing posted; the recorded number itself is an intra-unit entry in tracker.md with 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

  1. 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.
  2. 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).
  3. Run the two-index KM check. node scripts/km-index-check.mjs. It fails if a docs/knowledge/*.md file is absent from the README index or the canon Knowledge row. Both indices must reconcile (master plan §6.2 / §10; K2/K7).
  4. Verify archive integrity. ./scripts/archive-manifest.sh verify — 0 drift / 0 missing after the wave’s artifacts are registered (read-only; never update to mass- rewrite hashes — GR-8).
  5. 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.
  6. 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.
  7. 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).
  8. 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/refresh the manifest to silence verify; never bypass the archive check (GR-8) — verify is 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/*; rules CLAUDE.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).