{% extends "base.html" %} {% block title %}Review {{ review_id[:20] }} — dvad{% endblock %} {% block content %} {% if status == 'running' %} {# ── Progress View ───────────────────────────────────────────────────── #}

dvad-gui | review | {{ review_id }}

ROUND 1 — REVIEWERS
DEDUP
ROUND 1 — AUTHOR
ROUND 2 — REBUTTALS
GOVERNANCE
REVISION
Reviews typically take 2-10 minutes depending on model and input size.
Log
{% else %} {# ── Detail View ─────────────────────────────────────────────────────── #} {% if ledger %} {% if review_mode == 'spec' %}
Reviewers
Dedup
{% if has_revised %}
Suggestions
{% elif has_original %}
Suggestions
{% endif %}
{% elif review_mode == 'integration' %}
Integration Review
Author Response
Rebuttals
Governance
{% if escalated|length > 0 or overridden|length > 0 %}
Overrides
{% endif %} {% if has_revised %}
Revision
{% elif has_original %}
Revision
{% endif %}
{% else %}
Round 1 — Reviewers
Round 1 — Author
Round 2 — Rebuttals
Governance
{% if escalated|length > 0 or overridden|length > 0 %}
Overrides
{% endif %} {% if has_revised %}
Revision
{% elif has_original %}
Revision
{% endif %}
{% endif %} {% if review_mode == 'spec' %} {# Spec Summary Strip #}
Suggestion Groups: {{ ledger.get('summary', {}).get('total_groups', 0) }} Multi-Consensus: {{ ledger.get('summary', {}).get('multi_consensus', 0) }} Single Source: {{ ledger.get('summary', {}).get('single_source', 0) }} {% if elapsed_str %}Elapsed: {{ elapsed_str }}{% endif %}
{% else %} {# Summary Strip #}
Auto-Accepted: {{ auto_accepted|length }} Auto-Dismissed: {{ auto_dismissed|length }} Escalated: {{ escalated|length }} Overridden: {{ overridden|length }} {% if elapsed_str %}Elapsed: {{ elapsed_str }}{% endif %}
Escalation resolved — updated revision available
{% endif %} {# Cost Estimate Table (dry_run only) #} {% if cost_estimate_rows %}

Cost Estimate

{% set ns = namespace(total=0.0) %} {% for row in cost_estimate_rows %} {% set ns.total = ns.total + row.est_cost_usd %} {% endfor %}
Step Model Est. Input Tokens Est. Output Tokens Est. Cost (USD)
{{ row.step }} {{ row.model }} {{ "{:,}".format(row.est_input_tokens) }} {{ "{:,}".format(row.est_output_tokens) }} ${{ "%.4f"|format(row.est_cost_usd) }}
Estimated Total ${{ "%.4f"|format(ns.total) }}
{% endif %} {# Submitted Files #} {% if input_files_manifest %}

Submitted Files

{% for f in input_files_manifest %}
{{ f.type }} {{ f.filename }} {{ f.original_path }}
{% endfor %}
{% endif %} {# Escalated Items #} {% if escalated %}

{% if review_mode == 'spec' %}Suggested Items{% else %}Escalated Items{% endif %}

{% for g in escalated %}
{{ g.group_id }} {{ g.severity|upper }} {{ g.category }} {{ g.source_reviewers|length }} reviewer{{ 's' if g.source_reviewers|length != 1 }}
{{ g.concern }}
Show details
Reviewer Feedback
{% for p in g.points %}
[{{ p.reviewer }}] {{ p.description }} {% if p.recommendation %}
Recommendation: {{ p.recommendation }}
{% endif %} {% if p.location %}
Location: {{ p.location }}
{% endif %}
{% endfor %}
{% if g.author_resolution and g.author_resolution != 'no_response' and review_mode != 'spec' %}
Author Response (Round 1): {{ g.author_resolution }}
[{{ ledger.get('author_model', 'author') }}] {{ g.author_rationale }}
{% endif %} {% if g.rebuttals %}
Reviewer Rebuttals (Round 2)
{% for rb in g.rebuttals %}
[{{ rb.reviewer }}] {{ rb.verdict }} {{ rb.rationale }}
{% endfor %}
{% endif %} {% if g.author_final_resolution %}
Author Final Response: {{ g.author_final_resolution }}
[{{ ledger.get('author_model', 'author') }}] {{ g.author_final_rationale }}
{% endif %} {% if g.governance_reason %}
Governance: {{ g.governance_resolution }}
{{ g.governance_reason }}
{% endif %}
{% if review_mode != 'spec' %}
{% endif %}
{% endfor %}
{% endif %} {# Other Groups #} {% if auto_accepted %}
Auto-Accepted Groups ({{ auto_accepted|length }}) {% for g in auto_accepted %}
{{ g.group_id }} {{ g.severity|upper }} {{ g.category }}
{{ g.concern }}
Details
{% for p in g.points %}
[{{ p.reviewer }}] {{ p.description }} {% if p.recommendation %}
Recommendation: {{ p.recommendation }}
{% endif %}
{% endfor %} {% if g.author_rationale %}
[{{ ledger.get('author_model', 'author') }}] {{ g.author_rationale }}
{% endif %}
{% endfor %}
{% endif %} {% if auto_dismissed %}
Auto-Dismissed Groups ({{ auto_dismissed|length }}) {% for g in auto_dismissed %}
{{ g.group_id }} {{ g.concern }}
{% endfor %}
{% endif %} {% if overridden %}
Overridden Groups ({{ overridden|length }}) {% for g in overridden %}
{{ g.group_id }} {{ g.severity|upper }} {{ g.category }}
{{ g.concern }}
{% endfor %}
{% endif %} {# Footer Actions — revision buttons are state-driven #} {# Instructional blurb — shown when revision exists #} {% if has_revised %}

{% if review_mode == 'integration' %} This remediation plan details all accepted findings. Use it as a prompt alongside your source files to implement the changes. {% elif review_mode == 'code' %} The revised file incorporates all accepted findings. Download it or the diff patch to apply changes. {% else %} This revision incorporates all accepted findings. Use it as a prompt alongside your source files to implement the changes. {% endif %} {% if revision_stale %} Findings have changed since this revision was generated — regenerate before using. {% endif %}

{% endif %} {% endif %} {% endif %} {% endblock %} {% block scripts %} {% if status == 'running' %} {% endif %} {% endblock %}