{% extends "base.html" %} {% block title %}Twin Observatory - ICDEV Dashboard{% endblock %} {% block content %}
Cross-canvas digital-twin health across all registered twins, plus the live twin drift/lifecycle event stream. Read-only aggregate over the twin_core observer. {% if generated_at %}Generated {{ generated_at }}.{% endif %}
{% set summary = report.summary or {} %} {% set vd = summary.verdict_distribution or {} %}| Canvas | Latest verdict | Snapshots | Last snapshot | Violations | Refresh | Method | |
|---|---|---|---|---|---|---|---|
| {{ t.display_name or t.canvas }} | {{ t.latest_verdict }} | {{ t.snapshot_count if t.snapshot_count is not none else '—' }} | {{ t.age_human }} {% if t.stale %}(stale){% endif %} | {{ t.violation_total or 0 }} | {% if t.reflex_overdue %}overdue {% elif t.reflex %}ok {% else %}—{% endif %} | {{ t.method }} | {% if t.canvas_route and t.canvas_route != '#' %} open → {% endif %} |
| No registered twins. | |||||||
| Time | Source | Event | Target | Verdict |
|---|---|---|---|---|
| {{ e.created_at }} | {{ e.source_canvas }} | {{ e.event_type }} | {{ e.target_canvas or '—' }} | {{ e.verdict or '—' }} |
| No twin events yet. Events appear as twins take snapshots / run simulations. | ||||