def merge_from_artifact(self, other: "Manifest") -> None:
        """Update this manifest by adding the 'defer_relation' attribute to all nodes
        with a counterpart in the stateful manifest used for deferral.

        Only non-ephemeral refable nodes are examined.
        """
        refables = set(REFABLE_NODE_TYPES)
        for unique_id, node in other.nodes.items():
            current = self.nodes.get(unique_id)
            if current and node.resource_type in refables and not node.is_ephemeral:
                assert isinstance(node.config, NodeConfig)  # this makes mypy happy
                defer_relation = DeferRelation(
                    database=node.database,
                    schema=node.schema,
                    alias=node.alias,
                    relation_name=node.relation_name,
                    resource_type=node.resource_type,
                    name=node.name,
                    description=node.description,
                    compiled_code=(node.compiled_code if not isinstance(node, SeedNode) else None),
                    meta=node.meta,
                    tags=node.tags,
                    config=node.config,
                )
                self.nodes[unique_id] = replace(current, defer_relation=defer_relation)

        # Rebuild the flat_graph, which powers the 'graph' context variable
        self.build_flat_graph()
Update this manifest by adding the 'defer_relation' attribute to all nodes
        with a counterpart in the stateful manifest used for deferral.

        Only non-ephemeral refable nodes are examined.
        
core/dbt/contracts/graph/manifest.py