code: def _specialize(self, reconfigure=False):
          
          # add in the 'root_dir' directories to the context dictionaries
          for manifest in [self.source, self.target]:
              context_dict = {}
              if manifest:
                  for s in manifest.formula_sections():
                      context_dict["%s:root_dir" % s] = self.directory.install_directory(s)
                      context_dict['config:root_dir'] = self.directory.root_dir
                      context_dict['config:node'] = system.NODE
                  manifest.add_additional_context(context_dict)
          self._validate_manifest()
          for feature in self.features.run_order:
              if not reconfigure:
                  self.run_action(feature, 'resolve')
              # if a target doesn't exist, no need to prompt.
              instance = self.features[feature]
              if instance.target:
                  self.run_action(feature, 'prompt')
docs: Add variables and specialize contexts