This is an automated email from the ASF dual-hosted git repository.

uranusjr pushed a commit to branch v3-2-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-2-test by this push:
     new 807a6899cd0 [v3-2-test] Document effects of create_cron_data_intervals 
(#66458)
807a6899cd0 is described below

commit 807a6899cd096b8da569e9d70214b54222b7f618
Author: Ash Berlin-Taylor <[email protected]>
AuthorDate: Wed May 6 09:37:54 2026 +0100

    [v3-2-test] Document effects of create_cron_data_intervals (#66458)
    
    Co-authored-by: Jed Cunningham 
<[email protected]>
---
 RELEASE_NOTES.rst                                  |  4 ++--
 .../docs/authoring-and-scheduling/timetable.rst    | 23 ++++++++++++++++++++++
 .../docs/installation/upgrading_to_airflow3.rst    | 16 ++++++++++++++-
 reproducible_build.yaml                            |  4 ++--
 4 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst
index b742a173c17..3c1c40fd178 100644
--- a/RELEASE_NOTES.rst
+++ b/RELEASE_NOTES.rst
@@ -2570,7 +2570,7 @@ Several default configuration values have been updated in 
Airflow 3.0 to better
 simplify onboarding:
 
 - ``catchup_by_default`` is now set to ``False`` by default. DAGs will not 
automatically backfill unless explicitly configured to do so.
-- ``create_cron_data_intervals`` is now set to ``False`` by default. As a 
result, cron expressions will be interpreted using the ``CronTriggerTimetable`` 
instead of the legacy ``CronDataIntervalTimetable``.
+- ``create_cron_data_intervals`` is now set to ``False`` by default. As a 
result, cron expressions will be interpreted using the ``CronTriggerTimetable`` 
instead of the legacy ``CronDataIntervalTimetable``. This only affects DAGs 
that pass a bare cron string to ``schedule=``; DAGs that pass an explicit 
timetable instance are unaffected. If you rely on the data interval semantics 
(``data_interval_start`` / ``data_interval_end``, or templated values like 
``ds`` / ``ts`` derived from ``logi [...]
 - ``SimpleAuthManager`` is now the default ``auth_manager``. To continue using 
Flask AppBuilder-based authentication, install the 
``apache-airflow-providers-fab`` provider and explicitly set ``auth_manager = 
airflow.providers.fab.auth_manager.FabAuthManager``.
 
 These changes represent the most significant evolution of the Airflow platform 
since the release of 2.0 — setting the
@@ -2822,7 +2822,7 @@ Refactored Config Defaults
 Several configuration defaults have changed in Airflow 3.0 to better reflect 
modern usage patterns:
 
 - The default value of ``catchup_by_default`` is now ``False``. DAGs will not 
backfill missed intervals unless explicitly configured to do so.
-- The default value of ``create_cron_data_intervals`` is now ``False``. Cron 
expressions are now interpreted using the ``CronTriggerTimetable`` instead of 
the legacy ``CronDataIntervalTimetable``. This change simplifies interval logic 
and aligns with the future direction of Airflow's scheduling system.
+- The default value of ``create_cron_data_intervals`` is now ``False``. Cron 
expressions are now interpreted using the ``CronTriggerTimetable`` instead of 
the legacy ``CronDataIntervalTimetable``. This change simplifies interval logic 
and aligns with the future direction of Airflow's scheduling system. Set this 
flag explicitly **before** upgrading from Airflow 2 if you rely on data 
interval semantics; flipping it later (after Airflow 3 DAG runs exist) will 
skip one scheduled run per affe [...]
 
 Refactored Internal Utilities
 """""""""""""""""""""""""""""
diff --git a/airflow-core/docs/authoring-and-scheduling/timetable.rst 
b/airflow-core/docs/authoring-and-scheduling/timetable.rst
index 28957370a47..b19cc802113 100644
--- a/airflow-core/docs/authoring-and-scheduling/timetable.rst
+++ b/airflow-core/docs/authoring-and-scheduling/timetable.rst
@@ -357,6 +357,29 @@ In these examples, you see how a trigger timetable creates 
Dag runs more intuiti
 people expect a workflow to behave, while a data interval timetable is 
designed heavily around the data
 interval it processes, and does not reflect a workflow's own properties.
 
+Switching between trigger and data interval timetables on an existing Dag
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The two kinds of timetable anchor ``logical_date`` differently: a trigger
+timetable uses the trigger time, a data interval timetable uses
+``data_interval_start``. Switching a Dag from a trigger timetable to a data
+interval timetable when it already has existing dagruns will skip one
+scheduled run, because the next run is advanced one period to avoid colliding
+with the previous run's ``logical_date``. The reverse direction (data
+interval -> trigger) does not skip a run.
+
+This transition can happen without editing a Dag, in two ways:
+
+- Flipping ``[scheduler] create_cron_data_intervals`` changes how every Dag
+  with a bare cron string in ``schedule=`` resolves its timetable.
+- Crossing a version boundary where the default differs. Airflow 3 defaults
+  to ``False``; Airflow 2.x defaults to ``True``.
+
+To keep ``logical_date`` semantics stable across either change, decide which
+timetable you want and pin it before the change: set the flag explicitly to
+the same value on both sides, or convert affected Dags to use an explicit
+timetable instance in ``schedule=`` so the flag no longer applies.
+
 
 .. _Differences between the cron and delta data interval timetables:
 
diff --git a/airflow-core/docs/installation/upgrading_to_airflow3.rst 
b/airflow-core/docs/installation/upgrading_to_airflow3.rst
index 683779c63c2..cfc39d6a5ff 100644
--- a/airflow-core/docs/installation/upgrading_to_airflow3.rst
+++ b/airflow-core/docs/installation/upgrading_to_airflow3.rst
@@ -373,7 +373,21 @@ These include:
   - ``next_ds``
   - ``execution_date``
 - The ``catchup_by_default`` Dag parameter is now ``False`` by default.
-- The ``create_cron_data_intervals`` configuration is now ``False`` by 
default. This means that the ``CronTriggerTimetable`` will be used by default 
instead of the ``CronDataIntervalTimetable``
+- The ``create_cron_data_intervals`` configuration is now ``False`` by 
default. This means that the ``CronTriggerTimetable`` will be used by default 
instead of the ``CronDataIntervalTimetable``.
+
+  This only affects Dags that pass a **bare cron string** to ``schedule=`` 
(e.g.
+  ``schedule="0 0 * * *"``); Dags that pass an explicit timetable instance are
+  unaffected. Decide whether you rely on ``data_interval_start`` /
+  ``data_interval_end`` (and on the related templated values like ``ds`` /
+  ``ts`` in your tasks, which are derived from ``logical_date`` and shift
+  between the two timetables). If you do, set
+  ``create_cron_data_intervals=True`` explicitly to keep 
``CronDataIntervalTimetable``.
+  If you don't, the new ``False`` default is fine.
+
+  Set this **before** the upgrade. If you instead change the flag after some
+  Airflow 3 dagruns already exist (going
+  ``CronTriggerTimetable`` -> ``CronDataIntervalTimetable``), one scheduled run
+  is skipped to avoid colliding with the previous run's ``logical_date``.
 - **Simple Auth** is now default ``auth_manager``. To continue using FAB as 
the Auth Manager, please install the FAB provider and set ``auth_manager`` to 
``FabAuthManager``:
 
   .. code-block:: ini
diff --git a/reproducible_build.yaml b/reproducible_build.yaml
index 3a5bb0515fe..55a06c9a0df 100644
--- a/reproducible_build.yaml
+++ b/reproducible_build.yaml
@@ -1,2 +1,2 @@
-release-notes-hash: 883ae5a3a9747f7a8c9d03e43c79c8c4
-source-date-epoch: 1776683621
+release-notes-hash: a39d1ea74556682443a7de675a1afde3
+source-date-epoch: 1778053835

Reply via email to