{# Executive — Probes tab compact table (QA-032). Replaces the per-row card list (``exec-probes-list`` / ``exec-probe``) with a 5-column scannable table: PROBE ID | AGENT · ASI | VERDICT | TURN | TIMESTAMP Each row carries ``data-probe-id`` + ``data-source="probe"`` so the shared slide-over JS (``executive_findings.js``) can locate the matching payload in the ``#exec-probes-payload`` JSON island and render its full prompt / target response / judge reasoning into the slide-over body when the row is clicked / Enter-keyed. Verdict vocab — same single source of truth as the Findings tab evidence pills (QA-031): ``fail`` → EXPLOITED (red), ``pass`` → DEFENDED (green), ``inconclusive`` → INCONCLUSIVE (amber), empty/unset → PENDING (muted). All ``p.*`` fields are operator-untrusted (sourced from ``/memory.jsonl`` via :func:`_assemble_probes_list`) — Jinja autoescape applies. Never use ``|safe`` on these values. #} {% for p in probes_list %} {% set _verdict = p.verdict or 'unknown' %} {% endfor %}
PROBE ID AGENT · ASI VERDICT TURN TIMESTAMP
{{ p.probe_id or '—' }} {{ p.asi_category or '—' }} {{ p.agent or '—' }} {%- if _verdict == 'fail' -%}EXPLOITED {%- elif _verdict == 'pass' -%}DEFENDED {%- elif _verdict == 'inconclusive' -%}INCONCLUSIVE {%- else -%}PENDING {%- endif -%} turn {{ p.turn }}