depends_on_past and run lookups broken by nullable logical_date (AIP-39)
- Dominant language
- Python
- Stars
- 46.9k
- Forks
- 17.8k
- Avg merge
- 2d 9h
- Merged PRs (30d)
- 472
Description
### Under which category would you file this issue?
Airflow Core
### Apache Airflow version
3.2.0.dev0
### What happened and how to reproduce it?
In Airflow 3 the core methods for identifying previous DAG runs are strictly tied to the logical_date column causing a major regression for Asset triggered and Manual runs where this field is nullable (AIP-39) Specifically methods like get_previous_dagrun in dagrun.py (line 991) and get_last_dagrun in dag.py (line 247) return None or filter out runs when logical_date is missing which leads to depends_on_past checks being bypassed. To reproduce fail a manual run on a DAG with depends_on_past=True and trigger a second manual run; the second run will incorrectly start immediately because the scheduler fails to find and anchor on the previous failed run using the modern run_after chronostamp.
### What you think should happen instead?
The scheduler should fallback to using the run_after column for chronological lookups when logical_date is None to ensure depends_on_past still works.
### Operating System
macOS 26.4.1 (arm64)
### Deployment
None
### Apache Airflow Provider(s)
_No response_
### Versions of Apache Airflow Providers
_No response_
### Official Helm Chart version
Not Applicable
### Kubernetes Version
_No response_
### Helm Chart configuration
_No response_
### Docker Image customizations
_No response_
### Anything else?
This problem occurs every time for non-scheduled runs (Manual/Asset-triggered) because the anchor logic strictly depends on the presence of a logical_date.
### Are you willing to submit PR?
- [x] Yes I am willing to submit a PR!
### Code of Conduct
- [x] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
Contributor guide
Assessment
This issue has not been assessed yet.