Skip to content

feat: merge-train/spartan#20278

Merged
ludamad merged 39 commits intonextfrom
merge-train/spartan
Feb 10, 2026
Merged

feat: merge-train/spartan#20278
ludamad merged 39 commits intonextfrom
merge-train/spartan

Conversation

@AztecBot
Copy link
Collaborator

@AztecBot AztecBot commented Feb 9, 2026

BEGIN_COMMIT_OVERRIDE
chore: add new retention policy to cloudflare R2 (#20276)
fix: k8s enricher opt-in (#20279)
feat(slasher): add duplicate attestation slashing (#20218)
chore: improve HA e2e (#20280)
chore(test): fix p2p integration test (#20283)
chore(claude): minor changes to claude md and rules (#20284)
chore(test): fix p2p message propagation test build error (#20289)
chore(claude): add actor info to analyze-logs (#20290)
feat: tx file store source for tx collector (#20165)
chore(test): fix validator integration test (#20288)
chore(e2e): remove setup with remote env in e2e tests (#20294)
chore: fix test flakes (#20295)
chore: user-perceived latency explorer (#20298)
fix(p2p): fix flaky file store tx collection tests (#20318)
chore(spartan): add mbps-net env definition (#20308)
fix(validator): do not process proposals from self (#20314)
chore(ci): track history in merge-trains (#20321)
fix(e2e): enable broadcastEquivocatedProposals in duplicate proposal slash test (#20320)
chore: use respective get endpoints for rollup test instead of only port-forward (#20327)
END_COMMIT_OVERRIDE

@AztecBot
Copy link
Collaborator Author

AztecBot commented Feb 9, 2026

Flakey Tests

🤖 says: This CI run detected 2 tests that failed, but were tolerated due to a .test_patterns.yml entry.

\033FLAKED\033 (8;;http://ci.aztec-labs.com/0a78a2b17c9139e2�0a78a2b17c9139e28;;�):  yarn-project/end-to-end/scripts/run_test.sh simple src/e2e_epochs/epochs_mbps.parallel.test.ts "builds multiple blocks per slot with transactions anchored to proposed blocks" (221s) (code: 1) group:e2e-p2p-epoch-flakes
\033FLAKED\033 (8;;http://ci.aztec-labs.com/ebc3122ed653270b�ebc3122ed653270b8;;�):  yarn-project/end-to-end/scripts/run_test.sh simple src/e2e_p2p/add_rollup.test.ts (283s) (code: 1) group:e2e-p2p-epoch-flakes

ludamad and others added 20 commits February 9, 2026 11:19
Make k8s enricher exit early unless K8S_ENRICHER=1 is set. Enables it on
relevant test/bench commands.
## Summary
- Implements slashing for validators who send duplicate checkpoint
attestations (equivocation): signing attestations for different
proposals at the same slot
- Adds per-signer-per-slot tracking in the attestation pool with a cap
of 3 attestations per (slot, signer)
- Detection callback fires on the first duplicate (count goes from 1 to
2), and duplicates are propagated so other nodes can also detect the
offense
- Equivocation prevention in the validator client: `shouldAttestToSlot`
check inside `createCheckpointAttestationsFromProposal` to minimize the
race window
- Includes E2E test with malicious proposer nodes that share a key
(creating duplicate proposals) and attest to both (creating duplicate
attestations)
- Adds `SLASH_DUPLICATE_ATTESTATION_PENALTY` env var across all spartan
deployment configs

## Test plan
- Unit tests for attestation pool duplicate detection, per-signer cap,
cross-slot isolation, and cleanup
- Unit tests for validator client with updated config
- LibP2P service tests updated for new constant names
- E2E test `e2e_p2p_duplicate_attestation_slash` verifies offense
detection end-to-end

Fixes A-349

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
It was broken with the latest changes to the attestation pool.
- add glob to typescript style rule so it's only loaded on ts files
- enforce claude not to add the `echo` bash for loading exit codes,
  which breaks permissions
Improve HA testing by killing nodes after they successfully propose a
block, to ensure the HA setup keeps working with the remaining nodes
It was broken with the latest changes to the attestation pool.
- add glob to typescript style rule so it's only loaded on ts files
- enforce claude not to add the `echo` bash for loading exit codes,
which breaks permissions
Adds the concept of actor and instanceId, recently added to logs, to the
subagent analyze-logs.
Fixes issue introduced with duplicate proposal/attestation checks.
This was not being used. Also removes all the conditional access to
undefined components in the e2e context that we now know to be defined.
This was not being used. Also removes all the conditional access to
undefined components in the e2e context that we now know to be defined.
spalladino and others added 7 commits February 9, 2026 19:26
## Summary
- Mock `Math.random` in `FileStoreTxCollection` tests to ensure
deterministic file store iteration order
- The `downloadTx` method picks a random starting index for round-robin
across file stores, which caused two tests to intermittently fail
depending on which store was tried first

## Test plan
- [x] All 6 tests in `file_store_tx_collection.test.ts` pass
consistently

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Same as `next-net` but with:

```
SEQ_BUILD_CHECKPOINT_IF_EMPTY=true
SEQ_BLOCK_DURATION_MS=6000
LOG_LEVEL=verbose
BOT_TRANSFERS_TX_INTERVAL_SECONDS=8
BOT_SWAPS_TX_INTERVAL_SECONDS=8
```

And without the RPC ingress configuration
In a HA setup, if we receive a block or checkpoint proposal from an
address we control, there's no point in processing it. We should just
add it to the attestation pool to track equivocations (which is handled
by the libp2p service), and that's it.
…slash test (#20320)

## Summary
- The `e2e_p2p_duplicate_proposal_slash` test was flaking because
malicious nodes were not actually broadcasting duplicate proposals to
the network.
- The `P2PClient.broadcastProposal()` method throws when it detects a
duplicate block proposal for the same slot, unless
`broadcastEquivocatedProposals` is set to `true`.
- Added `broadcastEquivocatedProposals: true` to both malicious node
configs, matching what the `duplicate_attestation_slash` test already
does.

## Test plan
- The existing `e2e_p2p_duplicate_proposal_slash` test should now pass
reliably since the duplicate proposals will actually reach the network
and be detected by the slasher.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@AztecBot
Copy link
Collaborator Author

⚠️ Docs Examples Validation Failed

Compile (Noir contracts)

(truncated)...
unter_contract	Cache download of contract-e4ad6d50c8eed45d.tar.gz failed.
contracts/nft	Cache download of contract-9ccd0d3069a43d1d.tar.gz failed.
contracts/nft	Waiting for lock on git dependencies cache...
contracts/bob_token_contract	Cache download of contract-170e974a8252b32f.tar.gz failed.
contracts/bob_token_contract	Waiting for lock on git dependencies cache...
contracts/nft_bridge	Cache download of contract-39598641f750aadd.tar.gz failed.
contracts/recursive_verification_contract	Cache download of contract-106a5234fe970536.tar.gz failed.
contracts/nft	error: `dep::aztec` path is deprecated
contracts/nft	  ┌─ examples/contracts/nft/src/nft.nr:2:5
contracts/nft	  │
contracts/nft	2 │ use dep::aztec::{macros::notes::note, protocol::traits::Packable};
contracts/nft	  │     --- Please use `::aztec` instead
contracts/nft	  │
contracts/nft	
contracts/nft	error: `dep::aztec` path is deprecated
contracts/nft	  ┌─ examples/contracts/nft/src/main.nr:8:9
contracts/nft	  │
contracts/nft	8 │     use dep::aztec::{
contracts/nft	  │         --- Please use `::aztec` instead
contracts/nft	  │
contracts/nft	
contracts/nft	error: `dep::aztec` path is deprecated
contracts/nft	   ┌─ examples/contracts/nft/src/main.nr:13:9
contracts/nft	   │
contracts/nft	13 │     use dep::aztec::messages::message_delivery::MessageDelivery;
contracts/nft	   │         --- Please use `::aztec` instead
contracts/nft	   │
contracts/nft	
contracts/nft	Aborting due to 3 previous errors
contracts/counter_contract	error: `dep::aztec` path is deprecated
contracts/counter_contract	  ┌─ examples/contracts/counter_contract/src/main.nr:2:5
contracts/counter_contract	  │
contracts/counter_contract	2 │ use dep::aztec::macros::aztec;
contracts/counter_contract	  │     --- Please use `::aztec` instead
contracts/counter_contract	  │
contracts/counter_contract	
contracts/counter_contract	Aborting due to 1 previous error
parallel: This job failed:
compile contracts/counter_contract examples
parallel: This job failed:
compile contracts/nft examples
Seq	Host	Starttime	JobRuntime	Send	Receive	Exitval	Signal	Command
1	:	1770683238.713	     1.921	0	329	1	0	compile contracts/counter_contract examples
3	:	1770683238.736	     1.898	0	784	1	0	compile contracts/nft examples

TypeScript validation

(truncated)...
/aztec.js: 77 .d.ts files
aztecjs_authwit	✓ @aztec/accounts: 27 .d.ts files
aztecjs_getting_started	✓ @aztec/accounts: 27 .d.ts files
aztecjs_advanced	✓ @aztec/test-wallet: 8 .d.ts files
aztecjs_connection	✓ @aztec/accounts: 27 .d.ts files
aztecjs_authwit	✓ @aztec/test-wallet: 8 .d.ts files
aztecjs_getting_started	✓ @aztec/test-wallet: 8 .d.ts files
aztecjs_connection	✓ @aztec/test-wallet: 8 .d.ts files
aztecjs_advanced	✓ @aztec/noir-contracts.js: 33 .d.ts files
aztecjs_authwit	✓ @aztec/noir-contracts.js: 33 .d.ts files
aztecjs_getting_started	✓ @aztec/noir-contracts.js: 33 .d.ts files
aztecjs_connection	✓ @aztec/noir-contracts.js: 33 .d.ts files
aztecjs_advanced	✓ @aztec/ethereum: 85 .d.ts files
aztecjs_connection	✓ @aztec/stdlib: 477 .d.ts files
aztecjs_advanced	✓ @aztec/stdlib: 477 .d.ts files
aztecjs_authwit	Type checking 'aztecjs_authwit'...
aztecjs_getting_started	Type checking 'aztecjs_getting_started'...
aztecjs_connection	Type checking 'aztecjs_connection'...
aztecjs_advanced	Type checking 'aztecjs_advanced'...
aztecjs_getting_started	✓ 'aztecjs_getting_started' validated successfully
aztecjs_getting_started	Cleaning up temporary files for 'aztecjs_getting_started'...
aztecjs_testing	validate_project aztecjs_testing
aztecjs_connection	✓ 'aztecjs_connection' validated successfully
aztecjs_connection	Cleaning up temporary files for 'aztecjs_connection'...
bob_token_contract	validate_project bob_token_contract
aztecjs_testing	�[38;2;188;109;208m---�[0m �[38;2;95;167;241m�[1mValidating aztecjs_testing�[0m �[38;2;188;109;208m---�[0m
aztecjs_testing	No custom contracts for 'aztecjs_testing', skipping codegen...
aztecjs_testing	Setting up yarn for 'aztecjs_testing'...
bob_token_contract	ERROR: Artifact not found for 'bob_token_contract': /home/aztec-dev/aztec-packages/docs/target/bob_token_contract-BobToken.json
parallel: This job failed:
validate_project bob_token_contract
Seq	Host	Starttime	JobRuntime	Send	Receive	Exitval	Signal	Command
4	:	1770683243.446	     4.811	0	1939	0	0	validate_project aztecjs_getting_started
3	:	1770683243.443	     4.856	0	1999	0	0	validate_project aztecjs_connection
6	:	1770683248.305	     0.033	0	164	1	0	validate_project bob_token_contract
ERROR: Some project(s) failed validation

Action required: Please fix the docs examples or update them to match the current API.

cc @AztecProtocol/devrel

Copy link
Collaborator

@ludamad ludamad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Auto-approved

@AztecBot AztecBot added this pull request to the merge queue Feb 10, 2026
@AztecBot
Copy link
Collaborator Author

🤖 Auto-merge enabled after 4 hours of inactivity. This PR will be merged automatically once all checks pass.

@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Feb 10, 2026
AztecBot and others added 3 commits February 10, 2026 05:01
…ort-forward (#20327)

This will revert the changes made to the upgrade rollup test for RPC
endpoints.
This should allow for both the local and the network tests endpoints to
resolve correctly.
github-merge-queue bot pushed a commit that referenced this pull request Feb 10, 2026
…20324)

## Summary
- Replaces deprecated `dep::aztec` path with `::aztec` in 4 docs example
contract files (`nft`, `nft_bridge`, `counter_contract`)
- Also replaces `dep::NFTPunk` with `NFTPunk` in `nft_bridge`
- Fixes the docs examples validation failures reported in
#20278 (comment)
- The `bob_token_contract` TS validation failure was a cascading issue
from the compile failures

## Test plan
- [ ] CI docs examples validation passes (Noir compile + TS validation)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@ludamad ludamad enabled auto-merge February 10, 2026 11:34
@ludamad ludamad added this pull request to the merge queue Feb 10, 2026
Merged via the queue into next with commit f443119 Feb 10, 2026
21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants