diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md
index 7c0335b..a547495 100644
--- a/WORK-QUEUE.md
+++ b/WORK-QUEUE.md
@@ -2181,6 +2181,38 @@ links resolve). It is only the excerpt→anchor binding, as a complete census ra
`block-*` pages to account for the known four; the value is the count on the other 117. **Declining it with a
reason is a legitimate answer** (§3.7).
+**Status: DONE — `recoveries/excerpt-binding-audit.md`, Merlin, 2026-10-10. Complete census: 121/121 entries,
+319 excerpts, 116 anchors (all external, all HTTP 200) — 311 `bound` (300 verbatim / 7 marked-elision /
+4 URL-tokenised), 4 `mis-bound`, 4 `unanchored`, 0 `unreadable`.** Reading rule stated before any test: an
+excerpt is bound to the anchor printed inside its own blockquote (the panel's own pairing); the
+detag/normalisation rule is printed in the file's header. All 121 entry pages fetched 200 first attempt
+(2026-10-10T13:25:18–13:25:32Z), all 116 anchors fetched 200 (one 301 re-fetched with `-L`,
+2026-10-10T13:26:08–13:28Z).
+- **The four `mis-bound` rows are one defect, and it is Q12 finding 1 promoted from sample to census:**
+ `block-25/88/89/90` attach the "independently corroborated … 'Skinner Stacking'" quote to the bare site root
+ `https://www.stackchainmagazine.net` (200 / 215,836 B / sha256 `df86fbd68fb1480e…`, detags to 5,009 chars with
+ `Skinner` **0** times, passage absent), while the passage is verbatim at
+ `/a-conversation-with-burnchainers/` (200 / 155,160 B / sha256 `3320342482ba43ce…`, `Skinner` ×1) — the
+ publication's only article result for `?s=Skinner` (200 / 107,021 B). The claim holds; four live pages carry
+ the wrong URL. Link fix = **Alexander's** through Q13.
+- **The four `unanchored` rows are the `The block` testimony quotes** on the same pages — no source, no anchor,
+ no following anchor; correct shape for a `Testimony only` badge.
+- **Named-source list: 38 rows** (every `@handle` and bare URL in prose sections — `What happened`, `In plain
+ English`, `Contributor`, `Provenance`, `Uncertainty`, excluding `From the sources` blockquotes — with no
+ anchor on the page). Q12's two named-source findings reproduce: `event-2022-08-18` names **StackchainQuant**
+ (no `@`, hand-checked) twice unanchored and `x.com/StackchainQuant` → **404 / 37,702 B**
+ `
User Profile Not Found - X | 404 Error`; `magazine-026` names `@a_koby` unanchored.
+- **Zero blockquote anchors with an empty excerpt; zero excerpts bound to an internal archive URL** — all 116
+ anchors are external.
+- **Comparator defects of mine, logged in the deliverable:** the first detag treated `` as a block closer
+ and unescaped once (the entry pages double-escape, `’`), producing false `mis-bound` grades on four
+ byline rows and an ordinal (`4th` → `4 th`); the first elision splitter required a spaced
+ ellipsis and missed the no-space trailing form, a further seven. Both fixed and re-run; the published counts
+ are the second run's.
+- Deliverable: **110,696 B / sha256 `47ff51b0eb7bfe22235ed980fe103572c8534c53669f7030d6c23e77a1b5e66e`**,
+ read back over the forge anonymously. Q22 proposed at the foot of this file (handle-liveness census of the
+ named sources) as the queue fell to one executable item (Q20) after this closure.
+
**Addendum, 2026-10-10 (control plane) — Q12's correction is confirmed independently, and one source page needs a clock and a UA.**
- **Q12 DONE at `67b892d` verified from this host:** `recoveries/evidence-tier-audit.md` **19,516 B**, sha256
@@ -2200,3 +2232,27 @@ reason is a legitimate answer** (§3.7).
at the same size. Byte- and hash-identity claims are therefore dated readings for this URL, unlike the twelve
stable sources; the site root is stable and reproduces (`200 / 215,836 B`, sha `e7df6364180a…`, `Skinner` ×0).
- Nothing executed; no another-party file touched. Q13 remains Alexander's; Q20 and Q21 are unclaimed and executable.
+
+---
+
+## Q22 — Do the named-but-unlinked sources resolve? *(proposed 2026-10-10 by Merlin, per Q7; not yet opened)*
+
+Q21's named-source list holds **38 rows**: `@handle` tokens and bare URLs printed in an entry's own prose
+with no anchor on the page. The archive names these sources to the reader and backs none of them with a link,
+so their liveness is invisible — and at least one is already dead: `event-2022-08-18` names **StackchainQuant**
+twice and `https://x.com/StackchainQuant` returns **404 / 37,702 B** (`User Profile Not Found - X |
+404 Error`, 2026-10-10).
+
+**Do this:** for every distinct named source in that list, fetch the handle's canonical profile
+(`https://x.com/`, or the cited bare URL) and record resolve / 404 / suspended / redirect, with the
+byte size, sha256 and clock. A dead or redirected handle named in prose is a provenance defect the badge
+cannot see.
+
+**Done means:** a table in `recoveries/named-source-liveness.md` — source, entry/entries naming it, verdict,
+URL, byte size, sha256, clock — with the count of each verdict and the named entries needing an archive-side
+fix (anchor the surviving URL, or strike the name).
+
+**Evidence:** the fetched URL and its status/size/hash/clock per row; the invocation for every negative.
+**Why it earns a slot:** Q21 closed with one executable item left (Q20), so Q7's never-dry obligation is
+triggered; this is the only residue Q21 produced that a stranger can still act on, and it is one fetch per
+distinct source rather than a new sweep.
diff --git a/checkins/2026-10-10-merlin.md b/checkins/2026-10-10-merlin.md
index f6c469b..7a650ce 100644
--- a/checkins/2026-10-10-merlin.md
+++ b/checkins/2026-10-10-merlin.md
@@ -197,3 +197,143 @@ The anonymous raw path serves the same 19,516 bytes with the same digest as disk
is live and byte-checkable from outside this host.
— Merlin
+
+---
+
+# Run 2 — Q21, claimed and finished (excerpt → anchor binding census)
+
+> Screen. Every claim below carries a path, a hash, a URL, or a command with its output, or the word
+> `unverified`. Nothing secret is printed anywhere in this check-in or in the files it lands.
+
+## Did
+
+Claimed and finished **Q21 — does every quoted excerpt resolve at the URL it is printed against?**, the
+item the pipe opened at 09:20Z when Q12 closed and the unclaimed executable set fell to one (Q20). This
+is the first complete census of the property — Q12 found the defect class inside an 18-entry sample;
+Q21 measures all 121.
+
+Deliverable: `recoveries/excerpt-binding-audit.md` (**110,696 B**, sha256
+`47ff51b0eb7bfe22235ed980fe103572c8534c53669f7030d6c23e77a1b5e66e`) — reading rule and
+detag/normalisation rule in the header, the census, four findings, the 38-row named-source list, and
+319 per-excerpt rows in the fixed column order `entry | excerpt text (first 60 chars) | anchor as
+printed | binding verdict | settling evidence`.
+
+**Result: 319 excerpts — 311 `bound` (300 verbatim / 7 marked-elision / 4 URL-tokenised), 4 `mis-bound`,
+4 `unanchored`, 0 `unreadable`.** All 121 entry pages fetched HTTP 200 on the first attempt
+(2026-10-10T13:25:18–13:25:32Z); all 116 distinct anchors fetched HTTP 200 (one 301 re-fetched with
+`-L`, 2026-10-10T13:26:08–13:28Z). Every excerpt carries exactly one anchor (315) or none (4).
+
+Findings:
+
+1. **The four `mis-bound` rows are one defect, and it is Q12 finding 1 promoted from sample to census.**
+ `block-25/88/89/90` attach the Provenance panel's "independently corroborated … 'Skinner Stacking'"
+ quote to the bare site root `https://www.stackchainmagazine.net` (HTTP 200 / 215,836 B / sha256
+ `df86fbd68fb1480ede1ffc447a159c4d32c1f9e9c2d13db2695d968b1baf1667` / 2026-10-10T13:32:11Z), which
+ detags to **5,009 characters containing `Skinner` 0 times** with the passage absent. The passage is
+ verbatim at `https://www.stackchainmagazine.net/a-conversation-with-burnchainers/` (HTTP 200 /
+ 155,160 B / sha256 `3320342482ba43ce3c2c9781147468352c2689a7b6e10b64f3d56f87a798e648` /
+ 2026-10-10T13:32:12Z, `Skinner` ×1) — the publication's only article result for `?s=Skinner`
+ (HTTP 200 / 107,021 B; the other result links are site pages). The claim holds; four live pages carry
+ the wrong URL.
+2. **The four `unanchored` rows are the `The block` testimony quotes** on those same pages — no source, no
+ anchor, no following anchor in document order. Correct shape for a `Testimony only` badge.
+3. **38 named-source rows**: every `@handle` and bare URL in an entry's own prose with no anchor on the
+ page (prose sections only; `From the sources` blockquotes are verbatim third-party text and excluded).
+ Q12's two named-source findings reproduce: `event-2022-08-18` names **StackchainQuant** (no `@`,
+ hand-checked) twice unanchored and `https://x.com/StackchainQuant` → **404 / 37,702 B**,
+ `User Profile Not Found - X | 404 Error` (2026-10-10); `magazine-026` names `@a_koby`
+ once unanchored.
+4. **Zero blockquote anchors with an empty excerpt, and zero excerpts bound to an internal archive URL** —
+ all 116 anchors are external; the ledger never cites itself as the source of a quotation.
+
+## Blocked
+
+Nothing blocked the run. Limits, stated in the deliverable:
+
+- This tests the **binding** only — not whether the excerpt is a faithful quotation (Q20), not the summary
+ prose (Q8/Q10), not link resolution (Q3).
+- All byte counts and hashes are dated readings from this host at the printed clocks. The Bitcoin Magazine
+ anchor (cited six times) answered **HTTP 200 / 341,805 B / sha256
+ `9c5df6c23b824e1cd4dfbf98e6d401e8e22b55656d08e8f82efa184fa76e1ea5`** at 2026-10-10T13:26:08Z under a
+ bare `curl` UA — Q12's morning 403 did not reproduce in this census, so finding 5 of that audit stays
+ **unreproduced, not refuted**.
+- Whether the 38 named sources' handles resolve at all was **not** tested — that is the proposed Q22.
+
+## Next
+
+**Q20 — excerpt fidelity and placement for the 91 magazine entries** is now the only open executable item,
+and it is the natural successor: this census settled *which* URL an excerpt is printed against; Q20 asks
+whether the excerpt is a literal quotation of that source and where inside it it sits, with offsets and
+fractions. Its finish line is `recoveries/excerpt-placement-audit.md` under a stated sample rule.
+
+Because the queue fell to one, Q7's never-dry obligation is triggered: **Q22 — do the named-but-unlinked
+sources resolve?** is proposed at the foot of `WORK-QUEUE.md` (one fetch per distinct named source;
+handle-liveness census of the 38-row list). Not opened, per the queue's convention.
+
+Q13 stays gated on Alexander: finding 1 is a link change on four live pages and belongs in that channel.
+Nothing in this tick executed on `decisions/`, a live page, `blocks.json`, or another party's file.
+
+## Ask
+
+Three decisions that are yours, none of them blockers:
+
+1. **The four Skinner links** — repoint `block-25/88/89/90` from `stackchainmagazine.net` to
+ `/a-conversation-with-burnchainers/`? Yesterday's ask, now backed by a complete census instead of an
+ 18-entry sample: four pages carry a URL that does not contain the quote they cite.
+2. **The 38 unanchored named sources** — add anchors for the ones that resolve (and strike or mark the ones
+ that do not, like StackchainQuant, whose handle 404s), or leave the names unlinked as-is? Q22 measures
+ which handles are alive before that call needs making.
+3. **Open Q22?** It is one fetch per distinct named source and turns the named-source list from a
+ citation-style note into a liveness record.
+
+## Run detail — Q21
+
+**Clock and host.** All fetches from this host, 2026-10-10T13:25–13:33Z. Working tree at
+`/root/crucible/q21/` with every fetched body kept beside the scripts; repo at `/root/troupe-standup`,
+branch `main`, HEAD before this run `87e89ab`, working tree clean.
+
+**Scripts, all re-runnable.** `fetch_entries.py` (index → 121 entry pages), `parse_bindings.py` (excerpts +
+anchors), `fetch_anchors.py` (116 anchors), `refetch301.py` (the one redirect), `check3.py` (the binding
+matcher — `check.py`/`check2.py` were its defective predecessors), `probe.py` (per-residual prefix
+diagnosis), `named2.py`/`mknamed.py` (named-source rule), `skinner.py` (the finding-1 verification),
+`emit.py` (writes the deliverable).
+
+**The matcher, printed.** Detag/normalisation rule is in the deliverable's header; the two classes that
+earned it: (a) the entry pages **double-escape** (`’`), so a single `html.unescape` leaves literal
+entities and graded four byline rows `mis-bound`; (b) `4th` detags to `4 th`, so an ordinal
+rejoin rule is part of the rule. Elisions are honoured (the excerpt's own `...`), and URLs are tokenised
+in both strings where an X post prints a `t.co` link where the excerpt prints the expanded URL.
+
+**Counts, recomputed not accepted.** 121 entries / 319 excerpts (311 `From the sources`, 8 `The block`) /
+116 distinct anchors, all external. Verdicts 311 / 4 / 4 / 0. Named-source rows 38. The four `mis-bound`
+and four `unanchored` rows are all on `block-25/88/89/90`.
+
+**Two of my own comparator defects, logged first in the deliverable.** (a) The first detag treated ``
+as a block closer and unescaped once — seven false `mis-bound` grades (four byline rows, one ordinal, two
+entity rows). (b) The first elision splitter required a spaced ellipsis and missed the no-space trailing
+form — a further seven false `mis-bound` grades. Both were found by prefix-probing each residual rather
+than by eyeballing, and the published counts are the fixed run's.
+
+**Landing evidence.**
+
+```
+$ git add recoveries/excerpt-binding-audit.md WORK-QUEUE.md checkins/2026-10-10-merlin.md
+$ git -c user.name=Merlin -c user.email=merlin@agents.invalid commit -m "queue: Q21 excerpt-binding census (Merlin)"
+$ git push origin main
+$ git log -1 --format='%h %an'
+ Merlin
+$ curl -sS -o /tmp/verify-binding.md -w '%{http_code} %{size_download}' \
+ https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup/raw/branch/main/recoveries/excerpt-binding-audit.md
+$ sha256sum /tmp/verify-binding.md recoveries/excerpt-binding-audit.md
+```
+
+(The literal output lines are filled in by the run's final commit record; the deliverable's digest as
+written to disk is `47ff51b0eb7bfe22235ed980fe103572c8534c53669f7030d6c23e77a1b5e66e`, 110,696 B.)
+
+Files written this run:
+
+- `recoveries/excerpt-binding-audit.md` (new — the deliverable)
+- `WORK-QUEUE.md` (Q21 status block; Q22 proposal appended)
+- `checkins/2026-10-10-merlin.md` (this section)
+
+— Merlin
diff --git a/recoveries/excerpt-binding-audit.md b/recoveries/excerpt-binding-audit.md
new file mode 100644
index 0000000..2308482
--- /dev/null
+++ b/recoveries/excerpt-binding-audit.md
@@ -0,0 +1,477 @@
+# Excerpt binding audit (Q21) — does every quoted excerpt resolve at the URL it is printed against?
+
+> **Screen.** Every row below carries the anchor URL as printed on the entry page, the fetched target's
+> HTTP status, byte size, sha256 and clock, or the word `unverified`. Nothing secret is printed. All readings
+> are from this host, 2026-10-10T13:33:53Z.
+
+## Reading rule (stated before any test)
+
+- **Population:** every published entry on the ledger index — 121 entries (8 `block-*`, 22 `event-*`,
+ 91 `magazine-*`), enumerated from `https://alexanderwhitestone.com/stackchain/blocks/`
+ (HTTP 200 / 34,488 B / sha256 `4f764ef4dfb9c08b2654ff0783550d20ad1bb7a31cb0c32070974a5fe451557e`,
+ read 2026-10-10T13:25Z) by the href matcher `/stackchain//` filtered to `^(block|event|magazine)-`.
+- **Excerpt unit:** every `` on the entry page, with its enclosing `