Hard Constraint doesn't seem to be applying

a corresponding RuinListener:

    algorithm.addListener(new RuinListener() {
        @Override
        public void ruinStarts(Collection<VehicleRoute> routes) {

        }

        @Override
        public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) {
            Map<TourActivity, VehicleRoute> toDeleteActRouteMap = new HashMap<>();
            for(VehicleRoute route : routes){
                for (int i = 0; i < route.getActivities().size() - 1; i++) {
                    TourActivity act1 = route.getActivities().get(i);
                    TourActivity act2 = route.getActivities().get(i + 1);
                    if(isInstanceOfDelivery(act1) && isInstanceOfDelivery(act2)) {
                        toDeleteActRouteMap.put(act1, route);
                    }
                }
            }
            for (Map.Entry<TourActivity, VehicleRoute> entry : toDeleteActRouteMap.entrySet()) {
                TourActivity act = entry.getKey();
                VehicleRoute route = entry.getValue();
                if (act instanceof TourActivity.JobActivity) {
                    Job job = ((TourActivity.JobActivity) act).getJob();
                    boolean removed = route.getTourActivities().removeJob(job);
                    if(removed) {
                        unassignedJobs.add(job);
                    }
                }
            }
        }

        @Override
        public void removed(Job job, VehicleRoute vehicleRoute) {

        }
    });