feat(dataflow): govern reusable definition updates
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-08-21 18:27:09 +02:00
parent a86220db27
commit c1111c605f
17 changed files with 1338 additions and 55 deletions
+21
View File
@@ -122,6 +122,11 @@ class PipelineGovernanceResponse(BaseModel):
derived_from_pipeline_id: str | None
derived_from_revision: int | None
derived_from_hash: str | None
source_available: bool = False
source_name: str | None = None
source_current_revision: int | None = None
source_current_hash: str | None = None
update_available: bool = False
derivation_provenance: dict[str, Any] = Field(default_factory=dict)
actions: dict[str, DefinitionActionDecisionResponse]
@@ -246,7 +251,23 @@ class PipelineDeriveRequest(BaseModel):
allow_automation: bool = False
class PipelineRebaseRequest(BaseModel):
expected_revision: int = Field(ge=1)
source_revision: int = Field(ge=1)
source_hash: str = Field(pattern=r"^[0-9a-f]{64}$")
reason: str = Field(min_length=3, max_length=4_000)
@field_validator("reason")
@classmethod
def validate_reason(cls, value: str) -> str:
cleaned = value.strip()
if len(cleaned) < 3:
raise ValueError("A meaningful rebase review reason is required.")
return cleaned
class PipelineDraftRequest(BaseModel):
pipeline_id: str | None = Field(default=None, max_length=36)
graph: PipelineGraph | None = None
sql_text: str | None = Field(default=None, max_length=100_000)
source_nodes: list[GraphNode] = Field(default_factory=list, max_length=20)