outh — with what it means, why itsrc/klock/errors.ts is the single source of{ "error": "<code>", "message": "…" }, with the HTTPneeds and unlock (capability_missing,step_up_required), reason (session_revoked), sessions (session_limit). A 401WWW-Authenticate: Klock error="<code>".Error whosedevice_not_found: no device dev_….JwsError bad-signature, KlockFileError mode); each maps to an entry here,explainKlockError(err) from ts-prorm-orm/klock does theWhat to do (<code>).already_boundThat session is bound to another device key; rotate that key, or revoke the session and issue anotherprorm klock rotate.prorm sessions revoke <id>) and bind the new key.api/security/controllers/klock.ts).already_rotated.already_rotatedThis session has already been rotatedrotationId.prorm klock sync to pick up the rotated key.api/security/controllers/klock.ts).assumed_identityAn assumed identity cannot open or change klock sessions.api/basic/routes/security.js).check_in_requiredsync needed (past the check-in deadline)checkInBy deadline: offline, only public and local:use capabilities are honoured until the device syncs. The CLI treats this code as a refresh signal, and a service gate (db serve v2, a host agent) raises it for gated operations past a service grant’s checkInBy; the API itself does not send it (online, it checks the session live and lets the grant expire).prorm klock sync.prorm login.src/cli/core/cloud.ts), device agent / klock core (src/klock/agent/session.ts), device agent / klock core (src/klock/providers/db.ts).grant_expired.confirm_code_mismatchThe confirm code does not match the one the terminal printedprorm login yourself and compare the code on both screens.api/security/controllers/klock.ts).confirm_code_requiredOpening a session from the console needs the state and confirm code 'prorm login' printedprorm login and open the link it prints.api/security/controllers/klock.ts).confirm_code_mismatch.console_onlyOpen a klock session from the console ('prorm login'), not with a CLI tokenprorm login and approve it in the browser.api/security/controllers/klock.ts).fresh_signin_requiredReleasing a lockdown needs a fresh sign-inprorm login), then prorm lockdown release within 15 minutes.api/basic/routes/lockdown.js).lockdown, step_up_required.idle_timeoutidle_timeoutreason: idle; sessionIsLive returns this code over RPC; locally the agent reports sync needed.prorm klock sync; if the server has already revoked it, prorm login.api/security/controllers/klock.ts), device agent / klock core (src/klock/agent/session.ts).session_revoked.kind_unsupportedA service session is opened over a database or a local transfer job: resource {kind: "database" | "transfer-job", id}kind: "service" session was asked for without a resource, or over a kind of resource no service session stands for (a store). Service sessions are bound to one passwordless database session or one local transfer job.prorm klock upgrade on the holder.resource: {kind: "database", id, role, scope} or {kind: "transfer-job", id}.api/security/controllers/klock.ts).klock_unusableYour klock session cannot be used ({reason}). Run 'prorm login' again.prorm klock sync if the reason says a sync is needed.prorm login.--token or set PRORM_TOKEN.src/cli/core/cloud.ts).grant_expired, klock_tampered, check_in_required.lockdownThis account is locked down. Use account recovery, or wait for it to end.prorm lockdown (or the console’s Danger zone) on this account: every session was revoked, devices were suspended, and for 15 minutes every request of the account is refused — including from a session signed in after the lockdown. The body’s lockdownUntil says when the window ends.lockdownUntil, sign in again, and run prorm lockdown release (it needs your authenticator code).#/recover) gives a one-hour session that gets through the lockdown and can release it.prorm devices reinstate <id>.api/middleware/accessRules.js), API (api/basic/routes/lockdown.js), klock service (api/klock/contract.ts).access_denied, fresh_signin_required.login_v2_requiredThis API no longer issues legacy CLI tokens at sign-in. Update the CLI and run 'prorm login' (klock v2).CAPABILITY_E3=1) the login flow (POST /security/sessions/cli and the v1 relay POST /security/cli-logins) stops minting v1 bearer tokens. Tokens already issued keep working until they expire. An explicit personal token (purpose: "token", 30 days at most) is still issued for --token / PRORM_TOKEN.prorm login, which opens a klock v2 session.--token or PRORM_TOKEN.api/basic/routes/security.js).mfa_not_enrolledThis account has no second factor to step up withprorm security mfa enable, then prorm step-up.api/security/controllers/klock.ts).mfa_requiredAdmin accounts need a TOTP second factor. Enrol one, then try again.CAPABILITY_E3=1) every admin account must have a confirmed TOTP second factor, and the admin routes refuse an admin without one. The body carries enrol.setup and enrol.confirm, the enrolment routes, which stay open to the admin.prorm security mfa enable (or the console security page), which calls POST /security/mfa/setup then POST /security/mfa/confirm.prorm step-up --totp <code> before admin writes.api/auth.js).mfa_not_enrolled, step_up_required.not_boundThis session is not bound to a device key: use its v1 credential, or bind it (prorm klock upgrade)prorm klock upgrade on the holder.--klock-v2, which enrols the agent.api/security/routes/passwordless.js), API (api/basic/controllers/transfers.ts).device_signature_required.not_this_sessionOnly the session itself may do thisapi/security/controllers/klock.ts).not_yoursThat grant is not yours to hand overprorm login again.api/basic/routes/security.js).password_browser_onlyA password step-up is for the browser; use a TOTP codeprorm step-up --totp <code>, or prorm step-up --browser.api/security/controllers/klock.ts).recovery_failedThat recovery link or its details are not validapi/basic/routes/recovery.js).access_denied, too_many_attempts.rotation_proof_invalidThe new key's proof was refused: {reason}prorm klock rotate; if it persists, prorm login to enrol afresh.api/security/controllers/klock.ts).service_session_scopeA service session is used only for what it stands for (its database session or transfer job), and to check in or rotateprorm login on a machine the owner uses.api/security/controllers/klock.ts).wrong_subject.session_expiredsession_expiredexpiresAt / maxDuration. On the wire the API answers session_revoked with reason: expired; this code is what sessionIsLive returns to the klock service over RPC, and what the CLI also accepts.prorm login.api/security/controllers/klock.ts), device agent / klock core (src/klock/agent/session.ts).session_revoked.session_frozenThis klock session is frozenprorm step-up, then prorm sessions unfreeze <id>.prorm login.api/security/controllers/klock.ts).step_up_required.session_limitYou have {count} {kind} sessions, the most allowed. Revoke one first.refuse. The body lists the live sessions.prorm sessions.prorm sessions revoke <id>.api/security/controllers/klock.ts).session_requiredThe device holds no klock sessionprorm login.api/klock/lib/credentials.ts), API (api/security/controllers/klockCredentials.ts).session_revoked.session_revokedThis klock session has ended ({reason}). Sign in again.reason: expired), idled out (reason: idle), does not exist (unknown), is not device-bound, or its account is gone. The CLI drops the local session when it sees this. As 409 it means the session you tried to revoke is already revoked.prorm login.prorm sessions and prorm security audit.api/security/controllers/klock.ts), klock service (api/klock/contract.ts), MCP Worker (workers/mcp/src/auth.ts).session_expired, idle_timeout, device_revoked.session_unknownsession_unknownsessionIsLive (API ← klock service RPC) found no session for the id. Over HTTP the API answers session_revoked with reason: unknown.prorm login.api/security/controllers/klock.ts).session_revoked.step_up_failedThat code is not rightprorm step-up again with a fresh code.api/security/controllers/klock.ts).too_many_attempts, step_up_required.subject_unavailableThat passwordless session is revoked or expiredprorm passwordless issue) or create a new job, then bind that.api/security/controllers/klock.ts).team_not_activeThat team is not one you are an active member ofprorm teams list; accept the invitation or pick another team.api/security/controllers/klock.ts), library (src/capabilities.ts).CapabilityResolutionError:team_not_active.team_not_found.team_not_foundYou are not an active member of that teamprorm teams list.api/security/controllers/klock.ts).unknown_team.token_expiredThat MCP client token has expiredprorm mcp clients create --name "<client>" --caps … --days <n>.api/security/controllers/mcpForward.ts).token_invalid.token_invalidThat MCP client token is not valid/security/mcp/* routes take only a delegated MCP client token (Authorization: Bearer prorm_dt_…), and this one is unknown, malformed, not a delegated token, or its account no longer exists.prorm mcp clients create --name "<client>" --caps …, and put it in the client’s config.prorm_dt_ prefix.api/security/controllers/mcpForward.ts).token_revoked, token_expired.token_revokedThat MCP client token was revokedprorm mcp clients revoke, from the console, by a lockdown, or when the local prorm mcp that created it stopped.prorm mcp clients create, or restart prorm mcp.api/security/controllers/mcpForward.ts).token_invalid.too_many_attemptsToo many step-up attempts. Try again in a few minutes.prorm step-up with a fresh code.api/security/controllers/klock.ts).totp_requiredThis account has a second factor: step up with a TOTP codeprorm step-up --totp <code>.api/security/controllers/klock.ts).wrong_subjectThat service session stands for something elseprorm klock show).prorm klock upgrade, or open an agent session for the job.api/security/controllers/klock.ts), API (api/basic/controllers/transfers.ts).service_session_scope, not_bound.access_check_unavailableAccess rules could not be checked right now. Try again shortly.Retry-After seconds.api/middleware/accessRules.js).access_denied.access_deniedaccess_deniedaccess.denied).prorm access list and prorm access test.#/recover): it skips account rules for an hour.api/middleware/accessRules.js).would_lock_you_out, lockdown, recovery_failed.admin_not_delegableAdmin capabilities are never delegatedadmin:* capability was asked for on an MCP client token. Admin work needs a Klock session with a fresh step-up; no bearer ever holds it.admin:* capability from --caps.api/security/controllers/mcpForward.ts).not_delegable.capabilities_unavailableCould not resolve capabilities right nowGET /me/capabilities could not resolve the principal’s capabilities (a database hiccup).api/basic/routes/me.js), MCP Worker (workers/mcp/src/auth.ts).capability_missingThis session cannot do thatneeds) this session’s ceiling, your team role, or the API key does not have. The body’s unlock says what would give it: login, upgrade, team-role, step-up or none.unlock: login — sign in: prorm login.unlock: upgrade — the plan does not include it: prorm billing plans.unlock: team-role — ask a team owner or admin for a role that allows it.unlock: none — an API key or narrowed session cannot do it; use a full session.api/middleware/capabilities.js), API (api/basic/routes/provision.js), API (api/basic/routes/transfers.js).step_up_required, unauthenticated.capability_requiredA {provider} credential needs {caps}klock:sync for a person’s device, passwordless:use for a database host’s service session. It is re-resolved from live facts at issue. The same code covers a device kind that cannot hold the provider.prorm login).prorm klock upgrade).api/klock/lib/credentials.ts), API (api/security/controllers/klockCredentials.ts).provider_unavailable.confirmation_requiredconfirmation required: call again with confirm "{confirm}"confirm: "<token>".api/security/controllers/mcpForward.ts).invalid_profileInvalid behaviour profilehttps://prod-orm.io/schemas/klock-profile.v1.json) or its extends does not resolve, the preset is unknown, the mode is not report or enforce, or the scope is not account, team, device, session or service.prorm behaviour test --file profile.json.prorm behaviour presets lists the presets a profile can extend (extends: "preset:<name>").api/controllers/behaviour.ts).invalid_ruleThat rule is not validproblems lists each problem.problems lists; prorm access add --help shows each dimension’s value.prorm lockdown release, not by removing its rule.api/controllers/accessRules.ts).would_lock_you_out.not_delegableThese capabilities cannot be given to an MCP clientdelegated session mask: never other members’ devices or sessions, team-wide rules or profiles, or the right to create further MCP clients.notDelegable from --caps.api/security/controllers/mcpForward.ts).admin_not_delegable, unknown_capability.provider_unavailableThe {provider} provider is not available on the {plan} planprorm billing), or use the team whose plan includes it.api/klock/lib/credentials.ts), API (api/security/controllers/klockCredentials.ts).capability_required.resource_in_other_teamThat {kind} is already shared with another team. A resource belongs to at most one team: detach it there first.code field (with the message in error).api/controllers/ownership.ts).step_up_requiredThis needs a fresh step-up: prorm step-upWWW-Authenticate: Klock error="step_up_required"; bearer sessions get 403.prorm step-up (or prorm step-up --totp <code>), then the command again. On a terminal the CLI offers this itself.api/middleware/capabilities.js), API (api/auth.js), API (api/security/controllers/klock.ts).step_up_failed, capability_missing, mfa_not_enrolled.tool_not_foundUnknown tooltools/list) and call one of those.prorm mcp clients create --caps ….api/security/controllers/mcpForward.ts).capability_missing.transfer_quota_exceededthe file-transfer quota is reachedRetry-After).prorm klock inbox).prorm billing plans.api/klock/routes/transfers.ts).transfer_too_large, rate_limited.transfer_recipient_refusedno device you may send files to has that name or idfiles:team, or it is suspended, revoked or has no certificate. All of these get the same answer, so the route does not reveal which device ids exist.files:team (roles owner, admin, operator) in a team you both belong to.prorm devices list shows your own devices and their ids.files:team.support: with --reason.api/klock/lib/transfer-policy.ts).capability_missing.transfer_too_largethe transfer is over the per-transfer limitprorm klock cp runs.prorm billing plans.api/klock/routes/transfers.ts).transfer_quota_exceeded.unauthenticatedSign in to do thatprorm login.api/middleware/capabilities.js), MCP Worker (workers/mcp/src/auth.ts).unknown_capabilityUnknown capability idsunknown against prorm whoami or the capabilities guide.ns:* (for example resource:*) for a whole namespace.api/security/controllers/mcpForward.ts).not_delegable.unknown_kindunknown session kind {kind}src/capabilities.ts).CapabilityResolutionError:unknown_kind.unknown_teamUnknown teamprorm teams list, or pass no team to act for yourself.api/basic/routes/provision.js), API (api/basic/routes/transfers.js), API (api/team/routes/teams.js).team_not_found.would_lock_you_outwould_lock_you_outreasons say which allowlist or block it is; the CLI runs the same guard locally first.prorm access test shows how a request is judged).force: true (prorm access … --force): that needs a fresh step-up and a verified email address, which is how recovery reaches you.api/controllers/accessRules.ts), API (api/middleware/accessRules.js), device agent / klock core (src/klock/policy/access-rules.ts).access_denied, step_up_required.grant_expiredThe grant has expired; refresh itexp. Grants are short; the session behind them usually is not. The CLI syncs for a new grant and retries once automatically.prorm klock sync (online).prorm login.api/security/controllers/klock.ts), device agent / klock core (src/klock/jws.ts), device agent / klock core (src/klock/agent/session.ts), outh (Go) (outh/internal/klockv2/grant.go), MCP Worker (workers/mcp/src/auth.ts).JwsError:expired.session_revoked, check_in_required.grant_invalidThe grant was refused: {reason}grant_invalid.prorm klock sync.prorm login.api/security/controllers/klock.ts), API (api/basic/routes/security.js), klock service (api/klock/lib/trust.ts), device agent / klock core (src/klock/agent/session.ts), MCP Worker (workers/mcp/src/auth.ts).grant_expired, klock_tampered, jws_bad_signature.grant_not_yet_validthe grant is not valid yetnbf is ahead of this machine’s clock, beyond the allowed skew.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/grant.go).JwsError:not-yet-valid.clock_skew.grant_wrong_audiencethe grant is not for {audience}aud does not include the verifier (api, klock, a database gate).prorm login.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/grant.go).JwsError:wrong-audience.grant_wrong_devicethe grant is bound to another device keydeviceKeyThumbprint is not this device’s key: the klock was copied from another machine, or the key was rotated without a new grant.prorm klock sync; if that fails, prorm login to enrol this device.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/grant.go).JwsError:wrong-device.device_key_mismatch.grant_wrong_issuerthe grant is from {iss}, not {issuer}iss is not the API this klock is for — for example a staging grant against production.PRORM_API_URL / the profile, then prorm login against the right API.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/grant.go).JwsError:wrong-issuer.bad_popthe proof of possession does not verifyprorm login; if it persists, upgrade the CLI.api/klock/lib/enrolment.ts), API (api/security/controllers/klock.ts).cert_invalidthe device certificate does not verify: {reason}certify_failed.api/klock/lib/trust.ts).certify_failedthe API did not certify the device: {reason}prorm login in a moment.api/klock/lib/enrolment.ts).cert_invalid.credential_not_activethe credential is {status}; request a new oneprorm klock certs request.api/klock/lib/credentials.ts).credential_not_foundno such credential on this deviceprorm klock certs list.api/klock/lib/credentials.ts).device_key_enrolledthis device key is already enrolledprorm klock sync to use the existing enrolment.api/klock/lib/enrolment.ts).device_key_in_usethis device key is enrolled to someone elseprorm logout, then prorm login.api/klock/lib/enrolment.ts).device_key_invalidthe {what} is not a 32-byte base64url keyprorm login.src/klock/agent/devicekey.ts).DeviceKeyError:bad-key.device_key_mismatchThe grant is for another device key; enrol this device againprorm login to enrol this device again.api/security/controllers/klock.ts), klock service (api/klock/lib/device-auth.ts).HttpSigError:wrong-key.grant_wrong_device, klock_tampered.device_key_missingthe {what} is missingkeyStore: file).prorm login.src/klock/agent/devicekey.ts), device agent / klock core (src/klock/agent/index.ts).DeviceKeyError:missing.device_key_revokedthis device key was revoked; generate a new oneprorm logout, then prorm login.api/klock/lib/enrolment.ts).device_mismatchdeviceId is not the signing devicedeviceId that is not the device whose key signed it (over RPC: the session is bound to another device).prorm login if it was copied from elsewhere.api/klock/routes/sync.ts), API (api/security/controllers/klock.ts).device_key_mismatch.device_not_founddevice_not_found: no device {id}prorm devices list.api/klock/internal.ts).device_pendingthe device is pendingprorm devices pair <code>, or in the console.api/klock/lib/device-auth.ts).device_revokedthe device is revokedprorm login.prorm devices list and prorm security audit from another device.api/klock/lib/device-auth.ts), MCP Worker (workers/mcp/src/auth.ts).session_revoked, device_key_revoked.device_suspendedthe device is suspended/v2/credentials/*) do not, so a suspended device gets no certificate or principal.prorm devices show <id>.api/klock/lib/device-auth.ts), klock service (api/klock/routes/credentials.ts).invalid_stateinvalid_state: a {status} device cannot be suspendedprorm devices show <id>.api/klock/internal.ts).kerberos_realm_missingThe team has no Kerberos realm; create it firstkerberos:manage (owner, admin or security) creates the realm: POST /teams/:teamId/kerberos.api/klock/providers/kerberos.ts).keychain_write_failedcould not write keychain entry {entry}security unlock-keychain) and retry.keyStore: file (the key then sits in the 0600 file).src/klock/agent/devicekey.ts).DeviceKeyError:store-failed.klock_service_unavailableThe klock service could not register the device: {reason}prorm login in a moment; check https://status.prod-orm.io.api/security/controllers/klock.ts).pairing_expiredthat pairing code has expired; start pairing again on the new deviceprorm login --pair, and approve the new code.api/klock/internal.ts), API (api/controllers/devices.ts).pairing_not_found.pairing_kind_mismatchThe new device asked for a {kind} session, not {asked}--kind device (a trusted, lasting device) and the new device asked for interactive, or the reverse. The code is spent.prorm devices pair --kind device\|interactive) and approve with the same --kind.api/controllers/devices.ts).pairing_used.pairing_not_foundno pairing has that codeKXQ7-M2PD).prorm login --pair.api/klock/internal.ts), klock service (api/klock/routes/pair.ts), API (api/controllers/devices.ts).pairing_expired, pairing_used.pairing_usedthat pairing code has already been approvedprorm login --pair.prorm devices list.api/klock/internal.ts), API (api/controllers/devices.ts).pairing_not_found.provider_unknownno credential provider {provider}/v2/credentials/<provider> for a provider the klock service (or the API) does not have. The providers are tls and kerberos.prorm klock certs request for a TLS certificate.api/klock/lib/credentials.ts), API (api/security/controllers/klockCredentials.ts).reason_requiredSay why: a reason is required (it is kept in the audit log, and the owner is told)--reason "…" (the CLI) or fill in the reason (the console).api/controllers/devices.ts).seal_binding_invalidThe seal binding was refused: {reason}prorm login; if it persists, upgrade the CLI.api/security/controllers/klock.ts), klock service (api/klock/lib/enrolment.ts), klock service (api/klock/lib/trust.ts).ticket_expiredthe enrolment ticket has expiredprorm login.api/klock/lib/enrolment.ts), klock service (api/klock/lib/trust.ts).ticket_invalidThe enrolment ticket does not verify: {reason}prorm login.api/security/controllers/klock.ts), klock service (api/klock/lib/enrolment.ts), klock service (api/klock/lib/trust.ts).ticket_expired, ticket_used.ticket_usedthis enrolment ticket has been usedprorm login.api/klock/lib/enrolment.ts).tls_delivery_invalidthe delivery carries no certificatetls credential delivery (from the credentials route or sync) had no certificate in it.prorm klock sync, or prorm klock certs request.src/klock/providers/tls.ts).tls_key_invalidthe certificate is not for this device’s TLS keyprorm klock certs request.src/klock/providers/tls.ts).tls_not_enrolledthis klock has no enrolled deviceprorm login (or prorm klock init on a host).src/klock/providers/tls.ts).tls_store_failedthe keychain refused the TLS keysrc/klock/providers/tls.ts).transfer_expiredthe transfer has expiredprorm klock cp.api/klock/routes/transfers.ts).transfer_not_found.transfer_not_foundno such transferprorm klock cp yet.prorm klock accept on the sending device.prorm klock inbox on the receiving device for the ids waiting there.prorm klock inbox --sent lists what it sent.api/klock/routes/transfers.ts).transfer_expired.transfer_sender_revokedthe sending device is no longer trusted; the transfer was cancelledprorm devices list and your security events.api/klock/routes/transfers.ts).device_revoked, device_suspended.unknown_deviceno device is enrolled with this keybad_signature, so enrolment cannot be probed.prorm login.api/klock/lib/device-auth.ts).device_revoked, bad_signature.command_invalidthe command does not verify: {reason}api/klock/lib/trust.ts).feed_invalidthe revocation feed does not verify: {reason}api/klock/lib/trust.ts), MCP Worker (workers/mcp/src/auth.ts).sync_bad_envelopethe sync answer does not verify: {reason}syncSeq, or there is no verified keyset to check it with.prorm klock sync again; if it persists, prorm login.src/klock/agent/sync.ts), device agent / klock core (src/klock/agent/index.ts).SyncError:bad-envelope.sync_bad_grantthe synced grant does not verify: {reason}prorm login.src/klock/agent/sync.ts).SyncError:bad-grant.sync_httpklock sync answered {status} ({code})src/klock/agent/sync.ts).SyncError:http.sync_networkklock sync failed: {reason}prorm klock sync. Until checkInBy, the session keeps working offline.src/klock/agent/sync.ts).SyncError:network.sync_no_devicethe klock has no device to syncprorm login, or upgrade a v1 file with prorm klock upgrade.src/klock/agent/sync.ts), device agent / klock core (src/klock/agent/index.ts).SyncError:no-device.sync_nonce_mismatchthe sync answer is not for this request (replayed?)echoNonce is not the nonce this request sent — an old answer replayed.prorm klock sync again on a trusted network.src/klock/agent/sync.ts).SyncError:nonce-mismatch.sync_response_rollbackthe sync answer's syncSeq {seq} is lower than {seen} (rollback)klock.sync-rollback.prorm klock sync again on a trusted network.src/klock/agent/sync.ts).SyncError:rollback.sync_rollback.sync_rollbacksyncSeq {seq} is behind what this device has acknowledged ({ack})syncSeq is lower than one it already acknowledged: its klock was restored from a backup or copied from an older snapshot.prorm login.api/klock/routes/sync.ts).sync_seq_ahead, sync_response_rollback.sync_seq_aheadsyncSeq {seq} is ahead of anything issued ({issued})syncSeq is higher than any the service issued — the klock was edited, or belongs to another deployment.prorm login.api/klock/routes/sync.ts).bad_digestContent-Digest does not match the bodyapi/klock/lib/device-auth.ts).HttpSigError:bad-digest.signature_invalid.bad_noncebad_nonceDeviceGuard Durable Object was asked to claim a nonce that is not 16–64 base64url characters. It is internal to the API.api/sockets/device-guard.ts).bad_signaturethe signature does not verify against an enrolled device keyprorm klock sync; if it fails, prorm login to enrol again.api/klock/lib/device-auth.ts).HttpSigError:bad-signature.signature_invalid, device_key_mismatch.canonical_json_invalidnon-integer number {n}src/klock/canonical.ts), outh (Go) (outh/internal/canon/canon.go).CanonicalJsonError.clock_skewThe request was signed too far from the server's timecreated is more than 60 seconds from the server’s clock. The answer carries Klock-Server-Time; the CLI adopts that offset and retries once automatically, so you see this only when the retry fails too.sudo sntp -sS time.apple.com (macOS) or timedatectl set-ntp true (Linux).api/security/controllers/klock.ts), klock service (api/klock/lib/device-auth.ts), MCP Worker (workers/mcp/src/auth.ts).HttpSigError:clock-skew.signature_expired, rpc_clock_skew.csr_attestation_invalidcsrAttestation is not the device key's signature over the CSR keyklock/csr/v1). It is checked against the enrolled device key by klock, and again by the API against the session’s key. Here it did not verify: a different device key, a different CSR key, or a tampered request.prorm klock certs request again from the device itself.prorm klock verify: the device key may not be this klock’s.api/klock/providers/tls.ts), API (api/security/controllers/klockCredentials.ts).device_key_mismatch.csr_invalidcsr is one PEM CERTIFICATE REQUESTprorm klock certs request.docs/guides/klock.md.api/klock/providers/tls.ts), API (api/security/controllers/klockCredentials.ts).csr_key_type, csr_subject_mismatch.csr_key_typethe TLS key must be P-256 ECDSAprorm klock certs request.api/klock/providers/tls.ts), API (api/security/controllers/klockCredentials.ts).csr_invalid.csr_subject_mismatchthe CSR does not name this deviceCN=device/<deviceId> with exactly one URI name urn:prorm:device:<deviceId>, for the key the device attested. This CSR names another device, carries other names (DNS, IP, email, extra subject fields), or is for a different key than spki.prorm klock certs request.api/security/controllers/klockCredentials.ts).csr_invalid, csr_attestation_invalid.jws_bad_algalg must be EdDSA, not {alg}EdDSA) signatures only; anything else is refused before any key is looked up.prorm login, prorm klock sync).src/klock/jws.ts), outh (Go) (outh/internal/klockv2/jws.go).JwsError:bad-alg.jws_bad_headerunexpected header member {name}kid, or has members beyond alg, kid and typ.prorm klock sync.prorm login.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/jws.go).JwsError:bad-header.jws_bad_payloadnot a klock v2 grant: {why}prorm klock sync; if it persists, prorm login.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/grant.go).JwsError:bad-payload.jws_bad_signaturethe signature does not verifyprorm klock sync.prorm login.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/jws.go).JwsError:bad-signature.klock_tampered, grant_invalid.jws_bad_typtyp must be {expected}, not {typ}typ (grant, device certificate, sync envelope, ticket, command); one kind was presented where another is required.prorm klock sync for a fresh one.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/jws.go).JwsError:bad-typ.jws_malformeda compact JWS has three partsprorm klock sync to fetch a fresh copy.prorm login.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/jws.go).JwsError:malformed.grant_invalid.jws_unknown_kidno key for kid {kid}prorm klock sync online to refresh the keyset.src/klock/jws.ts), outh (Go) (outh/internal/klockv2/jws.go).JwsError:unknown-kid.keyset_invalid, no_keyset.keytab_invalidkeytab: {reason}prorm klock sync to receive the current keytab.prorm klock kerberos rotate for a new key.src/klock/providers/kerberos.ts), outh (Go) (outh/internal/klockv2/keytab.go), klock service (api/klock/providers/kerberos.ts).KeytabError:keytab_invalid.seal_auth_failed, seal_invalid.nonce_replayedThat signed request was already usedprorm sessions and revoke anything unknown.api/security/controllers/klock.ts).nonce_reused, rpc_replay.nonce_reusedthis request has been seen beforenonce_replayed: a sync or channel request reused a nonce.prorm klock sync again.api/klock/routes/sync.ts), klock service (api/klock/worker.ts).nonce_replayed.seal_auth_failedAES-GCM: authentication failedprorm klock sync so the server seals the secret to this device again.src/klock/crypto.ts), outh (Go) (outh/internal/klockv2/seal.go).seal_invalidmalformed sealed box{"v":1,"epk","n","ct"} box, has extra members, or names a low-order X25519 key.prorm klock sync to receive the credential again.src/klock/seal.ts), outh (Go) (outh/internal/klockv2/seal.go).seal_auth_failed.signature_expiredthe signature has expiredexpires). The request was held too long before it arrived, or the clock is off.api/klock/lib/device-auth.ts).HttpSigError:expired.clock_skew.signature_incompletethe signature must cover {component}@method, @authority, @path, @query, content-digest, authorization, klock-client, and idempotency-key / x-prorm-team when present).api/klock/lib/device-auth.ts).HttpSigError:missing-component.signature_invalid.signature_invalidThe request signature was refused: {reason}Authorization: Klock request: a component is missing, the digest does not match the body, the key is not the grant’s device key, or the signature does not verify. The klock service reports the same failures with finer codes (bad_signature, bad_digest, signature_malformed, …).prorm klock sync.Authorization header.prorm login.api/security/controllers/klock.ts), MCP Worker (workers/mcp/src/auth.ts).bad_signature, clock_skew, device_key_mismatch.signature_malformedthe signature keyid is not a device thumbprintSignature-Input / Signature headers do not parse, carry unexpected parameters, or lack the klock-v2 tag.npm i -g ts-prorm-orm@latest); an old or third-party signer produced it.api/klock/lib/device-auth.ts).HttpSigError:malformed, HttpSigError:bad-params, HttpSigError:bad-tag.signature_invalid.transfer_chunk_corruptthe chunk on the relay is not the one the sender storedprorm klock refuse <id>) and ask the sender to send it again.api/klock/lib/transfer-store.ts).transfer_key_invalidwrappedKey is not a sealed 32-byte keyklock-seal-v1: a 32-byte ephemeral key, a 12-byte nonce and a 48-byte ciphertext). The relay cannot open it, but it refuses one that has the wrong shape.prorm klock cp.api/klock/routes/transfers.ts).transfer_manifest_sig_invalid, seal_invalid.transfer_manifest_sig_invalidthe manifest signature does not verifyklock-manifest+jws over the transfer id and the manifest exactly as offered). The signature did not verify, was by another key, or covered another list or transfer. It is recorded as a tamper event.prorm klock cp; if it happens again, run prorm klock verify.api/klock/routes/transfers.ts).transfer_key_invalid.unsignedthe request is not klock-signed: {reason}Authorization: Klock <grant> or Klock device=<thumbprint>.prorm login.api/klock/lib/device-auth.ts).signature_malformed.klock_coordinates_missingthe .klock does not say which {missing}; pass --{flags}databaseId, sessionId or role, for example because outh wrote it or rewrote a prorm file.--database --session --role), or $OUTH_DATABASE / $OUTH_SESSION_ID.prorm passwordless issue / prorm roles grant.src/cli/basic/commands/passwordless.ts), library (src/store-key.ts).klock_format_invalid{path}: {reason}src/klock/klock-file.schema.json.prorm klock show <path> to see what is wrong.prorm passwordless issue, prorm login for a device session).src/klock/format.ts), device agent / klock core (src/klock/agent/store.ts), library (src/klock-io.ts), outh (Go) (outh/internal/klock/format.go).KlockStoreError:format, KlockFileError:format, KlockFormatError.klock_version_unsupported.klock_io_failedcannot read {path}: {reason}security unlock-keychain) and try again.src/klock/agent/store.ts).KlockStoreError:io.klock_mode_insecure{path} is mode {mode}; it must be 0600.klock holds a secret (v1) or names a device key (v2), so every reader refuses a file anyone but the owner can read.chmod 600 <path>.prorm passwordless revoke <session>, or prorm devices revoke <id> for a device) and re-issue.src/klock/agent/store.ts), library (src/klock-io.ts), outh (Go) (outh/internal/klock/klock.go).KlockStoreError:mode, KlockFileError:mode.klock_not_foundNo .klock at {path}.--klock, then $OUTH_KLOCK, then ./.klock (for a profile klock, ~/.prorm/klock/<profile>.klock)../.klock.$OUTH_KLOCK points at an old location.--klock, then $OUTH_KLOCK, then ./.klock.prorm passwordless issue --database <id> --read (a cloud session) or prorm db init (a local database).prorm login.src/klock/agent/store.ts), library (src/klock-io.ts), outh (Go) (outh/internal/klock/klock.go).KlockStoreError:not-found, KlockFileError:missing.klock_path_invalid.klock_overwrite_refused{path} holds a klock of kind {kind} (a device identity); write this one elsewhere with --klock <file>passwordless issue, roles grant or db init would have overwritten a version 2 device identity or a klock sealed with an integrity tag.--klock with another path.src/cli/basic/commands/passwordless.ts).klock_path_invalida profile name is letters, digits, '.', '_' and '-': {name}- was given where a file must be read, ~ has no home directory to expand to, or a profile name has characters outside [A-Za-z0-9._-].--klock <file>.., _ and -.$HOME when running in a container or service account without one.src/klock/path.ts), outh (Go) (outh/internal/klock/path.go).klock_not_found.klock_read_onlyrefusing to write a version {version} klock--klock <file>.src/klock/format.ts), device agent / klock core (src/klock/agent/store.ts), outh (Go) (outh/internal/klock/write.go).KlockStoreError:read-only.klock_secret_lengtha local klock secret is 32 bytes; this one is {length}writeKlock was handed a secret that is not exactly 32 bytes.$OUTH_SESSION_SECRET was not the secret the issue response returned.prorm passwordless issue) or re-run prorm db init for a 32-byte secret.outh, set $OUTH_SESSION_SECRET to the exact secret, or unset it so outh keeps its own.src/local-klock.ts), library (src/store-key.ts), library (src/transfer/transfer-klock.ts), CLI (src/cli/basic/commands/passwordless.ts), outh (Go) (outh/internal/klock/klock.go).klock_secret_missing{path} holds no secretsecret field is empty or missing. A version 2 service klock issued without a v1-compatible secret signs with its device key, which some readers do not do yet.src/local-klock.ts), library (src/store-key.ts), library (src/transfer/transfer-klock.ts), device agent / klock core (src/klock/format.ts), outh (Go) (outh/internal/klock/klock.go).klock_secret_length.klock_secret_ref_unresolved{path}: the database password is not in the file (urlSecretRef {ref})urlSecretRef (env:NAME or keychain:<service>/<account>), and neither the environment, the .env beside the klock, nor this machine's keychain has it..env..env that prorm db init wrote beside the klock.src/klock-io.ts).KlockFileError:secret-ref.klock_tamperedthe klock integrity tag does not match (the file was edited)klock sync is tried, and the finding klock.tamper-detected is reported at the next sync.api URL).prorm klock sync; the server re-issues the grant if the session and device key are still valid.prorm login.prorm devices list for devices you do not recognise and revoke them.src/klock/agent/store.ts), device agent / klock core (src/klock/agent/devicekey.ts), device agent / klock core (src/klock/agent/index.ts).DeviceKeyError:mismatch.grant_invalid, device_key_mismatch.klock_version_unsupported{path} is version {version}; this build understands versions 1 and 2version is newer than this build understands, or missing. prorm klock show still shows a newer file, read-only.npm i -g ts-prorm-orm@latest.src/klock-io.ts), outh (Go) (outh/internal/klock/klock.go).KlockFileError:version.klock_read_only.klock_wrong_kind{path} is a klock of kind {kind}, not a database session--klock (or StoreKey.fromKlock) at the database session’s own .klock.LocalKlockGate / prorm db serve, use the file prorm db init wrote. A cloud .klock belongs to StoreKey.src/klock-io.ts), library (src/local-klock.ts), library (src/store-key.ts), CLI (src/cli/basic/commands/passwordless.ts).KlockFileError:kind.gate_auth_refusedpresent a valid klock token: Authorization: Klock <token>reason says why (missing, not valid, expired, not yet valid, already used).LocalKlock.token()).src/local-klock.ts).GateRefusedError:auth.gate_token_expired, gate_token_replayed, gate_token_invalid.gate_query_failedthe query failed; the gate logged whyprorm db serve) for the engine’s message.exposeErrors: true to get the message in the response.src/local-klock.ts).gate_scope_refusedrefused: this gate does not permit writesscope (ops or tables), or which tables it touches cannot be told.scope in the gate’s klock and restart prorm db serve.src/local-klock.ts), library (src/local-klock-scope.ts).GateRefusedError:scope.gate_token_expiredrefused: the token expiredsrc/local-klock.ts).gate_token_invalidrefused: the token is not validprorm db init writes both).src/local-klock.ts).gate_token_missingrefused: no tokenAuthorization: Klock <token>.Authorization: Klock <token> from LocalKlock.token().src/local-klock.ts).gate_token_not_yet_validrefused: the token is for a window not yet startedsrc/local-klock.ts).gate_token_replayedrefused: the token has already been usedsrc/local-klock.ts).authority_unavailableThe certificate authority could not signKERBEROS_AUTHORITY_URL/KERBEROS_AUTHORITY_TOKEN), or the authority answered with something the API refused to bind (a certificate for another key or subject)./healthz and the API’s KERBEROS_AUTHORITY_* settings.api/klock/providers/tls.ts), klock service (api/klock/lib/credentials.ts), API (api/security/controllers/klockCredentials.ts).crypto_unavailableklock: no cryptography available (neither node:crypto nor WebCrypto)node:crypto nor WebCrypto with Ed25519 and X25519.src/klock/crypto.ts).keyset_invalidthe API's keyset does not verify: {reason}prorm klock sync later; upgrade the CLI if the roots were rotated.src/klock/keys.ts), klock service (api/klock/lib/trust.ts), MCP Worker (workers/mcp/src/auth.ts).KeysetError.keyset_rollback.keyset_rollbackkeyset seq {seq} is older than {minSeq} (rollback)seq is lower than one already verified: an old keyset replayed, which could re-admit a retired key.src/klock/keys.ts), klock service (api/klock/lib/trust.ts).klock_key_unpublishedthe keyset does not publish klock key {kid}KLOCK_SERVICE_KID, or fix the kid.api/klock/lib/trust.ts).klock_roots_invalidPRORM_KLOCK_ROOTS must be a JSON array of {kid, x} Ed25519 roots{kid, x} keys. It is ignored in production builds.PRORM_KLOCK_ROOTS.src/klock/keys.ts), outh (Go) (outh/internal/klockv2/roots.go).klock_unconfiguredKLOCK_RPC_PUB is not configured: ApiInternal refuses every callKLOCK_RPC_PUB, API_RPC_PUB, a klock seed) is missing or malformed, so every RPC call is refused.api/controllers/klockGrants.ts), klock service (api/klock/env.ts).klock_v2_unavailableklock v2 is not available: cannot {what}KLOCK_GRANT_KEY is not set, no verified keyset is published, or the keyset does not certify the key. Legacy bearers and API keys keep working.prorm login --legacy), or retry later.KLOCK_GRANT_KEY and publish a keyset (see docs/runbooks/credential-rotation.md).api/controllers/klockGrants.ts), API (api/security/controllers/klock.ts).no_keyset, klock_unconfigured.mcp_unavailableThe MCP tool registry on this API is out of datets-prorm-orm), or the key that confirmations and forwarded calls are signed with is not configured.ts-prorm-orm whose mcp/registry has needs, and set JWT_SECRET.prorm mcp and ordinary CLI commands keep working.api/security/controllers/mcpForward.ts).no_keysetNo klock keyset is publishedapi/basic/routes/security.js), klock service (api/klock/routes/public.ts), klock service (api/klock/lib/trust.ts), MCP Worker (workers/mcp/src/auth.ts).klock_v2_unavailable.secrets_key_missingPasswordless access needs SECRETS_KEY to be configuredSECRETS_KEY on the API.api/security/routes/passwordless.js), API (api/basic/routes/security.js).tls_unavailableWebCrypto is not available heresrc/klock/providers/tls.ts).api_unavailablethe revocation feed is unavailableapi/klock/routes/public.ts), klock service (api/klock/lib/enrolment.ts).bad_argumentsMissing argument: {name}inputSchema requires.api/security/controllers/mcpForward.ts).bad_intentThe signed body is not one JSON-RPC tools/call/internal/mcp/forward must be exactly one JSON-RPC tools/call. The body was not JSON, was a batch, or was another method.tools/call per request. A client that batches should call tools one at a time.api/security/controllers/mcpForward.ts).intent_mismatch.bad_requestthe body is not an objectapi/klock/routes/router.ts), klock service (api/klock/lib/http.ts), API (api/sockets/device-guard.ts), API (api/security/controllers/klock.ts).body_too_largethe body is over {limit} bytesapi/klock/routes/router.ts), klock service (api/klock/lib/http.ts), API (api/sockets/device-guard.ts), API (api/security/controllers/klock.ts).intent_mismatchThe relayed tool call is not the one the device signedapi/security/controllers/mcpForward.ts).bad_intent, signature_invalid.internalklock could not complete the requestapi/klock/routes/router.ts), klock service (api/klock/lib/http.ts), API (api/sockets/device-guard.ts), API (api/security/controllers/klock.ts).method_not_alloweduse {allow}api/klock/routes/router.ts), klock service (api/klock/lib/http.ts), API (api/sockets/device-guard.ts), API (api/security/controllers/klock.ts).not_foundno such routeprorm sessions, prorm devices list.api/klock/routes/router.ts), klock service (api/klock/lib/http.ts), API (api/sockets/device-guard.ts), API (api/security/controllers/klock.ts).not_implementedpairing is not available yet (S2)api/klock/routes/router.ts), klock service (api/klock/lib/http.ts), API (api/sockets/device-guard.ts), API (api/security/controllers/klock.ts).policy_unavailablethe access rules could not be readgrantError: "policy_unavailable" and no grant.API service binding and that the API’s KLOCK_RPC_PUB matches klock’s KLOCK_RPC_KEY.api/klock/lib/policy.ts), klock service (api/klock/routes/sync.ts), klock service (api/klock/routes/enrol.ts).access_denied, api_unavailable, klock_unconfigured.rate_limitedtoo many syncsRetry-After says when to try again.Retry-After seconds, then retry.api/klock/routes/router.ts), klock service (api/klock/lib/http.ts), API (api/sockets/device-guard.ts), API (api/security/controllers/klock.ts).rpc_args_mismatchthe arguments are not the ones signedErrors whose message starts with the code (rpc_args_mismatch: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts), API (api/controllers/klockGrants.ts).rpc_bad_signaturethe call signature does not verify: {reason}Errors whose message starts with the code (rpc_bad_signature: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts), API (api/controllers/klockGrants.ts).rpc_clock_skewthe call was signed too far from nowiat is outside the allowed window: the two Workers’ clocks disagree or the call was delayed. RPC errors cross the service binding as Errors whose message starts with the code (rpc_clock_skew: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts), API (api/controllers/klockGrants.ts).rpc_malformedthe call has no usable nonceErrors whose message starts with the code (rpc_malformed: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts), API (api/controllers/klockGrants.ts).rpc_replaythe call nonce has been usedErrors whose message starts with the code (rpc_replay: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts), API (api/security/controllers/klock.ts).rpc_unsignedthe call is not signedErrors whose message starts with the code (rpc_unsigned: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts), API (api/controllers/klockGrants.ts).rpc_wrong_audiencethe call is not for {aud}Errors whose message starts with the code (rpc_wrong_audience: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts), API (api/controllers/klockGrants.ts).rpc_wrong_callerthe call is not signed by {keyid}Errors whose message starts with the code (rpc_wrong_caller: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts).rpc_wrong_methodthe signature is for another methodErrors whose message starts with the code (rpc_wrong_method: …); users never see them directly, only as a failed request that depended on the call.API_RPC_KEY/API_RPC_PUB and KLOCK_RPC_PUB are the matching pair on both Workers, and that both are deployed from the same release.api/klock/lib/rpc.ts), API (api/controllers/klockGrants.ts).transfer_chunk_existsthe chunk is already stored; a chunk cannot be replacedprorm klock cp.api/klock/routes/transfers.ts).transfer_chunk_invalidthe chunk is not one this transfer hasprorm klock cp.api/klock/routes/transfers.ts).transfer_chunk_exists.transfer_chunk_missingthe chunk is no longer on the relayprorm klock cp.api/klock/lib/transfer-store.ts), klock service (api/klock/routes/transfers.ts).transfer_expired.transfer_incompletesome chunks have not been uploadedprorm klock cp (an interrupted upload is not resumed).api/klock/routes/transfers.ts).transfer_manifest_invalidthe manifest is not acceptable: {reason}prorm klock accept: relative plain names (no absolute path, drive letter, .., . or empty segment, no control characters, each segment at most 255 bytes), no duplicates, sizes and SHA-256s well formed, at most 10000 files, and totalBytes, chunks and chunkSize that agree with the list.prorm klock cp itself sent this, report it: the client checks the same rules first.api/klock/routes/transfers.ts).upgrade_requiredGET /v2/channel is a WebSocket/v2/channel is a WebSocket endpoint.prorm klock agent does).api/klock/routes/router.ts), klock service (api/klock/lib/http.ts), API (api/sockets/device-guard.ts), API (api/security/controllers/klock.ts).device_signature_requiredThis session is bound to a device key: sign the request with it (klock v2)v2, so its v1 secret no longer opens it. Whoever still holds the old secret — an old copy of the file, outh before the upgrade — is refused.v1+v2 instead of v2.api/security/routes/passwordless.js).not_bound.v1_beyond_sessionThe grant exceeds the session: {what}api/security/routes/passwordless.js).v1_client_cert_requiredThis session presents a client certificate; none arrived.--auth tls session was used without its certificate, or with someone else’s..klock with its tls block through StoreKey, which presents it on the mutually-authenticated endpoint.api/security/routes/passwordless.js).v1_credential_malformedA credential is <body>.<signature><body>.<signature> in base64url, or its body is not a grant, names no role, or permits nothing.StoreKey, or a current outh.api/security/controllers/passwordless.ts), device agent / klock core (src/klock/v1.ts), outh (Go) (outh/internal/grant/grant.go).v1_grant_not_canonicalThe body carries more than the grant it decodes toouth that HTML-escaped <, > and & in table names.StoreKey, or a current outh.api/security/controllers/passwordless.ts), device agent / klock core (src/klock/v1.ts), outh (Go) (outh/internal/grant/grant.go).v1_kerberos_refusedThis session presents a Kerberos ticket; send it as Authorization: Negotiate <token>.--auth kerberos session was used without its ticket, with someone else’s, or the file has no kerberos block..klock with its kerberos block through StoreKey.outh spnego, issue with --auth kerberos.api/security/routes/passwordless.js), library (src/store-key.ts).v1_kerberos_unavailableThe Kerberos authority could not check the ticket: {reason}KERBEROS_AUTHORITY_TOKEN.api/security/routes/passwordless.js).v1_query_invalidA query is one of select, insert, update or deleteselect\|insert\|update\|delete) naming its table, not SQL.{ op, table, … }; see prorm passwordless query --help.api/security/routes/passwordless.js), CLI (src/cli/basic/commands/passwordless.ts).v1_role_goneThe role this session was granted no longer existsroles grant session was deleted.prorm roles grant.api/security/routes/passwordless.js).v1_role_mismatchThe grant is for a different role than the sessionrole or entId in the file was changed, or overridden with --role / --ent-id.api/security/routes/passwordless.js).v1_session_unusableThat session cannot be usedexpiresAt. The API deliberately does not say which.prorm passwordless issue --database <id> --read.api/security/routes/passwordless.js).v1_signature_mismatchThe signature does not match this session.klock that belongs to that sessionId, or re-issue.api/security/controllers/passwordless.ts), device agent / klock core (src/klock/v1.ts), outh (Go) (outh/internal/grant/grant.go).v1_unknownUnknown sessionprorm passwordless list and the database id.api/security/routes/passwordless.js).v1_window_expiredThe grant expired about {age} seconds agoapi/security/controllers/passwordless.ts), device agent / klock core (src/klock/v1.ts), outh (Go) (outh/internal/grant/grant.go).v1_window_not_startedThe grant is for a window that has not startedapi/security/controllers/passwordless.ts), device agent / klock core (src/klock/v1.ts), outh (Go) (outh/internal/grant/grant.go).v1_wrong_databaseThat session is for a different database:id in the path is not the session’s database. A .klock written before databaseId was recorded sends the uuid when the holder is not signed in, which an API without the uuid/id fix refuses.databaseId).--database <id> or $OUTH_DATABASE; for StoreKey, databaseId.api/security/routes/passwordless.js).