{% extends "base.html" %} {% block title %}Classifier vs judge · {{ job.job_id }} — Nullius{% endblock %} {% block crumb %}/ {{ job.job_id }} / classifier vs judge{% endblock %} {% block head %} {% endblock %} {% block body %}

Classifier vs judge experimental

{{ job.job_id }}

The recorded outcome is the classifier's deterministic reading of the exception, verifier and patch; the judge's failure_cause is its reading of the transcript. Where they disagree is listed first. The recorded outcome never changes.

{% if not view.applies %}
This is a control run ({{ job.agent_label }}): its outcomes are a check on the tasks and the verifier, not an agent's attempt, so a failure cause over its transcript has nothing to reconcile with.
{% else %} {% set c = view.counts %}
Trials{{ c.trials }}
Asked failure cause{{ c.asked }} (unresolved; a resolved trial is not asked)
Judged{{ c.judged }}{% if c.unjudged %} · {{ c.unjudged }} not judged{% endif %}
Comparable{{ c.comparable }}
Agree{{ c.agree }}
Disagree{{ c.disagree }}
Suggested{{ c.suggested }}
Below threshold{{ c.gated }}
Not comparable{{ c.not_comparable }}
Confidence threshold
{% if view.threshold != default_threshold %}default {{ '%.2f'|format(default_threshold) }}{% endif %}
the judge's own confidence on the pick; a disagreement below it is listed as noise, not as a finding
{% macro rows_table(rows, id, with_suggests=False) %}
{% if with_suggests %}{% endif %} {% for r in rows %} {% if with_suggests %}{% endif %} {% endfor %}
TrialRecorded outcomeCompatible with Judge's pickConfidencep(pick)Suggests experimental
{{ r.task }} {{ r.outcome_label }} {{ r.compatible|join(' · ') if r.compatible else '—' }} {% if r.choice %}{{ r.choice }}{% if r.version and r.version != QUESTIONS_VERSION %} {{ r.version }}{% endif %}{% else %}not judged{% endif %} {% if r.confidence is not none %}{{ '%.0f'|format(r.confidence * 100) }}%{% else %}—{% endif %} {% if r.p is not none %}{{ '%.0f'|format(r.p * 100) }}%{% else %}—{% endif %}{% if r.suggests %}{% for s in r.suggests %}{{ C_LABELS[s] }}{% if not loop.last %} or {% endif %}{% endfor %}{% if r.likely %} direct {{ '%.0f'|format((r.likely_p or 0) * 100) }}%{% endif %} — a suggestion from the transcript; the recorded outcome stays {{ r.outcome_label }}{% else %}—{% endif %}
{% endmacro %}

Disagreements {{ c.disagree }}

The judge's pick is not one the recorded outcome allows. Strongest first: by the judge's confidence, then the probability on the pick.

{% if view.rows.disagree %}{{ rows_table(view.rows.disagree, 'reconcile-disagreements') }}{% else %}

None above the threshold.

{% endif %}
{% if view.rows.other %}

Cause outside the list {{ c.other }}

The judge chose other: a cause none of its options describes. Not a claim about which option the classifier should have used, so listed apart from the disagreements.

{{ rows_table(view.rows.other, 'reconcile-others') }}
{% endif %} {% if view.rows.suggestion %}

Suggestions for unknown outcomes {{ c.suggested }} experimental

The classifier could not place these trials. The judge's pick names the outcome labels it is compatible with — a place to look, never a reclassification: the recorded outcome stays {{ C_LABELS.unknown }}.

{{ rows_table(view.rows.suggestion, 'reconcile-suggested', with_suggests=True) }}
{% endif %}
Agreements {{ c.agree }} — the pick is one the outcome allows {% if view.rows.agree %}{{ rows_table(view.rows.agree, 'reconcile-agreements') }}{% else %}

None.

{% endif %}
Below the confidence threshold {{ c.gated }} — judged, but at a confidence under {{ '%.2f'|format(view.threshold) }}; listed here rather than dropped {% if view.rows.gated %}{{ rows_table(view.rows.gated, 'reconcile-gated-rows', with_suggests=True) }}{% else %}

None.

{% endif %}
Not comparable {{ c.not_comparable }} — the recorded outcome makes no claim a failure cause could contradict, and the pick suggests no label {% if view.rows.not_comparable %}{{ rows_table(view.rows.not_comparable, 'reconcile-not-comparable-rows') }}{% else %}

None.

{% endif %}
Not judged {{ view.rows.not_judged|length }} — no failure cause stored (resolved trials are never asked one) {% if view.rows.not_judged %}{{ rows_table(view.rows.not_judged, 'reconcile-not-judged-rows') }}{% else %}

None.

{% endif %}

How the two vocabularies meet

The classifier's labels and the judge's options are not the same list, so a trial agrees when the pick is one its outcome does not contradict. A label with several compatible options is one the classifier cannot split further; a label with none is not comparable.

{% for k in C_ORDER %}
{{ C_LABELS[k] }}
{{ COMPATIBLE[k]|join(' · ') if COMPATIBLE[k] else 'no correspondence — not comparable' }}
{% endfor %}
{% endif %} {% endblock %}