"""Deterministic Decision Logic Tree schema: node, contract, families.""" from enum import Enum from typing import Any from pydantic import BaseModel, Field class DLTFamily(str, Enum): """DLT families: intent, geometry, physics, process, machine.""" INT = "DLT-INT" GEO = "DLT-GEO" PHY = "DLT-PHY" PROC = "DLT-PROC" MACH = "DLT-MACH" class DLTNode(BaseModel): """Single node in a DLT: deterministic, evidence-backed, fail-closed.""" node_id: str = Field(..., description="Unique node id within tree") family: DLTFamily = Field(...) condition: str = Field(..., description="Deterministic condition expression or ref") evidence_ref: str | None = Field(default=None) fail_closed: bool = Field(default=True, description="On failure, reject (fail closed)") children: list[str] = Field(default_factory=list, description="Child node ids") metadata: dict[str, Any] = Field(default_factory=dict) class DLTContract(BaseModel): """Immutable, versioned DLT contract.""" contract_id: str = Field(..., description="Contract identifier") version: int = Field(default=1) family: DLTFamily = Field(...) root_id: str = Field(..., description="Root node id") nodes: dict[str, DLTNode] = Field(default_factory=dict) metadata: dict[str, Any] = Field(default_factory=dict) model_config = {"frozen": False}