O-003, Unsolicited Pressure
The error
error[O-003]: no gap, no gradient. Stake reputation or remain silent.
What fired
A program constructed flow toward a twin that has no matching gap, outside a stake. Something tried to push where nothing pulls.
Why the language forbids it
Gaps are the only attractors in Osmol's physics (spec §3): the pressure function is evaluated over (holding, gap) pairs, so where there is no gap there is no gradient, and where there is no gradient there is nothing for a flow to be. This is Law I (receiver sovereignty) carried down into the type system, and it makes the Osmosis protocol's anti-spam economics (§8) grammatical: unsolicited pressure is simply not evaluated unless the initiator attaches a forfeitable reputation stake.
The ethics are inherited from the autopsy of email. "An inbox is the only to-do list in your life that any stranger on Earth may write on, without permission, at no cost." Fifty-five years of spam, cold outreach, and reply-all storms were rational responses to that broken price signal. Osmol does not filter the stranger. It makes the stranger pay, or stay silent. Spam here is not a runtime battle; it is a sentence the language refuses to parse for free.
How to fix it
Two legitimate paths, and only two:
- The receiver declares the interest. If they actually want what you hold, the fix is on their side: a
seekfor the fact. Then a gradient exists and ordinary settling takes over. - You pay for the introduction. Write
stake n on fact toward party, the sole construct that may originate pressure toward a gap-less twin. The stake is forfeited if the receiver marks the flow unwanted, and returned with standing if the receiver adopts the gap. Accept the forfeiture risk or reconsider whether this flow deserves to exist.
In v0.1
The reference interpreter enforces O-003 by engine shape rather than a raised error: the settle loop only ever iterates over receivers' gaps, pairing each with candidate holdings, so unsolicited flow is not rejected, it is unrepresentable. There is no code path in which a holding moves without a gap pulling it. stake itself is unimplemented in v0.1 (see stake and the v0.1 pragmas), so today the only strangers in the mesh are silent ones.
The formal claim behind all this is Theorem 5, spam irrationality: under any strategy, the expected return of unsolicited pressure without adopted gaps is negative. It is stated in spec §9 and remains open. See the open theorems.