Loss in {{ violation.loss_account or "-" }} → triggered by {{ violation.buy_account or "-" }} on {{ violation.triggering_buy_date or "-" }}
{% if violation.kind == "permanent_ira" %}
{# Lock icon + "Permanent (IRA trap)" so this chip reads distinct from
the same-color Schwab / Cross-account chips next to it — the loss is
permanently gone, not merely rolled forward. #}
Permanent (IRA trap)
{% endif %}
{% if violation.source == "schwab_g_l" %}
Schwab
{% elif violation.source == "engine" %}
{% if violation.loss_account != violation.buy_account %}
{# audit #32 — `chip-source` (neutral slate) instead of `chip-probable`
(yellow). The red/yellow/blue triplet is reserved by CLAUDE.md for
the wash-sale confidence palette; a yellow "Cross-account" chip
sitting next to a "Confirmed" red chip in the same row was
reading as a second, parallel verdict instead of as a data-source
tag. #}
Cross-account
{% else %}
Engine
{% endif %}
{% endif %}