{# One finding = one atomic
. Four-pass provenance for plan findings; only the fields present for code-review findings. `f` is the finding view-model. #}
{{ f.decision_label }} {{ f.finding }} {# Threshold meter (plan findings). #} {% if f.has_meter %}

priority {{ f.priority }} · block threshold {{ f.block_threshold }}

{% elif f.meter_missing %}

threshold not recorded (v1)

{% endif %} {# Pass 1 — Finding. #}

Finding

finding: {{ f.finding }}

{% if f.criteria %}

criteria: {{ f.criteria | join(", ") }}

{% endif %} {% if f.location %}

location: {{ f.location }}

{% endif %} {% if f.evidence %}

evidence: {{ f.evidence | join(" | ") }}

{% endif %} {% if f.scenarios %}

scenarios: {{ f.scenarios | join(" | ") }}

{% endif %} {% if f.impact %}

impact: {{ f.impact }}

{% endif %} {% if f.suggested_fix %}

suggested fix: {{ f.suggested_fix }}

{% endif %}
{# Pass 2 — Verification (omitted entirely when absent). #} {% if f.verification %}

Verification

{% for key, val in f.verification.items() %}

{{ key }}: {{ val }}

{% endfor %}
{% endif %} {# Pass 3 — Decision (plan findings only). #} {% if f.is_plan %}

Decision

decision: {{ f.decision }}

{% if f.reason %}

reason: {{ f.reason }}

{% endif %}
{% endif %} {# Pass 4 — Coaching (only when this finding matched a coaching move). #} {% if f.coaching %}

Coaching

{% if f.coaching.move_name %}

move: {{ f.coaching.move_name }}

{% endif %} {% if f.coaching.coaching %}

{{ f.coaching.coaching }}

{% endif %}
{% endif %} {% if f.norm_id %}

norm_id: {{ f.norm_id }}

{% endif %}