Gracefully degrading algorithms [Biely et al., TCS 2018] are designed to circumvent impossibility results in dynamic systems by adapting themselves to the dynamics. Indeed, such an algorithm solves a given problem under some dynamics and, moreover, guarantees that a weaker (but related) problem is solved under a higher dynamics under which the original problem is impossible to solve. The underlying intuition is to solve the problem whenever possible but to provide some kind of quality of service if the dynamics become (unpredictably) higher.In this paper, we apply for the first time this approach to robot networks. We focus on the fundamental problem of gathering a squad of autonomous robots on an unknown location of a dynamic ring. In this goal, we introduce a set of weaker variants of this problem. Motivated by a set of impossibility results related to the dynamics of the ring, we propose a gracefully degrading gathering algorithm. arXiv:1805.05137v2 [cs.DC] 2 Aug 2018 Rules for Phase K K 1 :: AllButT woW aitingW alker() −→ InitiateWalk() K 2 :: W aitingW alker() −→ StopMoving() K 3 :: ∃r ∈ N odeM ate(), P otentialM inOrSearcherW ithM inW aiting(r ) −→ BecomeWaitingWalker(r') K 4 :: ∃r ∈ N odeM ate(), RighterW ithM inW aiting(r ) ∧ ExistsEdge(right, current) −→ BecomeAwareSearcher(r') Rules for Phase M M 1 :: P otentialM inOrRighter() ∧ M inDiscovery() −→ BecomeMinWaitingWalker(r) M 2 :: ∃r ∈ N odeM ate(), N otW alkerW ithHeadW alker(r ) ∧ ExistsEdge(right, current) −→ BecomeAwareSearcher(r') M 3 :: ∃r ∈ N odeM ate(), N otW alkerW ithHeadW alker(r ) −→ BecomeAwareSearcher(r'); StopMoving() M 4 :: ∃r ∈ N odeM ate(), N otW alkerW ithT ailW alker(r ) −→ BecomeTailWalker(r'); Walk() M 5 :: ∃r ∈ N odeM ate(), P otentialM inW ithAwareSearcher(r ) −→ BecomeAwareSearcher(r'); Search() M 6 :: AllButOneRighter() −→ InitiateSearch() M 7 :: ∃r ∈ N odeM ate(), RighterW ithSearcher(r ) −→ BecomeAwareSearcher(r'); Search() M 8 :: P otentialM inOrRighter() −→ MoveRight() M 9 :: DumbSearcherM inRevelation() −→ BecomeAwareSearcher(r); Search() M 10 :: ∃r ∈ N odeM ate(), DumbSearcherW ithAwareSearcher(r ) −→ BecomeAwareSearcher(r'); Search() M 11 :: Searcher() −→ Search()