> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vinmake.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Asking the Auditor

> Independent assurance from an agent that physically cannot write. Seven runnable families, six on the routine full sweep, and how to read a healthy answer.

# Asking the Auditor

The Auditor is the agent you use when you want independent assurance rather than an opinion.

Pick **Auditor** in the *Chat with* row on the landing, or open its
[workspace](/greatbook/guides/agent-workspaces) from the roster, and ask it to check the books.
It has a Chat tab and nothing else, because an agent that only reads has nothing to stage and
nothing to upload.
A routine full sweep runs six families of check and reports what it found.
The seventh, `close_gated`, runs only when the request names it or a period-close schedule selects it.
All seven declared families have a runner; the full-sweep list is narrower only because the seventh needs an explicit finished period.
It changes nothing, and its own answer says so.

<Note>
  **Asking is only half of it.**
  The same checks also run **every night** on a schedule, and what they find lands in a durable
  register you work through the **Audit** workspace rather than by asking again.
  [Working the exception register](/greatbook/guides/work-the-exception-register) is that half.
</Note>

<Frame caption="A full sweep. All checks passed, with the numbers behind each one.">
  <img src="https://mintcdn.com/vinmake/-Vh9mkHXk4f1Knq6/images/greatbook/guides/81-auditor-answer.png?fit=max&auto=format&n=-Vh9mkHXk4f1Knq6&q=85&s=02c359d783489ca8bf2f35505ea762c7" alt="An Auditor conversation reporting the results of a full integrity sweep" width="1440" height="900" data-path="images/greatbook/guides/81-auditor-answer.png" />
</Frame>

## The six routine families

| Check                            | What it means                                                                                                                                                                                                                                                                                | What a healthy answer looks like                                                          |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| **hash chain**                   | every posted entry is chained to the one before it, and the event log is chained too. It **recomputes** the hashes rather than trusting a stored flag                                                                                                                                        | *N entries (N full-recomputed) + the event chain: intact*                                 |
| **GL invariant sweep**           | per period: debits equal credits, every posted entry balances in base currency, no posted entry sits in a closed or undefined period, and every posted intake row reconciles one-to-one to a real GL entry                                                                                   | *N posted entries, M period(s): all invariants hold*                                      |
| **orphan scan**                  | rows that started down the pipeline and never arrived: approved but unposted, stuck mid-flight                                                                                                                                                                                               | *1 in-flight row(s): none stuck*                                                          |
| **cross-system reconciliation**  | one transaction seen across every system it lives in, over the [reconciliation graph](/greatbook/capabilities/reconciliation-ontology): a document claiming a ledger entry it never got, two live copies of one document, an ambiguous payable, and the AP/AR control against its sub-ledger | *reconciled: AP/AR control vs sub-ledger, document-to-ledger linkage, document versions*  |
| **Close checksums (continuous)** | the 78 of the [104 Close checksums](/greatbook/capabilities/close-list) whose expected value holds at every instant, asked now rather than at month-end                                                                                                                                      | *N continuous Close checksum(s) over M open period(s), K explainable balance(s) reported* |
| **document completeness**        | is any named document missing its counterparty document, its evidence, its signature, or its allocation, and how old is it                                                                                                                                                                   | *N settlement(s), M obligation(s) over 6 rule(s)*                                         |

<Note>
  **A note on "1 in-flight row".**
  That is the correct, healthy answer while a document is sitting at the posting gate.
  It only becomes a finding if the Auditor says a row is **stuck**.
</Note>

<Note>
  **A note on "inconclusive" from the reconciliation family.**
  The graph it reads is refreshed on a schedule, and a reconciliation over a graph older than six hours is reported **inconclusive** rather than clean.
  That is the correct answer, not a failure: it means the projection has stopped, and nothing cross-system has been verified since it did.
</Note>

<Note>
  The check family keyed `invariant` in the code is the **GL invariant sweep**, and the name is
  accurate: it re-checks the GL invariants over entries that are already posted.
  It is a different thing from the [Close checksums](/greatbook/capabilities/close-list), which
  reconcile the sub-ledgers against the GL and report rather than refuse.
</Note>

<Note>
  **The seventh family is explicit-only.**
  `close_gated` covers the 26 Close checksums that only become true after a period has ended.
  It runs from its monthly job or a question naming one of its controls, not from the routine full sweep.
  A full sweep deliberately leaves it out rather than printing a permanent "could not verify" line
  under every answer, and a job that names it on purpose is told so by name.
</Note>

<Warning>
  **Two skips you will see named in the answer, and they are correct.**
  The continuous Close sweep says *"AP-CONTROL is the recon family's, AR-CONTROL is the recon family's"*.

  Those two facts are checked by another family in the same sweep, and reporting them twice would
  put two rows in the register for one problem.
  The skip names its owner rather than going quiet, so you can tell a deliberate skip from a gap.
</Warning>

## Why you can trust it

**The Auditor has no write path at all**, and the database itself would refuse a write from it.

That is a stronger claim than "it does not write".
"It does not write" is a property of the code, which could change.
A read-only session is a property of the connection: even a bug in the agent could not produce a
write, because the database rejects it.

And the channel does not assume it: it puts the session read-only, then asks the server to confirm
it and **refuses to hand out a connection that will not confirm**.
A check that cannot get a provably read-only channel reports inconclusive rather than reading your
book through a session that could also write to it.
The [four mechanisms behind that](/greatbook/agents/auditor#read-only-enforced-by-the-database) are
on the Auditor's page.

<Warning>
  There is a second reason to trust the hash-chain check specifically, and it is the more interesting one.

  The recompute **reuses the ledger writer's own hash helpers**.
  It does not carry a second implementation of the checksum formula.

  If it did, the verifier could silently drift from the writer: the writer's hashing changes, the
  verifier keeps checking the old formula, and the sweep goes green forever while checking nothing.
  That is exactly the paste-over-value failure class, one layer up.
  Because the Auditor recomputes with the writer's own code, it cannot drift.
</Warning>

## When to run it

<CardGroup cols={2}>
  <Card title="Before any close" icon="calendar-check">
    A book whose chain is broken cannot be certified closed on top of. The Accountant's close checklist
    runs this sweep as its second step for exactly that reason.
  </Card>

  <Card title="After any unusual day" icon="activity">
    A bulk import, a migration, a manual intervention, a restore. Anything that touched the database
    by a route other than the writer.
  </Card>

  <Card title="As often as you like" icon="repeat">
    It is read-only, so running it has no cost to the book. There is no reason to ration it.
  </Card>

  <Card title="When something looks wrong" icon="search">
    Ask it directly. It answers questions about integrity in plain language and shows the numbers.
  </Card>
</CardGroup>

## What it cannot tell you

The Auditor proves the book is **internally consistent and untampered**.
That is not the same as proving it is **correct**.

* It cannot tell you a supplier invoice was booked to the wrong account, because a wrong account still balances.
* It cannot tell you an invoice is fraudulent, because a fraudulent invoice posts exactly like a real one.
* It cannot tell you a number was mis-extracted, because it does not read the source documents.

Those are what the two human gates are for, and what the [Close checksums](/greatbook/capabilities/close-list) reconcile against external evidence.

<Note>
  Being clear about this is the point.
  An assurance tool that implies it checks more than it does is worse than no assurance tool, because it
  buys confidence it has not earned.
</Note>

## Related

* [Working the exception register](/greatbook/guides/work-the-exception-register) - what the nightly sweeps leave behind, and what to do with it
* [Closing a period](/greatbook/guides/close-a-period) - where this sweep runs as a checklist step
* [Reading the General Ledger](/greatbook/guides/read-the-ledger)
* [The seven guarantees](/greatbook/guarantees) - the invariants this sweep re-checks
* [Two layers on the same documents](/greatbook/two-layers) - why an exception says which lane it belongs to
