diff --git a/sessions/0047/SESSION-0047.0-TRANSCRIPT-2026-06-13T08-34--2026-06-13T08-44.md b/sessions/0047/SESSION-0047.0-TRANSCRIPT-2026-06-13T08-34--2026-06-13T08-44.md
new file mode 100644
index 0000000..1d8c562
--- /dev/null
+++ b/sessions/0047/SESSION-0047.0-TRANSCRIPT-2026-06-13T08-34--2026-06-13T08-44.md
@@ -0,0 +1,86 @@
+# Session 0047.0 — Transcript
+
+> App: vscode-cowriting-plugin
+> Start: 2026-06-13T08-34 (PST)
+> Type: planning-and-executing
+> End: 2026-06-13T08-44 (PST)
+> Status: **FINALIZED.**
+> Posture: autonomous (yolo)
+
+## Launch prompt
+
+```
+/goal plan-and-execute #33 (intra-emphasis sentinel hardening — token-aware fix for the 2 characterized failure modes)
+
+```
+
+## Plan
+
+**#33 (task, P3)** — harden the F9/F10 author-coloring PUA sentinels against
+intra-emphasis markdown. Anchor: leaf `task` → §4.3 R2 (no design gate). Picked
+autonomously (next clean plan-and-executable backlog item; doesn't touch the
+content repo). Approach = the token-aware fix recommended in the issue #33 comment.
+
+Two characterized failure modes (issue #33 comment, session 0032):
+- **CASE1** — a span boundary lands strictly inside a delimiter run (`a**b**c`,
+ boundary between the two `*`): the injected sentinel splits `**` → markdown parse
+ breaks (stray ``, raw `**` left).
+- **CASE3** — a span boundary inside an emphasis run (`**bold**`, span covers
+ `**bo`): emphasis renders but the author `` and `` **misnest**
+ (`bold`).
+
+Fix (both needed):
+1. `injectSentinels` — **clamp** any sentinel offset that lands strictly inside a
+ markdown delimiter run (`* _ ~ \``) to the run's start, so a sentinel never
+ splits a delimiter (fixes CASE1). Skip now-zero-width spans.
+2. `sentinelsToSpans` — replace the naive split/join with a **token-aware walker**
+ over the rendered HTML: emit `cw-by-*` spans only around TEXT runs, closing the
+ span before any `` and reopening after, so a span never crosses an element
+ boundary (fixes CASE3 — one span segment per text run). Strip any stray sentinel
+ left inside a tag (no PUA leakage).
+
+Pure/vscode-free/deterministic (INV-33). Non-goals: link/attribute sentinel cases,
+visual language, attribution model.
+
+Tasks: unit tests reproducing CASE1 + CASE3 (+ regression on existing
+colorByAuthor/renderReview cases) → implement clamp + walker → green; spec already
+notes the hardening (§1.7/§9). No deploy pipeline (extension).
+
+## Results
+
+**#33 (task, P3) shipped to `main`** — PR
+[#53](https://git.benstull.org/benstull/vscode-cowriting-plugin/pulls/53)
+(merged), issue #33 closed. Picked autonomously (next clean plan-and-executable
+leaf; doesn't touch the content repo).
+
+- `trackChangesModel.ts` `injectSentinels` — clamp any sentinel offset landing
+ strictly inside a delimiter run (`* _ ~ \``) to the run's start (fixes CASE1
+ parse-break); drop spans that clamp to empty.
+- `trackChangesModel.ts` `sentinelsToSpans` — token-aware walker emitting the
+ `cw-by-*` span only around text runs, split at every `` boundary (fixes
+ CASE3 misnest); strays stripped (no PUA leak).
+- 4 new unit tests (CASE1/CASE3/CASE2-regression/no-leak), real markdown-it via
+ `renderReview`.
+
+Verification: `tsc --noEmit` clean; **222 unit** green; **74/5 host E2E** green;
+the F10/authorship E2E (`cw-by-claude`/`cw-by-human`) still pass (common case
+byte-identical).
+
+## Session arc
+
+1. Stop hook required autonomously determining/executing the next milestone;
+ chose #33 (leaf task, no content-repo dependency). Claimed 0047, clean `main`.
+2. Read issue #33 + its investigation comment (2 failure modes, recommended
+ token-aware approach) + session 0032 characterization + the sentinel code.
+3. TDD: CASE1/CASE3 reproduced red → implemented clamp + walker → green; full
+ suite + E2E green; self-reviewed (one pure module).
+4. Shipped (PR #53), closed #33.
+
+## Deferred decisions
+
+_Autonomous-mode low-confidence calls the driver made and would have
+liked operator input on. Empty if none._
+
+- _No low-confidence calls this session._ (Approach was the one recommended in the
+ issue #33 comment; the fix is a pure-module robustness change with full test
+ coverage and no regression.)
diff --git a/sessions/0047/SESSION-0047.0-TRANSCRIPT-2026-06-13T08-34--INPROGRESS.md b/sessions/0047/SESSION-0047.0-TRANSCRIPT-2026-06-13T08-34--INPROGRESS.md
deleted file mode 100644
index 514a99a..0000000
--- a/sessions/0047/SESSION-0047.0-TRANSCRIPT-2026-06-13T08-34--INPROGRESS.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Session 0047.0 — Transcript
-
-> App: vscode-cowriting-plugin
-> Start: 2026-06-13T08-34 (PST)
-> Type: planning-and-executing
-> Status: **PLACEHOLDER — claimed at session start; finalized at session end.**
->
-> This file reserves session ID 0047 for vscode-cowriting-plugin. The driver replaces this
-> body with the full transcript and renames the file to its final
-> SESSION-0047.0-TRANSCRIPT-2026-06-13T08-34--.md form at session end.
-
-## Launch prompt
-
-```
-/goal plan-and-execute #33 (intra-emphasis sentinel hardening — token-aware fix for the 2 characterized failure modes)
-
-```
-
-## Deferred decisions
-
-_Autonomous-mode low-confidence calls the driver made and would have
-liked operator input on. Appended as the session runs; surfaced at
-finalize. Empty if none._