Rendered from docs/decisions/0076-a-probe-budget-prices-a-run-identity-fixed-before-the-run-and-a-committed-transcript-and-a-sweep-has-neither.md in the Headwater corpus. Every document on this half of the site is typed by the taxonomy the descriptor names: corpus.json.

A probe budget prices a run identity fixed before the run, and a committed transcript, and a sweep has neither

Context

#87 asks one question of spec 5. Does a declared budget price every mechanism that reaches a model? Or does it price only a run whose identity is fixed before it starts and that commits a transcript? #165 (closed) shipped the two tiers a budget prices today, regression and campaign, declared in .headwater/probe.yml. headwater probe plan fixes six members of a run identity before the run starts. They are the lock, the tree, the selection, the read set, the seed, and the harness version. It projects the session count against the tier's ceiling, and it refuses a run above it. The model, its served version, and the time are not among the six. They belong to the run itself, and the recorder writes them into the transcript after the fact rather than a plan pinning them in advance.

The coherence sweep also reaches a model, and it shipped after the budget mechanism did. headwater sweep plan writes a briefing, an agent reads the corpus and writes a return file, and headwater sweep report reads that file back. One step of that round trip fixes one member of a run identity: the taxonomy lock. A return file naming a different lock is refused whole. A sweep of one taxonomy read back against a second is a report about neither. No step fixes any of the other five members, and no step commits a transcript. So the engine can neither project a sweep's cost before it runs, nor account for one after. Nothing in spec 5 or spec 4 said whether that gap was a defect or the design.

#515 (closed) ruled the retention window for a probe transcript. It left the same question open for a sweep's return file. Whichever way this record rules, that file's retention follows from it.

Decision

A budget prices a run whose identity is fixed before it starts, and that commits a transcript. It does not price every mechanism that happens to reach a model. "The engine invokes it" is not the basis. A probe's own recorder is outside this repository too, and the budget still prices the probe run around it. The basis is what the run leaves behind: a run identity fixed before anything is called, and a transcript this corpus commits and can reread. A model is not a third leg of that basis. headwater probe plan never pins one. The model, its served version, and the time belong to the run. The recorder writes them into the transcript rather than a plan fixing them in advance.

A probe run has both. headwater probe plan fixes six run-identity members before the run: the lock, the tree, the selection, the read set, the seed, and the harness version. A sweep has neither. headwater sweep plan fixes one of those six, the taxonomy lock, and none of the other five. Spec 4 already routes the sweep's model call through whatever harness the calling agent runs in. So no step of the round trip pins one, and no step commits a transcript. A sweep is outside the budget mechanism by construction, and .headwater/probe.yml declares no tier for it. headwater sweep plan takes no budget parameter and refuses no run on cost.

.headwater/probe.yml stays where it is, outside the corpus root and outside the taxonomy. This record is where a reader of spec 5 now finds out why. A budget is a policy of the repository that runs the probes, and not a fact about any document. No taxonomy rule reads it, no language regime binds it, and no shelf classifies it. #74 applied the same test to the capture-cost store and answered it the same way. The file sits beside the lock and beside the cache for that reason, and it does not move.

Consequences

Spec 5 states the basis beside the paragraph that already describes headwater probe plan. That paragraph projects a session count against a tier's budget. The new text names the sweep as outside, and it carries the reasoning for where .headwater/probe.yml lives.

Spec 4's sweep section states plainly that no budget prices a sweep. It also states that a sweep's return file is retained by nothing. The retention question #515 held open for this file closes the same way this record rules. A file that no budget prices is a file no evidence obligation reaches.

engine/crates/probe/src/budget.rs's test module carries a regression case. A sweep: tier in the declared file is refused as Unreadable::UnknownTier, the same as any other undeclared tier name. The case passes today with no code change. It exists so that a later change cannot add a sweep tier without reopening this ruling.

The module comment of engine/crates/probe/src/budget.rs and the header of .headwater/probe.yml both cite [#87]. Each names it as the owner of "the two tiers and their cadence" and of "it may move this file." The first clause is already stale, since the two tiers landed in #165. Both comments now cite this record instead of the closed issue. The second clause is corrected too: this record is the one that rules the file stays.

HW-OBL-0092 named three open threads: the route from a probe to a tier, the retention policy for transcripts, and who pays for a campaign. Two are now answered by work that landed after that record's last verification. The route closed in #165. Retention closed in #515, documented at spec 15. The campaign question was already answered by the record's own Discharge section, which pointed to Q11. That record closes in the same change as this one.