#pragma once // Supervisor plus background tasks plus replication log skeletons. // Gap: real 07-supervisor-replication.md owns worker processes, restarts, // durable streams, conflict handling, and multi-instance deployment. #include #include #include #include #include namespace molo::example::fw { struct WorkerInfo { std::string name; bool running = false; int restarts = 0; }; class Supervisor { public: void add_worker(const std::string& name); bool start(const std::string& name); bool stop(const std::string& name); bool restart(const std::string& name); std::vector status() const; private: mutable std::mutex mu_; std::map workers_; }; struct TaskInfo { std::string id; std::string kind; std::string payload; std::string state; int attempts = 0; }; class TaskQueue { public: std::string enqueue(const std::string& kind, const std::string& payload, long delay_sec = 0); bool cancel(const std::string& id); bool retry(const std::string& id); void run_inline(TaskInfo& task); std::vector list() const; private: mutable std::mutex mu_; std::map tasks_; unsigned long next_id_ = 1; }; struct ReplEntry { unsigned long seq = 0; std::string object; std::string data; std::string resolution; }; class ReplicationLog { public: ReplEntry append(const std::string& object, const std::string& data); std::vector since(unsigned long seq) const; unsigned long latest() const; private: mutable std::mutex mu_; std::vector entries_; }; } // namespace molo::example::fw