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 escalate promotes the gap's urgency term as the deadline nears; else sync authorizes the mesh to schedule live human time if the gap survives past deadline; else drop lets 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 seek keyword.
  • 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 by clause raises the urgency term to 1.3 uniformly; there is no gradual promotion as the deadline nears.
  • escalate places on the ledger. A gap tagged else escalate has its absorbed delta placed [ledger]; all other absorbed deltas are [silent].
  • sync prints 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.

hold · owe · decide · Pressure · O-001 · O-003