{% extends "layouts/dashboard.html" %} {% load ui_tags %} {% block breadcrumbs %} {% url 'core:dashboard' as dashboard_url %} {% crumb_trail "Dashboard" dashboard_url "Audit log" "" as breadcrumbs %} {% include "components/breadcrumbs.html" %} {% endblock %} {% block content %} {% include "components/page_header.html" with title="Audit log" subtitle="Read-only audit trail across grants, finance, projects and operations (PRD NFRFA011)." eyebrow="Governance" description_heading="Trace who did what across the platform without leaving RIMS." description="Every status transition, approval, edit, and export across grants, finance, projects, and operations is recorded here. Use the filters below to scope by actor, action, model, or date range when investigating a specific incident." %} {% if ai_audit_watchdog %}
{% include "components/ai_callout.html" with label=ai_audit_watchdog.label summary=ai_audit_watchdog.summary footnote=ai_audit_watchdog.footnote available=ai_audit_watchdog.available %}
{% endif %}
{% include "components/export_button.html" %} Reset
    {% for r in rows %}
  1. {{ r.timestamp|date:"j M Y H:i" }}

    {{ r.action }}

    {{ r.actor.email|default:"system" }} · {{ r.target_app }}.{{ r.target_model }}

    {% if r.object_repr %}

    {{ r.object_repr|truncatechars:80 }}

    {% endif %} {% if r.changes %}
    {{ r.changes|default_if_none:""|stringformat:"s"|truncatechars:140 }}
    {% endif %}
  2. {% empty %}
  3. {% include "components/empty_state.html" with heading="No audit rows match these filters" subtext="Widen the date range or clear the actor and model filters to surface more activity. The audit log captures every state change to RIMS records and is retained for the full statutory window." %}
  4. {% endfor %}
{% include "components/pagination.html" %} {% endblock %}