Date: 2026-07-24
Baseline commit: 4ce301a
Migration: 20260724_240 -> 20260724_250
(dataflow_uid, environment) permits exactly one
in-flight external mutation across deployments, actions and idempotency keys.claimed operations can be reclaimed. Deployment, activation and
rollback reconciliation observe Kestra state and complete only missing
idempotent work; rollback recovery covers a process exit between candidate
disable and prior-version enable.GET /flows/{namespace}/{id}. Canary, activation, rollback and
reconciliation fail closed when the real definition drifts.yaml_v1 or
kestra_canonical_v2. Existing yaml_v1 deployments remain operable only
through a controlled real-flow re-attestation; any evidence linked to the
old digest is invalidated and a new canary is required before activation.claimed without a complete
lease/fencing tuple are migrated to unknown with
legacy_claim_requires_reconciliation; their request, actor and idempotency
key remain intact for operator reconciliation.unknown operation is a hard barrier for the complete
(dataflow_uid, environment) scope. A different deployment, action or
idempotency key receives the oldest unresolved operation as its explicit
reconciliation target and cannot create a new claim or external call.
Multiple unknowns are drained deterministically oldest-first, with the
response indicating when more than one remains.GET must match the compiled flow ID, namespace, governance
labels and canonical executable definition before its server-observed hash
can be persisted.physical_workflow_spec: every rule.apply and quality.check node is
mapped one-to-one by component_binding_id to its published physical
plan_hash. Missing, duplicate or extra mappings fail closed. The released
semantic package and package_hash remain unchanged, while the deployment
stores and re-hashes only the physical workflow.write or read_write and still require
write_mode; inputs remain strictly read. Canary task tokens authorize
writes only for nodes whose governed purpose is write, so quality nodes
remain read-only.operation_in_progress, operation_unknown and
terminal_conflict. The browser retains the operation key for the first two
and rotates it only for an explicit terminal conflict.114 passed.735 passed, 36 skipped, 59 subtests passed.git diff --check: passed.20260724_240 to
20260724_250; the integration test verifies competing-operation fencing
and expired-claim recovery with a higher fencing epoch.unknown, retained its request/actor/key, and the database
was removed after verification.Ruff was run over the complete changed-Python scope, including migration 250:
app/api/data_rules/routes.py app/core/data_rules/deployment.py
app/core/data_rules/repository.py
app/core/orchestration/compilers/kestra.py
app/core/orchestration/engines/kestra.py
migrations/versions/20260724_250_data_factory_operation_leases.py
tests/core/data_rules/test_deployment.py
tests/core/data_rules/test_data_rule_repository.py
tests/integration/test_data_factory_postgres_lifecycle.py
tests/test_data_rule_api.py tests/test_data_rule_frontend_contract.py
tests/test_data_rule_schema.py tests/test_kestra_local_contract.py
KESTRA_SOAK_SECONDS=1800.2026-07-23T21:16:32Z.2026-07-23T21:46:29Z.111.111.0.38.73.UP.docs/acceptance/data-factory/kestra-queue-soak-30m.jsonl.5eedb97bc96955359c09bf9764edd0742e65ebd4f8bab7f3a2c660f1a48d317b.The local backend, frontend, Runner, PostgreSQL and Kestra containers were healthy after the soak. The backend health endpoint returned application code 200 with database and Neo4j healthy.
The soak harness now records the observation-window start, full Docker log
window, and PostgreSQL/Kestra RestartCount before and after the controlled
restart. The controlled docker restart does not increment RestartCount, so
any delta identifies an uncontrolled policy/daemon restart and fails the gate.
A bounded 60-second verification of the revised harness completed successfully:
2026-07-23T22:05:38Z.2026-07-23T22:06:42Z.8; successful: 8; failed: 0.4.RestartCount: 0 -> 0.28.docs/acceptance/data-factory/kestra-queue-soak-script-v2-60s.jsonl.a736d90242f896b751e5cf697426c24053cf1feb9a0970cae99c8d8dc2bb2f7f.The first default-duration v2 attempt retained all 110 successful samples
but correctly has no soak_complete: the then-current final scanner treated
PostgreSQL SQLSTATE 57P01 (terminating connection due to administrator
command) from the deliberate restart as an unexpected fatal signature. That
failed evidence remains unchanged at
docs/acceptance/data-factory/kestra-queue-soak-v2-30m.jsonl.
The scanner was corrected to retain and count that exact controlled-restart signature while every other FATAL or OOM signature remains fail-closed. A second default-duration run then completed the full release gate:
2026-07-23T22:58:52Z.2026-07-23T23:29:03Z.111/111.38; after recovery: 73.RestartCount: 0 -> 0.18.2026-07-23T22:58:52Z through completion.docs/acceptance/data-factory/kestra-queue-soak-v2-30m-rerun.jsonl.e57b161428b78afaba12c14ef4ef2a12ff098e5a447d4cb4204fdace2d72dffa.