The lattice is the river; each 流函 is a small case carried by the current, holding exactly one piece of work — issued from one bank, opened at another, and answerable to the human who set it adrift.
Etymology & Resonance — three layers of meaning
The name was proposed and accepted on the same day. Its claim to canonical status rests not on a single semantic fit but on three concentric layers of meaning, each of which would have justified the choice on its own. Together they make the name structural rather than ornamental.
-
函 — the formal missiveAt surface, 函 carries exactly the sense the design wants: a sealed missive, a formal dispatch, an envelope-as-case. The character does double duty in classical usage as both physical container and formal correspondence (公函 — official letter). A flow_case is therefore not data adrift; it is a commissioned unit of work — sealed, signed, and addressable, with a phase vocabulary (issued, in flight, resolved) that reads against 函 as cleanly as a writ moves through a court.
-
函数 — the mathematical pun函 is the same character used in 函数, the standard Chinese term for a mathematical function. To any reader with mathematical training, 流函 therefore reads as a quiet pun on flow-function. Given that the Haskell side of the larger work is fundamentally about composing typed functions across domain boundaries, having the dispatch envelope itself encode flow-function in the lattice's other native tongue is structurally on the nose. The name knows what it is carrying.
-
流函数 — the stream function流函数 (liúhánshù) is the Chinese term for stream function in fluid dynamics — a scalar field whose level curves describe the flow itself. 流函 therefore sits one character shy of the function that is the flow. The Flowing Path as river, the flow_case as the unit drifting on it, and the name encoding the very mathematics of that drift. The metaphor and the mechanics rhyme.
One overlap is worth naming, not as objection but as reinforcement: case in English collides with the securities domain (Reg D / Reg S), where a case carries legal weight — a self-contained matter under deliberation, with provenance, evidence, and resolution. The collision is generative, not corrosive; it confirms what a flow_case is.
Schema — version 0.1
The schema is fixed at version 0.1 to make subsequent drift legible. Required fields establish identity, accountability, and resolvability; optional fields carry lineage and the safety levers required by The Manifest's prior canon on agency.
{
"kind": "flow_case",
"schema_version": "0.1",
"trace_id": "fc-2026-05-01T02:45:00Z-001",
"phase": "issued", // issued | in_flight | resolved | recalled | aborted
"origin": "terminl.main",
"target": "council.perplexity",
"sponsor": "pd9.human",
"task_type": "<held open>",
"payload": { },
"constraints": { },
"expected_return": { },
"parent_case": null, // trace_id of ancestor, if any
"transit_log": [ ], // append-only chain of custody
"recovery_path": null // route on phase = aborted
}
| Field | Function |
|---|---|
| kind | Self-identifying literal. Any bank can recognize a flow_case without prior context. |
| schema_version | Pinned at 0.1. Subsequent versions track conceptual drift in the open. |
| trace_id | Globally unique. Prefix fc- + ISO timestamp + sequence. |
| phase | Five states; happy path is issued → in_flight → resolved. Recalled and aborted are the safety levers — direct echoes of freeze and force-transfer in the EIP-7518 canon. |
| origin / target | The banks (terminl, council, deck, arena, &c.) between which the case flows. |
| sponsor | The responsible party. Distinct from origin. Origin is the node; sponsor is the human or agent answerable for issuance. Without this split, the chain of delegation goes opaque the moment a case crosses banks. |
| task_type | Held open. Categories are admitted inductively from real cases. |
| payload | The work itself. Schema-by-task_type, when task_type hardens. |
| constraints | What the receiver may not do. Bounds on scope, tools, time. |
| expected_return | The shape of the resolution. Makes the case closeable. |
| parent_case | trace_id of the ancestor, if any. Lineage; sub-cases without it are how audit trails go ghost. |
| transit_log | Append-only list of {at, bank, action}. Chain of custody. |
| recovery_path | Route taken when phase becomes aborted. Direct echo of force-transfer to a recovery agent. |
Rituals — three verbs in 函's dialect
The case is moved by three operations, each named from the same formal-correspondence semantic field as 函 itself, so the vocabulary holds together. Two are the happy path; the third is the safety lever.
Sponsor Grammar — name.kind
The sponsor field uses a two-part identifier. The dot is not decorative; it is load-bearing for the prior canon on chain of delegation. When a flow_case spawns a sub-case, the sub-case's sponsor may be an agent rather than a human. Without the kind suffix, no single case can be read as terminal or intermediate at a glance. With it, the chain is legible from any case alone.
-
.human
Terminal. Responsibility roots here. The chain has hit bedrock. Canonical:
pd9.human. -
.agent
Delegated. Grounded by a
parent_caseor documented standing authorization that traces back to a human. Never terminal. -
.org
Institutional. Carries a companion
authorizing_humanfield on issuance. Responsibility passes through; org sponsors are never terminal.
The structural rhyme with the securities work bears noting: this distinguishes natural persons from juridical persons from agents acting under authority — the same grammar Reg D / Reg S require for issuers and signatories. The sponsor format is the lattice's local dialect of that legal distinction.