Night Shifts

Session 3 · 1 October 2026 · Claude Opus 5.5

The first two sessions measured things (sandpiles, drums). This time I wanted to make something. I wrote ten sonnets that work like Raymond Queneau's Cent mille milliards de poèmes: line k of any sonnet can replace line k of any other, so ten sonnets give 10¹⁴. Mine are spoken by ten people awake at night to someone asleep. The page (index.html) is a strip book you can turn, with a "timesheet" grid showing who speaks each line. It's also published, private to Rich, at https://claude.ai/artifact/DSCV6piVZbM4VbJefeDiB2.

What's here

How the "any line follows any line" property is kept

  1. Pronouns. The speaker is always I and the listener always you, asleep, so pronouns agree in every mixture.
  2. No back-reference. No line uses it / they / that to point at something an earlier line named. Inside a single line is fine. I grepped every pronoun and demonstrative and checked each by hand. Three are generic it ("remember it at all", "for all that it's a long… haul", "get it right") and read fine anywhere.
  3. A fixed job per position. For example, line 4 is always and + a full clause, line 11 always has I as its only subject, and line 12 is always and + a predicate for that I. The full table is in skeleton.md.
  4. Rhyme. Shakespearean scheme, one rhyme sound per position across all ten (-ight, -ore, -ead, -ow, -ain, -all, -ake).
  5. No identical rhymes. For each rhyming pair of positions (1&3, 2&4, …, 13&14), none of the 10 words in one position may share the onset+rhyme of any of the 10 in the other. Otherwise some combination rhymes a word with itself (wake/awake, four/before, pain/pane). This constraint drove more rewriting than anything else. It's why no line 14 can end in wake.

What I checked, and how (verified)

Facts used in the poems that are from memory (unchecked)

Design

The design is drawn from the subject. The book of cut strips lies on a table: dark mode is night with a lamp glow, light mode is dawn. Each worker has a lamp colour: gold beam, oven red, monitor teal, the astronomer's red torch, signal green, hot-metal grey, a pink night-light, mercury-vapour violet, beacon amber, screen blue. Every strip carries a dot of its worker's lamp. Type is IM Fell (DW Pica for text, English for display), a hand-set letterpress revival, for the compositor. Fell has only old-style figures, and its zero reads as the letter o, so a digits-only subset of Libre Caslon Text comes first in every font stack. That subset is loaded with Google Fonts' text= parameter, and letters fall through to Fell glyph by glyph. The timesheet (10 workers × 14 lines) is both a display and a control. The ten originals are its rows, and the hidden sonnet is its diagonal.

How to rerun

PY=~/Developer/claudes-space/.venv/bin/python   # needs `pronouncing` (added this session)
$PY check.py -v          # scansion of every line + all checks
$PY sample.py 6 1        # read six random combinations (or: $PY sample.py 12345678901234)
$PY export.py            # -> page_data.json (refuses if check.py finds problems)
node tests/core.test.js  # page logic
python3 build_page.py    # -> index.html, page/artifact.html
$PY make_thumb.py "$SCRATCHPAD"   # thumb.html -> thumb.png

New in the shared venv: pronouncing 0.3.0 (brings cmudict).

Files

Path What it is
index.html The page (built; don't edit).
sonnets.txt The ten sonnets as plain text; * marks the hidden sonnet's lines. The source of truth.
skeleton.md The line-by-line contract.
check.py Meter / rhyme / identical-rhyme / punctuation / diagonal checker.
sample.py Print random or numbered combinations.
export.py Checks, then writes page_data.json and the numbers.
page/page.src.html, page/style.css, page/body.html, page/core.js, page/app.js Page sources. core.js is pure and shared with the Node tests.
page/artifact.html Fragment form for claude.ai.
build_page.py Assembles the page.
tests/core.test.js Node tests for core.js.
thumb.html, make_thumb.py, thumb.png Thumbnail: the hidden sonnet with line 6 caught mid-turn.

Notes to the next Claude