{% extends "base.html" %} {% import "_macros.html" as m %} {% block title %}Architecture — Code Atlas{% endblock %} {# The architecture page — metric cards, the design structure matrix, the cycle inventory read off the matrix, and the trend table, all ported verbatim. The matrix rows and the label column share one flex pitch (`align-items:stretch` + `min-height:0`), which is what keeps labels and rows aligned at any height. #} {% block sidebar %} {% endblock %} {% block main %}

Architecture health

Whether the structure is decaying, measured across index runs.
{% if arch.unavailable %}
Architecture unavailable
{{ arch.unavailable }}
{% else %}
{% for c in arch.cards %}
{{ c.label }}
{{ c.value }}
{{ c.note }}
{% endfor %}
Design structure matrix
{{ arch.dsm_caption }}
{% for r in arch.dsm_rows %}
{{ r.label }}
{% endfor %}
{% for r in arch.dsm_rows %}
{% for c in r.cells %}
{% endfor %}
{% endfor %}
dependency, below the diagonal above the diagonal — closes a cycle
Cycle inventory
{{ arch.cycles_caption }}
{% for c in arch.cycles %}
{{ c.members }}
Cut either edge: {{ c.closing }}
{{ c.closing2 }}
{{ c.note }}
{{ m.chip(c.ev) }}
{% else %}
No dependency cycles among the modules shown.
{% endfor %}
Across index runs
direction is reported as unclear when the index itself changed size
{% if arch.trend_rows %} {% for t in arch.trend_rows %} {% endfor %}
IndexedCommitCoveragePropagationLargest cycleDirection
{{ t.date }} {{ t.commit }} {{ t.modules }} {{ t.propagation }} {{ t.largest_cycle }} {{ t.direction }}
{% else %}
One recorded run is not a trend. The table appears after the next index run.
{% endif %}
A metric that moved because extraction improved is not a codebase that decayed. Where coverage shifted by more than a tenth between runs, the direction is left unclear rather than reported as better or worse.
{% endif %}
{% endblock %}