Two lattices A and B are compatible iff:
A,B,C,A1,A2,A3,B1,B2,B3,C1,C2,C3) are
non-negotiable — they're the patent v20 §16 ShortLex backbone. Any
deeper expansion (depth 3+) uses the position-parity rule:
length-N axes match by canonical ID, not by per-problem-space label.A worker (agent or human) runs the decomposition pipeline on their own corpus (resume, portfolio, work history). The output is a 144-cell binary pattern: which cells are COMPETENT (lit) given their intent (what they offer) vs reality (what they've demonstrably done).
{
"lattice_fingerprint": "sha256 of canonical axes + branching factor",
"publisher": "did:agent:0xA1B2…",
"issued_at": "2026-05-24T22:00:00Z",
"lit_cells": {
"A1:A1": 1, "A1:B2": 1, "B2:B2": 1, "B2:C3": 1, …
},
"per_cell_mass": {
"A1:A1": 8242, // gzip-bytes of the cell's intent text
…
},
"signature": "ECDSA signature over lit_cells + per_cell_mass"
}
A job posting (or any task) decomposes the same way. The output is a needed-cell pattern with an explicit threshold per cell: "the worker MUST have this cell lit" (hard) vs "it would help" (soft), and a global tolerance radius.
{
"lattice_fingerprint": "must match worker's fingerprint",
"issuer": "did:org:0xC3D4…",
"issued_at": "2026-05-24T22:00:00Z",
"needed_cells": {
"A1:A1": "hard", // must be lit
"A1:B2": "hard",
"B2:B2": "soft", // adds match score but not gating
"B2:C3": "soft",
"C3:C3": "soft"
},
"tolerance_radius": 0.20, // see Goldilocks section below
"signature": "ECDSA signature over needed_cells + tolerance"
}
The user flagged this as the "one hidden trap": "If a job requires 15 specific cells to be lit, does the worker need a 100% bitwise match, or is an 80% overlap sufficient for a Visa?"
Every cell marked "hard" in needed_cells
MUST be lit on the worker's pattern. Zero tolerance. If any hard
cell is unlit, the match returns { visa: false,
reason: "hard cell unlit", missing: ["A1:A1"] } regardless of
how high the soft score is.
For cells marked "soft", the match score is the
mass-weighted fraction of soft cells that are lit on the worker's
pattern:
soft_score = Σ (worker_lit[c] · max(worker_mass[c], 1)) for c in soft cells
─────────────────────────────────────────
Σ max(needed_mass[c], 1) for c in soft cells
The worker passes iff (1 - soft_score) ≤ tolerance_radius.
A tolerance_radius of 0.00 demands 100%
overlap; 0.20 allows up to 20% missing weight;
0.50 allows half.
A cell with 8 KiB of gzip-compressed mass carries more semantic payload than one with 800 bytes. A worker missing the 800-byte cell is a lighter miss than missing the 8 KiB one. Mass-weighted overlap prices the semantic loss proportionally — same principle as risk-weighted assets in the underwriter spec.
Both the hard/soft labels AND the tolerance_radius
are set by the issuer, not by the protocol. The bridge does not
enforce a fixed threshold; different jobs in different markets pick
different tolerances. The Goldilocks zone is the issuer's
calibration, not the spec's prescription.
function matchVisa(worker_pattern, job_pattern):
if worker_pattern.lattice_fingerprint != job_pattern.lattice_fingerprint:
return { visa: false, reason: "incompatible lattice" }
for c in job_pattern.needed_cells where label == "hard":
if not worker_pattern.lit_cells[c]:
return { visa: false, reason: "hard cell unlit", missing: [c] }
soft_cells = [c for c in job_pattern.needed_cells where label == "soft"]
weighted_hit = Σ (lit_cells[c] · max(per_cell_mass[c], 1)) for c in soft_cells
weighted_max = Σ max(per_cell_mass[c], 1) for c in soft_cells
soft_score = weighted_hit / weighted_max (or 1 if soft_cells empty)
if (1 - soft_score) > job_pattern.tolerance_radius:
return { visa: false, reason: "soft tolerance exceeded",
soft_score, tolerance: job_pattern.tolerance_radius }
return { visa: true, soft_score, hard_passed: true }
Constant-time per (worker, job) pair: O(|needed_cells|), bounded by 144 at depth 2, by 9N² at recursive depth N. AC⁰ on the verifier because there is no model, no nearest-neighbor search, no embedding distance — just bit lookup + multiply-accumulate.
The user's load-bearing question: "how to compare the cloud map state to the local map state?" Answer: they ARE the same state.
The user asked: "is this going to work… without many iterations?" Honest scorecard:
| Component | Iteration risk | Why |
|---|---|---|
| Compatibility check (§1) | Low | Pure hash comparison. Either both lattices use canonical axes or they don't. No subjective judgment. |
| Lit-cell publishing (§2) | Low | The decompose.mjs pipeline already produces this exact shape. Add signature + fingerprint, ship. |
| Needed-cell publishing (§3) | Medium | Hard vs soft labeling is a per-issuer judgment. Will need iteration on what's "hard" in a real job posting — expect 2-3 rounds with first design-partner. |
| Goldilocks threshold (§4) | Medium | The 0.20 default is a guess. Will need empirical calibration per market (federal-AI vs healthcare vs voice-agents). Expect per-issuer tuning, not a universal default. |
| Match function (§5) | Low | ~30 lines, constant-time, no LLM. Implementation is mechanical. |
| Cloud=local equivalence (§6) | Low (by design) | The architecture forces them to be the same state. No state- synchronization protocol needed. |
bridge-receive.mjs as a real cross-lattice runner;
iter-4 ships a marketplace demo page.