To those who are interested,
As we have discussed in the following two posts, for some constraints, the ruin process could break them and thus they might not apply in the final solution.
At that time, we thought we would have to implement a custom ruin strategy to resolve this issue. Today when replying to a new post, I realize we do not need to do that. Instead, an InsertionStartsListener or a RuinListener will be good enough. In the listener, we will need to make sure that, when the insertion starts, the constraints apply. An example is given in the following post:
Hopefully this makes sense.