← Files Codex ReplayARCHIVED FILE

tests/test_controller_scoring.py

5.18 KB · Oct 2, 2026 · 00:19 UTC

↓ Download file

"""Regression coverage for the controller's comparison score display."""

from __future__ import annotations

import json
import subprocess
import unittest
from pathlib import Path

CONTROLLER_PATH = Path(__file__).resolve().parent.parent / "mcp" / "controller.html"


def _render_outcome_summary(
    evaluation: dict[str, object],
    *,
    schema_version: int = 3,
    costs: dict[str, object] | None = None,
) -> dict[str, object]:
    harness = r"""
const fs = require("node:fs");
const source = fs.readFileSync(process.argv[1], "utf8");
const extract = (start, end) => {
  const first = source.indexOf(start);
  const last = source.indexOf(end, first);
  if (first < 0 || last <= first) throw new Error(`Missing controller code: ${start}`);
  return source.slice(first, last);
};
const render = new Function([
  extract("      const isObject =", "      const safeJson ="),
  extract("      const formatCost =", "      function unwrapToolResult"),
  extract("      function outcomeSummary(evaluation,", "      function comparisonClass"),
  "return outcomeSummary;",
].join("\n"))();
process.stdout.write(JSON.stringify(render(
  JSON.parse(process.argv[2]), Number(process.argv[3]), JSON.parse(process.argv[4])
)));
"""
    result = subprocess.run(
        [
            "node",
            "-e",
            harness,
            str(CONTROLLER_PATH),
            json.dumps(evaluation),
            str(schema_version),
            json.dumps(costs or {}),
        ],
        check=True,
        capture_output=True,
        text=True,
        timeout=15,
    )
    return json.loads(result.stdout)


class ControllerScoringTests(unittest.TestCase):
    def test_controller_outcome_uses_average_dimension_percentages(self) -> None:
        evaluation = {
            "candidate_mapping": {"A": "claude", "B": "codex"},
            "totals": {"A": 0.821, "B": 0.319},
        }

        outcome = _render_outcome_summary(evaluation)

        self.assertEqual(outcome["headline"], "LLM judge: Historical Claude")
        self.assertEqual(outcome["score"], "Historical Claude: 82%\nCodex replay: 32%")
        self.assertIn("average applicable dimension percentages", outcome["detail"])
        self.assertEqual(
            _render_outcome_summary({"totals": {"A": None, "B": None}})["score"],
            "No validated score",
        )
        self.assertEqual(
            _render_outcome_summary({"totals": {"A": 0.821, "B": 0.824}})["headline"],
            "LLM judge: Tie",
        )
        self.assertEqual(
            _render_outcome_summary({"totals": {"A": 0.125, "B": 0.124}})["score"],
            "Historical Claude: 13%\nCodex replay: 12%",
        )

    def test_controller_preserves_legacy_dimension_win_counts(self) -> None:
        outcome = _render_outcome_summary({"totals": {"A": 1, "B": 2}}, schema_version=2)

        self.assertEqual(outcome["headline"], "LLM judge: Codex replay")
        self.assertEqual(outcome["score"], "Historical Claude: 1\nCodex replay: 2")
        self.assertIn("Each dimension win awards one point", outcome["detail"])
        self.assertNotIn("%", outcome["score"])
        self.assertEqual(
            _render_outcome_summary({"totals": {"A": 0, "B": 1}}, schema_version=2)["score"],
            "Historical Claude: 0\nCodex replay: 1",
        )

    def test_judge_and_cost_winners_are_reported_independently(self) -> None:
        cases = (
            (
                {"A": 1, "B": 1},
                {"claude": {"usd": 6.68}, "codex": {"usd": 0.86}},
                "LLM judge: Tie",
                "Cost winner: Codex replay ($6.68 vs $0.86)",
            ),
            (
                {"A": 0.4, "B": 0.9},
                {"claude": {"usd": 0.14}, "codex": {"usd": 0.81}},
                "LLM judge: Codex replay",
                "Cost winner: Historical Claude ($0.14 vs $0.81)",
            ),
            (
                {"A": 0.9, "B": 0.4},
                {"claude": {"usd": 0}, "codex": {"usd": 0}},
                "LLM judge: Historical Claude",
                "Cost winner: Tie ($0.0000 vs $0.0000)",
            ),
        )
        for totals, costs, expected_judge, expected_cost in cases:
            with self.subTest(totals=totals, costs=costs):
                outcome = _render_outcome_summary({"totals": totals}, costs=costs)

                self.assertEqual(outcome["headline"], expected_judge)
                self.assertEqual(outcome["cost"], expected_cost)

    def test_cost_winner_is_unavailable_without_two_valid_costs(self) -> None:
        for costs in ({}, {"claude": {"usd": 1}}, {"claude": {"usd": -1}, "codex": {"usd": 1}}):
            with self.subTest(costs=costs):
                outcome = _render_outcome_summary({"totals": {"A": 1, "B": 1}}, costs=costs)

                self.assertEqual(outcome["cost"], "Cost winner: unavailable")

    def test_shared_usage_does_not_rank_cost_even_with_a_numeric_estimate(self) -> None:
        outcome = _render_outcome_summary(
            {"totals": {"A": 1, "B": 1}},
            costs={"claude": {"status": "shared", "usd": 0}, "codex": {"usd": 1}},
        )
        self.assertEqual(outcome["headline"], "LLM judge: Tie")
        self.assertIn("No standalone usage", outcome["cost"])
        self.assertNotIn("Cost winner", outcome["cost"])

SHA-256: 9a39697fdc208b7d790a82f61d8aa106284d14a977c528bbe463899fc0054d05