reading
The reader's walk over paths: the same narrowing, with no budget on it.
The budgets are on the writer for one stated reason — this walk runs inside flush and compaction, and a document that made it expensive would make the engine's background maintenance expensive. A recheck or a scan is neither: it happens because a caller asked a question, on the caller's own thread, about documents the caller is already paying to read. CatalogPath.forEachNodeIn is the same argument reached earlier and independently.
This is what makes the budget cost a scan instead of a document. A segment whose build truncated is not covered, so it is scanned — and a scan that truncated at the same element would answer exactly as short as the index it replaced, which is no fix at all. The pair is the mechanism: bounded where an index is written, complete where an answer is decided.
It does not weaken the recheck runs the same walk that built the index. Where an index answers, its segment is covered, and a covered segment is by construction one whose build did not truncate — so on every document a recheck sees, the two walks visit the same children. The widening is only ever reached where no index claims anything.
No IndexOptions is asked for because none is used: this walk reads maxDepth and maxChildren and nothing else, and it wants neither. Depth stays bounded by the longest path — a candidate is dropped once it has no step left, so nothing descends past the deepest one — which is why removing the ceiling cannot deepen the recursion.