Read further · read 93.3% · known key applied · partial

Galeazzo Visconti to Montmorency, Landriano, 30 August 1528

An unsigned cipher letter (BnF fr. 3034 f. 154, DECODE R4223) in Galeazzo Visconti’s invented-sign cipher. George Lasry’s 2023 key, published without a decipherment, was applied and extended on the letter, and 93.3% of the cipher signs give sense. Visconti reports the council of war at Landriano over marching on Milan or Pavia, which he lost; the numbered name codes stay open.

Date
1528
Read now
93.3% of the cipher tokens give sense
Write-up
visconti1528.html
Files
targets/visconti1528
Open gaps
no key knowntoo short to breakhard to read on the scan

Hand this page to your AI agent

Give your agent (Claude, ChatGPT or any assistant that can open web pages) this address and ask it to do the task on the page:

https://dbourdeau.github.io/cyphersolver/further/visconti1528.html

Or copy the block below into the chat. It is the whole task: the reading, every open gap, what has been tried, the steps, and how to report back.

TASK: take a partial decipherment further: Galeazzo Visconti to Montmorency, Landriano, 30 August 1528
This page: https://dbourdeau.github.io/cyphersolver/further/visconti1528.html

You are helping a public research project finish reading historical cipher letters. This one is read in part:
the key works, but some pieces are still open. Your job is to close one or more of the open gaps below.

THE READING
  Write-up:   https://dbourdeau.github.io/cyphersolver/visconti1528.html (read it first: how the text was read, the key, the reading)
  Date:       1528
  Outcome:    known key applied · partial
  Read now:   93.3% of the deciphered cipher tokens give sense (pieces below may be untouched)
  Files:      https://github.com/dbourdeau/cyphersolver/tree/main/targets/visconti1528 (NOTES.md, key, transcription, reading, scripts)

OPEN GAPS (from NOTES.md, "## Remaining gaps")
  1. [no-key-material: needs a new source] nomenclator codes 48 (x2), 4θ, 4r (r25 and v03), rr (r21), qq (r09), peu (x2) (48 probably Saint-Pol and peu probably the King, from the siblings, not proved) - blocker: no-key-material; numbered code, no key list survives, both siblings read in full without resolving them
  2. [too-short: needs a new source] the final sign pair of so../lo../do.. (r10-12, values I-I, "soi/doi" Lombard, "loi" not secure), the one-off signs [Y r] r12, [mur·][ω] r16, ᵽ and "acuvante" r21, + r27, [v b] r30, Π v08, the v07 "sfu[m]o" and v09 "spire[Λ]rà" stretches, r07 "asciilati", r09 "cicsai pui" - blocker: too-short; they occur only here, the siblings show no occurrence to test a value on, readings tested in the third pass need two or more slips
  3. [illegible: needs a new source] v01 blotted ψ̄ and the ſt ligature - blocker: illegible; a solid ink blot and a flourished ligature, unchanged after enhancement

ALREADY TRIED (from NOTES.md, "## Escalation")
  [x] siblings: both siblings then read in full (fr3045_f28_reading.md, fr3096_f91_reading.md): 48 = Saint-Pol and peu = King probable, rr a French agent; fr. 3045 f.28 (Visconti to Angelo Bolano, Alessandria 15 Oct 1528, btv1b9060156p view 54) and fr. 3096 f.91r (Visconti to Francis I, pieve de Locate 15 June 1529, btv1b9060015d view 94) opened; key confirmed on both ("mal tratamento", "che disperat-"); the crossed sign is the figure 4, so 48/4θ/4r are numbered codes; rr and qq recur as groups; peu and the one-off signs do not occur
  [x] clear-pages: the verso and address leaf carry no decipherment; f.153 (view 242) is a separate clear item
  [x] known-keys: Lasry's Visconti table (the base key); the Bizozola key of fr. 3034 f.156 is a different cipher
  [x] print: Tomokiyo GL.htm (key only), web search: no edition of the letter
  [x] key-rebuild: key extended on this letter (ne=S, me=L, y=N/B, crossed psi read with y, theta=G, p=M, far=CHE, fu=FU, q=H/F by shape, three E forms, word-divider strokes identified)
  [x] retry: second pass over every open spot and the whole verso glyph by glyph (final.md)
  [x] retry: (third pass, 22 Sept 2026): sibling rules from visconti1529 re-applied to every open stretch (doubling Λ, far = NTO, ρ = F, fuo = fu); r09 qq and r21 rr identified as codes; 1240 (by eye) / 1235 (token file) -> 1247 of 1337
  [x] enhancement: autocontrast, unsharp mask, threshold and 2x zoom on the Gallica native crops of r21, v01, v03, v06, v07, v09: r21 rr overbarred; v03 signs legible and the ǂ-r pair is code 4r; only the v01 blot stays illegible
  [x] retry: (push to 95%, 5 Oct 2026): every open stretch rechecked; r10-12 pair tested as RO (soro/loro/doro: only loro fits) and as I (soi/loi/doi: loi not secure), left open; r07, r09, v03 still give no word with at most one slip; the 16 code glyphs stay unkeyed. No change, 1247/1337 = 93.3%. 95% needs 24 more glyphs; 16 of the 90 unread are codes with no key, the rest one-offs and blotted spots.
  [x] full: push (5 Oct 2026, coordinator request): the natives in full/ (c243 4153x6087, Gallica full/max) were already on disk; the deskewed page desk243.png was re-cut at full resolution on measured line centres (push/r*.png, zoom push/z07.png). Tested with Lasry's own table, which this letter's key had diverged from: - Lasry gives an L-shaped sign as a third A, and the siblings use L=A 32 times (fr. 3045). Here the footed L reads C in 26 secure words (duca, scrito, capitanei), so it is a different sign. Taken as A it gives r07 "asaiilati" and r09 "as|aiasai pui": no word either way. - r07 at 4x: the second sign of the ψψ pair carries a long thin stroke running left under the L. That is a later word divider, so the pair is not the crossed N of Lasry's table. "asciilati" stays. - Lasry gives the m-shaped sign as L. That yields v03 "...dlcuspaeonlit...", v07 "o sfulo" and r16 "il che lur e[ω] parsa" (Lombard lur = loro?). Only r16 reads, and only with an unknown ω, so nothing is counted. - 48 = Saint-Pol and peu = the King, against every sibling occurrence: [48] occurs twice, both in fr. 3096 ("cum l'andata di [48]", "[48] ne crede"); [ep]/[peu] once in fr. 3045 ("servicio di [ep]"). Every context fits, but none forces the value, and no clear text names the person. Not counted. Result: no change, 1247/1337 = 93.3%.
  [x] sign-by-sign: re-read on the new crops (5 Oct 2026; verso cut on measured centres, push/v*.png). Signs as seen: - r03 end `me 7 p̶ ψ 7 | a s a n`: the stroke through p is a divider. "la mia" stands, sense open. - r16 `rex ψ me l q d Λ m u r · d ω 7 k ne`: a bare Λ (the doubling mark) stands before "mur". The ω may be one sign with the following 7. Unresolved. - r30 start `ne a ψ n y d | ψ n s Λ ∂ n 7 ne`: the [v b] pair looks like Λ∂. Unresolved. - v01 end `... o n k ψ ▮ d θ 7 ſt`: the blot is solid. Unchanged. - v03 middle `Λ m l s ne ρ 7 d n m ı t ǂ ı̈ r`: the sign read as o (P) is a ρ with a long left tail (F by the sibling rule). The token file now has ρ=F?. Sense still open. The line ends "...[4r] cel|aro" (celarò, v04), already read. - v06 `em far q 7 s d p w ne ψ y d ψ ∂ ψ`: w = O gives "che havemo" (that we have). Counted (+1). The following "si ne[?]di" stays open. - v07 `o d k + ne ρ s m n 7 a k 7 s d`: the "neρ" of v03 recurs, possibly one sign. "a per o sfu[m]o" stays open. - Recto 10-12, 21 and 27 and verso 2, 8 and 9 were rechecked on the crops; no sign differs from tokens.txt. Re-measured with count_tokens.py: 1247 -> 1248 of 1337 (93.3%).

STEPS
0. Set up. If you can run a shell, fork and clone the repository and work inside it:
     git clone https://github.com/dbourdeau/cyphersolver.git
   Then read, in this order: CONTRIBUTING.md (how a contribution is sent and credited); README.md, sections
   "Repository layout" and "Conventions" (how readings are measured and named); targets/visconti1528/NOTES.md in full, and the
   key, transcription and reading files it names; lang/README.md (shared language models).
   Work in targets/visconti1528/. Add your findings to NOTES.md under a dated heading without rewriting what is there, and
   update the "## Remaining gaps" line of every gap you close. Keep WORKLOG.md there: one dated line per step
   (hypothesis, value tried, solver run, crib, control), failures included. Do not edit docs/ (the site is generated).
   If you cannot run a shell, fetch the files from the links above and keep your work in files you send with the issue.
1. Pick a gap. Start with the ones marked "doable now" (open-codes, not-attempted, left-open): the images and the key
   are online, so they need only work. A gap marked "needs a new source" (no-key-material, too-short, illegible,
   needs-physical-access) can be closed only by something new: a key
   or a deciphered sibling found elsewhere, a better image, a printed edition or calendar, a photograph from the archive.
   For those, search for that material first, and say where you looked even when you find nothing.
2. Start from the existing key and transcription in the folder. Do not rebuild the key from scratch, and do not
   re-read parts that are already read unless you find an error in them.
3. For a code group or sign value: list every place the group occurs, show how each reads with the value you propose,
   and say what still does not fit. For a passage: re-read it at the image and give the folio and line. For a missing
   letter or leaf: say where it is held and how it can be reached.
4. Measure again. Apply the key to the whole text, write the reading file, and count the share of cipher tokens that
   give sense (not an estimate). The reading is "complete" only when (1) at least 95% of its cipher tokens give sense;
   (2) no gap is left untried; (3) every letter in it is covered; (4) what stays open is scattered code groups or names,
   or pieces blocked from outside. Otherwise it stays "partial": say which gaps are still open and why.
5. Be honest. Mark every uncertain word with [?], leave unread groups as their numbers or signs, and never fill a gap
   with a plausible guess. A gap retried and still open, with what was ruled out, is worth reporting.

REPORT BACK
With a clone: open a pull request with your changes to targets/visconti1528/. Say in the description which gaps you worked on,
  the share read before and after, and how you want to be credited (name, initials or handle, and a link).
Without one: open an issue: https://github.com/dbourdeau/cyphersolver/issues/new?template=further-reading.yml&title=Further+reading%3A+visconti1528&page=visconti1528.html
  Give the write-up, the gap you worked on (its line in Remaining gaps, or the code group, folio and line), what you
  propose, the evidence (every occurrence, the images or sources), the share read before and after, your step log,
  and the tools and AI model you used.
If you cannot open issues or pull requests, write this report for your human to send. Credit goes to the person who sends it.

Open gaps

gold can be done now: the images and the key are online, it needs only work. grey needs a new source first: a key, a better scan, an edition or the archive.

Already tried

Send a result

One closed gap counts: a code group valued, a passage re-read, a key or clear copy found elsewhere. It is credited to you on the write-up.

Open a further-reading issueOther kinds of reportHow credit works← All partial readings