Security & trust
This page exists because your security reviewer deserves better than a marketing table. Every control below is listed with the status it actually has in our control ledger — shipped, armed at deploy, or not built. If a row says shipped, there is code and there is a test. If a row says not built, we say that instead of describing an aspiration in the present tense.
This is evidence software with client-held judgment. Your team, or the advisor you choose, makes every regulatory decision and holds every government credential. The platform makes the evidence behind those decisions traceable, reviewable and reproducible — what a source said, who concluded what, and which exact version supported what you sent out. The platform files nothing, certifies nothing, and renders no legal or chemical conclusion. That is not a limitation we are working around; it is the design, and the gates that enforce it are deterministic code covered by tests.
Statuses mirror our internal control ledger exactly. SHIPPED means code enforced and covered by tests. ARMED AT DEPLOY means the code is shipped and a production setting switches it on. NOT BUILT means what it says.
| Control | Status | What it actually does |
|---|---|---|
| Tenant isolation | SHIPPED | Row-tenant checks on every direct-object route, cross-tenant negative tests including refused writes, and workspace isolation self-checks across six invariant families run as a scripted exit-code gate. |
| Authentication | SHIPPED | Salted PBKDF2-SHA256 password hashing (600k iterations, versioned). TOTP MFA verified against the RFC 6238 test vectors. Per-account lockout after 5 failures in 15 minutes, with an identical failure message for wrong password, locked, and unknown accounts — no account existence oracle. Per-IP rate limiting keyed on the real visitor address. |
| Session handling | SHIPPED | HttpOnly, SameSite, signed cookies with a 12-hour horizon and sliding rotation. Server-side revocation: signing out kills copies of the cookie too, and sign-out-everywhere invalidates every session authenticated before the cutoff. |
| Staff MFA enforcement | ARMED AT DEPLOY | A platform toggle requires TOTP for all staff accounts and confines unenrolled staff to enrollment at next login. Switched on before any real-customer-data tenant. |
| Evidence integrity | SHIPPED | SHA-256 on every document, field-level provenance with structured fragment locators, and completed versions hash-sealed and write-blocked at the database layer. We call this tamper-evident, not immutable, and we will keep calling it that until storage-level retention lock is in place. |
| Human-held judgment | SHIPPED | Deterministic gates: no approval without a source document, contradictions block approval, exports never advance regulatory state, and no legal or chemical conclusion is produced by software. Machine approvals are labeled as machine approvals wherever they appear. |
| Encryption in transit | SHIPPED | TLS on every public hostname, provided at the hosting and edge layer. |
| Encryption at rest — documents | SHIPPED | Object stores encrypted with a vetted AEAD backend, key supplied from the host secret manager and never present in the repository. The backend used is recorded per file. |
| Encryption at rest — database | ARMED AT DEPLOY | Database files are not application-encrypted; they rely on host-level disk encryption from the hosting provider. We state this plainly rather than implying application-layer database encryption we have not written. |
| Malware scanning | SHIPPED | A ClamAV verdict is recorded on every uploaded document. Infected and error verdicts reject the upload — fail closed. If no scanner is present the verdict is recorded as not-scanned, disclosed on the record, never faked. |
| Audit trail | SHIPPED | Append-only audit log enforced by database trigger on every consequential action, including reads of restricted records. Tenant-scoped access-log export, and the export is itself audited. |
| Retention & deletion | SHIPPED | Conservative retention sweep — no configured schedule means nothing is ever purged. Legal holds block deletion. Open-ended clocks are supported for records whose window does not close on a fixed date. |
| Backup & tested restore | SHIPPED | Nightly integrity-checked backups, plus an automated backup-destroy-restore-verify drill. The drill is not decorative: it caught and fixed a real restore-path bug. |
| Restricted plane (chemistry) | SHIPPED SYNTHETIC ONLY | Separate database and object directory, a dedicated role, and negative tests proving restricted chemistry never appears in the shared database, shared objects, or shared snapshots. This is app-layer separation validated on synthetic data. Real restricted data requires separate infrastructure and a named reviewer under a distinct engagement — it is not something you can switch on by signing up. |
| Application hardening | SHIPPED | CSRF tokens on every state-changing form, security headers, upload size ceilings, per-tenant rate limits on uploads and export builds. |
The complete list of third parties that can touch service data, and exactly what each one sees. If we add one, this list changes before the vendor does.
| Subprocessor | Purpose | What it can see |
|---|---|---|
| Render | Application hosting and storage | Everything in the application at the infrastructure layer — the workspace database and encrypted object storage sit on their managed disk. |
| Cloudflare | DNS for both domains; hosting for the public marketing site | Marketing-site traffic only. Application hostnames resolve directly to the hosting provider and are not proxied, so workspace content does not transit Cloudflare. |
| Stripe | Payments and subscription billing | Billing identity and payment details. Card numbers are entered on Stripe's own hosted checkout and never reach our servers. No workspace content. |
| Google Workspace | Business email | Correspondence you send us. Not workspace content, unless you email it to us — which is why we ask you not to. |
| Anthropic | Optional AI-assisted extraction — off by default | Only when an operator explicitly enables it, and only the document excerpts being extracted. Runs under commercial terms that prohibit training on the content. Disclosed in the console whenever it is on. If you would rather it never run at all, that is a setting, not a negotiation. |
| Transactional email provider | Account mail — welcome, password reset, trial notices | Your email address and the account notice itself. Never workspace content, and never marketing or outreach mail. |
Publishing this section is the whole point of the page. A vendor who lists only strengths is telling you about their marketing process, not their security posture.
We are not SOC 2 certified, and we are not currently in an audit window. We are an early-stage product and saying otherwise would be the exact kind of claim this whole platform exists to make impossible. What we have instead is the control ledger above, where every row is testable and most rows are backed by an automated test you could ask us to run in front of you. Our position: SOC 2 becomes worth its cost when a customer's procurement genuinely requires it, and we would rather tell you that plainly now than show you a badge-shaped promise.
Database files are not application-encrypted. They rely on host-level disk encryption. Application-layer database encryption arrives with the managed-database port.
Session cookies are signed, not encrypted. Their contents are non-secret identifiers and timestamps. Cookie theft is mitigated by short lifetime, rotation, server-side revocation and MFA — mitigated, not eliminated. That is an honest limit and we would rather write it down than let you assume otherwise.
The application runs as a single process with a file-backed database. That is correct and safe at pilot scale and wrong for heavy concurrent load. The port to a managed database is a planned piece of work, sequenced after real customers exist rather than before — it is a port, not a rescue.
Restricted-plane separation is validated at the application layer on synthetic data. Real restricted chemistry data requires separate infrastructure and a named qualified reviewer under a distinct engagement. It is deliberately not available by self-serve signup.
Send the actual question, or the actual security questionnaire. You will get a direct answer from a person who can read the code, including the answers that are “no, not yet.” If a control matters to you and does not exist, knowing that today is worth more to both of us than discovering it in month four.