@projectpac/negotiation
v0.6.0
Published
Part of PAC: @projectpac/negotiation.
Readme
@projectpac/negotiation
The negotiation engine: the suggest-and-agree rounds that joint-search, objects, and meta each used to carry a copy of, offered to flows as one service.
A factory rather than an actor. A flow hands over a spec -- its record accessors, its choices, its messages -- and drives what comes back with its own hands: every apply, ask, run, and artifact call goes through closures over the flow's own context, so attribution, policy, and inject gates are exactly what they were when the flows inlined these steps. The engine itself reaches nothing, which is why it injects nothing and runs on any node however bare.
ctx.negotiation.rounds (createRounds): propose and review revisions of a
shared artifact until both sides mark one agreed, within a bounded number of
rounds. The flow supplies what to draft and how to judge; the engine supplies
the round discipline.
Each round drafts in a workspace of the artifact store, and the store caps how
many one flow holds open. So the engine closes each workspace the moment its
round is over -- after the commit, on an agreement -- and a flow that gives a
record up mid-round calls abandon(id) to close the one that round left
behind. Before this, a node stopped negotiating after eight tasks: the cap had
filled with finished rounds' leavings, and every open after that was refused
until the store's TTL expired them an hour later.
What happens to an agreement afterwards is a separate choice, and not this
package's: @projectpac/jc-box-run carries one out in a box, and meta installs
what it agreed as a plugin on both nodes instead.
