diff --git a/apps/dashboard/src/lib/components/ReceiptCard.svelte b/apps/dashboard/src/lib/components/ReceiptCard.svelte
index 71ea574..b38420a 100644
--- a/apps/dashboard/src/lib/components/ReceiptCard.svelte
+++ b/apps/dashboard/src/lib/components/ReceiptCard.svelte
@@ -24,6 +24,13 @@
high: '#f43f5e'
};
+ // NeuroRuntime v0 โ the Microglial Firewall. `influence_allowed` is the
+ // headline boolean: did anything the firewall caught reach the answer? It
+ // is `false` exactly when this retrieval had a memory quarantined. Old
+ // receipts omit the field, so `undefined`/`true` both read as "clean".
+ const quarantined = $derived(receipt.quarantined ?? []);
+ const firewallBlocked = $derived(receipt.influence_allowed === false || quarantined.length > 0);
+
function openInCinema() {
const primary = receipt.retrieved[0];
if (!primary) return;
@@ -40,6 +47,23 @@
+
+ {#if firewallBlocked}
+
+ ๐ก
+
+ FIREWALL BLOCKED {quarantined.length}
+ {quarantined.length === 1 ? 'memory' : 'memories'}
+ ยท influenceAllowed: false
+
+
+ {:else}
+
+ โ
+ clean ยท no quarantine
+
+ {/if}
+
{receipt.retrieved.length}
@@ -88,6 +112,20 @@
{/if}
+
+ {#if quarantined.length}
+
+
Quarantined by firewall
+
+ {#each quarantined as q (q.id)}
+
+ {q.id.slice(0, 8)} ยท {q.reason.replace(/_/g, ' ')}
+ {q.threat}
+
+ {/each}
+
+
+ {/if}
{/if}