The best verdict an email can get is incomplete
Outlook, Gmail and Apple Mail rendering cannot be reproduced locally, so one gate says could not measure, and Nucleus will not round that up to a pass. Each guarantee below names what holds it.
Verdict
an email, at its bestincomplete
could not measure 1- email.size: pass
- email.no-script-or-external: pass
- email.inline-styles: pass
- email.table-layout: pass
- email.images: pass
- email.width: pass
- email.preheader: pass
- email.dark-mode: pass
- email.compliance-footer: pass
- email.tokens-only-colors: pass
- email.plain-text: pass
- email.chromium-render: pass
- email.client-render: could not measure
- 12 pass
- 0 fail
- 1 could not measure
email.client-rendercould not measureOutlook (Word engine), Gmail and Apple Mail rendering cannot be reproduced locally. Check the email in real clients, or a rendering service, before it is sent.
Before it is sent, a person must check
- Outlook for Windows (the Word rendering engine)
- Gmail on the web and in its apps, including a non-Gmail account (which drops <style> entirely)
- Apple Mail on macOS and iOS
- Every client with images blocked
- The plain-text part in a text-only client
- 13
gates an email is checked against
- 12
of them can be measured locally
- 1
cannot, and the verdict says so
- 3
outcomes a gate can give: pass, fail and could not measure
Pass means every gate passed. Nothing else does.
Every gate answers pass, fail or could not measure. The verdict is then one of three words, by one rule, applied in one order. A page that hangs, spins or runs out of memory while it is checked fails. Any other error a gate throws is recorded as could not measure. An answer the engine cannot read is recorded as could not measure.
- pass
- Every gate measured and passed.
- fail
- At least one gate failed, with its reason.
- incomplete
- Nothing failed, and something could not be measured.
The verdict rule
libs/nucleus/src/gate.tsexport type GateStatus = 'pass' | 'fail' | 'could-not-measure';lines 13 to 38 not shown/** * `fail`: at least one gate failed. * `incomplete`: nothing failed but something could not be measured. * `pass`: every gate measured and passed. */export type Verdict = 'pass' | 'fail' | 'incomplete';lines 45 to 50 not shown/** * `pass` only when EVERY result is exactly `pass`. Anything else that is not a * `fail` (a `could-not-measure`, or a status this frame does not know) is * `incomplete`. Absence of a denial and approval must never be the same answer: * an unrecognised status is an abstention, not a green light. */export function verdictOf(results: readonly GateResult[]): Verdict { if (results.some((result) => result.status === 'fail')) return 'fail'; return results.every((result) => result.status === 'pass') ? 'pass' : 'incomplete';}Every promise here names what holds it
Most are held by code that a test runs. One is held by a written decision, and its card says so.
A gate that could not measure is never a pass
Outlook's rendering, at the top of this page, is the example.
- Held by
- The verdict rule, and the tests that run it.
You pick. No model ranks the directions.
Directions are checked for being different, never ranked. Each shows the brand risks noted by the model that proposed it. A review's record holds the pick you made.
- Held by
- The review record, which stores the pick a person made, and a check for difference that keeps directions in the order they came.
Nucleus does not train on your data
Not on your briefs, picks, comments or approvals. Your briefs, picks and approvals tailor only your own future designs.
- Held by
- A written decision, not a check. What tailors your designs is read for your account alone, and a test holds it.
Every preview runs on a host apart from the app
Sandboxed, sent with no cookie, and refused every fetch and form post by its own policy.
- Held by
- Its response headers, a hostile page tested in real Chrome, and, in production, an app that frames previews from that host alone.
Your SOW and PRD are read for your designs alone
Only Claude models we've cleared for sensitive data read them, with model training switched off.
- Held by
- The tenant on your session, a check on the document's class that clears only that model, made before any model is called, and a test that one account's documents never reach another account's designs.
- Not claimed
What we do not claim
- A security certification. Nucleus holds none today, so none is shown.
- Customer names, logos or numbers. Nucleus is not open yet.
- A render check in Outlook, Gmail or Apple Mail. That gate says could not measure.
- Status
- Not true today, so not said.
A design can run. It cannot read your session.
Every preview is treated as a stranger's code, whoever wrote it. It is served from a preview host apart from the app and from this site, behind a signed link that expires. Its scripts run, so the motion is real, and its policy refuses every fetch and form post.
- Fetches, form posts and pop-ups are refused
- No cookies: a preview response never sets one
- Its own origin, even when the link is opened on its own
Response headers
every preview is served with these- content-security-policy
- sandbox allow-scripts;
- default-src 'none';
- script-src 'unsafe-inline';
- style-src 'unsafe-inline';
- img-src data:;
- font-src data:;
- media-src data:;
- connect-src 'none';
- frame-src 'none';
- object-src 'none';
- form-action 'none';
- base-uri 'none';
- frame-ancestors (the app's origin)
- x-content-type-options
- nosniff
- cache-control
- no-store
- cross-origin-resource-policy
- same-site
- cross-origin-opener-policy
- same-origin
- referrer-policy
- no-referrer
- set-cookie
- never sent
frame-ancestors names the app's origin: only the app may frame a preview.Only Claude reads your SOW or PRD
Your SOW and PRD are read only by Claude models we've cleared for sensitive data, with model training switched off. Any other model is refused before anything is sent.
- Your tenant comes from your session. A request cannot name another
- A SOW or a PRD is always sensitive, by its type
- Only a cleared model may read one. Any other model is refused before the call.
Refused before sending
the document's class, checked against the model's- Document
- SOW (illustrative)
- Data class
- sensitive
- Model cleared for
- general
- Outcome
- refused before any call
What the check returns
{ cleared: false, requested: "sensitive", clearedFor: ["general"] }