Expand description
§7 plugin wire payloads — what balls hands a plugin on stdin.
Plugins get meaning directly on the wire — content + intent, not hashes to
reverse-engineer. There is no return channel (§7): a plugin contributes
by editing the change worktree, never by printing values back; its stdout is
diagnostics. So these types are output only — balls serializes them with
serde_json and never deserializes a payload (a plugin self-describe is the
one thing read back, and that lives in crate::plugin).
One OpContext holds everything that does not change between a plugin’s
pre and post invocation (the verb layer, bl-dfbd, computes it). A phase
plus the optional post-seal SealFacts pick the rest: pre, post, and
rollback payloads differ only in which fields are present, so a single
Payload with serde skipping the Nones is the whole shape (§7
“post payload: same plus …”).
Structs§
- Binding
- §7 binding — where the op is happening.
store/landingare the two checkout paths (§1 — thetasks_branchstore and theballs/configlanding);tasks_branchnames the store branch (§4);invocation_pathis whereblwas invoked (the project-repo root the delivery plugin needs, §11).remoteis absent in a no-remote (stealth) repo.stealthis the §12 DECLARED consent opt-out — derived per op from the landingtask_remotesentinel (bl-9df0), riding the wire so the tracker takes its stealth path even where a projectoriginis discoverable;false(the ordinary tracked or inferred case) is never serialized, so every existing payload shape is unchanged. - Command
- §7 command — the op plus its intended body.
body_changeis the new markdown body when the op rewrites it. There is no field-level changeset on the wire: the op’s field diff has one authoritative home — the change worktree plus the op-start state to diff against (§14 derive-don’t-store; bl-3bfd, §15). - OpContext
- The op-constant §7 wire data: everything identical across a plugin’s
preandpostcalls. The verb layer authors it once per op;OpContext::wirestamps a per-phasePayloadfrom it. - Payload
- One fully-assembled §7 payload, serialized to a plugin’s stdin. Built by
OpContext::wire;serdeomits everyNone, so the same struct renders thepreshape (states only), thepostshape (+ commits, + metadata on a sealing op, commits-only on a diffless one — §13), and arollbackshape (+rolling_back). - Seal
Facts - Post facts threaded onto a
post/rollbackpayload: the new commit, the tip it landed on, and the §5 trailers parsed from the seal message (incl. the now-assignedbl-id).Noneof these is on aprepayload — the id is not sealed yet (§7).metadataisNoneon a diffless op (§13): sync/prime author no §5 message, so the wire carries the commit pair alone.