{{ task_id }}: {{ task_name }}

{{ task_status }} Owner: {{ task_owner }}
{# T-1539: data-verdict drives per-verdict colour (CSS attribute selectors above) #} {# T-1575: rec_complete=true only when verdict AND rationale present. Verdict-only blocks render the warning instead of the green GO badge — can't claim a recommendation exists if the rationale is missing. #} {% if rec_complete %}

Recommendation{% if verdict and verdict != '?' %} — {{ verdict }}{% endif %}

{% if rec_rationale_html %}

Rationale

{{ rec_rationale_html | safe }}
{% endif %} {% if rec_evidence_html %}

Evidence

{{ rec_evidence_html | safe }}
{% endif %}
{% elif verdict and verdict != '?' %}

Recommendation{% if verdict %} — {{ verdict }}{% endif %}

⚠ Verdict recorded as {{ verdict }} but the rationale is missing. A recommendation without a rationale cannot be acted on — ask the agent to fill the **Rationale:** line in the ## Recommendation section.
{# T-1578: NO-REC banner — agent has not yet written a `## Recommendation` block. Same cyan theme (#0e7490) as cockpit pill and /approvals filter button. Ranks above the artifacts-only fallback so "this isn't ready for review" is the primary signal, even when research artifacts exist. #} {% elif state == 'NO-REC' %}

Recommendation — NO-REC

The agent has not yet written a ## Recommendation block for this task. The task isn't ready for review — ask the agent to add a recommendation (GO / NO-GO / DEFER) with rationale and evidence before deciding.
{% elif artifacts %}
No recommendation recorded yet. Open the research artifact: {% for art in artifacts %} {{ art.name }}{% if not loop.last %},{% endif %} {% endfor %}
{% endif %} {# T-1583: Reviewer Verdict — cross-surface parity with /approvals F3 (T-1569). Silently absent when no `## Reviewer Verdict` block exists in the body (pre-v1.4 tasks). Distinct CSS class so the visual separation between agent's recommendation and reviewer's mechanical verdict is clear. #} {% if reviewer and reviewer.overall %}

Reviewer — {{ reviewer.overall }}{% if reviewer.needs_human %}needs human{% endif %}

{% if reviewer.findings == 0 %}No findings.{% else %}{{ reviewer.findings }} finding{{ 's' if reviewer.findings != 1 else '' }} — see full Reviewer block.{% endif %}
{% endif %} {# T-1810: flash banners — success/error from POST /review//pause//resolve #} {% if resolved_flash %}
Paused dispatch resolved — new dispatch {{ resolved_flash }} fired.
{% endif %} {% if resolve_error %}
Resolve failed — {{ resolve_error }}
{% endif %} {# T-1810: paused-dispatch panel — web parity for `fw pause resolve`. Only renders when this task has paused dispatches awaiting resolution. Slice-5 forward-compat: rows with a matching `retry_of_dispatch_id` are filtered out automatically by `list_paused_dispatches_for_task`. #} {% if paused_dispatches %}

Paused Dispatches — Worker awaits your answer

{% for pd in paused_dispatches %}
{% if pd.severity == 'high' %} HIGH {% elif pd.severity == 'medium' %} MED {% elif pd.severity == 'low' %} LOW {% else %} ? {% endif %} {{ pd.dispatch_id_short }} {{ pd.age_label }} ago {% if pd.worker_kind %}· {{ pd.worker_kind }}{% endif %}
Q: {{ pd.question_display }}
{% endfor %}
{% endif %} {% for item in pending_tier0 %}

Tier 0 Approval Required

{{ item.risk }}
{{ item.command_preview }}
{% endfor %}
{% include '_review_acs.html' %}
{% if artifacts %}

Research Artifacts

{% for a in artifacts %} {{ a.name }} {% endfor %}
{% endif %}