Verification
How to check Storyline's privacy claims yourself, and the claims-to-symbols map, canary scans and airplane test that keep every claim tied to code.
Storyline’s claims are written to be checked, not believed. This page covers what you can verify on your own device, and how each release keeps the claims tied to the code that makes them true.
Check it yourself
- The audit chain. Run the chain verification on your device. It recomputes every hash, checks every Secure Enclave signature, compares the head with its external pin and checks the anchors co-signed across your devices. An edited, deleted or truncated entry breaks the chain at that point, and the result is yours, not a dashboard the developer controls. See Security.
- The Data flow ledger. Every crossing is listed verbatim for each project, outbound and inbound, along with the activity that stayed on the device. See Research and egress.
- The airplane test. The steps are below, and you can run them yourself.
The airplane test
The airplane test is the repeatable proof that writing and AI work with no network at all, specified as a gate before every external build. Here it is, lightly condensed.
Setup: a device with a local model available, such as Apple Intelligence or Ollama running on a Mac; one privileged project with a few documents and one ordinary project. Quit and relaunch the app once before you start.
| # | Action | Expect |
|---|---|---|
| 1 | Turn on Airplane Mode (on a Mac, turn off Wi-Fi and unplug Ethernet) | No errors |
| 2 | Unlock the vault | Biometric unlock works offline |
| 3 | Open the privileged project and type a paragraph | Editing is normal and the word count updates |
| 4 | Run the co-author’s Continue | A branch arrives from the local model, with no hanging spinner |
| 5 | Adopt the branch | The merge works and history shows the safety snapshot |
| 6 | Open the audit log | Entries for the unlock, the AI run and the merge are there, with hashes |
| 7 | If you have a cloud key, run an agent pinned to it | It fails closed with a clear offline message, and an audit entry is written |
| 8 | Lock the vault and unlock it again | Clean re-entry |
| 9 | Turn Airplane Mode off | Sync resumes within about a minute, shows as synced, and no documents are duplicated |
Every expectation must hold. Any hang, crash, silent failure or duplicate counts as a failure.
How the claims stay honest
Claims mapped to symbols
Every load-bearing capability claim in the interface is listed in a claims-to-symbols file, quoted verbatim and paired with the code that makes it true. A claim with no symbol is reworded or deleted, a code change that breaks a row breaks the file’s review, and the whole file is re-audited at every release. A sample:
| Claim in the app | Where it is true |
|---|---|
| “AI runs on-device for privileged matters.” | AIAccessPolicy.localOnly, refused at AIService.resolve before any request is built; automations run with .localOnly when the project is privileged; .localOnly also refuses custom endpoints |
| “Tamper-evident audit log” (never “tamper-proof”) | AuditLog.verifyDetailed(): chain rehash, Secure Enclave signatures, head pin and anchors; AuditChainSigner |
| “Storyline never sends prose anywhere unless you ask.” | No backend exists; cloud AI only through your own keys at AIService.resolve; agent web access only through EgressFunnel.crossing, recorded verbatim |
| “your API keys never leave this device.” | KeychainStore; shared endpoint settings arrive without keys |
| “Every agent crossing, verbatim, with the leak guard’s verdict.” | EgressFunnel.crossing writes a sealed EgressRecord before sending, and it is the only network path a tool can reach |
| “Nothing changes your scene until you merge.” | BranchingService writes branches only; adopting one is an explicit act |
Canary scans
Two scans check that privileged text never rests in the clear. A known canary string is seeded into privileged content. One scan searches the app’s container for it in plaintext; the other searches the system’s unified log. Both pass only when the canary is absent. This store-level scan is how the Derivative Privilege Rule is checked: a snapshot, output or log line that carried privileged text in the clear would surface the canary.
The rules behind them
- Build the control first, then state it precisely. Never the reverse.
- Attribution is layered evidence, never a bare claim. The audit log is described as tamper-evident, and non-repudiable on Secure Enclave hardware, but never as tamper-proof.
- A claim added to the interface gets its row in the claims file in the same change.
- The airplane test, the plaintext scan and the log audit run together at the end of every build slice.