[13] Workbench
[13] · REFERENCE

Workbench

Encipher, decipher and crib-test in your browser — and the full toolkit with its solvers.

Three small tools that run on the same engine as my toolkit (core.js, unchanged), plus the full toolkit itself — the seven-phase decipher with its solver and key hunt, the transposition bench and the string experiments.

The full toolkit

Each toolkit page is self-contained — styles, scripts and language models inlined — so the larger ones are several hundred kilobytes. Everything runs in your browser; nothing is sent anywhere. Archived first versions: snowflake.html (the original idea) and the first workbench.

Encipher

Letters not in the key are dropped and listed. With 87 kept letters the output is split 29 / 31 / 27 like the note.

Decipher — phases 1 to 4

Transcribe → sequence → unwind the key motion → substitute. The orientation χ² before unwinding is the test: a note written with a regularly turning key would already have flat direction counts (χ² around 7 on 7 df), and Dorabella's is 26.6. Unwinding a regular turn that was never there does the smearing instead — watch the χ² drop. For the solver, scoring and key hunt (phases 5–7), use the full decipher tool.

unwound cells (phase 3)

letters (phase 4)

To see the hand tries from [06]: transcription primary, key snowflake fill, advance every symbol, step 1, forward or backward — the first line comes out YDIAWGXF… / YAKDWIWC…. (The hand tries restarted the key at every line; this tool runs straight through, so lines 2 and 3 differ.)

Crib pattern test

Does a word fit anywhere? A word's repeated letters must land on repeated glyphs, and its distinct letters on distinct glyphs — a hard constraint that needs no key and no solver. Runs on the resolved reading with a static key.

About the toolkit

  • One engine. Every page shares core.js; core.test.js runs 4,049 assertions including 3,360 encipher/decipher round-trips across the whole symmetry group, and asserts that every glyph convention leaves the statistics bit-identical.
  • Fails loudly. A guard script paints a visible banner on any JavaScript error instead of leaving a dead button, and the build refuses to finish if a template placeholder survives — an unbuilt template being mistaken for a page was a real bug once.
  • Checked like the lab. Sukhotin vowel detection and crib positions were checked byte-for-byte against the Python lab; the server's engine was checked against it on 4,107 transforms.
  • Legible. The dark amber theme went through a WCAG contrast audit and a legibility pass (badge and table header sizes, visible edges) before it was finished.