diff --git a/CLAUDE.md b/CLAUDE.md
index 7eff6b0..f627257 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -109,7 +109,7 @@ Stage with **explicit paths only** — never `git add -A` or `git add .`. Cursor
## Quality Gates for Example Runs
- `docs/VISUAL-STYLE.md` is the **binding** render standard; deviations are defects.
-- **Contact-sheet gate:** composite the candidate hero beside the pinned calibration set — currently `armature-bend`, `damped-track-aim`, `bmesh-gear` — commit the composite under `docs/gallery/contact-sheets/`, link it in the PR body, and report per-criterion verdicts (stage darkness, wedge warmth, subject fill, saturation, thumbnail legibility) including mean luminance versus the calibration images. A claim without the committed composite is not acceptable evidence. The pinned set is updated (here and in `docs/new-example-prompt.md`) when a new example outclasses a member; the longer "calibration references" list in `docs/VISUAL-STYLE.md` is a style reference, not this contact-sheet set.
+- **Contact-sheet gate:** composite the candidate hero beside the pinned calibration set — currently `armature-bend`, `damped-track-aim`, `bmesh-gear` — commit the composite under `docs/gallery/contact-sheets/`, link it in the PR body, and report per-criterion verdicts (stage darkness, wedge warmth, subject fill, saturation, thumbnail legibility) including mean luminance versus the calibration images. A claim without the committed composite is not acceptable evidence. **This list is the canonical home of the pinned set** — update it here when a new example outclasses a member; `docs/new-example-prompt.md` points here rather than naming members. The longer "calibration references" list in `docs/VISUAL-STYLE.md` is a style reference, not this contact-sheet set.
- **Falsification:** every check must be proven to fail once — break the contract, observe the non-zero exit, restore — with the probe and the measured error reported in the PR body. An assertion that cannot fail witnesses nothing.
- **After gallery regeneration** (`python scripts/build_gallery.py`), read the **generated HTML** character by character — the `
` text and witnesses callouts in `docs/gallery/index.html` and `docs/gallery//index.html` — not just `examples/gallery.json`. Precedent: the `teaches.split(".")[0]` bug truncated 14/21 card alts at dotted API paths like `bmesh.ops` while the source JSON looked fine (fixed in PR #68).
diff --git a/docs/new-example-prompt.md b/docs/new-example-prompt.md
index e9d1bb0..28ace5e 100644
--- a/docs/new-example-prompt.md
+++ b/docs/new-example-prompt.md
@@ -98,11 +98,12 @@ objects are not visible unintentionally, and materials, lighting, background, an
camera feel designed rather than left at Blender defaults.
Contact-sheet gate (required before shipping the still): place the new hero beside
-the pinned calibration set — currently `armature-bend`, `damped-track-aim`,
-`bmesh-gear` — and compare stage darkness, wedge warmth, subject fill, saturation,
-and thumbnail legibility side by side. Do not ship until the new image holds up in
-that lineup—not merely "looks fine alone." Update this named set (here and in
-`CLAUDE.md`) whenever a new example outclasses one of them. One successful render
+the pinned calibration set — canonical membership is listed in `CLAUDE.md`
+§ Quality Gates for Example Runs — and compare stage darkness, wedge warmth,
+subject fill, saturation, and thumbnail legibility side by side. Do not ship until
+the new image holds up in that lineup—not merely "looks fine alone." When a new
+example outclasses a member, update the pinned set in `CLAUDE.md`, its canonical
+home. One successful render
command is not proof that the image is good, and neither is the second. Commit the
composite under `docs/gallery/contact-sheets/`, link it in the PR body, and report
per-criterion verdicts including mean luminance versus the calibration images — a