intel_gravity.html
html
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