Skip to content

fix: adjudicate distinguishes part-whole from identity and stops showing a flat confidence#147

Merged
jasonssdev merged 1 commit into
mainfrom
fix/adjudicate-part-whole-and-confidence
Jul 24, 2026
Merged

fix: adjudicate distinguishes part-whole from identity and stops showing a flat confidence#147
jasonssdev merged 1 commit into
mainfrom
fix/adjudicate-part-whole-and-confidence

Conversation

@jasonssdev

Copy link
Copy Markdown
Owner

What

openkos adjudicate had two defects (issue #138):

  1. Part-whole pairs marked SAME. In a real MCP run, mcp / mcp-server, mcp / mcp-primitives, etc. — all components of MCP — were labelled SAME, which feeds a destructive merge that would collapse six distinct concepts into one.
  2. Flat confidence: 0.95 on every verdict. A constant, uncalibrated value shown to two decimals implies a precision that does not exist.

Fix

  • Prompt rubric (resolution/adjudication.py): SAME now means the same entity under different names (synonyms, aliases, casing/spelling variants). A part, component, aspect, subtype, instance, or example of X is a DIFFERENT entity — "a component of X is not a duplicate of X" — and the model is told to prefer different/uncertain for part-whole pairs because SAME triggers a destructive merge.
  • Display (cli/main.py): the confidence number is no longer rendered. The value is still parsed and kept on AdjudicatedCandidate.confidence for future thresholding — it is just not shown as false precision.

Empirical validation (live qwen3:8b)

Pair Relationship Before After (3 runs)
MCP / MCP Server part-whole SAME DIFFERENT 3/3
MCP / Model Context Protocol true synonym SAME 3/3

The part-whole fix does not over-bias: genuine synonyms still resolve to SAME. Confidence stayed flat at 0.95 in the replay, confirming why hiding it is the right call.

Tests

  • New test_system_prompt_distinguishes_part_whole_from_identity pins the rubric against regression.
  • CLI render test updated to assert the confidence number is absent.
  • Full suite: 1840 passed, ruff + mypy clean.

Closes #138

🤖 Generated with Claude Code

…ing a flat confidence

The adjudication rubric now states SAME means the same entity under
different names (synonyms/aliases) and that a part, component, aspect,
subtype, instance, or example of X is a DIFFERENT entity, biasing toward
different/uncertain for part-whole pairs since SAME feeds a destructive
merge. Verified live on qwen3:8b: the MCP/MCP-Server part-whole pair now
returns DIFFERENT 3/3 (was SAME), while a true MCP/Model-Context-Protocol
synonym pair still returns SAME 3/3.

The per-verdict confidence number is no longer displayed: a local model
returns a flat, uncalibrated value (a constant 0.95), so a two-decimal
number implied a precision it does not have. The value is still parsed
and kept on AdjudicatedCandidate for future thresholding.

Closes #138
@jasonssdev
jasonssdev merged commit 6d06d2c into main Jul 24, 2026
6 checks passed
@jasonssdev
jasonssdev deleted the fix/adjudicate-part-whole-and-confidence branch July 24, 2026 14:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: adjudicate reports a flat 0.95 confidence and marks part-whole pairs as SAME

1 participant