Skip to content
Back to skills

Gz Adr Audit

ASecurity

Use for an ADR's Gate-5 audit; provides the audit templates and procedure.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 19, 2026
testingrustgoshellbashgitdocumentation

Works with

  • cli

Security analysis

A100/100

Scanned October 19, 2026

npx -y skills add tvproductions/gzkit --skill gz-adr-audit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Gz Adr Audit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Gz Adr Audit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tvproductions-gz-adr-audit/badge)](https://www.skillsdirectory.com/skills/tvproductions-gz-adr-audit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: gz-adr-audit
persona: pipeline-orchestrator
description: Use for an ADR's Gate-5 audit; provides the audit templates and procedure.
category: adr-audit
compatibility: GovZero v6 framework; provides audit procedure for COMPLETED→VALIDATED ADR transition
metadata:
  skill-version: "6.15.1"
  govzero-framework-version: "v6"
  govzero-author: "GovZero governance team"
  govzero-spec-references: "docs/governance/GovZero/charter.md, docs/governance/GovZero/audit-protocol.md"
  govzero-gates-covered: "Gate 5 (Human Attestation)"
  govzero_layer: "Layer 2 - Ledger Consumption"
  trust_model: "Trusts Layer 1 ledger proof for mechanical checks; re-verifies the ADR thesis via the bound fidelity gate (ADR-0.0.73) — gz adr fidelity RUNS the Decision's assertions against the running system"
gz_command: audit
invocation: uv run gz audit <adr-id>
lifecycle_state: active
owner: gzkit-governance
last_reviewed: 2026-10-17
model: opus
---

# gz-adr-audit

Execute reproducible ADR verification to move from COMPLETED → VALIDATED.

## Persona

**Active driver:** `pipeline-orchestrator` — read `.gzkit/personas/pipeline-orchestrator.md` and adopt its behavioral identity before executing this skill. The audit is a sequenced ceremony (verify proof → reproduce → run the fidelity gate); step-discipline and ceremony-completion are not rules to follow — they are who you are while running it.

## Persona Dispatch

The audit is read-only judgment work — a single driver scoring its own findings is the optimistic-bias failure mode `spec-reviewer`'s anti-traits literally name. Dispatch the following personas as independent subagents to produce the evidence the driver synthesizes:

| Persona | Function in this ceremony | Invoked at |
|---|---|---|
| `spec-reviewer` | Independent requirement-tracing against ledger proof; verifies each OBPI's claimed REQ coverage holds against a fresh read of brief and tests | Steps 1–2 (Verify Ledger Proof, Reproduce Key Evidence) |
| `quality-reviewer` | Independent assessment of the ADR package's structural coherence: do the OBPIs cohere into the ADR's claimed capability, or is the integration brittle? | After Step 2, before Step 3 |
| `narrator` | Frames the Step 4 audit documentation (AUDIT.md) in operator-value terms; the Step 3 fidelity gate is now bound and runs itself — no prose value-demonstration to compose | Step 4 (Document) |

Personas not dispatched: `implementer` (no code written in this ceremony — if audit reveals a defect requiring code, file a GHI via `/ghi-author` and route to a fresh OBPI brief, never spawn an implementer inside the audit).

**This ceremony has no artifact channel for these dispatches** — they are unattested and undisclosed (GHI #770's named residual), and the receipt machinery that would record them is not yet authored (GHI #846; `ADR-pool.obpi-pipeline-dispatch-attestation` is Superseded into ADR-0.0.73, which delivered no receipts). Treat the mandate as binding on you, not as something a gate will catch.

Persona doctrine reference: ADR-0.0.11-persona-driven-agent-identity-frames (Validated).

### Common Rationalizations

| Thought | Reality |
|---------|---------|
| "All OBPIs passed individually, the ADR is obviously complete" | Individual OBPI completion doesn't prove ADR-level integration. The audit verifies the whole. |
| "Tests pass and coverage is met, the audit is done" | That's verification, not fidelity. Step 3 (Fidelity Gate) runs the ADR's thesis against the running system, not just its tests. |
| "The closeout ceremony already covered this" | Audit and closeout invoke the same bound fidelity gate; running one satisfies the other's fidelity step. Mechanical checks (Step 1-2) are still independent. |
| "Ledger entries exist from a previous audit, I can skip re-verification" | Check staleness. Entries older than 7 days or predating code changes require fresh verification. |
| "This is a Foundation ADR, the audit can be lighter" | Foundation ADRs run the same fidelity gate. The thesis is held against the running system. |

### Red Flags

- AUDIT.md contains only mechanical checkmarks without a Fidelity Gate section
- Agent marks ADR as VALIDATED without running `uv run gz adr report` to confirm lifecycle change
- Audit proofs directory is empty or contains only pass/fail text without actual command output
- Fidelity assertions so generic they could apply to any ADR
- Validation receipt emitted before all shortfalls are resolved

---

## Layer 2 Trust Model

This is a **Layer 2** tool — it consumes proof from the ledger rather than re-running verification commands.

**Trust Chain:**

1. **Layer 1 tools** (`gz-obpi-sync`, the OBPI pipeline) run tests, check coverage, validate evidence
2. **Layer 1 writes proof** to the ledger as OBPI completion and receipt events
3. **This tool reads proof** (`gz adr audit-check`) — if all briefs show PASS/Completed, skip re-verification
4. **Gate 5 attests** to the presence of proof, not re-execution

**Why trust the ledger?**

- Re-running tests in Layer 2 duplicates Layer 1 work
- Gate 5's job is to verify *proof exists*, not regenerate proof
- Human attestation observes artifacts, not re-executes them

**When to force re-verification:**

- If ledger entries are older than 7 days (staleness threshold)
- If you suspect ledger corruption or tampering
- If Layer 1 tools have been updated since last audit

In these cases, run `uv run gz audit <adr-id>` first to regenerate ledger proof.

---

## Assets

- `assets/AUDIT_PLAN.template.md` — Plan scaffold (scope, checks, risk focus)
- `assets/AUDIT.template.md` — Annotation shell (✓/✗/⚠, summary, attestation)

---

## Audit Procedure

**Prerequisite:** ADR is COMPLETED (all briefs done, tests/coverage/docs pass).

### 1. Plan

Each Bash invocation starts a fresh shell, so do NOT export shell
variables across calls. Inline the full ADR directory path in every
command so each Bash call is self-contained. Substitute the real ADR
directory (e.g. `docs/design/adr/foundation/ADR-0.0.16-foo-slug`) for the
placeholder below.

```bash
mkdir -p docs/design/adr/<kind>/ADR-x.y.z-slug/audit/proofs
```

- Read ADR prose, extract all claims
- Create `audit/AUDIT_PLAN.md` with checks for each claim
- Run `uv run gz cli audit` for governance issues
- Legacy note: `docs/design/audit/**` remains historical only; new audits live under the ADR folder.

### 2. Verify Ledger Completeness

Before running any commands, check ledger proof:

```bash
uv run gz adr audit-check <adr-id>
```

**If ledger is complete (all briefs PASS):**

- Skip to Step 3 (Fidelity Gate) — no re-verification needed
- Trust the Layer 1 proof the ledger carries
- Record "Ledger proof verified" in audit notes

**If ledger is incomplete or missing:**

Audit-check failure has two causes that look identical at the CLI but require
opposite remediation. Diagnose before editing:

- **(a) Genuinely missing coverage** — no test asserts the flagged REQ's
  semantics. Remediation: author a REQ-derived test (per the Red→Green→Refactor
  rhythm in `.gzkit/rules/tests.md` § Red-Green-Refactor), then decorate it with
  `@covers(REQ-X.Y.Z-NN-MM)`. Re-run `uv run gz audit <adr-id>` to write fresh
  ledger entries, then return to Step 2.
- **(b) Coverage-shape drift** — a test exists but pins an obsolete output
  string or asserts a shape the REQ did not mandate. Remediation: re-derive the
  assertion from the OBPI brief's REQ semantics per `.gzkit/rules/tests.md`
  § Red-Green-Refactor (**Tests assert semantics, not strings**).
  **Backfilling a cosmetic `@covers` decorator without re-deriving the
  assertion is the forbidden anti-pattern** — it silences `gz adr audit-check`
  while leaving the semantic gap intact.

After remediation, re-run `uv run gz audit <adr-id>` to write fresh ledger
entries, then return to Step 2.

**Force re-verification (optional):**

If you need to regenerate proof (staleness, suspicion, etc.), run the validation commands:

Inline the full ADR directory path, as in Step 1:

```bash
uv run gz test > docs/design/adr/<kind>/ADR-x.y.z-slug/audit/proofs/unittest.txt 2>&1
uv run mkdocs build --strict > docs/design/adr/<kind>/ADR-x.y.z-slug/audit/proofs/mkdocs.txt 2>&1
uv run gz closeout <adr-id> --dry-run > docs/design/adr/<kind>/ADR-x.y.z-slug/audit/proofs/gates.txt 2>&1
```

Record ✓/✗/⚠ outcomes for each check.

### 3. Fidelity Gate (MANDATORY — bound, replaces prose Demonstrate Value)

**An audit that only verifies mechanical checks (tests pass, coverage met) without holding the ADR's thesis against the running system is incomplete.**

This step is a **bound, runnable gate**, not prose: the audit ceremony invokes the SAME standalone fidelity gate the closeout ceremony invokes (one gate, two consumers — `gzkit.fidelity.assert_fidelity_for_ceremony`). `gz audit` runs it automatically; you do not narrate it.

**What the gate does:**

```bash
uv run gz adr fidelity <ADR-ID>
```

It parses the ADR Decision's `## Fidelity Assertions` block and RUNS each assertion's command against the committed tree — a detached worktree at HEAD, so uncommitted files cannot satisfy it and its commands cannot write to the live checkout; no buildable worktree fails closed (GHI #1156) — comparing observed vs expected exit. A failed assertion **blocks the audit** (exit 3) before any validation receipt is written — a red thesis cannot record a false `validated`.

**Absence policy (graceful migration, OBPI-0.0.73-04):** an ADR that carries no `## Fidelity Assertions` block is **flagged with a warning** (the prose 'Demonstrate Value' step is gone — absence is surfaced, not papered over with agent prose) but does not hard-block the in-flight audit. Hard presence-enforcement lives at ADR closeout (ADR-0.0.73 Boundary Invariant #4) and the new-ADR template. The back-fill of fidelity blocks onto already-VALIDATED ADRs is a separate forced sweep.

**Authoring duty:** if the ADR under audit has no block yet, author a `## Fidelity Assertions` table (claim / command / expected-exit rows that exercise the ADR's thesis) before closeout — do not substitute prose.

**Relationship to closeout ceremony:** both ceremonies invoke the identical gate, so running one satisfies the other's fidelity step. There is no separate prose demonstration to write in either path.

### 4. Document

Populate `audit/AUDIT.md` with:

- **Fidelity Gate** section (from Step 3 — each assertion's claim, command, expected vs observed exit, pass/fail)
- Execution log (✓/✗/⚠ per check)
- Evidence index (links to proof files)
- Summary table (completeness, integrity, alignment)

### 5. Identify Shortfalls

Review for:

- Incomplete implementations (claimed features not shipped)
- Misalignments (code ≠ docs ≠ tests)
- Missing or failing fidelity assertions (the thesis never held against the running system)
- Unexplained anomalies

### 6. Remediate

For each shortfall:

- Severity (blocking/non-blocking)
- Proposed fix
- Effort estimate

Implement fixes, re-validate, update `AUDIT.md`.

### 7. Mark VALIDATED

When all shortfalls resolved:

- Complete `AUDIT.md`; the operator's acceptance in Step 8 is the attestation — the agent does not sign for them
- The ADR's lifecycle moves through the Step 8 receipt, never by hand-editing its status

### 8. Emit Validation Receipt (agent-relayed via audit-begin/audit-end)

After a successful audit the agent emits the validated receipt. The
operator's verbatim audit acceptance, relayed via the `--evidence-json`
`attestation_text` field, IS the Gate-5 attestation — there is no TTY
`ATTEST` gate. The `gz adr audit-begin` / `gz adr audit-end` pair brackets
the audit ceremony as a distinct operator moment. Steps:

1. **Open the ceremony.** `uv run gz adr audit-begin <adr-id>` — writes
   the per-ADR co-presence marker at
   `.claude/plans/.pipeline-active-<adr-id>.json`. The marker is
   written by the gzkit CLI itself, not by hand; the slash-command
   entry-point chain (operator typed `/gz-adr-audit` → skill ran
   `audit-begin`) is the legitimate co-presence proof the runtime
   accepts.
2. **Operator verbal attestation.** Wait for the operator's verbal
   ack — `accept audit` or `verify audit`. This is the ADR
   audit-validation acceptance, **not** OBPI Gate-5 closeout (which
   already happened on each linked OBPI; by the time `/gz-adr-audit`
   runs, every linked OBPI is `attested_completed` in the ledger).
   The audit ceremony is a distinct operator moment — accepting the
   audit's verification of the integrated ADR (ledger proof complete,
   fidelity gate ran, no shortfalls remain) — and wants its
   own phrasing so the ledger's `attestation_text` field is
   self-documenting. The verbal ack IS the Gate-5 human-attestation
   event; the agent relays it into the ledger receipt.
3. **Emit the receipt.**

   ```bash
   uv run gz adr emit-receipt <adr-id> --event validated \
     --attestor "g0" \
     --evidence-json '{"gate":5,"tests_passed":true,"tests_count":...,
                       "scope":"<adr-id>","date":"<YYYY-MM-DD>",
                       "attestation_text":"<operator verbatim ack> — <agent enrichment>"}'
   ```

   The receipt records `evidence.attestation_type=operator-verbatim-conversational`
   from the `attestation_text` field — the operator's verbatim acceptance is
   the Gate-5 attestation.

4. **Close the ceremony.** `uv run gz adr audit-end <adr-id>` —
   removes the marker. Marker hygiene matters: leaving it behind
   would let a second emit succeed without a fresh operator
   invocation, defeating the co-presence proof.

**Rules:**

- **Audit fails → no receipt.** Only emit after all shortfalls are
  resolved.
- **Attestor field is `g0`** — never the operator's real name and never
  their personal email (`AGENTS.md` § Execution Rules, Operator PII). Do
  not use `agent:<model-id>` — `validated`/`attested`/
  `accepted` are human-attestation events and the ledger receipt
  records the operator on whose behalf the agent is relaying.
- **Marker hygiene.** Always pair `audit-begin` with `audit-end`.
  If the emit fails for any reason, still run `audit-end` so the
  next ceremony starts clean.
- **Do not hand-write the marker.** Use the `gz adr audit-begin` CLI
  verb — hand-fabricating the marker file bypasses the ceremony
  entry-point.
- **Idempotent:** Running twice produces two ledger entries (audit
  trail preserved).

### 9. Verify Lifecycle Update

**MANDATORY.** After emitting the receipt, confirm the lifecycle change took
effect before declaring success:

```bash
uv run gz adr report <adr-id>
```

The Lifecycle column MUST show `Validated`. If it still shows `Completed`,
the audit is not done — investigate why the state did not propagate. Do not
report success to the operator until the report command confirms the change.

**Recommended evidence fields:**

| Field | Type | Description |
|-------|------|-------------|
| `gate` | int | Gate number (e.g., 5) |
| `tests_passed` | bool | Whether unit tests passed |
| `coverage_pct` | float | Coverage percentage |
| `briefs_completed` | int | Number of briefs completed |
| `shortfalls_resolved` | int | Number of shortfalls fixed |

---

## Validation Commands

| Type | Command | Layer |
|------|---------|-------|
| **Ledger check** | `uv run gz adr audit-check <adr-id>` | L2 |
| **Ledger check (JSON)** | `uv run gz adr audit-check <adr-id> --json` | L2 |
| ADR lifecycle summary | `uv run gz adr status <adr-id> --json` | L1 |
| Unit tests | `uv run gz test` | L1 |
| Docs build | `uv run mkdocs build --strict` | L1 |
| Governance | `uv run gz cli audit` | L1 |
| Config paths | `uv run gz check-config-paths` | L1 |
| Heavy gates | `uv run gz closeout <adr-id> --dry-run` | L1 |
| OBPI reconcile | `uv run gz audit <adr-id>` | L1+L2 |
| Coverage discovery | `uv run gz covers <adr-id>` | L1 |
| **Open audit ceremony** | `uv run gz adr audit-begin <adr-id>` — writes per-ADR co-presence marker. | L1 |
| **Emit receipt** | `uv run gz adr emit-receipt <adr-id> --event validated --attestor "g0" --evidence-json '{...,"attestation_text":"<operator verbatim ack>"}'` after operator's verbal `accept audit` / `verify audit` (NOT OBPI-closeout `attest completed`). | L2 |
| **Close audit ceremony** | `uv run gz adr audit-end <adr-id>` — removes marker. | L1 |

**Layer key:** L1 = runs verification, L2 = reads ledger proof

**When to run evidence checks:**

- Before marking an ADR Completed/Validated
- During CI checks for a target ADR
- Before `gz closeout`, `gz attest`, or `gz audit`
- Before the closeout ceremony (`/gz-adr-closeout-ceremony`)

---

## Gate Checklist

**COMPLETED (Phase 1):**

- [ ] All features shipped
- [ ] Unit tests pass, coverage ≥40%
- [ ] Docs complete, mkdocs builds clean
- [ ] Linting/formatting/type checks pass

**VALIDATED (Phase 2):**

- [ ] Audit plan created
- [ ] All checks executed with proofs
- [ ] **Fidelity gate passed** — the ADR's assertions ran against the running system
- [ ] No unresolved ✗ failures
- [ ] Code matches documentation
- [ ] Examples are executable
- [ ] Validation receipt emitted to ledger
- [ ] Operator's audit acceptance relayed verbatim in the receipt
- [ ] **Lifecycle verified** — `uv run gz adr report <adr-id>` shows Validated

---

## Failure Modes

- **Mechanical-only audit** — tests pass and coverage met but the ADR's thesis is never held against the running system. The human cannot assess value from a checklist of green checkmarks alone.
- Audits drift from template structure
- No proof artifacts captured
- Shortfalls not remediated before marking VALIDATED
- Audit skips Step 3 (Fidelity Gate) and jumps straight to documentation

---

## Relationship to Closeout Ceremony

`gz-adr-audit` and `gz-adr-closeout-ceremony` are **complementary but independent**:

| Concern | gz-adr-audit | gz-adr-closeout-ceremony |
|---------|-------------|--------------------------|
| **Focus** | Evidence verification + bound fidelity gate | Human-witnessed runbook walkthrough + bound fidelity gate |
| **Mode** | Agent-driven with human attestation | Human-driven with agent presenting |
| **Outputs** | AUDIT.md + proofs/ + ledger entries | Closeout form + attestation record |
| **Fidelity gate** | Step 3 (`gz adr fidelity`, bound) | EXECUTE→ATTESTATION edge (same gate, bound) |

**Both invoke the same bound gate** (`assert_fidelity_for_ceremony`) — one gate, two consumers. Running either ceremony exercises the ADR's `## Fidelity Assertions` against the running system; there is no separate prose value-demonstration to write or duplicate.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.