This is an automated email from the ASF dual-hosted git repository.
vatsrahul1001 pushed a commit to branch changes-3.3.0rc2
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit e4946733c145e9f9c1e793c6ad67f47c1cdf05f9
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Jul 3 14:04:48 2026 +0530
[v3-3-test] Clarify when last_automated_data_interval is None in timetable
docs (#68461) (#69227)
(cherry picked from commit b448e6ec58276f07fff50c170cba429aed492446)
Co-authored-by: Vedant Agarwal
<[email protected]>
---
airflow-core/docs/howto/timetable.rst | 9 +++++++++
airflow-core/src/airflow/timetables/base.py | 3 +++
2 files changed, 12 insertions(+)
diff --git a/airflow-core/docs/howto/timetable.rst
b/airflow-core/docs/howto/timetable.rst
index b5c1aeadb40..90308ca42e5 100644
--- a/airflow-core/docs/howto/timetable.rst
+++ b/airflow-core/docs/howto/timetable.rst
@@ -144,6 +144,15 @@ how the Dag and its tasks specify the schedule, and
contains three attributes:
(the *start* of the data interval), not when the run will be scheduled
(usually after the end of the data interval).
+.. note::
+
+ ``last_automated_data_interval`` is only ever ``None`` when the Dag is
+ first picked up by the Dag processor: the first run is calculated at
+ parsing time, before any Dag run exists, and the result is stored on the
+ Dag. During scheduling, ``next_dagrun_info`` is always called with the
+ previous run's data interval already populated, so the ``None`` case does
+ not appear in scheduler logs when a Dag is unpaused for the first time.
+
If there was a run scheduled previously, we should now schedule for the next
non-holiday weekday by looping through subsequent days to find one that is not
a Saturday, Sunday, or US holiday. If there was not a previous scheduled run,
diff --git a/airflow-core/src/airflow/timetables/base.py
b/airflow-core/src/airflow/timetables/base.py
index 84d8aa2e46f..365f980b932 100644
--- a/airflow-core/src/airflow/timetables/base.py
+++ b/airflow-core/src/airflow/timetables/base.py
@@ -444,6 +444,9 @@ class Timetable(Protocol):
:param last_automated_data_interval: The data interval of the
associated
DAG's last scheduled or backfilled run (manual runs not
considered).
+ This is only ``None`` when the Dag is being scheduled for the first
+ time, which happens when the Dag processor first parses the Dag --
+ before any Dag run exists.
:param restriction: Restriction to apply when scheduling the DAG run.
See documentation of :class:`TimeRestriction` for details.