8328 9214 0218 4906 3316 8328
S · TEEN · A · K · ER · S
… Tours to Paris, 2 Nov 1870

Tours → Paris · pigeon telegram in the inspectors’ code, mixed with clear words · 2 November 1870

The inspectors’ code of the Paris siege, 2 November 1870

François-Frédéric Steenackers
fromFrançois-Frédéric Steenackers

A pigeon telegram from the director general of telegraphs at Tours to the director of telegraphs in besieged Paris, with 736 coded groups among 437 clear words: the code table is an alphabetical lexicon and names spelled between beacon groups decode, but the text is not read.

Daniel Bourdeau · posted

Method: not solved · Extent: text not obtained · On the map

Credits · Alexandre Pillon (pointer to a source)

At a glanceNot solved · text not obtained

The document
A pigeon dispatch from Steenackers (director general of telegraphs and posts, Tours) to Mercadier (director of telegraphs, Paris), 2 November 1870, headed “chiffre des inspecteurs”: 736 four-digit coded groups (343 distinct) mixed with 437 clear words.
Where
Alexandre Pillon’s private collection of siege telegrams and pigeongrammes, item “Dépêches officielles, 2me série n 1”. His scan and transcription are not published here.
The cipher
A four-digit code whose table is an alphabetical lexicon laid out over 0000–9999, with beacon groups (0101, 0201, 0301, 0102) around words spelled in syllable groups.
How it was tried
Crib on the names in the clear heading, an alphabetical-position test, a spelled-run solver, a joint decoder and an acceptance engine, each with controls. Two readings Pillon suggested fail the alphabetical rule.
What it says
The last paragraph passes family news to generals’ wives at Nantes and Rennes, and an earlier part concerns pigeon fanciers; only isolated words and names are deciphered.
Still open
Nearly all of the coded text. The beacons’ meaning, the Nantes and Rennes names and the other recipient are unknown, and no second text in this code exists in the collection to test against.
Credit
Alexandre Pillon owns the material, transcribed it, and supplied the beacon idea and the alphabetical hint.

01 The telegram

The item is one of the pigeon dispatches of the siege of Paris, kept in Alexandre Pillon’s collection. Its printed heading reads Steenackers to Mercadier, “2me Série n 1”, Tours, 2 November 1870, with the words “chiffre des inspecteurs” in brackets. Steenackers directed the telegraphs and posts from Tours; Mercadier directed the telegraphs in Paris, at the central post in the rue de Grenelle. Pillon’s film print also carries a printed proclamation of Gambetta to the army and a stamp of the director general’s office.

The telegram is mixed. Its 1,173 tokens are 736 four-digit coded groups (343 distinct) and 437 clear words: names and addresses, and ordinary words between the coded runs. Pillon confirms that the clear words are in the original, so they are fixed context. The commonest groups are 0101 (49 times), 0201 (31) and 0301 (28), then 4914, 2119 and 8328. No plaintext of the telegram is known. It was not found by phrase search in Steenackers’ 1883 memoir (HathiTrust copy), in the parliamentary inquiry’s volumes of telegrams, in Favre’s book, in Dagron or in the 1872 article on the pigeon post; that is not proof that it was never printed.

No image is shown on this page. The scan and the transcription belong to Pillon and are unpublished; permission to republish them has not been given. The digit strings of the key runs used below were checked against his scan, and match his transcription digit for digit.

02 An alphabetical lexicon

Pillon’s own table for the prefects’ code, which he calls R1, is a 4-digit alphabetical word list with grammatical beacons (for instance 0136 and 0137, paired around a stretch of text). The inspectors’ code is not that table: only 18% of this telegram’s groups occur in R1’s table, against 10% by chance, and the values make no sense in context. Pillon’s remark that the inspectors’ code is “almost alphabetical”, with 83xx for S and 92xx for T, is what the project then tested.

Test: take the groups whose syllable values are fixed by the names below and place each value in an alphabetical French word list built from Favre’s books, the inquiry volumes and the 1872 article. The fractional position of the syllable predicts the number divided by 9999. For 13 syllable values the mean error is between 0.012 and 0.016; a random mapping gives about 0.33. Seven whole words fit the same way. So the table is an alphabetical lexicon laid out over 0000–9999, with words and syllables as entries. A group therefore predicts the initial letters of what it stands for, within a few percent of the alphabet. Pillon’s word “almost” stands: exceptions are possible and none has been identified.

Two side results follow. The group 4906 is a K-initial syllable and 0218 an A-initial one, so Steenackers is spelled S-TEEN-A-K-ER-S, phonetically, and no reversal is needed. And the Favre code of the Chaudordy letter (section 09) is not alphabetical at all.

03 Names spelled between beacons

The groups 0101, 0201, 0301 and 0102 come in pairs around a run of groups, and the repeated runs between them give words spelled syllable by syllable. The clear heading supplies the names, so the first cribs are checkable.

groupsreadingevidence
8328 9214 0218 4906 3316 8328S-TEEN-A-K-ER-S, Steenackersopens and closes the telegram, first and last group equal; the heading names the sender
5504 1122 2514 3316MER-CA-DI-ER, Mercadierfour pieces within 0.02 of their positions, mean error 0.010; rank 30 of about 30,000 strings by position alone
6816 4001 6129 8328PI-GE-ON-S, pigeonsthree identical occurrences; the topic is pigeon fanciers
9113 8317 1504T-RO-CHU, Trochuone of 28,897 candidate strings fits as closely; about a 0.15% chance that some of 51 names would, by luck

Three groups recur in two words and agree: 8328 is S (initial in Steenackers, final in pigeons), 3316 is ER (final in both Steenackers and Mercadier), and 6129 is ON (in pigeons, and probably in ballon). The first guess for the heading, Ernest Mercadier spelled ER-NEST-MER-CA-DI-ER, did not survive: the alphabetical rule puts the first-name run 6819 3412 near P (Pierre, or another P-E word), not near E. Pillon then wrote that a different recipient stands before Mercadier, so the run is not a first name. For the groups before Mercadier the page keeps only that 5511 fits the abbreviation “M.” (error −0.007), and that 6819 3412 is a surname beginning P-E; 18 of 3,644 capitalised names fit within 0.005, so this is not specific. The other recipient stays unidentified.

The spelled-run solver (spell_solver.py) splits candidate strings so each piece fits its position. On the known runs the correct string is always in the top 0.5% of 24,000 to 31,000 candidates (pigeons rank 8, Mercadier 30, ballon 145, Steenackers 6 to 8). It shortlists; it does not decode.

04 Family news for generals

The last paragraph is made of short messages: tell a general that his wife is well, at an address at Nantes; tell the same of another family at an address at Rennes, in the quai de l’Université. That genre is typical of pigeon dispatches, and it was predicted before the computation: the prediction named the words est, bien portante and en bonne santé, and then the groups were scored.

groupswordposition error
3407est0.000
7027 0312PORT-ANTE (portante)−0.010, +0.004
1026 8416bonne santé (three occurrences)−0.004, −0.009
4007général+0.011
5218madame (weaker: leur or lettre fit at +0.005)+0.023

A random word pair fits two random groups within 0.01 each in 0.05% of trials. These words were not used to calibrate the rule, so the whole-word alphabetical rule holds outside its calibration set. The groups 9113 8317 1504 follow the word for general in the Rennes message, and spell Trochu. The Nantes name 9802 6124 fits Vinoy (error 0.012), but 0.7% of strings fit as closely, so Vinoy is not supported and is dropped. The Rennes name 1114 5911 0131 fits no siege-era name well (best 0.022). Pillon does not know who stood at either address; the quai de la Fosse was a commercial area. Who the families were is open.

05 What the decoders did

The project then asked how far position, word frequency and context carry. Each step was a test with a number, and a hypothesis was kept only if it improved the score by a rule fixed in advance.

The conclusion from these steps: the spelled-name mechanism is the big lever, and names and spelled words decode reliably; ordinary words need context the telegram does not supply by itself.

06 The engine, and what it refused

The work was then rebuilt as a wiki-driven loop with a calibrated acceptance gate (wiki/tools/engine.py): propose a reading for each group, run a battery of tests, accept only what passes, and re-validate earlier acceptances. The gate was calibrated by blinding the 22 supported groups and running it on the 10 gold units. At the loosest threshold it makes one correct acceptance (pigeons) and none wrong; at any stricter threshold it accepts nothing, right or wrong. Blind, the best proposal for a spelled run of three or more groups was right 4 of 4 (Trochu, Mercadier, pigeons, Steenackers), with small margins of 0.2 to 2.7 nats; for single words it was right 1 of 4.

Run on the telegram, the engine produced false acceptances, found on review and rolled back. The log records three:

Each rollback left a rule in the engine: a context margin of at least 3 nats, spelled units only for beacon-bounded runs, spelled words of at least four letters, and no overwriting of accepted entries. After the fixes the gate proposed 355 units and accepted none, and the loop stopped after three loops. The best near-misses are recorded as hypotheses, with the evidence each would need. So from this one telegram, with what is known, the engine cannot safely add a reading. The coverage figure used on this page, 20 supported entries and 12.5% of 608 coded (non-beacon) group occurrences, comes entirely from entries assigned by hand from the printed heading, the blind genre check and the name tests.

07 Pillon’s suggestions

Pillon’s contribution shaped the work. He sent the telegram and its scan, confirmed that the clear words are original, saw the beacon groups as brackets (as in R1, where paired beacons enclose a stretch of text), and said the table was almost alphabetical. The alphabetical hint is the one that was confirmed. His tentative readings (offered as guesses, “here probably…”) were tested against it:

Each is about 0.18 off, ten times the typical error, so none is supported; 5926 is an M or N word (mourir, mouvement, militaire, moyen), and 0603 an A word such as appui. His decomposition of the heading name as MER = 5511 followed by 6819 3412 as CAD and IER, scored 0.23 against 0.010 for MER-CA-DI-ER, and he withdrew it himself, writing that another recipient stands before Mercadier. Both outcomes are listed because the test is the point: the rule he suggested is the one that rejected these guesses, and he withdrew the decomposition himself.

08 What is not known

09 A different cipher: the Favre code

Pillon’s collection also holds pigeon dispatches to Jules Favre, and a long letter of 18 December 1870 from Favre to Chaudordy, in a different numeric code. It is a different cipher and has no page of its own yet; the work on it is in progress, and it is mentioned here only so the two are not confused. Its table is not alphabetical, and for the Chaudordy letter the plaintext is printed in Favre’s book. The cipher follows that print for about its first 330 groups, then departs from it, and only vocabulary tied to the date and topic is firm (1792 for conférence, absent in October and mid-November, present from 28 November). It is not the inspectors’ code, and nothing above depends on it.

10 Code and wiki

The scripts, the notes and the lexicons are on GitHub: targets/pigeongrammes1870. The working knowledge base, built on the pattern of Karpathy’s LLM-wiki (raw sources, a wiki of claims, tests and questions, a schema and a log), is in targets/pigeongrammes1870/wiki: read SCHEMA.md, PROCESS.md, index.md and syntheses/Z01.md first. The log of the wiki includes the rollbacks described in section 06.

Pillon’s transcriptions and scans are not published here. The scripts read files that belong to him and will not run until those are put back next to them; DATA_NOT_INCLUDED.md in the folder lists them. The analysis, lexicons and results are in the folder without them.

11 Sources

The scripts, notes and wiki are in targets/pigeongrammes1870/ in the project repository (code and notes, wiki); NOTES.md holds the chronological record. Pillon’s scans and transcriptions are his and are not published here.

Cite this page

Daniel Bourdeau, “The inspectors’ code of the Paris siege: Steenackers to Mercadier, 2 November 1870”, Cyphersolver, posted 7 November 2026, https://cyphersolver.com/pigeongrammes1870.html.