gabriel / musehub public
intel_velocity.html html
114 lines 5.1 KB
Raw
sha256:c2e5cf2d754ed2fe9a94e879d41ad12ff221d2ac4ac7b45247fcb981c76858bf docs: Section 8 database/migrations/backups — verified live… Sonnet 5 24 days ago
1 {% extends "musehub/base.html" %}
2
3 {% block title %}Velocity · {{ 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 velocity
9 {% endblock %}
10 {% block repo_nav %}{% include "musehub/partials/repo_nav.html" %}{% endblock %}
11
12 {% block content %}
13 <div class="vel-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-rose)">{{ icon("gauge", 16) }}</span> Velocity</div>
18 <div class="intel-subhd-desc">Module growth rate across the last {{ window_size }} commits (current) vs the preceding {{ window_size }} (prior). Active commits = distinct commits that touched the module.</div>
19 </div>
20
21 {% if modules %}
22
23 {# ── Stat chips ──────────────────────────────────────────────────────────── #}
24 <div class="vel-stats">
25 <div class="vel-stat">
26 <span class="vel-stat__val">{{ total_count | fmtnum }}</span>
27 <span class="vel-stat__lbl">modules tracked</span>
28 </div>
29 <div class="vel-stat">
30 <span class="vel-stat__val">{{ window_size | fmtnum }}</span>
31 <span class="vel-stat__lbl">window (commits)</span>
32 </div>
33 <div class="vel-stat">
34 <span class="vel-stat__val">{{ commits_analysed | fmtnum }}</span>
35 <span class="vel-stat__lbl">commits analysed</span>
36 </div>
37 <div class="vel-stat">
38 <span class="vel-stat__val">{{ max_active | fmtnum }}</span>
39 <span class="vel-stat__lbl">peak active commits</span>
40 </div>
41 </div>
42
43 {# ── Legend + top filter ─────────────────────────────────────────────────── #}
44 <div class="vel-legend-row">
45 <div class="vel-legend-item">
46 <span class="vel-legend__dot vel-legend__dot--current"></span>
47 <span class="vel-legend">current window</span>
48 </div>
49 <div class="vel-legend-item">
50 <span class="vel-legend__dot vel-legend__dot--prior"></span>
51 <span class="vel-legend">prior window</span>
52 </div>
53 <div style="margin-left:auto; display:flex; align-items:center; gap:0.4rem;">
54 <span class="intel-filter-top__label">top</span>
55 {% for n in valid_tops %}
56 <a href="{{ base_url }}/intel/velocity?top={{ n }}"
57 class="intel-filter-pill intel-filter-pill--sm{% if selected_top == n %} intel-filter-pill--active{% endif %}">{{ n }}</a>
58 {% endfor %}
59 </div>
60 </div>
61
62 {# ── Module list ─────────────────────────────────────────────────────────── #}
63 <div class="vel-list">
64 {% for m in modules %}
65 <div class="vel-row">
66
67 {# Module path #}
68 <div class="vel-module-col">
69 <a href="{{ base_url }}/intel/velocity/detail?module={{ m.module | urlencode }}"
70 class="vel-module" title="{{ m.module }}">{{ m.module }}</a>
71 </div>
72
73 {# Dual bars: current / prior #}
74 <div class="vel-bar-col">
75 <div class="vel-bar-wrap">
76 <div class="vel-bar-track" style="flex:1; height:4px; background:var(--bg-overlay); border-radius:2px; overflow:hidden;">
77 <div class="vel-bar-fill vel-bar-fill--current" style="width:{{ m.active_pct }}%; height:100%;"></div>
78 </div>
79 <span class="vel-bar-label vel-metric" style="width:2.2em; text-align:right;">{{ m.active_commits }}</span>
80 </div>
81 <div class="vel-bar-wrap">
82 <div class="vel-bar-track vel-bar-track--prior" style="flex:1; height:3px; background:var(--bg-overlay); border-radius:2px; overflow:hidden;">
83 <div class="vel-bar-fill vel-bar-fill--prior" style="width:{{ m.prior_pct }}%; height:100%;"></div>
84 </div>
85 <span class="vel-bar-label vel-metric" style="width:2.2em; text-align:right; opacity:0.6;">{{ m.prior_active_commits }}</span>
86 </div>
87 </div>
88
89 {# Metrics: net + modified #}
90 <div class="vel-metrics-col">
91 <span class="vel-metric">net <span class="vel-metric__val">{{ "%+d" | format(m.net) }}</span></span>
92 <span class="vel-metric">mod <span class="vel-metric__val">{{ m.modified | fmtnum }}</span></span>
93 </div>
94
95 {# Acceleration badge #}
96 <span class="vel-accel vel-accel--{{ m.accel_class }}" title="net acceleration vs prior window">{{ m.accel_fmt }}</span>
97
98 {# Stagnant #}
99 <span class="vel-stagnant{% if m.stagnant_commits > m.active_commits // 2 %} vel-stagnant--warn{% endif %}"
100 title="stagnant commits (net=0)">{{ m.stagnant_commits }}s</span>
101
102 </div>
103 {% endfor %}
104 </div>
105
106 {% else %}
107 <div class="vel-empty">
108 {{ icon("gauge", 32, "icon--light-stroke") }}
109 <div>No velocity data yet. Push a commit to trigger an <code>intel.code.velocity</code> job.</div>
110 </div>
111 {% endif %}
112
113 </div>
114 {% endblock %}
File History 2 commits
sha256:c2e5cf2d754ed2fe9a94e879d41ad12ff221d2ac4ac7b45247fcb981c76858bf docs: Section 8 database/migrations/backups — verified live… Sonnet 5 24 days ago
sha256:80e1a60a39562f6e616aaafbb27487f03abbec7d8ffc6164302b7a0c0bfc63ee docs: check off Section 0 items verified in inventory doc, … Sonnet 5 24 days ago