Skip to main content

Semantic judge

fornax judge sends a claim plus a bounded, structured excerpt of its evidence graph to a locally configured, self-hosted judge model (an Ollama-compatible endpoint), and renders the model's opinion alongside the same full fusion detail fusion/decision render (FORNX-94, shipped in v0.0.4).

The judge never replaces the deterministic trail

The judge's opinion is one more evidence source, always shown alongside the real evidence-graph-derived verdict, never instead of it. It is disabled by default — a user who has never touched $FORNAX_HOME/config.toml gets no judge calls at all.

Why would I use it?​

Deterministic verifiers check what they were explicitly written to check. A semantic judge can catch cases a literal rule doesn't cover — subtler phrasing, indirect evidence — by reasoning over the same evidence a human reviewer would read. It's a second opinion, not a replacement verifier.

When to use it​

Opt in when you want that second opinion on ambiguous or REVIEW-verdict claims, and you're comfortable running a local model (or pointing at one you already run). Skip it for anything where the deterministic trail alone is sufficient — it adds a real network call and a real model dependency for no benefit if you don't need the extra signal.

How​

Off by default, enabled via config first:

# $FORNAX_HOME/config.toml
[semantic_judge]
enabled = true
endpoint = "http://localhost:11434/v1" # default; Ollama-compatible
model = "llama3.1" # default
timeout_ms = 5000 # default

Then:

fornax judge <CLAIM> <SESSION> [--allow-raw-evidence]
$ fornax judge c1 s1
judge (model-derived, NOT independent evidence): ✓ SUPPORTED
model: llama3.1 endpoint: http://localhost:11434/v1 called_at: 2026-09-02T00:00:00+00:00
rationale: the evidence excerpt is consistent with the claim

claim: c1
session: s1
graph_source: graph
🛡 ✓ VERIFIED (uncertainty: qualified)
...

A disabled, unreachable, or timed-out judge renders honestly as — UNAVAILABLE — never a fabricated pass/fail:

judge (model-derived, NOT independent evidence): — UNAVAILABLE
...
rationale: semantic judge disabled via [semantic_judge].enabled = false

When the judge's verdict disagrees with the deterministic evidence, that's shown as an explicit banner, not silently dropped:

⚠ disagreement: the judge's verdict differs from the deterministic
evidence for this claim -- shown, not resolved

--allow-raw-evidence​

By default, the excerpt sent to the judge is redacted the same way any other Fornax evidence is (see Privacy & Redaction). --allow-raw-evidence is an explicit opt-in to send unredacted evidence content to the judge instead — off by default per FORNX-94's "raw protected evidence" acceptance criterion.

What happens internally​

fornax judge reads GET /api/judge on the daemon. The daemon builds a bounded evidence-graph excerpt for the claim, calls the configured Ollama-compatible endpoint, and maps the response into a verdict/rationale/disagreement shape — one of supported, contradicted, inconclusive, or unavailable (four distinct icons, never collapsed: ✓, ✕, ?, —). It then reuses fusion's own render function to print the full evidence-graph detail underneath.

Constraints​

  • Disabled by default ([semantic_judge].enabled = false).
  • Requires a reachable Ollama-compatible endpoint — a real network call to localhost by default, not a Fornax-hosted service.
  • Raw evidence stays redacted unless --allow-raw-evidence is passed.

What can go wrong​

SymptomCause
— UNAVAILABLEJudge disabled, endpoint unreachable, or the call timed out — the exact rationale string tells you which.
⚠ disagreementThe judge's opinion contradicts the deterministic fusion verdict — read both rationales, don't just trust one.
error: with no judge blockDaemon-side failure (e.g. the judge task panicked) — check daemon logs.
no such claim on recordWrong claim/session id.

Where to go next​

  • Fusion & decision — the deterministic trail the judge is shown alongside.
  • Privacy & Redaction — what "redacted evidence" means before you'd reach for --allow-raw-evidence.
  • Reliability — a different, purely historical-statistics signal, not to be confused with the judge's live model opinion.