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.
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.
| flag | type | default | what it does |
|---|---|---|---|
--actor | string | The 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. | |
--cli | bool | false | Decide 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. |
--decision | string | The decision: accept, conditions, reject, ready-to-merge, or closed-without-merge (stop1 or stop2 only, to close a stream without merging it); required. | |
--gate | string | Which gate: stop1, stop2, merge, promotion or review; required. | |
--gate-id | string | When 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-commit | string | The 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. | |
--note | string | Free-form audit detail for the row: names and references only. | |
--out-of-order | string | Deliberately record a gate earlier than one the stream already passed; the value is the required reason, which is signed into the row. | |
--reason | string | Your 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. | |
--ref | string | A reference to the return this decision is about; for a review decision it is optional, and must match the delivery the record already holds. | |
--return | stringArray | Belongs to saphan teardown; accepted here only so a refused --gate teardown can fold these dispositions into the teardown command it prints. | |
--review-delivery | string | Which 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.
| flag | type | default | what it does |
|---|---|---|---|
--actor | string | The 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.