spec-v1 · 12 August 2026
Spec
The engagement’s own requirement set, held against what was delivered: the same side-by-side the product runs on coverage, run on the spec. Each row quotes the ask, states what exists, and links to it.
12 met · 4 beyond the ask · 1 met with limits stated · 1 deviation, recorded. Ellipses mark condensed passages; the full text is in the repository at reference/spec-v1.txt.
The engagement
The spec
This is a standalone prototype. Eric will not have access to TrustLayer's application, codebase, infrastructure, user accounts, or any customer data.
Delivered
Built and hosted entirely outside TrustLayer, in a stack chosen for the job. Nothing here touches a TrustLayer system, account, or customer document, and the README says so first.
The spec
We supply the inputs: a set of sample policy documents (synthetic or publicly available specimen forms) ... and the finalized list of five questions.
Delivered
Both inputs are covered from the spec itself. It allows publicly available sample forms, so fifteen publicly posted programs were gathered as the corpus, with ground truth recorded. And it directs that the question set be treated as swappable configuration, not something to invent, so the questions belong to the user: ten standing checks ship as the working set, and the composer turns a typed question into a check.
The core flow
The spec
Detect the document type. Classify the uploaded document.
Delivered
Every document is classified into a closed vocabulary before anything else happens. A certificate is recognized as evidence rather than coverage, a document with no text layer is refused, and a low-confidence identity stops for a person instead of being extracted.
The spec
Pull out limits, aggregates, and deductibles/SIR, and stack the program into a coverage tower (primary, umbrella, excess = total limits).
Delivered
The tower is drawn from extracted, cited figures: layers, attachment points, aggregates, retentions. Every number on it opens the page and printed words it was read from, and the arithmetic is code, never a model.
The spec
Results of the five questions, shown as clear pass/fail per check.
Delivered
Answers come back in three states, not two: pass, fail, and cannot determine. Uncertainty dressed as a verdict is a wrong answer, so the third state is structural and every check declares what it could not settle.
The spec
Every flag should name the problem, explain the impact, and point to the relevant policy language.
Delivered
A finding carries its statement, why it matters for this insured, and citations to the pages behind it. A finding that rests on a document the file does not hold says so on its face rather than presenting as settled.
The spec
If we can analyze a policy this deeply for the owner's own coverage, the simpler variant, checking a party's document against a fixed question set, falls out of the same engine.
Delivered
Tested rather than assumed: V3 holds the same readings against requirement sets compiled from real published counterparty documents, each requirement beside what the coverage provides, with the shortfall in dollars where two printed figures prove it.
Quality expectations
The spec
Handles a multi-document program (primary + umbrella + excess) as one coverage picture.
Delivered
The VVA program joins two files into one tower through the schedule of underlying insurance. The University of Texas program reads five policies, five carriers, out of one 316 page file, each excess layer's schedule naming the layer beneath it. A document is not a policy, and the resolution works in both directions: several files into one policy, and one file into several.
The spec
When the system can't confidently find something, it says so and flags uncertainty ... it never guesses silently.
Delivered
Made structural rather than behavioral: no result exists without a scope of what was read and assumed, a missing scheduled policy halts the run for a person whose decision enters the record, and every citation is verified against the page text in code, with failures discarded rather than shown.
Handoff
The spec
Code in a repo shared with TrustLayer, with a README sufficient to run it locally.
Delivered
The repository, with a README that states what is real and what is not, piece by piece, and a one-command verification bar.
The spec
A live (or recorded) walkthrough demo.
Delivered
The demos are live and self-serve: anyone with the URL can run every reading on this site. No recording was made; the walkthrough is the site itself.
The spec
A short write-up: approach taken, models/libraries used, observed accuracy on the sample set, known limitations, and what production integration would require.
How it was evaluated
The spec
Against the provided sample set: correct document classification, accurate limit extraction, correct answers to the five questions, and the seeded coverage problems flagged.
Delivered
Run against the gathered corpus. Extraction of tower values agreed with every corroborated label, where corroborated means two machine reads reaching the same value, not a person. Classification carries no defensible number yet, and the harness says so rather than reporting one. Nothing was seeded; the corpus's real problems were found instead: a policy named by a schedule and absent, a tower that overlapped itself, restrictions across every page.
Out of scope
The spec
Out of scope: integration into TrustLayer's app or UI, access to or handling of real customer data, user accounts/auth, notification or inbox wiring, and claims-related features.
Delivered
One recorded deviation: the spec puts claims-related features out of scope, and loss runs and operator-entered claims were built into V2 anyway, because a reviewed read cannot show an aggregate it knows is partly consumed. That is a scope call made without the client, recorded here and in the decision log rather than graded as a bonus. Claims administration remains out. Accounts and persistence stay designed, and are labeled as designed everywhere they come up.
The open items, as they stand
The spec
Delivery of the sample policy set (synthetic/specimen documents, including seeded problems to catch).
Delivered
Closed from the spec's own allowance for publicly available sample forms: the corpus is fifteen real published programs, and a holdout folder stands ready for any set TrustLayer supplies later.
The spec
The finalized five questions (being pulled from a recorded customer call).
Delivered
Closed as the spec directs: the question set is swappable configuration, not something to invent, so the user controls it. Ten standing checks ship as the working set, the composer turns a typed question into a check, and any five drop in without touching the engine.
The spec
Document types beyond CGL: declarations pages, COIs, auto, workers' comp?
Delivered
Grown to umbrella, excess, and auto liability lines, plus loss runs as a third document type. A COI is read and refused as coverage on purpose: a certificate asserts a policy exists and grants nothing.
The spec
Scanned/image-based PDFs: in scope for the prototype or later?
Delivered
Answered with a boundary: a document with no text layer is refused, because its citations cannot be verified and an unverifiable reading rests on trust alone. Scanned documents wait in the corpus for the decision about reading text off an image.