{% extends "base.html" %} {% block title %}Topology — Ops Hub{% endblock %} {% block extra_css %} {% endblock %} {% block content %} {% from "includes/classification_macros.html" import design_classification_banner %} {{ design_classification_banner(classification) }} ← Ops Hub

🕸️ Topology

Agent Graph · SPOF Analysis · Dependency Map

{% set topo = data.topology %} {% set nodes = topo.get('nodes', []) if topo else [] %} {% set edges = topo.get('edges', []) if topo else [] %} {% set spofs = topo.get('spof_nodes', []) if topo else [] %}
{{ nodes|length }}
Nodes
{{ edges|length }}
Edges
{{ spofs|length }}
SPOFs
{{ topo.get('tiers', {})|length if topo else '—' }}
Tiers
{% if spofs %}

⚠️ Single Points of Failure

{% for spof in spofs %}
{{ spof.get('name', spof.get('id', '?')) }} {{ spof.get('type', '') }} {% if spof.get('dependents') %} {{ spof.dependents|length }} dependents {% endif %} {% if spof.get('tier') %}Tier {{ spof.tier }}{% endif %}
{% endfor %}
{% endif %}

Agent Dependency Graph

Core Agent
Domain Agent
Support Agent
SPOF
Unknown

Nodes

{% if nodes %} {% for node in nodes[:20] %} {% set is_spof = node.get('id') in (spofs | map(attribute='id') | list) %}
{{ node.get('name', node.get('id','?')) }} {% if node.get('tier') %}T{{ node.tier }}{% endif %} {% if node.get('type') %}{{ node.type }}{% endif %} {% if is_spof %}SPOF{% endif %}
{% endfor %} {% if nodes|length > 20 %}

+ {{ nodes|length - 20 }} more nodes

{% endif %} {% else %}

No topology data available.

{% endif %} View full JSON →
{% include "includes/iqe_query_widget.html" %} {% endblock %} {% block extra_js %} {% endblock %}