gabriel / musehub public
intel_gravity.html html
116 lines 4.8 KB
Raw
sha256:c2e5cf2d754ed2fe9a94e879d41ad12ff221d2ac4ac7b45247fcb981c76858bf docs: Section 8 database/migrations/backups — verified live… Sonnet 5 26 days ago
1 {% extends "musehub/base.html" %}
2
3 {% block title %}Gravity · {{ owner }}/{{ repo_slug }}{% endblock %}
4 {% block breadcrumb %}
5 <a href="/{{ owner }}">{{ owner }}</a> /
6 <a href="{{ base_url }}">{{ repo_slug }}</a> /
7 <a href="{{ base_url }}/intel">intel</a> /
8 gravity
9 {% endblock %}
10 {% block repo_nav %}{% include "musehub/partials/repo_nav.html" %}{% endblock %}
11
12 {% block content %}
13 <div class="intel-wrap">
14
15 <div class="intel-subhd">
16 <a href="{{ base_url }}/intel" class="intel-back">← Intel Hub</a>
17 <div class="intel-subhd-title intel-subhd-title--spectral"><span style="color:var(--color-orange)">{{ icon("target", 16) }}</span> Gravity</div>
18 <div class="intel-subhd-desc">Symbols ranked by downstream blast radius — the higher the gravity, the more code collapses when this changes.</div>
19 </div>
20
21 {% if symbols %}
22
23 {# ── Stat chips ─────────────────────────────────────────────────────────── #}
24 <div class="intel-grav-stats">
25 <div class="intel-grav-stat">
26 <span class="intel-grav-stat__val">{{ symbols | length }}</span>
27 <span class="intel-grav-stat__lbl">symbols ranked</span>
28 </div>
29 <div class="intel-grav-stat">
30 <span class="intel-grav-stat__val">{{ "%.1f" | format(symbols[0].gravity_pct) }}%</span>
31 <span class="intel-grav-stat__lbl">peak gravity</span>
32 </div>
33 <div class="intel-grav-stat">
34 <span class="intel-grav-stat__val">{{ max_depth }}</span>
35 <span class="intel-grav-stat__lbl">max chain depth</span>
36 </div>
37 </div>
38
39 {# ── Filter bar ──────────────────────────────────────────────────────────── #}
40 <div class="intel-filter-bar">
41 <div class="intel-filter-pills">
42 <a href="{{ base_url }}/intel/gravity?top={{ selected_top }}"
43 class="intel-filter-pill{% if not selected_kind %} intel-filter-pill--active{% endif %}">all</a>
44 {% for k in valid_kinds %}
45 <a href="{{ base_url }}/intel/gravity?kind={{ k }}&top={{ selected_top }}"
46 class="intel-filter-pill{% if selected_kind == k %} intel-filter-pill--active{% endif %}">{{ k }}</a>
47 {% endfor %}
48 </div>
49 <div class="intel-filter-top">
50 <label class="intel-filter-top__label">top</label>
51 {% for n in valid_tops %}
52 <a href="{{ base_url }}/intel/gravity{% if selected_kind %}?kind={{ selected_kind }}&top={{ n }}{% else %}?top={{ n }}{% endif %}"
53 class="intel-filter-pill intel-filter-pill--sm{% if selected_top == n %} intel-filter-pill--active{% endif %}">{{ n }}</a>
54 {% endfor %}
55 </div>
56 </div>
57
58 {# ── Symbol list ─────────────────────────────────────────────────────────── #}
59 <div class="intel-full-list">
60 {% for s in symbols %}
61 <div class="intel-grav-row">
62
63 {# rank #}
64 <span class="intel-grav-rank">{{ loop.index }}</span>
65
66 {# address + file #}
67 <div class="intel-grav-meta">
68 <a href="{{ base_url }}/symbols?q={{ s.address | urlencode }}" class="intel-grav-addr" title="{{ s.address }}">
69 {{ s.name }}
70 </a>
71 {% if s.file %}
72 <span class="intel-grav-file">{{ s.file }}</span>
73 {% endif %}
74 </div>
75
76 {# kind badge #}
77 {% if s.symbol_kind %}
78 <span class="kind-badge kind-badge--{{ s.symbol_kind }}">{{ s.symbol_kind }}</span>
79 {% else %}
80 <span></span>
81 {% endif %}
82
83 {# gravity bar + pct #}
84 <div class="intel-grav-bar-wrap">
85 <div class="gravity-bar" style="--grav: {{ (s.gravity_pct / max_gravity_pct) | round(3) }}">
86 <div class="gravity-bar__fill"></div>
87 </div>
88 <span class="intel-grav-pct">{{ "%.1f" | format(s.gravity_pct) }}%</span>
89 </div>
90
91 {# reach: direct / transitive #}
92 <div class="intel-grav-reach">
93 {% if s.gravity_direct_dependents is not none %}
94 <span class="intel-grav-reach__direct" title="direct dependents">{{ s.gravity_direct_dependents }}d</span>
95 {% endif %}
96 {% if s.gravity_transitive_dependents is not none %}
97 <span class="intel-grav-reach__trans" title="transitive dependents">{{ s.gravity_transitive_dependents }}t</span>
98 {% endif %}
99 </div>
100
101 {# depth sparkline #}
102 <span class="depth-sparkline" title="dependency depth distribution">{{ s.sparkline }}</span>
103
104 </div>
105 {% endfor %}
106 </div>
107
108 {% else %}
109 <div class="intel-empty-state">
110 {{ icon("git-branch", 32, "icon--light-stroke") }}
111 <div>No gravity data yet. Trigger an <code>intel.code.gravity</code> job to populate this view.</div>
112 </div>
113 {% endif %}
114
115 </div>
116 {% endblock %}
File History 2 commits
sha256:c2e5cf2d754ed2fe9a94e879d41ad12ff221d2ac4ac7b45247fcb981c76858bf docs: Section 8 database/migrations/backups — verified live… Sonnet 5 26 days ago
sha256:80e1a60a39562f6e616aaafbb27487f03abbec7d8ffc6164302b7a0c0bfc63ee docs: check off Section 0 items verified in inventory doc, … Sonnet 5 26 days ago