Read the results: the run console¶
A run leaves everything a stakeholder needs behind as files — the run manifest, the Quality Report, the corpus and the graph (ADR-0010, ADR-0017). The run console is the face over those files: one command, a localhost page, and a quality verdict a non-engineer can act on.
One command¶
pip install latence-console
latence-console ./corpus # a folder a run wrote to
latence-console s3://bucket/prefix # or any fsspec Storage location
It prints the URL and serves it on this machine only:
Point it at the same location you passed as --out / storage_uri. After the
one-command demo:
What you see¶
The run list. Every run on that Storage location, newest first, with the pipeline it ran, how many documents it read, when it started and finished, and a status:
| Status | What it means |
|---|---|
| Passed | The run finished and every quality check held. |
| Needs attention | The run finished, but a check did not hold — read the checks before using the output. |
| Failed | A pipeline step raised. The output is incomplete. |
| Unfinished | A manifest exists but no Quality Report: still running, or it stopped early. |
The Quality Report view. Select a run and the report is rendered as headline verdicts first — plain sentences with the numbers in them:
Every one of the 82 pieces of output can be traced back to the exact page it came from.
The knowledge graph holds 6 things connected by 33 relationships, 100.0% of which quote the sentence they came from.
3 files were held back as unsafe and 1 item was flagged for review.
Beneath the verdicts sits the drill-down: the per-Stage table (what ran, records in → out, time, outcome — including a step that was skipped because the machine could not run it), why each file was held back or flagged, the knowledge-graph statistics, the corpus and extraction counts, the contract-completeness numbers, and — for an incremental run (ADR-0018) — what changed since the previous version.
The worst verdict is listed first, and a check the run never made is never claimed: a pipeline with no Redaction Stage gets no reassuring "no personal data found" line.
What it deliberately does not do¶
- It never writes. It reaches only
exists/ls/read_text/open(uri, "rb")/modifiedon the Storage seam.POST,PUT,PATCHandDELETEare refused with405. Browsing every page leaves the storage tree byte-identical. - It holds no state. There is no database, no cache, no index it builds and persists. Every page is re-derived from the files at request time, so a run that lands while the console is open shows up on the next reload.
- It never phones home. Pages are single self-contained HTML documents with inlined CSS — no CDN, no font host, no script, no analytics. It works with the network cable pulled out, and it binds the loopback interface only (it refuses any other bind address).
- It answers only this machine. A request is refused with
403unless itsHostnames loopback (localhost,127.0.0.1,[::1]) on the port the console was started on, and anyOriginit carries is a loopback origin too. Binding to loopback alone would not stop DNS rebinding — a page in another tab re-resolving its own domain to127.0.0.1reaches the socket from your own browser, and only theHostheader gives it away. - It is not a JSON dump. The machine-readable
quality-report.jsonis still on Storage for anyone who wants it; the console is the human half.
On a large run¶
The console holds no cache, so it re-reads a run's files on every request. On a run with hundreds of megabytes of checkpoints that has to be bounded, and it is:
- checkpoints are streamed, never read into memory whole, and opening one chunk is a targeted lookup that costs one file pass — not the whole run;
- a list view reads at most 2000 records of each kind, and says so in a Partial view banner when it stopped short. Every record it lists is the most-downstream (post-Redaction) version, so a truncated list can never show text a Redaction Stage had already rewritten;
- every list view paginates at 200 rows per page (
?page=).
To audit a large run exhaustively, read the corpus and checkpoint files directly — they are the source of truth (ADR-0017); the console is a viewer over them.
Options¶
| Option | Default | What it does |
|---|---|---|
--port |
8787 |
Localhost port to serve on. |
--host |
127.0.0.1 |
Loopback address to bind. A non-loopback address is refused. |
Scope¶
This is the run list plus the Quality Report view. The deep inspectors — the quarantine browser, the chunk inspector, and the knowledge-graph browser — are the follow-up slice.