Minimal HTTP reproduction
Remove JSON structure and accept a candidate only after status plus explicit error identity still match on a literal loopback target.
Evidrift turns noisy failing JSON requests into replay-verified reductions, then guards the TypeScript and OpenAPI assumptions your code relies on.
npx --yes evidrift@latest repro-demo
The demo starts a disposable loopback server, verifies an HTTP 500 plus
INVALID_FILTER, replays every candidate, verifies the minimized result, and
closes the server.
MINIMIZED sha256:...
Body: 217 bytes -> 46 bytes
Minimal JSON: {"filters":{"unsupported":{"mode":"explode"}}}
Evidence: 1-minimal under the selected JSON reducers and failure predicate
useRef type break.
React's official upgrade guide says useRef now requires an argument. This
source-repository lab records the no-argument overload in
@types/react@18.3.12, installs @types/react@19.0.1, and
requires Evidrift to report that the recorded overload disappeared.
git clone https://github.com/bm1016bm-svg/evidrift.git
cd evidrift
npm ci --ignore-scripts
npm run demo:react-19
FAIL contract_mismatch
Expected signature: useRef<T = undefined>():MutableRefObject<T|undefined>
Current overloads: useRef<T>(initialValue:T):RefObject<T> | ...
Action: Review the dependency change and affected code.
The lab pins and verifies both installed versions, disables dependency lifecycle scripts, and runs no React application code.
HTTP replay never runs from contract checks or MCP. Receipts remain repository files, not trusted verdicts.
Remove JSON structure and accept a candidate only after status plus explicit error identity still match on a literal loopback target.
Lock the overload selected at a real call site, its parameter, normalized signature, installed version, resolved declaration path, and hash.
Lock one canonical value in repository-local OpenAPI JSON or JSON Schema through RFC 6901 JSON Pointer.
npx --yes evidrift@latest demo
Rendered from a real local CLI transcript. No dependency-under-test code, cloud service, or LLM verdict is involved.
FAIL contract_mismatch sha256:...
Claim: parseConfig accepts an optional options parameter used by the demo.
Expected signature: parseConfig(input:string,options?:ParseOptions):ParseResult
Current signature: parseConfig(input:string,options:ParseOptions):ParseResult
Affected code location: app/src/index.ts:3
Receipt ID: sha256:...
Action: Review the dependency change, then intentionally record new evidence.
When the probe budget completes, no selected single JSON reduction still matches the chosen failure predicate. It is not a claim of the globally smallest possible request.
API drift is a change to a dependency or contract after code was written against it. Evidrift checks the selected TypeScript call signature or repository-local JSON value.
It is narrower. Contract tests exercise provider and consumer behavior. Evidrift locks one explicit static assumption and checks it without running dependency code or services.
Yes. Any MCP client that launches a local STDIO server can call Evidrift. All integrations use the same core as the CLI.
No. ReproMin verifies only that one reduced request currently matches one explicit failure predicate during replay. Contract Receipts establish only that selected deterministic evidence still matches and passes integrity checks.