doloop.io
Code Check what your AI changed in your code AI code that passes tests and still breaks things The problem AI code passes the tests and still breaks things It compiles, the tests go green, and it quietly breaks rules your codebase keeps that nobody wrote down. Read itUnderstand a repo you didn't writepoint doloop at any codebase and get a plain map of how it works, in a minute Check itGate a change against your own rulesit blocks a commit that breaks a convention your repo keeps, with the line and the rule, on your machine The payoffMerge on a verdict, not a hunchthe same yes or no every run, one you can replay and audit Documents Pull data from documents, tied to the source Your model writes numbers that are not on the page The problem Your model writes numbers that aren't there To an LLM, "extract" means generate. It will hand you a figure the page never contained. The fixEvery value pinned to its spot on the pagedoloop finds each number and marks the box it came from; if it isn't there, the cell stays empty Try itRun it on your own PDFupload a document and watch each value link back to its source The payoffData that holds up to an auditora located value sits outside the model-risk rules, and runs the same years later Writing Write with AI and still sound like you AI makes everyone sound the same The problem AI makes everyone sound the same Lean on it and your writing drifts to one flat shape, whatever the topic or the model. The fixSee where your draft sits, and the one fixit scores your prose on seven axes of voice and names the single change that moves it toward yours See itThe same paragraph in six voicesswitch registers and watch the seven axes move, same input, same read The proofA detector calls the Declaration 97% AIwhy detection measures the wrong thing, and what doloop reads instead Answer engine A site chatbot that can't make things up An information clerk who would rather not guess The problem Chatbots invent confident wrong answers Most site bots would rather guess than admit they don't know. doloop's answers only from your pages, or it declines. The fixNo model writes the replyit routes a visitor to a page you published, or it declines; there is nothing to invent Try itBuild one on your site in a minutepaste your URL; it answers from your pages, or it says it doesn't know The skepticIs it really safe?the questions a careful buyer asks first, answered plainly About

Security & Compliance

Last updated: 2026-06-25  ·  Covers all doloop products

What cannot happen by construction - not by policy.

The answer engine cannot generate novel text. Every answer is a human-authored string frozen at configuration time. The document extractor cannot send your files to an AI model. The extraction pipeline is deterministic arithmetic with no external calls. These are structural properties, not configuration choices. A misconfiguration cannot change them.

The answer engine (doloop chat)

What is collected

FieldPurposeStored?
Question textRouting decisionYes - query log (see below)
Routing outcomeroute / ask / refuseYes - query log
Menu selectionImprove future routingYes - selection log
IP address—No
User-agent—No
Session or user identity—No

The query log records question text and routing outcome. It is a capped ring buffer - oldest entries are evicted automatically. It is not a permanent store. We recommend that users not enter personal data (name, email, account number) into the widget; the UI does not prompt for it.

How the learning loop works

When a visitor picks from a disambiguation menu, their choice is recorded. This is protected by an HMAC token issued by the prior response - a selection can only be recorded for a menu the engine itself generated. The fold step that improves routing runs offline, produces a gated proposal, and requires human review before anything changes. Question text is never sent to an AI model. The fold step reads routing outcomes (was this routed, asked, or refused?), not the question text itself.

Data residency - answer engine

LegProtocolNotes
Browser → Fly.ioHTTPS / TLS 1.2+TLS terminated at the Fly edge
Fly edge → appWireGuard (Fly private network)Encrypted in transit
App → databaseLocal disk I/OFly persistent volume, same region

Region: fra (Frankfurt, EU). All data is stored and processed in the EU. No data is transferred to third-party AI services at runtime - the serve path is arithmetic, with no external model calls.

The document extractor (WYSIWYD)

What is collected

PDFs you upload are stored temporarily on the API server for the duration of your session. They are deleted within 24 hours. They are not backed up, archived, or copied elsewhere. We do not use uploaded documents to train, fine-tune, or evaluate any model. We do not share them with third parties.

The extraction pipeline is fully deterministic and runs on our own infrastructure. No third-party AI service is invoked for the standard extraction flow.

Data residency - document extractor

API server: Fly.io, San Jose region (United States). Uploaded PDFs: Fly.io tmpfs on the API container, deleted within 24 hours. Free-tier usage counter: Fly.io persistent volume, San Jose region.

Security controls

Injection hardening

The answer engine applies a regex pre-filter before routing. Detected prompt-injection attempts receive a flat refusal and are never processed. Because the serve path has no generation step, a successful injection cannot cause the engine to produce a novel harmful string - the structural limit is stronger than the filter.

Learning loop poisoning

Menu selections require an HMAC token issued by the preceding response. Rate limiting is applied per source. The selection log uses a capped ring buffer. Single-source spam is inert; meaningful learning requires independent sources.

Auditability

Every answer response carries a corpus_version (the exact configuration that produced it) and a state hash (the in-memory engine state at serve time). Any answer is reproducible by restarting the engine at the same corpus_version.

Deployment pipeline

All code changes are deployed via GitHub Actions on push to the main branch. No code reaches production uncommitted. API tokens are stored as scoped GitHub Actions secrets.

Compliance posture

We are a small company. We are honest about what we hold and what we don't.

CertificationStatus
SOC 2 Type IINot certified. Our infrastructure provider (Fly.io) is. doloop as a company is not yet.
ISO 27001Not certified.
GDPRControls in place (EU hosting for the answer engine, limited retention, DPA available on request). Not independently audited.
Penetration testNot conducted by a third party. Internal adversarial review completed 2026-06-14.

Clients with mandatory certification requirements should contact us to discuss timelines or alternative deployment arrangements.

GDPR - answer engine deployments

For clients who embed the answer engine widget on their own site: the client is the data controller (they determine the purpose and means of their website and the widget's deployment); doloop is the data processor. The query log does not link questions to an identified individual (no user ID, no session ID, no IP). A Data Processing Agreement is available on request.

Contact

Security issues: [email protected] with subject line Security. We aim to respond within 24 hours on business days.

Compliance and DPA enquiries: [email protected].

Infrastructure provider: Fly.io legal & compliance.

doloopCodeDocumentsWritingAnswer engineThesisPlaygroundPrivacyTermsSecurityContact

Built deterministically. Every claim links to its source.

Ask doloop

Routes you to a real doloop page, asks when your question is ambiguous, or tells you when there is no answer. No model runs on the answer path, so it cannot invent one.

Deterministic · reproducible · cannot invent