From 682326382e8ced0384764da118cfe70ed502e4e9 Mon Sep 17 00:00:00 2001 From: dtoro Date: Fri, 10 Jul 2026 20:52:05 +0200 Subject: [PATCH] feat: surface blast radius on approval cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pending-approval cards showed target and risk but not what else the action would affect — the operator approved config_mutation/destructive commands blind to downstream impact, even though the graph-walk (blast_radius() SQL, GetBlastRadius endpoint) already existed and was just never wired into the approval path. Fetch it once per pending approval and render "Affects N downstream: …" on both the normal and destructive approval cards, reusing the existing fetchBlastRadius() API client function which was already written but unused anywhere. Co-Authored-By: Claude Sonnet 5 --- web/src/lib/components/InlineApproval.svelte | 56 ++++++++++++++++---- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/web/src/lib/components/InlineApproval.svelte b/web/src/lib/components/InlineApproval.svelte index 0052abf..f45a47c 100644 --- a/web/src/lib/components/InlineApproval.svelte +++ b/web/src/lib/components/InlineApproval.svelte @@ -1,15 +1,30 @@ @@ -194,6 +212,7 @@ {:else if approval.destructive} + {@const affected = blastRadius.get(approval.executionId)}
@@ -211,17 +230,32 @@ {#if approval.command} {approval.command} {/if} + {#if affected} +
+ + Affects {affected.length} downstream: {affected.join(', ')} +
+ {/if}
{:else} -
- - {approval.action} on {approval.target} requires approval - - + {@const affected = blastRadius.get(approval.executionId)} +
+
+ + {approval.action} on {approval.target} requires approval + + +
+ {#if affected} +
+ + Affects {affected.length} downstream: {affected.join(', ')} +
+ {/if}
{/if} {/each}