jouleclaw-diagnose: a cross-model panel, so a verdict can rest on concurring models, or say they did not concur #277
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/diagnose-panel-entailer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What was missing
Backing::ConcurringandBacking::Contestedexist in the schema, andrequire_substantive_groundingalready accepts them. But nothing produced either one: diagnose only ever declared one entailer's fixed backing. A verdict could never say "two independent models agreed", and could never record that they did not.What this adds
PanelEntailer. A panel has at least two members, each a different model. Every consulted (claim, item) pair goes to every member, and the report carries each member's result under its own model id. That keepsrequire_substantive_grounding's check, that the declared backing matches the models in the evidence, working.Entailer::backing_of:Concurringwhen every member gave the same label on every pair;Contestedwhen any two members differed on any pair.models_disagree: true. If one member entails a pair and another contradicts it, that surfaces as the existing consistency conflict.Single-model behaviour is unchanged. Each pair has one result, so "every result entails" means the same as "it entails". The new detail key appears only when a panel splits, so a single model's report keeps its bytes. The two new trait methods have default implementations, so existing entailers need no change.
Checked
On the build host,
jouleclaw-diagnoseandjouleclaw-edge-clipass, including the 7 new tests:Concurring;Contestedand does not ground the claim;Clippy reports nothing new.
Each of these mutations fails at least one test:
🤖 Generated with Claude Code