Builder's guide · Section 16

Security checklist

Go through this list before real books go on the system.

  • The writer key is only on the console server, in a secret store. It is not in the repository, logs, or anything sent to a browser.
  • The administrator key is stored separately and is not used by the console.
  • The console's writer is a poster scoped to its own companies, not all companies unless needed.
  • The API is reachable only over TLS, and only from your writers' networks.
  • The console's database and the books' database use different logins, and neither login can reach the other database.
  • Sessions are HttpOnly, SameSite=Strict cookies, stored as hashes and revocable. Failed sign-ins are rate-limited.
  • Writes require a custom header that cross-site forms cannot send.
  • /v1/system/* (writer administration) is not relayed.
  • Every permission and approval is enforced on the server, with “not your own” also as a table constraint.
  • Person-name fields (prepared_by, closed_by, approver) are written by the server from the session.
  • The audit table refuses updates and deletes, and links each write to GAAPcore's request id.
  • A key rotation has been rehearsed: issue, deploy, revoke.
  • If an AI model is used for voice or search, it sees the command list only, never ledger data, and it cannot write without the on-screen confirmation.