Migrate Dataflow interface patterns

This commit is contained in:
2026-08-03 14:19:42 +02:00
parent 3fa7a29f48
commit 109ddcd4fb
9 changed files with 995 additions and 103 deletions
+170
View File
@@ -181,6 +181,113 @@ DOCUMENTATION = (
"Output publication uses forward recovery and blocks blind retry "
"when provider acknowledgement is uncertain."
),
"help_contexts": [
"dataflow.page",
"dataflow.library",
"dataflow.graph",
"dataflow.sql",
"dataflow.inspector",
"dataflow.results",
"dataflow.state.read-only",
],
},
),
DocumentationTopic(
id="dataflow.reference.nodes-and-expressions",
title="Dataflow nodes and expressions",
summary="Typed node inputs, expressions, schema propagation, and bounded intermediate previews.",
body=(
"Every graph node declares typed inputs, configuration, output schema, and validation rules. "
"Source nodes pin inline content or governed Datasource references; combine, filter, transform, "
"quality, reconciliation, reusable-subflow, and output nodes remain explicit in the canonical graph. "
"Expressions use the typed Dataflow expression language and never execute arbitrary host or database "
"code. Selecting a node may request a bounded intermediate preview; preview rows are transient, "
"privacy-filtered for the actor, and are not retained as run output. SQL editing compiles into the same "
"canonical graph, so unsupported statements are diagnostics rather than pass-through SQL."
),
layer="available",
documentation_types=("admin", "user"),
audience=("operator", "module_admin", "power_user", "data_steward"),
order=76,
related_modules=("datasources", "connectors", "policy", "audit"),
metadata={
"help_contexts": [
"dataflow.field.node-name",
"dataflow.field.source",
"dataflow.field.expression",
"dataflow.field.schema",
"dataflow.action.preview-node",
],
},
),
DocumentationTopic(
id="dataflow.reference.fields-and-consequences",
title="Dataflow fields and lifecycle consequences",
summary="Definition scope, revision, reuse, automation, execution, publication, promotion, and deletion semantics.",
body=(
"Scope determines ownership and Policy inheritance. Templates can be derived but not run; complete "
"flows may be previewed, revisioned, automated, and executed when effective Policy allows it. Saving "
"appends an immutable revision. A scoped copy pins its source revision and content hash. Triggers pin "
"the revision and authorization grant, then re-evaluate authority for every delivery. Runs create "
"durable command and recovery evidence. Publishing creates a governed Datasource materialization, and "
"environment promotion changes which immutable revision is eligible for staging or production runs. "
"Deletion prevents future use while retained run, deployment, lineage, audit, and recovery evidence "
"continues under its retention policy."
),
layer="available",
documentation_types=("admin", "user"),
audience=("operator", "module_admin", "power_user", "product_owner"),
order=77,
related_modules=("datasources", "workflow_engine", "notifications", "policy", "audit"),
metadata={
"help_contexts": [
"dataflow.field.scope",
"dataflow.field.definition-kind",
"dataflow.action.save",
"dataflow.action.derive",
"dataflow.action.trigger",
"dataflow.action.delete",
],
"consequence_classes": {
"save_revision": "Appends an immutable pipeline definition revision.",
"derive_copy": "Creates a separately governed copy pinned to the source revision and hash.",
"configure_trigger": "Creates or changes an automation command with revision and authorization evidence.",
"delete_pipeline": "Prevents future use while retained evidence remains governed.",
},
},
),
DocumentationTopic(
id="dataflow.execution-and-recovery",
title="Dataflow execution, publication, and recovery",
summary="Pinned runs, environment promotion, output publication, cancellation, reconciliation, and retained evidence.",
body=(
"Every run is pinned to an immutable revision and idempotency key. The queue records actor, authority, "
"environment, progress, cancellation, output, and recovery state. Database-only runs commit atomically. "
"Publication to a governed Datasource uses forward recovery: an unknown provider outcome is reconciled "
"before retry so output is not duplicated. Staging and production promotion is explicit and does not "
"rewrite a revision. Cancellation is best effort once external work has started; the final evidence "
"states whether work stopped, completed, failed, or requires operator reconciliation."
),
layer="available",
documentation_types=("admin", "user"),
audience=("operator", "module_admin", "power_user", "security_admin"),
order=78,
related_modules=("datasources", "notifications", "policy", "audit", "ops"),
metadata={
"help_contexts": [
"dataflow.runs",
"dataflow.action.queue-run",
"dataflow.action.publish",
"dataflow.action.promote-staging",
"dataflow.action.promote-production",
"dataflow.state.recovery-attention",
],
"consequence_classes": {
"queue_run": "Creates a durable asynchronous command and authorization evidence.",
"publish_output": "Creates or updates a governed Datasource and appends a materialization.",
"promote_revision": "Makes an immutable revision eligible in a higher execution environment.",
"cancel_run": "Requests cancellation; already acknowledged external effects may remain.",
},
},
),
)
@@ -374,6 +481,69 @@ manifest = ModuleManifest(
),
),
view_surfaces=(
ViewSurface(
id="dataflow.page",
module_id=MODULE_ID,
kind="route",
label="Dataflow",
order=72,
),
ViewSurface(
id="dataflow.library",
module_id=MODULE_ID,
kind="section",
label="Pipeline library",
parent_id="dataflow.page",
order=10,
),
ViewSurface(
id="dataflow.graph",
module_id=MODULE_ID,
kind="section",
label="Graph editor",
parent_id="dataflow.page",
order=20,
),
ViewSurface(
id="dataflow.sql",
module_id=MODULE_ID,
kind="section",
label="Constrained SQL editor",
parent_id="dataflow.page",
order=30,
),
ViewSurface(
id="dataflow.inspector",
module_id=MODULE_ID,
kind="section",
label="Node inspector",
parent_id="dataflow.page",
order=40,
),
ViewSurface(
id="dataflow.results",
module_id=MODULE_ID,
kind="section",
label="Preview and diagnostics",
parent_id="dataflow.page",
order=50,
),
ViewSurface(
id="dataflow.triggers",
module_id=MODULE_ID,
kind="action",
label="Automation triggers",
parent_id="dataflow.page",
order=60,
),
ViewSurface(
id="dataflow.runs",
module_id=MODULE_ID,
kind="action",
label="Runs and deployments",
parent_id="dataflow.page",
order=70,
),
ViewSurface(
id="dataflow.widget.pipelines",
module_id=MODULE_ID,