Generative Assets · Signal Series

Guide — how memo № 202 was made

The letterform that heals itself

HAMMING is a Bell-Labs-memo page where a message streams as live Hamming(7,4) codewords. Noise flips bits; three parity checks triangulate each wound; the corrupted glyph — lurched across the Recursive variable font's axes — snaps back healed. Its single job: make redundancy feel like armour, not overhead.

¶ 1Concept

Wave 9 is signal versus noise, and this site takes the error-correction link in the chain. The fiction is a 1950 technical memorandum that computes itself: the sentence THE MESSAGE REPAIRS ITSELF travels as twenty-six Hamming(7,4) codewords, one per glyph, under continuous synthetic noise. The audience is anyone who has heard “ECC memory” and never seen the arithmetic point at a wound. Nothing on the page is scripted theatre — every syndrome shown is computed from the received bits at that moment.

¶ 2Palette — argued from the 1950 memo

#F1EDE2 · memo paper
Aged typing stock, warmed slightly; a faint 3px scanline gradient stands in for laid texture. No raster, no noise PNG.
#22303B · typewriter ink
Blue-black ribbon ink, 11.6:1 on the paper. Carries all body copy and the healed glyphs.
#C03B2D · error strike
The LINE/MARK accent — flipped cells, target rings, fault stamps. Text in red steps down to the ink variant below.
#8F2A20 · red ink
Derived darker red for small red type (fault labels, the corrupted glyph itself) so error text still clears 4.5:1.
#2E5E8C · parity blue
The guard colour: parity cells, passing checks, the inspector's calm. 5.8:1 on paper, safe for labels.
#5A6670 · soft ink
Captions and marginalia at 5.1:1 — quiet, still legible, never the bright accent doing text duty.

¶ 3Type — the corruption axis is the design

Recursive — healed
The living glyphs, wordmark, HUD numerals. Healed state pins the axes at MONO 1 · CASL 0 · CRSV 0 · slnt 0 · wght 450 — a composed, typewriter-adjacent voice that matches the memo.
Recursive — struck
Corruption is the same font with the dials wrenched: MONO 0 · CASL 1 · CRSV 1 · slnt −15 · wght 300 or 860–999. The noise doesn't swap glyphs — it drags the letter across the variable axes, so damage and repair are continuous, not a cut.
Courier Prime
Memo body — the typewriter voice for prose, captions and the service ledger's labels. Recursive stays reserved for anything alive.

¶ 4Techniques

Genuine Hamming(7,4). encode() places parity at positions 1·2·4 over data at 3·5·6·7; syndrome() XORs the three cover sets (1·3·5·7, 2·3·6·7, 4·5·6·7) and reads the failing checks as a binary address; decode() re-derives the nibble from the received bits. The displayed letter is always decode() of the current codeword, so a data-bit flip really does print the wrong letter (the message's sixteen-slot codebook maps nibbles to glyphs, thirteen assigned, three spares that print as garble). QA drives all 16 codewords through all 7 single-bit flips — 112 cases — and asserts every syndrome equals the flipped position.

The signature choreography. A strike flips a bit in the SVG bit-lattice, red-flags the cell, and tweens the glyph's font-variation-settings to the corrupt pose over 650 ms with a back-overshoot ease. The parity inspector then runs the three checks live at 360 ms intervals, stamps the syndrome, rings the located cell for 620 ms, flips the bit back, and eases the axes home over 820 ms. One rAF drives all axis tweens; it pauses on document.hidden and every phase writes absolute state so a throttled tab never desyncs.

Honest failure. One auto-strike in twelve is a double fault. The syndrome then genuinely points at a third, innocent bit; correction lands on a valid but wrong codeword; the exhibit compares against what was sent, stamps DOUBLE FAULT — SYNDROME MISLED, retransmits, and counts it separately in the ledger. Striking a queued codeword twice by hand reproduces it on demand.

Everything is measured. The ledger increments only on verified events — located requires the computed syndrome to name the one genuinely flipped bit; corrected requires the received word to equal the sent word again. A state probe (window.__hamming) exposes struck/located/corrected, the live syndrome, the service phase and per-block axes, so the QA harness gates on state, never wall-clock.

No raster anywhere. Bit-lattices and the parity Venn are inline SVG; the paper grain is a repeating CSS gradient; the wordmark's opening wound-and-heal is the same axis tween the exhibit uses.

¶ 5Iteration log

Pass 1 — Craft
  • Stat-card headlines (“4 / 7 ≈ 0.571”, “16 × 8 = 2⁷”) wrapped mid-equation at desktop widths — set nowrap and stepped the size down a notch.
  • The history margin-note quoted the corruption slant as −12 while the code lurches to −15 — corrected the copy and retuned the note's own casual stroke to the same −15, so the number on the page is the number in the code.
  • Codebook spare rows read “unassigned — garble” and wrapped to two ragged lines; shortened to “garble”.
  • Ledger had dead space under the counters — filled it with the measured noise schedule (one strike every 4.3–5.7 s, one in twelve a double) instead of ornament.
Pass 2 — Depth
  • Found and fixed a real intake bug by driving the behaviour: the service machine started synchronously inside strike(), so the second flip of every double fault was refused — the signature failure mode could never occur. Deferred the intake one tick; the QA harness now produces and verifies a genuine miscorrection.
  • Second-read micro-interaction: rest the cursor on any idle block and the inspector audits it — three PASS checks and syndrome 000, so the calm state is inspectable, not just the crisis.
  • Codebook rows highlight every block in the stream carrying that nibble on hover.
  • Entrance: the wordmark's second M loads struck (red, casual, slanted) and heals over 1.4 s, gated on fonts.ready — the whole thesis in the first breath.
Pass 3 — Hardening
  • 375px: the 62px bit-lattice overhung its 44px block column; blocks are now a fixed 64px so the tape wraps cleanly — nav, wordmark and scrollWidth verified inside the viewport headlessly.
  • Reduced motion: no auto-noise, no tweens — the page loads with one instantly-completed worked example (ledger 1/1/1, syndrome shown, residual 0) as the settled frame, and the two-frame hash check confirms it holds still.
  • Chanel rule: removed the exhibit panel's offset drop-shadow — the memo sits flatter and truer to paper.
  • Closed an unclosed <div> in the noscript fallback; zero console errors across desktop, 375px and reduced-motion runs; rAF and the noise timer both stop while the tab is hidden.

¶ 6Measured at sign-off

Headless verification on the shipped build: 16/16 codewords encode clean (syndrome 0), 112/112 single-bit flips located at the exact flipped position, every injected strike healed with struck = located = corrected in the ledger and residual 0, one injected double fault owned and retransmitted, glyph axes back at MONO 1 · CASL 0 · CRSV 0 · slnt 0 · wght 450 after service, zero console errors on every run.