"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""

import builtins
import dbtlabs.proto.public.v1.events.fusion.phase.phase_pb2
import google.protobuf.descriptor
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import sys
import typing

if sys.version_info >= (3, 10):
    import typing as typing_extensions
else:
    import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

class _NodeType:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _NodeTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_NodeType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    NODE_TYPE_UNSPECIFIED: _NodeType.ValueType  # 0
    NODE_TYPE_MODEL: _NodeType.ValueType  # 1
    NODE_TYPE_SEED: _NodeType.ValueType  # 2
    NODE_TYPE_SNAPSHOT: _NodeType.ValueType  # 11
    NODE_TYPE_SOURCE: _NodeType.ValueType  # 3
    NODE_TYPE_TEST: _NodeType.ValueType  # 4
    NODE_TYPE_UNIT_TEST: _NodeType.ValueType  # 5
    NODE_TYPE_MACRO: _NodeType.ValueType  # 6
    NODE_TYPE_DOCS_MACRO: _NodeType.ValueType  # 7
    NODE_TYPE_ANALYSIS: _NodeType.ValueType  # 8
    NODE_TYPE_OPERATION: _NodeType.ValueType  # 9
    NODE_TYPE_EXPOSURE: _NodeType.ValueType  # 10
    NODE_TYPE_METRIC: _NodeType.ValueType  # 12
    NODE_TYPE_SAVED_QUERY: _NodeType.ValueType  # 13
    NODE_TYPE_SEMANTIC_MODEL: _NodeType.ValueType  # 14
    NODE_TYPE_FUNCTION: _NodeType.ValueType  # 15

class NodeType(_NodeType, metaclass=_NodeTypeEnumTypeWrapper):
    """Node type, also known as "resource type" in dbt core."""

NODE_TYPE_UNSPECIFIED: NodeType.ValueType  # 0
NODE_TYPE_MODEL: NodeType.ValueType  # 1
NODE_TYPE_SEED: NodeType.ValueType  # 2
NODE_TYPE_SNAPSHOT: NodeType.ValueType  # 11
NODE_TYPE_SOURCE: NodeType.ValueType  # 3
NODE_TYPE_TEST: NodeType.ValueType  # 4
NODE_TYPE_UNIT_TEST: NodeType.ValueType  # 5
NODE_TYPE_MACRO: NodeType.ValueType  # 6
NODE_TYPE_DOCS_MACRO: NodeType.ValueType  # 7
NODE_TYPE_ANALYSIS: NodeType.ValueType  # 8
NODE_TYPE_OPERATION: NodeType.ValueType  # 9
NODE_TYPE_EXPOSURE: NodeType.ValueType  # 10
NODE_TYPE_METRIC: NodeType.ValueType  # 12
NODE_TYPE_SAVED_QUERY: NodeType.ValueType  # 13
NODE_TYPE_SEMANTIC_MODEL: NodeType.ValueType  # 14
NODE_TYPE_FUNCTION: NodeType.ValueType  # 15
Global___NodeType: typing_extensions.TypeAlias = NodeType

class _NodeOutcome:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _NodeOutcomeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_NodeOutcome.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    NODE_OUTCOME_UNSPECIFIED: _NodeOutcome.ValueType  # 0
    """Default value. Should only be set on unfinished spans"""
    NODE_OUTCOME_SUCCESS: _NodeOutcome.ValueType  # 1
    """Successfully completed all operations in the phase.
    Some node types also store a type specific outcome for successful completion.
    """
    NODE_OUTCOME_ERROR: _NodeOutcome.ValueType  # 2
    """Failed with an aggregated error type (individual errors reported as separate events).
    If set, `node_error_type` with also be set to indicate the type of error.
    """
    NODE_OUTCOME_CANCELED: _NodeOutcome.ValueType  # 3
    """Operation was canceled (e.g. user-initiated cancellation).
    If set, `node_cancel_reason` will also be set to indicate the reason for the cancelation.
    """
    NODE_OUTCOME_SKIPPED: _NodeOutcome.ValueType  # 4
    """Skipped evaluation for a specific reason.
    If set, `node_skip_reason` will also be set to indicate the reason for the skip.
    """

class NodeOutcome(_NodeOutcome, metaclass=_NodeOutcomeEnumTypeWrapper):
    """Core outcome for any node evaluation result within any phase.
    Represents the aggregated result of all operations in the phase
    """

NODE_OUTCOME_UNSPECIFIED: NodeOutcome.ValueType  # 0
"""Default value. Should only be set on unfinished spans"""
NODE_OUTCOME_SUCCESS: NodeOutcome.ValueType  # 1
"""Successfully completed all operations in the phase.
Some node types also store a type specific outcome for successful completion.
"""
NODE_OUTCOME_ERROR: NodeOutcome.ValueType  # 2
"""Failed with an aggregated error type (individual errors reported as separate events).
If set, `node_error_type` with also be set to indicate the type of error.
"""
NODE_OUTCOME_CANCELED: NodeOutcome.ValueType  # 3
"""Operation was canceled (e.g. user-initiated cancellation).
If set, `node_cancel_reason` will also be set to indicate the reason for the cancelation.
"""
NODE_OUTCOME_SKIPPED: NodeOutcome.ValueType  # 4
"""Skipped evaluation for a specific reason.
If set, `node_skip_reason` will also be set to indicate the reason for the skip.
"""
Global___NodeOutcome: typing_extensions.TypeAlias = NodeOutcome

class _NodeErrorType:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _NodeErrorTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_NodeErrorType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    NODE_ERROR_TYPE_INTERNAL: _NodeErrorType.ValueType  # 0
    """Internal dbt error (bug, panic, unexpected state) – not recoverable by retrying."""
    NODE_ERROR_TYPE_EXTERNAL: _NodeErrorType.ValueType  # 1
    """External system error (database down, network issue, etc.) – potentially recoverable by retrying."""
    NODE_ERROR_TYPE_USER: _NodeErrorType.ValueType  # 2
    """User code error (SQL syntax, compilation error, etc.) that must be fixed by the user."""

class NodeErrorType(_NodeErrorType, metaclass=_NodeErrorTypeEnumTypeWrapper):
    """Categorization of aggregated errors for debugging and retry logic.
    Errors form a hierarchy: if any internal error occurred, the aggregated result is INTERNAL.
    Otherwise if any external error occurred it is EXTERNAL. Otherwise it is USER.
    """

NODE_ERROR_TYPE_INTERNAL: NodeErrorType.ValueType  # 0
"""Internal dbt error (bug, panic, unexpected state) – not recoverable by retrying."""
NODE_ERROR_TYPE_EXTERNAL: NodeErrorType.ValueType  # 1
"""External system error (database down, network issue, etc.) – potentially recoverable by retrying."""
NODE_ERROR_TYPE_USER: NodeErrorType.ValueType  # 2
"""User code error (SQL syntax, compilation error, etc.) that must be fixed by the user."""
Global___NodeErrorType: typing_extensions.TypeAlias = NodeErrorType

class _NodeCancelReason:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _NodeCancelReasonEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_NodeCancelReason.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    NODE_CANCEL_REASON_USER_CANCELLED: _NodeCancelReason.ValueType  # 0
    """User explicitly cancelled execution (e.g. ctrl-c)."""

class NodeCancelReason(_NodeCancelReason, metaclass=_NodeCancelReasonEnumTypeWrapper):
    """Reasons why a node evaluation was cabceled."""

NODE_CANCEL_REASON_USER_CANCELLED: NodeCancelReason.ValueType  # 0
"""User explicitly cancelled execution (e.g. ctrl-c)."""
Global___NodeCancelReason: typing_extensions.TypeAlias = NodeCancelReason

class _NodeSkipReason:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _NodeSkipReasonEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_NodeSkipReason.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    NODE_SKIP_REASON_UNSPECIFIED: _NodeSkipReason.ValueType  # 0
    NODE_SKIP_REASON_UPSTREAM: _NodeSkipReason.ValueType  # 1
    """Skipped because an upstream dependency prevents this node from running (for any reason)."""
    NODE_SKIP_REASON_CACHED: _NodeSkipReason.ValueType  # 2
    """Reused from cache"""
    NODE_SKIP_REASON_PHASE_DISABLED: _NodeSkipReason.ValueType  # 3
    """Current evaluation phase disabled for this node by configuration / flags."""
    NODE_SKIP_REASON_NO_OP: _NodeSkipReason.ValueType  # 4
    """Operation had no effect (e.g. ephemeral models)."""
    NODE_SKIP_REASON_PHASE_SKIPPED: _NodeSkipReason.ValueType  # 5
    """Current evaluation phase skipped for this node due to previous phase outcome."""

class NodeSkipReason(_NodeSkipReason, metaclass=_NodeSkipReasonEnumTypeWrapper):
    """Reasons why a node may be skipped. Only applies to nodes selected for evaluation."""

NODE_SKIP_REASON_UNSPECIFIED: NodeSkipReason.ValueType  # 0
NODE_SKIP_REASON_UPSTREAM: NodeSkipReason.ValueType  # 1
"""Skipped because an upstream dependency prevents this node from running (for any reason)."""
NODE_SKIP_REASON_CACHED: NodeSkipReason.ValueType  # 2
"""Reused from cache"""
NODE_SKIP_REASON_PHASE_DISABLED: NodeSkipReason.ValueType  # 3
"""Current evaluation phase disabled for this node by configuration / flags."""
NODE_SKIP_REASON_NO_OP: NodeSkipReason.ValueType  # 4
"""Operation had no effect (e.g. ephemeral models)."""
NODE_SKIP_REASON_PHASE_SKIPPED: NodeSkipReason.ValueType  # 5
"""Current evaluation phase skipped for this node due to previous phase outcome."""
Global___NodeSkipReason: typing_extensions.TypeAlias = NodeSkipReason

class _NodeCacheReason:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _NodeCacheReasonEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_NodeCacheReason.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    NODE_CACHE_REASON_NO_CHANGES: _NodeCacheReason.ValueType  # 0
    """Reused from cache - no code or data changes detected."""
    NODE_CACHE_REASON_STILL_FRESH: _NodeCacheReason.ValueType  # 1
    """Reused from cache - changes detected but still within freshness window."""
    NODE_CACHE_REASON_UPDATE_CRITERIA_NOT_MET: _NodeCacheReason.ValueType  # 2
    """Reused from cache - changes detected but update criteria not met."""

class NodeCacheReason(_NodeCacheReason, metaclass=_NodeCacheReasonEnumTypeWrapper):
    """Cache reuse classification when node_skip_reason == NODE_SKIP_REASON_CACHED."""

NODE_CACHE_REASON_NO_CHANGES: NodeCacheReason.ValueType  # 0
"""Reused from cache - no code or data changes detected."""
NODE_CACHE_REASON_STILL_FRESH: NodeCacheReason.ValueType  # 1
"""Reused from cache - changes detected but still within freshness window."""
NODE_CACHE_REASON_UPDATE_CRITERIA_NOT_MET: NodeCacheReason.ValueType  # 2
"""Reused from cache - changes detected but update criteria not met."""
Global___NodeCacheReason: typing_extensions.TypeAlias = NodeCacheReason

class _NodeMaterialization:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _NodeMaterializationEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_NodeMaterialization.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    NODE_MATERIALIZATION_UNKNOWN: _NodeMaterialization.ValueType  # 0
    NODE_MATERIALIZATION_SNAPSHOT: _NodeMaterialization.ValueType  # 1
    NODE_MATERIALIZATION_SEED: _NodeMaterialization.ValueType  # 2
    NODE_MATERIALIZATION_VIEW: _NodeMaterialization.ValueType  # 3
    NODE_MATERIALIZATION_TABLE: _NodeMaterialization.ValueType  # 4
    NODE_MATERIALIZATION_INCREMENTAL: _NodeMaterialization.ValueType  # 5
    NODE_MATERIALIZATION_MATERIALIZED_VIEW: _NodeMaterialization.ValueType  # 6
    NODE_MATERIALIZATION_EXTERNAL: _NodeMaterialization.ValueType  # 7
    NODE_MATERIALIZATION_TEST: _NodeMaterialization.ValueType  # 8
    NODE_MATERIALIZATION_EPHEMERAL: _NodeMaterialization.ValueType  # 9
    NODE_MATERIALIZATION_UNIT: _NodeMaterialization.ValueType  # 10
    NODE_MATERIALIZATION_ANALYSIS: _NodeMaterialization.ValueType  # 11
    NODE_MATERIALIZATION_STREAMING_TABLE: _NodeMaterialization.ValueType  # 12
    """ONLY FOR DATABRICKS"""
    NODE_MATERIALIZATION_DYNAMIC_TABLE: _NodeMaterialization.ValueType  # 13
    """ONLY FOR SNOWFLAKE"""
    NODE_MATERIALIZATION_FUNCTION: _NodeMaterialization.ValueType  # 14
    NODE_MATERIALIZATION_CUSTOM: _NodeMaterialization.ValueType  # 100

class NodeMaterialization(_NodeMaterialization, metaclass=_NodeMaterializationEnumTypeWrapper): ...

NODE_MATERIALIZATION_UNKNOWN: NodeMaterialization.ValueType  # 0
NODE_MATERIALIZATION_SNAPSHOT: NodeMaterialization.ValueType  # 1
NODE_MATERIALIZATION_SEED: NodeMaterialization.ValueType  # 2
NODE_MATERIALIZATION_VIEW: NodeMaterialization.ValueType  # 3
NODE_MATERIALIZATION_TABLE: NodeMaterialization.ValueType  # 4
NODE_MATERIALIZATION_INCREMENTAL: NodeMaterialization.ValueType  # 5
NODE_MATERIALIZATION_MATERIALIZED_VIEW: NodeMaterialization.ValueType  # 6
NODE_MATERIALIZATION_EXTERNAL: NodeMaterialization.ValueType  # 7
NODE_MATERIALIZATION_TEST: NodeMaterialization.ValueType  # 8
NODE_MATERIALIZATION_EPHEMERAL: NodeMaterialization.ValueType  # 9
NODE_MATERIALIZATION_UNIT: NodeMaterialization.ValueType  # 10
NODE_MATERIALIZATION_ANALYSIS: NodeMaterialization.ValueType  # 11
NODE_MATERIALIZATION_STREAMING_TABLE: NodeMaterialization.ValueType  # 12
"""ONLY FOR DATABRICKS"""
NODE_MATERIALIZATION_DYNAMIC_TABLE: NodeMaterialization.ValueType  # 13
"""ONLY FOR SNOWFLAKE"""
NODE_MATERIALIZATION_FUNCTION: NodeMaterialization.ValueType  # 14
NODE_MATERIALIZATION_CUSTOM: NodeMaterialization.ValueType  # 100
Global___NodeMaterialization: typing_extensions.TypeAlias = NodeMaterialization

class _TestOutcome:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _TestOutcomeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_TestOutcome.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    TEST_OUTCOME_PASSED: _TestOutcome.ValueType  # 0
    """No failures found or below warning threshold."""
    TEST_OUTCOME_WARNED: _TestOutcome.ValueType  # 1
    """Failures found between warning and error thresholds."""
    TEST_OUTCOME_FAILED: _TestOutcome.ValueType  # 2
    """Failures found above error threshold."""

class TestOutcome(_TestOutcome, metaclass=_TestOutcomeEnumTypeWrapper):
    """Test-specific outcome details (only for TEST and UNITTEST node types)."""

TEST_OUTCOME_PASSED: TestOutcome.ValueType  # 0
"""No failures found or below warning threshold."""
TEST_OUTCOME_WARNED: TestOutcome.ValueType  # 1
"""Failures found between warning and error thresholds."""
TEST_OUTCOME_FAILED: TestOutcome.ValueType  # 2
"""Failures found above error threshold."""
Global___TestOutcome: typing_extensions.TypeAlias = TestOutcome

class _SourceFreshnessOutcome:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SourceFreshnessOutcomeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SourceFreshnessOutcome.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SOURCE_FRESHNESS_OUTCOME_OUTCOME_PASSED: _SourceFreshnessOutcome.ValueType  # 0
    """Freshness within acceptable (success) threshold."""
    SOURCE_FRESHNESS_OUTCOME_OUTCOME_WARNED: _SourceFreshnessOutcome.ValueType  # 1
    """Freshness exceeded warning threshold but below error threshold."""
    SOURCE_FRESHNESS_OUTCOME_OUTCOME_FAILED: _SourceFreshnessOutcome.ValueType  # 2
    """Freshness exceeded error threshold."""

class SourceFreshnessOutcome(_SourceFreshnessOutcome, metaclass=_SourceFreshnessOutcomeEnumTypeWrapper):
    """Freshness-specific outcome details (only for SOURCE nodes with freshness checks)."""

SOURCE_FRESHNESS_OUTCOME_OUTCOME_PASSED: SourceFreshnessOutcome.ValueType  # 0
"""Freshness within acceptable (success) threshold."""
SOURCE_FRESHNESS_OUTCOME_OUTCOME_WARNED: SourceFreshnessOutcome.ValueType  # 1
"""Freshness exceeded warning threshold but below error threshold."""
SOURCE_FRESHNESS_OUTCOME_OUTCOME_FAILED: SourceFreshnessOutcome.ValueType  # 2
"""Freshness exceeded error threshold."""
Global___SourceFreshnessOutcome: typing_extensions.TypeAlias = SourceFreshnessOutcome

@typing.final
class TestEvaluationDetail(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    TEST_OUTCOME_FIELD_NUMBER: builtins.int
    FAILING_ROWS_FIELD_NUMBER: builtins.int
    DIFF_TABLE_FIELD_NUMBER: builtins.int
    test_outcome: Global___TestOutcome.ValueType
    failing_rows: builtins.int
    """Number of failing rows for this test."""
    diff_table: builtins.str
    """Pretty printed table diff if available."""
    def __init__(
        self,
        *,
        test_outcome: Global___TestOutcome.ValueType = ...,
        failing_rows: builtins.int = ...,
        diff_table: builtins.str | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["_diff_table", b"_diff_table", "diff_table", b"diff_table"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["_diff_table", b"_diff_table", "diff_table", b"diff_table", "failing_rows", b"failing_rows", "test_outcome", b"test_outcome"]) -> None: ...
    def WhichOneof(self, oneof_group: typing.Literal["_diff_table", b"_diff_table"]) -> typing.Literal["diff_table"] | None: ...

Global___TestEvaluationDetail: typing_extensions.TypeAlias = TestEvaluationDetail

@typing.final
class SourceFreshnessDetail(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    NODE_FRESHNESS_OUTCOME_FIELD_NUMBER: builtins.int
    node_freshness_outcome: Global___SourceFreshnessOutcome.ValueType
    def __init__(
        self,
        *,
        node_freshness_outcome: Global___SourceFreshnessOutcome.ValueType = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["node_freshness_outcome", b"node_freshness_outcome"]) -> None: ...

Global___SourceFreshnessDetail: typing_extensions.TypeAlias = SourceFreshnessDetail

@typing.final
class NodeCacheDetail(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    NODE_CACHE_REASON_FIELD_NUMBER: builtins.int
    node_cache_reason: Global___NodeCacheReason.ValueType
    def __init__(
        self,
        *,
        node_cache_reason: Global___NodeCacheReason.ValueType = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["node_cache_reason", b"node_cache_reason"]) -> None: ...

Global___NodeCacheDetail: typing_extensions.TypeAlias = NodeCacheDetail

@typing.final
class NodeSkipUpstreamDetail(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    UPSTREAM_UNIQUE_ID_FIELD_NUMBER: builtins.int
    upstream_unique_id: builtins.str
    """unique_id of the upstream node that caused this node to be skipped."""
    def __init__(
        self,
        *,
        upstream_unique_id: builtins.str = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["upstream_unique_id", b"upstream_unique_id"]) -> None: ...

Global___NodeSkipUpstreamDetail: typing_extensions.TypeAlias = NodeSkipUpstreamDetail

@typing.final
class NodeEvaluated(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    UNIQUE_ID_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    DATABASE_FIELD_NUMBER: builtins.int
    SCHEMA_FIELD_NUMBER: builtins.int
    IDENTIFIER_FIELD_NUMBER: builtins.int
    MATERIALIZATION_FIELD_NUMBER: builtins.int
    CUSTOM_MATERIALIZATION_FIELD_NUMBER: builtins.int
    NODE_TYPE_FIELD_NUMBER: builtins.int
    NODE_OUTCOME_FIELD_NUMBER: builtins.int
    PHASE_FIELD_NUMBER: builtins.int
    NODE_ERROR_TYPE_FIELD_NUMBER: builtins.int
    NODE_CANCEL_REASON_FIELD_NUMBER: builtins.int
    NODE_SKIP_REASON_FIELD_NUMBER: builtins.int
    NODE_CACHE_DETAIL_FIELD_NUMBER: builtins.int
    NODE_TEST_DETAIL_FIELD_NUMBER: builtins.int
    NODE_FRESHNESS_OUTCOME_FIELD_NUMBER: builtins.int
    NODE_SKIP_UPSTREAM_DETAIL_FIELD_NUMBER: builtins.int
    DBT_CORE_EVENT_CODE_FIELD_NUMBER: builtins.int
    unique_id: builtins.str
    """unique_id is the globally unique identifier for this node."""
    name: builtins.str
    """Node name."""
    database: builtins.str
    """Database where this node will be created if applicable."""
    schema: builtins.str
    """Schema where this node will be created if applicable."""
    identifier: builtins.str
    """Name of the relation (table, view, etc.) that will be created for this node if applicable."""
    materialization: Global___NodeMaterialization.ValueType
    """How this node is materialized in the data warehouse."""
    custom_materialization: builtins.str
    """If materialization == NODE_MATERIALIZATION_CUSTOM, this field contains the custom materialization name."""
    node_type: Global___NodeType.ValueType
    """Type of node being evaluated. Known as `resource_type` in dbt core."""
    node_outcome: Global___NodeOutcome.ValueType
    """Core outcome for this evaluation."""
    phase: dbtlabs.proto.public.v1.events.fusion.phase.phase_pb2.ExecutionPhase.ValueType
    """Execution phase during which this node was evaluated."""
    node_error_type: Global___NodeErrorType.ValueType
    """Granular reasons for unsuccessful outcomes (error, canceled, skipped).

    Categorization of aggregated errors for debugging and retry logic.
    Present when node_outcome == NODE_OUTCOME_ERROR.
    """
    node_cancel_reason: Global___NodeCancelReason.ValueType
    """Cancellation reason.
    Present when node_outcome == NODE_OUTCOME_CANCELED.
    """
    node_skip_reason: Global___NodeSkipReason.ValueType
    """Detailed reason for skipping this node.
    Present when node_outcome == NODE_OUTCOME_SKIPPED.
    """
    dbt_core_event_code: builtins.str
    """Optional legacy dbt core event code (e.g. "Q018") if this event has a strict mapping to a dbt core event."""
    @property
    def node_cache_detail(self) -> Global___NodeCacheDetail:
        """Detailed reason why cache was used.
        Present when node_skip_reason == NODE_SKIP_REASON_CACHED.
        """

    @property
    def node_test_detail(self) -> Global___TestEvaluationDetail:
        """Test specific outcome details.
        Present for test / unit test node types when node_outcome == NODE_OUTCOME_SUCCESS.
        """

    @property
    def node_freshness_outcome(self) -> Global___SourceFreshnessDetail:
        """Source freshness specific outcome details.
        Present for source nodes with freshness checks when node_outcome == NODE_OUTCOME_SUCCESS.
        """

    @property
    def node_skip_upstream_detail(self) -> Global___NodeSkipUpstreamDetail:
        """Upstream node that caused this node to be skipped.
        Present when node_skip_reason == NODE_SKIP_REASON_UPSTREAM.
        """

    def __init__(
        self,
        *,
        unique_id: builtins.str = ...,
        name: builtins.str = ...,
        database: builtins.str | None = ...,
        schema: builtins.str | None = ...,
        identifier: builtins.str | None = ...,
        materialization: Global___NodeMaterialization.ValueType | None = ...,
        custom_materialization: builtins.str | None = ...,
        node_type: Global___NodeType.ValueType = ...,
        node_outcome: Global___NodeOutcome.ValueType = ...,
        phase: dbtlabs.proto.public.v1.events.fusion.phase.phase_pb2.ExecutionPhase.ValueType = ...,
        node_error_type: Global___NodeErrorType.ValueType | None = ...,
        node_cancel_reason: Global___NodeCancelReason.ValueType | None = ...,
        node_skip_reason: Global___NodeSkipReason.ValueType | None = ...,
        node_cache_detail: Global___NodeCacheDetail | None = ...,
        node_test_detail: Global___TestEvaluationDetail | None = ...,
        node_freshness_outcome: Global___SourceFreshnessDetail | None = ...,
        node_skip_upstream_detail: Global___NodeSkipUpstreamDetail | None = ...,
        dbt_core_event_code: builtins.str | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["_custom_materialization", b"_custom_materialization", "_database", b"_database", "_dbt_core_event_code", b"_dbt_core_event_code", "_identifier", b"_identifier", "_materialization", b"_materialization", "_node_cancel_reason", b"_node_cancel_reason", "_node_error_type", b"_node_error_type", "_node_skip_reason", b"_node_skip_reason", "_schema", b"_schema", "custom_materialization", b"custom_materialization", "database", b"database", "dbt_core_event_code", b"dbt_core_event_code", "identifier", b"identifier", "materialization", b"materialization", "node_cache_detail", b"node_cache_detail", "node_cancel_reason", b"node_cancel_reason", "node_error_type", b"node_error_type", "node_freshness_outcome", b"node_freshness_outcome", "node_outcome_detail", b"node_outcome_detail", "node_skip_reason", b"node_skip_reason", "node_skip_upstream_detail", b"node_skip_upstream_detail", "node_test_detail", b"node_test_detail", "schema", b"schema"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["_custom_materialization", b"_custom_materialization", "_database", b"_database", "_dbt_core_event_code", b"_dbt_core_event_code", "_identifier", b"_identifier", "_materialization", b"_materialization", "_node_cancel_reason", b"_node_cancel_reason", "_node_error_type", b"_node_error_type", "_node_skip_reason", b"_node_skip_reason", "_schema", b"_schema", "custom_materialization", b"custom_materialization", "database", b"database", "dbt_core_event_code", b"dbt_core_event_code", "identifier", b"identifier", "materialization", b"materialization", "name", b"name", "node_cache_detail", b"node_cache_detail", "node_cancel_reason", b"node_cancel_reason", "node_error_type", b"node_error_type", "node_freshness_outcome", b"node_freshness_outcome", "node_outcome", b"node_outcome", "node_outcome_detail", b"node_outcome_detail", "node_skip_reason", b"node_skip_reason", "node_skip_upstream_detail", b"node_skip_upstream_detail", "node_test_detail", b"node_test_detail", "node_type", b"node_type", "phase", b"phase", "schema", b"schema", "unique_id", b"unique_id"]) -> None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_custom_materialization", b"_custom_materialization"]) -> typing.Literal["custom_materialization"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_database", b"_database"]) -> typing.Literal["database"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_dbt_core_event_code", b"_dbt_core_event_code"]) -> typing.Literal["dbt_core_event_code"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_identifier", b"_identifier"]) -> typing.Literal["identifier"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_materialization", b"_materialization"]) -> typing.Literal["materialization"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_node_cancel_reason", b"_node_cancel_reason"]) -> typing.Literal["node_cancel_reason"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_node_error_type", b"_node_error_type"]) -> typing.Literal["node_error_type"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_node_skip_reason", b"_node_skip_reason"]) -> typing.Literal["node_skip_reason"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["_schema", b"_schema"]) -> typing.Literal["schema"] | None: ...
    @typing.overload
    def WhichOneof(self, oneof_group: typing.Literal["node_outcome_detail", b"node_outcome_detail"]) -> typing.Literal["node_cache_detail", "node_test_detail", "node_freshness_outcome", "node_skip_upstream_detail"] | None: ...

Global___NodeEvaluated: typing_extensions.TypeAlias = NodeEvaluated
