def run(self, positionals=None):
        '''run the entire helper procedure, including:

             - start: initialize the helper, collection preferences
             - record: record any relevant features for the environment / session
             - interact: interact with the user for additional informatoin
             - submit: submit the completed request
 
             Each of the above functions for a helper can determine global
             collection preferences from the system helpme.cfg in the module
             root. After performing global actions, each function then calls
             a class specific function of the same name (e.g., start calls
             _start) that is implemented by the helper class to do custom
             operations for the helper.             
        '''
        # Step 0: Each run session is given a fun name
        self.run_id = RobotNamer().generate()

        # Step 1: get config steps
        steps = self.config._sections[self.name]

        # Step 2: Start the helper (announce and run start, which is init code)
        self.start(positionals)

        # Step 3: Iterate through flow, check each step for known record/prompt,
        #         and collect outputs appropriately

        for step, content in steps.items():
            self.collect(step, content)
        
        # Step 4: When data collected, pass data structures to submit
        self.submit()