766b91081a
Sessions that had an approval resolved (or never needed one) but never received OrchestrationResumedEvent would show the last tool as RUNNING forever with no subsequent events. Three coordinated fixes: 1. SessionOrchestrator now emits OrchestrationResumedEvent in both the approved and rejected approval branches, so the paused flag clears correctly going forward. 2. SessionEventBridge.replaySnapshot() detects the stuck pattern (pendingApproval=true with no unresolved requests) and appends a synthetic OrchestrationResumedEvent so historical sessions self-heal on next TUI connect. 3. DomainEventMapper maps OrchestrationResumedEvent → SessionResumed; TUI SessionsReducer/SnapshotPhaseReducer handle the new message, clearing pendingApproval and setting status back to ACTIVE. Also adds server-restart recovery path in DefaultSessionOrchestrator (emit decision + resume events directly when no live deferred exists) and pre-registers pending approvals in ServerModule.start() to close the race between reconnect and ApprovalResponse routing.