SaneCheck

Last 0 runs. 0 silent failures caught, 0 routed to review.

No runs yet. Send one from your workflow, or try: curl -X POST https://<your-host>/ingest -H 'X-API-Key: KEY' -H 'Content-Type: application/json' -d '{"source":"demo","output":{"name":"Ada","age":36}}'

#time (UTC)sourcestatusfailed checkspayload

Schema drift: the first run per source sets the baseline shape (keys + types). To re-learn after an intentional change: POST /schema/reset?source=NAME with your X-API-Key. Per-run detail: GET /run/{id}. Review: a passing run can be routed to a human via contract.review (if_missing / if_contains / sample_rate) or payload review:true; reject with add_rule to harden the contract. Dead-letter: the response is synchronous, branch on status; or send strict:true (env SANECHECK_STRICT=1) and a failed run answers HTTP 422 so your node's error output fires. Loops: meta.tool_calls repeated with identical arguments, near-identical arguments (canonicalized + Jaccard >= 0.85 vs the last 3 calls), or the same line repeating in the output, flag possible_loop. Contracts (job drift): send a 'contract' object with required fields / must_contain, or store one via POST /contract?source=NAME.

SaneCheck v0.5.2