Subscribe

Every way your agent fails, and what catches it.

Did your agent know what it needed to know?

Did the agent know what it needed to know? The Context register names the 22 ways a fact fails to reach an agent, or reaches it wrongly.

ON THIS PAGE

01 The short answer02 What this register does03 A worked example04 What to install05 Every row on the register06 The fixes

AT A GLANCE

22

NAMED FAILURE MODES

0

PREVENTED

14

DETECTED EVERY TIME

8

SURVIVE EVERYTHING

11

CATCHABLE BEFORE THE SESSION STARTS

SEVERITY

7 × S4 · 12 × S3 · 2 × S2 · 1 × S1

THE SHORT ANSWER

Did your agent know what it needed to know?

Because it cannot tell the difference between knowing something and generating something. A fact retrieved from your files and a fact invented from training arrive as the same fluent text, in the same voice, with the same confidence, and the agent has no internal signal that separates them. That is why none of the 22 failures on this register can be prevented. Fourteen can be caught every time; eight cannot.

Your agent gives you a confident, well-argued, completely wrong answer. It never opened the file to check the fact.

We can't hate agents for making these sorts of failures because we make them all the time. Your colleague quotes a price that changed in March. They report that nothing covers a question when one search would have settled it. They say they have checked a fact when what they actually did was read a summary rather than the transcript.

Your colleague caught quoting a stale price apologises, and the process of apologising embeds the correction in their memory, attached to the discomfort of having been wrong in front of someone.

That fact becomes one of the few they will never get wrong again. The error repairs itself, one fact at a time, for every employee. It cost nothing, nobody needed to design a control, and there's no corporate register that records it.

Agents apologise too (and too often). But then the session ends and there is no record of an apology, or any positive consequence for having made one.

That is the asymmetry underneath this whole register. The control that handled a wrong fact in a human workforce was never institutional, there was no policy. It was mnemonic.

Mnemonic controls do not transfer to a worker with no memory between sessions. And it's why you run into context failures where an agent you just told something to in one session seems to forget it in the next.

And this is why every fix on this page is external: a date in a schema, a source in the front matter, a rename map in the retrieval path. You're not giving the agent a better memory. You're writing the facts down in a way that makes them easy to find and easy to check.

What this register does

The context register names the 22 ways a fact fails to reach an agent, or reaches it incorrectly. Not one of them can be prevented. Fourteen can be caught every time. Eight cannot be closed by anything available. The register carries 11 evidenced rows and 11 candidates; the hub's headline counts count evidenced rows only.

What makes this the most tractable register in the framework despite that: 11 of the 22 are catchable before the session even starts.

The register produces one working rule: date the fact, name the source, and keep the raw beside the distillation.

This is a technical page listing every row in the register and what it costs, what closes it (if anything). It sits under the hub. Its nearest neighbour is did it do what it was told? That register asks whether the agent obeyed. This one asks whether what it obeyed with was true.

Many of the controls on this page are standard software engineering – dated docs, named sources, disciplined filing – and experienced engineers already run some of them.

What the register adds is the failure behind each control: which failures are only detected, and which ones nothing closes. That is where your remaining gaps are.

THE DEFINING FINDING

Most of this register is not an agent problem. It is a filing problem that agents make expensive.

The question this register asks

Did it know what it needed to know? The unit this register tests is a fact:

  • A price, correct in March, quoted today.
  • A decision, recorded, with the reason left out.
  • A vendor's claim about their own product, read as a finding.
  • An absence: "nothing covers this", when one search would have settled it.

Each fact has a life. It gets captured or it stays in somebody's head, it is retrieved when it matters or it is not, what comes back is true or merely plausible, it changes the output or gets ignored, and it stays true or quietly stops being true. The register grades each failure by what it costs, how quietly it fails, and what can catch it.

There is one mechanical fact underneath this whole register, and it is the reason nothing here can be prevented. An agent cannot tell the difference between knowing something and generating something.

A person's version of this signal is weak, but it exists. You have had the experience of being about to say something and stopping, because you noticed you were not sure. You do not always notice, and people misremember where they learned things constantly – but the doubt arrives often enough that hedging is a normal part of how adults speak.

No colleague states a fact about the world without some flicker of doubt about whether their picture of the world is still current, and that flicker is what triggers the check.

An agent experiences no flickers of doubt. A retrieved fact and an invented one arrive as fluent text in the same voice, with the same confidence, and are indistinguishable at the point of use – not to you reading the output, and not to the agent producing it. There is no internal signal that says "this part came from a file and that part came from training".

That is why this register has no Class A (failure is prevented) rows. You can refuse a write. You cannot refuse ignorance, because ignorance does not present itself as an action to be refused.

What a bad fact looks like

A WORKED EXAMPLE / CL-2A

Here is one from our own build, and it cost a day.

Here is one from our own build, and it cost a day.

An agent needed to re-point some duplicate class names. It wrote a script from scratch to do it, keyed on the name form it expected. The project already had a tool that had solved this exact problem, carried the correct normalising rule, and had a comment recording that the rule had been validated at 22 out of 22 against the real data, compared to 11 out of 22 for the naive approach.

Its README stated the rule in its own section, under the heading, "Style names are not class names".

Neither was read.

The script was tested against the real names afterwards: zero of 15 matched. It would have run, reported success, and changed nothing.

In the register that failure is row CL-2A, "nobody looked; the answer came from training", and it is Class C – survives: nothing catches it every time, so it reaches you.

The knowledge existed, was correct, was findable, was documented in two places, and was one read away. Nothing about the session that produced the script looked different from a session that had checked.

TESTED AFTERWARDS / ZERO OF 15 LOOKUPS MATCHED

Why re-reading the note changes nothing

One property decides where this register's controls have to live: the failure class is a property of the mechanism, not of the fact.

Re-reading a note every session makes the wrong fact less likely. It does nothing about what happens when the wrong fact gets used anyway.

Take re-injection, which is the strongest action available here. In a long session the conversation gets compressed to make room, and facts you supplied early can be dropped on the way through.

Re-injection means something automatically re-reads the important files and puts them back in front of the agent. It is a real improvement but it doesn't close any failure modes, because handing somebody the rulebook a second time is not the same as checking they followed it.

There is one exception on this register. For the row where a fact was retrieved and then compacted away, re-injection is enough – because the re-read leaves a trace. A file was opened, and there is a record saying so. Where a mechanism produces something you can point at afterwards, the row closes. Where it only makes the agent more likely to behave well, it does not.

The practical test: would anything notice if the agent used the stale fact anyway? If the answer is no, the row is Class C (nothing catches it every time) however good your notes are.

While none of the failures of context in this register can be prevented, there are more opportunities to catch failures earlier than on any other register in the framework: 11 of 22 rows are catchable before the session starts – on disk, in how the facts are filed, dated and schema'd.

Four more are catchable before the change lands, three while the session runs, and only four after it has finished. Compare Authority, where 16 of 23 are only discoverable afterwards.

So the shape of the work is unusual for this framework. Most registers ask you to install gates. This one asks you to fix your filing.

Severity is cost multiplied by how quietly the wrong fact fails. Seven of the 22 are S4 (it ships and nobody finds out) and 12 are S3 (real cost, discovered late). This is a register of expensive, quiet failures.

One row is S1: two notes disagreeing, which is at least visible the moment somebody notices the contradiction.

How this register works

The context register lists 22 failures and grades them against a base install: an agent, a repository, a folder of notes and a CI pipeline. It names the strongest mechanism available against each. Whether any of them is actually switched on is a separate question, and one you answer against your own configuration. The whole catalogue is published on GitHub – clone it or download the zip.

The rows were derived by working through the life of a fact, stage by stage, and asking at each stage what would leave the agent working from something untrue. Every register in this framework is built that way rather than from an incident log, because selecting for "we have seen this go wrong" filters out the failures that never announce themselves.

Only seven of the 22 failures are recorded here with dated incidents; 15 have no incident recorded.

One caveat: It is a design rather than an audit. Sixteen of its 17 tooled rows are not built in the codebase it was derived from. Only the live-source connector behind one row exists.

So this page describes what is available more than what is proven in place.

The life of a fact: five stages and an assurance band

Rows are grouped by how far a fact has travelled when it fails.

  1. Captured – does the fact exist outside someone's head? Whether it was written down at all, whether the reason came with the decision, whether it was filed where retrieval looks, and whether the raw source survived the summary. Six rows.
  2. Retrieved – did it reach the agent when it mattered? Whether anybody looked, whether the search terms matched the wording, and whether it survived compaction. Three rows.
  3. Trusted – is what came back actually true? Whether a claim carried its source, whether an absence was actually searched for, and whether the index was checked instead of the artefact. Three rows.
  4. Used – did it change what was produced? Whether the file that was read changed the output, whether a trained default overrode it, and whether caveats travelled with the finding. Five rows.
  5. Current – is it still true today? Whether the fact has an effective date, whether the copy drifted from the live source, and whether superseded documents still surface first. Three rows.

Cutting across all five is an assurance band, Checked – would you find out if it had been wrong? Two rows.

The three classes: prevented, detected and survives

Every row carries one of three classes, describing how complete the available remedy is.

  1. Prevented – the failure cannot occur. On this register it is empty. No row here can be made impossible, and the reason is structural rather than a gap in tooling. Prevention means refusing an action, and not knowing something is not an action. Only one other register in the framework has an empty Class A, and it is Truth – the other register that grades knowledge rather than reach.
  2. Detected – it occurs and something catches it every time (14 rows). Almost all of it is filing discipline made executable: a schema that fails a decision log entry with no rationale, a path lint that refuses a file filed off-taxonomy, a naming changelog that resolves retired names, a requirement that a curated note names its raw source, an effective date and a review date on anything with a shelf life.
  3. Survives – no available remedy closes it (eight rows). Which of two contradicting notes is current. Whether anybody looked before answering. Whether a claim carried its source. Whether an absence was actually searched. Whether a figure came from somewhere. Whether a caveat travelled with the fact. Whether the local copy still matches the live system. And whether a fact that is simply wrong would ever be noticed.

So the score is nothing prevented, 14 detected, eight surviving.

Vocabulary: this register reads its three classes as prevented, detected and survives. Five of the six registers use these words, and the class letter means the same thing everywhere – how complete the remedy is. [A note on vocabulary] on the hub covers the exception, and the three things still unreconciled across the framework.

That cluster of early catch points is the highest of any register in the framework, and it is not achieved by watching the agent or by gating its actions. It comes from changing how facts sit on disk before any agent arrives: dated, sourced, filed where retrieval looks, with the raw kept beside the distillation and the archive kept out of the search path.

That is an unusual conclusion for a register in this framework. Most of this register is not an agent problem. It is a filing problem that agents make expensive. A human working from a badly organised knowledge base compensates by remembering where things are. An agent has no such memory and no way to signal the gap, so every weakness in the filing surfaces as a confident wrong answer.

And of the eight that survive, five are conventions somebody has to remember – name your source, show your search, date your figure, carry the caveat, say which note supersedes which. Nothing runs them. The remaining three have nothing behind them at all: an enforced read before a spoken claim, a live source the agent has to prefer over the copy it already has, and a check that fires on a fact that is simply wrong.

What to install

Start from a base install and add in this sequence. Because nothing here prevents, the whole list is filing and checking.

  • Put an effective date and a review date on anything with a shelf life. Prices, capabilities, versions, integrations. A schema that requires both, and a lint that fails without them. This is the cheapest high-value item on the register and it closes the "true when it was written" row completely.
  • Require a rationale field on every decision. A record that says what was chosen and not why does not settle the question next month, and it will be re-litigated by an agent that reads it.
  • Lint the filing paths. A note filed off-taxonomy is invisible to retrieval, and the author will not know. One canonical folder per class of fact, enforced pre-commit.
  • Keep a naming changelog and make retrieval resolve it. When something is renamed, every note written before the rename becomes unfindable by the new name. This register's rows on search-term mismatch close entirely on this one convention.
  • Require every curated note to name its raw source. A summary whose source was discarded cannot be checked back to anything, and its errors become permanent.
  • Exclude the archive folder from the retrieval path. A superseded document that keeps surfacing first will keep being used, and nobody notices because it reads correctly.
  • Diff the index against the artefacts in CI. Verify the work, not the thing describing it. A register row can be right while the file it describes is wrong.
  • Diff cited files against the session record. Catches a source that was cited and never opened, which is the assurance-band version of this whole register.
  • Scope context files by directory. Stops one project's rules being applied to another – the cheapest fix for the most embarrassing failure here.
  • Then the five conventions nothing enforces. Name the source with the claim. Show the search before reporting an absence. Give every figure a provenance. Carry the caveat with the finding. Say which of two notes supersedes the other.
  • And then accept the three with nothing behind them. Nothing makes an agent read before it answers in prose. Nothing makes it prefer a live source over the copy it already has. And a fact that is simply wrong, in an output that reads perfectly, has no check behind it at all.

Run the free trust-check tool to find out which of these you already have. Or start without it: add an effective date to the five facts your agents quote most. It takes an afternoon and it closes the quietest row on this register.

REFERENCE

Every row on the context register

THIS PAGE IS A VIEW, NOT THE RECORD

Generated from the register at commit f179130, last updated 2026-09-01. The register file is canon; this page is a rendering of it. Where the two disagree, the register is right.

OPEN THE CURRENT REGISTER →

Who this is written for

This page assumes a developer's setup. The mechanisms below are written for an agent with hooks, a git repository, plain-text notes carrying a frontmatter schema, and a CI pipeline. The reference implementation is a markdown second-brain vault, which is where these 22 rows were derived. If that is your stack, everything here is directly installable as written.

If your knowledge lives in Microsoft 365, Google Workspace, Confluence or Notion, the failures are identical – a stale price is a stale price – but the mechanisms are not. A required column stands in for a frontmatter field, a retention label for a review date, a search scope for an excluded folder, a term-store synonym list for a naming changelog. Roughly two thirds of this register maps across that way. A few rows, index-to-artefact diffing in CI most clearly, are repo-native and have no clean equivalent.

Those mappings are not published here. Enterprise mapping is available on request.

How to read each row

Every row in every register in this framework is described the same five ways.

  • Stage – how far the fact had travelled when it failed.
  • The failure – what goes wrong, and the sentence you actually hear when it does.
  • Severity – cost multiplied by how quietly it fails. A judgement, not a measurement. S1 visible at once · S2 caught at review · S3 real cost, found late · S4 it ships and nobody finds out.
  • Class – how complete the available remedy is. Prevented: cannot occur – empty on this register. Detected: occurs and is caught every time. Survives: nothing catches it every time, so it reaches you.
  • The fix – the mechanism, and where it fires.

Seven rows on this register carry a dated first-party incident. The other 15 do not, or not that we know of. See "How this register works" for what that count means here.

Nothing on this page says whether a control is switched on in your setup, and on this register that gap is wider than usual. The register describes itself as a design: 16 of its 17 tooled rows are not built in the codebase it was derived from.

How to test your own setup

The register describes what is available. Whether any of it is running on your machine is the other question, and you answer it by working down the rows below against your own configuration. The same rows are on GitHub as plain markdown, if you would rather read them in your editor or diff them into your own notes.

What no tool reports is whether a fact is true. It can tell you a figure has no source attached. It cannot tell you the figure is wrong.

STAGE 1

Captured: does the fact exist outside someone's head?

None prevented, five detected, one survives

CL-1AS3DETECTED

“We worked this out weeks ago.”

The fact only ever existed in a chat thread. It appears the session after the thinking happened.

THE FIX

Archive every working conversation to disk, with a stop hook that offers to file the turn's findings.

CL-1BS3DETECTED

“You know what was chosen, not why.”

The decision was recorded, the reason was not. It appears months later, when the decision needs revisiting and the record cannot support it.

THE FIX

A schema on the decision log that fails on a missing rationale.

CL-1CS2DETECTED

“The note exists and search never sees it.”

Written somewhere retrieval never looks. It appears immediately and invisibly – the author believes the fact is captured.

THE FIX

One canonical folder per class of fact, with a path lint that refuses a file filed off-taxonomy.

CL-1DS1SURVIVES

“It quoted the stale one, plausibly.”

Two notes disagree and nothing says which is current. It appears whenever the same fact is written twice.

THE FIX

None complete. A supersedes pointer in the front matter helps and nothing enforces that it is set. Lowest severity here, because a contradiction is visible once somebody sees both.

CL-1ES3DETECTED

“You cannot check the claim back to anything.”

Captured as a summary; the source was discarded. It appears whenever distillation is treated as replacement rather than as addition.

THE FIX

A curated note must name its raw source. Keep the raw beside the distillation.

CL-1FS4DETECTED

“The only record is that someone remembers.”

A spoken fact was never written down at all. It appears after every meeting nobody recorded.

THE FIX

A recorder writes the transcript and triage files the facts out of it.

STAGE 2

Retrieved: did it reach the agent when it mattered?

None prevented, two detected, one survives

CL-2AS4SURVIVES

“Confident answer, no file opened.”

Nobody looked; the answer came from training. It appears constantly, and it is indistinguishable from a researched answer.

THE FIX

None complete. Ground every factual answer in a read – but a prior read cannot bind a natural-language claim, because there is no named file for the requirement to attach to.

CL-2BS3DETECTED

“The note exists and was never found.”

The search terms did not match the wording. It appears after every rename, and after every case where the writer and the searcher chose different words.

THE FIX

A naming changelog that resolves every retired name to its current one, in the retrieval path.

CL-2CS3DETECTED

“Cited it early, contradicted it late.”

Retrieved, then compacted away. It appears in long sessions at the point the context is compressed.

THE FIX

A post-compaction hook that re-reads the open files. This is the one row on the register where re-injection is enough to close – and only because the re-read itself produces an observable artefact.

STAGE 3

Trusted: is what came back actually true?

None prevented, one detected, two survive

CL-3AS3SURVIVES

“Quoted a vendor's framing as a finding.”

Someone's claim was read as established fact. It appears wherever marketing material and research sit in the same folder.

THE FIX

None complete. Every claim carries who said it and when, as a convention inside the note. Nothing enforces the attribution.

CL-3BS4SURVIVES

“Nothing covers this" – one search settles it.”

An absence was reported as a finding. It appears in reviews and research passes, and it is the most damaging shape on this register: a false absence does not read like an error, it reads like a discovery, so it survives review and gets acted on.

THE FIX

None complete. Prove a negative before relaying it – name where you looked, in the output. A convention, and nothing runs it.

CL-3CS3DETECTED

“The register row was right, the file was wrong.”

The index was checked instead of the artefact. It appears whenever a manifest, register or summary table is trusted as evidence about the thing it describes.

THE FIX

CI diffs the index against the files. Verify the work, not the thing describing it.

STAGE 4

Used: did it change what was produced?

None prevented, three detected, two survive

CL-4AS3DETECTED

“Opened it, then wrote something else.”

The right file was read and then ignored. It appears whenever the retrieved fact is less convenient than the conventional one.

THE FIX

A citation check on every generated document.

CL-4BS3DETECTED

“Used the standard figure, not yours.”

A trained default overrode the retrieved fact. It appears wherever your value differs from the common one.

THE FIX

A banned-value grep gate, run pre-commit. Name the specific wrong value to block.

CL-4CS4SURVIVES

“Plausible number, no source.”

A gap was filled by inference, not a question. It appears in any draft with a figure in it that nobody asked where it came from.

THE FIX

None complete. An unsourced-figure convention in the drafting process. Nothing detects a plausible number.

CL-4DS3DETECTED

“Applied one client's rule to another.”

Context from one project leaked into another. It appears wherever one agent works across several contexts.

THE FIX

Directory-scoped context files.

CL-4ES4SURVIVES

“The hedge was dropped on the way through.”

A qualified finding was used without its caveat. It appears at every hand-off, and each hop strips a little more.

THE FIX

None complete. Verification status travels with the claim, as a field rather than a sentence. Nothing enforces that it is carried.

STAGE 5

Current: is it still true today?

None prevented, two detected, one survives

CL-5AS3DETECTED

“Quoted a price you changed in March.”

True when it was written, not true now. It appears the first time a fact with a shelf life is quoted after its shelf life.

THE FIX

A schema requiring an effective date and a review date. Closes completely, and it is the cheapest close on the register.

CL-5BS3SURVIVES

“The vault says one thing, the system says another.”

The copy drifted from the live source. It appears wherever a note mirrors a system of record.

THE FIX

None complete. A live connector exists and is available – and availability does not force the agent to use its result over the copy it already has. This is the only row on this register with any built mechanism behind it, and it still survives.

CL-5CS2DETECTED

“Retrieval keeps returning the archive.”

A superseded document still surfaces first. It appears as soon as anything is archived in place.

THE FIX

Exclude the archive folder from the retrieval path.

ASSURANCE

Checked: would you find out if it had been wrong?

None prevented, one detected, one survives. Not a sixth stage

CL-6AS4SURVIVES

“Reads perfectly, is factually wrong.”

The wrong fact is invisible in the output. It appears in the outputs you are most pleased with.

THE FIX

None complete. A schema can find facts with no check attached, which is a proxy. Nothing finds a fact that is wrong.

CL-6BS4DETECTED

“Cited a file that was never read.”

It reports a source it never opened. It appears in any output where citation is generated rather than recorded.

THE FIX

Diff cited files against the session record. This is where the context register and the truth register meet.

The fixes: dedupe view

Effective date and review date in a schema

Fails any fact with a shelf life that carries neither.

CL-5A

Rationale field required on decisions

Fails a record that says what was chosen and not why.

CL-1B

Path lint on filing

Refuses a file filed off the taxonomy, where retrieval will never look.

CL-1C

Naming changelog in the retrieval path

Resolves every retired name to its current one, so notes written before a rename stay findable.

CL-2B

Curated note names its raw source

Keeps the raw beside the distillation, so a summary can be checked back.

CL-1E

Conversation archiving with a stop hook

Gets the thinking out of the thread and onto disk before the session ends.

CL-1A

Recorder plus triage

Turns spoken facts into filed ones.

CL-1F

Post-compaction re-read hook

Re-reads the open files after compaction. The one row where re-injection closes, because the re-read is observable.

CL-2C

Index-to-artefact diff in CI

Verifies the work rather than the thing describing it.

CL-3C

Citation check on generated documents

Catches a file that was read and then ignored.

CL-4A

Banned-value grep gate

Blocks the specific conventional value you do not want.

CL-4B

Directory-scoped context files

Stops one project's context reaching another.

CL-4D

Archive excluded from retrieval

Stops superseded documents surfacing first.

CL-5C

Cited-files diff against the session record

Catches a source cited but never opened.

CL-6B

Conventions nothing enforces

Name the source with the claim · show the search before reporting an absence · give every figure a provenance · carry the caveat with the finding · say which note supersedes which.

CL-1D · CL-3A · CL-3B · CL-4C · CL-4E

Things with no mechanism at all

An enforced read before a natural-language claim · a live source the agent must prefer over its local copy · a check that fires on a fact that is simply wrong.

CL-2A · CL-5B · CL-6A

GROUNDING

Grounding, per the project's claim discipline: these counts and classes come from one coding-agent harness and one production codebase, assessed row by row. The seven dated instances come from this project's own corrections register. This register is explicitly a design rather than an audit: 16 of its 17 tooled rows are not built in the codebase it was derived from. It is not a universal benchmark.

› Back to the first register: can you trust what your agent says about its work?