Skip to content

fix: use Int64Value instead of Uint32Value for 64-bit map sizes#22400

Merged
PhilWindle merged 3 commits intomerge-train/spartanfrom
phil/a-849-uint32value-truncates-64-bit-map-sizes
Apr 8, 2026
Merged

fix: use Int64Value instead of Uint32Value for 64-bit map sizes#22400
PhilWindle merged 3 commits intomerge-train/spartanfrom
phil/a-849-uint32value-truncates-64-bit-map-sizes

Conversation

@PhilWindle
Copy link
Copy Markdown
Collaborator

Summary

  • Replace Uint32Value() with Int64Value() when reading LMDB map sizes from JS
  • Affects lmdb_store_wrapper.cpp and world_state.cpp — 3 call sites
  • Uint32Value() silently truncates values above 4 GiB; Int64Value() is the widest integer accessor available in N-API

Fixes A-849

@PhilWindle PhilWindle force-pushed the phil/a-849-uint32value-truncates-64-bit-map-sizes branch 2 times, most recently from 8eefaae to 8b91c28 Compare April 8, 2026 11:53
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@PhilWindle PhilWindle force-pushed the phil/a-849-uint32value-truncates-64-bit-map-sizes branch from 8b91c28 to 0aaf649 Compare April 8, 2026 11:55
@PhilWindle PhilWindle marked this pull request as ready for review April 8, 2026 11:59
@PhilWindle PhilWindle enabled auto-merge (squash) April 8, 2026 14:42
@PhilWindle PhilWindle merged commit 5e8f0f6 into merge-train/spartan Apr 8, 2026
12 checks passed
@PhilWindle PhilWindle deleted the phil/a-849-uint32value-truncates-64-bit-map-sizes branch April 8, 2026 15:00
github-merge-queue bot pushed a commit that referenced this pull request Apr 9, 2026
BEGIN_COMMIT_OVERRIDE
chore: fix mempool limit test (#22332)
fix(bot): bot fee juice funding (#21949)
fix(foundation): flush current batch on BatchQueue.stop() (#22341)
chore: (A-750) read JSON body then parse to avoid double stream
consumption on error message (#22247)
chore: bump log level in stg-public (#22354)
chore: fix main.tf syntax (#22356)
chore: wire up spartan checks to make (#22358)
fix(p2p): reduce flakiness in proposal tx collector benchmark (#22240)
fix: disable sponsored fpc and test accounts for devnet (#22331)
chore: add v4-devnet-3 to tf network ingress (#22327)
chore: remove unused env var (#22365)
chore: add pdb (#22364)
chore: dispatch CB on failed deployments (#22367)
chore: (A-749) single character url join (#22269)
feat: support different docker image for HA validator nodes (#22371)
chore: fix the daily healthchecks (#22373)
chore: remove v4-devnet-2 references (#22372)
fix: rename #team-alpha → #e-team-alpha slack channel (#22374)
chore(pipeline): timetable adjustments under pipelining (#21076)
feat(pipeline): handle pipeline prunes (#21250)
fix: handle error types serialization errors (#22379)
feat(spartan): configurable HA validator replica count (#22384)
fix(e2e): increase prune timeout in epochs_mbps_pipeline test (#22392)
fix(epoch-cache): use TTL-based caching with finalization tracking and
correct lag (#22204)
chore: deflake e2e ha sync test (#22403)
chore(ci): skip prunes-uncheckpointed test in epochs_mbps_pipeline
(#22401)
refactor(slasher): remove empire slasher model (#21830)
fix: use strict equality in world-state ops queue (#22398)
fix: remove unused BLOCK reqresp sub-protocol (#22407)
refactor(sequencer): sign last block before archiver sync (#22117)
feat(world-state): add genesis timestamp support and GenesisData type
(#22359)
fix: use Int64Value instead of Uint32Value for 64-bit map sizes (#22400)
chore: Reduce logging verbosity (#22423)
fix(p2p): include values in tx validation error messages (#22422)
END_COMMIT_OVERRIDE
federicobarbacovi added a commit that referenced this pull request Apr 9, 2026
commit 4576993efe49404d2912bff9c9b94f963404232a
Merge: 2f77ec5dd4 3744482e4e
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Thu Apr 9 07:06:02 2026 +0000

    feat: merge-train/spartan (#22352)

    BEGIN_COMMIT_OVERRIDE
    chore: fix mempool limit test (#22332)
    fix(bot): bot fee juice funding (#21949)
    fix(foundation): flush current batch on BatchQueue.stop() (#22341)
    chore: (A-750) read JSON body then parse to avoid double stream
    consumption on error message (#22247)
    chore: bump log level in stg-public (#22354)
    chore: fix main.tf syntax (#22356)
    chore: wire up spartan checks to make (#22358)
    fix(p2p): reduce flakiness in proposal tx collector benchmark (#22240)
    fix: disable sponsored fpc and test accounts for devnet (#22331)
    chore: add v4-devnet-3 to tf network ingress (#22327)
    chore: remove unused env var (#22365)
    chore: add pdb (#22364)
    chore: dispatch CB on failed deployments (#22367)
    chore: (A-749) single character url join (#22269)
    feat: support different docker image for HA validator nodes (#22371)
    chore: fix the daily healthchecks (#22373)
    chore: remove v4-devnet-2 references (#22372)
    fix: rename #team-alpha → #e-team-alpha slack channel (#22374)
    chore(pipeline): timetable adjustments under pipelining (#21076)
    feat(pipeline): handle pipeline prunes (#21250)
    fix: handle error types serialization errors (#22379)
    feat(spartan): configurable HA validator replica count (#22384)
    fix(e2e): increase prune timeout in epochs_mbps_pipeline test (#22392)
    fix(epoch-cache): use TTL-based caching with finalization tracking and
    correct lag (#22204)
    chore: deflake e2e ha sync test (#22403)
    chore(ci): skip prunes-uncheckpointed test in epochs_mbps_pipeline
    (#22401)
    refactor(slasher): remove empire slasher model (#21830)
    fix: use strict equality in world-state ops queue (#22398)
    fix: remove unused BLOCK reqresp sub-protocol (#22407)
    refactor(sequencer): sign last block before archiver sync (#22117)
    feat(world-state): add genesis timestamp support and GenesisData type
    (#22359)
    fix: use Int64Value instead of Uint32Value for 64-bit map sizes (#22400)
    chore: Reduce logging verbosity (#22423)
    fix(p2p): include values in tx validation error messages (#22422)
    END_COMMIT_OVERRIDE

commit 2f77ec5dd4d68861c268ec5b87f8e2111bf1c13d
Merge: d7934b93bd e089081a9b
Author: federicobarbacovi <171914500+federicobarbacovi@users.noreply.github.com>
Date:   Thu Apr 9 06:53:03 2026 +0000

    feat: merge-train/barretenberg (#22363)

    BEGIN_COMMIT_OVERRIDE
    fix: addresses logic audit findings  (#22304)
    chore: fix asm_self_* field arithmetic signatures (#22353)
    fix: polynomials module audit response (#22361)
    chore: UB updates (#22308)
    fix: increase test timeout for heavy recursion tests in debug build
    (#22347)
    chore: origin tag updates (#22307)
    chore: ECCVM QoL — operator precedence fix, assert correctness,
    documentation (#22351)
    fix: minor bigfield fixes - take 2 (#22415)
    chore: decouple perm arg boundary from shiftability assumptions (#22396)
    END_COMMIT_OVERRIDE

commit 3744482e4e00aa907e2d913ea3617cfdfd888eca
Merge: 2105f38406 d7934b93bd
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 20:29:43 2026 +0000

    Merge branch 'next' into merge-train/spartan

commit e089081a9bbabe09727a21022dab7bd9e2f4c2d6
Merge: 517f44f97a d7934b93bd
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 20:29:34 2026 +0000

    Merge branch 'next' into merge-train/barretenberg

commit 2105f38406b8bcdd1facac3dba38ca184df56887
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Wed Apr 8 17:17:39 2026 -0300

    fix(p2p): include values in tx validation error messages (#22422)

    When a transaction fails validation (e.g. insufficient balance, gas
    limits out of bounds), the error returned to the client is a static
    string like "Insufficient fee payer balance" with no context. Users have
    to guess what went wrong. The validators already have the relevant
    values (balance, fee limit, gas limits) and log them server-side, but
    don't include them in the error reason returned to the client.

    Append contextual values to each error reason string in `GasTxValidator`
    and `GasLimitsValidator`. The base error constant is preserved as a
    prefix so existing substring-based assertions (e2e tests using
    `toThrow`) continue to work. Refactored `#shouldSkip` to
    `#getSkipReason` so the fee-per-gas skip path can also include values.

    - **p2p (gas_validator.ts)**: All five validation error paths now
    include values in the reason string: fee payer balance
    (`required`/`available`), gas limits (`required`/`got` or
    `limit`/`max`), and fee per gas (`maxFee`/`required`)
    - **p2p (gas_validator.test.ts)**: Updated test helpers and assertions
    to use substring matching (`toContain`/`stringContaining`) since error
    messages now have dynamic suffixes

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit 5f9e1db1e8879ce2b1991166b6264f9d4d80b9ea
Merge: 91295ec376 8727397949
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 20:12:59 2026 +0000

    Merge branch 'next' into merge-train/spartan

commit 517f44f97a6ed5f9cad56fe5068b20f4d9e3fbd9
Merge: 4fbef345b1 8727397949
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 20:12:49 2026 +0000

    Merge branch 'next' into merge-train/barretenberg

commit 91295ec376232f0a67c01ae02f9c00ce5ecefaa4
Author: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Date:   Wed Apr 8 20:45:21 2026 +0100

    chore: Reduce logging verbosity (#22423)

    PR to simply reduce an annoying logline to debug.

commit d7934b93bdb4ea5b0124f407874469c72a6102f3
Merge: 8727397949 53dd9bcade
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 19:29:35 2026 +0000

    feat: merge-train/fairies (#22390)

    BEGIN_COMMIT_OVERRIDE
    fix(pxe): support custom PrivateKernelProver and unify
    EmbeddedWalletOptions (#22348)
    fix: subfield note selectors (#22211)
    fix: pass additionalScopes to executeUtility (#22411)
    feat(e2e): support running tests against legacy noir contract artifacts
    (#22410)
    END_COMMIT_OVERRIDE

commit 87273979490b2e6817972631d77e4e82f58d147b
Merge: abdb834199 0335cfdd60
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 19:29:27 2026 +0000

    feat: merge-train/avm (#22418)

    BEGIN_COMMIT_OVERRIDE
    chore(avm)!: Apply standard multi-row recipe everywhere (#22279)
    END_COMMIT_OVERRIDE

commit 27bf3fb551f04057df1ef9c82da76cb8cac61c34
Merge: 5e8f0f6418 abdb834199
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 17:57:53 2026 +0000

    Merge branch 'next' into merge-train/spartan

commit 53dd9bcade8129ed5a7e822d9c270157bf62568e
Merge: 1d84e85a5c abdb834199
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 17:57:49 2026 +0000

    Merge branch 'next' into merge-train/fairies

commit 4fbef345b1f7e2f039175e1f74a68b1fd6d358f9
Merge: a6c119f89a abdb834199
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 17:57:41 2026 +0000

    Merge branch 'next' into merge-train/barretenberg

commit 0335cfdd6044f387d6503131fadd9a91c9e63f2c
Merge: c527917300 abdb834199
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 17:57:38 2026 +0000

    Merge branch 'next' into merge-train/avm

commit abdb834199d4f0aaeb859d755918544d13f64c9d
Merge: b68c85535e 4111e2357a
Author: josh crites <jc@joshcrites.com>
Date:   Wed Apr 8 17:21:31 2026 +0000

    fix(docs): update networks page for Alpha phase, fix contract addresses and unstaking delay (#22419)

    Updates contract addresses and unstaking documentation to reflect the
    current on-chain state.

    - Updated **Reward Booster** mainnet address (`0x7101a...` →
    `0x1cbb7...`)
    - Updated **Tally Slashing Proposer** mainnet address (`0x7a318...` →
    `0xa4a38...`)
    - Fixed **Slasher** testnet address — was incorrectly showing
    `0xf6D0D42...`, corrected to `0xCF750B7...`
    - Added **Honk Verifier** mainnet address (`0x70aed...`) — was
    previously N/A
    - Added **Slash Payload Cloneable** mainnet address (`0xAA432...`) — was
    previously N/A
    - Fixed trailing pipe formatting on Slash Payload Cloneable row

    - Replaced preprocessor conditional (`#if(testnet)/#else/#endif`) with a
    table showing delays for both networks
    - Added **governance withdrawal delay** info (~38 days mainnet, ~1.6
    days testnet) with formula explanation
    - Clarified distinction between staking exit delay and governance
    withdrawal delay

    This branch includes changes from `merge-train/avm` (#22394):
    - `barretenberg/cpp/pil/vm2/` — comment fixes in data_copy.pil and
    gas.pil
    - `yarn-project/` — `resumeSync` flag for `rollbackTo` to fix offchain
    payment flake (#22230)

commit 4111e2357afe99c9fd808e8c35c8dfd7a943d397
Author: Codespace <codespace@aztec.dev>
Date:   Wed Apr 8 13:02:09 2026 -0400

    fix(docs): update Reward Booster and Tally Slashing Proposer mainnet addresses

commit a94217e7cf17be0ffccc5666249da01f63fe0a0f
Merge: ea565cd8dd b68c85535e
Author: Codespace <codespace@aztec.dev>
Date:   Wed Apr 8 16:54:59 2026 +0000

    fix: resolve merge conflicts with next in networks.md

    Merge resolution strategy:
    - Reward Booster mainnet: took next's updated address
    - Slasher testnet: kept branch's address (next had duplicate of Rollup address)
    - Tally Slashing Proposer mainnet: took next's updated address
    - Honk Verifier mainnet: kept branch's addition (was N/A in next)
    - Slash Payload Cloneable mainnet: kept branch's addition (was N/A in next)
    - Execution Delay: took next's 7 days value

commit a6c119f89a45e0126be16c3e161f822d81449b6e
Author: sergei iakovenko <105737703+iakovenkos@users.noreply.github.com>
Date:   Wed Apr 8 18:36:19 2026 +0200

    chore: decouple perm arg boundary from shiftability assumptions (#22396)

    making `z_perm` boundary constraint less brittle, previously we implicitly used the fact that it's opened as a shifted poly in gemini implying `z_perm(0) = 0`. as a prerequisite for placing zk masking scalars at the top of the trace, we need to explicitly constrain `z_perm * Lagrange_first = 0`

commit 564da2b83372a35ebb0916cfa8769397b9020df8
Author: Suyash Bagad <suyash@aztecprotocol.com>
Date:   Wed Apr 8 18:26:50 2026 +0200

    fix: minor bigfield fixes - take 2 (#22415)

    List of fixes (none of them should change circuits):

    - Adds a missing reconstruction constraint in
    `decompose_non_native_field_double_width_limb` to ensure the
    reconstructed value matches the original input.
    - Asserts `r_lo` is nonzero in `validate_split_in_field_unsafe`, closing
    a soundness gap where a zero low limb could pass unchecked.
    - Removes unreachable dead code in the carry bit computation path.
    - Changes `batch_mul` default to `with_edgecases=true` to avoid
    incorrect results on edge-case inputs.
    - Adds boundary tests for the byte array constructor.

    resolves
    https://github.com/AztecProtocol/barretenberg-claude/issues/2433

commit ea565cd8ddd997a0e92d26484c96651654da8c26
Author: AztecBot <tech@aztec-labs.com>
Date:   Wed Apr 8 16:26:43 2026 +0000

    fix(docs): correct contract addresses, add HonkVerifier mainnet, fix execution delay and unstaking info

    - Reward Booster mainnet: 0x1cbb707... (verified via Rollup.getRewardConfig)
    - TallySlashingProposer mainnet: 0xa4a38fD0... (verified via Slasher.PROPOSER)
    - SlashPayloadCloneable mainnet: 0xAA43220b... (verified via TallySlashingProposer.SLASH_PAYLOAD_IMPLEMENTATION)
    - HonkVerifier mainnet: 0x70aedda4... (provided by Josh)
    - Slasher testnet: 0xCF750B72... (was showing Rollup address, verified via Rollup.getSlasher)
    - Execution Delay mainnet: 30 days (was 7 days, verified via Governance.getConfiguration)
    - Replace conditional unstaking delay with table showing both networks and governance withdrawal delay (~38 days)

commit a43f4056bc20c158ea706f97e3fe6d26badb32bd
Author: AztecBot <tech@aztec-labs.com>
Date:   Wed Apr 8 16:19:27 2026 +0000

    fix(docs): update mainnet addresses from Robert, add HonkVerifier, fix execution delay

    - Reward Booster mainnet: 0x1cbb707bd7b4fd2bced6d96d84372fb428e93d80 (verified via Rollup.getRewardConfig)
    - TallySlashingProposer mainnet: 0xa4a38fD0108C00983E75616b638Ff3321FD26958 (verified via Slasher.PROPOSER)
    - SlashPayloadCloneable mainnet: 0xAA43220b7eb7c8Ffe75bc9C483f3C07b0a55B445 (verified via TallySlashingProposer.SLASH_PAYLOAD_IMPLEMENTATION)
    - HonkVerifier mainnet: 0x70aedda427f26480d240bc0f4308cedec8d31348
    - Execution Delay mainnet: 30 days (was 7 days, verified via Governance.getConfiguration)
    - Add governance withdrawal delay (~38 days) to staking docs

commit 364646ea1ad987b2058316a3fbcc8cba39cd2da0
Author: AztecBot <tech@aztec-labs.com>
Date:   Wed Apr 8 15:27:15 2026 +0000

    fix(docs): align with Alpha phase, remove Devnet, fix addresses and unstaking delay

    - Rename Ignition → Alpha (Mainnet) throughout
    - Remove Devnet column from all tables (deprecated)
    - Update mainnet addresses to new Alpha deployment (Rollup, Inbox, Outbox, etc.)
    - Fix Slasher testnet address (was showing Rollup address)
    - Add Slash Payload Cloneable mainnet address (was N/A)
    - Update Sponsored FPC: now available on testnet
    - Remove Use Case Suitability section (apps can be developed)
    - Replace unstaking delay conditional with table showing both networks
    - Update descriptions and links to reflect Alpha phase

commit a564927857a9d75845a5bc839d1aa7909313b5bf
Author: AztecBot <tech@aztec-labs.com>
Date:   Wed Apr 8 15:15:47 2026 +0000

    fix(docs): update outdated network info, contract addresses, and unstaking delay

commit c527917300fbda42f6c6e4bbd26d8f6d83e6e121
Author: Jean M <132435771+jeanmon@users.noreply.github.com>
Date:   Wed Apr 8 17:06:12 2026 +0200

    chore(avm)!: Apply standard multi-row recipe everywhere (#22279)

    Linear issue:
    [AVM-244](https://linear.app/aztec-labs/issue/AVM-244/review-multi-rows-computation-instances-prevent-truncation)

commit 5e8f0f64187cd0d84db64f1c7f0e5b3d45d87d85
Author: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Date:   Wed Apr 8 16:00:29 2026 +0100

    fix: use Int64Value instead of Uint32Value for 64-bit map sizes (#22400)
    - Replace `Uint32Value()` with `Int64Value()` when reading LMDB map
    sizes from JS
    - Affects `lmdb_store_wrapper.cpp` and `world_state.cpp` — 3 call sites
    - `Uint32Value()` silently truncates values above 4 GiB; `Int64Value()`
    is the widest integer accessor available in N-API

    Fixes A-849

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit bd53d99706374f76ee5ada14b92050e0d4fc42b1
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Wed Apr 8 11:59:51 2026 -0300

    feat(world-state): add genesis timestamp support and GenesisData type (#22359)

    Retry for #22201

    The genesis block has `timestamp=0`, which forces a block 1 special case
    for transaction expiration validation. Transactions anchored to genesis
    get an expiration clamped to `0 + MAX_TX_LIFETIME` (~86400 = Jan 2
    1970), making them impossible to include after block 1. This complicates
    e2e test setup by requiring empty block 1 mining and `minTxsPerBlock`
    manipulation.

    Adds a `genesisTimestamp` parameter that flows through the full world
    state stack (C++ → NAPI → TypeScript), allowing the genesis block header
    to have a non-zero timestamp. Introduces a `GenesisData` type that
    bundles `prefilledPublicData` and `genesisTimestamp`, replacing the two
    separate parameters that were threaded everywhere. The e2e setup
    automatically passes the current time as the genesis timestamp.

    - **New `GenesisData` type** (`stdlib/src/world-state/genesis_data.ts`)
    — bundles `prefilledPublicData` and `genesisTimestamp` into a single
    type
    - **C++ world state** — accepts `genesis_timestamp` parameter, uses it
    in the genesis block header hash
    - **TS world state stack** — `NativeWorldState`,
    `NativeWorldStateService`, factory, and synchronizer all take
    `GenesisData`
    - **Node/CLI** — `AztecNodeService.createAndSync`, `createAztecNode`,
    `start_node.ts`, `standby.ts` all use `GenesisData`
    - **E2e setup** — passes `genesisTimestamp: Date.now()` to genesis
    values; block 1 wait logic preserved
    - **~30 e2e/p2p test files** — `prefilledPublicData` references replaced
    with `genesis`
    - **New e2e test** — `e2e_genesis_timestamp.test.ts` verifies
    genesis-anchored txs work after block 1

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit 5504ba5596bdb390017ceffc30c8c6647b8c1cfe
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Wed Apr 8 11:38:28 2026 -0300

    refactor(sequencer): sign last block before archiver sync (#22117)

    The last block in a checkpoint was being synced to the archiver _before_
    passing through the HA signing gate. If HA signing failed afterwards,
    the archiver would be polluted with a block that never made it on-chain.

    Reorder the block-building loop so that block proposal signing and
    archiver sync happen in the same order for all blocks (sign first, sync
    second), not just for non-last blocks. Pass the already-signed
    `BlockProposal` through to `CheckpointProposal.createProposalFromSigner`
    instead of raw block data.

    Unrelated to the above, we replaced `undefined` returns from
    `buildSingleBlock` with typed `{ failure: 'insufficient-txs' |
    'insufficient-valid-txs' }` objects, so the failure reason is made
    explicit.

    - **sequencer-client**: Reorder block-building loop so signing happens
    before archiver sync for all blocks (including last). Simplify
    `blockPendingBroadcast` to just `BlockProposal | undefined`. Return
    typed failure objects from `buildSingleBlock` instead of `undefined`.
    Update caller to check `'failure' in buildResult`.
    - **stdlib**: `CheckpointProposal.createProposalFromSigner` accepts
    `BlockProposal | undefined` instead of `CheckpointLastBlockData`. Remove
    `CreateCheckpointProposalLastBlockData` type. Update
    `makeCheckpointProposal` test helper to create a real `BlockProposal`
    via `makeBlockProposal`.
    - **validator-client**: Update `Validator` interface, `ValidatorClient`,
    and `ValidationService` to pass `BlockProposal` instead of raw block
    data for checkpoint proposal creation.
    - **tests**: Update assertions from `toBeUndefined()` to `toEqual({
    failure: ... })`, update signing-context test to reflect that only
    checkpoint signing happens in `createCheckpointProposal`.

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit 1d84e85a5ccbc5ab5d18ffb98bb7efe6fc4914ea
Author: Jan Beneš <janbenes1234@gmail.com>
Date:   Wed Apr 8 21:29:41 2026 +0700

    feat(e2e): support running tests against legacy noir contract artifacts (#22410)

commit 46755cb98d3ff72b80c60dc4f72381f158b8113f
Author: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Date:   Wed Apr 8 15:26:11 2026 +0100

    fix: remove unused BLOCK reqresp sub-protocol (#22407)
    - Remove the dead BLOCK req/resp sub-protocol from the P2P layer
    - The protocol was fully wired up (handler, validator, rate limits,
    metrics) but never called as a client — no production code ever
    requested blocks from peers via this protocol
    - The validator was also broken: it rejected responses when the local
    node didn't have the block, which is the exact scenario where you'd want
    to request it
    - Removes enum member, protocol constant, handler, validator, rate
    limits, metrics entry, mock helpers, and all associated tests
    - 9 files changed, ~215 lines deleted

    Fixes A-860

    ---------

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit a07850d7bf69c15b5f0354c0f6e9125a07479516
Author: Gregorio Juliana <gregojquiros@gmail.com>
Date:   Wed Apr 8 16:21:06 2026 +0200

    fix: pass additionalScopes to executeUtility (#22411)

    Necessary to enable patterns like the `Immutables` macro. Wallets still
    need to verify scopes forwarded from the app, so this is harmless and
    useful

commit d093674717a24bf554bad9362e7218f9eaa92dd2
Merge: 85bbd01029 b68c85535e
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 14:09:24 2026 +0000

    Merge branch 'next' into merge-train/fairies

commit bedf77ccb4e2b426ce28563f50eba39c326ab0b4
Merge: 49ee003af1 b68c85535e
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 14:09:14 2026 +0000

    Merge branch 'next' into merge-train/barretenberg

commit 27d80aa8c5904593a89713124a922e7de7e21a7c
Author: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Date:   Wed Apr 8 15:03:45 2026 +0100

    fix: use strict equality in world-state ops queue (#22398)
    - Replace loose equality (`==`/`!=`) with strict equality (`===`/`!==`)
    in `world_state_ops_queue.ts`
    - 5 instances in concurrency-critical queue dispatch logic

    Fixes A-733

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit 0ea1d34aef64d5013fb0a6f72bccf1405f882472
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Wed Apr 8 10:38:08 2026 -0300

    refactor(slasher): remove empire slasher model (#21830)

    The empire slashing model was developed during an earlier iteration but
    never tested in a real network. The tally model is the only one in
    production use. The empire code adds ~5000 lines of unnecessary
    complexity across L1 contracts, TypeScript, deployment scripts, and
    configuration with no benefit.

    Fixes A-670

    Removed all empire-slasher-specific code while preserving shared
    governance infrastructure (`EmpireBase`, `IEmpire`) that the
    `GovernanceProposer` depends on. Also removed the `SlashFactory`
    periphery contract (empire-only), the
    `slashMinPenaltyPercentage`/`slashMaxPenaltyPercentage` config fields
    (empire-only), replaced the `SlasherFlavor` enum with a simple
    `slasherEnabled` boolean, and renamed all
    `TallySlashingProposer`/`TallySlasherClient` types to
    `SlashingProposer`/`SlasherClient` since "tally" is now redundant.

    - **Env var**: `AZTEC_SLASHER_FLAVOR` (string `"tally"|"none"`) replaced
    with `AZTEC_SLASHER_ENABLED` (boolean)
    - **Env vars removed**: `SLASH_MIN_PENALTY_PERCENTAGE`,
    `SLASH_MAX_PENALTY_PERCENTAGE`
    - **Node admin API**: `getSlashPayloads()` method removed
    - **Deploy outputs**: `slashFactoryAddress` removed
    - **L1 contracts**: `SlasherFlavor` enum removed;
    `RollupConfigInput.slasherFlavor` replaced with `slasherEnabled: bool`;
    `TallySlashingProposer` renamed to `SlashingProposer`; `SlashFactory`
    contract removed
    - **TS config**: `slasherFlavor: 'tally' | 'none'` replaced with
    `slasherEnabled: boolean`;
    `slashMinPenaltyPercentage`/`slashMaxPenaltyPercentage` removed from
    `SlasherConfig`

    - **l1-contracts**: Deleted `EmpireSlashingProposer.sol`,
    `EmpireSlasherDeploymentExtLib.sol`, `SlashFactory.sol`,
    `ISlashFactory.sol`, and empire slashing tests. Replaced `SlasherFlavor`
    enum with `bool slasherEnabled`. Renamed `TallySlashingProposer` to
    `SlashingProposer` and `TallySlasherDeploymentExtLib` to
    `SlasherDeploymentExtLib`.
    - **slasher**: Deleted `EmpireSlasherClient`, `SlasherPayloadsStore`,
    and all empire helpers. Removed `getSlashPayloads()` from the interface.
    Renamed `TallySlasherClient` to `SlasherClient`. Updated README.
    - **stdlib**: Deleted empire slashing helpers, `SlashFactoryContract`
    wrapper, `SlashPayload`/`SlashPayloadRound` types. Removed empire action
    variants from `ProposerSlashAction`. Removed
    `slashMinPenaltyPercentage`/`slashMaxPenaltyPercentage` from
    `SlasherConfig`.
    - **ethereum**: Deleted `EmpireSlashingProposerContract` and
    `SlashFactory` artifacts. Removed `slashFactoryAddress` from
    `L1ContractAddresses`. Replaced `slasherFlavor` with `slasherEnabled:
    boolean`. Renamed `TallySlashingProposerContract` to
    `SlashingProposerContract`.
    - **sequencer-client**: Removed empire action handling from
    `SequencerPublisher`. Removed `SlashFactoryContract`. Updated types to
    use renamed slasher classes.
    - **end-to-end**: Removed empire branches from slash tests and
    `slash_veto_demo`. Removed `SlashFactory` from test setup.
    - **spartan/terraform**: Replaced `AZTEC_SLASHER_FLAVOR` with
    `AZTEC_SLASHER_ENABLED`. Removed
    `SLASH_MIN_PENALTY_PERCENTAGE`/`SLASH_MAX_PENALTY_PERCENTAGE` and
    `slashFactoryAddress` from helm, terraform, and deploy scripts.
    - **cli, archiver, aztec-node, pxe**: Removed `slashFactoryAddress` and
    `getSlashPayloads` references.
    - **docs**: Added migration notes for breaking changes.

    ---------

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit b68c85535e9e42b47b643290fc463a282b5fa092
Merge: f3f42bd345 6ddaab00b9
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 13:30:20 2026 +0000

    feat: merge-train/avm (#22394)

    BEGIN_COMMIT_OVERRIDE
    chore: fix broken comments found by claude (#22382)
    END_COMMIT_OVERRIDE

commit 374350abd9aaaa8388c389d0c418e155cf109730
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 09:24:01 2026 -0400

    chore(ci): skip prunes-uncheckpointed test in epochs_mbps_pipeline (#22401)

    The "prunes uncheckpointed blocks when proposer fails to deliver" test
    in `epochs_mbps.pipeline.parallel.test.ts` consistently times out in CI,
    even after the timeout bump in #22392.

    Adding `skip: true` in `.test_patterns.yml` to unblock the merge train
    while the underlying timing issue is investigated.

    ClaudeBox log: https://claudebox.work/s/94ade5ccbe68dc27?run=3

commit 9e9ac7549fe1fd1259b72da0f2f8d72f0339f309
Merge: 3d1b45f673 f3f42bd345
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 13:07:07 2026 +0000

    Merge branch 'next' into merge-train/spartan

commit 85bbd01029e7f5f295870b34b0d0bda9ccf6bc06
Merge: 88c479873d f3f42bd345
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 13:07:04 2026 +0000

    Merge branch 'next' into merge-train/fairies

commit 49ee003af1e5104ca0b3e00d08da6d3a70b62cc9
Merge: 920122bfa3 f3f42bd345
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 13:06:57 2026 +0000

    Merge branch 'next' into merge-train/barretenberg

commit 6ddaab00b92a3e7e7f25f328424392edc978ca73
Merge: 2d57b83d65 f3f42bd345
Author: AztecBot <tech@aztecprotocol.com>
Date:   Wed Apr 8 13:06:55 2026 +0000

    Merge branch 'next' into merge-train/avm

commit 3d1b45f673b39b8c2e043d1bd070c9d5e3c61f2e
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Wed Apr 8 09:42:56 2026 -0300

    chore: deflake e2e ha sync test (#22403)

    Test was failing with:

    ```
    15:21:49     Error warping: InvalidParamsRpcError: Invalid parameters were provided to the RPC method.
    15:21:49     Double check you have provided the correct parameters.
    15:21:49
    15:21:49     URL: http://127.0.0.1:8545/
    15:21:49     Request body: {"method":"evm_setNextBlockTimestamp","params":[1775575740]}
    15:21:49
    15:21:49     Details: Timestamp error: 1775575740 is lower than previous block's timestamp
    15:21:49     Version: viem@2.38.2
    15:21:49
    15:21:49       250 |             }
    15:21:49       251 |         } catch (err) {
    15:21:49     > 252 |             throw new Error(`Error warping: ${err}`);
    15:21:49           |                   ^
    15:21:49       253 |         } finally{
    15:21:49       254 |             // Restore interval mining so the next block is mined in `blockInterval` seconds from this one
    15:21:49       255 |             if (opts.resetBlockInterval && blockInterval !== null && blockInterval > 0) {
    15:21:49
    15:21:49       at EthCheatCodes.warp (../../ethereum/dest/test/eth_cheat_codes.js:252:19)
    15:21:49       at Object.<anonymous> (e2e_epochs/epochs_ha_sync.test.ts:157:5)
    ```

commit 2730d08d7d26d9f31587ce0a381a156c03db3608
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Wed Apr 8 09:42:34 2026 -0300

    fix(epoch-cache): use TTL-based caching with finalization tracking and correct lag (#22204)

    PR #22153 introduced a hard "finalized block guard" that refuses to
    compute committees if L1 data isn't finalized. While the safety goal is
    valid (preventing L1 reorgs from invalidating cached committees), it
    breaks many tests that don't properly set L1 finalized time and would
    cause the chain to stall if L1 stops finalizing. This PR takes a
    different approach that preserves safety while maintaining liveness.

    Also fixes the lag parameter: the old code used
    `lagInEpochsForValidatorSet` (the looser constraint) instead of
    `lagInEpochsForRandao` (the binding one), and computed the sampling
    timestamp from the slot rather than the epoch start.

    Fixes A-680

    Instead of refusing to serve committee data that isn't finalized, use a
    TTL-based cache: finalized entries are cached permanently, non-finalized
    entries expire after one Ethereum slot (12s) and get re-fetched from L1.
    The cache map stores both resolved entries and in-flight promises
    directly, so concurrent callers for the same epoch coalesce on a single
    L1 query. On fetch failure, the previous stale entry is restored so the
    next caller retries cleanly.

    - **epoch-cache**: Replaced the simple `Map<EpochNumber,
    EpochCommitteeInfo>` cache with `Map<EpochNumber, CachedEpochEntry |
    Promise<CachedEpochEntry>>`. Each resolved entry carries L1 block
    provenance metadata (number, hash, timestamp) and a `finalized` flag.
    Switched from `lagInEpochsForValidatorSet` to `lagInEpochsForRandao` and
    compute sampling timestamp from epoch start via
    `getStartTimestampForEpoch`. Simplified `isEscapeHatchOpen` to delegate
    cache management to `getCommittee`.
    - **epoch-cache (tests)**: Updated unit tests for the new cache
    structure. Added 4 new TTL tests: re-query after TTL, no re-query for
    finalized, concurrent coalescing, eventual finalization promotion.
    - **epoch-cache (integration tests)**: New integration test suite
    against real Anvil with deployed L1 contracts and 4 validators. Tests
    finalized committee retrieval, non-finalized TTL refresh, and cache
    re-fetch after L1 reorg.
    - **epoch-cache (README)**: Added comprehensive documentation covering
    committee computation, LAG values, RANDAO seed, proposer selection,
    escape hatch, TTL caching with finalization tracking, and configuration.

    ---------

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit f3f42bd3454fb304cb0edd7586c6d65cf7629078
Merge: c6042dd4f6 273ea981d9
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 12:09:14 2026 +0000

    fix(e2e): add resumeSync flag to rollbackTo to fix offchain payment flake (#22230)

    Fixes flaky `e2e_offchain_payment` test ("reprocesses an
    offchain-delivered payment after an L1 reorg").

    `rollbackTo()` unconditionally resumes archiver + world state sync in
    its `finally` block. After a shallow L1 reorg (1 block), the archiver
    immediately re-downloads the same checkpoint and the PXE re-syncs before
    the test can verify post-rollback balances. Offchain-delivered notes
    (stored as capsules, which have no rollback mechanism) get re-processed
    during re-sync, restoring Alice's balance to 60n instead of the expected
    100n.
    - **`AztecNodeAdmin.rollbackTo`**: Added `resumeSync` parameter (default
    `true`) that controls whether sync is resumed after rollback. Existing
    callers are unaffected.
    - **`e2e_offchain_payment.test.ts`**: `forceReorg` passes
    `resumeSync=false` to keep sync paused during post-rollback balance
    checks, then explicitly calls `resumeSync()` before `forceEmptyBlock`.

    Full analysis:
    https://gist.github.com/AztecBot/219f8ed5b6a30a74deb4f22f93c39dc4
    - `e2e_offchain_payment` reorg test should pass consistently since sync
    is atomically kept paused (no race window)
    - Second half of the test (verifying offchain notes are reprocessed
    after re-sync) unaffected since sync is explicitly resumed before
    `forceEmptyBlock`
    - All existing callers of `rollbackTo` use the default
    (`resumeSync=true`) and are unaffected

commit 273ea981d9f63371eabb2733bea2e2c250a9917f
Author: AztecBot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 10:40:18 2026 +0000

    fix(e2e): add resumeSync flag to rollbackTo to fix offchain payment flake

    Fixes flaky `e2e_offchain_payment` test ("reprocesses an offchain-delivered payment after an L1 reorg").

    `rollbackTo()` unconditionally resumes archiver + world state sync in its `finally` block. After a shallow L1 reorg (1 block), the archiver immediately re-downloads the same checkpoint and the PXE re-syncs before the test can verify post-rollback balances. Offchain-delivered notes (stored as capsules, which have no rollback mechanism) get re-processed during re-sync, restoring Alice's balance to 60n instead of the expected 100n.
    - **`AztecNodeAdmin.rollbackTo`**: Added `resumeSync` parameter (default `true`) that controls whether sync is resumed after rollback. Existing callers are unaffected.
    - **`e2e_offchain_payment.test.ts`**: `forceReorg` passes `resumeSync=false` to keep sync paused during post-rollback balance checks, then explicitly calls `resumeSync()` before `forceEmptyBlock`.

    Full analysis: https://gist.github.com/AztecBot/219f8ed5b6a30a74deb4f22f93c39dc4
    - `e2e_offchain_payment` reorg test should pass consistently since sync is atomically kept paused (no race window)
    - Second half of the test (verifying offchain notes are reprocessed after re-sync) unaffected since sync is explicitly resumed before `forceEmptyBlock`
    - All existing callers of `rollbackTo` use the default (`resumeSync=true`) and are unaffected

commit 88c479873d4c745741f641eecc707e1f0e3495ce
Author: Gregorio Juliana <gregojquiros@gmail.com>
Date:   Wed Apr 8 11:41:18 2026 +0200

    fix: subfield note selectors (#22211)

    Closes:
    https://linear.app/aztec-labs/issue/F-492/propertyselectoroffset-noirtypescript-semantic-mismatch

    While it was intended to be supported, this was never really tested.
    Added ts-only and e2e verification for a packed note.

commit 2d57b83d65512566ddd80b682b5ddfaf45ab096b
Author: David Banks <47112877+dbanks12@users.noreply.github.com>
Date:   Wed Apr 8 04:59:13 2026 -0400

    chore: fix broken comments found by claude (#22382)

    minor comment fixes

commit f2a6006bf9c279b87e16d40ab47396668a564743
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 04:50:56 2026 -0400

    fix(e2e): increase prune timeout in epochs_mbps_pipeline test (#22392)

    Fixes timeout in "prunes uncheckpointed blocks when proposer fails to
    deliver" test that was blocking merge-train/spartan from merging into
    next.

    The prune detection timeout of `L2_SLOT_DURATION_IN_S * 3` (108s) is
    exactly at the worst-case boundary. After `executeTimeout` starts, three
    things must happen sequentially:
    1. Wait for the proposer's slot to arrive (up to 1 L2 slot = 36s)
    2. Proposer builds blocks and skips publishing (during the slot)
    3. L1 advances past the slot boundary so the archiver detects the prune
    (up to 1 L2 slot = 36s)

    In CI, total was 119s — exceeding the 108s timeout by 11s. The prune
    event did fire (on validator-4 at 08:00:37), but 11 seconds after the
    timeout had already triggered teardown and stopped all archivers.

    Increased to `L2_SLOT_DURATION_IN_S * 5` (180s) for comfortable margin.

    ClaudeBox log: https://claudebox.work/s/94ade5ccbe68dc27?run=1

commit a5f9e388152faad8e8f17edf54d158b1775d04ec
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 04:49:38 2026 -0400

    feat(spartan): configurable HA validator replica count (#22384)

    Makes validator and HA validator pod counts independently configurable.
    Adds two new optional variables:

    - **`VALIDATOR_PRIMARY_REPLICA_COUNT`**: Override pod count for the
    primary validator release (defaults to `VALIDATOR_REPLICAS`)
    - **`VALIDATOR_HA_REPLICA_COUNT`**: Override pod count for HA validator
    releases (defaults to `VALIDATOR_REPLICAS`)

    `VALIDATOR_REPLICAS` remains the canonical "node slot count" used for
    key derivation and publisher key stride. The new variables only affect
    how many pods each release runs.

    Sets staging-public to run **2 primary validators + 4 HA validators**:
    ```
    VALIDATOR_REPLICAS=4              # 4 node slots (256 attesters)
    VALIDATOR_PRIMARY_REPLICA_COUNT=2 # 2 primary pods
    VALIDATOR_HA_REPLICAS=1           # 1 HA release
    VALIDATOR_HA_REPLICA_COUNT=4      # 4 HA pods
    ```

    This means attester slots 0-1 are served by both primary and HA, while
    slots 2-3 are served only by HA nodes. When HA runs a different image
    (via `VALIDATOR_HA_DOCKER_IMAGE`), this forces mixed-version consensus.

    - **`variables.tf`**: Added `VALIDATOR_PRIMARY_REPLICA_COUNT` and
    `VALIDATOR_HA_REPLICA_COUNT` (both `number`, default `null`)
    - **`main.tf`**: Moved `validator.replicaCount` from shared settings to
    per-release, using `coalesce()` to fall back to `VALIDATOR_REPLICAS`
    - **`deploy_network.sh`**: Passes both new variables through env →
    tfvars
    - **`staging-public.env`**: Set to 2 primary + 4 HA

commit 5a4b0b62ec80dfb621b8d3523b8007b11315f1fd
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Wed Apr 8 05:49:28 2026 -0300

    fix: handle error types serialization errors (#22379)

    Do not throw in the logger when we try to log something that fails
    during serialization.

    I ran into this while playing with a test script:
    ```
    TypeError: Cannot read properties of undefined (reading 'value')
        at formatProperty (node:internal/util/inspect:2280:12)
        at formatRaw (node:internal/util/inspect:1176:9)
        at formatValue (node:internal/util/inspect:932:10)
        at inspect (node:internal/util/inspect:409:10)
        at formatErr
    (file:///home/santiago/Projects/aztec-3/yarn-project/foundation/dest/log/pino-logger.js:326:29)
        at Object.error
    (file:///home/santiago/Projects/aztec-3/yarn-project/foundation/dest/log/pino-logger.js:56:97)
        at L2BlockStream.work (file:///home/santiago/Projects/aztec-3/yarn-project/stdlib/dest/block/l2_bloc
    k_stream/l2_block_stream.js:222:22)
        at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
        at async L2BlockStream.sync (file:///home/santiago/Projects/aztec-3/yarn-project/stdlib/dest/block/l
    2_block_stream/l2_block_stream.js:46:9)
        at async BlockSynchronizer.doSync (file:///home/santiago/Projects/aztec-3/yarn-project/pxe/dest/bloc
    k_synchronizer/block_synchronizer.js:157:9)
    [18:27:08.952] INFO: teardown-failure:pxe:service Simulating transaction execution request to 0xf04908a9
     at 0x0000000000000000000000000000000000000000000000000000000000000004
    {"origin":"0x0000000000000000000000000000000000000000000000000000000000000004","functionSelector":"0xf04
    908a9","simulatePublic":true,"chainId":"0x0000000000000000000000000000000000000000000000000000000000aa36
    a7","version":"0x000000000000000000000000000000000000000000000000000000009a3a0b73","authWitnesses":["0x2
    983e158c25f7487e066bfa57d58f43340b2b45a114e6d6934dbc95213778ee6"]}
    [18:27:09.301] ERROR: teardown-failure:pxe:service TypeError: TypeError: Cannot read properties of
    undefined (reading 'value')
        at formatProperty (node:internal/util/inspect:2280:12)
        at formatRaw (node:internal/util/inspect:1176:9)
        at formatValue (node:internal/util/inspect:932:10)
        at inspect (node:internal/util/inspect:409:10)
        at formatErr
    (file:///home/santiago/Projects/aztec-3/yarn-project/foundation/dest/log/pino-logger.js:326:29)
        at Object.error
    (file:///home/santiago/Projects/aztec-3/yarn-project/foundation/dest/log/pino-logger.js:56:97)
        at L2BlockStream.work (file:///home/santiago/Projects/aztec-3/yarn-project/stdlib/dest/block/l2_bloc
    k_stream/l2_block_stream.js:222:22)
        at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
        at async L2BlockStream.sync (file:///home/santiago/Projects/aztec-3/yarn-project/stdlib/dest/block/l
    2_block_stream/l2_block_stream.js:46:9)
        at async BlockSynchronizer.doSync (file:///home/santiago/Projects/aztec-3/yarn-project/pxe/dest/bloc
    k_synchronizer/block_synchronizer.js:157:9)
    ```

commit cac2411ad2d62fbc83c3997f7bff7a2e02dbd365
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Wed Apr 8 03:47:50 2026 -0400

    fix(pxe): support custom PrivateKernelProver and unify EmbeddedWalletOptions (#22348)

    - Fixes `EmbeddedWallet` silently ignoring custom `PrivateKernelProver`
    implementations passed via `pxeOptions.proverOrOptions`
    - The `instanceof BBPrivateKernelProver` check in all three `createPXE`
    utils only matched BB's own prover subclasses — custom implementations
    fell through and were destructured as config options, causing runtime
    errors
    - Replaced with a duck-type `isPrivateKernelProver()` guard using
    `createChonkProof` as the distinguishing method
    - Unified the confusing `pxeConfig`/`pxeOptions` split in
    `EmbeddedWalletOptions` into a single `pxe` field that accepts both
    config and dependency overrides

    ```ts
    // Before (confusing — which one do I use?)
    const wallet = await EmbeddedWallet.create(nodeUrl, {
      pxeConfig: { proverEnabled: true },
      pxeOptions: { proverOrOptions: myCustomProver },
    });

    // After (single unified option)
    const wallet = await EmbeddedWallet.create(nodeUrl, {
      pxe: {
        proverEnabled: true,
        proverOrOptions: myCustomProver,
      },
    });
    ```

    The old `pxeConfig`/`pxeOptions` fields are kept but marked
    `@deprecated`.

    - Existing BB provers still pass the duck-type check (they implement
    `createChonkProof`)
    - Plain `BBPrivateKernelProverOptions` objects correctly fall through to
    create default provers
    - Custom `PrivateKernelProver` implementations are now correctly
    detected and used as-is
    - Old `pxeConfig`/`pxeOptions` usage still works (backward compatible)
    - New `pxe` field merges correctly with deprecated fields

commit abbb9eb0048c160177e6e09af94f72ca809c9fa0
Author: Maddiaa <47148561+Maddiaa0@users.noreply.github.com>
Date:   Tue Apr 7 22:49:58 2026 +0100

    feat(pipeline): handle pipeline prunes (#21250)

    Revert the pending chain whenever a pipeline does not get checkpointed
    onto L1

commit a8c649f012695a721e67fa2bf973825b5a044688
Merge: 1754519bbd c6042dd4f6
Author: AztecBot <tech@aztecprotocol.com>
Date:   Tue Apr 7 21:31:23 2026 +0000

    Merge branch 'next' into merge-train/spartan

commit 1754519bbdf8d3a7194eda67d283e9952382b8b2
Author: Maddiaa <47148561+Maddiaa0@users.noreply.github.com>
Date:   Tue Apr 7 22:07:27 2026 +0100

    chore(pipeline): timetable adjustments under pipelining (#21076)

commit 5ea1f65b6f6e7ac72ab396bcdba9cec13f538e2f
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Tue Apr 7 13:39:36 2026 -0400

    fix: rename #team-alpha → #e-team-alpha slack channel (#22374)
    The `#team-alpha` Slack channel was renamed to `#e-team-alpha`. This
    updates all references across CI scripts and docs:

    - `ci3/merge_train_failure_slack_notify` — merge train failure
    notifications
    - `ci3/network_healthcheck` — network healthcheck dispatches
    - `scripts/socket-fix-ci.sh` — Socket vulnerability notifications
    - `spartan/testnet-runbook.md` — testnet runbook docs
    - `.claude/skills/merge-trains/SKILL.md` — merge train skill reference
    - Verify merge train failures for `merge-train/spartan` post to
    `#e-team-alpha`
    - Verify network healthcheck posts to `#e-team-alpha`

    ClaudeBox log: https://claudebox.work/s/0cbf19c4f8f32780?run=1

commit 7de9a23af8701f7de2b3a169a82e9c8d0140d825
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Tue Apr 7 13:28:23 2026 -0400

    chore: remove v4-devnet-2 references (#22372)

    Decommissions the v4-devnet-2 network by removing its references across
    the repo. The generic devnet infrastructure (workflows, scripts, env
    templates) is preserved for future devnet iterations.

    ClaudeBox log: https://claudebox.work/s/e8707a3b2ea53bf3?run=1

commit f54add108c04cf768cc2d4ed5e939d9c8619358a
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Tue Apr 7 18:27:49 2026 +0100

    chore: fix the daily healthchecks (#22373)

    .

commit 0c4273573adc1b2f5f8c96967e217a6b1d0a879a
Merge: 019145c30d 0dcc13bed2
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Tue Apr 7 18:08:27 2026 +0100

    feat: support different docker image for HA validator nodes (#22371)

    Extracted from
    https://github.com/AztecProtocol/aztec-packages/pull/22329 — adds
    support for running a different docker image on HA validator nodes.

    - Adds `VALIDATOR_HA_DOCKER_IMAGE` terraform variable that, when set,
    overrides the image for HA validator releases (idx > 0)
    - Passes the variable through `deploy_network.sh` tfvars generation
    - Adds optional `ha_docker_image` input to the `deploy-network` workflow
    (both `workflow_call` and `workflow_dispatch`). When unset, HA nodes use
    the regular aztec docker image.

    **Note:** The workflow change is in
    `.github-new/workflows/deploy-network.yml` — please move it to
    `.github/workflows/` before merging (ci-allow was requested but not
    detected by the sidecar).

    - If `VALIDATOR_HA_DOCKER_IMAGE` is empty (default), all validator
    releases use `AZTEC_DOCKER_IMAGE`
    - If set, HA releases (idx > 0) get their `global.aztecImage.repository`
    and `global.aztecImage.tag` overridden
    - The primary validator release (idx=0) always uses `AZTEC_DOCKER_IMAGE`

    - [ ] Verify terraform plan with `VALIDATOR_HA_DOCKER_IMAGE` unset — no
    change to existing behavior
    - [ ] Verify terraform plan with `VALIDATOR_HA_DOCKER_IMAGE` set — HA
    releases use the override image
    - [ ] Move `.github-new/workflows/deploy-network.yml` to
    `.github/workflows/deploy-network.yml` and test workflow dispatch with
    `ha_docker_image` parameter

    ClaudeBox log: https://claudebox.work/s/c73d93309f2bbc88?run=1

commit 0dcc13bed2a328942e315e24bbf1553ea20cfd47
Author: AztecBot <tech@aztec-labs.com>
Date:   Tue Apr 7 16:56:16 2026 +0000

    feat: support different docker image for HA validator nodes

commit 019145c30d77eecf3c1e8c7da38f370d4808b27c
Author: danielntmd <162406516+danielntmd@users.noreply.github.com>
Date:   Tue Apr 7 12:42:49 2026 -0400

    chore: (A-749) single character url join (#22269)

    urlJoin now properly appends single characters.

    Co-authored-by: danielntmd <danielntmd@nethermind.io>

commit e258d0013ea476492e9cbc8a56c99c6ace424b17
Merge: b80e5d0621 09869bddb0
Author: AztecBot <tech@aztecprotocol.com>
Date:   Tue Apr 7 16:06:26 2026 +0000

    Merge branch 'next' into merge-train/spartan

commit b80e5d062114a10beb36bf5192b4846d8f56e0fc
Merge: ad5ecf6ca8 45f88a816f
Author: AztecBot <tech@aztecprotocol.com>
Date:   Tue Apr 7 15:35:43 2026 +0000

    Merge branch 'next' into merge-train/spartan

commit ad5ecf6ca8c71a825c85d8f73f10067ab3187d66
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Tue Apr 7 16:23:33 2026 +0100

    chore: dispatch CB on failed deployments (#22367)

    .

commit 32995f6439f0e6d8450766a77478a700fb0d0a46
Merge: 9037ae5d24 dddbaab63e
Author: AztecBot <tech@aztecprotocol.com>
Date:   Tue Apr 7 15:19:56 2026 +0000

    Merge branch 'next' into merge-train/spartan

commit 9037ae5d24367324aeeb96604ddc405efc20124b
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Tue Apr 7 15:34:04 2026 +0100

    chore: add pdb (#22364)

    .

commit 46f6ddc4077f859416e2a2d0a40cdb6304855f22
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Tue Apr 7 15:33:41 2026 +0100

    chore: remove unused env var (#22365)

    Removes an env var that wasn't being used anymore.

commit 4a45f3dae9807a862b0e87e8ba773d2dc6a4c4dc
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Tue Apr 7 09:56:06 2026 -0300

    chore: add v4-devnet-3 to tf network ingress (#22327)

    As title

commit d8c2e6778c25a17ccf835888944b70011d71454e
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date:   Tue Apr 7 09:50:42 2026 -0300

    fix: disable sponsored fpc and test accounts for devnet (#22331)

    To avoid incorrect genesis root when deploying with 4.1 contracts.

commit d26761fa0e84795e5154a3ca14fd814d8a19b668
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date:   Tue Apr 7 08:34:50 2026 -0400

    fix(p2p): reduce flakiness in proposal tx collector benchmark (#22240)

    Fixes flakiness in `p2p_client.proposal_tx_collector.bench.test.ts`
    caused by three compounding issues:

    1. **`chunkTxHashesRequest` defaulted to chunkSize=1**, creating 500
    individual libp2p streams for the 500-tx `send-batch-request` case. The
    rapid stream churn overwhelms the connection, causing EPIPE cascades
    that kill the muxer. Bumped to chunkSize=8 as the existing TODO
    indicated.

    2. **Peer scores persisted between benchmark cases**, so hundreds of
    HighToleranceError penalties from EPIPE failures in one case degraded
    peer selection in subsequent cases. Added `PeerScoring.resetAllScores()`
    and called it in the worker before each benchmark run.

    3. **No connectivity check between cases**, so degraded connections from
    a previous case could silently affect the next. Added
    `waitForConnectivity()` to verify the aggregator has 80% of expected
    peers before each case starts.

    Full analysis with CI log evidence:
    https://gist.github.com/AztecBot/e5af3238fbfefc29c51de2ee5deaa8ea

    - `protocols/tx.ts`: Change `chunkTxHashesRequest` default chunkSize
    from 1 to 8
    - `peer_scoring.ts`: Add `resetAllScores()` method
    - `p2p_client_testbench_worker.ts`: Reset peer scores before each bench
    case, add `GET_PEER_COUNT` IPC command
    - `worker_client_manager.ts`: Add `waitForConnectivity()` and
    `getPeerCount()` methods
    - `p2p_client.proposal_tx_collector.bench.test.ts`: Check connectivity
    in `beforeEach`

    ClaudeBox log: https://claudebox.work/s/38590d3cfe6a7000?run=2

    Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com>

commit 1450e1722e49bed76d2da941eb14b63bc7ed8aee
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Tue Apr 7 12:32:09 2026 +0100

    chore: wire up spartan checks to make (#22358)

    .

commit 34e53c37904fe082d83f052fc778241b6004fcd4
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Tue Apr 7 12:22:35 2026 +0100

    chore: fix main.tf syntax (#22356)

    .

commit b07c02b3d885c526d916f3f65ffe693e478d5623
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date:   Tue Apr 7 11:32:00 2026 +0100

    chore: bump log level in stg-public (#22354)

    .

commit 7fbc228c546b6b1e7dd39b23c517c654e569029c
Author: danielntmd <162406516+danielntmd@users.noreply.github.com>
Date:   Tue Apr 7 06:31:53 2026 -0400

    chore: (A-750) read JSON body then parse to avoid double stream consumption on error message (#22247)

    Read JSON body then parse to avoid double stream consumption on error
    message.

    Co-authored-by: danielntmd <danielntmd@nethermind.io>

commit cb7f3e342ab7444684150d641b2b080af1b28206
Author: danielntmd <162406516+danielntmd@users.noreply.github.com>
Date:   Tue Apr 7 05:58:26 2026 -0400

    fix(foundation): flush current batch on BatchQueue.stop() (#22341)

    BatchQueue.stop() was not flushing the current in-progress batch before
    ending the container queue. Any items accumulated below maxBatchSize
    whose timer hadn't fired were silently dropped. In KVBrokerDatabase,
    this could lose proving job writes on graceful shutdown, requiring
    unnecessary re-computation on restart.

    Co-authored-by: danielntmd <danielntmd@nethermind.io>
    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit 0e26736b11b51786e278cf3f4a0701c91ce3a473
Author: spypsy <spypsy@users.noreply.github.com>
Date:   Tue Apr 7 10:54:40 2026 +0100

    fix(bot): bot fee juice funding (#21949)

    Fixes
    [A-657](https://linear.app/aztec-labs/issue/A-657/ensure-bots-are-funded-on-deployment)

    - **Early refuel on restart**: `ensureFeeJuiceBalance` runs before setup
    when token already exists (`setupTokenWithOptionalEarlyRefuel`,
    `setupTokenContractWithOptionalEarlyRefuel`)
    - **Bridge claim for low-balance deploys**: When balance < 100 FJ, use
    bridge claim for deploys in `setupToken` and `registerOrDeployContract`
    so setup doesn't fail before refuel
    - **Constants**: Hardcode threshold 100 FJ, target 10k FJ
    - **L1**: Raise FeeAssetHandler initial mint from 1000 to 10000

commit 47e4879a68cca80316089f3bc84b3402a1c03611
Author: danielntmd <162406516+danielntmd@users.noreply.github.com>
Date:   Tue Apr 7 05:42:18 2026 -0400

    chore: fix mempool limit test (#22332)

    Fixing up the rest of the bad merge from #21889, reintroduced original
    intent from #21578.

    Co-authored-by: danielntmd <danielntmd@nethermind.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants