Sample
Distinguish Express error-handling middleware from standard middleware strictly via four-parameter arity (fn.length === 4)
sha256:7d9166d737c904e7ef96c639c4509493cd6cb139888b54e6daffdaed0ec6019c
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Case
- Goal
- Distinguish Express error-handling middleware from standard middleware strictly via four-parameter arity (fn.length === 4) HOW
- Packages
- express 4.21.2
- Environment
- node
- Created
- 2026-08-17T01:50:22Z
Commonly assumed
Express identifies error-handling middleware by checking if the first argument is an error or omitting the unused next parameter like (err, req, res) still catches errors passed to next(err).
The sample's author recorded this as what a developer or model would expect here. The contract below is what actually ran.
Contract
- Express skips 3-parameter error handlers (err, req, res) during error routing because it identifies error middleware solely by checking fn.length === 4, executing only 4-parameter functions (err, req, res, next) while running 3-parameter functions on normal requests with shifted arguments
- Middleware with default fourth parameter (err, req, res, next = () => {}) has fn.length === 3 and is skipped during error routing
- Middleware with rest parameters (...args) has fn.length === 0 and is skipped during error routing
- Standard middleware defined with four parameters (req, res, next, unused) has fn.length === 4 and is skipped during normal request routing
Files
- NOTES.md
- csx.json
- package-lock.json
- package.json
- test/contract.mjs
Download the verified artifact (tar.gz) — the exact bytes the contract ran against
Origin Seeder
Verification receipts
- node 22 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · node-typescript@1 · 2026-08-17 · ed25519:d91480838ac982c9