def to_dict(self):
        if self.failure:
            failure = self.failure.to_dict()
        else:
            failure = None
        if self.revert_failure:
            revert_failure = self.revert_failure.to_dict()
        else:
            revert_failure = None
        return {
            'failure': failure,
            'revert_failure': revert_failure,
            'meta': self.meta,
            'name': self.name,
            'results': self.results,
            'revert_results': self.revert_results,
            'state': self.state,
            'version': self.version,
            'intention': self.intention,
            'uuid': self.uuid,
        }
there are a bunch of unreliable places to look for a build version
dataset/ETHPy150Open openstack/taskflow/taskflow/persistence/models.py/AtomDetail.to_dict--crossover with--dataset/ETHPy150Open dimagi/commcare-hq/corehq/apps/receiverwrapper/util.py/get_app_version_info