Trust
What we have built, and how we know it works
Each control below exists in Complian today and is proved by an automated test in our source repository. Where a control has a limit, we say so.
Controls
Every quotation is checked word for word
TestedBefore a finding is stored, its quotation of the legislation is checked word for word against the statutory text, and every passage quoted from a client document is checked against the text extracted from that document. A quotation that fails is not used.
Limit. This proves the quoted words exist in the source. It does not prove the assessment drawn from them is right. That judgement is yours, which is why every finding is reviewed.
- Test:
backend/tests/test_adviser_report.pytest_every_quote_is_verbatim - Test:
backend/tests/test_adviser_report.pytest_tampered_legislation_quote_refused - Test:
backend/tests/test_adviser_report.pytest_fabricated_client_excerpt_refused - Test:
backend/tests/test_adviser_applicability.pytest_rule_commencement_and_intake_bases_are_verbatim
What cannot be verified is shown as Unclear, never hidden
TestedIf the engine's quotation of the legislation fails verification, its assessment is discarded and the obligation is shown as Unclear, with the statutory text, for you to review. An obligation that applies is never silently dropped.
- Test:
backend/tests/test_adviser_report.pytest_failed_verification_becomes_unclear_finding_not_a_hole
A Met must rest on the client's own documents
TestedIf the engine rates an obligation as met but does not cite a verified passage from the client's documents that shows it, the finding is shown as Unclear with a note, not as Met.
- Test:
backend/tests/test_adviser_engine_safety.pytest_met_without_a_client_excerpt_is_shown_as_unclear - Test:
backend/tests/test_adviser_engine_safety.pytest_met_with_a_verified_excerpt_stays_met
Client documents are treated as data, not instructions
TestedDocument text reaches the AI model inside marked boundaries and is declared untrusted. Text that tries to close those boundaries or give the model instructions is neutralised before it is sent.
Limit. This reduces the risk that a document steers the analysis. It cannot remove it entirely, which is another reason every finding is reviewed.
- Test:
backend/tests/test_adviser_engine_safety.pytest_prompt_declares_document_text_untrusted - Test:
backend/tests/test_adviser_engine_safety.pytest_document_cannot_close_its_own_fence
Nothing is exported until every finding is reviewed
TestedEach finding needs your decision: accept, edit or reject. The Word export is refused until every finding has one. A rejection needs a written reason.
- Test:
backend/tests/test_adviser_export.pytest_export_refused_until_every_finding_reviewed - Test:
backend/tests/test_adviser_export.pytest_builder_itself_refuses_unreviewed_views - Test:
backend/tests/test_adviser_review.pytest_gate_blocks_until_every_finding_reviewed - Test:
backend/tests/test_adviser_review.pytest_reject_requires_a_note
The legislation quotation cannot be edited
TestedYou can change a finding's status, assessment, recommended action and client excerpt. You cannot change its legislation quotation. A replacement client excerpt must appear word for word in the document as it was when the report was run.
- Test:
backend/tests/test_adviser_review.pytest_legislation_citation_cannot_be_edited - Test:
backend/tests/test_adviser_review.pytest_edited_excerpt_must_be_verbatim_in_frozen_document - Test:
backend/tests/test_adviser_review.pytest_excerpt_edit_refused_once_document_replaced
The review history is append-only
TestedEvery review decision is kept with the reviewer and the time. A new decision is added alongside earlier ones and never overwrites them. The engine's original finding is never modified. The database itself refuses an attempt to rewrite either.
Limit. Today the reviewer is recorded as the name entered at review. Signed-in adviser accounts, so the name comes from the login, are being built for the pilot service.
- Test:
backend/tests/test_adviser_review.pytest_engine_finding_and_review_trail_are_immutable_in_the_store - Test:
backend/tests/test_adviser_review.pytest_rereview_appends_and_latest_wins
The client document shows exactly what was reviewed
TestedRejected findings are left out of the client's report. Anything you changed is marked as your edit, and where you changed a status the engine's draft status is shown alongside.
- Test:
backend/tests/test_adviser_export.pytest_quotes_reproduced_exactly_and_rejected_omitted - Test:
backend/tests/test_adviser_export.pytest_adviser_edits_are_marked_and_engine_draft_disclosed
Every report is assessed as at a stated date
TestedEach report states the date it was assessed against. Commencement dates, and exclusions such as qualifying periods, are backed by word-for-word quotations of the legislation that sets them, and an exclusion that will stop applying shows the date it lapses.
- Test:
backend/tests/test_adviser_applicability.pytest_short_service_excludes_ordinary_unfair_dismissal_until_reform - Test:
backend/tests/test_adviser_applicability.pytest_qualifying_period_bases_are_verbatim - Test:
backend/tests/test_adviser_applicability.pytest_unknown_answers_never_exclude
Deleting documents and clients
TestedDeleting a document removes the uploaded file and its extracted text. Deleting a client removes its documents and files, and its reports and review records from the database.
Limit. Exported Word reports kept on our side are not yet removed when a client is deleted. This is being fixed before the pilot service opens.
- Test:
backend/tests/test_adviser_workspaces.pytest_delete_document_and_client_remove_files
Client documents go to one AI provider only
TestedClient document excerpts are sent only to Anthropic's API. Using any other AI provider for analysis is switched off and refuses to start unless deliberately enabled.
- Test:
backend/tests/test_adviser_engine_safety.pytest_openai_refused_by_default
Our source repository is private. Source code access is not provided as standard. A technical walkthrough of the code and tests is available on request, under NDA.
Where data is processed
- Application database, accounts and file storage: Supabase
- Application server: Railway
- Website and adviser interface: Vercel
- AI analysis of document excerpts: Anthropic, under its commercial terms and data processing addendum
The hosting regions will be confirmed and listed here before the pilot service opens. The full list of sub-processors is in our privacy policy.
What we do not claim
- No accuracy figure yet. We are building a labelled evaluation set and will publish exactly what it measures, including how often an obligation is wrongly marked as met. Until then we make no accuracy claim.
- The employment rule set has not yet been reviewed by an employment-law specialist. No customer receives output until it has.
- No certifications. We do not hold SOC 2, ISO 27001 or similar certifications.
- Not legal advice. Complian drafts findings for a qualified adviser to review. The adviser is responsible for the advice given to their client.
- Documents, not practice. A report assesses what a client's documents say, not how the client operates.
Report a security issue
Email hello@complianai.com with “Security” in the subject line.