fix(blocklist): render llm_score, fix load() error handling, fix severity override mutations

- BlocklistView: display llm_score/llm_reason when non-null (spec gap)
- BlocklistView: set scanError on non-ok load() response (was silent)
- SettingsView: replace in-place splice/property mutation with immutable
  spread pattern in toggleOverride/deleteOverride
This commit is contained in:
pyr0ball 2026-05-16 01:57:18 -07:00
parent 8933f1886b
commit b5c7fe67bf
2 changed files with 21 additions and 4 deletions

View file

@ -130,6 +130,12 @@
</template>
</div>
<!-- LLM score (Premium tier stub) -->
<div v-if="c.llm_score !== null" class="mt-1 text-xs text-text-dim">
<span class="font-medium">LLM score:</span> {{ c.llm_score?.toFixed(2) }}
<span v-if="c.llm_reason" class="ml-2 text-text-dim/70"> {{ c.llm_reason }}</span>
</div>
<!-- Log evidence -->
<div v-if="c.log_evidence.length" class="mt-1">
<button
@ -226,7 +232,11 @@ async function load() {
loading.value = true
try {
const res = await fetch(`${BASE}/api/blocklist/candidates`)
if (res.ok) candidates.value = (await res.json()).candidates
if (res.ok) {
candidates.value = (await res.json()).candidates
} else {
scanError.value = `Failed to load candidates: ${res.statusText}`
}
} finally {
loading.value = false
}

View file

@ -372,13 +372,20 @@ async function saveOverrides() {
}
async function toggleOverride(i: number) {
const rule = prefs.value.severity_overrides[i]
if (rule) rule.enabled = !rule.enabled
prefs.value = {
...prefs.value,
severity_overrides: prefs.value.severity_overrides.map((r, idx) =>
idx === i ? { ...r, enabled: !r.enabled } : r
),
}
await saveOverrides()
}
async function deleteOverride(i: number) {
prefs.value.severity_overrides.splice(i, 1)
prefs.value = {
...prefs.value,
severity_overrides: prefs.value.severity_overrides.filter((_, idx) => idx !== i),
}
await saveOverrides()
}