Skip to main content

Trust

Every control here says what enforces it, and where it stops.

This page describes the controls in our repository, and where each one stops. Some of these controls are not yet in the build we run. Nervos holds no certification and says so. Each statement below is traceable to a file or a migration.

Identifiers such as HIST-01 refer to the claims register. It gives each claim’s status in our repository. Its production column follows our next production verification.

The security address at the foot of every page is the responsible-disclosure channel. It reaches a person.

Posture

What is held, what is not, and what is public.

Buyers waste weeks discovering which claims on a security page are certifications and which are mappings. Here they are separated.

Nervos has no customers yet.

Not for CUI. Nervos holds no FedRAMP authorization. Its controls are mapped to NIST 800-171 and the SOC 2 criteria, not certified against them.

The claims register gives the status of each of our security claims in our repository. Its production column follows our next production verification.

Security documents: public, on request, and not held
DocumentStatusNote
Security overviewPublicThis page.
Claims registerPublicEach claim’s status in our repository.
Model-output controlsPublicPrompt injection and excessive agency, mapped to OWASP.
Ledger verifierPublicRecomputes an execution-ledger export in your browser.
Sub-processorsPublicEvery provider that processes customer data.
Data Processing AddendumPublicCovers the return and deletion of your data.
Security questionnaireOn requestPre-filled, in the SIG and CAIQ style. Its sign-on and provisioning answers are being revised.
Full claims register, with evidenceOn requestUnder NDA.
NIST 800-171 and SOC 2 criteria mappings, with evidenceOn requestUnder NDA. Mappings, not certifications.
SOC 1 reportNot heldNo auditor has been engaged.
SOC 2 reportNot heldNo auditor has been engaged.
ISO 27001 certificateNot heldNo auditor has been engaged.
Third-party penetration test reportNot heldAn internal hardening review was completed in June 2026.
Cyber and tech E&O insurance certificateNot heldNot yet held.

Control alignment

NIST 800-171, with each control tied to the code that enforces it.

Each row describes the control in our repository. It is marked enforced when its implementation there is a structural constraint. That means blocking rather than logging, and verifiable from source. It is marked partial when part of it does not hold yet, and the row says which. A control’s status in the service we run follows our next production verification. Nothing in this table is a policy statement.

Enforced
in our repository: blocking, verifiable from source
Partial
in our repository: part holds, and the row names what does not yet
NIST 800-171 control alignment, status in our repository
FamilyControlNameImplementationRepository status
Access controlAC-5Separation of dutiesAn approval by the proposer on record is refused, at approval and again at dispatch. Until a pending migration is applied, a member can set who is on record (SOD-01).Partial
Access controlAC-6Least privilegeFour roles (viewer, analyst, admin, owner), each with a fixed set of capabilities. In our repository, this control is partial (RBAC-01).Partial
Access controlAC-17Remote accessEvery session requires a valid, short-lived token. Connector credentials are encrypted with AES-256-GCM, or held in Supabase Vault where it is enabled. In our repository, their binding to an organization is partial (SECRETS-03, SECRETS-04).Partial
Audit and accountabilityAU-2Audit eventsThe server audits proposal creation, approval, rejection, execution, rollback, replay and credential changes, with the caller’s identity and the action type. Audit writes are best-effort. A write that fails leaves a server log line and no row, and does not fail the request. In our repository, a member writes no audit row (AUD-02). In our repository, each row the server writes belongs to the organization it concerns (AUD-01).Partial
Audit and accountabilityAU-9Protection of audit informationThe execution step ledger is hash-chained. Each row’s hash covers its own content and the previous row’s hash. An altered row, or a deleted row with rows after it, breaks the chain at that row. Removing the last rows, or rewriting from one row to the end, does not. The chain has no external anchor. Members cannot update or delete a row. The database owner can, and until a pending migration is applied so can anyone holding the service key (HIST-01).Partial
Audit and accountabilityAU-12Audit record generationAutomatic on every state transition in the governed execution path. If the preflight step cannot be written, nothing is sent. If the step recording a sent write cannot be written, the result is flagged ledgerMissing and that write is missing from the chain.Partial
Configuration managementCM-5Access restrictions for changeIn our repository, a write is dispatched only under a server-recorded human authorization bound to the proposal (AUTHZ-01). In our repository, a revocation stops it up to the send (AUTHZ-04). Its separation of duties rests on the proposer on record (SOD-01).Partial
Identification and authenticationIA-2Identification and authenticationEvery signed-in API route validates the caller before any data access. Webhook and cron routes check a signature or a secret instead. Access that bypasses row-level security is limited to an allowlist of files. A test fails on any new use. It blocks a merge only where CI runs and the main branch is protected (CI-02).Partial
System and information integritySI-7Software and information integritySHA-256 hash chaining on the ledger. In our repository, a NetSuite webhook event is accepted only inside a replay window (INGEST-01). Content Security Policy is enforced, not report-only. Its script-src still allows inline scripts (HDR-01). A dependency audit is configured to run on every push (CI-02).Partial

Architecture

Six properties, and what enforces each.

Each item says what enforces it. A sentence that holds only in our repository says so. A property’s status in the service we run follows our next production verification.

  1. 01

    Row-level security on every table.

    Row-level security is on every table in the public schema, per the production catalog read on September 24, 2026 (RLS-01). The service role bypasses it, so server code scopes by organization itself. In our repository, each tenant table’s policies scope rows to the caller’s organization (TEN-01). Three read policies, on the global catalog and the public status, admit every row by design. A test fails on a table without a policy, an over-permissive policy or an unreviewed bypass. It blocks a merge only where CI runs and the main branch is protected (CI-02).

    Postgres · tests
  2. 02

    Credentials encrypted at rest.

    Connector credentials are encrypted with AES-256-GCM, or held in Supabase Vault where it is enabled. In our repository, their binding to an organization is partial (SECRETS-03, SECRETS-04).

    AES-256-GCM · Vault
  3. 03

    Webhooks checked against a secret.

    In our repository, a NetSuite webhook event is accepted only inside a replay window, and recorded once per account (INGEST-01). In our repository, it must carry an HMAC-SHA256 over its timestamp, event id and body (INGEST-01). Until the NetSuite sending script is updated, the legacy shared-secret header is accepted instead.

    HMAC-SHA256
  4. 04

    A hash-chained ledger.

    Each step carries the SHA-256 hash of the step before it. An altered step, or a deleted step with steps after it, breaks the chain at that step. The ledger verifier recomputes an export’s chain in your browser. Members cannot update or delete a step. The chain has no external anchor. The database owner can delete the last steps, or rewrite a step and every step after it, without detection. Until a pending migration is applied, so can anyone holding the service key (HIST-01).

    migration 0030
  5. 05

    Secret scanning and dependency audits.

    A dependency audit is configured to run on every push. Secret scanning is configured for pull requests and pushes to the main branch, and runs nightly. The claims register records whether CI runs (CI-02). Environment files, keys and secrets directories are excluded from the repository. Content Security Policy is enforced. Its script-src still allows inline scripts (HDR-01).

    CI
  6. 06

    The reasoning layer holds no credentials.

    Analysis produces a proposal that enters the queue and waits for a person. No model can approve, and no model has credentials for any connected system.

    write gate

Data handling

Where the data lives and which providers touch it.

The sub-processor register is public and lists every provider named here.

Residency
Supabase on AWS us-west-2 (Oregon)
One shared, multi-tenant service. No dedicated or regional deployment is available today.
Model inference
Groq
Decision objectives and their context are sent to Groq when an analysis runs. The sub-processor register lists what each provider receives. Groq’s API terms state that prompts are not used to train its models. The provider’s data processing agreement is available.
Embeddings
OpenAI, optional
Used for semantic recall when an OpenAI key is configured. When it is, the text of decision objectives and memory entries is sent to compute embeddings.
Retention and deletion
Set in the Data Processing Addendum
The addendum covers the return of your data and its deletion on termination.
Sub-processors
Published register
Updated when a provider changes.
Data processing
Data Processing Addendum
A GDPR-aligned template. A custom DPA on Enterprise.

Documentation package

Under NDA, the full set.

The package holds the full claims register, with its evidence. It holds the NIST 800-171 and SOC 2 criteria mappings, with their evidence, and the pre-filled security questionnaire.

It carries the mechanism detail of findings still open in production, until they are fixed.

The ledger verifier

Recompute an execution ledger in your browser.

Paste an execution-ledger export and recompute its SHA-256 chain. The check makes no server round-trip and needs no account. The verification page says how to reproduce each of its claims. Most need a signed-in user on a Nervos tenant.