Recording a decision from the console
Why the previous console's decision form refuses every act, and where a gate decision is recorded instead.
The previous console's queue (/console, also at /console/next) still draws a decision form
on each row whose gate the record currently owes you: a choice of decision, a box for the ground,
and the buttons Preview this decision and Record this decision.
⛔ Neither button records anything. The projection server holds no signing material and does not
sign on your behalf, on any tier. Every Preview, every Record, and the bulk form beside them, is
refused with 409, class owner-key-absent, and a reason that begins
console-does-not-sign: this console does not sign, on any tier. Nothing is read and nothing is
written. The same refusal answers the previous console's pull-request merge button.
Where a gate decision is recorded instead
An owner-class decision is authorised by a person's passkey, verified by the server — never by a password, and never by a key the console holds. Two places do that:
- The current console. Open the gate and act through its passkey prompt. What the prompt
shows you — decision, reason, gate, revision — is exactly what your passkey signs. A browser
needs an enrolled passkey first:
saphan console device enrol --web, run on the machine wheresaphan-serverruns, prints a one-use enrolment for one browser. Seesaphan console device. - A terminal, with a FIDO2 security key and an enrolled credential:
saphan gate <stream> --gate <gate> --decision <decision> --cli. Seesaphan gatefor the decisions each gate accepts, and rehearse withsaphan dry-run gate …, which runs the same checks and writes nothing.
Verify it from outside the console, the first time at least:
Your row should be listed with a valid signature.
If the previous console refuses before that
Two answers can arrive first, and they mean something different from the one above:
- A redirect to
/console/login— the request carried no live session. Sign in again; see Signing in. 403, classconsole-act-forgery— "this request carried a valid session cookie and no valid act token": the form you posted did not come from a freshly loaded console page of your session. Reload the queue. If you did not send that request, some other page did, and this check is what stopped it.
See What the console does not protect against for how the act token works.