From f0f82ec5fa851d0a8641a00ecbf5aadfa66401e6 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Mon, 31 Aug 2026 12:31:07 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B7=20fix:=20Fence=20Server-Admitted?= =?UTF-8?q?=20Queue=20Boundaries=20(#15393)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: fence server-admitted queue boundaries * fix: preserve effective queue admission boundaries * fix: fence queue recovery predecessor * fix: unify queued boundary reconciliation * fix: make queued turn receipt settlement monotonic * fix: narrow queued receipt projection status * fix: close queued turn settlement races * fix: make queued admission lineage clock independent * fix: centralize queued turn admission ownership * test: type queued admission outcomes * fix: make queued admission identity durable * fix: carry queued admission identity end to end * style: sort queued turn test imports * fix: unify indeterminate admission ownership * fix: migrate queued admission fence state * fix: migrate every queued admission owner * fix: surface queued admission reconciliation * fix: preserve queued receipt evidence * test: type queued receipt regression * fix: stabilize queued receipt authority * fix: supersede initial receipt fetches --- .../Chat/Input/PendingSteerChips.tsx | 20 +- .../__tests__/PendingSteerChips.test.tsx | 19 + .../SSE/__tests__/queuedTurns.test.ts | 97 ++ client/src/data-provider/SSE/queuedTurns.ts | 89 +- .../Chat/__tests__/useQueueDrain.spec.tsx | 205 ++- .../hooks/Chat/__tests__/useSteering.spec.tsx | 555 +++++++- client/src/hooks/Chat/useQueueDrain.ts | 68 +- client/src/hooks/Chat/useSteering.ts | 236 +++- client/src/locales/en/translation.json | 1 + client/src/store/families.ts | 27 +- .../api/src/agents/queuedTurnHttp.spec.ts | 55 +- packages/api/src/agents/queuedTurnHttp.ts | 6 + packages/api/src/agents/queuedTurns.spec.ts | 66 +- packages/api/src/agents/queuedTurns.ts | 60 +- packages/api/src/agents/triggers/host.ts | 2 + .../src/types/queuedTurns.spec.ts | 28 + .../data-provider/src/types/queuedTurns.ts | 6 + .../src/methods/queuedTurn.spec.ts | 1166 ++++++++++++++++- .../data-schemas/src/methods/queuedTurn.ts | 918 +++++++++++-- .../data-schemas/src/schema/queuedTurn.ts | 33 + packages/data-schemas/src/types/queuedTurn.ts | 13 + 21 files changed, 3408 insertions(+), 262 deletions(-) diff --git a/client/src/components/Chat/Input/PendingSteerChips.tsx b/client/src/components/Chat/Input/PendingSteerChips.tsx index eef0566152..3e21c69f3b 100644 --- a/client/src/components/Chat/Input/PendingSteerChips.tsx +++ b/client/src/components/Chat/Input/PendingSteerChips.tsx @@ -103,8 +103,18 @@ function QueuedRow({ const quoteCount = message.quotes?.length ?? 0; const isRecovered = message.recoverySteerId != null; const isRejected = message.server?.status === 'rejected'; + const isIndeterminate = message.server?.status === 'indeterminate'; const isUnconfirmed = message.server?.status === 'uncertain' && message.server.reconciliationExpired === true; + let statusLabel: + | 'com_ui_queued_turn_reconciliation_required' + | 'com_ui_steer_delivery_unconfirmed' + | 'com_ui_queued_turn_failed' = 'com_ui_queued_turn_failed'; + if (isIndeterminate) { + statusLabel = 'com_ui_queued_turn_reconciliation_required'; + } else if (isUnconfirmed) { + statusLabel = 'com_ui_steer_delivery_unconfirmed'; + } const requiresDiscard = isRecovered || message.server?.id != null; const serverActionable = message.server == null || @@ -198,7 +208,7 @@ function QueuedRow({ return (
- {isRejected || isUnconfirmed ? ( + {isRejected || isUnconfirmed || isIndeterminate ? (