- Write tests extending `Test` from `forge-std/Test.sol` — use `assertEq`, `vm.prank(addr)`, `vm.deal(addr, amount)`, `vm.expectRevert(selector)`.
- Run `forge test -vvv` for verbose output with call traces — use `--match-test testFunctionName` to isolate a specific test.
- Capture gas baselines with `forge snapshot` and run `forge snapshot --diff` in CI to surface unexpected gas regressions.
- Write deployment scripts extending `Script` from `forge-std/Script.sol` — use `vm.startBroadcast(privateKey)` and `vm.stopBroadcast()` for on-chain transactions.
- Use `cast call`, `cast send`, `cast estimate`, and `cast decode` to interact with deployed contracts from the command line.
- Install dependencies with `forge install org/repo@tag` — stored as git submodules in `lib/`, remapped in `foundry.toml` under `[remappings]`.
- Run `forge fmt` for opinionated Solidity formatting and `forge build --sizes` to verify contracts are under the 24 576-byte deployment limit.
- Fork mainnet for integration tests: `vm.createFork(vm.envString("RPC_URL"), blockNumber)` or `anvil --fork-url $RPC_URL --block-number $BLOCK`.