docs: def get(self, param, config, target, fallback):
          """Return the value of `param`, according to priority / expansion.
  
          First priority - the target itself.
          Second priority - the project config.
          Third priority - a global default ("fallback").
  
          In list-params, a '$*' term processed as "expansion term", meaning
          it is replaced with all terms from the config-level.
          """
          target_val = target.props.get(param)
          config_val = config.get(param, fallback)
          if not target_val:
              return config_val
          if isinstance(target_val, list):
              val = []
              for el in target_val:
                  if el == '$*':
                      val.extend(listify(config_val))
                  else:
                      val.append(el)
              return val
          return target_val