A seal is a hash written as one word of 25 letters from fifteen scripts, with a check: change one letter and it no longer reads. Paste a hash or a seal on either side. The City writes the other form, checks it, says where it sits in its chains if it is on record, and lays the two side by side: the characters they share, the bits they share, and where both land on the City's 64 states. Try change one character to watch the check refuse a seal. Seals come from Sigil, an open encoding by John Servil. Everything runs in your browser; nothing is sent anywhere.
32 bytes become 25 letters in base 2,048, eleven bits a letter: the data's two halves with the marker bits 01 between them, the number multiplied by the prime 131,063 for the check. One misread or changed letter, or two swapped, cannot decode; a reader unsure of a letter can try its readings, and Sigil returns the one that decodes or says it cannot tell. No hex digits and no upper or lower case, so a seal and a hash are told apart at a glance. No two letters look alike, so a forger who wants a look-alike must match 11 bits per compared letter. Seals are written with Sigil (github.com/johnservil/sigil, Apache-2.0 or MIT, pinned at 0.1.1, 4a18233; try its own playground); Ethiopic and Canadian syllabics glyphs from Noto Sans (SIL OFL 1.1); the other scripts draw with the device's own fonts.
On record means: a step root, an entry root, a ledger or a lever leaf of one of the City's chains, as listed in seals.json at the last build. Merkle leaves inside an entry (its records, files and links) are checked on the chain's own page.