revert(orbit): drop maxPending cap feature, keep suggestion mute

The pending counter desynced from the actual approval list (state.queue
holds approved items as history, so the count never decreased after a
host approve). The host-pushed pendingApprovalCount workaround didn't
hold up under live testing either, so we're rolling the whole cap
feature back rather than ship something flaky.

What's gone:
- OrbitSettings.maxPending + state.pendingApprovalCount
- cap branch in applyOutboxSnapshotsToState (now back to mute-only)
- maxPending number input in settings popover
- pending counter chip in OrbitQueueHead
- 'cap-reached' branch in evaluateOrbitSuggestGate / OrbitSuggestGateReason
- cap-related toasts in ContextMenu / useOrbitSongRowBehavior
- cap-related i18n keys (suggestBlockedCap, settingMaxPending*, pendingCounter*)
- cap CSS (.orbit-queue-head__pending, .orbit-settings-pop__number)

What stays: per-guest suggestion mute (works correctly) and everything
that fed into both features (OrbitState.suggestionBlocked,
setOrbitSuggestionBlocked, evaluateOrbitSuggestGate, the participants
popover Mic/MicOff toggle, the suggestBlockedMuted toast).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-25 01:40:22 +02:00
parent 7c379c2111
commit e4cc54a1b5
16 changed files with 14 additions and 224 deletions
-17
View File
@@ -106,14 +106,6 @@ export interface OrbitState {
* before they reach the approval list. Symmetric — host can re-enable.
*/
suggestionBlocked?: string[];
/**
* Authoritative count of suggestions actually waiting on host action right
* now (`state.queue` minus host-authored, merged, declined). The host
* rewrites it every tick — guests can't compute it themselves because the
* merged/declined sets live in the host's local store. Older clients that
* don't write the field fall back to a `state.queue` count in the UI.
*/
pendingApprovalCount?: number;
}
/**
@@ -135,13 +127,6 @@ export interface OrbitSettings {
* field fall back to 15 via `effectiveShuffleIntervalMs`.
*/
shuffleIntervalMin?: OrbitShuffleIntervalMin;
/**
* Cap on simultaneously-pending guest suggestions. 0 = unlimited.
* When the cap is reached, the host's outbox sweep drops new suggestions
* until existing ones are approved or declined; the guest UI surfaces
* the count so users know to wait.
*/
maxPending?: number;
}
export const ORBIT_DEFAULT_SETTINGS: OrbitSettings = {
@@ -149,8 +134,6 @@ export const ORBIT_DEFAULT_SETTINGS: OrbitSettings = {
autoApprove: false,
autoShuffle: true,
shuffleIntervalMin: 15,
// 0 = unlimited; host opts in via the session-settings popover.
maxPending: 0,
};
/** What the guest's outbox-playlist comment holds (heartbeat only, for now). */