From 7e768f3d096d6fc14d8dac582f8a970c94f41db0 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Sun, 17 May 2026 06:30:22 +0000 Subject: [PATCH] fix(KB): guardrail bypass during estimate load + Transition sibling (PR #901 review) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Disable TierSelectionModal Submit while the embed-estimate query is in flight, so a fast click can't slip past the guardrail with an undefined estimate. - Move KbGuardrailModal out of the outer and render it as a Fragment sibling — Headless UI's Transition expects Transition.Child descendants, not raw conditional siblings. --- .../inertia/components/TierSelectionModal.tsx | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/admin/inertia/components/TierSelectionModal.tsx b/admin/inertia/components/TierSelectionModal.tsx index f135f3c..3db5094 100644 --- a/admin/inertia/components/TierSelectionModal.tsx +++ b/admin/inertia/components/TierSelectionModal.tsx @@ -74,7 +74,7 @@ const TierSelectionModal: React.FC = ({ [selectedTierResources] ) - const { data: embedEstimate } = useQuery({ + const { data: embedEstimate, isLoading: isEstimating } = useQuery({ queryKey: ['embedEstimateBatch', embedEstimateRequest], queryFn: () => api.estimateEmbeddingBatch(embedEstimateRequest), enabled: embedEstimateRequest.length > 0, @@ -158,6 +158,7 @@ const TierSelectionModal: React.FC = ({ } return ( + <> = ({ variant='primary' size='lg' onClick={handleSubmit} - disabled={!localSelectedSlug} + disabled={!localSelectedSlug || (embedEstimateRequest.length > 0 && isEstimating)} > Submit @@ -355,18 +356,19 @@ const TierSelectionModal: React.FC = ({ - {guardrailVerdict && ( - { - setGuardrailVerdict(null) - finalizeSubmit() - }} - onCancel={() => setGuardrailVerdict(null)} - /> - )} + {guardrailVerdict && ( + { + setGuardrailVerdict(null) + finalizeSubmit() + }} + onCancel={() => setGuardrailVerdict(null)} + /> + )} + ) }