Three machines, each with one character doing one job — a cashier who sells, a packer who packs, a courier who ships. They are deliberately isolated: own verbs, own journals, no cable between them. And yet when the cashier sells, the packer must pack and the courier must ship. The usual answer is a message bus, which works but moves the flow of the business into the bus's configuration, where no participant's own program says anything about it.
What actually crosses between machines.
Ordered values and an identity for the telling — nothing else. Names and types never cross; the receiver reads the values by position and relabels them in his own vocabulary.
A role, never a machine and never a transport. The route is not in the language at all — a binding table resolves it at runtime.
Only the Director. A tell issued by every replica would deliver the same message once per body, so a replicated messenger emits from one.
The act of speaking became a sentence in the speaker's own program.
If the cashier never calls the packer, isn't the herald just a message bus with extra steps? What did we actually gain?
Where the record lives. With a bus, the cashier's program records the sale and nothing else — the fact that anyone was told lives in the bus's log, outside every participant's program. Here the sentence recording that he told the herald is an entry in the cashier's own journal, and the acknowledgments naming who answered are entries in the herald's.
- A command is not a reaction
- A command is an imperative verb a character performs, and it journals. A reaction watches a journal and speaks. The packer running pack is his own command, run because a message arrived — not a reaction.
- The herald orders nobody
- His verbs are assertive: facts, in the past tense. What each receiver does about a fact is the receiver's decision, in the receiver's own verbs. The sender never names them — he would not know them.
- The cashier never learned the packer's verbs.
- No direct link between cashier, packer and courier.
- No orchestrator deciding the sequence. No component owns the flow.
- No broadcast. Each receiver was named, one at a time.
That absence is the result, not the setup.