owe, Commitments

Syntax

owe = "owe" fact "to" party [ "by" instant ] ;

From spec §4.4:

owe review(atlas) to raj by fri
owe photos(hiking-trip) to family by sun

Semantics

An owe is a commitment: a promise from this twin to a party, with a due instant. It is one of the five speech-act kinds (spec §3), and its defining property is that commitments generate structural gaps automatically: an unmet owe implies the counterparty's seek for its status.

Read that twice, because it is the construct doing the most quiet work in the language. When you promise something, the mesh does not wait for the other side to ask "how's it going?" The promise itself creates the demand-and-supply structure that keeps the counterparty informed. Nobody composes a status report; status is a consequence of having promised.

Case study: the dinner mesh, t₂

In the canonical maya/raj program (spec §8), maya declares:

owe review(atlas) to raj by fri

and raj, independently, declares:

seek status(atlas.review) by thu else sync

The spec's trace describes what happens at t₂: maya's owe review(atlas) auto-generates status pressure against raj's seek status; her membrane rule status(*) -> team: category casts it down, and raj's twin absorbs in-progress, placed silent. Raj knows the review is moving without either human writing a word. And if Thursday arrives with the review gap still open, raj's else sync clause authorizes both membranes to book live conversation, agenda pre-compiled from the surviving gap. The commitment escalates itself.

In v0.1 (normative pragma)

The reference interpreter implements the structural-gap rule from the supply side, and this pragma is normative for v0.1; any implementation must honor it or consciously supersede it through an RFC:

owe X(args) auto-emits hold status(args.X) = in-progress on the ower.

Concretely, in osmol.py's parser: owe review(atlas) to raj by fri records the commitment and immediately emits hold status(atlas.review) = in-progress on maya's twin (the fact's argument and name swap into a dotted path; an argument-less owe done() would emit hold status(done())). The setdefault matters: if the ower has already declared a more precise status by hand, for example hold status(atlas.review) = in-progress @0.9, the auto-emitted default does not overwrite it.

This is how commitment-status supply exists without anyone composing a status report. The ower's side of the structural gap is materialized eagerly as a holding; the counterparty's implied seek is left to be declared explicitly in v0.1 (raj writes his own seek status(atlas.review)), which is the pragma's honest simplification of the spec's fuller "implies the counterparty's seek" semantics.

The philosophy: Law III

The owe construct is Law III of the Fifty-Year Letter, Compiled State, enforced by grammar. Conversation must compile; the build artifact is a living, queryable state of commitments and their owners; and the hard rule follows: if it is not in the state, it was not decided. An obligation smeared across a message thread is archaeology. An owe is a record: it has an owner, a counterparty, a due instant, and a machine-readable status from the moment it exists. The ledger view of your mesh (see placement, in the equilibrium model) is exactly this: commitments you owe, commitments owed to you, sorted by consequence rather than arrival.