Skip to content

Judgment Queue

ElmatadorZ edited this page Jul 28, 2026 · 1 revision

Judgment Queue — what the loop is waiting on, and who it is waiting on

The learning loop grades a staked claim; a graded claim then resolves that session's dissents and revises what the House believes. All of it was wired and working, and for nine recorded dissents none of it had ever run.

The cause was not a broken judge.

auto_judge recognises two kinds of claim: mission hypotheses, graded against the filesystem, and claims whose metric names the eval scoreboard. Everything else stays human-judged — which was true, except that nothing ever told the human. A council forecast such as "THE HOUSE's overall efficiency will improve" came due, found no automatic judge, correctly returned None (the judge abstains rather than guesses) and stayed pending. Forever.

And dissents are only resolved once their session is fully graded. So one unanswerable claim silently blocked every dissent recorded beside it. No error anywhere.

This is the same confusion the liveness fix removed elsewhere: "reality has not answered" was indistinguishable from "nobody was asked."

curl http://127.0.0.1:8766/api/house/judgments
State Meaning
AWAITING_HORIZON the clock is still running — reality genuinely has not answered
AWAITING_AUTO_JUDGE due, and a judge exists that will grade it on the next tick
AWAITING_HUMAN due, no automatic judge — the operator must rule, and until they do it blocks that session's dissents
MALFORMED the record is corrupt; nobody could judge it as stored
JUDGED a verdict is in

When something is blocked on a person, the response says so plainly:

N dissent(s) cannot be resolved until a human rules on M claim(s). The House is not waiting on reality here — it is waiting on you.

Ruling on a claim

curl -X POST http://127.0.0.1:8766/api/house/judgments/rule \
  -H 'Content-Type: application/json' \
  -d '{"prediction_id":"pr_...","verdict":"incorrect","horizon":"7","note":"evidence"}'

submit() deliberately delegates to the ordinary grading path rather than writing a status itself, so a human verdict moves reputation, resolves dissents, and revises beliefs through exactly the code an automatic verdict uses. A second write path would be an untested way to change what the House believes.

What happens when it closes

The first ruling on this project's own database:

  • the prediction was graded incorrect
  • the session's dissent resolved, and the Skeptic was marked proven_correct — the majority was wrong, so the dissenter was right
  • the vindication reached reputation; the Forecaster's score fell from the neutral prior to 277
  • the House's belief was revised from confidence 1.0 to 0.4, attributed to Reality (outcome)

A dissenter who turns out wrong is never punished — House doctrine, and a test pins it. The asymmetry is the point: punishing wrong dissent teaches the council to stop dissenting.

MALFORMED is a real finding

Two rows were flagged as unjudgeable-as-stored: a Python dict repr where the claim should be, and a fragment of raw JSON where the invalidation condition should be. Both came from a parser that cut a character window out of serialised data. The extractor now refuses to stake such a claim at all — an unfalsifiable claim was already rejected, and a corrupt one is worse, because it passes for falsifiable while being impossible to judge.

The two existing rows were left in place. They are evidence of a real defect, and deleting the record of having been wrong is the one thing this system is built not to do.

→ Next: Prove It · Outcome Tracking · Governance Engine

Clone this wiki locally