srchilukoori commented on issue #65497:
URL: https://github.com/apache/airflow/issues/65497#issuecomment-4276670485
## RC Testing Results — apache-airflow-ctl 0.1.4rc2
**Environment:** Breeze (Docker), Python 3.10, SQLite backend
**Date:** 2026-04-19
**Install note:** Required `httpx==0.28.1` pin — RC ships `httpx==1.0.dev3`
which removed `HTTPStatusError`, crashing on startup.
```
uv tool install 'apache-airflow-ctl==0.1.4rc2' --prerelease=allow --with
'httpx==0.28.1' --force-reinstall
```
| PR | Fix | Result | Notes |
|----|-----|--------|-------|
| #63772 | `version` no keyring prompt | ✅ Pass | Returns immediately, no
credential prompts |
| #64071 | `--limit` returns ≤N results | ✅ Pass | Verified with 7 queued
runs: `--limit 2` → 2 rows, `--limit 5` → 5 rows |
| #64582 | Negative `--limit` no infinite loop | ✅ Pass | Exits in <1s; API
validates and rejects `-1` cleanly |
| #65052 | Non-zero exit on failure | ✅ Pass | `dags get --dag-id
nonexistent-dag` exits 1 |
| #65065 | `jobs list` `is_alive` default | ✅ Pass | Returns
DagProcessorJob, SchedulerJob, TriggererJob without error |
| #64935 | `plugins list` command exists | ✅ Pass | Returns plugin list |
| #63259 | Backfill no serialization error | ✅ Pass | `backfill list`
returns empty list cleanly |
| #63733 | `run_type` in dag-run response | ✅ Pass | `run_type: "manual"`
present in `dagrun list` response |
| #64362 | Variable falsy values preserved | ✅ Pass | `"0"` → `"0"` and
`"false"` → `"false"` on create + get |
---
### New bug found: `dagrun list` crashes without `--state`
**Command:** `airflowctl dagrun list --limit 5`
**Error:**
```
Server error: Invalid value for state. Valid values are queued, running,
success, failed
```
**Root cause:** `DagRunOperations.list()` declares `state: str` as a
required parameter with no default. When `--state` is omitted, argparse passes
`None`. The operation unconditionally converts it with `str(state)` (line 630
of `operations.py`), which produces the literal string `"None"` — an invalid
state value that the API rejects.
**Reproduce:**
```bash
airflowctl dagrun list --limit 5
# → Server error: Invalid value for state. Valid values are queued, running,
success, failed
```
**Fix:** Change the `state` parameter to optional and skip it when not
provided:
```python
# operations.py, DagRunOperations.list()
def list(self, state: str | None = None, limit: int = 100, ...):
params: dict[str, Any] = {"limit": limit}
if state is not None:
params["state"] = state
```
**Workaround:** Pass `--state` explicitly, e.g. `airflowctl dagrun list
--state running --limit 5`.
Note: This also means `--limit` and `--limit=-1` tests for PRs #64071 and
#64582 required `--state` to be passed explicitly to isolate those behaviors.
---
> Generated with assistance from Claude (Anthropic). All commands run and
verified manually against a live Breeze environment.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]