From 4d6125eb4d0f3f921fcd97b73453d1c52139477b Mon Sep 17 00:00:00 2001 From: Mick <119439091+mickbrowns1@users.noreply.github.com> Date: Tue, 19 May 2026 15:35:30 -0400 Subject: [PATCH] Add Default Parser Only and No Parser filters to Coverage Map MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Filters are now: All | Custom Parser | Default Parser Only | No Parser - Custom Parser: covered sources with a loaded SDL parser file - Default Parser Only: covered via event.type detection in data lake but no custom parser file — built-in or cloud-managed parser running - No Parser: parser_needed sources (no parser found at all) Co-Authored-By: Claude Sonnet 4.6 --- frontend/index.html | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index 2f978ad..b3ccc90 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -243,9 +243,13 @@ async function cvLoad() { const filtersEl = document.getElementById('cv-filters') filtersEl.classList.remove('hidden') - filtersEl.innerHTML = [['all','All'],['covered','Covered'],['parser_needed','Parser Needed']] - .map(([f,l]) => ``).join('') + filtersEl.innerHTML = [ + ['all', 'All'], + ['covered', 'Custom Parser'], + ['default_only', 'Default Parser Only'], + ['parser_needed', 'No Parser'], + ].map(([f,l]) => ``).join('') if (cvData.synced_at) { filtersEl.innerHTML += `Synced ${new Date(cvData.synced_at).toLocaleTimeString()}` @@ -261,14 +265,20 @@ function cvSetFilter(f) { cvFilter = f document.querySelectorAll('[id^="cvf-"]').forEach(b => { const on = b.id === `cvf-${f}` - b.className = `px-3 py-1 text-xs rounded-full border transition-colors ${on ? 'bg-purple-700 border-purple-600 text-white' : 'border-gray-700 text-gray-400 hover:border-gray-500'}` + b.className = `px-3 py-1 text-xs rounded-full border transition-colors ${on ? 'bg-purple-700 border-purple-600 text-white' : 'border-gray-700 text-gray-400 hover:border-gray-500 cursor-pointer'}` }) if (!cvData?.sources) return const LABELS = { covered: 'Covered', parser_needed: 'Parser Needed' } const STYLES = { covered: 'bg-emerald-900/50 text-emerald-300 border-emerald-700', parser_needed: 'bg-red-900/50 text-red-300 border-red-700' } - const sources = cvData.sources.filter(s => f === 'all' || s.status === f) + const sources = cvData.sources.filter(s => { + if (f === 'all') return true + if (f === 'parser_needed') return s.status === 'parser_needed' + if (f === 'default_only') return s.status === 'covered' && s.parser === 'detected in data' + if (f === 'covered') return s.status === 'covered' && s.parser !== 'detected in data' + return true + }) function parserCell(s) { if (s.status === 'covered') {