Verified reproduction / contract drift / local-first

縮小失敗。
留下證據。

Evidrift 把吵雜的 failing JSON request 縮成經重播驗證的結果,再保護程式依賴的 TypeScript 與 OpenAPI assumption。

Evidrift:Code compiles. APIs drift.
不需註冊、不需準備 target、不送 remote request

用一個指令縮小 verified failure。

npx --yes evidrift@latest repro-demo

Demo 會啟動 disposable loopback server、確認 HTTP 500 與 INVALID_FILTER、重送每個 candidate、驗證 minimized result,最後關閉 server。

Body: 217 bytes -> 46 bytes
Minimal JSON: {"filters":{"unsupported":{"mode":"explode"}}}
Evidence: 1-minimal under the selected JSON reducers and failure predicate
兩條隔離的 workflow

縮小 failure,重算 assumption。

HTTP replay 不會從 contract check 或 MCP 執行;Receipt 仍是不可信任的 repository file。

repro.minimize

Minimal HTTP reproduction

移除 JSON structure;只有 status 與明確 error identity 仍相同的 candidate 才會保留。

typescript.symbol

TypeScript API drift

記錄真實 call site 選到的 overload、parameter、normalized signature、installed version、resolved declaration path 與 hash。

json.pointer

OpenAPI contract drift

透過 RFC 6901 JSON Pointer,記錄 repository-local OpenAPI JSON 或 JSON Schema 中的一個 canonical value。

No signup. No API key. No cloud.

用一個指令看到 deterministic drift。

npx --yes evidrift@latest demo
實際 Evidrift CLI demo:TypeScript contract 先通過,dependency signature 改變後產生 deterministic FAIL

GIF 來自真實本機 CLI transcript。不執行 dependency-under-test code,不使用 cloud service 或 LLM verdict。

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.
不是另一個 AI reviewer

不能 deterministic,就不阻擋 CI。

Evidrift 會做

  • 把每個接受的 JSON reduction 送到明確的 loopback failure replay;
  • 記錄某個 code location 為何依賴一項 static contract;
  • 透過 CLI、MCP 或 GitHub Actions 重新驗證同一份 evidence;
  • 在 deterministic contract mismatch 或 evidence-integrity failure 時失敗;
  • source 改變但 selected contract 仍相同時只提出 warning。

Evidrift 不會做

  • 聲稱 global minimum、root cause 或廣泛 runtime correctness;
  • replay remote URL 或解析 remote OpenAPI reference;
  • 執行 package code 或 Receipt 提供的 command;
  • 把 LLM judge 當成 CI gate。
下一步

從真實失敗開始。

先跑 demo,再決定是否把 Evidrift 加進 repository。翻譯的是說明文字;CLI command、Receipt schema、error code、API name 與 machine-readable output 維持英文。