Following up on my last post: I still don’t see another state that has to cross the recursive verifier boundary itself. I do see one remaining binding one layer outside it.
For mode 0, validation explicitly requires that deps equal the sorted, deduplicated union of the dependencies declared by the wrapper’s transactions.
For mode 1, the listed checks require recursive_stark.deps_hash == hash(deps) and a valid recursive proof, but do not explicitly require recomputing deps from transactions. That leaves a simple falsifier.
Suppose dependencies(T) = {A} and a mode-1 wrapper contains transactions = [T], deps = [B], and a valid recursive proof for {B}.
The proof can be valid and its deps_hash can match hash(deps), while the dependency actually required by T — A — was never proven.
So I think mode 1 needs the same explicit package binding as mode 0:
deps == deduplicate_and_sort(union(dependencies(tx) for tx in transactions))
and then:
recursive_stark.deps_hash == hash(deps)
The distinction is that a valid proof of dependency set D does not establish that D is authoritative for transaction package P unless D == dependencies(P).
This is separate from the earlier omission-accountability question. No outside admission set is needed here; the wrapper already declares the transaction set whose dependencies it claims to cover.
The same rule also makes discard precise: recursion may discard a dependency while constructing a successor aggregate, but the resulting package cannot retain a transaction that still requires that dependency.
For a wrapper containing only a previously broadcast transaction hash, the receiver also has to resolve that transaction before deriving the package dependency set. The recursive proof cannot establish its own scope; the transaction set defines that scope.
I’d add one negative test: keep deps and the valid recursive proof fixed, replace the wrapper’s transaction set with one whose canonical dependency set differs, and require rejection.
So the additional closure condition is:
valid proof of D != proof that D is authoritative for P
until:
D == dependencies(P).
If the intended interpretation is that the wrapper-level definition of deps already makes this equality normative for mode 1, then I think the fix is simply to make that recomputation explicit in the mode-1 validation rules and test cases. The same explicit check would be useful for FOCIL as well.