{% extends "base.html" %} {% block title %}Security Updates{% endblock %} {% block head %} {{ super() if super }} {% endblock %} {% block content %}

Security updates

{% if report %} {{ report.apt_total }} apt updates pending ({{ report.apt_security }} security), {{ report.pip_total }} pip outdated. Last scanned: {{ report.generated_at }}. {% else %} No scan has run yet on this install. {% endif %}
{% if csrf_token %}{% endif %}
{% if not report %}
Click Run scan now to take a snapshot — or wait for the daily 04:00 UTC tick (the event is seeded automatically; manage it under Scheduled Events).
{% else %} {% if report.errors %}
Scan errors:
{% endif %}
OS packages (apt) {{ report.apt_total }} total {% if report.apt_security %} · {{ report.apt_security }} security {% endif %}
{% if not report.apt %}
Nothing pending — system is up to date.
{% else %} {% for u in report.apt %} {% endfor %}
PackageCurrentLatestSourceType
{{ u.name }} {{ u.current }} {{ u.latest }} {{ u.source }} {% if u.security %} SECURITY {% else %} update {% endif %}
{% endif %}
{% if report.apt %} {% endif %}
Python packages (pip) {{ report.pip_total }} outdated
{% if not report.pip %}
Nothing outdated — venv is current.
{% else %} {% for u in report.pip %} {% endfor %}
PackageCurrentLatest
{{ u.name }} {{ u.current }} {{ u.latest }}
{% endif %}
{% if report.pip %} {% endif %}
{% if report.pip_pinned %}
Intentionally pinned packages {{ report.pip_pinned | length }} pinned — do not upgrade
{% for u in report.pip_pinned %} {% endfor %}
PackageCurrentLatest (ignored)Reason
{{ u.name }} {{ u.current }} {{ u.latest }} {{ u.pinned }}
{% endif %}
Report file: logs/security-report.json. Driven by the {% if event_id %}scheduled event{% else %}security_check handler{% endif %}.
{% endif %}
{% endblock %}