# Handoff — 2026-08-05, revision b

**Supersedes `docs/HANDOFF-2026-08-05.md`.** Session A in that file — P1-0c — ran, stopped at its
source gate, and is now closed as superseded. Session B — P1-1a — is unaffected and **must not be
restarted or interrupted**; it was never blocked by the gate.

Everything either agent needs to know about *state* is in `docs/PROJECT-STATE.md`. Everything about
*task* is in its prompt file. Nothing else needs to be explained in the chat window.

---

## What happened, in three sentences

P1-0c was told to **extract** six values verbatim from the pinned prototype. Three of them are rows
that C11, C12 and D6 **create** — a prototype pinned before a correction cannot contain the row that
correction adds — so the assignment stopped on a category error rather than on a project blocker.
The fourth, A3, produced a real finding: the pin recomputes both codes per run, which falsifies the
premise that a permanent natural key was there to be extracted.

The agent's stop was correct against its instructions and its report is accurate. **The prompt was
wrong, not the execution.** Re-running P1-0c reproduces the stop exactly.

---

## Session A′ — P1-0d · the corrective assignment

Fresh session. Paste this as the opening message:

> Read `docs/PROJECT-STATE.md` first — it is the only source of project state in this repository,
> and every other document is a record of a moment, not current status.
>
> Then execute `docs/AGENT-PROMPT-v5-P1-0d.md` exactly as written. It supersedes
> `docs/AGENT-PROMPT-v5-P1-0c.md`; do not execute that file. `docs/p1-0c-status.md` is accurate,
> is reused, and is not re-derived.
>
> Documentation only. **Deliverables 1–3 have no dependency on any seed row — do them first and let
> them land.** Then transcribe the rows already found at `9359c67`, then author the three v5.0 rows
> under per-field provenance, then resolve A3 by measurement.
>
> **`absent` is a legitimate result for a field. It does not stop the row, and a row does not stop
> the assignment.** Inference from neighbouring rows, counts, or the annex's marginal domains
> remains forbidden.

## Session B — P1-1a · unchanged, keep running

Nothing about P1-1a changes. If it is mid-flight, leave it. If it needs a nudge, the only new fact
it needs is:

> `MatchGroupID` loses its CodeLedger bucket — it is a run-scoped grouping label, not an entity.
> `BRCode` keeps its bucket; issuance stays P1-1b. Create the column and the surviving bucket only.

---

## What P1-0d will hand back

`docs/p1-0d-status.md`, an updated `PROJECT-STATE.md`, `docs/p1-0-c20-authored-rows.md`, the
extracted rows inside the drafts, provenance markers on every column, B2/B3/B4/B12 specified, and
the A3 collision-measurement table.

**The line to check first is the list of fields it marked `absent`** — with an authored-row model,
that list is the real result, exactly as "what it could not find" was under the extraction model.

**The second line to check** is whether C9 and C15 are ticked in `docs/project-todo.md`. They close
on transcription alone and require no decision from anyone; if they are still open after P1-0d, the
assignment did not do deliverable 4.

## B1 — decided 2026-08-05, and P1-1a needs the one-line version

The reference-counted default was **rejected**. B1 closed by specifying the storage model the
lifecycle draft never stated. If P1-1a is anywhere near the tombstone path, give it this:

> **Byte storage is per capture. A byte object belongs to exactly one capture event and is never
> shared between captures, even byte-identical ones. `RetainedContentHash` is a duplicate-detection
> index and is never a storage pointer — no storage-pointer column, no path derived from the hash,
> no two `Document` rows resolving to the same storage asset ID.** Reference counting is not
> implemented. §3 eligibility is unchanged and is now the second barrier, not the only one. Purge
> is capture-scoped storage hygiene and is never named, logged or presented as erasure.

Full reasoning and the rejected alternatives: `docs/p1-0-b1-decision.md`.

## Do not hand over

- `docs/AGENT-PROMPT-v5-P1-0.md`, `-P1-0b.md` and now `-P1-0c.md` — executed or superseded, history.
- `docs/HANDOFF-2026-08-05.md` — this file replaces it.
- `docs/p1-0-review-findings.md`, `docs/FDR-to-Sibyla-decisions-for-Luis*.md` — historical, and both
  open with a "do not sign off yet" that was true on 2026-08-04 and is not now.
- Any summary of state written in a chat window. If it is worth an agent knowing, it belongs in
  `PROJECT-STATE.md`.

## The process fix, so this does not recur

Two lines belong in `AGENTS.md` at the next edit:

1. **An assignment states, per value, whether it is *extracted* or *authored*.** A value a decision
   creates is never listed as an extraction. This one mislabelling cost four unrelated deliverables.
2. **A gate is scoped to its deliverable, never to the assignment.** A missing seed row stops that
   row. It does not stop provenance markers, governance specification, or decision folding that
   never touched it.
