policyratio §PolicyRatiocited
The method behind the answer

How the answer is made. Cited.

Every answer is a verbatim passage from the governing policy — with its section and a link to source. A fabricated citation is structurally impossible; when there's no answer, the tool says so.

Verbatim, verified quotes Cross-references surfaced No personal information stored
6Steps per lookup
2Verification gates
100%Quotes substring-checked
328Tests passing
0Machine-written links or dates
§ 01 — The verified-citation pipeline

Six steps from a question to a quote you can stand behind.

The same sequence runs on every lookup. The last two steps exist to make a wrong-but-confident answer impossible to emit.

01

Plain-language question, identifiers stripped

You ask in plain language — a question or a short situation. Before the query leaves your browser, direct identifiers (SIN, health number, phone, email, postal code, account IDs, and labelled lines) are stripped, and again server-side. Staff are asked to enter the policy question, not the person.

question → scrubbed query
02

Keyword retrieval over the manual

Policy language is keyword-heavy, so retrieval today runs BM25 keyword search over the indexed manual chunks and ranks the candidates by relevance to the query. A vector-similarity and rerank layer is in development to close vocabulary gaps; it is not yet live.

keyword search over indexed chunks
03

One-hop cross-reference expansion

Eligibility is a conjunction of gates. The tool pulls in the sections that the top hits point to via parsed "see Section X" links, so the whole gate set surfaces — assets, income, residency — not one lexical match seen in isolation.

top hits → +referenced sections
04

Answer as verbatim spans only

The engine returns quoted spans drawn as verbatim substrings of the retrieved chunks — never paraphrased into a citation, never composed from memory. There is no text generation, so there is nothing to invent.

quotes = substrings of real chunks
05

Programmatic verification

Every returned quote is checked against the source chunk: it must be an exact substring (whitespace-normalized) of a real chunk, or it is dropped. The URL and effective date are then attached from the chunk's metadata by chunk ID — the engine never emits a link or a date itself.

exact-substring check · metadata by ID
06

Refusal by construction

If the top match score falls below the calibrated threshold, or the set of verified quotes comes back empty, the tool returns the escalate message instead of an answer. A guess is not one of the outcomes it can produce.

below threshold → escalate
A lookup · example from currently-loaded coverage
Core Shelter Single adult Lives with a relative Party to the tenancy agreement
Verified verbatim § 05 Core Shelter › Private Housing
“A person who resides with a relative and is a party to the tenancy agreement is paid the Core Shelter rate for private housing.”

This also depends on: Assets — liquid-asset limit § 03, Living with relatives § 05 · LA 7.

Illustrative · Alberta Income Support
This example draws on Alberta Income Support, the first coverage loaded (see /coverage). The quote, section code and date are a representative specimen of the on-screen result shape. In the product these fields are populated only from the live indexed source and the check described in step 05.

§ 02 — Why fabrication is impossible

Fabricated citations aren't discouraged. They're structurally impossible.

A language model asked for a citation can invent a plausible one — a real-sounding section number, a URL that resolves to nothing. policyratio removes the two places that failure can happen, rather than asking the model to behave.

The quote must exist, character-for-character

Every span the model returns is compared against the actual chunk text. If it is not an exact substring (after normalizing whitespace) of a real, indexed passage, it is dropped before it reaches the screen. A paraphrase cannot pose as a quote.

The model never writes the link or the date

URLs and effective dates are not generated. Once a quote is verified, they are looked up from the source chunk's metadata by chunk ID and attached. The model has no path to emit a citation that points anywhere but the passage it actually quoted.

# each returned span, checked against its source chunk
verify(span) → substring of chunk 4127 ✓ keep → attach url, effective_date by id
verify(span) → not found in any chunk ✗ drop
# nothing survives that the manual doesn't literally say
§ 03 — Refusal over guessing

It refuses instead of guessing.

“I don't know” is a first-class result. When retrieval doesn't clear the relevance threshold, or verification leaves no quotes standing, the tool declines to answer — because for a legally accountable decision, a confident wrong answer is worse than none.

No matching policy found. Escalate, or check the manual directly.

The threshold is calibrated on the evaluation set so that out-of-scope questions land here. The tool would rather send you to the binder than manufacture a passage that isn't there.

§ 04 — Privacy & compliance

Built to hold as little as possible.

Whatever regime governs your jurisdiction — FOIP, PIPEDA, PHIPA and provincial equivalents — the tool is built to keep client identifiers out. Direct identifiers are stripped in the browser and again server-side, and staff are asked to enter the policy question, not the person. Free text can still contain a name, so the discipline matters — the tool asks about the rule, not the client.

FOIP PIPEDA PHIPA Identifiers stripped, client + server
Logged: the scrubbed question, section IDs, quote hashes
Stripped before send: SIN, health #, phone, email, postal, IDs
No client file — policy research, not a person
Identifier scrubbing

Direct identifiers stripped, both sides

SIN, health number, phone, email, postal code, account IDs, and labelled lines are removed in the browser before the query is sent, and again server-side. Free text can still hold a name, so staff are asked to enter the policy question, not the person.

The audit log

The scrubbed question, not a client file

Each lookup records the scrubbed question, returned section IDs, and quote hashes — enough to reconstruct an answer, with direct identifiers already stripped and no client file attached.

Reproducible

Every answer is reconstructable

Because the log pins the sections and quote hashes, the exact basis of any past answer can be reconstructed on appeal — without holding the client's details.

Least privilege

Access-controlled, short retention

Even structured situational facts can be re-identifying in rare combinations, so access is per-worker and retention is deliberately short.

Before any pilot with real use

Today the engine is deterministic — keyword retrieval with exact-substring verification, no text generation. If a model is later added for reranking or a plain-language gloss, real-client use stays gated behind concrete prerequisites — not promises:

  • A completed Privacy Impact Assessment (PIA).
  • A data-processing agreement with zero data retention and no training on inputs.
  • Queries carry no client identifiers — direct identifiers stripped before send.
  • Logged engine and version for every call, for reproducibility.
§ 05 — Decision support, not a determination

It checks the policy. You make the decision.

policyratio never renders the official eligibility determination. It can check a stated situation against the cited rules — flagging, for example, that liquid assets are over the computed limit — but every result is decision support with its policy citation, and the determination, the benefit calculation, and the accountability always stay with the staff member.

Dollar figures follow the same discipline as citations. Amounts are verified against the government's published rate schedule (the Financial Benefits Summary) by an automated check, carry their own effective date and source page, and are never model-generated. This framing is persistent, not a dismissible banner: the answer is evidence for your judgment, not a substitute for it.

§ 06 — How it's evaluated

The launch gate.

Trust is measured before release, not asserted. For each coverage area, a golden set of 50–100 SME-verified questions — seeded from what frontline staff actually ask — is run against the tool, scoring four things.

recall@k
Retrieval recall — did the correct section appear among the candidates at all?
≈100%
Citation faithfulness — quotes verbatim and relevant. The primary bar.
SME
Answer correctness, graded by a subject-matter expert against the golden set.
refusal
Refusal precision and recall — measured on deliberately out-of-scope questions.
Launch is gated on ≈100% citation faithfulness and near-zero wrong-but-confident answers. Until it clears that bar, it does not ship.

See the citation before you stand behind it.

Live now for Alberta Income Support · Canada-wide by design.