Skip to content

Releases: LopezDray/evidence-gate

Release notes — v1.0.1

Choose a tag to compare

@LopezDray LopezDray released this 12 Jul 04:15
f5ab7f7

MCP server: verify_claims tool

v1.0.0 shipped the MCP server with check_evidence only — the verify_claims
tool was still on main mid-merge when v1.0.0 was tagged and published. This
patch adds it, so the MCP server now exposes both halves of the proof loop:

  • check_evidence — before generation, may the model speak at all?
  • verify_claims (new) — after generation, does the answer stand on the
    evidence: every citation resolves to a real record, every claim carries a
    citation, and — when records carry facts — every cited number matches them
    exactly (misquoted_values).

Accepts { answer, records, supporting?, gate?, preset?, rules?, decision? }.
With the same decision.id and records as the check_evidence call, its
verification record joins that decision record on an identical evidence
digest — the audit trail is complete over MCP, not just the direct API.

No other changes. The Python package (evidence-gate-py) has no code changes
in this release — its version bump is for parity across the four version
points (npm, PyPI, __init__.py, MCP server), per this project's convention.

Install

npm install evidence-gate@1.0.1
pip install evidence-gate-py==1.0.1

Links

Evidence Gate 1.0 — the proof loop is complete

Choose a tag to compare

@LopezDray LopezDray released this 12 Jul 04:07
f1a2985

Evidence Gate 1.0 — the proof loop is complete

Evidence Gate is the missing step between retrieve and generate: a tiny,
zero-dependency gate that decides whether an LLM may speak from your data — and
now, whether what it said actually stands on that data.

This 1.0 closes the loop end-to-end:

  • Gate (evidenceGate) — before generation, decide summarize / compare
    from evidence coverage, freshness, and quality; get prompt-ready caveats.
  • Prove the answer (verifyClaims) — after generation, check every citation
    resolves to a real record (no phantom evidence), every claim carries a citation
    (no naked claims), and the framing matches the verdict (no "as of today" over
    stale data). Deterministic, no model call.
  • Catch misquoted numbers (record.facts) — opt in by attaching
    facts: { revenue: 1234500 } to a record, and every number in a sentence
    citing it must match exactly, or the answer fails with misquoted_values. A
    correctly cited but wrong figure — the failure mode a citation check alone
    misses — is now caught deterministically. Magnitude suffixes (1.2M,
    1.5 ล้าน), thousands separators, and Thai numerals all normalize identically
    across ports.
  • Prove the evidence (record.provenance) — where each observation came
    from, hash-linked transform chain, source authority; surfaces as caveats and a
    replay-verifiable digest.
  • Audit trail — decision and verification records join on the request id and
    an identical evidence digest, without storing the evidence or the answer.
  • MCP server — a check_evidence tool so any MCP-compatible agent can gate
    itself before it speaks.

Everything is byte-identical across the JavaScript and Python ports, locked by a
shared vector file (test/vectors.json) that both test suites run.

⚠️ Breaking change

Rulesets are now validated at call time: staleDays, minRecords, and
qualityThreshold are required finite numbers. A ruleset missing one throws
instead of silently behaving as permissive. Presets are unaffected — only
hand-built rulesets need to ensure these three fields are set.

Links
Full changelog: CHANGELOG.md
The proof loop, provenance, MCP usage: README

Install

npm install evidence-gate
pip install evidence-gate-py