{% extends "base.html" %} {% block content %}

Reviewer Audit

Latest corpus-mode reviewer output (T-1484/T-1485 v1.5). Pass A is the cheap drift signal (file-hash diff vs baseline); Pass B re-executes ## Verification blocks inside a worktree at each task's completion SHA. Both are read-only; the data shown here comes from the most recent YAML written under .context/audits/reviewer/.

Run via cron: fw reviewer audit --pass-a / fw reviewer audit --pass-b. See Reviewer Overrides for TTL'd false-positive suppressions.

{# ───────────────── Pass A ───────────────── #}

Pass A — Drift Signal

{% if pass_a %}

Source: {{ pass_a_path }}  Scanned: {{ pass_a.tasks_scanned }} {% if pass_a.limit %}(limit {{ pass_a.limit }}){% endif %}  When: {{ pass_a.scan_timestamp }}

STABLE: {{ pass_a.totals.STABLE }}   DRIFTED: {% if pass_a.totals.DRIFTED > 0 %} {{ pass_a.totals.DRIFTED }} {% else %}{{ pass_a.totals.DRIFTED }}{% endif %}   NO-BASELINE: {{ pass_a.totals['NO-BASELINE'] }}   NO-VERIFICATION: {{ pass_a.totals['NO-VERIFICATION'] }}

{% set drifted = pass_a.per_task | selectattr('verdict', 'equalto', 'DRIFTED') | list %} {% if drifted %}

Drifted tasks ({{ drifted|length }})

{% for row in drifted %} {% endfor %}
Task Changed Missing Unchanged Files (first 10)
{{ row.task_id }} {{ row.n_changed }} {% if row.n_missing > 0 %}{{ row.n_missing }}{% else %}0{% endif %} {{ row.n_unchanged }} {% for f in row.changed_files %}{{ f }}{% if not loop.last %}, {% endif %}{% endfor %}
{% else %}

No drifted tasks in the latest scan.

{% endif %} {% else %}

No Pass A audit YAML yet. Run fw reviewer audit --pass-a --baseline first to seed baselines, then fw reviewer audit --pass-a to scan.

{% endif %} {# ───────────────── Pass B ───────────────── #}

Pass B — Worktree Re-execution

{% if pass_b %}

Source: {{ pass_b_path }}  Scanned: {{ pass_b.tasks_scanned }} {% if pass_b.limit %}(limit {{ pass_b.limit }}){% endif %}  When: {{ pass_b.scan_timestamp }}

PASS: {{ pass_b.totals.PASS }}   FAIL: {% if pass_b.totals.FAIL > 0 %} {{ pass_b.totals.FAIL }} {% else %}{{ pass_b.totals.FAIL }}{% endif %}   NO-VERIFICATION: {{ pass_b.totals['NO-VERIFICATION'] }}   ERROR: {{ pass_b.totals.ERROR }}

{% set fails = pass_b.per_task | rejectattr('overall', 'equalto', 'PASS') | rejectattr('overall', 'equalto', 'NO-VERIFICATION') | list %} {% if fails %}

Non-PASS tasks ({{ fails|length }})

{% for row in fails %} {% endfor %}
Task Verdict SHA PASS FAIL SKIPPED ERROR Note
{{ row.task_id }} {% if row.overall == 'FAIL' %}FAIL {% else %}{{ row.overall }}{% endif %} {{ (row.sha or 'none')[:8] }} {{ row.n_pass }} {{ row.n_fail }} {{ row.n_skipped }} {{ row.n_error or 0 }} {{ row.error or '' }}
{% else %}

No FAIL or ERROR tasks in the latest scan.

{% endif %} {% else %}

No Pass B audit YAML yet. Run fw reviewer audit --pass-b to scan.

{% endif %}
{% endblock %}