Keep your own defences. The promise: your defences plus the two Provely lines are never worse than either one alone. Six properties state it, and the grid tests each one. The result below includes the cases that fail.

Which properties does Provely promise?

PropertyNameWhat it means
C1Clean runs do not changeWith your defences and no fault, the run is identical: the same calls, the same arguments, the same answer.
C2Never worseA case passes with both when it passes with your defences alone or with Provely alone.
C3One decision for each callEach call gets one line. A repair by Provely and then by your code gives the same arguments as one repair.
C4Your handler still runsEvery handler you wrote runs when its fault occurs, and it gets the error type it expects.
C5The stricter choice winsYour shorter timeout, lower retry count, guardrail refusal and idempotency key stay as they are.
C6No loopYour retries plus the re-asks of Provely stay inside the smaller budget.

Which defences does the grid run?

FrameworkDefences in the defended app
LangChain and LangGraphtool error handlers, validation error handlers, with_retry, with_fallbacks, output fixing parsers, recursion limits
LlamaIndexmax_iterations, a try block in the tool, a retry wrapper, a timeout
OpenAI Agentsfailure_error_function, input and output guardrails, max_turns, a tool timeout
Vercel AIexperimental_repairToolCall, maxRetries, stopWhen, an abort signal, a try block
Plain SDKsa try block around the JSON parse, jsonrepair, zod or pydantic with a re-ask, p-retry or tenacity, a timeout, your own idempotency key and dedupe set

What did the grid measure?

LanguagePathsCases that hold every propertyFailPending
TypeScript921 of 27 (rules cases not yet measured)60
Python624 of 27 (1 passes under guard_mode: enforce; observe records only; rules cases not yet measured)21

A case holds when it holds on every path of that language. A fail names a property that did not hold on at least one path. A pending case has not run yet.

Measured on 2026-10-17 at commit 82acaae6. Measured on 2026-10-17 at commit 9f9131ba.

Source: tests/zero-code defended grid · retrieved 2026-10-17

Whose choice wins when both act?

The stricter choice wins: that is property C5. Provely never replaces an idempotency key that you supplied. It never refuses a retry that carries the key of the first attempt.