Intelligence in its decisions is a trait that we have grown to expect from a cyber-physical system. In particular that it makes the right choices at runtime, i.e., those that allow it fulfill its tasks, even in case of faults or unexpected interactions with its environment. Analyzing how to continuously achieve the currently desired (and possibly continuously changing) goals and adapting its behavior to reach these goals is undoubtedly a serious challenge. This becomes even more challenging if the atomic actions a system can implement become unreliable due to faulty components or some exogenous event out of its control. In this paper, we propose a solution for the presented challenge. In particular, we show how to adopt a light-weight diagnosis concept to cope with such situations. The approach is based on rules coupled with means for rule selection that are based on previous information regarding the success or failure of rule executions. We furthermore present a Java-based framework of the light-weight diagnosis concept, and discuss the results obtained from an experimental evaluation considering several application scenarios. At the end, we present a qualitative comparison with other related approaches that should help the reader decide which approach works best for them.