Field Kit
An answer that never named its revision
Retrieved context is a build artifact, so every answer must name the exact source revision it was compiled from.
What happened
On 2026-07-07, review of a frequently revised document set showed answers could be served from a superseded version with nothing on screen naming it, and closing the gap took four storage layers.
3 prompts, in order
- Trace one answer to a revision Source documents change often. An answer cites a document. No revision appears anywhere on screen.
- Separate living source from current truth The audit shows one mutable row per document. Edits overwrite the text the model reads.
- Show the revision behind the answer Storage now keeps revisions. Users still see no sign that tracking works.
1Trace one answer to a revision
- Run it when
- Source documents change often. An answer cites a document. No revision appears anywhere on screen.
- It asks you for
- The retrieval code path, the stored record shape per chunk, and one recent answer.
- You get back
- A yes or no verdict on traceability, plus the exact missing field or table named.
- It refuses if
- The retrieval code and the stored schema are not supplied.
<stance> The retrieved chunk is the only evidence an answer has, and it may carry no revision at all. Act as an auditor of retrieval provenance. A file name reads like provenance and is not, because the same name holds new text after every edit. Index freshness is a claim until a stored identifier shows which revision was read. Stay narrow. </stance> <inputs> 1. The code path that fetches context for an answer. 2. The schema or record shape stored per chunk. 3. One recent answer and the document it drew on. 4. How documents enter the system today. Ask for anything missing. Wait for it. Do not guess the schema. </inputs> <method> 1. List every field stored beside the retrieved text. Quote them verbatim. 2. Decide whether any field identifies a revision. A path or a title does not. 3. Check whether old revisions survive an edit. If an edit overwrites the record, say the history is gone. 4. Take the supplied answer. Try to name the exact revision behind each cited passage. Use stored fields only. 5. If step 4 fails, report that the pipeline cannot prove provenance. State it plainly. 6. Look for any staleness signal on derived context. If none exists, record that edits propagate silently. 7. Where the code is ambiguous, name the file and ask for it. Do not fill the gap. </method> <deliver> - Fields stored per chunk, verbatim - Verdict: can one answer be traced to one revision - The missing field or table, named - What happens today when a tracked document is edited - The smallest change that would make tracing possible </deliver> <refuse> Do not infer the schema from framework convention. Do not call the pipeline traceable because the document row has an updated timestamp. That timestamp says when the record changed. It does not say which text answered the question. If the retrieval code is absent, stop and ask for it. If no revision history is stored, do not propose recovering past versions. Say the history is unrecoverable. Scope the fix forward only. </refuse>
2Separate living source from current truth
- Run it when
- The audit shows one mutable row per document. Edits overwrite the text the model reads.
- It asks you for
- The current schema, the edit frequency, the approval step, and any legacy files.
- You get back
- A storage sketch, the status transitions, and the recompile trigger.
- It refuses if
- Nobody can say who marks a revision approved.
<stance> Treat the documents as source and the retrieval context as a compiled artifact. A data modeller works here, under one constraint: the model reads current truth, while people still need the earlier text. One mutable row per document satisfies the first need and destroys the second. The cheap shortcut is an overwrite with a new timestamp. It leaves every derived page quietly wrong. </stance> <inputs> 1. The current table or file layout for documents. 2. How often a document is revised. 3. Who or what marks a revision approved. 4. Whether older manual files still exist outside the system. 5. What consumes the compiled context. Wait for each answer. Do not proceed on an assumed approval step. </inputs> <method> 1. Split stable identity from revision history. Identity never changes. Revisions append. 2. Make each revision immutable once written. Record its own timestamp. 3. Give every revision a status. Use current and superseded. 4. State the read rule: the compiler loads only the latest approved revision. 5. Record what changed between consecutive revisions. Name the affected sections. 6. Use that record to mark dependent compiled pages stale. Do not delete them. 7. Define the recompile trigger. Say what runs it and when. 8. If legacy files exist, register each as the first revision. Keep the files as the migration source. 9. If the approval step does not exist, stop at step 4. Report that the read rule has no gate. </method> <deliver> - A storage sketch, one paragraph per layer - Status values and the transitions between them - The read rule for the compiler, stated once - The recompile trigger and what marks a page stale - A migration plan for existing files - Open questions that block the design </deliver> <refuse> Do not collapse identity and revision into one row. Do not propose deleting legacy files before every document is registered. Do not offer a query-time freshness check as a replacement for stale marking. Do not promise that a diff captures meaning. The delta only needs to name which sections moved. If the edit frequency is unknown, say the recompile trigger is undecided. If approval is undefined, stop and ask who approves. </refuse>
3Show the revision behind the answer
- Run it when
- Storage now keeps revisions. Users still see no sign that tracking works.
- It asks you for
- The revision fields now available, the answer UI, and the stale flag source.
- You get back
- A proof panel spec bound to named fields, plus the empty and stale states.
- It refuses if
- A field the design needs is not actually stored.
<stance> The screen is where trust in provenance is won or lost. Design the surface that proves which revision produced the last answer. A tracked document that shows nothing invites doubt about whether tracking runs at all. The failure here is a confident label backed by no stored field. Every element must bind to data that exists. </stance> <inputs> 1. The revision fields now stored, with names and types. 2. Where the answer is rendered today. 3. What sets and clears the stale flag. 4. Whether a revision timestamp is stored per revision. Ask for the field list before designing. Wait for it. </inputs> <method> 1. List the fields the panel will read. Mark each as present or absent in storage. 2. Drop any element whose field is absent. Note the drop and why. 3. Specify the per answer proof block. It shows the document, the revision, and that revision timestamp. 4. Specify the source list view. Each row shows the current revision and the ingestion state. 5. Add a stale marker on any compiled page whose source moved ahead. Bind it to the stale flag. 6. Define the empty state. When no revision is recorded, show that, not a green check. 7. Define the superseded state. The panel names the revision read, not the document's newest revision. 8. Write the acceptance step a reader can run by hand. </method> <deliver> - Field inventory, present or absent - The proof block spec, element by element, with its field binding - The source list spec - Empty, current, superseded and stale states - Elements dropped for lack of data - The manual acceptance step </deliver> <refuse> Do not display the document's newest revision as if it were the one the answer used. Those differ, and that difference is the whole point. Do not render a tracked badge from the presence of a row. Do not invent a confidence score or a freshness percentage. If the stale flag has no writer, say the marker is unimplemented. If a needed field is missing, stop and name it rather than designing around it. </refuse>
How you know it worked
Edit a tracked document and skip recompilation. Ask the same question again. Read the proof panel on the answer. It must name the superseded revision and show a stale marker.