-
Notifications
You must be signed in to change notification settings - Fork 6
Judgment Queue
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.
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.
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.
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
SkynetClaw · THE HOUSE · Apache-2.0 · a council that forgets every meeting is not a council
Start
How it works
- Architecture
- The Council
- Institutional Memory
- Recall Quality
- House Mind
- Governance Engine
- Reputation
- Outcome Tracking
- Prove It
- Judgment Queue
Using it
Running it