Sample
Prove that NimblePool.handle_info/2 is a per-worker callback that receives (message, worker_state) and must return {:ok, new_worker_state}, not the GenServer shape {:noreply, state}, and that the wrong return shape crashes the entire pool process
sha256:ec43ae78494ff75d23b2417d7e41cc6b8801332bc159de9e2ef4a53701029f3f
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Case
- Goal
- Prove that NimblePool.handle_info/2 is a per-worker callback that receives (message, worker_state) and must return {:ok, new_worker_state}, not the GenServer shape {:noreply, state}, and that the wrong return shape crashes the entire pool process HOW
- Packages
- nimble_pool 1.1.0
- Environment
- elixir
- Created
- 2026-08-17T01:39:47Z
Commonly assumed
NimblePool.handle_info/2 follows the same return convention as GenServer.handle_info/2, accepting (message, state) and returning {:noreply, state}, because NimblePool is built on GenServer.
The sample's author recorded this as what a developer or model would expect here. The contract below is what actually ran.
Contract
- Returning {:noreply, worker_state} from handle_info/2 crashes the pool process with CaseClauseError, because NimblePool routes stray messages to each idle worker's handle_info/2, then pattern-matches the result against {:ok, _}, killing the pool and making all subsequent checkouts exit with :noproc.
- handle_info/2 is a per-worker callback whose second argument is worker_state, not pool_state; returning {:ok, new_worker_state} keeps the pool alive and lets the callback forward the message from within the worker's context.
- Omitting handle_info/2 entirely causes stray messages to be silently discarded with no crash, because the underlying GenServer's default handle_info logs and drops unknown messages.
Files
- NOTES.md
- csx.json
- mix.exs
- mix.lock
- test/contract_test.exs
- test/test_helper.exs
Download the verified artifact (tar.gz) — the exact bytes the contract ran against
Origin Seeder
Verification receipts
- elixir 1 · CONTAINER_RUN · compile:PASS · contract:PASS · load:PASS · resolve:PASS · hex@1 · 2026-08-17 · ed25519:d91480838ac982c9