“Agent starts blind to prior work.”
It redoes finished work, or reverses last session's decision. It appears at the start of any session that follows another.
Every way your agent fails, and what catches it.
Is the record trustworthy? The Provenance register names the 22 ways the record of a piece of work turns out not to support the question you are asking of it.
ON THIS PAGE
01 The short answer02 What this register does03 A worked example04 What to install05 Every row on the register06 The fixesAT A GLANCE
22
NAMED FAILURE MODES
3
PREVENTED
14
DETECTED EVERY TIME
5
SURVIVE EVERYTHING
ONLY TWO CAN BE CLOSED WHILE THE WORK IS HAPPENING
SEVERITY
8 × S4 · 8 × S3 · 5 × S2 · 1 × S1
THE SHORT ANSWER
Because for agent work the record is the only remaining instance of the reasoning - there is no person to ask afterwards. Three of the 22 can be made impossible, fourteen can be caught every time, and five cannot be closed by anything available. Only two can be closed while the work is still happening; every other control reports on a record that is already wrong.
Six weeks from now somebody asks why the code does this. Can the record answer?
For human work it usually can, and not because the documentation was good. A person carries context between days and can reconstruct intent months later from a fragment – a half-remembered conversation or a name on a ticket. And you can walk over and ask them. The written record is a convenience.
An agent's memory of its own work ends when the session does. Whatever was not written down did not merely go unrecorded, it ceased to exist the moment the context closed. And you cannot ask, because asking produces a fluent, confident account with nothing behind it – the same sentence whether the work happened that way or not.
So the record is not documentation of the work. For agent work the record is the only remaining instance of the reasoning, and there is no testimony to fall back on when it turns out to be thin.
That changes when the record has to be made. You are not asking the agent for better notes at the end. You are making the record fall out of the work while it happens, because nothing reconstructs it afterwards and there is nobody left to ask.
The provenance register names the 22 ways the record of a piece of work turns out not to support that question. Three can be made impossible. Fourteen can be caught every time. Five cannot be closed by anything available. The register carries 12 evidenced rows and 10 candidates; the hub's headline counts count evidenced rows only.
The best way to build controls is by deciding when each control acts: only two of the 22 can be closed while the work is still happening. Every other control tells you about a record that is already wrong.
The register produces one working rule: make the record a repo artefact, so it moves in the same commit as the change and can be read at the version the work was done.
This is a technical page listing every row in the register and what it costs, what closes it, and where. It sits under the hub. Its closest neighbour is can you believe your agent?, the truth register, and the two are not the same question. An agent can be perfectly honest and leave no usable trace.
Many of the controls on this page are standard software engineering – commit history, tickets, audit logs – and experienced engineers already run some of them.
What the register adds is the failure behind each control: which failures are prevented, which are only detected, and which ones nothing closes. This shows where your remaining gaps are.
THE DEFINING FINDING
Only two of the 22 can be closed while the work is still happening. Every other control tells you about a record that is already wrong.
Is the record of what was done trustworthy? The unit this register tests is a unit of work:
Each one leaves a trail (or fails to). The register grades each failure by what it costs, by how quietly it fails, and by where the only available control sits – which turns out to matter more here than on any other register.
The consequence of that is where this register's controls have to sit. If the record is the only remaining instance of the reasoning, then a control that inspects the record after the fact is inspecting the only copy, with nothing to check it against.
A WORKED EXAMPLE / PL-3A
Here is the row this page is built around, with two separate dated incidents behind it, from our own tooling.
The first: a canon checker ran on every register in the framework and passed all six. Three defects were standing at the time, and it had been passing for as long as they had. It validated no status field and no trigger cadence, so the things that were wrong were simply outside what it looked at. A clean run and a correct system produced the same output.
The second: a gate was written, validated and wired into the register that tracks gates. Both conditions the framework required were met – the file existed, the validation reference was recorded. Then somebody checked what actually called it. Nothing did. Not CI, not a git hook, not a package script. Its only references anywhere were inside documents describing that someone should run it. The framework's own canon checker had the identical defect at the same moment.
That is PL-3E, "the gate fails open and says nothing", and it is Class B – detected, and only from outside. Note where the control has to live: the harness gate cannot close this row, because the harness gate is the thing that failed. A dead sensor and a passing check are indistinguishable from inside. Only a control plane that asserts the gate ran can tell them apart.
TWO DECISIONS REACHED NO LOG / RECONSTRUCTED TWO DAYS LATER
Two properties define this register.
The first is a distinction. Provenance is not the truth register. An agent can be scrupulously honest and leave no usable trace. It can also leave an immaculate, complete, well-structured trace of work it misreported. Those are different failures with different controls, and a page that treats them as one will prescribe the wrong fix for both. Truth asks whether the claim about the work was true. Provenance asks whether you can reconstruct what happened, whatever anybody claimed.
The second is a contradiction. Three positions can hold a provenance control, and they trade off against each other in a way that has no clean answer.
The harness gate acts while the work is being done – hooks and blocking conditions inside the agent's own runtime. It is the only position that can refuse before the record is wrong. Everything after it is describing something that already happened. And it is the thing being checked: it cannot catch its own absence, and when it breaks it usually breaks silently open.
The repo artefact closes at the commit – tickets, session records and decision logs moving in the same commit as the change. Portable, diffable, readable at the version the work was done, and near-zero exit cost. Its weakness is that a file can be complete and say nothing; structure is not substance.
The control-plane check runs on the commit, external to both the agent and the tracker. It is the only position that can assert another position actually ran. It also runs late, telling you the record is missing after the work is finished.
So the position that can act in time cannot verify itself, and the position that can verify it cannot act in time. The practical consequence is that you need at least two of the three positions covered, not the best one.
Severity here is cost multiplied by how quietly it fails. Eight of the 22 rows are S4 and exactly one is S1 – a record that is invisible to anyone without a repository clone, which is at least loudly invisible.
The provenance register lists 22 failures and grades them against a base install: an agent, a repository, a CI pipeline, and a tracker somewhere. It names the strongest control available against each and, unusually, which of three positions that control can occupy. 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 unit of work – how it is oriented, claimed, recorded, linked, landed and attributed – and asking at each point what would make the record unusable later. 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.
Nine of the 22 are recorded here with dates. Thirteen are not. The count is high for one reason: provenance failures happen to the people building the framework, in the framework's own tooling, and get caught by the framework's own checks. Two come from checkers that passed while defects stood. One comes from a push that a hook refused while the session reported the work as landed. One from a tool rebuilt from scratch because the existing one was never read. One from two branches appending to the same log and merging cleanly. Four are July 2026 incidents mapped retrospectively: a security pass that under-reported its own changes, a squash merge that broke an ancestry check, and a fan-out that stranded five agents' finished work.
Rows are grouped by which part of the record is failing.
Every row carries one of three classes. The class describes how complete the available remedy is, not how serious the failure is, and it is a separate axis from the three positions above.
So the score is three prevented, 14 detected, five surviving.
Now the cross-cut, which on this register is between class and position. Only two rows can be closed at the moment of work. Nine close at the commit. Six close only after the merge. Five close nowhere. Read left to right, that is a measure of how much has already happened by the time anything notices.
Two consequences follow, and they point in opposite directions from most advice.
The repo-artefact block is where the value is. Nine of 22 rows – the largest single block, the cheapest of the three positions to adopt, and it needs no new software at all. Tickets, session records and decision logs as files, moving in the same commit as the change.
And the group with the most rows nothing closes is the one about multiple agents. Three of the six rows on concurrency and attribution have no complete remedy. If your answer to throughput is more agents in parallel, this is the register that prices it.
Vocabulary: this register reads its three classes as prevented, detected and survives. Five of the six 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 one exception and the three things still unreconciled across the framework.
Interviews, registers and essays. Free.
Start from a base install and add in this sequence. Conventions first, then CI, then the things nothing closes.
Run the free trust-check tool to find out which of these you already have. Or start without it: move your session records and decision log into the repository this week, and commit them with the change. It is the cheapest item here and it closes the largest block.
REFERENCE
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 rows were derived. If that is your stack, everything here is directly installable as written.
If your work sits in Microsoft 365, Google Workspace, Confluence or Notion, the failure is identical – a record that cannot support what actually happened is the same failure anywhere – but the mechanism is not. A tenant audit log stands in for the session record, document version history for the commit trail, a work-item link for the three-way match. A few rows are native to a repository and have no clean equivalent: the record moving in the same commit as the change, and the byte-diff of a stated board state against the code, are the clearest of them.
Those mappings are not published here. Enterprise mapping is available on request.
Every row in every register in this framework is described the same five ways. This register adds the position.
Nine rows on this register carry a dated first-party incident, told in full above and in the row list below. The other 13 do not, or not that we know of – the highest first-party count of any register except Truth, for the reason given under "How this register works".
Nothing on this page says whether a control is switched on in your setup. A position that can close a row is not a control that is running.
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.
GROUNDING
Grounding, per the project's claim discipline: these counts, classes and positions come from one coding-agent harness and one production codebase, assessed row by row. The five dated instances come from this project's own corrections register, and four of the five are failures in the framework's own record-keeping. It is not a universal benchmark.