A century of municipal paperwork, turned into records you can check. Canadian towns published their engineering and public-health reports on paper for a hundred years, and those volumes are now scans sitting in the Internet Archive. Concordance reads them and produces structured records: a value, a place, a year, and a link back to the exact page it came from.
The point is that last part. A number lifted out of a 1969 scan by a language model is a claim, and a claim that arrives without the sentence it came from is worth nothing. So Concordance keeps the sentence, then goes back and checks it.
Concordance is an MIT-licensed Python toolkit that reads scanned Canadian government publications and writes structured records. A local language model does the reading; the toolkit decides what to believe. For a prose record to be accepted it has to retain an exact quotation from the page it cites, and the verifier then checks that quotation, and the number inside it, against the page itself.
Open Source · MIT Python 3.11+ · zero required third-party runtime dependencies · 1,608 offline tests, all passing offline. The public instance at concordance.jonathancapone.com has read 24 towns of a located 102 so far, producing 6,554 source-linked records.
The Core Rule
A Model's Answer Is a Claim, Not a Source
Most extraction pipelines ask a model for a number and store the number. Concordance stores the number, the sentence it appeared in, and the page locator, then re-reads the page and confirms all three agree. Where they disagree, the record is refused. Where the page states no number at all, in digits or in words, it is refused with that reason attached.
Working
Complete tokens, not substrings
Asking whether a page "contains" 5 by searching its text is the bug that lets fabrications through: 12 appears inside 3120, 1 inside 10, and 5 inside 53,549.66. The verifier compares complete numeric tokens, so a value has to appear as its own number to count.
Working
A fragment may not drop a sign
A quotation is allowed to be a sentence fragment, but it may not trim away an adjacent character that changes the meaning. 5 is not a faithful fragment of > 5 or 5%, even though the token 5 genuinely occurs there. The check reads what sits immediately either side of the match.
Working
Correct answers still fail
A value reached by arithmetic is refused even when the arithmetic is right, because the cited page never stated it. Letter-for-digit repair is allowed in the other direction: I5 units may resolve to 15, while a transposition or an invented figure still fails.
Abstention
Saying Nothing Is an Allowed Answer.
Publication-year proposals are deterministic, and they abstain when the available text does not support a date. A record whose value has no number behind it, a conclusion rather than a measurement, is kept and marked unchecked rather than forced into a verdict it cannot carry. Observations, design values, standards, and conclusions stay distinct from one another, and units that look alike are treated as incomparable across eras until shown otherwise.
The Assistant
Jay.
The research assistant is named for the Canada jay, which caches tens of thousands of items across several square kilometres of territory and remembers where it put them months later, under snow. That is the job exactly: the record is scattered through many documents, and the work is knowing where a thing is and going to get it.
Its tool-calling loop and pending-action model are forked from the agent built for OMEGA. What changed is what the tools reach. OMEGA's talk to a live sensor mesh, where a reading is self-evidently a reading. These talk to a century of scanned paper, where every answer has to arrive holding its evidence.
Sharing Records
A Receiving Instance Rechecks Before It Merges
Records travel as contribution bundles that carry their sources with them. An instance receiving a bundle re-runs the evidence check on supported prose before merging anything, so trust is re-earned at each hop rather than inherited. A bundle can be inspected offline, without contacting any provider.
Working
Offline by default
Checking stored evidence needs no API key and no model call. Local extraction runs against Ollama with a downloaded model; the optional Anthropic backend is used only when a caller selects it and supplies their own key.
Working
1,608 tests, no network
The suite runs offline against constructed records and temporary directories. Adversarial cases cover fabricated decimals, path traversal, unsafe identifiers, duplicate imports, and files interrupted partway through publication.
Working
Attributed gazetteer
Ontario place resolution uses a gazetteer derived from the Canadian Geographical Names Database, shipped with its source, transformation, checksum, and Open Government Licence – Canada attribution.
The Instance
What Has Been Read So Far.
102 title-derived place series covering 1961 to 1974. Orange means the scans have been
read; grey means the place is located and the reports survive, but nothing has been
extracted yet. Dot size is the number of surviving reports, so the map shows the size of
the remaining work as plainly as it shows the progress.
Accuracy
Scored Against Pages a Person Read First.
The live instance publishes its own scores, and publishes them including the misses. On 68 values a person had already read by hand: 96.8% precision (60 of 62 kept), 88.2% recall (60 of 68 present), 98.3% on telling a measurement from a design spec or a regulatory limit, and 88.9% on separating influent from effluent, where getting it backwards turns a working plant into a polluting one.
The sample is 4 pages across 2 documents, and the site says so on the same screen as the numbers: an early signal, not a claim about the whole archive. It also reports that it missed 8 values a person found and produced 2 the answer key does not have, on the stated grounds that a figure without its failures is an advertisement.
The first number was wrong, and it was the ruler
The first scored run reported 49% precision. Auditing the records it had called wrong showed nearly all of them were right: the scorer could not convert "3.0 million gallons" to "3000000 gallons", and the hand-written ground truth was incomplete. Fixing the measurement, with no change at all to the extractor, moved precision from 49.1% to 96.8%. Publishing the first figure would have narrowed the project for no reason.
Honest Gaps
What It Does Not Claim.
Experimental
Table extraction
A page, row, and column label does not by itself prove that a value came from a particular cell. Concordance preserves locator-only table contributions, and deliberately declines to mark them verified.
Small sample
An early signal, not a finished archive
The public instance reads a corpus that is still small: 24 towns read of 102 located, and the accuracy figures come from 68 values across 4 pages of 2 documents. That is an early signal rather than a claim about the whole archive. The repository ships the software, the offline tests, the interface assets, the attributed gazetteer, and provider declarations. It leaves out Internet Archive OCR, extracted measurements, hand-read gold data, derived vocabulary, and generated pages, on the principle that public access to source material is not permission to relicense it.