Semantic Compatibility Infrastructure

Your schema passed.Your agent still broke.

GraphABI finds the first edge where meaning changed, shows the exact recorded witness, and traces every downstream node that may be affected.

View on GitHub
uvx --from git+https://github.com/graphabi/graphabi graphabi demo --allow-breaking
Recorded graph Break found · researcher → verifier
Schema✓ PASSsame ResearchResult
Semantics× BREAKINGtrace-backed
Trace-backed witness · candidate-003 verified=true arrived without an opened supporting source.
Contract expectedopened_sources_count > 0
Trace observedopened_sources_count = 0

Repair before verifier · affected path reaches publisher

Graph playground

Run the edge check.

Choose the recorded producer output, then watch the semantic pulse travel toward the verifier. The candidate keeps its schema and breaks its meaning.

Select an output and run the check.The graph will report the observed contract state here.

The bug normal tests miss

Same shape.
Different contract.

Pydantic can validate a boolean. It cannot prove the boolean still means what the next node assumes.

Baseline output✓ Valid
{
  "verified": true,
  "confidence": 0.92,
  "sources": ["source-1"]
}

Source opened and shown to support the claim.

Candidate output✓ Valid
{
  "verified": true,
  "confidence": 0.92,
  "sources": ["source-1"]
}

Source access failed; the claim merely sounded plausible.

The JSON is identical. The meaning at researcher → verifier is not.

How GraphABI works

One causal sequence.

Every interface follows the same reasoning path. Nothing animates without explaining a step.

  1. 01Flow

    Record what crosses each graph edge.

  2. 02Check

    Evaluate what the consumer relies on.

  3. 03Break

    Stop at the first incompatible meaning.

  4. 04Trace

    Calculate downstream terminal paths.

  5. 05Explain

    Show the exact run and conflicting value.

  6. 06Fix

    Name the nearest repair location.

Consumer-driven edge contracts

Write the assumption down.

The verifier defines what it needs from the researcher. Evaluators stay deterministic and independently extensible.

graphabi.contracts.yaml
version: "0.1"
graph: research_demo
edges:
  - id: researcher_to_verifier
    producer: researcher
    consumer: verifier
    invariants:
      - id: verified_requires_opened_supporting_source
        evaluator: provenance
        severity: breaking
        rule: opened_supporting_source

Contract anatomy

  • 01
    Producerresearcher
  • 02
    Consumerverifier
  • 03
    Explicit invariantverified requires source access
  • 04
    Severitybreaking
  • 05
    Observed witnesscandidate-003
Read the contract format

Run the proof locally

The failure is real output.

The demo executes baseline and candidate LangGraphs, records both in SQLite, and generates offline JSON and HTML.

graphabi demo --allow-breaking
GraphABI semantic compatibility report
Structural compatibility: PASS
Semantic compatibility: FAIL
First breaking edge: researcher → verifier
Breaking contract: verified_requires_opened_supporting_source
Witness: run candidate-003
Affected downstream nodes: verifier, decision_maker, publisher

Reports:
.graphabi/reports/latest/report.json
.graphabi/reports/latest/index.html

Framework-independent core

Adapters observe.
Core decides.

LangGraph integration ends at a versioned trace boundary. Contracts, comparison, impact, and reporting do not import framework types.

Framework-independent semantic compatibility pipeline

  1. Flow Adapters LangGraph today
  2. Record Trace model SQLite · JSONL
  3. Check Contracts Evaluator registry
  4. Trace Impact NetworkX paths
  5. Explain Reports JSON · HTML

Framework types stop at the adapter boundary. Report presentation never decides compatibility.

A report that explains causality

Not a score.
A repairable witness.

Machine-readable JSON and a self-contained HTML report come from one redacted report model. The report works offline.

report.jsonmachine-readable
{
  "structural": "pass",
  "semantic": "breaking",
  "first_breaking_edge": {
    "producer": "researcher",
    "consumer": "verifier",
    "contract": "verified_requires_opened_supporting_source"
  },
  "witness": {
    "run": "candidate-003",
    "expected": "opened_sources_count > 0",
    "observed": 0
  },
  "affected": ["verifier", "decision_maker", "publisher"],
  "repair_before": "verifier"
}
index.htmloffline, self-contained
Structural✓ PASS
Semantic× BREAKING
First breaking edge

researcherverifier

Witness · candidate-003

opened_sources_count > 0 expected, 0 observed.

Downstream

verifierdecision_makerpublisher

Repair location

Before verifier

One redacted report model. Both renderings are generated from it, and neither can disagree with the other.

Measured technical proof

Small surface.
Serious checks.

Current branch measurements, linked to the source that enforces them.

Tests
115passing locally
Coverage
93.08%85% CI floor
Python CI
3.12 · 3.13both required
Evaluators
7 typesdeterministic registry
Runtime
Local-firstno required API key
Adapter
LangGraphone maintained adapter

Benchmarks cover synthetic graphs at 10, 100, and 1,000 nodes. They do not establish production scale. Inspect the methodology.

Proof boundary

What GraphABI does not prove.

Honest uncertainty is part of the interface.

  • 01

    GraphABI evaluates explicit contracts. It does not understand arbitrary meaning.

  • 02

    A passing observed edge does not prove unobserved branches or inputs are compatible.

  • 03

    Trace schema 0.1 does not yet pair repeated loop or retry occurrences.

  • 04

    LangGraph is the only maintained adapter. OpenTelemetry and OpenInference ingestion are planned.

Read every current limitation

Semantic Compatibility Infrastructure

Catch the first broken edge.

Run the local demo, read the contract, and inspect the trace-backed witness.