AVWatch

Update & risk briefing for the production fleet · generated {{ generated_local }} · run {{ run.run_id }} · verdicts by {{ engine_label }}
{{ run.items_checked }}
Tracked
{{ run.updates_found }}
Behind
{{ groups.avoid|length }}
Do not install
{{ groups.go_behind|length }}
Cleared to go
{{ run.new_since_last }}
New this run
{{ groups.no_baseline|length }}
No baseline
{% if groups.needs_setup %}
{{ groups.needs_setup|length }}
Not checked
{% endif %}
{{ groups.manual|length }}
No firmware
{{ run.errors }}
Source errors
{% macro card(f) %} {% set v = f.verdict %}
{{ f.item.name }} — {{ f.item.vendor }}
{% if f.is_new_since_last_run %}new{% endif %} {% if f.item.is_showstopper %}{{ f.item.criticality }}{% endif %} {{ f.item.category }} {{ (v.recommendation if v else 'unknown')|replace('-',' ') }}
{% if f.check.latest %}
{{ f.item.installed or 'unknown' }} → {{ f.check.latest }} {% if f.bump not in ('none','unknown') %} ({{ f.bump }}{% if f.check.age_days is not none %}, released {{ f.check.age_days|round(0)|int }}d ago{% endif %}) {% elif f.check.age_days is not none %} (released {{ f.check.age_days|round(0)|int }}d ago) {% endif %}
{% endif %} {% if v %} {% if v.headline %}
{{ v.headline }}
{% endif %} {% if v.reasons %} {% endif %}
Risk {{ v.risk_score|round(0)|int }}/100 Rule-based {{ v.heuristic_score|round(0)|int }}/100 → {{ v.heuristic_recommendation|replace('-',' ') }} Confidence {{ v.confidence }} {% if v.heuristic_recommendation != v.recommendation and v.heuristic_recommendation not in ('unknown',) %} ⚠ engines disagree — read the evidence {% endif %}
{% endif %} {% if f.check.detail and f.check.status != 'ok' %}
{{ f.check.detail }}
{% endif %} {% if f.coupling %}
Version dependencies {% if f.item.update_group %} · group “{{ f.item.update_group }}”{% endif %}
{% for c in f.coupling %}
{{ c.severity }}{{ c.message }}
{% endfor %}
{% endif %} {% if f.evidence %}
{{ f.evidence|length }} community post(s) found — the raw evidence {% for e in f.evidence %}
{{ e.severity }} {% if e.url %}{{ e.title }} {% else %}{{ e.title }}{% endif %}
{{ e.source }}{% if e.published %} · {{ e.published.strftime('%d %b %Y') }}{% endif %}{% if e.score is not none %} · score {{ e.score }}{% endif %} · keyword read: {{ e.sentiment }}
{% if e.snippet %}
{{ e.snippet[:300] }}
{% endif %}
{% endfor %}
{% endif %} {% if f.item.check_url or f.check.release_url %}
Vendor download / release notes →
{% endif %}
{% endmacro %} {% if groups.mismatched %}

Version mismatch — broken now ({{ groups.mismatched|length }})

These are running versions that do not match gear they are required to match. This is a present fault, not a future risk: the pair will not link, the panel will not connect, or the wall will not light. Fix these before considering any other update on this page.

{% for f in groups.mismatched %}{{ card(f) }}{% endfor %} {% endif %} {% if groups.avoid %}

Do not install ({{ groups.avoid|length }})

{% for f in groups.avoid %}{{ card(f) }}{% endfor %} {% endif %} {% if groups.wait %}

Hold off for now ({{ groups.wait|length }})

{% for f in groups.wait %}{{ card(f) }}{% endfor %} {% endif %} {% if groups.go_behind %}

Cleared to update ({{ groups.go_behind|length }})

{% for f in groups.go_behind %}{{ card(f) }}{% endfor %} {% endif %} {% if groups.needs_setup %}

Could not be checked this run ({{ groups.needs_setup|length }})

These {{ groups.needs_setup|length }} items are tracked — AVWatch just could not read their versions.

This is a configuration gap, not a gap in the inventory. Every item below is in inventory.yaml with a vendor, a search query and a criticality already set. Fix the reason and they start reporting versions on the next run.

{% set by_reason = {} %} {% for f in groups.needs_setup %} {% set r = f.check.detail or 'unknown reason' %} {% if by_reason.update({r: (by_reason.get(r, []) + [f])}) %}{% endif %} {% endfor %}
{% for f in groups.needs_setup %} {% endfor %}
ItemVendorCategory CriticalityWhy not checked
{{ f.item.name }} {{ f.item.vendor }} {{ f.item.category }} {{ f.item.criticality }} {{ f.check.detail }}
{% endif %} {% if groups.no_baseline %}

No installed version on record ({{ groups.no_baseline|length }})

AVWatch found the current version for these, but has no record of what you actually run — so it cannot tell you whether you are behind. Record each one and it never has to ask again. This is the single highest-value thing to fix in this report.

{% for f in groups.no_baseline %} {% endfor %}
ItemLatest availableReleased Record what you run
{{ f.item.name }}
{{ f.item.vendor }}
{{ f.check.latest }} {% if f.check.released %}{{ f.check.released.strftime('%d %b %Y') }} {% else %}—{% endif %} avwatch set-installed {{ f.item.id }} <version>
{% endif %} {% if groups.manual %}

Nothing to track ({{ groups.manual|length }})

These have no field-updatable firmware or software at all — passive or analogue gear. Listed for completeness so the inventory matches the room; they will never produce an update.

{% for f in groups.manual %} {% endfor %}
ItemVendorWe think we run CriticalityWhere to look
{{ f.item.name }} {{ f.item.vendor }} {{ f.item.installed or '—' }} {{ f.item.criticality }} {% if f.item.check_url %}vendor page →{% else %}—{% endif %}
{% endif %} {% if groups.errors %}

Source errors ({{ groups.errors|length }})

A check that used to work and now fails almost always means the vendor changed their page. Fix the pattern for that item in inventory.yaml.

{% for f in groups.errors %} {% endfor %}
ItemSourceWhat went wrong
{{ f.item.name }}{{ f.item.source_kind }} {{ f.check.detail }}
{% endif %} {% if groups.frozen %}

Frozen by policy ({{ groups.frozen|length }})

Deliberately held at their current version via freeze: true. Listed so the freeze stays visible, not because anything needs doing.

{% for f in groups.frozen %} {% endfor %}
ItemHeld atAvailable
{{ f.item.name }} {{ f.item.installed or '—' }} {{ f.check.latest or '—' }}
{% endif %} {% if groups.current %}

Up to date ({{ groups.current|length }})

{% for f in groups.current %} {% endfor %}
ItemVendorVersionCategory
{{ f.item.name }}{{ f.item.vendor }} {{ f.check.latest }}{{ f.item.category }}
{% endif %} {% if groups.ahead %}

Installed version is ahead of the public release ({{ groups.ahead|length }})

{% for f in groups.ahead %} {% endfor %}
ItemInventory saysNewest public
{{ f.item.name }}{{ f.item.installed }} {{ f.check.latest }}
{% endif %}