# PROCEDURE-FAULT-1 — v2

Word Of Clout, LLC · published under the one-ballot one-push publish (Tani ruling 2026-09-21T15:21Z msg 30772) · supersedes the v1 text formerly at this stable path · stable path: /laws/procedure-fault-v1.md · sha256 (this file's bytes): see the parity receipt — LAW-SHA256 quoted there.

## The Rule

**A re-derivation that is not performed, and a re-derivation that differs
because the source moved, are both procedure faults: recorded, excluded
from the error rate, never counted as agree.**

The sampler's fault classification carries TWO classes, each with a
sub-cause code emitted by the sampler itself:

1. **NOT-REDERIVED** — the sampler did not perform an independent
   re-derivation for the row, or could not. Sub-causes:
   - `rule-short-circuit` — the run's rule blanketed a verdict class
     and skipped the row's re-derivation. HISTORICAL CODE: emitted
     only by samplers before acn b11668c; no current code path emits
     it. (LAW-IS-GENERAL-1, Tani 2026-09-21T06:31Z msg 30758: the law
     states the rule; the classification of any specific row lives
     where instances live — the run receipt, the sample-audit page,
     and the @3 successor's procedure_faults proposition.)
   - `dangling-source` — the row cites an observation absent from the
     ledger.
   - `missing-proposition` — the row cites a proposition absent from the
     ledger.

2. **PROCEDURE-DRIFT** — the re-derivation WAS performed and differs from
   the recorded verdict because observations, ruleset, or cutoff changed
   (the sampler's detectable form: a drift-trail row `…@old` whose
   re-derivation differs from its era verdict — the source moved, not the
   verdict). Sub-cause: `observations-changed`.

Both classes are RECORDED (the fault row carries its class + sub-cause
code in the run receipt), EXCLUDED from the error-rate denominator, and
NEVER counted as agree.

## The run is the run (RECEIPT-IS-THE-RUN-1)

The error bound describes the run that produced the receipt. If in that
run the sampler did not re-derive a drawn row, that is a procedure fault
OF THAT RUN — even if today's sampler, re-deriving the same row, would
reach an agree. Re-deriving the row today is a new run; it cannot be
attributed to the old receipt, and the old receipt's counts cannot be
re-attributed to today's sampler. The 2026-09-07 n=50 sample stands at
49 re-derived · 0 disagreements · 1 procedure fault
(NOT-REDERIVED / rule-short-circuit), bound 1 − 0.05^(1/49) ≈ 5.9%.

## Why the distinction exists

A self-audit that counts a not-performed re-derivation as an agree
overstates its own work; one that counts source drift as an error
measures procedure change, not verification accuracy. Excluding both —
and recording them — keeps the error rate an error rate and keeps the
audit honest about what it did and did not do.

## The limit, stated plainly

- The classification is emitted by the sampler in the run receipt, one
  class + sub-cause code per fault row; the published law's classes and
  codes map ONE-TO-ONE onto the sampler's emitted vocabulary
  (LAW-CODE-PARITY-1 — the parity test refuses a law text carrying a code
  the sampler does not emit, and refuses a sampler code missing from the
  law).
- `rule-short-circuit` is the one historical code: it exists so the law
  can classify the 2026-09-07 receipt in the same vocabulary; no current
  code path emits it.
- A third party repeating the re-derivation with the same observations,
  ruleset, and cutoff reaches the same classification for
  PROCEDURE-DRIFT; NOT-REDERIVED rows are named in the receipt by id.
- The classification is NOT a claim about the original verification's
  correctness — it is a claim about the difference's cause, and for
  NOT-REDERIVED, about the run's own procedure.
- The error bound applies ONLY to re-derived rows (agree + disagree);
  procedure faults of both classes are recorded and excluded, never agree.

## Parity

LAW-CODE-PARITY-1: classes {NOT-REDERIVED, PROCEDURE-DRIFT}; sub-causes
{missing-proposition, dangling-source, rule-short-circuit} under
NOT-REDERIVED; {observations-changed} under PROCEDURE-DRIFT. 1:1 with
`FAULT_VOCABULARY` exported by the sampler
(acn-mcp-server kernel/sample_audit.ts, acn b11668c). Parity runner:
`node lib/records/r14-3-procedure-fault-v2-parity.test.mjs` —
exit code quoted in the commit receipt.

The law's machine-readable code block (the parity test parses THIS block
and compares it 1:1 with the sampler's exported vocabulary — the prose
above is for the reader, this block is the law):

```law-codes
NOT-REDERIVED:
  - missing-proposition
  - dangling-source
  - rule-short-circuit (historical)
PROCEDURE-DRIFT:
  - observations-changed
```