---
mode: CREATE
adr_id: ADR-0.0.41
branch: main
timestamp: "2026-05-27T11:51:44Z"
agent: claude-code
obpi_id: OBPI-0.0.41-01
session_id: main-2026-05-27
continues_from:
---

<!-- Handoff document for ADR-0.0.41-token-block-lock-discipline — created by claude-code at 2026-05-27T11:51:44Z -->
<!-- Token-block register-entry: closes the OBPI traversal that AUTHORED this very discipline. -->
<!-- Minimum-information per Binding Sub-Invariant 2: last-claim ts + commit SHA + decision context + branch state. -->

## Current State Summary

OBPI-0.0.41-01-token-block-canon **completed and attested** in this traversal. Ledger trail:
- `obpi_lock_claimed` at `2026-05-27T11:36:50.881234+00:00` (agent=claude-code-fffb69b5, ttl=120m)
- `pipeline_launched` at `2026-05-27T11:44:57Z` (entry=sync, nonce=05f3c82d4e17ce0d0dd8c26f0afa9173)
- 6 × `obpi_completion_uncovered_accept` events at `2026-05-27T11:45:03Z` (REQ-0.0.41-01-01 through 06, all SUPPORT-kind per REQ Scope Discipline)
- `obpi_receipt_emitted` at `2026-05-27T11:45:03.362932+00:00` (obpi_completion=`attested_completed`, attestor="Jeffry Babb", anchor commit=`942550a`)
- `git-sync --apply --lint --test` completed: HEAD now at `773b3d45` on `origin/main`

`gz adr status ADR-0.0.41-token-block-lock-discipline` reports: lifecycle `Pending` / closeout phase `pre_closeout` / OBPI 1/1 / **closeout `READY`** (was BLOCKED at session start). QC remains PENDING on TDD/Docs/BDD/Human attestation — those fire at the ADR closeout ceremony, not at this OBPI-level handoff.

This handoff is the register-entry that pairs with the impending `obpi_lock_released` event per Token-Block Sub-Invariant 5.

## Important Context

**Last lock-event timestamp:** `2026-05-27T11:36:50.881234+00:00` (the `obpi_lock_claimed` event this handoff concludes).

**Last commit SHA:** `773b3d45` (chore: update .claude/.gzkit/docs from `gz git-sync`).

**Branch state:** `main` — 0 ahead, 0 behind `origin/main` after `gz git-sync --apply --lint --test`.

**Pre-condition that mattered:** The rule body of `.gzkit/rules/token-block-discipline.md` was authored 2026-05-07 — the artifact existed but no completion ceremony ever ran. The work was Layer-1 done, Layer-2 silent. `gz adr status` flagged this as "ledger proof of completion is missing" → diagnosed as missed-ceremony gap, not implementation gap. This handoff completes the audit-coupling the OBPI authored, for the OBPI itself.

**Brief defects surfaced and corrected mid-traversal:**
1. Verification commands were authored as shell-compound `test -f X && grep && echo Z` — pipeline runtime executes them shell-less, so `test` received `&&` as an argument and errored `unexpected operator`. Rewrote each as bare single-program `grep` invocation.
2. Brief line-183 prose claimed "No Gate 5 human attestation required for self-closure" — contradicts ADR-0.0.36 universal attestation (Gate 5 brief-level attestation is universal regardless of lane). Rewrote to reflect post-ADR-0.0.36 doctrine.
3. All 6 REQs are SUPPORT-kind per REQ Scope Discipline (ADR-0.0.59) but brief predates kind-tagging. Closed via `--accept-uncovered` with explicit SUPPORT-kind rationale; backfilling `@covers` would have been the tautological anti-pattern ADR-0.0.59 names.

## Decisions Made

- **Decision:** Drive ceremony from `--from=verify` rather than re-run implementation.
  **Rationale:** Implementation was done in spirit (rule file exists with all 5 sub-invariants); missing piece was ledger completion event, not code.
  **Alternatives rejected:** (a) Author new tests to make REQs @covers-covered — would have been tautological filesystem-grep tests, the ADR-0.0.59 anti-pattern. (b) Park diagnosis and clear pipeline markers — would have left ADR-0.0.41 BLOCKED for future sessions.

- **Decision:** Use `--accept-uncovered` for all 6 REQs with SUPPORT-kind rationale.
  **Rationale:** Brief predates kind-tagging; REQs are objectively rule-file content (not behavior); proof channel is artifact_edited ledger + structural validator per ADR-0.0.59.
  **Alternatives rejected:** Backfill `@covers` decorators — explicit anti-pattern per ADR-0.0.59 § Decision item 2.

- **Decision:** Edit brief Verification section and line-183 prose mid-traversal.
  **Rationale:** Brief drift is a defect the ceremony cannot complete past. Edits are corrections to authored canon (commands made runtime-compatible; prose aligned with ADR-0.0.36 universal attestation), not scope expansion.
  **Alternatives rejected:** Skip verification commands via pipeline override — would have suppressed the structural signal.

- **Decision:** Author this handoff at `.gzkit/handoffs/` (canonical per token-block doctrine), not at `{ADR-package}/handoffs/` (drifted skill prescription).
  **Rationale:** ADR-0.0.41 § Consequences (line 128–131) and token-block-discipline.md § Vocabulary explicitly name `.gzkit/handoffs/` as canonical. The drifted skill prescription is itself queued for correction under ADR-0.0.41 OBPI-05 (this session also routed GHI #528 as duplicate of that scope).

## Immediate Next Steps

1. Release the OBPI lock via `uv run gz obpi lock release OBPI-0.0.41-01-token-block-canon` — this handoff is the register-entry per Sub-Invariant 5.
2. Verify `obpi_lock_released` event lands in `.gzkit/ledger.jsonl` with `handoff_path` pointing to this file.
3. Confirm `.gzkit/locks/obpi/` is empty after release.
4. Update `rescue-and-repair-roadmap-2026-05-27.md` Workstream C with the OBPI-0.0.41-01 closure and surface findings (brief verification command class defect; SUPPORT-kind REQ retrospective).
5. Operator decision point: author OBPI-0.0.41-02/03/04/05 briefs to drive ADR-0.0.41 to attested, or park here and proceed to other Workstream C plates (#519 codex emergency, #532 sweep, #536 trivial fix, #480/#524/#527 validator backfill cluster).

## Pending Work / Open Loops

- **ADR-0.0.41 closeout remains pending:** ADR-level Gate 2/3/4/5 attestation has not run. OBPI-02/03/04/05 are checklist-only (not yet authored as briefs). The structural enforcement that THIS OBPI's doctrine specifies — release-precondition coupling, validator (`gz validate --lock-handoff-coupling`), reaping protocol — awaits those OBPIs.
- **Brief verification-command class defect:** the shell-compound assumption in brief Verification sections likely affects other briefs authored under the same template. Worth filing a GHI ("brief Verification commands assume shell wrapping; pipeline runtime executes shell-less") if not already covered by an existing audit GHI.
- **Pipeline did not auto-create lock-release handoff:** the runtime emitted `obpi_receipt_emitted` (completion) but did not release the lock or author a handoff. This is the structural gap OBPI-0.0.41-02/03/04 will close.
- **Lane mismatch advisory:** brief frontmatter says `lane: Lite` but `gz adr status` rolls it up under parent's heavy. Precomplete correctly recognizes Lite for BDD gating but REQ-coverage gate fires "heavy/foundation policy" via parent kind. Non-blocking but worth noting.

## Verification Checklist

- [ ] `uv run gz obpi lock release OBPI-0.0.41-01-token-block-canon` exits 0 and emits `obpi_lock_released` event.
- [ ] `ls .gzkit/locks/obpi/` returns empty.
- [ ] `uv run gz adr status ADR-0.0.41-token-block-lock-discipline` still reports OBPI 1/1 `attested_completed`.
- [ ] `git status --short` empty after subsequent sync.
- [ ] Branch `main` is `0 ahead 0 behind origin/main`.
- [ ] This handoff file exists at `.gzkit/handoffs/20260527T115144Z-obpi-0.0.41-01-token-block-canon-complete.md` and contains all four token-block minimum-information fields (timestamp, SHA, decision context, branch state).

## Evidence / Artifacts

- `.gzkit/rules/token-block-discipline.md` — the rule file this OBPI authored (and whose doctrine this handoff exercises).
- `docs/design/adr/foundation/ADR-0.0.41-token-block-lock-discipline/obpis/OBPI-0.0.41-01-token-block-canon.md` — completed brief (status: Completed; Verification section + line-183 prose corrected this session).
- `.gzkit/ledger.jsonl` — contains the full event trail for this traversal (claim @ 11:36:50, pipeline_launched @ 11:44:57, 6 × uncovered_accept @ 11:45:03, obpi_receipt_emitted @ 11:45:03).
- `.claude/plans/.pipeline-active-OBPI-0.0.41-01-token-block-canon.json` — pipeline marker (current_stage=`sync`, receipt_state=`pass`).
- `.claude/plans/.plan-audit-receipt-OBPI-0.0.41-01-token-block-canon.json` — plan-audit receipt (PASS, one advisory drift: ADR-0.0.42 OBPI-04 sibling-overlap on parent ADR file).
- Canonical ARB receipts (4): `arb-ruff-790611fd5d1349b59b4888b9b2e50787`, `arb-step-typecheck-18f81962b9874950bffbf7d7a80cb8b1`, `arb-step-unittest-2d40900ae9d24e829e8ca253cd91e337`, `arb-step-mkdocs-75182a2ef39a48d4863fa07584a21e26`.
- Commit `773b3d45` — pushed to `origin/main` via `gz git-sync --apply --lint --test` containing the brief edits, pipeline state, ledger events, and ADR status index regeneration.

## Environment State

Python `3.13`, `uv` runtime, macOS Darwin 25.5.0, branch `main` synced with `origin/main`.
