seek, Gaps
A seek declares a gap: a first-class record of absence. The twin lacks a value and registers standing interest in obtaining it. Where hold is the mesh's supply side, seek is its demand side, and demand is privileged. A gap is the only thing that can attract flow. No holding moves anywhere, at any pressure, unless a matching gap exists on the receiving side: no gap, no gradient.
Syntax
From the spec §5 grammar:
seek = "seek" fact [ "by" instant ] [ "else" escalation ] ;
escalation = "escalate" | "sync" | "drop" ;
Examples from spec §4.3:
seek location(dinner) by 19:00 else escalate
seek decision(atlas.budget) by fri else sync
seek weather(berlin, sat) -- standing gap, no deadline
A seek names a fact the twin is missing, optionally a deadline (by), and optionally what should happen if the deadline arrives with the gap still open.
Semantics
A gap does three things. It registers demand, so the pressure function has something to evaluate: the gradient engine only computes P(A→B, k, g) over pairs where A holds k and B seeks a matching g. It carries urgency: the gap's deadline feeds the U term, so pressure rises as the deadline nears. And it defines its own closure: when a flow fires and B absorbs the understanding-delta, the gap is popped from B's state and the pressure term collapses to zero. Absorption is monotone (a delta closes exactly one gap and opens none), and this is the load-bearing fact behind Theorem 1.
Escalation policies
The spec §4.3 defines the three else policies:
else escalatepromotes the gap's urgency term as the deadline nears;else syncauthorizes the mesh to schedule live human time if the gap survives past deadline;else droplets it lapse.
else sync deserves a short remark. It is the language's hook into the protocol's escalation to synchrony: when a gap outlives its deadline, the membranes on both sides are authorized to book a short live conversation, with the agenda pre-compiled from the surviving gaps; spec §8's trace puts it at twelve minutes. Synchronous human interaction becomes the system's exception handler rather than its default ritual. A meeting in Osmol is what happens when equalization fails, and it arrives with its agenda already written.
else drop is the humble one: some curiosity has a shelf life, and a gap that lapses quietly costs no one anything.
Structural gaps
Not every gap is written with the word seek. Per spec §3, commitments and decisions imply gaps structurally: an unmet owe implies the counterparty's seek for its status, and an open decide generates gaps for each option's unevaluated consequences. In the dinner mesh, maya's owe review(atlas) to raj is what gives raj's seek status(atlas.review) something to drink from. The commitment auto-generates the supply that the structural demand attracts.
The three origins
The Osmosis Protocol spec (§2) names three ways gaps arise:
- Explicit: the participant asks a question, recorded as a gap rather than transmitted as a message. This is the
seekkeyword. - Structural: open decisions and commitments imply missing inputs, as above.
- Predictive: an on-device model infers that a value will be needed before a time T and pre-registers the gap, conservatively weighted.
The first two exist in the language today. Predictive gaps are protocol-future: the provisional spec describes them, but Osmol v0.1 has no syntax or semantics for them yet. When they arrive, they will arrive through the RFC process.
What you cannot write
A seek can only name a fact its own twin lacks. The grammar has no production that lets one twin declare a gap on another twin's behalf. That is diagnostic O-001: cannot want on maya's behalf. Gaps belong to their owners. And constructing pressure toward a twin with no matching gap is O-003: no gap, no gradient. Stake reputation or remain silent, with stake as the sole, priced exception.
v0.1 interpreter notes
The reference interpreter implements gaps with these documented pragmas:
- Deadlines set U = 1.3. Wall-clock time is not simulated, so any
byclause raises the urgency term to 1.3 uniformly; there is no gradual promotion as the deadline nears. escalateplaces on the ledger. A gap taggedelse escalatehas its absorbed delta placed[ledger]; all other absorbed deltas are[silent].syncprints its promise. A sync-tagged gap still open at equilibrium prints-> sync will be scheduled (else sync); actual scheduling needs a wall clock and a second device, neither of which v0.1 has.- Absorption pops the gap. One flow, one gap closed, monotonically. The engine asserts Theorem 1's bound (
flows ≤ initial gapcount) at runtime.