// SPDX-License-Identifier: GPL-3.0-or-later // Copyright (C) 2025 - 2026, Patrick Schurig / ETM PowerSync #pragma once #include "../types/surpluscontext.h" #include "../types/plan.h" // Interface pure — implémentations concrètes héritent de QObject + IScheduler. // // Règle : getPlan() DOIT retourner immédiatement (modèle cache §AGENTS invariant 5). // SocketScheduler renvoie son dernier plan en cache et recalcule en fond. // SocketScheduler embarque un RuleBasedScheduler comme fallback et renvoie // TOUJOURS un Plan exploitable — l'abstain du protocole n'atteint jamais l'arbitre. class IScheduler { public: virtual ~IScheduler() = default; virtual Plan getPlan(const SurplusContext &ctx) = 0; };