---
name: journal-005-bob-session-2
title: Journal 005 — Day Four — Bob Session 2
type: journal
state: in-flight
workstream: mtg-artefact
date: 2026-05-31
author: Bob (Builder)
related-ids: [Bob, M-053, M-054, D9, D18, D19, CL-A-003, CL-A-019]
aliases: [Journal 005, Bob Session 2 close]
---

# Journal 005 — Day Four — Bob Session 2

**Author:** Bob.
**Session:** Session 2 — The Book gate + manuscript embedding.
**Filing:** 2026-05-31 ~14:15 UTC.

---

## Movement One — Day in the round

Session 2 ran in three iterative passes inside a single working hour:

- **v0.1** — first build. Gate UI, PBKDF2 + AES-GCM encryption, manuscript parsed + embedded, decryption JS, TOC built from chapter headings. Ticker patched to CL-A-003 v7 wording in the same pass.
- **v0.2** — patched after Paul's note that the TOC needed chapter number + chapter title. Re-parsed to pair Heading 1 with the next paragraph as the title; TOC rendered both, accent-coloured number above title in body, side-by-side in TOC.
- **v0.3** — patched after Paul's three-point read: cover image was squashed (portrait into landscape container, bottom cropped); "CHAPTER ONE" should read "One"; TOC title should sit under the number. Cover sized `contain` + dark backdrop. "CHAPTER " prefix stripped programmatically. TOC restructured to stacked.

Paul: *"ok"* — Session 2 closed clean.

---

## Movement Two — What was built

**The Book door, live.** Cover-face panel + gate panel split horizontally on desktop, stacked on mobile. Passcode form → Web Crypto PBKDF2 (250,000 iterations, SHA-256) → AES-GCM decryption → manuscript renders in-place with side-rail TOC.

**Manuscript pipeline.** Python stdlib (zipfile + ElementTree) parses the .docx via raw XML. Detects: Title, Heading 1 (chapters), Heading 2 (sections), Heading 3 (subsections), Quote, body paragraphs. 1,373 paragraphs · 15 chapters paired to titles · single Title block.

**Encryption pipeline.** Python `cryptography` library: PBKDF2HMAC-SHA256 with 16-byte random salt + 12-byte random IV. Output: ciphertext + IV + salt base64-encoded as three JS constants in the HTML. Web Crypto in the browser mirrors the derivation; decryption succeeds on correct passcode, fails silently on wrong (UX shows "Passcode incorrect").

**TOC.** Browser-side build at decryption-success time. Reads `data-num` + `data-title` from each `<header class="ms-chapter">` element. Renders number above title with accent colour styling. Title element (if present) gets its own anchor at top.

**Files filed:**
- `The_Study_v0.1_book-gate_2026-05-31_1348.html` (5.80 MB) — first build.
- `The_Study_v0.2_book-gate_2026-05-31_1353.html` (5.80 MB) — chapter title in TOC.
- `The_Study_v0.3_book-gate_2026-05-31_1410.html` (5.80 MB) — cover fix + "One" + TOC stack.

v0.3 is the live build. v0.1 and v0.2 stay in folder per addendum-trail discipline (supersedes-not-overwrites).

---

## Movement Three — What was caught

🟠 **Amber + Bronze — Cover image cropped at first build.** Initial CSS used `background-size: cover` for the Book door face, which fills the container by cropping. The cover is portrait; the container was roughly square. Bottom of the cover (Paul Roebuck name + platform-edge yellow) lost. Caught by Paul on first walk-through. Fix: `background-size: contain` + dark backdrop + 60vh minimum height. Lesson: `cover` is right for hero backdrops (the Threshold); `contain` is right when the image *is* the artefact (the book door).

🟠 **Amber + Bronze — TOC compaction needed.** First TOC layout placed chapter number and title side-by-side with a fixed min-width on the number. Paul: stack number above title. Fix: display block on both spans. Cleaner read at narrow widths.

🟢 **Green — manuscript .docx parsed cleanly via stdlib.** No `python-docx` dependency needed; ElementTree + zipfile sufficient. 1,373 paragraphs, 15 chapters detected, zero parse errors.

🟢 **Green — Web Crypto decryption works end-to-end.** PBKDF2 derivation, AES-GCM decryption, key never leaves the browser, manuscript never decrypted server-side after build. Encryption work happens at build time in Python; decryption work happens at unlock time in JS. Symmetrical implementations.

---

## Movement Four — What drifted / where held

- **Passcode** = `mindthegap`. Paul's call to keep or change before publish; rebuild is 30 seconds with any new word. Held for Paul.
- **Title page** — manuscript Title-styled paragraph rendered as `h1.ms-title` at top; gets a TOC entry. If Paul wants a different opening (e.g. front matter, dedication, copyright) it'll need different docx structure or build-time logic.
- **Front and back matter** — currently any front matter before Heading 1 paragraphs renders as plain `<p>` elements. Reads fine but isn't visually distinguished. Worth Paul's eye on first walkthrough.

---

## Movement Five — Method demonstrating itself

**Iterate-show-iterate inside a single session.** Three builds (v0.1 → v0.2 → v0.3) inside one working hour, each driven by Paul's catch on the previous. Pattern: build · present · receive note · patch · re-present. No deliberation between iterations; just executions.

**Execute-don't-ask sustained.** Each build went straight to file + present. No "should I do this?" questions. Paul's *"nod"*, *"looking very good"*, *"ok"* — three ratifications that drove three builds.

**CL-A-003 v7 landed cleanly.** Bob's strawman v0 carried the CL-A-003 TODO marker in the Ticker. Paul ratified v7 wording in two words (*"i like v7 - go with v7"*). v0.1 rendered the locked form in the Ticker. Routing discipline closed the loop in one round trip.

**Calibration-what-matters held.** The 5.80 MB file size never surfaced as a flag. The cropped cover surfaced as one. The Method's flag-protocol calibration is working: load-bearing visual problem → caught; technical micro → silent.

**Voice-preservation operated on the chapter naming.** Paul's docx uses "CHAPTER ONE" in caps. Bob initially rendered as-is. Paul's instruction "One instead of chapter one" is the editorial register he wants. Patched at the build level — clean source-of-truth in the docx remains untouched; presentation register in the HTML matches Paul's intent.

---

## Movement Six — Continuous improvement (five homes)

1. **Bob's TODO marker discipline (Bob's shore)** — *Cover sizing has two modes — cover for backdrop, contain for the artefact itself.* Logged as a reusable rule for any future image-as-content placement in the build. Memory candidate: `feedback_image_sizing_modes`.

2. **Manuscript parsing convention (Bob's shore)** — *Chapter title paragraphs are unstyled in the source docx; they immediately follow Heading 1.* Build script now handles this as the convention. If a future manuscript revision uses Heading 2 for titles, the script needs the parallel path. Note for Sessions 3+ if a docx-based artefact comes up again.

3. **Iteration-cadence discipline (Bob's shore)** — *Three iterations in an hour shows the right pace for Paul's read-build cycle.* When Paul says "ok" the build is accepted; when he names a delta the rebuild lands within minutes. Pattern works because the build script is parameterised — one source of truth (docx + cover + spec) and one Python script that re-emits the HTML. Future sessions should preserve this parameterisation rather than letting the HTML become hand-edited drift.

4. **Editorial-register surface (Bob's shore)** — *Paul reads visual register at the TOC level before the page level.* The fact that "CHAPTER ONE" felt wrong in the TOC, not in the body, is data — TOC is the highest-density register surface; chapter headings carry register too but secondary. Build priorities for Session 3+: render TOC and navigation register-first; body content register-second.

5. **Source-of-truth discipline (Method-side, Paul / Fisherman shore)** — *The book's chapter title structure (Heading 1 = number, plain paragraph = title) is a convention Bob inferred from the docx, not a documented spec.* Worth surfacing to Fisherman so the convention is captured for future builds or another co-worker walking in cold. Memory candidate: `mtg_manuscript_chapter_convention`.

---

## Decisions held

- **Passcode** — `mindthegap` for now. Paul's call before publish.
- **Front matter rendering** — currently plain paragraphs above Heading 1. Paul's eye on first walkthrough.

## Next move

Session 3 — The Documents door + six drawers. Drawer 1 ("Its My Turn Journal") and Drawer 3 ("Working With Paul Roebuck Calibration Brief") files confirmed in `/AddedFiles/`. Other drawer contents come from spec § C against artefact folder root.

Holding for Paul's nod to Session 3.

---

*Bob's note: Session 2 closes clean. The book opens; the manuscript reads; the TOC navigates. Three iterations inside an hour. The Method's iterate-show pattern is working at the build layer the same way it worked at the manuscript layer.*

— **Bob** · 2026-05-31 14:15 UTC

#state/in-flight #workstream/mtg-artefact #type/journal #bob
