Data handling

What happens to your files

You are being asked to upload financial statements and a customer list to software you have never used. This page is the whole path that file takes, in order, with the parts that are permanent marked as permanent.

Where a language model is usedSecurity

Nothing is shared between accounts. No customer data is used to train anything, ever.

Filesstatements, lists, contractsFactseach with the line it came fromGraphpeople, accounts, suppliers, rivalsAgentsobjectives, limits, personalityRunshundreds of them, seededBriefthe answer and its tripwires

The path

Four things happen, and then nothing else happens

There is no fifth step where the file is copied somewhere for analysis. This is the complete list.

01

The file arrives and is stored outside the media library

The extension is checked against the allowed list, which ships as csv, tsv, txt, md, json, docx, pdf and xlsx. The size is checked against the limit, which ships at 25 megabytes. It is then moved into a counterfirm folder inside the WordPress uploads directory, in a subfolder for that twin, under a filename with a timestamp and six random characters in front of it. It is never registered as a WordPress attachment.

02

It is read and cut into chunks

A spreadsheet or CSV is cut into blocks of forty rows, and every block carries the header row again at the top, so a chunk read on its own still says what its columns mean. Prose is cut on blank lines into pieces of up to about 1,400 characters, each tagged with the nearest heading above it. Chunks are rows in the database, in order, with the character count kept.

03

Facts are extracted, each with the line that supports it

Rules run first and run every time. They read tables by their column headings and prose by the shapes numbers take in business writing. Each fact records the source, the chunk, the quoted span and how it was found. A language model runs afterwards only if a key is configured, only over chunks the rules produced nothing from, and its output is marked separately with a wider band.

04

The facts become the graph, the ledger and the agents

From there the original file is not needed again unless you ask for a re-parse. It stays on disk so you can re-parse, so the quote can be shown in context, and so you can download what you gave it. If you would rather it did not, delete the source and the whole chain goes with it.

The chunk

Why the file is cut up rather than summarised

A summary throws away the sentence. Once the sentence is gone, a number in a model is an assertion with nothing behind it, and there is no way for you to check it in less time than it would take to rebuild the analysis yourself.

Chunks keep the sentence. When the ledger says gross margin is 31 percent, the entry carries the source file, the chunk it came from and the exact span of text that said so. You click it and read the line. That is the single most useful property of the whole design and it only works because nothing is thrown away.

  • Tabular chunks repeat the header row, so a chunk is readable alone
  • Prose chunks keep the nearest heading, so a paragraph knows what section it was in
  • Chunks keep their order, so context above and below is recoverable
  • A file that produces no readable text is marked as such rather than contributing an empty result quietly
Monthly revenuedocumentGross margindocumentPrice elasticitydefaultMonthly churndocumentCompetitor reactiondefaultContracted revenuedefaultLargest customer sharederivedCost per headderived

File types

What is read directly, and what needs something from you

TypeHow it is readWhat can go wrong
CSV and TSVRead directly and treated as a tableA summary or total row is read as another data row. Delete those before uploading.
Text and MarkdownRead directly, cut on blank lines, headings keptNothing much. This is the most reliable format.
JSONFlattened into key and value lines, then treated as proseDeeply nested structures flatten into long keys that are harder to read back.
Word, .docxThe document body is unzipped and the text pulled outRequires the ZipArchive extension in PHP. Without it the file reads as empty and says so.
Excel, .xlsxThe first six sheets are unzipped and read into comma separated rowsAlso requires ZipArchive. Formulas are read as their stored values. Merged cells and pivot layouts read badly.
PDF with a text layerContent streams are decompressed and the text operators readHeavily formatted PDFs can come out with the reading order scrambled. Check the parse preview.
PDF that is a scanNot readThe source is marked as needing text and you are told plainly, with a suggestion to paste the numbers or upload the spreadsheet behind it. There is no OCR in the product today.
Pasted textStored as a small text source with no file behind itNothing. This is often the fastest way to fix a gap the ledger has flagged.

The allowed list and the size limit are settings, so a self hosted install can change both. The reading behaviour above is what the code does in either case.

Deletion

Deleting a source deletes the file and everything made from it

One action removes four things: the file is unlinked from disk, its chunks are deleted, the facts extracted from it are deleted, and the source row itself is deleted. There is no archive copy, no trash, and no flag that hides it while keeping it.

What survives, and should, is anything already written into the assumption ledger, because a number you have since confirmed or edited by hand is yours rather than the file's. Rebuild the twin after deleting a source and the ledger is recomputed from what is left, so a deleted file stops influencing the model at that point.

Deleting a twin removes its sources, chunks, facts, assumptions, scenarios, runs and questions together. Closing your account removes your twins. If you self host and want uninstalling the plugin to remove the tables and the files too, there is a setting for that which ships switched off so an accidental deactivation does not destroy anything.

Filesstatements, lists, contractsFactseach with the line it came fromGraphpeople, accounts, suppliers, rivalsAgentsobjectives, limits, personalityRunshundreds of them, seededBriefthe answer and its tripwires

Standing commitments

Four things that are true regardless of plan

Nothing is shared between accounts

There is no cross account query in the application. Your twin is not compared to anybody else's, your numbers do not contribute to a benchmark, and no aggregate of customer data is computed or sold. The industry priors in the product are fixed starting values in a file in the source code, not learned from anybody who has used it.

No training on customer data, ever

Nothing you upload is used to train, fine tune or evaluate any model. This is not a setting you have to find and switch off. The product has no training pipeline at all, and the only outbound calls it can make are the three described on the language model page.

Your files are yours

You keep every right in what you upload. The licence you give is the narrow one needed to run the service for you: store it, parse it, and show it back to you. The terms say this in the same words.

Export before you leave

Facts, assumptions, graph nodes, run results and briefs read back through the API as JSON, and the brief exports as a document. If you stop paying, export first, because after the retention window the data is gone rather than archived.

The boundary

What leaves the server, and the only condition under which it does

ThingDoes it leave the serverDetail
Your uploaded filesNoFiles are never transmitted anywhere. No file is uploaded to a model provider as a file.
The simulationNoPure arithmetic in PHP. It makes no network calls and runs identically with no internet connection.
The graph, the ledger, the runsNoRows in your own database.
Chunk text, during extractionOnly if a language model key is configuredUp to about 4,000 characters of a chunk, with the document kind, file title and section heading. Only for chunks the rules read nothing from, and capped per pass.
A finished analysis, during brief rewritingOnly if a key is configured and you press the buttonThe company name, the question and the finished numbers as JSON. The numbers are already decided before this call happens.
A question and its context, in AskOnly if a key is configuredYour question plus the graph rows, ledger rows and run results the feature retrieved for it.
Billing detailsYes, to the payment processorCard details go to Stripe through Paid Memberships Pro and are never held by this software.
Email, when a form is sentYes, to the mail providerContact and walkthrough forms store a row and send one email to the operator.

With no key configured, the first three outbound rows never happen and the product still does everything except rewrite briefs and phrase Ask answers in prose.

What people ask before the first upload

What is the minimum I can upload and still get something useful?

One profit and loss covering the last twelve months and one customer list with a revenue column. That gives real revenue, real margin, a real customer count and real concentration, which is most of what the interesting questions turn on. Everything else narrows bands rather than enabling answers.

Can I redact before uploading?

Yes, and it usually costs nothing. The model works on sizes and relationships, so customer names can be Account A through Account X and the concentration analysis is unchanged. Replace names, keep the numbers.

What if I upload the wrong file?

Delete it. The file, its chunks and its facts go together, then rebuild the twin so the ledger is recomputed from what is left.

Can you see my files?

On a self hosted install, no. There is no remote access of any kind, no telemetry, and nothing reporting back.

On hosting operated by the person who built this, an administrator of that WordPress install can technically read everything in the database, the same as any WordPress plugin. Nobody looks at customer files as a matter of course, and support will ask you for what it needs rather than going and reading it. That is a commitment from a person, not a technical control, and you should weigh it accordingly.

Does the same file uploaded twice count twice?

Yes. Facts from both copies are merged on the normalised name of the thing they describe, so the graph does not double up, but you are holding two files against your plan limit. Delete one.

Start with one file and one decision

A twin built from one profit and loss and a customer list is already more useful than an argument in a meeting. You can add the rest later, and the ledger will tell you which file is worth adding next.

Build a twinWhat to upload