philippelyp/llmuid ยท running in this browser

LLMUID

Identifiers built for a strange transport: large language models. Fabrication is detectable, one slip repairs itself, anything worse fails loudly instead of misrouting silently.

๐Ÿ—„๏ธ
mint
๐Ÿค–
model A
๐Ÿค–
model B
๐Ÿง‘
human
๐Ÿ›ก๏ธ
resolve
 
0pristine
0repaired (1 slip)
0hard failures
01 ยท The identifier

Every character is an argument

10 symbols from a 29-character alphabet, grouped in pairs. Tap a part to see why it exists.

Tap a symbol, or pick a part above.
02 ยท The damage model

Damage arrives in token-sized bursts

Models emit tokens of a few characters, so one slip corrupts a short contiguous run โ€” never a single random character. Four event kinds, replaying below.

Substitution

most common

Deletion

second

Duplication

third

Transposition

rare ยท humans / OCR

Damage is bimodal

Almost everything arrives pristine. A little arrives with exactly one slip. A tiny fraction arrives mangled. Almost nothing in between โ€” which is what makes a strict single-event repair budget safe: past one slip, you're almost certainly in the untrustworthy regime.

~99%
pristine
~1%
one slip
โ†’ repair
โ‰ˆ0
two slips
โ‰ˆ0
three
tiny
mangled
โ†’ fail
03 ยท Validation & repair

Four layers, one job each

Every button below hands a real candidate to the same resolve() an application would call, against a registry this page minted when it loaded. The narration is read back from what it returned and from the error it left behind.

candidate โ€”
1

Normalize

2

Length routing

3

Checksum (mod-29, distance-3)

4

Registry repair (edit distance โ‰ค 2)

Pick a scenario above

Delimiters cost nothing: layer 1 strips everything outside the alphabet, so K7โ€”M3 XR_9D Q2 and K7-M3-XR-9D-Q2 normalize identically. Length off by ยฑ2 skips the checksum โ€” a positional code is meaningless once symbols shift โ€” and goes straight to repair.

04 ยท Why repair is safe

Sparsity as an enforced invariant

29โธ โ‰ˆ 500 billion possible payloads; a deployment issues thousands to millions. Minting redraws any identifier within edit distance 4 of an existing one โ€” so no single damage event can ever land a candidate ambiguously between two identifiers.

The single constant: radius 2

One damage event costs at most 2 edit operations (a token slip touches โ‰ค2 symbols; a transposition costs 1). That constant is the contract's entire tunable surface.

d โ‰ค 2, uniquesilently repaired โ€” one localized slip, guaranteed
d > 2hard failure โ€” never guessed at, however confident
mint > 4 apartradii can never overlap โ†’ mis-repair impossible by construction
05 ยท The worst failure

The swap: a valid ID in the wrong place

A model occasionally substitutes one genuine identifier for another it saw elsewhere in context. The string is well-formed, registered, checksum-clean โ€” per-identifier robustness can't catch it. The fix: derive the checksum's two required sums from the identifier's context (its slot, role, or parent). The two identifiers below were minted here, under the two slot names, and the verdicts are what resolve() says about them.

slot: invoice.customer
โ€”
 
slot: invoice.product
โ€”
 

Each identifier's check symbols were minted against its own slot's context. Right now both resolve.

06 ยท Conformance

This page grades itself

The specification ships an answer key, and an implementation conforms when it passes every case in it. The engine driving this page carries that answer key and was graded against it before a single demo above was wired up โ€” here, in your browser, a moment ago.

โ€” conformance cases passed, plus the minting invariants, in โ€” ms.

The count is read off the vector files themselves rather than written into the page. If any case had failed, a red banner would be sitting at the top of this document naming it, and none of the panels above would have been wired up at all โ€” because a page that kept rendering confident verdicts under a broken engine would be committing exactly the silent misrouting this scheme exists to prevent.

07 ยท Crib sheet

The whole spec in eight cards

Alphabet: 29, primeDigits + consonants, no vowels/Y/L. Prime size makes the check code plain modular arithmetic.
Shape: 8 + 28 random payload symbols, 2 check symbols, rendered as five hyphenated pairs aligned to token boundaries.
Checksum: distance 3Detects ALL 1โ€“2 symbol errors unconditionally; fabrications pass at ~1/841, closed by registry lookup.
Contract: repair 1, fail the restEdit distance โ‰ค2 to exactly one issued ID โ†’ silent repair. Anything else โ†’ hard failure, never a guess.
Delimiters: presentation onlyWrite strictly, read liberally. No parsing decision ever depends on them.
Registry: append-onlyMinting enforces >4 separation; resolution is stable forever; retirement is app state, not deletion.
Context bindingCheck sums derived from slot/role via SHA-256 โ†’ a swapped valid ID fails validation. Re-verify inside repair or the defense is bypassed.
Not a security mechanismStatistically unguessable โ‰  cryptographic. Never a secret, capability, or bearer token.