{% extends "base.html" %} {% block title %}Agreement — FreeWeight{% endblock %} {% block content %}

{{ goal.pack.name }}

{% include "partials/_wizard_steps.html" %}

6. {{ step.heading }}

{% if error %} {% endif %} {% if outcome %} {% set verdict = outcome.verdict %}

{% if verdict.state.value == 'calibrated' %} The jury agrees with you well enough to be worth trusting {% elif verdict.state.value == 'uncalibrated' %} Not measurable yet — and that is a useful answer {% else %} {{ verdict.state.value | replace('_', ' ') }} {% endif %}

{% if verdict.weighted_kappa_w is none %} There is no agreement figure yet. {% else %} Across your judged criteria, the jury and you agree at {{ '%.2f' % verdict.weighted_kappa_w }} over {{ verdict.n_holdout }} held-out samples. {% endif %}

{% if verdict.state.value == 'calibrated' %} Results from this goal emit capability evidence, discounted by a judge validity factor of {{ '%.2f' % verdict.judge_validity_factor }}. {% elif verdict.state.value == 'uncalibrated' %} Your goal still runs, and every sample stays inspectable. What it will not do is emit capability evidence — not discounted evidence, none. The criteria below are where the jury and you diverged most, and that is where the rubric needs work. {% else %} Grade more samples: the minimum is {{ verdict.min_samples }} and you have {{ verdict.graded_samples }}. Too few grades is a different thing from poor agreement, and this is the first one. {% endif %}

What the number means

{% for label, range_text, meaning in bands %} {% endfor %}
The band, and the consequence, in words. The coefficient is beside it, never instead of it.
BandκwWhat it means for you
{{ label }} {{ range_text }} {{ meaning }}

Per criterion

{% for agreement in outcome.criteria %} {% endfor %}
Every coefficient carries its n_holdout. A κw without its n is a number pretending to be a fact.
Criterion Weight κw ρ MAE Bias nholdout Band The lint's read
{{ agreement.criterion_key }} {{ '%.0f' % (agreement.weight * 100) }}% {{ '%.3f' % agreement.result.kappa_w }} {{ '%.3f' % agreement.result.rho }} {{ '%.2f' % agreement.result.mae }} {{ '%+.2f' % agreement.result.bias }}
{{ 'generous' if agreement.result.bias > 0 else 'harsh' }}
{{ agreement.result.n_holdout }} {{ agreement.band | replace('_', ' ') }} {{ agreement.lint or '—' }}
{% for agreement in outcome.criteria %} {% if agreement.disagreements %}

Where {{ agreement.criterion_key }} diverged most

Your grade, your note, and the jury's. This is the part that teaches: the number is attached to a sample you remember rather than to an abstraction.

{% for disagreement in agreement.disagreements %}
You graded {{ disagreement.author_grade }} {{ disagreement.author_note or '—' }}
The jury graded {{ disagreement.jury_grade }} {{ disagreement.jury_rationale or '—' }}
The sample
{{ disagreement.excerpt }}
{% endfor %} {% endif %} {% endfor %} {% if outcome.warnings %}

Before you read those numbers

{% endif %}

FreeWeight proposes no rewritten criterion text. It names the problem and shows the evidence. The rubric is yours, and a model that edited it until it could measure it would be measuring its own edit.

{% else %}

No calibration yet

Grade this goal's samples, then run the calibration:

freeweight goals calibrate {{ goal.slug }}

Go to grading

{% endif %} {% endblock %}