void addEquation(EKey key, Effects effects) {
    boolean[] hasDeps = {false};
    effects.processDependencies(depKey -> {
      hasDeps[0] = true;
      dependencies.computeIfAbsent(depKey, k -> new HashSet<>()).add(key);
    });
    if (hasDeps[0]) {
      pending.put(key, effects);
    } else {
      solved.put(key, effects);
      moving.add(key);
    }
  }
void addEquation(EKey key, Effects effects)