Your firm is not buying a feature list. It is buying the judgement of whoever wrote this.
Ross handles privileged client communication and medical records. That is not a place for a tool
assembled quickly by people who have never had to defend a system to anyone.
So this page names who built it, and then walks every security measure in the product —
22 of them, each with the mechanism, what it means for your firm, and,
where one exists, what it does not cover. The limits are stated because a security
page without them is not a security page. They are the reason the rest of it can be believed.
Two people are accountable for what Ross is and how it behaves.
Matthew Torre
Co-founder, CEO & CTO โ engineering
Stanford Engineering, BS + MS in Computer Science, specializing in artificial
intelligence and theoretical computer science.
Every measure on this page was designed and written by Matthew. At the Stanford AI
Laboratory he researched large-scale data filtration and cybersecurity mid-training for
language models; at Stanford Medicine he built computer vision systems for clinical
classification. He was an enterprise architect and AI solutions lead at Synchrony, consulted
on Google Pixel Studio through Stanford Management Group, and worked on growth for the
Microsoft Imagine Cup.
That range is deliberate rather than decorative. The security decisions above - constant-time
comparison, an authenticated cipher mode, a hash-chained log with its limits stated - come out
of cryptography, systems, and distributed systems coursework, not from a checklist. The
anti-fabrication architecture comes out of having trained and evaluated models directly.
You cannot reason about where an AI system will fail if the only layer you have ever seen is
the API call.
Mark Torre
Co-founder & Chief Product Officer โ product and go-to-market
UCLA graduate. Independent journalist and filmmaker; former Chief Media Officer for a
California congressional campaign.
Mark owns what Ross is for. He has led founding go-to-market for multiple startups, owned
messaging and paid distribution across a congressional campaign, and produced media for public
sector and political clients. He served as Chief Videographer for Clean Power Alliance, and
supervised and trained staff at a major UPS facility.
At Truth Computing he runs the product roadmap and the go-to-market function, translates what
firms actually ask for into technical requirements, and leads the data analytics work that
decides what gets built next. The reason Ross reads like it was written for attorneys rather
than for engineers is Mark.
John SioRisk and legal exposure auditing. Deconstructs the hardest parts of the business to find where compliance and reliability actually break, holding to one rule: every claim we make, we can prove. USC Political Science; five years as a Cadet Programs Officer with the Civil Air Patrol, and a recipient of the Brig. Gen. Charles E. Yeager and Gen. Benjamin O. Davis, Jr. Awards. The limits printed in gold on this page exist because of how he reads a claim.johnsio.com ↗
Kevin TsengCFO & COO. UCLA Economics; Portfolio Manager at STORE Capital, previously investment banking in aerospace and defense.kevin-tseng.com ↗
Johnathan FierroDirector of AI Research. Computer Science at California Baptist University, focused on machine learning.j-fierro.com ↗
Nathan BerioDirector of Outreach. Cal Poly Pomona Kinesiology; published motor-neuroscience research, and clinical experience that keeps our medical-record work honest.nathan-berio.com ↗
Stan MorrisonAdvisor. Retired NCAA Division I head coach and athletic director; advises on leadership and building institutions that last.
Every measure, and what each one does not cover
Below is the security surface of the product. Where a measure has a real limit, the limit is
printed next to it in gold. Nothing here is aspirational — the roadmap items are labelled
as roadmap.
The document never leaves, unless five things are true at once
The single most consequential decision in the system: what it takes for a client's file to travel anywhere.
One module in the entire codebase can transmit a document
Every path that could send case content off the machine funnels through a single egress
gate. It refuses unless five independent conditions hold simultaneously: the build was
compiled with AI egress enabled, an API key is present, an attorney has attested by name
that a signed Business Associate Agreement is in place, the firm has switched the feature
on, and that individual client is not on hold. Failing any one of them returns a named
refusal reason - build_disabled, no_api_key, no_baa,
firm_disabled - not a silent no-op.
What it means for your firm. A misconfiguration cannot quietly become a disclosure. The gate fails closed and says
which lock stopped it, so the failure is diagnosable rather than mysterious.
What it does not cover. The build-level flag is the only one your firm cannot change from inside the app.
The other four are firm-controlled, which means they are also firm-revocable.
The per-client hold is evaluated inside the same gate as the firm-wide switch, not
layered on top of it. A held client's documents cannot be transmitted even while the firm's
switch is on.
What it means for your firm. One unusually sensitive matter does not force you to switch the feature off for
everyone, and switching it on for the firm does not silently opt in the client you were
most careful about.
The record of a transmission is written before the transmission
The audit entry is committed first, then the send is attempted. A crash midway leaves
the entry behind rather than losing it.
What it means for your firm. There is no ordering of events in which a document leaves without a trace. A send
that failed to record is a send that does not happen.
Refusals are recorded, not just successes
A blocked transmission writes its own audit entry with the reason it was blocked,
alongside the entries for transmissions that went through.
What it means for your firm. The log answers "did anything try to leave?" and not only "what left?" - which is the
question that actually matters after an incident.
Built assuming someone gets in
Credentials, sessions, and the keys Ross holds for your other systems.
Passwords are stored with scrypt and a per-user salt
scrypt is deliberately memory-hard, which makes large-scale offline guessing expensive
in a way that plain hashing is not. Each password gets its own salt, so two users with the
same password have nothing in common on disk.
What it means for your firm. A stolen copy of the database does not hand an attacker your firm's passwords, and
nobody - including us - can read one out of our own records.
Secrets are compared in constant time
Comparisons run through timingSafeEqual over fixed-length SHA-256 digests
of both sides. An ordinary === on a secret leaks, through how long it runs,
how many leading bytes matched - enough to recover the secret byte by byte over many
requests.
What it means for your firm. The comparison itself gives nothing away, including the length of what it compared.
AES-256-GCM at rest, through exactly one chokepoint
Every access token Ross holds for an outside service is encrypted at rest. GCM is an
authenticated mode: a modified ciphertext fails its authentication tag on decrypt rather
than returning plausible garbage. Integrations never touch the cipher directly - all
encryption and decryption goes through a single module, so a new provider inherits at-rest
encryption automatically and nobody has to remember to wrap it.
What it means for your firm. A row edited by hand in the database stops working outright instead of quietly doing
the wrong thing, and a future integration cannot accidentally ship unencrypted.
Time-based one-time codes implemented against the published standard, so any standard
authenticator app works.
What it means for your firm. A leaked password on its own is not enough to sign in as one of your attorneys.
Rate limiting and lockout on sign-in
Repeated failed attempts throttle and then lock the account.
What it means for your firm. Guessing at a password one attempt at a time stops being viable.
Sessions die on the next request, not on their own schedule
Change a password or deactivate an account and every session that person held stops
working on their very next request - not whenever the cookie happens to expire.
What it means for your firm. Removing someone's access actually removes it. This is the part most software gets
wrong, and it is the part that matters on the day someone leaves the firm.
Your files and another firm's never mix
Multi-tenancy is the failure mode with no acceptable version, so it is enforced more than once.
Which firm you are comes from your signed session, never from the browser
Tenant identity is read from the server-side session. It is never taken from a URL
parameter, a form field, or a header, so it cannot be changed by editing a web address.
What it means for your firm. There is no request a browser can construct that claims to be a different firm.
Another firm's record answers 404, not 403
Asking for a record belonging to someone else returns "does not exist" rather than
"access denied".
What it means for your firm. Ross will not even confirm that a record exists. A 403 is itself a disclosure - it
tells a probing party they found something real.
The tenant boundary is checked when the request arrives and again when data is read,
and a dedicated isolation suite proves it on every change.
What it means for your firm. A single forgotten check in one route handler is not sufficient to cross the
boundary.
What it does not cover. The rule currently lives in application code. Pushing it down into the database
itself, where the code cannot forget it, is in progress and not finished.
The system's own conduct is on the record
What happened, when, at whose hand - and whether that record has been rewritten since.
Every audit entry commits to the one before it
Each row stores a SHA-256 digest computed over a fixed, explicit field ordering that
includes the previous row's hash. Any insert, deletion, or edit anywhere in the history
breaks the chain from that point forward and is detectable by re-walking it. You can run
that verification yourself, whenever you want.
What it means for your firm. The log does not merely record - it can demonstrate that it has not been rewritten
after the fact, and the demonstration is yours to run rather than ours to assert.
What it does not cover. This makes the log tamper-EVIDENT, not tamper-proof. The digest is an unkeyed
SHA-256 and the head hash lives in the same database, so an actor with write access who
edited a row and recomputed every later hash would pass verification. It reliably catches
accidental corruption, partial deletion, and naive edits - not a determined adversary who
already holds database credentials. Court-grade integrity means keying the digest with an
HMAC secret held outside the database, or anchoring the head hash to an external
append-only store. Both are on the roadmap; neither is done.
The log records what happened without keeping what was said
In place of message text, the trail stores a hash and a length. That is enough to prove
a specific message is the one that passed through, and not enough to reconstruct it.
What it means for your firm. Your audit trail does not quietly become a second copy of every privileged
communication your firm has ever sent.
Redaction that does not break the chain
Redacting an entry's content is a recorded operation that preserves chain
verifiability, with its own dedicated test.
What it means for your firm. Complying with a deletion obligation does not destroy your ability to prove the rest
of the log is intact.
The AI is not trusted, by design
The safety machinery around the model is larger than the model integration itself.
The engine never writes prose of its own to a client
It selects from approved templates. An attorney approves the message before anything
sends.
What it means for your firm. Nothing reaches your client in words a human at your firm did not write and approve.
The automation dials only ever choose among things a person already signed off on.
Two-layer anti-fabrication check on every summary
A summary is decomposed into atomic claims. A second model pass must quote the passage
in the source that supports each one. Then an ordinary non-AI string check confirms that
quote genuinely appears in the document. A claim backed by a quote that is not really there
is marked unsupported.
What it means for your firm. A fabricated citation is caught by a mechanism that cannot itself hallucinate,
because the second layer is not a model at all.
If the check cannot run, the answer is 'not checked'
A verification failure returns an explicit unchecked state rather than defaulting to
pass.
What it means for your firm. Ross never tells you something passed when it was never looked at. A tool that is
right most of the time and silent about the rest is worse than no tool.
Quiet hours are enforced by the system, not by discipline
TCPA quiet-hours restrictions are applied at send time in the client's own time zone.
What it means for your firm. A late-night approval does not become a late-night text to your client, and nobody
has to remember the rule on a busy week.
Nothing ships unproven
What has to pass before a change reaches your firm.
110 test modules, run as CI gates
Tenant isolation, webhook authentication, session revocation, egress gating, and
provisioning each have dedicated suites. Time-dependent logic runs against injected clocks
rather than the wall clock, and provider mocks are deterministic, so a passing run means
the same thing twice.
What it means for your firm. The behaviours your firm is relying on are the ones under test, and a change that
breaks one of them does not reach production.
What it does not cover. Tests prove the cases someone thought to write. They are evidence of diligence, not
proof of absence of defects, and we would not claim otherwise.
Strict TypeScript, enforced in CI
The codebase is strict-mode TypeScript with ESM throughout, and a typecheck gate runs
before any change lands.
What it means for your firm. A whole category of runtime failure is eliminated before the code is ever run.
Formal compliance
Where we are, stated exactly.
Planned โ not yet certified
We are planning to formalize our security program with Vanta, the compliance automation
platform used by thousands of companies to prepare for and continuously monitor SOC 2, HIPAA,
ISO 27001, and GDPR. Vanta is the standard tool in this category, and the reason it is the
standard is that it replaces a once-a-year scramble with continuous, automated evidence
collection: it connects to the infrastructure directly and flags a drifted control when it
drifts, rather than when an auditor next asks.
Choosing it is a statement about how we intend to be held to this. A firm asking us for a
security questionnaire should not be relying on our word about what is configured, and Vanta is
how that becomes independently monitored rather than self-reported.
To be unambiguous about where this stands today: Ross does not hold a SOC 2 report,
a HIPAA attestation, or an ISO 27001 certificate, and nothing on this page should be read as
claiming one. Vanta is a planned engagement, not a completed audit, and no certification has
been issued. The measures described above are real and in the product now; the formal
third-party attestation of them is not yet done. When it is, this section will be replaced with
the report and its date — not softened by degrees.
The Business Associate Agreement position is separate and already enforced in code: Ross will
not transmit protected health information to any model provider until an attorney at your firm
has attested by name that a signed BAA is in place. That is the egress gate
above, and it is a hard lock rather than a policy.
What Ross is made of
Everything in this first set is literally in the system you would be buying — running in
production today, or gating a change before it ships.
Security engineering
Detailed above. Listed here so the whole surface is visible at once.
AES-256-GCM encryption at rest
Single-chokepoint secret handling
TOTP MFA to RFC 6238
SHA-256 hash-chain audit logs
Hand-rolled HMAC verification
Brute-force throttling
scrypt password hashing
Constant-time comparison
Secure-cookie sessions, HSTS
Multi-tenant isolation
Explicit threat modeling
AI and LLM engineering
The part that reads a document, and the machinery that refuses to trust it.
Anthropic Claude SDK
Prompt and model selection design
Anti-fabrication grounding checks
Atomic-claim decomposition
Verbatim source verification
Egress-gate architecture
PDF, DOCX, and OCR pipelines
Classification and triage
Medical-record chronologies
Accuracy evaluation harnesses
Shadow-mode detector proofs
Token usage tracking
Compliance and privacy
The rules a firm is bound by, enforced by the system rather than remembered by a person.
HIPAA and CMIA analysis
PHI handling
Consent capture and gating
TCPA quiet-hours enforcement
Human-approval legal gates
Audit-log redaction
Data minimization
Privacy policy and terms
Auth and integrations
How Ross reaches where your documents already live, without asking you to move them.
OAuth 2.0 authorization code flow
SDK-free protocol implementation
CSRF state with TTL
id_token claim validation
Google Sign-In
Google Drive API
Clio practice-management API
Twilio SMS
Pluggable email providers
Backend and APIs
What handles a request, and what happens when one goes wrong.
Express REST API design
Auth-gated route mounting
Raw-body webhook parsing
Server-rendered HTML
Request-ID propagation
Health and readiness probes
Centralized error handling
Payments
Billing a firm can reconcile, where price is decided by the server and never the browser.
Stripe Checkout subscriptions
Multi-line-item sessions
Adjustable-quantity pricing
Server-owned price validation
Webhook-driven provisioning
Idempotent activation fallback
Environment-gated dormancy
Testing and QA
What has to pass before a change reaches your firm.
110-module test harness
End-to-end smoke suites
Injected clocks for time logic
Tenant-isolation suites
Webhook auth tests
Session revocation tests
Egress and provisioning tests
Mock-provider determinism
Infrastructure and languages
What it runs on, and what it is written in.
TypeScript (strict, ESM)
Node.js 22
SQL / SQLite
JavaScript
UNIX / Bash
AWS
GCP
Docker
Fly.io
REST / GraphQL APIs
GitHub Actions CI gates
Typecheck enforcement
Secrets and TLS management
Backup and restore tooling
Seed and load-test scripts
Git hooks
Distributed systems
UNIX systems programming
The base underneath
None of the following ships inside Ross, and it is separated for exactly that reason. It is the
training the decisions above came out of: you cannot reason about where an AI system will fail if
the only layer you have ever seen is the API call.
Machine learning and research systems
Model work done before Ross, at the Stanford AI Laboratory and Stanford Medicine.
PyTorch
Hugging Face Transformers
Stable-Baselines3
BERT fine-tuning
VGG-16
DQN
PPO / REINFORCE
POMDP solvers (discrete VI, particle filter)
Bandit algorithms
Monte Carlo simulation
RAG / embedding retrieval
Python
C
C++
R
FastAPI
Flask
React
Next.js
Mathematics
The layer underneath every claim a model makes about a document.
Probability theory
Statistical inference
Bootstrap resampling
Effect size estimation (Cohen's d)
Lognormal distribution fitting
Convex optimization
MDP / POMDP theory
Multivariate calculus
Linear algebra
Experimentation
How an accuracy claim gets earned instead of asserted, and the discipline behind Ross's evaluation harnesses.