the reservation bar and epistemic debt
2026-08-24 · settled · DECISIONS.md line 2796
Two defects in the workspace's epistemic machinery, both in the rules rather than in anyone's effort. Awaiting the author held thirty-seven entries against its own "should normally be short", because AGENTS.md §10 governed how a reserved item is listed and nothing governed what may be reserved; and the queue also held decisions taken in conversation that never landed. Meanwhile epistemic debt was accumulating in three shapes: free to pay and unpaid — kernel-checked theorems unregistered, a handoff note describing a superseded theorem; untracked — rounds consuming earlier ci-only results as hypotheses with nothing recording the chain; and compounding — residual-blocker lists carried forward inside report prose and growing round over round.
Ten rules, taken together. The rationale lives here and the rules live where a reader would look for them.
The reservation bar. An entry enters the queue only when the round is genuinely low-confidence in its own recommendation and can name what the maintainer has that it lacks: taste, an idea nobody has yet, or external knowledge — what a collaborator will accept, what a paper needs, where the program is going. The entry says in one line what the decision turns on. An entry that cannot say it is a recommendation the round declined to adopt. The retired field is instructive: every rejected entry carried cost of deciding now: low, which was true of all of them and therefore selected nothing. Cheapness is a symptom, not a criterion.
Recommend and adopt. A round holding a recommendation lands it, marked agent-decided and reversible, naming the rejected alternative. The asymmetry that makes this safe is no negative ontologies: only the live entry survives a re-ruling, so reversal costs the maintainer one entry and adoption costs nothing if it is wrong. Deferring, by contrast, costs every later round the same reconstruction.
Merge is never a decision. It is a fact about a pull request, and the existing convention — auto-merge on unless a dispatch says otherwise — already decides it. A merge in the queue is a queue entry that no reading can retire.
Naming ships. Rounds choose names, mark them provisional and list them. The queue takes a naming item only when the name is about to propagate into Lean identifiers or wiki vocabulary and the round genuinely cannot choose between two candidates. Naming authority is not weakened; it is exercised as a periodic batched naming audit instead of one entry per round, because a name-by-name queue converts a single afternoon of judgment into thirty interruptions.
Lean headlines register at merge. A round shipping a Lean theorem it presents as its result files the registry entry in the same pull request, and the merge is the registration. "Whether X is worth registering" was never a decision: the theorem is kernel-checked either way, and leaving it unregistered means the repository holds a result it cannot say it holds. What is worth proving stays reserved, and is exercised where it already was — in the priority items a dispatch grants scope to file.
Chat rulings land or are not in force. A ruling made in conversation binds nothing until it is a dated entry, and the next round dispatched from that conversation lands it as its first commit. Two rulings had been in force in the maintainer's head and nowhere else for a week, while the queue still carried the questions they answered.
**test-supported is the ceiling for finite-model work.** A finite Python model carries its round verdict and that class — or witness-checked or enumeration-verified where the house harness actually adjudicates the instance or generates the domain — and that is the class vocabulary working rather than a defect for a bigger harness to repair. Growing the harness to raise a finite model's class would move the judge inside the thing being judged. A finite result becomes load-bearing by Lean port, and the dependency view below is how ports get prioritized. New property forms stay permitted where a round needs one.
Closed means a statement of record. A component is closed only when a Lean declaration or a checker invocation stands for it and its reopening condition, where one exists, is a checkable event. Otherwise it is open or a living note. "Closed provisionally" is retired: it reads as closed in every summary and as open in every audit, which is the worst of both.
Consumption is recorded. Every round record carries depends_on — the rounds whose results it takes as hypotheses, not the ones it cites — and the emitter derives from it, per round, the transitive set of ci-only rounds that round rests on. This makes the debt countable. It pays none of it.
Contained friction is fixed by the round that hits it. Non-retroactive, one gate or one document, with its own null-input case: that fix belongs to the round that hit it, recorded as agent-decided. Only friction whose fix would change a spec-layer rule waits, and then it waits under the bar above. Reporting-without- fixing was right when the concern was rounds redesigning the workspace around themselves; the bar now catches that case directly, and the old rule was converting ten-line repairs into permanent queue entries.
What is not decided here. Nothing about the research. The bar changes who decides, not what is true, and every entry the triage below adopts remains reversible by a later ruling.
Touches
Nothing named.
Nodes pointing at it
None.