saphan dispatch
Generate an executor-MD (five dispatch rules as refusing format invariants)
saphan dispatch
Generate an executor-MD (five dispatch rules as refusing format invariants)
Render an executor-MD from a dispatch-template manifest (§4.4) and validate it against the five dispatch rules as format invariants (§4.1): ROLE-LOCK preamble · bare-slug H1 · anti-cross-wire clause · 1-session-1-task marking + CLOSE-SIGNAL section · absolute worktree path.
An MD failing ANY invariant is unrepresentable output, not a warning: the verb exits 2 (STOP) naming the failed invariants. The [CONTINUATION] vs [FRESH off base] marking is a required input (§4.2) — exactly one of --continuation / --fresh; its absence is the same refusal.
The absolute worktree path is composed from the resolved workspace layout (§4.3): --worktrees-dir > SAPHAN_WORKTREES_DIR > project config > the library default "worktrees/" (conventions/workspace-layout.md). The MD is written to stdout, or to --out.
Subcommands
| Subcommand | What it does |
|---|---|
saphan dispatch command | Compose the saphan run command for a stream (the engine owns every composed sentence) |
Options
| Option | Type | Default | Description |
|---|---|---|---|
--anchor | stringArray | [] | verified recon anchor line (repeatable) |
--base | string | unset | base branch/ref the worktree forked from |
--branch | string | unset | work branch (default feature/<slug>) |
--commit-tag | string | unset | the [<commit-tag>] of the commit format (default <slug>) |
--continuation | bool | false | fix into a live stream (paste into THAT session) |
--fresh | bool | false | new change off the base branch (fresh worktree+branch) |
--out | string | unset | write the MD to this file instead of stdout |
--repo | string | unset | which code repo the worktree checks out |
--slug | string | unset | stream slug == task-file name (kebab-case; the bare-slug H1) |
--task | string | unset | the one-line task scope |
--template | string | unset | path to the dispatch-template manifest |
--worktrees-dir | string | unset | worktrees directory under the workspace root (§4.3 layout) |
saphan dispatch command
Compose the saphan run command for a stream (the engine owns every composed sentence)
Compose the complete, pasteable saphan run sentence for one stream
from the RECORD instead of from a master's memory (composed-commands law).
Master inputs are only: --stream · --order · --machine · --identity/--slot ·
--model · --role · --cost-estimate-usd. Everything else is DERIVED: the backend and the
seat's profile home from the machine registry, --binary from that machine's
per-backend registered path, --env from the backend adapter's own baseline,
--laws from config-v1 run.laws, --workspace from the canonical root,
--brief/--workdir from the workspace layout (for a transport=ssh machine the
--workdir is DERIVED instead as <worktrees_root>/wt-<stream> from that machine's
registered layout, which --remote-workdir may override), and --budget-usd from
the declared quote (2x, cap-is-derived-not-chosen).
For a transport=ssh machine the verb first DIALS the four facts a master otherwise probes by hand — far $HOME, the seat's profile home, the binary (present, absolute, digest) and the workdir — and any absence is a NAMED refusal that PRINTS THE COMMAND WHICH REPAIRS IT. Nothing is ever spawned or materialized here: this verb prints, the owner pastes.
Options
| Option | Type | Default | Description |
|---|---|---|---|
--cost-estimate-usd | float64 | 0 | the declared quote; --budget-usd is DERIVED from it as 2x (required) |
--effort | string | unset | mandate.effort — mirror --model, OPTIONAL and NEVER guessed: absent means the composed sentence carries no --effort at all (honest-unknown; saphan run itself records the absence as a fact) |
--identity | string | unset | executor identity seated on --machine (omit only when the machine carries exactly one seat) |
--machine | string | unset | admitted machine id this dispatch runs on (required — backend, binary and transport are derived from its record, never guessed); "auto" (order machine-auto-placement, Q1) resolves the seat through dispatch.Resolve instead — a READ-ONLY preview (scoped to claude-code seats, since this verb carries no --backend flag), never a reservation: this verb still only prints, the owner still pastes, and the paste is what reserves |
--model | string | unset | mandate.model for this dispatch — an economic decision, never a session default (omit ONLY when --role carries a configured dispatch.model default; the composed sentence records which source answered) |
--no-preflight | bool | false | do NOT dial the four §(b) facts (the checklist says so loudly — an undialled host is never reported as proven) |
--order | string | unset | path to the stream's order/brief (default: <worktree>/_MASTER_ORDER.md) |
--profile | string | execute | capability profile of the composed run |
--provision | stringArray | [] | explicit provisioning passthrough <source>=<dest> (repeatable, dispatch-verb order §(D)3), composed alongside config-v1 run.grant (if any) in the order given |
--remote-workdir | string | unset | absolute workdir ON THE FAR HOST (transport=ssh only) — an OVERRIDE: the workdir is normally DERIVED as <worktrees_root>/wt-<stream> from the machine record, and this flag wins over that derivation |
--reviewed | string | unset | the slug of the stream a --role review dispatch REVIEWS — the stream whose verdict this round discharges: carry its -rN suffix when the merging round is numbered, never the reviewer's own -review suffix; required with --role review, refused with any other (R52 at the spawn door); it is substituted into the review leg's injected _REVIEW_STATUS.md H1 rule |
--role | role | unset | fleet role whose configured dispatch defaults apply (master | executor | review | design | scribe | advisor) |
--slot | int | 0 | slot index to state explicitly (omitted = saphan run derives it from the identity's own seat) |
--stream | string | unset | stream slug to dispatch (required) |
--wall-clock | string | 90m | wall-clock ceiling of the composed run (generous: a tight one fabricates killed-timeout) |