Saphan StudioDocs
Reference/Commands

saphan gate

Records one human gate decision for a stream in the signed gate log.

Records one human gate decision for a stream in the signed gate log. The engine never decides: there is no default decision and no engine actor, and "merged" is never recorded here — it is observed from a real merge commit. A decision that skips a gate, or that records a gate earlier than one the stream has already passed, is refused and nothing is written.

saphan gate add-rate-limits --gate stop2 --decision accept --workspace /srv/saphan

Rehearse first with saphan dry-run gate …, which runs the same checks and shows the row it would write. The teardown gate is recorded by saphan teardown, which archives the stream's record first; --gate teardown here is refused and prints the equivalent saphan teardown command. A review decision records the reviewer's judgment, not the owner's; once a stream has a review, saphan merge requires a recorded accept or conditions on it.

A decision on stop1, stop2, merge or promotion is an owner act. ⚠ This is an owner act: it prints a one-time code on this terminal and waits for you to type it back. It is refused when no terminal is attached (for example from a script or a CI job), and in the console's browser terminal it is refused in favour of the console's passkey prompt. Until the person epoch for gates is declared (saphan trust gate-epoch declare), such a row is signed with the workspace key. After it, the command does not sign at this terminal: it opens the console's gate page in your browser and waits for your passkey touch, and it is refused if the console is not running; --cli takes the touch on this terminal with a FIDO2 security key instead. A review decision asks for no owner code and is signed with the workspace key.

saphan gate <stream>
flagtypedefaultwhat it does
--actorstringThe person deciding; defaults to SAPHAN_ACTOR, then the configured identity. It must name an enrolled, active actor in this workspace's signed actor registry; a spelling that differs only in case or spacing is refused, not corrected.
--cliboolfalseDecide an owner-class gate at this terminal with a FIDO2 security key instead of through the console's passkey page, so the row is signed by your own key and never by the workspace key; needs the key attached and an enrolled credential (saphan person enrol). Without --cli, the console page is used only after the person epoch for gates is declared; before it, the workspace key signs.
--decisionstringThe decision: accept, conditions, reject, ready-to-merge, or closed-without-merge (stop1 or stop2 only, to close a stream without merging it); required.
--gatestringWhich gate: stop1, stop2, merge, promotion or review; required.
--gate-idstringWhen connected to a gateway, the gate's ID, for when the stream and gate name alone do not identify it (see saphan gates). Refused on a local installation.
--merge-commitstringThe commit the stream landed as; required for --gate merge --decision ready-to-merge and refused otherwise. It is recorded as your assertion and not checked against a repository.
--notestringFree-form audit detail for the row: names and references only.
--out-of-orderstringDeliberately record a gate earlier than one the stream already passed; the value is the required reason, which is signed into the row.
--reasonstringYour reason for this decision, in your own words; it is recorded inside the signed decision. Required unless the installation's signed policy makes reasons optional.
--refstringA reference to the return this decision is about; for a review decision it is optional, and must match the delivery the record already holds.
--returnstringArrayBelongs to saphan teardown; accepted here only so a refused --gate teardown can fold these dispositions into the teardown command it prints.
--review-deliverystringWhich review delivery this decision is about, by the delivery ID the review return printed; needed only when no delivery has reviewed the stream's current tip.

saphan gate batch

Records several owner gate decisions from one JSON file, after a single read of fresh agent activity. Each item names its stream, gate, decision and a non-empty note, and is recorded as its own signed row. The batch is not all-or-nothing: each item is attempted in order, refusals are named per stream, and the outcome reads complete, partial or refused; re-running is safe. Only owner-class gates are admitted, so review decisions cannot be recorded through a batch. ⚠ This is an owner act: the command asks once, printing a one-time code on this terminal on a screen that names every decision in the file, and waits for you to type it back. It is refused when no terminal is attached (for example from a script or a CI job), and in the console's browser terminal it is refused in favour of the console's passkey prompt.

saphan gate batch <decisions.json>
flagtypedefaultwhat it does
--actorstringThe person deciding; defaults to SAPHAN_ACTOR, then the configured identity. It must name an enrolled, active actor in this workspace's signed actor registry; a spelling that differs only in case or spacing is refused, not corrected.

Global options apply to every command — see Every command.

On this page