A real citation can still support the wrong answer
Connecting a folder to a chatbot does not settle retrieval quality. Version dates, permissions, chunk boundaries and ranking all decide which passage appears before the model writes a word.
The original eight-case run and five additional probes expose four failures where source records are incomplete or contradict their metadata. Both result sets are retained.
The fictional policy folder is a compact test for teams designing search over their own manuals, contracts or internal guidance.
Keep in mind: A clickable citation proves that a document exists. It does not prove that the passage is current, permitted or a good match for the sentence beside it.
In this article7 sections
Editorial note: The corpus is synthetic; the downloadable results are actual outputs of our deterministic teaching program. They are not model benchmarks or evidence of secure access control in a deployed retrieval system.
A citation can faithfully point to the wrong version
Ask for a meal allowance and receive CAD 40 with a link to a travel policy. The link works. The policy really says CAD 40. The answer can still be wrong if the trip falls after the policy’s effective period or the policy applies to a different audience.
Our small executed experiment isolates document selection before any model writes an answer. It uses exact topic metadata, dates and audience fields, not embeddings or a commercial retrieval service. That makes the logic easy to inspect while limiting what the result proves. The exercise is about selecting an applicable source, not establishing the quality or security of a full retrieval-augmented generation system.
The four-record corpus
All policies and amounts below are invented for this experiment. The original corpus has four records; a conflict case adds a fifth. The date in the question describes the trip, not the upload date. A historical question may legitimately require an older document.
Scroll the table sideways to see every column.
| ID | Scope | Amount |
|---|---|---|
| T1 | Staff meals, January 1 to June 30, 2026 | CAD 40 |
| T2 | Staff meals, July 1 to December 31, 2026 | CAD 45 |
| M1 | Manager meals during 2026 | CAD 70 |
| P1 | Staff parking during 2026 | CAD 15 |
Two selectors and an explicit refusal path
The baseline returns the first record with a matching topic. Because T1 appears first, every meal question receives CAD 40. The checked selector validates the calendar date, filters by the supplied audience and effective period, and answers only when exactly one applicable record remains.
Zero matches and multiple matches both produce REVIEW, for different reasons. A missing date needs clarification. A conflict needs a source decision. Treating both as permission to choose whichever passage ranks first would conceal the uncertainty the test was designed to expose.
The recorded result: one of eight versus eight of eight
We ran the code on September 21, 2026. The baseline matched the expected decision only for the June 30 staff query. It returned the old amount at the July boundary, answered without a date and answered for a year outside the corpus. It also ignored the manager scope, unknown audience, contradictory policy and impossible calendar date.
The checked selector matched all eight expected fixture decisions: CAD 40 for the June boundary, CAD 45 for July, CAD 70 for the manager case, and REVIEW for the remaining five. The record below includes the actual outputs, input data, program and instructions.
Eight of eight does not mean production-ready. The rules were designed for these fixtures. The baseline deliberately omits controls and represents no commercial product. Reordering the corpus also changes its first-match behaviour, which is a useful way to expose an accidental dependence on storage order.
The audience field is not authentication
A caller can edit “staff” to “manager” in our local data. The exercise therefore does not enforce real access control. In an application, identity and permission checks must come from trusted systems outside the prompt and apply before restricted material reaches generation.
The index, result snippets and citation previews also need appropriate access treatment. Revoking access to the original document is insufficient if an old cache still serves its text. Our runner has no cache or permission service, so a passing fixture cannot be offered as evidence that those parts are secure.
Test selection separately from the written answer
First ask whether an authorized user received the applicable passage. Then ask whether the generated statement follows from it. A model could receive T2 and still write CAD 40; that is an answer-support failure rather than the selection failure measured here.
We tested that limitation on September 23 using five further cases whose expected decisions were written before the run. Only the missing-topic case returned the expected REVIEW. The selector returned CAD 45 when the document text said CAD 55, when the amount was stored as text, when document text was absent, and when the document's end date was impossible. Those four failures are preserved in the probe data and outputs below. The original eight-of-eight result describes only its original fixtures.
Compare metadata with the source text and validate both before relying on a selected passage. The additional probe set is synthetic and investigator-designed; it is not a measure of a commercial retrieval system. A complete pipeline needs ingestion and content-consistency checks in addition to this date-and-audience logic.
For your own system, retain the question, authenticated scope, source version, selected passage and unresolved conflict. Show readers a permitted passage they can inspect. A citation earns its usefulness from applicability and support, not from the mere presence of a link.
AI answer comparison exerciseAssess the written answer after checking that retrieval selected the right evidence.
Inspect and rerun the experiment
First executed September 21 and rerun September 23, 2026. These are synthetic fixtures and actual outputs from a small JavaScript program. The downloadable results file contains the September 23 source hash. No commercial AI model or spreadsheet application was tested. The incomplete baseline is a teaching comparison, not a product benchmark.
| Case | Expected | Baseline | With checks |
|---|---|---|---|
| june boundary | 40 | 40 | 40 |
| july boundary | 45 | 40 | 45 |
| missing date | REVIEW | 40 | REVIEW |
| outside coverage | REVIEW | 40 | REVIEW |
| manager authorized | 70 | 40 | 70 |
| unknown role | REVIEW | 40 | REVIEW |
| conflicting current policy | REVIEW | 40 | REVIEW |
| invalid calendar date | REVIEW | 40 | REVIEW |
The baseline matched 1 of 8 specified outcomes; the checked version matched 8. The rules were built for these cases, so these counts cannot establish real-world reliability.
Additional probes, September 23
After the original run, we specified more synthetic cases before running them against the unchanged rules. These investigator-designed probes are not a representative held-out sample. Failures remain in the record.
| Case | Expected | Observed | Result |
|---|---|---|---|
| unknown topic | REVIEW | REVIEW | Matched |
| text disagrees with metadata | REVIEW | 45 | Failed |
| numeric text amount | REVIEW | 45 | Failed |
| missing document text | REVIEW | 45 | Failed |
| invalid document range | REVIEW | 45 | Failed |
1 of 5 additional probes matched the independently written expected decisions. The retrieval selector does not check document text against metadata, missing text, amount types or malformed document dates. Neither suite tested an AI model or real permission system.
- Download the input data (JSON)
- Download the executable source (JavaScript)
- Download the recorded results (JSON)
- Read the method, limits and rerun instructions
- Download the additional cases and expected decisions
- Download the probe runner
- Download all observed probe results
Put all downloaded files in one folder. With Node.js 22 or later, run node run.mjs for the original cases and node probe.mjs for the extra cases. Neither requires a package, account or network connection. Each overwrites its own results file; preserve the published copy before rerunning. The results include input and source hashes.
Continue with the original sources
These claim-relevant primary and first-party references support the reporting above. Open them for technical detail, current requirements and subsequent updates.
- docs.cohere.comCohere: Retrieval Augmented Generation ↗Documents retrieval, supplied documents and citations. A citation still needs to be checked for support and access permissions.
- anthropic.comAnthropic: Effective context engineering ↗Explains selecting and organizing relevant context. The document-control example here is AI New Canada's own design exercise.
- developers.openai.comOpenAI: Working with evals ↗First-party documentation on defining test criteria, datasets and evaluation runs; not independent evidence that a particular model performs well.
Finished reading? Save that here without waiting for a timer.
Research update, September 23: added five synthetic source-quality probes; four failed the selector and remain visible in the results.
See something we should fix or clarify? Read the corrections policy or tell the newsroom. Material changes are noted here.
