gabriel / musehub public
intel_coupling.html html
90 lines 3.4 KB
Raw
sha256:3c58668648c7323bb9f5c6881cfe6a3f14fc93fcb73b537d253732952a5bf8bf chore: bump version to 0.2.0rc12 Sonnet 4.6 patch 8 days ago
1 {% extends "musehub/base.html" %}
2
3 {% block title %}Coupling · {{ 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 coupling
9 {% endblock %}
10 {% block repo_nav %}{% include "musehub/partials/repo_nav.html" %}{% endblock %}
11
12 {% block content %}
13 <div class="cp-wrap 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-success)">{{ icon("activity", 16) }}</span> Coupling</div>
18 <div class="intel-subhd-desc">File pairs that co-change most frequently — structural coupling signal.</div>
19 </div>
20
21 {% if index_meta %}
22 <div class="intel-meta-bar">
23 <span class="intel-meta-pill">
24 <span class="intel-meta-key">pairs</span>
25 <span class="intel-meta-val">{{ total_count | fmtnum }}</span>
26 </span>
27 <span class="intel-meta-pill">
28 <span class="intel-meta-key">ref</span>
29 <span class="intel-meta-val font-mono">{{ index_meta.ref[:14] if index_meta.ref else "—" }}</span>
30 </span>
31 {% if index_meta.built_at %}
32 <span class="intel-meta-pill">
33 <span class="intel-meta-key">built</span>
34 <span class="intel-meta-val">{{ index_meta.built_at[:10] }}</span>
35 </span>
36 {% endif %}
37 </div>
38 {% endif %}
39
40 {# ── Filter bar ──────────────────────────────────────────────────────────── #}
41 <form method="get" class="cp-filter-bar">
42 <div class="cp-filter-group">
43 <label class="cp-filter-label">min co-changes ≥</label>
44 <input type="number" name="min_co" value="{{ min_co }}" min="1" step="1"
45 class="input input--sm" style="width:4rem">
46 </div>
47 <div class="cp-filter-group">
48 <label class="cp-filter-label">show</label>
49 <select name="top" class="input input--sm">
50 {% for t in valid_tops %}
51 <option value="{{ t }}"{% if t == selected_top %} selected{% endif %}>{{ t }}</option>
52 {% endfor %}
53 </select>
54 </div>
55 <button type="submit" class="btn btn-sm btn-secondary" style="margin-left:auto">Apply</button>
56 </form>
57
58 {# ── Pair list ───────────────────────────────────────────────────────────── #}
59 {% if pairs %}
60 <div class="cp-list">
61 {% for p in pairs %}
62 <div class="cp-pair-row">
63
64 <div class="cp-files">
65 <span class="cp-file-a" title="{{ p.file_a }}">{{ p.short_a }}</span>
66 <span class="cp-arrow">↔</span>
67 <span class="cp-file-b" title="{{ p.file_b }}">{{ p.short_b }}</span>
68 </div>
69
70 <span class="cp-count">{{ p.co_changes | fmtnum }}</span>
71
72 <div class="cp-bar-wrap">
73 <div class="cp-bar-track">
74 <div class="cp-bar-fill{% if p.heat_modifier %} cp-bar-fill--{{ p.heat_modifier }}{% endif %}"
75 style="width:{{ p.bar_pct }}%"></div>
76 </div>
77 </div>
78
79 </div>
80 {% endfor %}
81 </div>
82 {% else %}
83 <div class="cp-empty-state">
84 {{ icon("zap", 32) }}
85 <div>No coupling data found with current filters.</div>
86 </div>
87 {% endif %}
88
89 </div>
90 {% endblock %}
File History 1 commit
sha256:35d76015db2541686c33edd44343ea2d9f751325b4a5556cc9c4c9c0f84edbbe chore: bump version to 0.2.0rc12 Sonnet 4.6 patch 6 days ago