Tekmor compares every PDF your document engine produces against its approved baseline, layer by layer, and writes evidence that a bank's own change process accepts. Identical inputs produce byte-identical results.
A composition engine upgrade, a template edit, a new font pack or a data-mapping fix re-renders policies, statements, notices and invoices by the hundred thousand, and almost nobody reads them afterwards. The defects that matter are small. The table lists ten from the test pack.
| Planted defect | Document | Layer that catches it |
|---|---|---|
| Exclusion "We do not pay" becomes "We pay" for gradual deterioration | Home insurance PDS | text |
| Financial Claims Scheme section dropped | Home insurance PDS | text |
| Closing balance taken from another account | Bank statement | data fields text |
| Total due rounded down to the dollar | Postpaid mobile bill | data fields |
| Pay-by date printed one day late | Arrears notice | data fields |
| Default-notice fee clause added to the privacy section | Arrears notice | text |
| PDF/A claim removed | Bank statement | structural |
| Body font no longer embedded | Tax invoice | structural |
| BPAY barcode printed 40 grey levels lighter, past the zone tolerance | Postpaid mobile bill | visual |
| Cooling-off paragraph rewritten in legal jargon | Home insurance PDS | plain language |
Every row is a case from Tekmor's frozen test pack: fictional Australian documents built in a pinned container, each with one planted change and a written expectation. Tekmor caught all of them on the run of 4 October 2026 and stayed silent on the controls.
The deterministic engine is the source of truth and produces the evidence. AI is advisory. It speeds people up and never issues a verdict.
Every pass or fail comes from repeatable, version-pinned checks. Run the same inputs twice and the results are byte-identical. The toolchain (rasteriser, text extraction, fonts) is pinned in one container image whose digest is recorded on every baseline and every run, so a changed document and a changed toolchain are recorded as different events.
f(payload_hash, template_version, toolchain_manifest_hash, zone_config_hash, render_dpi) -> results JSON bytes # pure. identical inputs, identical bytes. # no floats, no timestamps, no row ids inside.
Results JSON is canonical: sorted keys, integers and fixed-format decimals only, entities named by variant key and content hash. The CI build runs the 12-variant campaign twice and fails on a single differing byte. A change to any pinned constant must ship with a manifest version bump and its measured effect on the scorecard, or the build refuses it.
A versioned variant matrix, mask and tolerance zones for dates and barcodes, a render DPI, and approved golden masters. Or import the composition templates and build a scenario catalogue with measured conditional-branch coverage.
Dual engine (version A against version B), baseline compare (candidate against goldens) or inspection with no golden master. Variants run in parallel on queued workers and one failure never poisons the batch.
Visual, text, structural, data fields and plain language, each producing canonical results that are stored content-addressed before anyone looks at them.
Failed checks are clustered into root causes with an AI severity opinion. Reviewers decide per cluster with a mandatory rationale. Content-level changes need a second, compliance-privileged approver.
Append-only approvals, a run report, a self-contained evidence pack an auditor verifies offline, and promotion of the run to the next approved baseline.
Pixel and SSIM comparison per page, masked by declared zones with per-zone tolerances. Diff regions are merged and listed with their pixel counts.
Layout-aware extraction in reading order, paired across documents, classified as insertions, deletions and moves. Reads only glyphs visible inside the clip, so clipped text reports as a deletion.
Font inventory per page with substitutions named baseline to candidate, document metadata, page size and PDF/A conformance.
Values printed on the page checked against the source data payload, with Australian date and currency formats, rounding and totals.
Repeatable readability, sentence length, passive voice and jargon scores, per document and per section, in regression mode against the baseline.
Every screen below is Tekmor running the test pack: fictional insurer and bank documents, with the engine output and model opinions as recorded. Click any screenshot to enlarge it.
Evidence is useful to an auditor only when it cannot be altered after the fact and can be checked without trusting the tool that produced it. Each property below meets that test.
Every PDF, page image, overlay and results JSON is stored under its SHA-256 hash and committed before comparison begins. Verification refuses to run without both sides' artifact rows on record.
Results, artifacts, approvals and AI invocations have UPDATE and DELETE revoked from the application role and triggers that reject them even from the owner. A reversed decision is a new row that references the one it supersedes.
The container image digest and the manifest hash of every pinned constant are recorded on baselines and runs. A toolchain upgrade requires a new baseline approval; a historical run re-executes with its recorded digest to identical results.
A self-contained zip: manifest with every artifact hash, the deduplicated artifacts, and a summary PDF. A standard-library Python script checks it with no platform access and rejects any tampered byte.
Purpose, model, prompt hash and response artifact are recorded per invocation. Each opinion in the UI links to exactly what the model saw and said.
Secrets come from the environment, error detail never carries document text, and documents, data and evidence stay inside your environment.
Every deterministic feature works with AI disabled or unavailable. With it enabled, the advisory layer turns thousands of diffs into a handful of decisions, and every one of its outputs is labelled as an opinion.
Failed checks grouped by likely root cause, each with a cosmetic, minor or content severity and a confidence. Content clusters are excluded from bulk approval and need four eyes.
Likely cause, suggested fix and owning team per cluster, citing the checks and pages it drew on. Reviewers rate it helpful or not, and the rating is stored.
Meaning-preserving versus meaning-altering text changes, with a rationale. A meaning-altering finding forces content severity on its cluster.
Vision review of newly created documents for overlap, truncation, orphaned headings, broken tables and a mandatory-content checklist. Findings link to the page images.
Scenarios and data for the template branches the catalogue does not yet reach. A proposal enters the catalogue only after a deterministic reach check proves the branch and a person accepts it.
An audit-ready narrative drafted from evidence only, edited before issue. A qualitative language assessment that never flags mandated regulatory phrasing.
Spend is an exact integer per invocation, summed per feature, run and period, with a monthly cap that stops AI calls before a surprise bill while the deterministic flow continues unaffected. Each feature routes to its own provider, and a production licence refuses the built-in mock.
Tekmor is proved against a labelled corpus of realistic documents: five families, each case a single planted change with its expectation written from the planted change before the engine ran. The scorecard it produces is a committed floor in the build.
A code or constant change that lowers any class's catch rate or attribution rate, raises a false-alarm rate, or alters a pinned constant without a matching floor update fails the build before it merges.
| Test pack tekmor-v1, run of 4 October 2026 | |
|---|---|
| Document families | 5 |
| Cases (defects, controls, edge cases) | 43 |
| Planted defects expected | 31 |
| Planted defects caught | 31 |
| False alarms on identical, rebuilt and masked controls | 0 |
| Known gaps open on that date | 3 |
Families: home insurance policy schedule and PDS, bank transaction statement, tax invoice, arrears notice letter, postpaid mobile bill. The three gaps are tracked as a stated outcome. The current committed floor records every defect class at full catch rate.
Single-tenant deployment into the customer's environment. Documents, data and evidence never leave it, and AI calls go only through the provider path you approve.
The API, the UI and every worker ship as one digest-pinned container image. The footprint is Postgres and that image. Backup is one pg_dump and one directory.
A release reaches a host by one command from a CI-built image, verified by digest, with migrations frozen as DDL. One health endpoint covers every process on the host.
Scoped API tokens, a ready-made GitHub Action, and a pass/fail summary derived from deterministic results only. Templates are regression-tested inside the release pipeline.
Test lead, reviewer, compliance and admin roles enforced server-side, admin actions audited. Local accounts today, with sign-in through the organisation's own identity provider on the roadmap.
A signed licence carries entitlements and caps. An expired or missing licence blocks creating new runs only. Reading and exporting evidence is never blocked.
A demo takes an hour: we run the test pack live, then a family of your own documents if you can share redacted samples. Tekmor is built by Agenta, an Australian consultancy, and runs today on a Tekmor-operated staging host deployed by one command.
keith@agentaconsulting.comdanny@agentaconsulting.com