RESO Unique Licensee Identifier
RCP-54 · ULI Resolution Protocol · Playground

Resolve a licensee, with nothing leaving your browser

A Unique Licensee Identifier links one licensed professional's records across markets. This page runs the protocol's matcher, its scoring, its consensus arithmetic and its Ed25519 signatures for real, over sample records drawn from the specification's worked examples or over a roster you import. The network of other resolvers is modeled inside the page. There is no server: the page's security policy forbids outbound connections.

What is real here, and what is modeled

The resolver network Modeled

Five certified resolvers inside this page stand in for organizations on the network. Each is a desk you can act as. R is the set that is certified, compliant and active; consensus needs floor(2/3 × R) replies plus every mandatory resolver (§2.6). Marking a node inactive is a modeled governance event: it leaves R for every open thread and never rejoins one mid-flight.

Roster Real

The records this desk holds. Search is retrieval, not scoring: it narrows the list and prints no score. Import a CSV or XLSX of your own roster to run the matcher over it; it stays in this browser.

Local matching Real

The same engine the network uses, run over this desk's own roster to find likely internal duplication before anything is broadcast (§2.9: the engine runs locally and on the network). Records are blocked on surname plus license state, so pairs that differ in either are never compared; that is the recall cost of not comparing every pair.

Dashboard

What to resolve internally first, what is waiting on the network and what is done.

Resolution threads AS2 shapes, consensus arithmetic Other resolvers, time

One Note per licensee, addressed to the resolver collection; replies thread beneath it by inReplyTo. The activity carries only who acted and what it answers. Everything about the licensee sits behind the OAuth2-protected link, shown under each activity's disclosure.

Score a pair Real

The band is the headline. The gauge carries the magnitude on the scale of the maximum attainable score under the current weights. The integer is broken down by factor, so what teaches is the composition. There is no percentage anywhere on this page; §6 of the specification explains why a percentage would be read as a probability it is not.

Pick a pair from local matching, a search result or a thread reply, or start from your roster.

Weights and threshold Sandbox (§2.9)

The §2.9 table, editable. The threshold is never typed in: it is derived as the sum of the two smallest primary weights that one candidate can match together, and three invariants are checked on every change. In this playground the sandbox set is also the network's set; on the real network a change is posted to the governance feed and every node reruns matching.

Verify a ULI Ed25519 via WebCrypto

Paste a ULI. The page splits off the signature, rebuilds the signed bytes and checks them against the minting organization's key on the governance feed, offline (§2.8). The feed here is modeled; the verification is not.

Governance feed, modeled: certified keys

Storage localStorage on this origin

Threads, rosters, keys and tuning live in this browser's local storage so they survive a restart, and the thread store sweeps anything older than seven days. Nothing is sent anywhere. Clear shows what it will wipe, then wipes local storage, session storage and IndexedDB for this origin.