Upstream LEZ merged the parallel Message vectors into action structs
(f16c3bd1e, 75326d031, e13b4cb23):
* `Message` now carries `public_actions: Vec<PublicActionWithID>`
(account id paired with its post-state) and `private_actions:
Vec<PrivateAction>` (nullifier + root + commitment + encrypted post
state bundled per action) instead of six parallel vectors.
* `PrivacyPreservingCircuitOutput` mirrors the same bundling
(`public_actions: Vec<PublicAction>` with pre/post halves).
* `Message::try_from_circuit_output(ids, nonces, output)` became the
infallible `Message::from_circuit_output(nonces, output)`.
* `EncryptionScheme::encrypt` keys the note on the nullifier and
dropped the output-index argument.
* `V03State::default()` seeds the commitment set with the protocol's
dummy commitment, so `root_history` contains the live root from
genesis — a nullifier bound to the live root is valid on the first
transaction (previously the history started empty).
Harness changes:
* `synthesize_passing_proof` reconstructs the journal from bundled
`PublicAction`s, mirroring the validator byte-for-byte.
* `arb_privacy_preserving_tx` generates 1..=3 deduplicated
`PrivateAction`s (the length-mismatch and empty-commitments shapes
are unrepresentable under the paired layout and were dropped) and
pairs every public account id with its post-state.
* `arb_conflicting_nullifier_pair` builds the shared-nullifier pair as
two private actions with distinct commitments.
* Encoding/witness targets build messages via the action structs; the
circuit-output-mapping invariant asserts the pre-id/post pairing.
* Generator-contract and proof-synthesis tests updated accordingly
(48/48 pass, with and without RISC0_DEV_MODE).
Bump the pinned LEZ SHA to d6e4ae69 and refresh both lockfiles.
Fixes the scheduled lez-compat failure (run 30977103292).