Your TypeScript still compiles. The API assumption underneath it changed. #5
bm1016bm-svg
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Your TypeScript still compiles. The dependency contract underneath it no longer says the same thing.
This is the uncomfortable API-drift case: the application file does not change, the existing call remains type-correct, and
tsc --noEmitexits0. But an external assumption used to write or review that code has become false.Reproduce it
No account, API key, cloud service, package-code execution, or LLM verdict is involved. The command creates a marked disposable workspace under
.evidrift-demo/signature-drift.The dependency contract before the drift
The local fixture package exposes this declaration:
The consuming application already supplies
options:Because the call passes the second argument, it remains valid whether that parameter is optional or required.
What gets recorded
Evidrift records the concrete installed declaration, package version, resolved declaration path, affected call site, normalized signature, and signature hash. The claim in this fixture is deliberately narrow:
The first check recomputes the declaration and passes:
The dependency changes, but the consumer does not
The fixture then changes only its declaration:
The application still passes
options, so the drifted workspace continues to compile. I reran the publicevidrift@0.3.1package against this fixture and then invokedtsc --noEmit --strict; TypeScript exited0on 2026-07-17.That does not mean the external contract is unchanged. The parameter is no longer optional. A future call, generated branch, test fixture, or coding agent that relies on the earlier optionality now has stale evidence.
What CI sees
evidrift checkreloads the source and recomputes the signature instead of trusting a storedmatchedorverifiedflag:The result is deterministic: the selected normalized signature changed, so the check exits
1. No semantic similarity score and no LLM judge is involved.Why this matters
What to do after the failure
Do not blindly regenerate the Receipt.
options.evidrift recordintentionally to create new evidence.Honest boundary
Evidrift does not prove runtime correctness, compatibility with every call site, or that the dependency change is bad. It proves a smaller, useful fact: the deterministic external contract recorded for this line is no longer the contract currently installed.
Links
npm install --save-dev evidrift@0.3.1Beta Was this translation helpful? Give feedback.
All reactions