I've been expanding the unit tests of the executors for all three classes, and these methods in StaticSingleThreadedExecutor should not be using the base class implementation in rclcpp::Executor. Because StaticSingleThreadedExecutor derives and implements its own add_node and remove_node, the collection of nodes in rclcpp::Executor is not updated and so these spin variants won't do any work. Either add_node and remove_node need to call the base class implementations as well, which would currently throw an "This node already has an executor" exception or these variants need to be derived specifically for StaticSingleThreadedExecutor.