diff --git a/.claude/agents/presentation-claude-gemini.md b/.claude/agents/presentation-claude-gemini.md
index b2ecb1e..b55b3bf 100644
--- a/.claude/agents/presentation-claude-gemini.md
+++ b/.claude/agents/presentation-claude-gemini.md
@@ -182,4 +182,5 @@ After completing changes, report to the user:
- **2026-04-24 context-section concept-intro enrichment (65 → 68 slides)**: (1) Green pill `✅ Fresh every chat` (bg `#2e7d32`) added to slide 41 as the first pill before the 2 existing red pills — visual order green/property first, red/pitfalls after. (2) New slide 42 ("Claude's Brain", `data-level="context"`) and slide 43 ("What Loads at Session Start", `data-level="context"`) inserted between slide 41 and the old Skills section opener (old 42 → 44). Both new slides pull content forward from the old deep-dive slides 49/50 (which become slides 51/52 after the +2 renumber). Both carry full pillar-footers with Context active. Renumber technique: Python sentinel with per-occurrence targeting — `data-slide="42" data-level="skills"` and `data-slide="43">` were each targeted individually before the bulk 44-66→46-68 sweep, because slides 42/43 now have two occurrences each (new context + old skills). The CSS rule `.slide[data-slide="1"]` creates a false-positive when counting `data-slide` occurrences via regex — use `Counter` + ignore the CSS line, or grep for `
` with 3 items). Yellow callout div (`background: #fff8e1; border-left: 4px solid #f9a825`) at bottom of right column ties the academic finding to the "dumb-zone problem" vocabulary already established. Image file did NOT exist at insertion time — placeholder path used; user must drop `lost-in-middle.png` into `presentation/assets/concepts/context/`. Renumber method: Python sentinel replacing `data-slide="44"` through `"68"` → `"45"` through `"69"`, with a first-occurrence restore for the new slide's own `"44"` sentinel. New section-divider positions: **agents=23 (unchanged), skills=45, context=51, claude-md=56, commands=62, workflow=65**. Total slides: **69**.
- **2026-04-30 removed "How the Harness Reaches the World" (53 → 52 slides)**: slide was confirmed at `data-slide="14"` (content match, not cached number). It carried no `data-level` — journey bar unaffected. Removal rationale: this slide was added after the GDG Kolachi event (Apr 25, 2026) and does not belong in the historical event record. The slide lives on in the forked `presentation/claude-code-best-practice/index.html` (owned by `presentation-claude-code` agent) — the two decks are intentionally divergent from this point. Method: Python line-slice to delete lines 779-790 (banner comment + div + trailing blank), then sentinel renumber for old slides 15-53 → 14-52. No `goToSlide` hardcoded calls exist — no TOC update needed. Final section-divider positions: **agents=23, claude-md=33, skills=38, context=42, workflow=45**. Total slides: **52**. **Deliberate-divergence rule**: when the GDG event deck and the best-practice fork differ on a slide, record the rationale here (event-record vs canonical-reference) so future runs do not re-add the slide to the GDG deck.
+- **2026-04-30 etymology footnote mirrored from best-practice deck onto horse-harness analogy slide (`data-slide="13"`)**: added `
The origin is Old French harneis — gear, equipment, armor.
` immediately after the red subtitle on slide 13. The user referenced "slide 13" — and in this deck that number is still accurate post-fork (the deleted "How the Harness Reaches the World" slide was at position 14, not 13, so slide 13's numbering was unaffected). Located by content (inline SVG horse + caption pair) to confirm before editing. GDG deck's caption-pair text is identical to the best-practice deck: bold `"A horse harness. A model harness."` and red `"The model is the horse. Raw power, no direction. The harness is everything else."` — no rewording needed. Total slide count (52) unchanged. **Cross-deck mirroring rule**: when an edit lands on the sister best-practices deck and the equivalent slide exists in the GDG deck (inherited from the original fork), evaluate whether to mirror it. Mirror when the change is generic content that fits both decks (etymology of "harness" is universally true); skip when the change is event-specific or when the slides have diverged structurally. Locate by content, not by slide number — post-fork deletions can cause numbers to drift.
- **2026-04-24 mass deletion (slides 45-69) + single replacement + image relocation (69 → 45 slides)**: (1) Images `context-window.jpeg` and `context.jpg` moved from `presentation/assets/concepts/` to `presentation/assets/concepts/context/` alongside the already-resident `lost-in-the-middle.png`. All 5 `
![]()
` references updated via sed (2 old-path `context-window.jpeg` refs, 2 old-path `context.jpg` refs, 1 `lost-in-middle.png` → `lost-in-the-middle.png` filename fix). (2) Slides 45-69 deleted (all 25 slides + their banner comments, lines 2289-3057 in 1-indexed) by slicing the lines array in Python and re-joining — the Python line-slice approach is the cleanest for deleting a contiguous range; no sentinel needed because no renumbering occurs within the retained block. (3) New slide 45 inserted in the same atomic write: `section-slide` with `data-level="workflow"`, h1 `📘 Workflow`, yellow pill `.claude/commands/`, green pills for Reproducible recipes / Same steps / Team-shareable, and a full pillar-footer with Workflows as the ONLY active card (all four others inactive). **Final state**: 45 slides, contiguous 1-45. data-level assignments: agents=23 (first), claude-md=33 (first), skills=38 (first), context=42 (first), workflow=45. Note: `commands` level is gone from data-level assignments (no remaining command-section slides). `LEVEL_LABELS` in JS still contains `'commands'` as a key — this is harmless (no slides will fire it) but should be removed in a future cleanup pass if desired. **Python line-slice pattern**: `before = lines[:del_start_0idx]`, `after = lines[del_end_0idx + 1:]`, new_content = join(before) + new_html + join(after). Atomic, no collision risk, trivially auditable.