{# SPDX-License-Identifier: Apache-2.0 #} {# SPDX-FileCopyrightText: 2026 Marcin Zieba #} {% extends 'base/layout.html' %} {% load static %} {% block title %}Trace Review Workspace{% endblock %} {% block content %} {# htmx boost swaps the body and discards the response head, so this renders here. #}

Trace Review Workspace

{% if drift %} NetBox has changed since this preview was read. The proposed topology below is the one you reviewed, not what NetBox holds now. {% else %} This workspace matches what NetBox holds now. {% endif %} {% if retained_sync_reason %}
{{ retained_sync_reason }}
{% endif %}
{% csrf_token %}
Traces
{{ summary.traces }}
Actionable
{{ summary.actionable }}
Blocked
{{ summary.blocked }}
Invalid
{{ summary.invalid }}
No change
{{ summary.no_change }}
Terminations resolved
{{ summary.resolved_terminations }}
Terminations open
{{ summary.unresolved_terminations }}
Saved decisions
{{ summary.saved_decisions }}
Preview
{{ summary.preview_state }}
Source Traces
{% for trace in traces %} {{ trace.disposition }}
{{ trace.name }}
{% empty %}
This preview planned no Source Trace.
{% endfor %}
{% with trace=selected_trace %} {% if trace %}
{{ trace.disposition }} {{ trace.name }} {% if trace.sheet %}{{ trace.sheet }} row {{ trace.row_number }}{% endif %}
{% for action in trace.actions %}
{% csrf_token %}
{% if not action.enabled %}
{{ action.reason }}
{% endif %} {% endfor %}
Source evidence
From {{ trace.endpoints.from }}
To {{ trace.endpoints.to }}
    {% for segment in trace.segments %}
  1. {{ segment.source_left }} → {{ segment.source_right }} ({{ segment.cable_class }})
  2. {% empty %}
  3. The source states no segment.
  4. {% endfor %}
Current NetBox topology
{% if trace.logical_cable %} {% if trace.logical_cable.visible %}
Logical Cable {{ trace.logical_cable.display }}
{% if trace.logical_cable.description %}
{{ trace.logical_cable.description }}
{% endif %} {% for tag in trace.logical_cable.tags %} {{ tag }} {% endfor %} {% else %}
A Logical Cable exists that you may not view.
{% endif %} {% elif trace.topology_known %}
No direct Logical Cable joins these endpoints.
{% else %}
Planning stopped before it read the current topology.
{% endif %}
Terminations
    {% for termination in trace.terminations %}
  • {{ termination.label }} {% if termination.state == "unresolved" %} unresolved {% elif termination.state == "manually resolved" %} manually resolved {% else %} automatically resolved {% endif %} {% if termination.selected %} {{ termination.selected }} {% endif %} {% if not termination.selectable %}
    {{ termination.reason }}
    {% endif %}
  • {% empty %}
  • This trace resolved no termination.
  • {% endfor %}
Proposed physical topology
{% if trace.deletes_logical_cable %}
delete Logical Cable {% if trace.logical_cable.visible %}{{ trace.logical_cable.display }}{% endif %}
{% endif %}
    {% for segment in trace.segments %}
  1. {{ segment.left }} → {{ segment.right }} {% if segment.status == "create" %} create {% elif segment.status == "reuse existing" %} reuse existing {% elif segment.status == "conflict" %} conflict {% else %} not planned {% endif %} {% if segment.pass_through %}
    Pass-Through Claim: entered at {{ segment.left }}.
    {% endif %}
  2. {% empty %}
  3. Planning stopped before it proposed a topology.
  4. {% endfor %}
{% if trace.findings %}
    {% for finding in trace.findings %}
  • {{ finding.message }}
  • {% endfor %}
{% endif %}
{% else %}
This preview planned no Source Trace.
{% endif %} {% endwith %}
{% endblock %}