## Phase 4 — §V.1 amendment + template update

**RULES.md §V.1** now contains a new paragraph titled **“Mechanical enforcement (FVC 36, 2026‑09‑22)”** immediately after the existing STOP‑vs‑ALIGN clarification. The paragraph codifies the three pre‑report tool calls with explicit failure semantics:

```
**Mechanical enforcement (FVC 36, 2026-09-22):**
Rule text alone has not been enough. The following three
`tools/` scripts now enforce §V.1 mechanically and are
mandatory at the pre‑report step:

  (a) `bash tools/align-check.sh [REPO_PATH] [DEPLOY_HASH]`
      runs all five ALIGN layers (clean tree, HEAD ==
      origin/main, no unmerged branches, no fix/* or feat/*
      branches ahead of main, DEPLOY_HASH matches HEAD).
      Exit 0 = ALIGNED; exit 1 = MISALIGNED. If exit 1,
      the report MUST be marked `ALIGN: FAILED`, not
      SHIPPED. The dispatch must HALT and report which
      layer failed.

  (b) `bash tools/verify-push.sh <BRANCH> [REPO_PATH]`
      runs `git ls-remote origin <branch>` and prints the
      full output. Exit 0 = ref exists on origin; exit 1 =
      ref absent. Any sentence claiming "pushed
      successfully" MUST be accompanied by the verbatim
      output. No claim without evidence. FVC 32 (d000424)
      closed by this gate.

  (c) `bash tools/check-footer.sh <REPORT_PATH>`
      validates that the report has a USAGE: line and a
      NATIVE FOOTPRINT block enclosed in a single fenced
      code block, and that this block is the last non-empty
      content of the report. Exit 0 = PASS; exit 1 = FAIL.
      If exit 1, the report is not complete. Fix the
      footer and re-check before posting. FVC 34 (id 44)
      shipped a USAGE block that was NOT in a code box —
      the rule said "single fenced code block," the format
      was violated, nothing caught it. This script closes
      that gap.
```

**DISPATCH_TEMPLATES.md** now includes a **“PRE‑REPORT ENFORCEMENT (FVC 36, 2026‑09‑22)”** block between the CONSTRAINTS and ALIGN sections of the T1, T2, and T3 templates. The block is identical for T2 and T3, while T1 calls only (a) and (c) because read‑only dispatches do not deploy or push. The verbatim preamble for T2/T3 is:

```
PRE-REPORT ENFORCEMENT (FVC 36, 2026-09-22):
  Mechanical gates per RULES.md §V.1 — run BEFORE writing the report.
  Three tools. All three are mandatory. Failure = dispatch not complete.

  (a) bash tools/align-check.sh {REPO_PATH} [{DEPLOY_HASH}]
      Runs 5 layers: clean tree, HEAD == origin/main, no unmerged
      branches, no fix/* or feat/* branches ahead of main,
      DEPLOY_HASH matches HEAD (full SHA, short prefix, or
      Build-Hash trailer in commit message).
      Exit 0 = ALIGNED; exit 1 = MISALIGNED. On exit 1, mark the
      report ALIGN: FAILED (not SHIPPED) and HALT.

  (b) bash tools/verify-push.sh <BRANCH> {REPO_PATH}
      Required for ANY sentence claiming "pushed successfully".
      Paste the verbatim ls-remote output into the report as
      evidence. FVC 32 (d000424, id 9) closed by this gate —
      branch claimed pushed but not on origin; ls-remote caught it.

  (c) bash tools/check-footer.sh <REPORT_PATH}
      Run AFTER writing the report body, BEFORE posting. Verifies
      USAGE: line + NATIVE FOOTPRINT block in single fenced code
      block, last non-empty content. Exit 1 → footer is not
      compliant. Fix and re-check before posting.
```

---

## Phase 5 — version bump

The kit version was bumped from **1.20.9** to **1.20.10**. This patch adds the enforcement tooling without removing any existing rule text.

**Modified files (4):**

| File | Change |
|------|--------|
| `RULES.md` | Added mechanical‑enforcement paragraph to §V.1 |
| `VERSION` | Updated to `1.20.10` |
| `docs/LAW-CHANGELOG.md` | Added entry for FVC 36 mechanical enforcement |
| `docs/DISPATCH_TEMPLATES.md` | Inserted PRE‑REPORT ENFORCEMENT block in T1, T2, T3 |

**Added files (3):**

| File | Size |
|------|------|
| `tools/align-check.sh` | 118 LOC |
| `tools/verify-push.sh` | 48 LOC |
| `tools/check-footer.sh` | 84 LOC |

**Diff stat:** 7 files changed, 391 insertions, 6 deletions.  
**Commit:** `a371df5 feat(kit) v1.20.10 — FVC 36 mechanical ALIGN enforcement`.  
**Push:** `be7655e..a371df5 main -> main` (success).  
The working tree is clean after the commit (only untracked `agents/id<N>/*` scratch directories remain, which are allowed).

---

## Self‑test (post‑commit)

The following self‑tests were run against the freshly committed state. All exit codes are 0, indicating success.

```
=== align-check.sh on /workspace/.home/mavis-kits ===
[1] PASS
[2] PASS
[3] PASS
[4] PASS
[5] N/A: DEPLOY_HASH not provided
RESULT: ALIGNED
exit=0
```

```
=== verify-push.sh main on /workspace/.home/mavis-kits ===
a371df579e53e82a8ebe9cbadc81fe13a035a20e	refs/heads/main
STATUS: EXISTS
exit=0
```

```
=== verify-push.sh fix/fvc32-default-provider on /workspace/.home/mavis-kits ===
STATUS: ABSENT
exit=1
```

```
=== check-footer.sh on /tmp/fvc36-pass-report.md ===
PASS
exit=0
```

The `verify-push.sh` test for the `fix/fvc32-default-provider` branch correctly reports the branch as absent, confirming that the gate catches the false‑ship pattern that this dispatch was designed to prevent. All four self‑tests pass on the post‑commit state.