# Changelog

## v1.7.1 (2026-05-08)

# Foundry v1.7.1

A patch release on top of [v1.7.0](https://github.com/foundry-rs/foundry/releases/tag/v1.7.0) with cherry-picked correctness fixes for cheatcodes, EVM forking, CLI, `forge`, and `cast`, plus further release-pipeline hardening (updated release version string construction, signed archives & SBOMs).

***

## Cheatcodes

Reverter-address enforcement for CREATE frames, value transfers for payable mock calls, preserved reverts under `expectEmit`, and a fix for the spurious `solc 0.8.35` `error` keyword warning.

<details open>
<summary><b>Cheatcode fixes (4 PRs)</b></summary>

* fix(cheatcodes): fix solc 0.8.35 `error` keyword warning ([#14509](https://github.com/foundry-rs/foundry/pull/14509)) by @figtracer
* fix(cheatcodes): transfer value for payable mock calls ([#14547](https://github.com/foundry-rs/foundry/pull/14547)) by @srdtrk
* fix(cheatcodes): enforce `expectRevert` reverter address for CREATE frames ([#14615](https://github.com/foundry-rs/foundry/pull/14615)) by @mablr
* fix(cheatcodes): preserve reverts with `expectEmit` ([#14619](https://github.com/foundry-rs/foundry/pull/14619)) by @srdtrk

</details>

***

## EVM

Correctness fixes for fork state-snapshot lookups and CREATE address preservation in isolation mode.

<details open>
<summary><b>EVM fixes (2 PRs)</b></summary>

* fix(evm): query `state_snapshot.storage` in `ForkDbStateSnapshot::storage_ref` ([#14007](https://github.com/foundry-rs/foundry/pull/14007)) by @gutonosa
* fix(evm): preserve `CREATE` address on revert in isolation mode ([#14637](https://github.com/foundry-rs/foundry/pull/14637)) by @mablr

</details>

***

## Forge

Tempo's `forge init` template now uses `network = "tempo"` with populated default `rpc_endpoints`, `forge test` ignores `ETH_RPC_URL` for forking, `--fuzz-seed` is finally honored by `forge coverage`, and Tempo creates are encoded as AA calls.

<details open>
<summary><b>Forge changes (4 PRs)</b></summary>

* feat(forge): use `network = "tempo"` and add `rpc_endpoints` in tempo template ([#14528](https://github.com/foundry-rs/foundry/pull/14528)) by @zerosnacks
* fix(forge): ignore `ETH_RPC_URL` for test forking ([#14555](https://github.com/foundry-rs/foundry/pull/14555)) by @figtracer
* fix(forge): encode Tempo creates as AA calls ([#14585](https://github.com/foundry-rs/foundry/pull/14585)) by @figtracer
* fix(forge): `--fuzz-seed` parameter is not effective in `forge coverage` ([#14610](https://github.com/foundry-rs/foundry/pull/14610)) by @wtdcode

</details>

***

## Cast

Consistent `--json` output shapes for the `keychain` subcommands.

<details open>
<summary><b>Cast fixes (1 PR)</b></summary>

* fix(cast): consistent `--json` output for `keychain` subcommands ([#14590](https://github.com/foundry-rs/foundry/pull/14590)) by @mablr

</details>

***

## Config

The `network = "tempo"` key no longer triggers the unknown-key warning, and serialization of `NetworkConfigs` is canonicalized so `forge config` always emits the resolved network.

<details open>
<summary><b>Config fixes (1 PR)</b></summary>

* fix(config): suppress spurious unknown-key warning for `network` ([#14534](https://github.com/foundry-rs/foundry/pull/14534)) by @zerosnacks

</details>

***

## CLI

Fixes the `jsonwebtoken` `CryptoProvider` startup panic by selecting `aws_lc_rs` at compile time, and corrects release version metadata for immutable tags. Also bumps the version to `1.7.1` and tightens `vm.getFoundryVersion()` / `foundryVersionCmp` / `foundryVersionAtLeast` to tolerate the new SemVer build-metadata format.

<details open>
<summary><b>CLI fixes (2 PRs)</b></summary>

* fix(cli): fix `jsonwebtoken` panic ([#14562](https://github.com/foundry-rs/foundry/pull/14562)) by @pepyakin
* fix(cli): fix release version strings for immutable tags, bump to 1.7.1 ([#14496](https://github.com/foundry-rs/foundry/pull/14496)) by @decofe

</details>

***

## CI / Release pipeline

Release archives and Docker images are now signed with `cosign`, per-archive SHA256 + SPDX SBOMs (Syft) are emitted, and Sigstore-signed SLSA provenance attestations are published. The Tempo CI workflow on `release-1.7.1` was realigned with master.

<details open>
<summary><b>CI changes (3 PRs)</b></summary>

* ci: sign release archives, docker images, and publish SBOMs ([#14563](https://github.com/foundry-rs/foundry/pull/14563)) by @grandizzy
* fix(ci): increase permissions for the enhanced attestation writing ([#14584](https://github.com/foundry-rs/foundry/pull/14584)) by @zerosnacks
* fix(ci): use `PATH_USD` fallback fee token in Mail templates ([#14546](https://github.com/foundry-rs/foundry/pull/14546)) by @mablr

</details>

***

## Tests & Tooling

Compiler bumped to `0.8.35` for tests, `forge-std` test fixtures bumped to a newer rev, and clippy lints fixed under newer toolchains so CI is green on this branch.

<details open>
<summary><b>Tests & tooling changes (3 PRs)</b></summary>

* chore: bump compiler version to 0.8.35 for tests ([#14524](https://github.com/foundry-rs/foundry/pull/14524)) by @zerosnacks
* fix(ext): bump forge-std commit in external integration tests ([#14504](https://github.com/foundry-rs/foundry/pull/14504)) by @zerosnacks
* chore(tests): bump forge-std version ([#14510](https://github.com/foundry-rs/foundry/pull/14510))
* chore(clippy): fix `for_kv_map` and `useless_borrows_in_formatting` ([#14554](https://github.com/foundry-rs/foundry/pull/14554)) by @stevencartavia

</details>

***

## Notes on the cherry-pick

* **#14590** was cherry-picked partially: the `{ "remaining": ... }` JSON output object change is included; the new `crates/cast/tests/cli/keychain.rs` test file is **not**, because the `keychain_rl_json_is_object` test depends on Tempo deps newer than this branch.
* The Tempo CI workflow alignment is a backport of #14501, #14537, and #14556 from `master`. The `Check Tempo fork schedule compatibility` step is intentionally omitted — the underlying `tempo::tests::test_fork_schedule_parses_configured_rpcs` test was added in #14485 (Tempo deps bump) which is not part of v1.7.1.

***

## Full Changelog

[v1.7.0...v1.7.1](https://github.com/foundry-rs/foundry/compare/v1.7.0...v1.7.1)

## v1.7.0 (2026-04-28)

# Foundry v1.7.0

Foundry v1.7.0 brings major improvements to fuzzing and invariant testing, upstreams [Tempo](https://tempo.xyz/) support into the main Foundry toolchain, adds support for HTTP `402`-gated RPC endpoints through MPP, improves browser-wallet and batching workflows across Forge and Cast, and moves Foundry releases to an immutable versioning model.

> v1.7.0 folds in the previously cut `v1.6.0-rc1` release candidate, which never shipped as stable, together with the changes merged since.

## Highlights

### Testing & Fuzzing

* **Parallelized stateless fuzzing** across worker threads with shared corpus ([#12713](https://github.com/foundry-rs/foundry/pull/12713))
* **Invariant `check_interval` config** — deep invariant runs up to **3.6× faster** with `check_interval = 10` ([#13133](https://github.com/foundry-rs/foundry/pull/13133))
* **Invariant optimization mode** — search input sequences that maximize a target value, with realtime best-value tracking and persistence ([#13196](https://github.com/foundry-rs/foundry/pull/13196), [#14147](https://github.com/foundry-rs/foundry/pull/14147), [#14226](https://github.com/foundry-rs/foundry/pull/14226))
* **Improved reentrancy detection** in `call_override` invariant testing ([#13127](https://github.com/foundry-rs/foundry/pull/13127))
* **Time-based invariant fuzzing** via `max_time_delay` / `max_block_delay` configs ([#12616](https://github.com/foundry-rs/foundry/pull/12616))

### Network Updates

* **Osaka is the default EVM hardfork** ([#13112](https://github.com/foundry-rs/foundry/pull/13112)), with precompile decoding for Prague BLS12-381 and Osaka P256VERIFY ([#13094](https://github.com/foundry-rs/foundry/pull/13094))
* **Per-network `hardfork` and `network` keys** in `foundry.toml` ([#14312](https://github.com/foundry-rs/foundry/pull/14312), [#14337](https://github.com/foundry-rs/foundry/pull/14337)), with auto-detection from a fork's chain ID ([#14193](https://github.com/foundry-rs/foundry/pull/14193))

### Tempo

**[Tempo](https://tempo.xyz/)** support has been upstreamed from the standalone [`tempoxyz/tempo-foundry`](https://github.com/tempoxyz/tempo-foundry) fork into `foundry-rs/foundry`. The fork is deprecated; a normal `foundryup` install now ships Tempo support in `forge`, `cast`, `anvil`, and `chisel`.

This is 110 merged PRs spanning execution, RPC, transaction signing and validation, the AA/access-key flow, TIP20 fee tokens, `cast keychain`, `forge create`/`script`/`test`/`coverage` integration, Anvil genesis + pool + tracing, and CI. Notable entry points include:

* `forge init --network tempo` ([#12819](https://github.com/foundry-rs/foundry/pull/12819))
* `cast keychain` for Tempo access keys ([#14166](https://github.com/foundry-rs/foundry/pull/14166), [#14222](https://github.com/foundry-rs/foundry/pull/14222))
* `cast tip20 create` and TIP20 virtual address salt mining ([#14160](https://github.com/foundry-rs/foundry/pull/14160), [#14365](https://github.com/foundry-rs/foundry/pull/14365))
* `--tempo.fee-token` on `forge script` and `cast send` ([#14204](https://github.com/foundry-rs/foundry/pull/14204), [#14184](https://github.com/foundry-rs/foundry/pull/14184))
* Tempo network auto-detection on `anvil --fork-url` ([#14279](https://github.com/foundry-rs/foundry/pull/14279))

Full list in the Tempo section below.

### MPP (Machine Payments Protocol)

Foundry now supports **[MPP](https://mpp.dev/) (Machine Payments Protocol)** for HTTP `402`-gated RPC endpoints. When an RPC provider returns `402`, Foundry signs and pays the challenge with the configured wallet, then retries the request — no API keys or upfront provisioning. A built-in URL mapping covers known providers, and a WebSocket transport handles long-lived subscriptions over paid connections ([#14192](https://github.com/foundry-rs/foundry/pull/14192), [#14404](https://github.com/foundry-rs/foundry/pull/14404), [#14353](https://github.com/foundry-rs/foundry/pull/14353)).

### Forge & Cast

* **Browser wallet support** across `forge script` ([#12952](https://github.com/foundry-rs/foundry/pull/12952)), `forge create` ([#14394](https://github.com/foundry-rs/foundry/pull/14394)), `cast send` ([#13747](https://github.com/foundry-rs/foundry/pull/13747)), and `cast erc20` ([#14395](https://github.com/foundry-rs/foundry/pull/14395)) — sign and broadcast transactions directly from a browser wallet extension instead of provisioning a hot key on disk
* **Realtime `console.log`** in `forge` and `chisel` ([#13321](https://github.com/foundry-rs/foundry/pull/13321)) and **`console.table`** support ([#14338](https://github.com/foundry-rs/foundry/pull/14338))
* `forge inspect <x> linearization` ([#13704](https://github.com/foundry-rs/foundry/pull/13704)) makes it easier to inspect where inherited functions are resolved from
* `forge clone` Sourcify support ([#12900](https://github.com/foundry-rs/foundry/pull/12900))
* `cast batch-send` / `batch-mktx` for native call batching ([#13973](https://github.com/foundry-rs/foundry/pull/13973))
* `cast --curl` flag to print equivalent curl commands ([#13114](https://github.com/foundry-rs/foundry/pull/13114))

### Cheatcodes & Lint

* New cheatcodes: `executeTransaction` ([#13437](https://github.com/foundry-rs/foundry/pull/13437)), `Ed25519` crypto ([#13450](https://github.com/foundry-rs/foundry/pull/13450)), `getRecordedLogsJson` ([#13093](https://github.com/foundry-rs/foundry/pull/13093)), `currentFilePath` ([#13735](https://github.com/foundry-rs/foundry/pull/13735))
* New `forge-lint` rules: incorrect ERC20 interface ([#14428](https://github.com/foundry-rs/foundry/pull/14428)), incorrect ERC721 interface ([#14412](https://github.com/foundry-rs/foundry/pull/14412)), `block-timestamp` ([#14431](https://github.com/foundry-rs/foundry/pull/14431)), and custom errors ([#13126](https://github.com/foundry-rs/foundry/pull/13126)). These catch incorrect ERC20/ERC721 interface implementations, timestamp-dependent logic, and custom-error usage issues.

***

## Benchmarks

> **Live dashboard: [getfoundry.sh/benchmarks](https://www.getfoundry.sh/benchmarks)**

Headline wins per command, comparing v1.5.1 against the v1.7.0 release-cycle build:

| Command | Repository | v1.5.1 | v1.7.0 | Delta |
|---|---|---|---|---|
| `forge test` | `aave/aave-v4` | 4m 14.2s | **3m 29.1s** | ~45s faster |
| `forge fuzz` | `ithacaxyz/account` | 2.81s | **1.59s** | **~1.8× faster** |
| `forge test --isolated` | `aave/aave-v4` | 4m 14.0s | **3m 53.4s** | ~20s faster |
| `forge coverage` | `aave/aave-v4` | 11m 20.8s | **10m 58.7s** | ~22s faster |

Raw data: [`benches/LATEST.md`](https://github.com/foundry-rs/foundry/blob/master/benches/LATEST.md).

<details>
<summary><b>Performance-related features (22 PRs)</b></summary>

* perf: add dist profile for smaller release binaries ([#13097](https://github.com/foundry-rs/foundry/pull/13097)) by @onbjerg
* perf: compute literals only once ([#12716](https://github.com/foundry-rs/foundry/pull/12716)) by @DaniPopes
* perf: remove redundant allocation in receipt bloom calculation ([#13035](https://github.com/foundry-rs/foundry/pull/13035)) by @marukai67
* perf(forge): skip external identifiers for local tests ([#13189](https://github.com/foundry-rs/foundry/pull/13189)) by @gakonst
* perf(anvil): avoid redundant block queries in `ots_getBlockTransactions` ([#13243](https://github.com/foundry-rs/foundry/pull/13243)) by @aganisgash
* perf(evm): wrap `Executor.backend` in `Arc` for copy-on-write cloning ([#13327](https://github.com/foundry-rs/foundry/pull/13327)) by @gakonst
* perf(cheatcodes): loop invariant code motion by hand ([#13357](https://github.com/foundry-rs/foundry/pull/13357)) by @cuiweixie
* perf(linking): replace double hash map lookup with single `get` ([#13361](https://github.com/foundry-rs/foundry/pull/13361)) by @cuiweixie
* perf(anvil): reuse storage root from `prove_storage` instead of recomputing ([#13363](https://github.com/foundry-rs/foundry/pull/13363)) by @thunggis
* perf(verify): reuse transaction from earlier RPC call instead of fetching twice ([#13391](https://github.com/foundry-rs/foundry/pull/13391)) by @thunggis
* perf: avoid checksum ([#13374](https://github.com/foundry-rs/foundry/pull/13374)) by @cuiweixie
* perf(invariant): avoid cloning state changeset in fuzz runs ([#13398](https://github.com/foundry-rs/foundry/pull/13398)) by @thunggis
* perf(traces): deduplicate addresses before external fetching ([#13320](https://github.com/foundry-rs/foundry/pull/13320)) by @marukai67
* perf(primitives): avoid cloning receipts ([#13396](https://github.com/foundry-rs/foundry/pull/13396)) by @thunggis
* perf(config): skip redundant remapping detection in `_with_root` ([#13389](https://github.com/foundry-rs/foundry/pull/13389)) by @0xMars42
* perf(anvil): avoid redundant cloning and hash recomputation in mem backend ([#13744](https://github.com/foundry-rs/foundry/pull/13744)) by @edgarr1986
* perf(anvil): remove redundant clone in `create_access_list` ([#13887](https://github.com/foundry-rs/foundry/pull/13887)) by @edgarr1986
* perf(evm): make `NestedEvm::to_evm_env` consuming to avoid useless clone ([#13893](https://github.com/foundry-rs/foundry/pull/13893)) by @mablr
* perf(evm): remove unnecessary clones in `do_call_end`/`do_create_end` ([#13913](https://github.com/foundry-rs/foundry/pull/13913)) by @figtracer
* perf(evm): remove `EvmEnv`/`TxEnv` cloning in DBs & `CheatcodesExecutor` impls ([#13960](https://github.com/foundry-rs/foundry/pull/13960)) by @mablr
* perf(traces): skip precompile addresses in `identify_addresses` ([#14198](https://github.com/foundry-rs/foundry/pull/14198)) by @decofe
* feat: make `asm-keccak` a default feature in all binaries ([#14389](https://github.com/foundry-rs/foundry/pull/14389)) by @DaniPopes

</details>

***

## Breaking / Behavior Changes

* `forge` and `anvil` now default to Osaka ([#13112](https://github.com/foundry-rs/foundry/pull/13112)).
* Fuzz tests now use a random seed by default when none is provided ([#13309](https://github.com/foundry-rs/foundry/pull/13309)).
* `copyStorage` and `setArbitraryStorage` are now marked `Unsafe` ([#13882](https://github.com/foundry-rs/foundry/pull/13882)).
* Compilation now fails on unresolved imports instead of continuing ([#12848](https://github.com/foundry-rs/foundry/pull/12848)).
* `foundry.toml` now supports per-network `hardfork` selection and an explicit `network` key ([#14312](https://github.com/foundry-rs/foundry/pull/14312), [#14337](https://github.com/foundry-rs/foundry/pull/14337)); forked runs can also auto-detect the active network from chain ID ([#14193](https://github.com/foundry-rs/foundry/pull/14193)).

***

## Upgrade Notes

* Run `forge build` after upgrading. Compilation now fails on unresolved imports instead of silently continuing ([#12848](https://github.com/foundry-rs/foundry/pull/12848)) — projects with stale remappings or dead imports that previously compiled may now error. Fix by correcting the remapping or removing the dead import.
* If you rely on reproducible fuzz runs, pin a fuzz seed explicitly. v1.7.0 now generates a random seed when none is provided ([#13309](https://github.com/foundry-rs/foundry/pull/13309)).
* If you rely on `copyStorage` or `setArbitraryStorage`, update tests and helpers to account for these cheatcodes now being marked `Unsafe` ([#13882](https://github.com/foundry-rs/foundry/pull/13882)).
* If you previously configured a single `hardfork`, migrate to the new `network` / per-network `hardfork` settings ([#14312](https://github.com/foundry-rs/foundry/pull/14312), [#14337](https://github.com/foundry-rs/foundry/pull/14337)). Forked runs can also infer the active network from chain ID ([#14193](https://github.com/foundry-rs/foundry/pull/14193)).

***

## Testing & Fuzzing

### Parallelized Stateless Fuzzing ([#12713](https://github.com/foundry-rs/foundry/pull/12713))

Stateless fuzz tests now run across multiple worker threads, significantly improving execution speed on multi-core machines. Each worker maintains its own corpus and periodically syncs with a master corpus, enabling efficient parallel exploration while sharing discovered coverage. Workers automatically distribute runs evenly and aggregate results after completion. Stateful (invariant) tests are not parallelized in this release.

### Invariant `check_interval` Config ([#13133](https://github.com/foundry-rs/foundry/pull/13133))

A new `check_interval` config option controls how often invariants are asserted during deep runs:

| Value | Behavior |
|-------|----------|
| `0` | Only assert on the last call of each run (fastest) |
| `1` (default) | Assert after every call (current behavior, most precise) |
| `N` | Assert every N calls AND always on the last call |

```toml
[invariant]
depth = 1000
check_interval = 10
```

**Benchmark**: With `check_interval = 10`, deep invariant runs (1×1000 depth) are **3.6× faster** (15.09s → 4.17s).

> Caveat: with `check_interval > 1`, an invariant that is violated and then restored between checks can be missed.

### Invariant Optimization Mode ([#13196](https://github.com/foundry-rs/foundry/pull/13196), [#14147](https://github.com/foundry-rs/foundry/pull/14147), [#14226](https://github.com/foundry-rs/foundry/pull/14226))

Define an `invariant_*` function that returns `int256` and the fuzzer searches for the call sequence that maximizes it. Useful for finding worst-case rounding errors, drained balances, max slippage, etc.

```solidity
function invariant_optimize_maxRoundingError() external view returns (int256) {
    return int256(pool.totalShares()) - int256(pool.expectedShares());
}
```

The best value and shrunk reproducer are tracked in realtime and persisted across runs.

### Improved Reentrancy Detection with `call_override` ([#13127](https://github.com/foundry-rs/foundry/pull/13127))

The `call_override` invariant testing feature now correctly detects ETH transfer reentrancy vulnerabilities, including:

* **EtherStore pattern**: classic DAO-style reentrancy where a handler sends ETH out and the attacker reenters
* **Rari Capital pattern**: protocol-level reentrancy where external protocols send ETH to handlers

Validated against a reproduction of the April 2022 Rari Capital hack.

### Time-based Invariant Fuzzing ([#12616](https://github.com/foundry-rs/foundry/pull/12616))

New `max_time_delay` and `max_block_delay` invariant configs enable fuzzing of block timestamp and block number on consecutive transactions. This helps discover time-dependent vulnerabilities that only manifest under specific block timing conditions. Counterexamples now display the `vm.warp()` and `vm.roll()` calls needed to reproduce failures.

### Other Testing Improvements

Smaller polish across the fuzzing and invariant pipeline: clearer reporting of assertion failures, faster feedback on broken invariants, more reliable counterexample replay, and broader fuzz coverage including native Rust code.

<details>
<summary><b>Other testing improvements (5 PRs)</b></summary>

* Assertion failures (`assert()`, `vm.assert*`, panics) are now reported as invariant failures during campaigns instead of being silently discarded with reverts ([#14275](https://github.com/foundry-rs/foundry/pull/14275))
* Broken invariants are logged as soon as they are found ([#14433](https://github.com/foundry-rs/foundry/pull/14433))
* Counterexample validation now uses settings rather than bytecode ([#13219](https://github.com/foundry-rs/foundry/pull/13219))
* SanitizerCoverage support for coverage-guided fuzzing of native Rust code ([#14339](https://github.com/foundry-rs/foundry/pull/14339))
* Address mutation variant added to fuzz dictionary selection ([#13090](https://github.com/foundry-rs/foundry/pull/13090))

</details>

***

## Network Updates

### Multi-Network Execution

The entire `foundry-evm` and `anvil` stack has been genericized over `Network`, `Spec`, `Block`, and `EvmFactory`, allowing one Foundry binary to drive **Ethereum, Optimism, and Tempo** through the same execution path. See the Internals section below for the full list of refactor PRs.

Notable consequences:

* A new `network` key in `foundry.toml` and per-network `hardfork` selection ([#14337](https://github.com/foundry-rs/foundry/pull/14337), [#14312](https://github.com/foundry-rs/foundry/pull/14312))
* Auto-detection of the active network from a fork's chain ID ([#14193](https://github.com/foundry-rs/foundry/pull/14193))

```toml
[profile.default]
tempo = true              # marks Tempo as the active non-Ethereum network
hardfork = "tempo:T3"     # namespaced hardfork; bare names like "osaka" still work for Ethereum
```

Hardforks can also be set per-test via inline config:

```solidity
/// forge-config: default.hardfork = "tempo:T3"
function test_something() public { ... }
```

`forge init --network tempo` writes the `tempo = true` key for you. Forked runs (`forge test --fork-url ...`) infer the network from chain ID, so the network key is only required when there is no fork to infer from.

### Other Chain Support

Per-chain quirks landed across XDC, SKALE, Polkadot, Optimism, Monad, MegaETH, Arbitrum, and Etherlink — covering RPC gas estimation, base-fee parameters, system-tx senders, and fork block pinning.

<details>
<summary><b>Other chain support (8 PRs)</b></summary>

* XDC Network + SKALE Base ([#12710](https://github.com/foundry-rs/foundry/pull/12710))
* Polkadot, Kusama, and Polkadot Testnet RPC gas estimation ([#12537](https://github.com/foundry-rs/foundry/pull/12537))
* Network-specific `BaseFeeParams` for Optimism in Anvil ([#12944](https://github.com/foundry-rs/foundry/pull/12944))
* Monad mainnet gas calculation + system address constant ([#12615](https://github.com/foundry-rs/foundry/pull/12615), [#12585](https://github.com/foundry-rs/foundry/pull/12585))
* MegaETH system tx sender + gas calc ([#14149](https://github.com/foundry-rs/foundry/pull/14149), [#13999](https://github.com/foundry-rs/foundry/pull/13999))
* Arbitrum fork block-number pinning ([#14021](https://github.com/foundry-rs/foundry/pull/14021))
* Etherlink testnet → shadownet rename ([#13763](https://github.com/foundry-rs/foundry/pull/13763))
* RPC URL bump: ithaca.xyz → reth.rs ([#13261](https://github.com/foundry-rs/foundry/pull/13261))

</details>

***

## Improved Integration

### Immutable Releases ([#14445](https://github.com/foundry-rs/foundry/pull/14445))

Foundry releases are now fully immutable. The mutable `nightly`, `stable`, and `rc` Git tags are gone — only semver tags (`v*.*.*`) and per-commit `nightly-{SHA}` releases exist.

For `foundryup` users:

* `latest` is the new default channel (alias: `stable`).
* `nightly` resolves to the most recent `nightly-{SHA}` prerelease.
* Pinning to a specific build (`foundryup -i v1.7.0` or `foundryup -i nightly-abc1234`) continues to work and is now permanently reproducible.

Docker tags follow the same model: version releases get `:v1.7.0`, `:v1.7`, `:v1`; nightlies are tagged as `nightly-{SHA}`.

### Foundryup Rust Rewrite (Experimental)

This release is accompanied by a new Rust rewrite of [`foundryup`](https://github.com/foundry-rs/foundryup) for better maintainability, testing, and compatibility. The rewrite is still experimental; the existing installer remains the recommended path for now. To try the new `foundryup`:

```bash
curl -L https://raw.githubusercontent.com/foundry-rs/foundryup/HEAD/foundryup-init.sh | bash
foundryup
```

### Foundry-toolchain TypeScript Rewrite

The [`foundry-toolchain`](https://github.com/foundry-rs/foundry-toolchain) GitHub Action has been completely rewritten in TypeScript for improved maintainability and reliability. See the [v1.7.0 release](https://github.com/foundry-rs/foundry-toolchain/releases/tag/v1.7.0).

### `foundry-core`

The previously standalone `foundry-fork-db`, `foundry-compilers`, `foundry-block-explorers` (+ `foundry-blob-explorers`), and `foundry-wallets` crates are now maintained under [`foundry-rs/foundry-core`](https://github.com/foundry-rs/foundry-core) and consumed as published crates ([#14348](https://github.com/foundry-rs/foundry/pull/14348), [#14427](https://github.com/foundry-rs/foundry/pull/14427), [#14443](https://github.com/foundry-rs/foundry/pull/14443)).

### Other Integration Changes

Hardening of the publishing pipeline: trusted OIDC for npm and proper semver floating tags for Docker.

<details>
<summary><b>Other integration changes (2 PRs)</b></summary>

* OIDC trusted publishing for npm, removing the long-lived `NPM_TOKEN` ([#14249](https://github.com/foundry-rs/foundry/pull/14249))
* Docker semver major/minor floating tags on release ([#13182](https://github.com/foundry-rs/foundry/pull/13182))

</details>

***

## Tempo

Full PR breakdown for the Tempo upstreaming.

<details>
<summary><b>Fork deprecation, CI upstreaming & <code>foundryup</code></b></summary>

* feat(ci): upstream Tempo CI ([#14206](https://github.com/foundry-rs/foundry/pull/14206)) by @mablr
* feat(ci): upstream `bump-tempo` workflow ([#14323](https://github.com/foundry-rs/foundry/pull/14323)) by @mablr
* ci: consolidate tempo branch workflows ([#14341](https://github.com/foundry-rs/foundry/pull/14341)) by @decofe
* revert: remove tempo branch workflow, restore `bump-tempo` ([#14343](https://github.com/foundry-rs/foundry/pull/14343)) by @decofe
* fix(ci): handle stale branches in `bump-tempo` workflow ([#14377](https://github.com/foundry-rs/foundry/pull/14377)) by @decofe
* ci(tempo): run testnet on PRs ([#14479](https://github.com/foundry-rs/foundry/pull/14479)) by @zerosnacks
* chore(foundryup): remove tempo fork support ([#14324](https://github.com/foundry-rs/foundry/pull/14324)) by @figtracer
* foundryup: tempo now distributes all binaries ([#13337](https://github.com/foundry-rs/foundry/pull/13337)) by @gakonst
* fix(foundryup): tempo-foundry now ships all binaries ([#13834](https://github.com/foundry-rs/foundry/pull/13834)) by @zerosnacks

</details>

<details>
<summary><b>Onboarding & project setup</b></summary>

* feat(`foundryup`): add Tempo support ([#12775](https://github.com/foundry-rs/foundry/pull/12775)) by @zerosnacks
* feat(forge): add `--network tempo` flag to `forge init` ([#12819](https://github.com/foundry-rs/foundry/pull/12819)) by @onbjerg
* fix(foundryup): support versioned installs for tempo network ([#13607](https://github.com/foundry-rs/foundry/pull/13607)) by @decofe
* fix(`foundryup`): bump foundryup version ([#13832](https://github.com/foundry-rs/foundry/pull/13832)) by @zerosnacks
* feat(init): add `SignatureVerifier` to tempo example ([#14351](https://github.com/foundry-rs/foundry/pull/14351)) by @0xrusowsky
* fix: remove `network: tempo` from Tempo template ([#14424](https://github.com/foundry-rs/foundry/pull/14424)) by @zerosnacks
* chore(cli): update tempo `nonceKey` cli flag naming ([#14188](https://github.com/foundry-rs/foundry/pull/14188)) by @mablr

</details>

<details>
<summary><b>Execution path & EVM integration</b></summary>

* feat(evm): Add Tempo flag to `NetworkConfigs` ([#13953](https://github.com/foundry-rs/foundry/pull/13953)) by @stevencartavia
* feat(evm): add `FoundryHardfork::Tempo` variant ([#13972](https://github.com/foundry-rs/foundry/pull/13972)) by @stevencartavia
* feat(anvil): add Tempo config helpers ([#13968](https://github.com/foundry-rs/foundry/pull/13968)) by @stevencartavia
* feat(anvil): add tempo genesis initialization ([#14014](https://github.com/foundry-rs/foundry/pull/14014)) by @stevencartavia
* feat(anvil): wire tempo genesis initialization ([#14030](https://github.com/foundry-rs/foundry/pull/14030)) by @stevencartavia
* feat(anvil): add Tempo EVM execution path ([#14031](https://github.com/foundry-rs/foundry/pull/14031)) by @stevencartavia
* feat(evm): add tmp `TempoFoundryEvm` wrapper ([#14022](https://github.com/foundry-rs/foundry/pull/14022)) by @figtracer
* feat(evm): `FoundryContextExt` Tempo impl ([#14002](https://github.com/foundry-rs/foundry/pull/14002)) by @mablr
* feat(evm): expand `FoundryTransaction` with Tempo methods ([#14005](https://github.com/foundry-rs/foundry/pull/14005)) by @figtracer
* feat(evm): expand `FoundryBlock` with Tempo methods ([#14004](https://github.com/foundry-rs/foundry/pull/14004)) by @figtracer
* feat(evm): `TryAnyToTxEnv` Tempo impl ([#14011](https://github.com/foundry-rs/foundry/pull/14011)) by @mablr
* feat(evm): add Tempo precompile initialization ([#14082](https://github.com/foundry-rs/foundry/pull/14082)) by @figtracer
* feat: add missing Tempo precompile addresses ([#14111](https://github.com/foundry-rs/foundry/pull/14111)) by @stevencartavia
* chore(evm): import `PATH_USD_ADDRESS` from `tempo-contracts` ([#14071](https://github.com/foundry-rs/foundry/pull/14071)) by @figtracer
* chore(evm): rename `FoundryStorageProvider` to `TempoStorageProvider` ([#14080](https://github.com/foundry-rs/foundry/pull/14080)) by @figtracer
* feat(evm): auto-detect Tempo network on Anvil ([#14279](https://github.com/foundry-rs/foundry/pull/14279)) by @mablr
* feat(anvil): support Tempo hardfork parsing ([#14096](https://github.com/foundry-rs/foundry/pull/14096)) by @stevencartavia
* feat(anvil): store `FoundryHardfork` on `Backend` ([#14105](https://github.com/foundry-rs/foundry/pull/14105)) by @stevencartavia
* feat(anvil): add Tempo-specific block header fields ([#14107](https://github.com/foundry-rs/foundry/pull/14107)) by @stevencartavia
* feat(anvil): expose network field in `anvil_nodeInfo` ([#14093](https://github.com/foundry-rs/foundry/pull/14093)) by @stevencartavia
* feat(anvil): RPC methods for tempo's `TipFeeManager` in `anvil_*` namespace ([#14414](https://github.com/foundry-rs/foundry/pull/14414)) by @mablr
* feat(evm): add Tempo labels/fns/events to `CallTraceDecoder` ([#14213](https://github.com/foundry-rs/foundry/pull/14213)) by @mablr
* feat(evm): add `TempoLabels` inspector for TIP20 token names ([#14072](https://github.com/foundry-rs/foundry/pull/14072)) by @figtracer
* fix(anvil): pass configured hardfork to Tempo precompile init ([#14131](https://github.com/foundry-rs/foundry/pull/14131)) by @stevencartavia
* fix(anvil): guard deposit tx parsing in Tempo mode ([#14261](https://github.com/foundry-rs/foundry/pull/14261)) by @stevencartavia
* fix(evm): update `alloy-chains` + `TempoDevnet` handling ([#14309](https://github.com/foundry-rs/foundry/pull/14309)) by @mablr
* feat: use `ChannelDb` for channel persistence ([#14355](https://github.com/foundry-rs/foundry/pull/14355)) by @stevencartavia

</details>

<details>
<summary><b>Transactions, pool & gas</b></summary>

* feat(anvil): basic tempo tx signing support ([#12974](https://github.com/foundry-rs/foundry/pull/12974)) by @onbjerg
* feat(anvil): support Tempo transactions in RPC and validation ([#14041](https://github.com/foundry-rs/foundry/pull/14041)) by @stevencartavia
* feat(anvil): fix Tempo transaction replay and tracing ([#14039](https://github.com/foundry-rs/foundry/pull/14039)) by @stevencartavia
* feat(anvil): extract base eth errors from `TempoInvalidTransaction` ([#14040](https://github.com/foundry-rs/foundry/pull/14040)) by @stevencartavia
* feat(anvil): add Tempo transaction pool validation ([#14055](https://github.com/foundry-rs/foundry/pull/14055)) by @stevencartavia
* feat(anvil): add Tempo async pool validation (time bounds + fee token balance) ([#14057](https://github.com/foundry-rs/foundry/pull/14057)) by @stevencartavia
* feat(anvil): use hash-based pool ordering for Tempo transactions ([#14060](https://github.com/foundry-rs/foundry/pull/14060)) by @stevencartavia
* feat(anvil): Tempo base fee defaults ([#14067](https://github.com/foundry-rs/foundry/pull/14067)) by @stevencartavia
* feat(anvil): Tempo gas estimation guards ([#14068](https://github.com/foundry-rs/foundry/pull/14068)) by @stevencartavia
* feat(anvil): handle `not-yet-valid` transactions during mining ([#14069](https://github.com/foundry-rs/foundry/pull/14069)) by @stevencartavia
* feat(anvil): add `feePayer` to Tempo receipts ([#14109](https://github.com/foundry-rs/foundry/pull/14109)) by @stevencartavia
* feat(anvil): auto-fill gas fields for Tempo AA transactions ([#14142](https://github.com/foundry-rs/foundry/pull/14142)) by @stevencartavia
* refactor(anvil): extract `InspectorTxConfig` and `PoolTxGasConfig` builders ([#14152](https://github.com/foundry-rs/foundry/pull/14152)) by @stevencartavia
* fix(anvil): parse Tempo expiring nonce fields from hex strings ([#14259](https://github.com/foundry-rs/foundry/pull/14259)) by @figtracer

</details>

<details>
<summary><b>Wallets, keychain & access keys</b></summary>

* feat(cast): tempo nonce keys ([#12977](https://github.com/foundry-rs/foundry/pull/12977)) by @onbjerg
* feat(cast): add tempo tx construction support ([#12973](https://github.com/foundry-rs/foundry/pull/12973)) by @onbjerg
* feat: Tempo wallet access key support for cast ([#13909](https://github.com/foundry-rs/foundry/pull/13909)) by @onbjerg
* feat(forge-script): Tempo access key support for forge script ([#13917](https://github.com/foundry-rs/foundry/pull/13917)) by @stevencartavia
* feat(common): add Tempo wallet keystore types ([#13975](https://github.com/foundry-rs/foundry/pull/13975)) by @figtracer
* feat(cast): introduce `cast keychain` ([#14166](https://github.com/foundry-rs/foundry/pull/14166)) by @figtracer
* feat(cast): full `cast keychain` suite ([#14222](https://github.com/foundry-rs/foundry/pull/14222)) by @figtracer
* feat(wallets): add `--tempo.access-key` and `--tempo.root-account` ([#14201](https://github.com/foundry-rs/foundry/pull/14201)) by @figtracer
* feat(forge): `forge create` Tempo keychain support ([#14185](https://github.com/foundry-rs/foundry/pull/14185)) by @figtracer
* refactor(cast): fold `run_tempo_keychain` into `run_generic` as `AccessKey` case ([#14137](https://github.com/foundry-rs/foundry/pull/14137)) by @mablr
* refactor(common): unify `sign_with_access_key` with provisioning check ([#14189](https://github.com/foundry-rs/foundry/pull/14189)) by @figtracer
* feat(common): `FoundryTransactionBuilder::sign_with_access_key` method ([#14120](https://github.com/foundry-rs/foundry/pull/14120)) by @mablr
* fix(cast): `keychain auth` legacy mode w/ forks before T3 ([#14311](https://github.com/foundry-rs/foundry/pull/14311)) by @mablr
* test(cast): add keychain parsing unit tests, enforce `deny_unknown_fields` ([#14322](https://github.com/foundry-rs/foundry/pull/14322)) by @figtracer

</details>

<details>
<summary><b>TIP20 / fee token</b></summary>

* feat(cast): add `ISO 4217` validation for `TIP-20` ([#14158](https://github.com/foundry-rs/foundry/pull/14158)) by @figtracer
* feat(cast): add `cast tip20 create` ([#14160](https://github.com/foundry-rs/foundry/pull/14160)) by @figtracer
* feat(cast): `cast send` ISO 4217 validation for `TIP20Factory` ([#14184](https://github.com/foundry-rs/foundry/pull/14184)) by @figtracer
* feat(cast): mine TIP20 virtual address master salt ([#14365](https://github.com/foundry-rs/foundry/pull/14365)) by @0xrusowsky
* feat(script): add `--tempo.fee-token` to `forge script` ([#14204](https://github.com/foundry-rs/foundry/pull/14204)) by @figtracer
* feat(cli): `--tempo.fee-token` token id parsing ([#14219](https://github.com/foundry-rs/foundry/pull/14219)) by @mablr
* feat(forge): propagate `fee_token` to `deploy_tokens` in `CreateArgs::deploy` ([#14221](https://github.com/foundry-rs/foundry/pull/14221)) by @mablr
* fix(evm): proper `fee_token` handling in `InspectorHandler` & `Cheatcodes` ([#14225](https://github.com/foundry-rs/foundry/pull/14225)) by @mablr
* feat(evm): tempo genesis init and fork warmup into `FoundryEvmFactory` ([#14159](https://github.com/foundry-rs/foundry/pull/14159)) by @mablr

</details>

<details>
<summary><b>Forge / Cast / Script integration</b></summary>

* feat(forge): `forge test/coverage` Tempo support ([#14165](https://github.com/foundry-rs/foundry/pull/14165)) by @mablr
* feat(script): add `--batch` flag for Tempo native batching ([#14167](https://github.com/foundry-rs/foundry/pull/14167)) by @mablr
* feat(forge,cast): auto-detect network from fork chain ID ([#14193](https://github.com/foundry-rs/foundry/pull/14193)) by @mablr
* fix(script): Tempo direct signer + gas calc logic ([#14242](https://github.com/foundry-rs/foundry/pull/14242)) by @mablr
* fix(forge): `script`/`test` Tempo selection when used w/ Anvil ([#14258](https://github.com/foundry-rs/foundry/pull/14258)) by @mablr
* fix(script): skip `deploy_create2_deployer` in tempo mode to avoid `CreateCollision` ([#14336](https://github.com/foundry-rs/foundry/pull/14336)) by @mablr
* fix(evm): enforce tx gas limits in `executeTransaction` ([#14318](https://github.com/foundry-rs/foundry/pull/14318)) by @0xrusowsky
* feat(config): support network-specific `hardfork` in `foundry.toml` ([#14312](https://github.com/foundry-rs/foundry/pull/14312)) by @0xrusowsky
* feat(config): `network` key in `foundry.toml` ([#14337](https://github.com/foundry-rs/foundry/pull/14337)) by @mablr

</details>

<details>
<summary><b>Tests, deps & docs</b></summary>

* feat(anvil): add Tempo genesis and basic behavior tests ([#14112](https://github.com/foundry-rs/foundry/pull/14112)) by @stevencartavia
* feat(anvil): add Tempo AA transaction tests ([#14127](https://github.com/foundry-rs/foundry/pull/14127)) by @stevencartavia
* feat(anvil): add Tempo anvil API tests ([#14140](https://github.com/foundry-rs/foundry/pull/14140)) by @stevencartavia
* feat(anvil): add TIP20 token operation tests ([#14169](https://github.com/foundry-rs/foundry/pull/14169)) by @stevencartavia
* feat(anvil): add Tempo anvil control and block/chain tests ([#14171](https://github.com/foundry-rs/foundry/pull/14171)) by @stevencartavia
* feat(anvil): add Tempo AA transaction tests (additional coverage) ([#14173](https://github.com/foundry-rs/foundry/pull/14173)) by @stevencartavia
* feat(anvil): add Tempo gas estimation and tx type tests ([#14197](https://github.com/foundry-rs/foundry/pull/14197)) by @stevencartavia
* feat(anvil): add Tempo gas and fee tests ([#14124](https://github.com/foundry-rs/foundry/pull/14124)) by @stevencartavia
* feat(ci): add Tempo test contract support files ([#14205](https://github.com/foundry-rs/foundry/pull/14205)) by @figtracer
* chore(deps): bump tempo dependencies to `39b9262` ([#14345](https://github.com/foundry-rs/foundry/pull/14345)) by @decofe
* chore(tempo): bump rev + use extension traits ([#14378](https://github.com/foundry-rs/foundry/pull/14378)) by @decofe
* chore(evm): remove tempo deadcode ([#14146](https://github.com/foundry-rs/foundry/pull/14146)) by @mablr
* chore(cast): remove `src/tempo.rs`, inline helpers ([#14162](https://github.com/foundry-rs/foundry/pull/14162)) by @figtracer
* docs: correct Tempo TIP-1022 documentation URL ([#14387](https://github.com/foundry-rs/foundry/pull/14387)) by @DaniPopes
* fix(forge): update Mail templates for `createToken` salt parameter ([#14164](https://github.com/foundry-rs/foundry/pull/14164)) by @mablr

</details>

***

## MPP (Machine Payments Protocol)

Full PR breakdown for end-to-end MPP support — `402` challenge handling, retry logic, a built-in RPC URL mapping, a WebSocket transport for paid subscriptions, and dedicated CI coverage.

<details>
<summary><b>MPP changes (6 PRs)</b></summary>

* feat: add MPP support for 402-gated RPC endpoints ([#14192](https://github.com/foundry-rs/foundry/pull/14192)) by @decofe
* fix(mpp): fetch fresh challenge on verification-failed key provisioning retry ([#14347](https://github.com/foundry-rs/foundry/pull/14347)) by @zerosnacks
* chore(mpp): add built-in rpc url mapping ([#14353](https://github.com/foundry-rs/foundry/pull/14353)) by @zerosnacks
* feat(common): add MPP WebSocket transport ([#14404](https://github.com/foundry-rs/foundry/pull/14404)) by @stevencartavia
* ci: split MPP e2e into its own workflow ([#14468](https://github.com/foundry-rs/foundry/pull/14468)) by @zerosnacks
* ci: prefer direct-key credentials for MPP e2e ([#14472](https://github.com/foundry-rs/foundry/pull/14472)) by @zerosnacks

</details>

***

## Forge

### Features

Headline Forge changes: Osaka becomes the default hardfork, browser-wallet signing extends to `forge script` / `forge create`, realtime `console.log` / `console.table`, random fuzz seeds by default, Sourcify support in `forge clone`, `forge inspect linearization`, and broader network/solc compatibility.

<details>
<summary><b>Forge features (15 PRs)</b></summary>

* feat: use Osaka as default EVM hardfork ([#13112](https://github.com/foundry-rs/foundry/pull/13112)) by @zerosnacks
* feat(forge selectors): cache selectors from abis ([#12742](https://github.com/foundry-rs/foundry/pull/12742)) by @JuaniRios
* feat(forge script): display contract name and function in tx output ([#13156](https://github.com/foundry-rs/foundry/pull/13156)) by @gakonst
* feat!(`forge script`): add `--interactive` flag for deploying with a single keypair ([#12608](https://github.com/foundry-rs/foundry/pull/12608)) by @zerosnacks
* feat: `forge verify-bytecode` automatically recompiles upon running ([#12651](https://github.com/foundry-rs/foundry/pull/12651)) by @Jds-23
* feat: add Sourcify support to `forge clone` ([#12900](https://github.com/foundry-rs/foundry/pull/12900)) by @avorylli
* feat: warn on `soldeer.lock` revision mismatch during build ([#12366](https://github.com/foundry-rs/foundry/pull/12366)) by @silvekkk
* feat(forge): generate random fuzz seed if none provided ([#13309](https://github.com/foundry-rs/foundry/pull/13309)) by @onbjerg
* feat: add `forge inspect <x> linearization` ([#13704](https://github.com/foundry-rs/foundry/pull/13704)) by @red-swan
* feat(forge): generic `Network` support for `forge create` ([#13733](https://github.com/foundry-rs/foundry/pull/13733)) by @figtracer
* feat(forge,chisel): realtime `console.log` ([#13321](https://github.com/foundry-rs/foundry/pull/13321)) by @quangloc99
* feat: support `console.table` ([#14338](https://github.com/foundry-rs/foundry/pull/14338)) by @ndavd
* feat(forge): add browser wallet support for `forge script` ([#12952](https://github.com/foundry-rs/foundry/pull/12952)) by @mablr
* feat(forge): browser wallet support for `create` subcommand ([#14394](https://github.com/foundry-rs/foundry/pull/14394)) by @mablr
* feat: support solc prereleases ([#12599](https://github.com/foundry-rs/foundry/pull/12599)) by @grandizzy

</details>

<details>
<summary><b>Forge fixes (22 PRs)</b></summary>

* fix: `svm` fails to download solc 0.8.33 on linux/arm64, bump `svm-rs` ([#13007](https://github.com/foundry-rs/foundry/pull/13007)) by @zerosnacks
* fix(forge): fail compilation on unresolved imports ([#12848](https://github.com/foundry-rs/foundry/pull/12848)) by @subwaycookiecrunch
* fix(forge): failing tests trigger early exit without `--fail-fast` ([#12785](https://github.com/foundry-rs/foundry/pull/12785)) by @0xferrous
* fix(forge): lookup path artifact if not in available artifacts ([#12927](https://github.com/foundry-rs/foundry/pull/12927)) by @grandizzy
* fix(forge): prevent gas underflow in delete operations on Cancun ([#13157](https://github.com/foundry-rs/foundry/pull/13157)) by @gakonst
* fix(forge): reseed cheatcodes rng in fuzz tests ([#12843](https://github.com/foundry-rs/foundry/pull/12843)) by @DaniPopes
* fix(forge): respect lint ignore config in solar compilation ([#12978](https://github.com/foundry-rs/foundry/pull/12978)) by @tefyosL-sol
* fix: only classify `setUp` as test setup if it has no parameters ([#13204](https://github.com/foundry-rs/foundry/pull/13204)) by @mattsse
* fix(forge): apply `--access-list` in `forge create` ([#13557](https://github.com/foundry-rs/foundry/pull/13557)) by @FredPhilipy
* fix(forge): don't reset snapshot diff result on missing file ([#13442](https://github.com/foundry-rs/foundry/pull/13442)) by @dizer-ti
* fix(forge): correct solar Solidity version support message ([#13592](https://github.com/foundry-rs/foundry/pull/13592)) by @0xferrous
* fix(forge): preserve invariant replay failure reason ([#14136](https://github.com/foundry-rs/foundry/pull/14136)) by @0xWeakSheep
* fix(forge): adjust gas assertion `CounterWithFallback` ([#14465](https://github.com/foundry-rs/foundry/pull/14465)) by @mablr
* fix(cli): `Git::is_repo_root` always returns false ([#13505](https://github.com/foundry-rs/foundry/pull/13505)) by @letmehateu
* fix: prevent panic on Etherscan client creation failure in test command ([#13395](https://github.com/foundry-rs/foundry/pull/13395)) by @CreeptoGengar
* forge: avoid repeated selector decoding in `find` command ([#13516](https://github.com/foundry-rs/foundry/pull/13516)) by @anim001k
* chore(forge): `init` reuse `NetworkVariant` ([#14182](https://github.com/foundry-rs/foundry/pull/14182)) by @mablr
* refactor(forge): remove redundant `networks` fields ([#14183](https://github.com/foundry-rs/foundry/pull/14183)) by @mablr
* test: mark clone CLI tests as flaky ([#13472](https://github.com/foundry-rs/foundry/pull/13472)) by @mattsse
* fix: bind `TempDir` guard in clone test to prevent premature cleanup ([#13471](https://github.com/foundry-rs/foundry/pull/13471)) by @mattsse
* fix(tests): update gas report snapshot after gas params sync fix ([#14439](https://github.com/foundry-rs/foundry/pull/14439)) by @zerosnacks
* chore(tests): bump `forge-std` version ([#13482](https://github.com/foundry-rs/foundry/pull/13482), [#14422](https://github.com/foundry-rs/foundry/pull/14422)) by @github-actions

</details>

***

## Cheatcodes, Fuzz & Invariant

### Cheatcode features

* feat(cheatcodes): add `getRecordedLogsJson` cheatcode ([#13093](https://github.com/foundry-rs/foundry/pull/13093)) by @grandizzy

* feat(cheatcodes): support both 4844/7594 formats in `attachBlob` ([#13054](https://github.com/foundry-rs/foundry/pull/13054)) by @mablr

* feat: add `executeTransaction` cheatcode ([#13437](https://github.com/foundry-rs/foundry/pull/13437)) by @onbjerg

  Replays a fully-signed RLP-encoded transaction in an isolated EVM context, recovering the signer from the signature. State changes merge back into the parent context.

  ```solidity
  function executeTransaction(bytes calldata rawTx) external returns (bytes memory);
  ```

* feat(cheatcodes): add Ed25519 crypto cheatcodes ([#13450](https://github.com/foundry-rs/foundry/pull/13450)) by @howydev

  ```solidity
  bytes32 privateKey = vm.createEd25519Key(salt);
  bytes32 publicKey  = vm.publicKeyEd25519(privateKey);
  bytes memory sig   = vm.signEd25519("namespace", message, privateKey);
  bool ok            = vm.verifyEd25519(sig, "namespace", message, publicKey);
  ```

* feat(cheatcodes): add `currentFilePath` cheatcode ([#13735](https://github.com/foundry-rs/foundry/pull/13735)) by @alextnetto

<details>
<summary><b>Cheatcode fixes (17 PRs)</b></summary>

* fix(cheatcodes): `vm.mockFunction` to work correctly with `delegatecall` ([#13117](https://github.com/foundry-rs/foundry/pull/13117)) by @quangloc99
* fix(evm): pin fork block number to prevent state inconsistency ([#13085](https://github.com/foundry-rs/foundry/pull/13085)) by @grandizzy
* fix(evm): use timestamp-based blob base fee calculation ([#12959](https://github.com/foundry-rs/foundry/pull/12959)) by @cakevm
* fix: emit `console.log` on fuzz test last run at verbosity >= 2 ([#12478](https://github.com/foundry-rs/foundry/pull/12478)) by @avorylli
* fix(preprocessor): mark `getCode` as view in `VmContractHelper` ([#13089](https://github.com/foundry-rs/foundry/pull/13089)) by @grandizzy
* fix(cheatcodes): fix `vm.expectRevert` for direct precompile calls ([#13460](https://github.com/foundry-rs/foundry/pull/13460)) by @gakonst
* fix(cheatcodes): make `vm.executeTransaction` work in isolation mode ([#13475](https://github.com/foundry-rs/foundry/pull/13475)) by @gakonst
* fix(cheatcodes): preserve nested EVM changes on `executeTransaction` ([#13645](https://github.com/foundry-rs/foundry/pull/13645)) by @figtracer
* fix(cheatcodes): prevent panic in `expectRevert` with empty bytes ([#13769](https://github.com/foundry-rs/foundry/pull/13769)) by @decofe
* fix(cheatcodes): create file in `writeJson`/`writeToml` 3-arg overload ([#13777](https://github.com/foundry-rs/foundry/pull/13777)) by @decofe
* fix(cheatcodes): fix interval notation in memory error ([#14126](https://github.com/foundry-rs/foundry/pull/14126)) by @zeroprooff
* fix(cheatcodes): reject nested debug trace recording ([#14423](https://github.com/foundry-rs/foundry/pull/14423)) by @Perico-perica46
* fix(cheatcodes): read broadcasts with the active network ([#14388](https://github.com/foundry-rs/foundry/pull/14388)) by @solanaXpeter
* fix `vm.rpc` cheatcode ABI encoding for structs ([#13842](https://github.com/foundry-rs/foundry/pull/13842)) by @e1Ru1o
* refactor: use native Solidity types for `vm.rpc` struct decoding ([#14050](https://github.com/foundry-rs/foundry/pull/14050)) by @decofe
* evm: only classify skip reverts from cheatcode address ([#14264](https://github.com/foundry-rs/foundry/pull/14264)) by @ArshLabs
* fix(macros): use correct index for tuple struct fields in `ConsoleFmt` ([#13829](https://github.com/foundry-rs/foundry/pull/13829)) by @dizer-ti

</details>

### Fuzz

Improvements to mutation strategies and coverage-guided fuzzing for native Rust code, plus minor correctness fixes.

<details>
<summary><b>Fuzz changes (4 PRs)</b></summary>

* feat(fuzz): add address mutation variant to select from dictionary ([#13090](https://github.com/foundry-rs/foundry/pull/13090)) by @grandizzy
* feat: SanitizerCoverage support for coverage-guided fuzzing of native Rust code ([#14339](https://github.com/foundry-rs/foundry/pull/14339)) by @decofe
* fix(evm): `<` to `<=` in `validate_uint_mutation` ([#14459](https://github.com/foundry-rs/foundry/pull/14459)) by @cuiweixie
* fix(invariant): remove unused cloned calldata ([#12893](https://github.com/foundry-rs/foundry/pull/12893)) by @subwaycookiecrunch

</details>

### Invariant

Better counterexample validation, surfacing of assertion failures, and faster reporting of broken invariants. Optimization-mode PRs (#13196, #14147, #14226) and other testing improvements are listed under Testing & Fuzzing.

<details>
<summary><b>Invariant changes (6 PRs)</b></summary>

* feat(invariant): validate counterexamples using settings instead of bytecode ([#13219](https://github.com/foundry-rs/foundry/pull/13219)) by @gakonst
* feat(invariant): add `fail_on_assert` for assertion failures in invariant campaigns ([#14275](https://github.com/foundry-rs/foundry/pull/14275)) by @0xKarl98
* feat: log broken invariant as soon as it is found ([#14433](https://github.com/foundry-rs/foundry/pull/14433)) by @stevencartavia
* fix(invariant): preserve state across calls during replay ([#13084](https://github.com/foundry-rs/foundry/pull/13084)) by @grandizzy
* fix(invariant): preserve delay semantics during shrinking ([#14218](https://github.com/foundry-rs/foundry/pull/14218)) by @0xKarl98
* Addresses scfuzzbench/scfuzzbench#112 ([#14266](https://github.com/foundry-rs/foundry/pull/14266)) by @0xKarl98

</details>

***

## Cast

### Wallets, signing & account inputs

Mnemonic-derived accounts, multi-authorization 7702 flows, browser-wallet receipt handling for `cast send` / `cast erc20`, plus cleanups around `WalletOpts` / `EtherscanOpts`.

<details>
<summary><b>Wallets, signing & account inputs (9 PRs)</b></summary>

* feat(cast): derive accounts from mnemonic ([#12700](https://github.com/foundry-rs/foundry/pull/12700)) by @leovct
* feat(cast): strip `WalletOpts` and `EtherscanOpts` from subcommands that don't expect a signer or need Etherscan API ([#12705](https://github.com/foundry-rs/foundry/pull/12705)) by @tskoyo
* feat(cast): `wallet sign-auth --self-broadcast` ([#12624](https://github.com/foundry-rs/foundry/pull/12624)) by @0xferrous
* feat(cast): accept multiple 7702 authorizations ([#12627](https://github.com/foundry-rs/foundry/pull/12627)) by @0xferrous
* refactor(cast): deduplicate browser wallet receipt handling in `cast send` ([#13747](https://github.com/foundry-rs/foundry/pull/13747)) by @figtracer
* fix(cast): add browser wallet support for `erc20` commands ([#14395](https://github.com/foundry-rs/foundry/pull/14395)) by @figtracer
* fix(cast): remove duplicate `0x` prefix in `sign-auth` output ([#14143](https://github.com/foundry-rs/foundry/pull/14143)) by @zeroprooff
* fix(cast): sponsor hash computation and gas estimation mismatch ([#14202](https://github.com/foundry-rs/foundry/pull/14202)) by @figtracer
* fix(cast): restore `current_dir` in keystore overwrite tests ([#13690](https://github.com/foundry-rs/foundry/pull/13690)) by @mablr

</details>

### Transactions, batching & gas

Native call batching (`batch-send` / `batch-mktx`), EIP-7594 support, raw-tx flags, system-tx replay, network-aware encoding, and a wave of correctness fixes around boundary checks and historical execution.

<details>
<summary><b>Transactions, batching & gas (15 PRs)</b></summary>

* feat(cast): add support for raw transaction data with `--data` flag in `send` ([#12712](https://github.com/foundry-rs/foundry/pull/12712)) by @Jds-23
* feat(cast): add `--data` flag to `access-list` command ([#13515](https://github.com/foundry-rs/foundry/pull/13515)) by @VolodymyrBg
* feat(cast): add tx flags to `erc20` command ([#13002](https://github.com/foundry-rs/foundry/pull/13002)) by @mablr
* feat: alias `cast erc20 transfer` to `cast erc20 send` ([#12990](https://github.com/foundry-rs/foundry/pull/12990)) by @onbjerg
* feat(cast): add EIP-7594 support ([#13058](https://github.com/foundry-rs/foundry/pull/13058)) by @mablr
* feat(cast): add `batch-send` and `batch-mktx` commands for native call batching ([#13973](https://github.com/foundry-rs/foundry/pull/13973)) by @stevencartavia
* feat(cast): `--replay-system-txes` / `--sys` arg to `cast run` system txes ([#12853](https://github.com/foundry-rs/foundry/pull/12853)) by @grandizzy
* feat(cast): add `--network` flag to `cast tx` for network-specific raw encoding ([#13745](https://github.com/foundry-rs/foundry/pull/13745)) by @mablr
* feat(cast): `block --raw` network selection ([#13754](https://github.com/foundry-rs/foundry/pull/13754)) by @mablr
* fix(cast): `batch-send` handling by clearing `to`/`value` fields ([#14250](https://github.com/foundry-rs/foundry/pull/14250)) by @mablr
* chore(cast): remove redundant `batch-mktx` clearing ([#14252](https://github.com/foundry-rs/foundry/pull/14252)) by @stevencartavia
* fix(cast): resolve correct hardfork for historical tx execution ([#14207](https://github.com/foundry-rs/foundry/pull/14207)) by @decofe
* fix(cast): correct `max_int` boundary check for `uint255` ([#13568](https://github.com/foundry-rs/foundry/pull/13568)) by @zeroprooff
* fix: accept `0x`-prefixed value inputs ([#14406](https://github.com/foundry-rs/foundry/pull/14406)) by @figtracer
* refactor(cast): cleanup `cast send` ([#14385](https://github.com/foundry-rs/foundry/pull/14385)) by @0xrusowsky

</details>

### Tracing, inspection & interface tooling

`--curl` for reproducing requests, `trace_transaction` / `trace_rawTransaction`, `--flatten` for `cast interface`, persistent Etherscan source cache, query chunking for `cast logs`, plus `--json` parity across `erc20` commands.

<details>
<summary><b>Tracing, inspection & interface tooling (11 PRs)</b></summary>

* feat(cast): add `--curl` flag to output equivalent curl commands ([#13114](https://github.com/foundry-rs/foundry/pull/13114)) by @gakonst
* feat(cast): add `trace_transaction` and `trace_rawTransaction` ([#12788](https://github.com/foundry-rs/foundry/pull/12788)) by @figtracer
* feat(cast): add `--flatten` flag to `cast interface` ([#13201](https://github.com/foundry-rs/foundry/pull/13201)) by @mattsse
* feat(cast): cache Etherscan sources under Foundry cache with temp fallback ([#12025](https://github.com/foundry-rs/foundry/pull/12025)) by @sashass1315
* feat: support `cast logs` query chunking ([#12692](https://github.com/foundry-rs/foundry/pull/12692)) by @stevencartavia
* feat(cast): `decode-tx` generic over `Network` ([#14199](https://github.com/foundry-rs/foundry/pull/14199)) by @mablr
* fix(cast): improve error message for invalid hex calldata ([#13180](https://github.com/foundry-rs/foundry/pull/13180)) by @gakonst
* fix(cast): clean up temp dir in `cast storage` when Etherscan cache is unavailable ([#13418](https://github.com/foundry-rs/foundry/pull/13418)) by @thunggis
* fix(cast): remove redundant `chain()` call in `explorer_client` ([#13272](https://github.com/foundry-rs/foundry/pull/13272)) by @tefyosL-sol
* fix(cast): `--json` support for `erc20` cmds ([#12727](https://github.com/foundry-rs/foundry/pull/12727)) by @0xferrous
* add missing JSON output support for `erc20 decimals` ([#13438](https://github.com/foundry-rs/foundry/pull/13438)) by @DanielGuupta

</details>

### Reliability & RPC plumbing

Smaller robustness fixes for sender enumeration, threads handling, plasma verifier errors, and flaky-test cleanup.

<details>
<summary><b>Reliability & RPC plumbing (4 PRs)</b></summary>

* fix(cast): handle errors in `list_local_senders()` ([#12419](https://github.com/foundry-rs/foundry/pull/12419)) by @Ragnar
* fix(cast): treat `threads=0` as logical cores ([#12799](https://github.com/foundry-rs/foundry/pull/12799)) by @ANtutov
* fix: add plasma verifier err msg ([#12790](https://github.com/foundry-rs/foundry/pull/12790)) by @grandizzy
* test(cast): mark flaky `revert_reason_from` and wildcard RPC-dependent tail ([#13796](https://github.com/foundry-rs/foundry/pull/13796)) by @decofe

</details>

<details>
<summary><b>Generic-<code>Network</code> refactors (11 PRs)</b></summary>

* feat(cast): generic `CastTxBuilder` ([#13533](https://github.com/foundry-rs/foundry/pull/13533)) by @mablr
* feat(cast): `send`+`erc20` generic `Network` support ([#13587](https://github.com/foundry-rs/foundry/pull/13587)) by @mablr
* feat(cast): `Cast` generic `Network` support ([#13624](https://github.com/foundry-rs/foundry/pull/13624)) by @mablr
* feat(cast): `estimate` generic network ([#13622](https://github.com/foundry-rs/foundry/pull/13622)) by @mablr
* feat(cast): `call` generic `Network` support ([#13634](https://github.com/foundry-rs/foundry/pull/13634)) by @mablr
* feat(cast): `access-list` generic `Network` support ([#13635](https://github.com/foundry-rs/foundry/pull/13635)) by @mablr
* feat(cast): `da-estimate` generic `Network` ([#14194](https://github.com/foundry-rs/foundry/pull/14194)) by @mablr
* refactor(cast): generic `cast call` ([#14157](https://github.com/foundry-rs/foundry/pull/14157)) by @figtracer
* refactor(cast): generic `cast run` ([#14121](https://github.com/foundry-rs/foundry/pull/14121)) by @figtracer
* refactor(cast): direct `block_env` access -> trait methods ([#14119](https://github.com/foundry-rs/foundry/pull/14119)) by @figtracer
* chore(cast): granular bounds on `Cast` ([#13776](https://github.com/foundry-rs/foundry/pull/13776)) by @mablr

</details>

***

## Anvil

### Features

New RPC endpoints (`trace_replayBlockTransactions`, `eth_fillTransaction`, `eth_getStorageValues`, `debug_traceBlockBy{Hash,Number}`), EIP-2935 / EIP-3860 / EIP-7825 support, multi-fork-URL round-robin load balancing, and new CLI flags for tx gas limits and pool sizing.

<details>
<summary><b>Anvil features (14 PRs)</b></summary>

* feat(anvil): add `eth_fillTransaction` support ([#12595](https://github.com/foundry-rs/foundry/pull/12595)) by @mablr
* feat(anvil): extend Content-Type support on Beacon API ([#12611](https://github.com/foundry-rs/foundry/pull/12611)) by @mablr
* feat(anvil): add `trace_replayBlockTransactions` endpoint for block txs tracing ([#13098](https://github.com/foundry-rs/foundry/pull/13098)) by @mablr
* feat(anvil): cache block timestamp in mined receipts ([#13311](https://github.com/foundry-rs/foundry/pull/13311)) by @thunggis
* add EIP-3860 initcode size check in txpool validation ([#13473](https://github.com/foundry-rs/foundry/pull/13473)) by @DanielGuupta
* Add `--enable-tx-gas-limit` CLI flag for EIP-7825 support ([#13307](https://github.com/foundry-rs/foundry/pull/13307)) by @DanielGuupta
* add `--max-transactions` CLI flag ([#13495](https://github.com/foundry-rs/foundry/pull/13495)) by @DanielGuupta
* remove unimplemented `anvil_enableTraces` endpoint ([#13499](https://github.com/foundry-rs/foundry/pull/13499)) by @DanielGuupta
* notify subscribers for txs promoted after block mining ([#13464](https://github.com/foundry-rs/foundry/pull/13464)) by @DanielGuupta
* feat(anvil): add EIP-2935 blockhash history storage support ([#13588](https://github.com/foundry-rs/foundry/pull/13588)) by @koko1123
* feat(anvil): add `eth_getStorageValues` RPC method ([#13971](https://github.com/foundry-rs/foundry/pull/13971)) by @stevencartavia
* feat(anvil): populate `Metadata` `client_semver` ([#14229](https://github.com/foundry-rs/foundry/pull/14229)) by @ndavd
* feat(anvil): support multiple fork URLs with round-robin load balancing ([#14280](https://github.com/foundry-rs/foundry/pull/14280)) by @decofe
* feat(anvil): add `debug_traceBlockByHash` and `debug_traceBlockByNumber` ([#14391](https://github.com/foundry-rs/foundry/pull/14391)) by @exp0nge

</details>

<details>
<summary><b>Anvil fixes (46 PRs)</b></summary>

* fix(anvil): insufficient allowance → insufficient balance ([#12855](https://github.com/foundry-rs/foundry/pull/12855)) by @anim001k
* fix(anvil): propagate gas estimation errors ([#12813](https://github.com/foundry-rs/foundry/pull/12813)) by @jxom
* fix(anvil): resolve incorrect historical states dump behavior ([#12732](https://github.com/foundry-rs/foundry/pull/12732)) by @w1tcher
* fix(anvil): use `B256` instead of `TxHash` for block hash parameters ([#12961](https://github.com/foundry-rs/foundry/pull/12961)) by @pivasdesant
* fix(anvil): use suggested priority fee by default ([#13092](https://github.com/foundry-rs/foundry/pull/13092)) by @tefyosL-sol
* fix(anvil): clear stale block hashes from db cache during reorg ([#13179](https://github.com/foundry-rs/foundry/pull/13179)) by @gakonst
* fix(anvil): update `genesis_hash` when loading state with block 0 ([#13197](https://github.com/foundry-rs/foundry/pull/13197)) by @mattsse
* fix(anvil): set `contractAddress` in receipt for reverted contract creation ([#13195](https://github.com/foundry-rs/foundry/pull/13195)) by @mattsse
* fix(anvil): preserve withdrawals in `SerializableBlock` for state dump/load ([#13227](https://github.com/foundry-rs/foundry/pull/13227)) by @echowandere
* fix(anvil): use consistent `chain_id` fallback for blob params ([#13241](https://github.com/foundry-rs/foundry/pull/13241)) by @echowandere
* fix(anvil): return error instead of empty vec for out-of-range log queries ([#13251](https://github.com/foundry-rs/foundry/pull/13251)) by @echowandere
* fix(anvil): return error when querying future block number in `with_database_at` ([#13267](https://github.com/foundry-rs/foundry/pull/13267)) by @thunggis
* fix(anvil): use consistent `chain_id` fallback in fork setup ([#13276](https://github.com/foundry-rs/foundry/pull/13276)) by @tefyosL-sol
* fix(anvil): handle disk cache write failures in state eviction ([#13332](https://github.com/foundry-rs/foundry/pull/13332)) by @thunggis
* return error instead of empty array when filter not found ([#13415](https://github.com/foundry-rs/foundry/pull/13415)) by @DanielGuupta
* fix(anvil): variable shadowing bug in `ReadyTransactions::remove_with_markers` ([#13436](https://github.com/foundry-rs/foundry/pull/13436)) by @letmehateu
* prevent balance overflow in `anvil_addBalance` ([#13457](https://github.com/foundry-rs/foundry/pull/13457)) by @DanielGuupta
* fix(anvil): correct `blob_gas_used_ratio` calculation in fee history ([#13491](https://github.com/foundry-rs/foundry/pull/13491)) by @letmehateu
* fix(anvil): prevent panic in `utc_from_secs` for out-of-range timestamps ([#13520](https://github.com/foundry-rs/foundry/pull/13520)) by @stevencartavia
* fix(anvil): preserve original error in `update_url` ([#13531](https://github.com/foundry-rs/foundry/pull/13531)) by @gutonosa
* fix(anvil): use EIP-2718 encoding for OP `enveloped_tx` ([#13537](https://github.com/foundry-rs/foundry/pull/13537)) by @gutonosa
* fix(anvil): clear tx pool on `anvil_reset` ([#13544](https://github.com/foundry-rs/foundry/pull/13544)) by @FredPhilipy
* fix: clarify Anvil storage caching builder naming ([#13546](https://github.com/foundry-rs/foundry/pull/13546)) by @anim001k
* fix(anvil): use individual tx gas instead of cumulative in fee history ([#13552](https://github.com/foundry-rs/foundry/pull/13552)) by @zeroprooff
* fix(test): add missing `rpc_before` assertion in deep reorg blockhash test ([#13586](https://github.com/foundry-rs/foundry/pull/13586)) by @FredPhilipy
* chore(test): harden anvil API assertions ([#13615](https://github.com/foundry-rs/foundry/pull/13615)) by @MarkFizz77
* fix(anvil): validate blob count against per-tx limit, not per-block ([#13626](https://github.com/foundry-rs/foundry/pull/13626)) by @gutonosa
* fix(script): add missing `#[serde(default)]` for backward compat in `TransactionWithMetadata` ([#13684](https://github.com/foundry-rs/foundry/pull/13684)) by @gutonosa
* fix(anvil): initialize fork blob params even with explicit base fee ([#13717](https://github.com/foundry-rs/foundry/pull/13717)) by @edgarr1986
* fix(anvil): swap param order in `get_next_block_blob_excess_gas` to match callers ([#13740](https://github.com/foundry-rs/foundry/pull/13740)) by @gutonosa
* fix(anvil): flaky `test_trace_filter()` ([#13764](https://github.com/foundry-rs/foundry/pull/13764)) by @figtracer
* fix(anvil): reject invalid `versioned_hashes` in beacon blobs endpoint ([#13787](https://github.com/foundry-rs/foundry/pull/13787)) by @FredPhilipy
* fix(anvil): downgrade transaction validation failure logs from warn to debug ([#13911](https://github.com/foundry-rs/foundry/pull/13911)) by @FredPhilipy
* fix(anvil): downgrade "Already imported" log from warn to debug ([#13970](https://github.com/foundry-rs/foundry/pull/13970)) by @FredPhilipy
* fix(anvil): skip missing transactions in `mined_parity_trace_block` ([#13977](https://github.com/foundry-rs/foundry/pull/13977)) by @FredPhilipy
* fix(anvil): clean up `InMemoryBlockStates` on rollback ([#13978](https://github.com/foundry-rs/foundry/pull/13978)) by @FredPhilipy
* fix(anvil): handle `BlockTransactions::Uncle` without panic ([#14135](https://github.com/foundry-rs/foundry/pull/14135)) by @strmfos
* fix(anvil): use `<=` for pending pool replacement underprice check ([#14254](https://github.com/foundry-rs/foundry/pull/14254)) by @cuiweixie
* fix(anvil): auto-detect seconds vs milliseconds in `evm_setTime` ([#14292](https://github.com/foundry-rs/foundry/pull/14292)) by @decofe
* fix(anvil): return error for `eth_getLogs` with unknown blockHash instead of empty ([#14371](https://github.com/foundry-rs/foundry/pull/14371)) by @spalladino
* fix(anvil): refetch full fork blocks with missing tx cache ([#14384](https://github.com/foundry-rs/foundry/pull/14384)) by @solanaXpeter
* fix(anvil-server): distinguish empty and notification batches ([#14405](https://github.com/foundry-rs/foundry/pull/14405)) by @solanaXpeter
* fix(anvil): separate queued txs in txpool RPC responses ([#14425](https://github.com/foundry-rs/foundry/pull/14425)) by @mk0walsk
* fix(anvil): fix flaky `test_increase_time_by_zero` test ([#14430](https://github.com/foundry-rs/foundry/pull/14430)) by @figtracer

</details>

<details>
<summary><b>Anvil cleanup / refactors (23 PRs)</b></summary>

* chore(anvil): clean-up `impersonated_signature` logic ([#13187](https://github.com/foundry-rs/foundry/pull/13187)) by @mablr
* chore(anvil): clean up remaining dead code after Odyssey sunset ([#13211](https://github.com/foundry-rs/foundry/pull/13211)) by @mablr
* chore(anvil): deprecate `getBlobSidecars` Beacon API endpoint ([#12568](https://github.com/foundry-rs/foundry/pull/12568)) by @mablr
* chore(anvil): remove `anvil_getBlobSidecarsByBlockId` endpoint ([#13022](https://github.com/foundry-rs/foundry/pull/13022)) by @mablr
* chore(anvil): remove unnecessary clone operations ([#13330](https://github.com/foundry-rs/foundry/pull/13330)) by @MarkFizz77
* chore(anvil,cast): remove unnecessary `populate_blob_hashes()` ([#13308](https://github.com/foundry-rs/foundry/pull/13308)) by @mablr
* refactor(anvil): using `is_ok` since it's more robust ([#13377](https://github.com/foundry-rs/foundry/pull/13377)) by @cuiweixie
* chore(anvil): clean-up impersonated tx building ([#13637](https://github.com/foundry-rs/foundry/pull/13637)) by @mablr
* chore(anvil): remove unused `alloy-eip5792` dev-dependency ([#13640](https://github.com/foundry-rs/foundry/pull/13640)) by @strmfos
* refactor(anvil): remove redundant tx lookup in `transaction_by_sender_and_nonce` ([#13638](https://github.com/foundry-rs/foundry/pull/13638)) by @Aboudjem
* chore(anvil): simplify `evm` tests by removing useless `Env` wrapper ([#13750](https://github.com/foundry-rs/foundry/pull/13750)) by @mablr
* refactor(anvil): extract `transaction_at_block_index` in fork ([#14271](https://github.com/foundry-rs/foundry/pull/14271)) by @stevencartavia
* refactor(anvil): extract `build_block_info` helper ([#14251](https://github.com/foundry-rs/foundry/pull/14251)) by @stevencartavia
* refactor(anvil): consolidate duplicate `BlockEnv` construction ([#13729](https://github.com/foundry-rs/foundry/pull/13729)) by @figtracer
* refactor(anvil): deduplicate executor pipeline via inline `run!` macro ([#14168](https://github.com/foundry-rs/foundry/pull/14168)) by @stevencartavia
* refactor(anvil): extract `unpack_execution_result` helper ([#14181](https://github.com/foundry-rs/foundry/pull/14181)) by @stevencartavia
* refactor(anvil): extract `inject_precompiles` ([#13956](https://github.com/foundry-rs/foundry/pull/13956)) by @figtracer
* refactor(anvil): extract `build_mining_inspector` ([#13961](https://github.com/foundry-rs/foundry/pull/13961)) by @figtracer
* refactor(anvil): extract `block_env_from_header` utility ([#13838](https://github.com/foundry-rs/foundry/pull/13838)) by @figtracer
* refactor(anvil): extract `execute_pool_transactions` ([#13940](https://github.com/foundry-rs/foundry/pull/13940)) by @figtracer
* refactor(anvil): extract `rehash` helper for transaction hash replacement ([#14151](https://github.com/foundry-rs/foundry/pull/14151)) by @stevencartavia
* refactor(anvil): encapsulate per-tx inspector lifecycle in `finish_transaction` ([#13932](https://github.com/foundry-rs/foundry/pull/13932)) by @figtracer
* refactor(anvil): remove duplicated `FeeDetails` match arm ([#14130](https://github.com/foundry-rs/foundry/pull/14130)) by @stevencartavia

</details>

***

## Chisel

Stability fixes for invalid pc/memory access and uninitialized variable handling. Realtime `console.log` is shared with `forge` ([#13321](https://github.com/foundry-rs/foundry/pull/13321)) — see the Forge section.

<details>
<summary><b>Chisel changes (2 PRs)</b></summary>

* fix(chisel): don't panic on bad pc/memory ([#12674](https://github.com/foundry-rs/foundry/pull/12674)) by @DaniPopes
* fix(chisel): uninitialized variables ([#12937](https://github.com/foundry-rs/foundry/pull/12937)) by @DaniPopes

</details>

***

## Forge Lint

### Features

These catch incorrect ERC20/ERC721 interface implementations, timestamp-dependent logic, and custom-error usage issues. Also includes lower default verbosity, mixedCase exception tweaks, and broader visitor coverage.

<details>
<summary><b>Forge Lint features (8 PRs)</b></summary>

* feat(`forge-lint`): add custom errors rule ([#13126](https://github.com/foundry-rs/foundry/pull/13126)) by @milosdjurica
* feat(lint): reduce default verbosity ([#12901](https://github.com/foundry-rs/foundry/pull/12901)) by @DaniPopes
* feat(lint): add common uppercase abbreviations to mixedCase exceptions ([#13305](https://github.com/foundry-rs/foundry/pull/13305)) by @Himess
* feat(lint): refactor `LinterConfig` and add 3 new linting rules ([#12581](https://github.com/foundry-rs/foundry/pull/12581)) by @milosdjurica
* feat(lint): add missing visit methods to `EarlyLintVisitor` ([#13454](https://github.com/foundry-rs/foundry/pull/13454)) by @hawkadrian
* feat(lint): add incorrect ERC721 interface lint ([#14412](https://github.com/foundry-rs/foundry/pull/14412)) by @figtracer
* feat(lint): add incorrect ERC20 interface lint ([#14428](https://github.com/foundry-rs/foundry/pull/14428)) by @figtracer
* feat(lint): add `block-timestamp` lint ([#14431](https://github.com/foundry-rs/foundry/pull/14431)) by @stevencartavia

</details>

### Fixes

Exit-code semantics for compilation warnings, unreachable macro cleanup, and missing late-visitor methods.

<details>
<summary><b>Forge Lint fixes (3 PRs)</b></summary>

* fix(`forge-lint`): ignore compilation warnings in exit code ([#13138](https://github.com/foundry-rs/foundry/pull/13138)) by @0xrusowsky
* fix(lint): remove unreachable macro arm in `declare_forge_lint` ([#13452](https://github.com/foundry-rs/foundry/pull/13452)) by @aso20455
* fix(lint): add missing visit methods to `LateLintVisitor` ([#14276](https://github.com/foundry-rs/foundry/pull/14276)) by @solanaXpeter

</details>

***

## Forge Fmt

### Features

A new `namespace_import_style` config and generic pretty-printing across blocks, transactions, receipts, OP envelopes, and Tempo receipts.

<details>
<summary><b>Forge Fmt features (5 PRs)</b></summary>

* feat(fmt): add `namespace_import_style` config ([#13108](https://github.com/foundry-rs/foundry/pull/13108)) by @quangloc99
* feat(fmt): pretty printing for generic block/transaction responses ([#13497](https://github.com/foundry-rs/foundry/pull/13497)) by @mablr
* feat(common): generic `TransactionReceiptWithRevertReason` + pretty printing ([#13503](https://github.com/foundry-rs/foundry/pull/13503)) by @mablr
* feat(common): add pretty-printing for `TempoTransactionReceipt` ([#13594](https://github.com/foundry-rs/foundry/pull/13594)) by @mablr
* feat(fmt): `OpTxEnvelope`/`Transaction` pretty printing ([#13734](https://github.com/foundry-rs/foundry/pull/13734)) by @mablr

</details>

### Fixes

Indentation correctness for chained struct calls, empty contracts, named-args calls, and multi-statement control blocks; plus `total_difficulty` and Tempo pretty-print fixes.

<details>
<summary><b>Forge Fmt fixes (9 PRs)</b></summary>

* fix(`forge fmt`): fix incorrect indentation for chained struct calls ([#13163](https://github.com/foundry-rs/foundry/pull/13163)) by @gakonst
* fix(fmt): keep struct field access on same line after named args call ([#13166](https://github.com/foundry-rs/foundry/pull/13166)) by @gakonst
* fix(fmt): correct indentation for closing brace in empty contracts with comments ([#13319](https://github.com/foundry-rs/foundry/pull/13319)) by @Himess
* fix(fmt): don't inline `while`/`for`/`if` blocks with multiple statements ([#13566](https://github.com/foundry-rs/foundry/pull/13566)) by @MarkFizz77
* fix(fmt): correct `total_difficulty` attribute name ([#13578](https://github.com/foundry-rs/foundry/pull/13578)) by @eeemmmmmm
* fix(fmt): swap `valid_before`/`valid_after` in `TempoTransaction` pretty print ([#13910](https://github.com/foundry-rs/foundry/pull/13910)) by @dizer-ti
* fix(fmt): prefer header `total_difficulty` for `totalDifficulty` ([#13919](https://github.com/foundry-rs/foundry/pull/13919)) by @edgarr1986
* refactor(fmt): add tempo pretty printing + cleanup/dedup ([#13631](https://github.com/foundry-rs/foundry/pull/13631)) by @mablr
* refactor(fmt): extract `pretty_receipt` helper ([#14191](https://github.com/foundry-rs/foundry/pull/14191)) by @figtracer

</details>

## Verification

### Features

Auto-recompile on `forge verify-bytecode`, custom verifier URLs for unknown Etherscan chains, and clearer Etherscan-key error messages.

<details>
<summary><b>Verify features (3 PRs)</b></summary>

* feat: `forge verify-bytecode` automatically recompiles upon running ([#12651](https://github.com/foundry-rs/foundry/pull/12651)) by @Jds-23
* Allow `verifier-url` for unknown Etherscan chains ([#13079](https://github.com/foundry-rs/foundry/pull/13079)) by @mayanksharma-eth
* feat(verify): clearer error when `ETHERSCAN_API_KEY` selects Etherscan ([#14383](https://github.com/foundry-rs/foundry/pull/14383)) by @o-az

</details>

<details>
<summary><b>Verify fixes (13 PRs)</b></summary>

* fix(verify): handle lack of trailing slash in verifier url ([#12806](https://github.com/foundry-rs/foundry/pull/12806)) by @onbjerg
* fix(verify): improve error message for CREATE2 deployment failures in `verify-bytecode` ([#13176](https://github.com/foundry-rs/foundry/pull/13176)) by @grandizzy
* fix(verify): improve error message for unsupported chain in Etherscan verifier ([#12685](https://github.com/foundry-rs/foundry/pull/12685)) by @DeVikingMark
* fix(verify): mismatch between `strip_prefix` and `strip_suffix` ([#12563](https://github.com/foundry-rs/foundry/pull/12563)) by @Bashmunta
* fix(verify): support chains with custom Sourcify-compatible APIs ([#13175](https://github.com/foundry-rs/foundry/pull/13175)) by @mattsse
* fix(verify): respect user-configured Etherscan URL over chain defaults ([#13275](https://github.com/foundry-rs/foundry/pull/13275)) by @tefyosL-sol
* fix(verify): correct Sourcify API URL construction for custom chains ([#13360](https://github.com/foundry-rs/foundry/pull/13360)) by @marukai67
* fix(verify): remove unused functions from `VerificationContext` ([#13481](https://github.com/foundry-rs/foundry/pull/13481)) by @Forostovec
* fix(script): actually skip Vyper contract verification ([#13484](https://github.com/foundry-rs/foundry/pull/13484)) by @eeemmmmmm
* fix / refactor(verify): dedupe standard JSON input logic + avoid unnecessary work for Vyper branch ([#13549](https://github.com/foundry-rs/foundry/pull/13549)) by @eeemmmmmm
* refactor(verify): dedupe Vyper standard JSON input logic ([#13743](https://github.com/foundry-rs/foundry/pull/13743)) by @eeemmmmmm
* fix(config): respect user-configured Etherscan URL over chain defaults ([#13239](https://github.com/foundry-rs/foundry/pull/13239)) by @zerosnacks
* fix(config): respect custom Etherscan URL in cast/forge commands ([#14319](https://github.com/foundry-rs/foundry/pull/14319)) by @FredPhilipy

</details>

***

## Coverage

Coverage output is now produced even when tests fail, BRDA hit counts match LCOV expectations, and stack-too-deep warnings link to the troubleshooting guide.

<details>
<summary><b>Coverage changes (3 PRs)</b></summary>

* fix(coverage): write coverage file even when tests fail ([#12717](https://github.com/foundry-rs/foundry/pull/12717)) by @0xferrous
* fix(coverage): correct BRDA hit values for LCOV consistency ([#13151](https://github.com/foundry-rs/foundry/pull/13151)) by @gakonst
* docs(coverage): link to stack-too-deep guide in warnings ([#13240](https://github.com/foundry-rs/foundry/pull/13240)) by @gakonst

</details>

***

## Traces & Debugger

### Features

A new `-d` / `--depth` trace flag (analogous to `tree`) and the debugger now shows actual gas usage alongside refunds.

<details>
<summary><b>Traces & Debugger features (2 PRs)</b></summary>

* feat(traces): add `-d` / `--depth` flag for verbose traces, like `tree` ([#12643](https://github.com/foundry-rs/foundry/pull/12643)) by @tskoyo
* feat(debugger): display actual gas usage alongside refund counter ([#13271](https://github.com/foundry-rs/foundry/pull/13271)) by @Philogy

</details>

### Fixes

Decoder cache hygiene, verbosity unification, safer Sourcify parsing, panic guards on invalid source spans, and improved `expectRevert` formatting.

<details>
<summary><b>Traces & Debugger fixes (7 PRs)</b></summary>

* fix(traces): check HTTP status before JSON parsing in Sourcify fetcher ([#13446](https://github.com/foundry-rs/foundry/pull/13446)) by @marukai67
* fix(traces): filter empty string labels ([#13601](https://github.com/foundry-rs/foundry/pull/13601)) by @onbjerg
* fix(traces): clear `non_fallback_contracts` in decoder reset ([#13671](https://github.com/foundry-rs/foundry/pull/13671)) by @gutonosa
* fix(traces): fix verbosity trace mode and unify verbosity handling ([#13859](https://github.com/foundry-rs/foundry/pull/13859)) by @decofe
* fix(traces): decode `expectRevert` payload before revert formatting ([#13981](https://github.com/foundry-rs/foundry/pull/13981)) by @ArshLabs
* fix(traces): don't persist unknown signatures to disk cache ([#14172](https://github.com/foundry-rs/foundry/pull/14172)) by @skyc1e
* fix(traces): avoid panic on invalid internal source spans ([#14273](https://github.com/foundry-rs/foundry/pull/14273)) by @mk0walsk

</details>

***

## Wallets

### Features

Browser-wallet flows extended to `forge script` / `forge create`, generic `Network` `MultiWallet`, new `BrowserWalletOpts`, and a `--browser` priority-fee patch.

<details>
<summary><b>Wallet features (6 PRs)</b></summary>

* feat(forge): add browser wallet support for `forge script` ([#12952](https://github.com/foundry-rs/foundry/pull/12952)) by @mablr
* feat(primitives): introduce `NetworkWallet<FoundryNetwork>` impl for `EthereumWallet` ([#13248](https://github.com/foundry-rs/foundry/pull/13248)) by @mablr
* feat(wallets): introduce `BrowserWalletOpts` ([#13602](https://github.com/foundry-rs/foundry/pull/13602)) by @mablr
* feat(wallets): `MultiWallet` generic `Network` ([#13648](https://github.com/foundry-rs/foundry/pull/13648)) by @mablr
* feat: patch `--browser` priority fee ([#13700](https://github.com/foundry-rs/foundry/pull/13700)) by @sakulstra
* feat(forge): browser wallet support for `create` subcommand ([#14394](https://github.com/foundry-rs/foundry/pull/14394)) by @mablr

</details>

<details>
<summary><b>Wallets fixes & refactors (15 PRs)</b></summary>

* fix(primitives): track both 4844/7594 sidecars presence in `FoundryTransactionRequest::build_typed_tx` ([#13218](https://github.com/foundry-rs/foundry/pull/13218)) by @mablr
* chore(wallets): remove `NetworkWallet<FoundryNetwork>` impl for `WalletSigner` ([#13343](https://github.com/foundry-rs/foundry/pull/13343)) by @mablr
* fix(wallets): use `turnkey_unsupported()` instead of hardcoded error ([#13535](https://github.com/foundry-rs/foundry/pull/13535)) by @zeroprooff
* refactor(wallets): browser wallet generic `Network` ([#13550](https://github.com/foundry-rs/foundry/pull/13550)) by @mablr
* refactor(wallets): extract `Browser` from `WalletSigner` ([#13613](https://github.com/foundry-rs/foundry/pull/13613)) by @mablr
* refactor(script): extract `BrowserSigner` from `MultiWallet` ([#13839](https://github.com/foundry-rs/foundry/pull/13839)) by @mablr
* fix(wallets): browser wallet CLI help heading formatting ([#13876](https://github.com/foundry-rs/foundry/pull/13876)) by @mablr
* fix(deps): bump to Foundry browser wallet version 0.2.0 ([#13890](https://github.com/foundry-rs/foundry/pull/13890)) by @zerosnacks
* chore(wallets): move `wallets` crate to `foundry-core` ([#14348](https://github.com/foundry-rs/foundry/pull/14348)) by @mablr
* chore: bump `foundry-wallets` dep ([#14409](https://github.com/foundry-rs/foundry/pull/14409)) by @mablr
* chore: pin to `foundry-wallets` release ([#14429](https://github.com/foundry-rs/foundry/pull/14429)) by @zerosnacks
* fix(wallets): add gas limit margin to handle WebAuthn/P256 signing ([#14416](https://github.com/foundry-rs/foundry/pull/14416)) by @mablr
* fix(common): enable `foundry-wallets` browser/tempo features ([#14421](https://github.com/foundry-rs/foundry/pull/14421)) by @mablr
* refactor(common): make `ProviderBuilder` generic over `Network` ([#13250](https://github.com/foundry-rs/foundry/pull/13250)) by @mablr
* feat(common): introduce generic `ProviderBuilder::from_config` method ([#13268](https://github.com/foundry-rs/foundry/pull/13268)) by @mablr

</details>

***

## Script & Broadcast

### Features

The script pipeline (`ScriptSequence`, `ScriptResult`, `ScriptConfig`, `BundledState`, `ScriptTransactionBuilder`, …) is now fully `Network`-generic, enabling Tempo and Optimism scripting through the same code paths as Ethereum.

<details>
<summary><b>Script & Broadcast features (10 PRs)</b></summary>

* feat(script): generic `estimate_gas` + `FoundryTransactionBuilder::reset_gas_limit` method ([#13706](https://github.com/foundry-rs/foundry/pull/13706)) by @mablr
* feat(script): generic `TxStatus` receipt type ([#13770](https://github.com/foundry-rs/foundry/pull/13770)) by @mablr
* feat(script): generic `TransactionWithMetadata` + generic pretty printing for `TransactionMaybeSigned` ([#13795](https://github.com/foundry-rs/foundry/pull/13795)) by @mablr
* feat(script): `Network`-generic `ScriptSequence<N>` ([#13803](https://github.com/foundry-rs/foundry/pull/13803)) by @mablr
* feat(script): `Network`-generic `ScriptSequenceKind<N>` ([#13809](https://github.com/foundry-rs/foundry/pull/13809)) by @mablr
* feat(script): generic `BundledState` impl ([#13825](https://github.com/foundry-rs/foundry/pull/13825)) by @mablr
* feat(script): generic `ScriptTransactionBuilder` ([#13830](https://github.com/foundry-rs/foundry/pull/13830)) by @mablr
* feat(script): `ScriptResult`, `ProvidersManager` and state structs `Network`-generic ([#14104](https://github.com/foundry-rs/foundry/pull/14104)) by @mablr
* feat(script): `ScriptConfig` generic `Network`, `FoundryEvmFactory` ([#14115](https://github.com/foundry-rs/foundry/pull/14115)) by @mablr
* feat(script): `forge script` generic over `FoundryEvmNetwork` ([#14125](https://github.com/foundry-rs/foundry/pull/14125)) by @mablr

</details>

### Fixes

Sender resolution improvements (`--turnkey` msg.sender, single-keystore auto-set) and preservation of exit reason on failed revert decoding.

<details>
<summary><b>Script & Broadcast fixes (3 PRs)</b></summary>

* fix(script): set `msg.sender` from `TURNKEY_ADDRESS` when using `--turnkey` ([#13149](https://github.com/foundry-rs/foundry/pull/13149)) by @gakonst
* fix(script): auto-set sender from single keystore ([#13525](https://github.com/foundry-rs/foundry/pull/13525)) by @MarkFizz77
* fix(script): preserve exit reason in failed revert decode ([#13985](https://github.com/foundry-rs/foundry/pull/13985)) by @ArshLabs

</details>

<details>
<summary><b>Script cleanup / refactors (10 PRs)</b></summary>

* refactor(script-sequence): extract duplicated filter logic ([#13500](https://github.com/foundry-rs/foundry/pull/13500)) by @aso20455
* chore(broadcast): cleanup avg gas price calculation ([#13509](https://github.com/foundry-rs/foundry/pull/13509)) by @mablr
* refactor: use `fs::write_pretty_json_file` in `MultiChainSequence::save` ([#13510](https://github.com/foundry-rs/foundry/pull/13510)) by @prestoalvarez
* chore: use `fs::write_pretty_json_file` in `ScriptSequence::save` ([#13562](https://github.com/foundry-rs/foundry/pull/13562)) by @MarkFizz77
* chore(script): remove `EitherSigner` abstraction ([#13649](https://github.com/foundry-rs/foundry/pull/13649)) by @mablr
* chore(script): use rpc trait methods instead of direct field accesses ([#13693](https://github.com/foundry-rs/foundry/pull/13693)) by @mablr
* chore(script): eliminate remaining `get_http_provider` / `try_get_http_provider` usage ([#13702](https://github.com/foundry-rs/foundry/pull/13702)) by @figtracer
* chore(script): idiomatic `BroadcastReader::into_tx_receipts` ([#13771](https://github.com/foundry-rs/foundry/pull/13771)) by @mablr
* refactor(script-sequence): rename misleading `opcode` field to `call_kind` ([#13907](https://github.com/foundry-rs/foundry/pull/13907)) by @anim001k
* refactor(script): streamline `EvmOpts` resolution ([#14217](https://github.com/foundry-rs/foundry/pull/14217)) by @mablr
* chore(script): eliminate `AnyNetwork` misuse ([#13686](https://github.com/foundry-rs/foundry/pull/13686)) by @mablr

</details>

***

## Config

### Features

`foundry.toml` gains a `network` key and per-network `hardfork` selection, plus `ignored_error_codes_from` and `curl` mode as a config key.

<details>
<summary><b>Config features (4 PRs)</b></summary>

* chore(config): `curl` mode as config key ([#13260](https://github.com/foundry-rs/foundry/pull/13260)) by @mablr
* feat: add `ignored_error_codes_from` config option ([#13841](https://github.com/foundry-rs/foundry/pull/13841)) by @ndavd
* feat(config): support network-specific `hardfork` in `foundry.toml` ([#14312](https://github.com/foundry-rs/foundry/pull/14312)) by @0xrusowsky
* feat(config): `network` key in `foundry.toml` ([#14337](https://github.com/foundry-rs/foundry/pull/14337)) by @mablr

</details>

<details>
<summary><b>Config fixes (14 PRs)</b></summary>

* fix(config): error on unknown profile with fallback for nested libs ([#13153](https://github.com/foundry-rs/foundry/pull/13153)) by @gakonst
* fix(config): preserve hyphenated profile names ([#13172](https://github.com/foundry-rs/foundry/pull/13172)) by @gakonst
* fix(config): print error when accessing invalid Etherscan config ([#9951](https://github.com/foundry-rs/foundry/pull/9951)) by @andelf
* fix(config): reject bare versions in compilation restrictions ([#12955](https://github.com/foundry-rs/foundry/pull/12955)) by @tefyosL-sol
* fix(config): warn on unknown keys in all config sections ([#13154](https://github.com/foundry-rs/foundry/pull/13154)) by @grandizzy
* fix(config): handle decimal string in U256 deserialization ([#13284](https://github.com/foundry-rs/foundry/pull/13284)) by @thunggis
* fix(config): handle vyper section with `skip_serializing_if` fields ([#13318](https://github.com/foundry-rs/foundry/pull/13318)) by @gakonst
* fix: broken config test, currently blocking CI ([#13340](https://github.com/foundry-rs/foundry/pull/13340)) by @zerosnacks
* fix: avoid setting `FOUNDRY_PROFILE: ci` in template workflows, profile does not exist ([#13339](https://github.com/foundry-rs/foundry/pull/13339)) by @zerosnacks
* chore(config): remove unused enum accessor methods ([#13414](https://github.com/foundry-rs/foundry/pull/13414)) by @MozirDmitriy
* fix(config): normalize `deny_warnings` from env vars ([#13434](https://github.com/foundry-rs/foundry/pull/13434)) by @aso20455
* add missing doc section keys to config validation ([#13447](https://github.com/foundry-rs/foundry/pull/13447)) by @DanielGuupta
* fix(config): add symmetric serialization for `FuzzDictionaryConfig` usize fields ([#13723](https://github.com/foundry-rs/foundry/pull/13723)) by @gutonosa
* fix(config): validate `optimizer_runs` does not exceed `u32::MAX` ([#14354](https://github.com/foundry-rs/foundry/pull/14354)) by @FredPhilipy
* fix(config): surface cleanup failures as warnings instead of hard errors ([#14379](https://github.com/foundry-rs/foundry/pull/14379)) by @decofe

</details>

***

## CLI

Markdown docs generation, log routing to stderr, `--no-proxy` for sandboxed macOS, common RPC opts extraction, and a handful of error-handling and `EtherscanOpts` polishing.

<details>
<summary><b>CLI changes (11 PRs)</b></summary>

* fix(cli): redirect tracing logs to stderr ([#13167](https://github.com/foundry-rs/foundry/pull/13167)) by @MarkFizz77
* feat(cli): cli markdown docs ([#13291](https://github.com/foundry-rs/foundry/pull/13291)) by @onbjerg
* fix: use shared `display_chain` helper in CLI error handler ([#13314](https://github.com/foundry-rs/foundry/pull/13314)) by @prestoalvarez
* fix: correct dead condition in command error formatting ([#13427](https://github.com/foundry-rs/foundry/pull/13427)) by @letmehateu
* fix(cli): add `--no-proxy` to disable `reqwest` proxying to prevent crash on macOS in sandboxed environments ([#13155](https://github.com/foundry-rs/foundry/pull/13155)) by @gakonst
* refactor(cli): introduce `RpcCommonOpts` ([#14224](https://github.com/foundry-rs/foundry/pull/14224)) by @figtracer
* fix(cli): restore short flag for `--rpc-url` ([#14246](https://github.com/foundry-rs/foundry/pull/14246)) by @mablr
* fix(cli): always insert numeric `chain_id` in `EtherscanOpts::dict()` ([#14335](https://github.com/foundry-rs/foundry/pull/14335)) by @decofe
* refactor(cli): unify `NetworkVariant` with `NetworkConfigs` ([#14426](https://github.com/foundry-rs/foundry/pull/14426)) by @mablr
* chore(cli): make `Git` impl more robust ([#14452](https://github.com/foundry-rs/foundry/pull/14452))
* chore(cli): remove unused `TryFrom<Result<RawCallResult>>` on `TraceResult` ([#14122](https://github.com/foundry-rs/foundry/pull/14122)) by @figtracer

</details>

***

## Internals: generic `Network` / EVM refactor

Mostly relevant to contributors and downstream integrators. The largest internal refactor since the `revm`/`alloy` migration: the entire `foundry-evm`, `cheatcodes`, `script`, `cast`, and `anvil` stacks were genericized over `Network`, `Spec`, `Block`, and `EvmFactory`, enabling a single Foundry binary to drive Ethereum, Optimism, and Tempo through the same code paths.

This work spans **~260 PRs**, primarily by @mablr, @figtracer, and @stevencartavia, broken down roughly as:

* `foundry-evm` core: ~130 PRs (`Backend`, `Executor`, `DatabaseExt`, `InspectorStack`, `FoundryEvmFactory`, `FoundryContextExt`, `NestedEvm`, etc. all generic; `Env` abstraction removed; `EthFoundryEvmFactory` and `OpEvmNetwork` introduced)
* Cheatcodes generic refactor: ~30 PRs (`Cheatcodes`, `CheatcodesExecutor`, `BroadcastableTransaction` made `Network`/`Evm`/`Spec`/`Block`-generic)
* Anvil generic refactor: ~50 PRs (`Backend`, `EthApi`, `Pool`, `Storage`, `Signer`, `BlockExecutor`, fee history, beacon handlers, etc. all generic over `Network`)
* Additional supporting changes: ~50 PRs (trait-method usage instead of direct field access, dead-code removal, `revm` v34→v38 bump, alloy 2.0.x bumps)

Full PR list: [v1.5.1...v1.7.0 changelog](https://github.com/foundry-rs/foundry/compare/v1.5.1...v1.7.0).

***

## Distribution

Smaller distribution work covers Tempo support in `foundryup`, sha256sum sanitation, and npm OIDC release setup.

<details>
<summary><b>Distribution changes (4 PRs)</b></summary>

* feat(`foundryup`): add Tempo support ([#12775](https://github.com/foundry-rs/foundry/pull/12775))
* fix(foundryup): strip leading backslash from sha256sum ([#12827](https://github.com/foundry-rs/foundry/pull/12827)) by @DaniPopes
* fix(npm): add release environment for OIDC trusted publishing ([#14411](https://github.com/foundry-rs/foundry/pull/14411)) by @grandizzy
* fix(npm): remove deprecated `baseUrl` compiler option ([#14413](https://github.com/foundry-rs/foundry/pull/14413)) by @zerosnacks

</details>

***

## Docs

Major refresh of the `foundry.toml` reference (fuzz/invariant options, full config schema), README slimming, lint rule documentation, plus Anvil and command-help corrections.

<details>
<summary><b>Docs changes (10 PRs)</b></summary>

* docs(config): complete fuzz and invariant sections with 20+ missing options ([#12789](https://github.com/foundry-rs/foundry/pull/12789)) by @aso20455
* docs(lint): add missing lint rules to README ([#12758](https://github.com/foundry-rs/foundry/pull/12758)) by @dizer-ti
* docs: clean up config docs ([#12296](https://github.com/foundry-rs/foundry/pull/12296)) by @onbjerg
* docs(anvil): clarify `--cache-path` is for persisted states, not fork RPC cache ([#13194](https://github.com/foundry-rs/foundry/pull/13194)) by @mattsse
* docs(config): complete `foundry.toml` configuration reference ([#13198](https://github.com/foundry-rs/foundry/pull/13198)) by @zerosnacks
* docs: slim README ([#13393](https://github.com/foundry-rs/foundry/pull/13393)) by @onbjerg
* fix: correct path format in `get_paths` doc comment ([#13388](https://github.com/foundry-rs/foundry/pull/13388)) by @gap-editor
* fix: swap incorrect doc comments for archive RPC URL functions in `rpc.rs` ([#13480](https://github.com/foundry-rs/foundry/pull/13480)) by @gap-editor
* fix: correct flag name in error message from `--compiler-version` ([#13539](https://github.com/foundry-rs/foundry/pull/13539)) by @gap-editor
* chore: add `id` attributes to issue templates ([#13864](https://github.com/foundry-rs/foundry/pull/13864)) by @decofe

</details>

***

## Full Changelog

[v1.5.1...v1.7.0](https://github.com/foundry-rs/foundry/compare/v1.5.1...v1.7.0)
