bedd6e020c
When a TUI client connects at the exact moment between an OrchestrationPausedEvent being stored and its corresponding ApprovalRequestedEvent being stored, the approval projector sees empty pendingApprovalRequests while orchState.pendingApproval=true. The stuck-session fix would then append a spurious OrchestrationResumedEvent, clearing the TUI's pendingApproval display and hiding the approval dialog. Fix: count OrchestrationPausedEvents vs ApprovalRequestedEvents in the event log. If there is an unpaired pause (more pauses than requests), the session just entered the gate — skip the fix entirely. Also remove spurious ToolExecutionCompleted/Failed emissions from the kernel orchestrator; those events are emitted by SandboxedToolExecutor in the infrastructure layer. Keep ToolExecutionRejectedEvent which the orchestrator does own (rejection happens before executor.execute is called).