-
Stefy Lanza (nextime / spora ) authored
Previously the Disable button on a rotation flipped a single global provider_manual_disabled flag: disabling a provider in one rotation removed it from every rotation, from autoselect, and (before this series) from direct API calls too. That is not what "disable in this rotation" should mean. Disabling is now membership in a single rotation, expressed as `enabled: false` on that provider's entry in the rotation config. handlers.py: the rotation scan no longer consults the global manual flag. It skips an entry when `provider.get('enabled') is False` (cheap, before building the handler), and otherwise skips only on a genuine auto-disable cooldown (failure threshold / usage limit) via the new _provider_in_availability_cooldown helper. is_provider_disabled_cheap is no longer used here (import dropped). Autoselect inherits this since it dispatches through handle_rotation_request. rotations.html / user_rotations.html: the per-provider toggle flips `enabled` on that rotation entry and persists just that rotation (full-config POST for admin, single-rotation POST for DB users), updating only that entry's button instead of every rotation sharing the provider. The global manual-status fetch is gone. The legacy global manual-disable endpoints remain but are now inert for rotation and direct-call gating. Co-Authored-By:Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f8d7d79d