' +
'
' +
'
' +
'
' + escapeHtml(it.id || '—') + '
' +
@@ -9911,12 +10021,34 @@
cardFor('manual', 'Manual', 'high') +
cardFor('suppressed', 'Undertrykt', 'info') +
'
';
+ // Advisory recommendation-cards per bucket — DS Tier 3 data-severity (v7.6.0 fase 5f).
+ // Hver bucket med items > 0 får én recommendation-card med severity-tinted border + label.
+ const bucketAdvisoryDefs = [
+ { key: 'auto', label: 'Auto-fixable', sev: 'positive', desc: 'Plugin kan fikse disse uten ekstra bekreftelse — deterministiske, lavrisiko-handlinger.' },
+ { key: 'semi-auto', label: 'Semi-auto — krever bekreftelse', sev: 'medium', desc: 'Foreslåtte tiltak vises som diff. Bruker bekrefter per finding før endring anvendes.' },
+ { key: 'manual', label: 'Manual remediation', sev: 'high', desc: 'Krever menneskelig vurdering — kontekst, scope eller side-effekter er ikke deterministisk avgjørbare.' },
+ { key: 'suppressed', label: 'Undertrykt', sev: 'low', desc: 'Allowlist-treff via .llm-security-ignore — ingen handling.' }
+ ];
+ const advisoryHtml = bucketAdvisoryDefs.map(function (b) {
+ const items = buckets[b.key] || [];
+ if (!items.length) return '';
+ return (
+ '
' +
+ '' + escapeHtml(b.label) + ' · ' + items.length + '' +
+ '' + escapeHtml(b.desc) + '
' +
+ ''
+ );
+ }).join('');
const findingsHtml = renderFindingsBlock(data.findings || [], 'Tilknyttede funn');
- const recHtml = renderRecommendationsList(data.recommendations || []);
+ const recHtml = renderRecommendationsList(data.recommendations || [], 'Anbefalinger', 'medium');
+ const isDry = ((data.mode || '').toLowerCase() === 'dry-run');
const intro = data.mode ? (
- '
'
+ '
' +
+ 'Modus · ' + escapeHtml(data.mode) + '' +
+ '' + (isDry ? 'Dry-run: ingen filer endres. Forhåndsvis tiltak før --apply.' : 'Fixes anvendes med automatisk backup i .llm-security-backup/.') + '
' +
+ ''
) : '';
- const body = intro + kanbanHtml + findingsHtml + recHtml;
+ const body = intro + advisoryHtml + kanbanHtml + findingsHtml + recHtml;
slot.innerHTML = renderPageShell({
eyebrow: 'CLEAN',
title: data.title || 'Remediation-kanban',