Hello everyone,
This is the follow-up to the discussion I reopened on 2026-10-27 [1].
In that thread I proposed to stop treating changes to how we develop
and test Airflow (CI, development environment, test infrastructure)
as AIPs, and to give them a separate place on the wiki. Nobody
objected so far, but since no-objection does not mean consensus,
as we learned recently - before I start a formal vote, i wanted to turn it
into a PROPOSAL so that it has clear subject and separate thread.
Why
---
The AIP page [2], in "What is considered a major change that needs
an AIP?", gives two criteria. An AIP is needed for:
* "Any major new feature, subsystem, or piece of functionality"
* "Any change that impacts the public interfaces of the project"
and it lists what the public interfaces are:
* Airflow DAG DSL components: DAG, XCom, TaskInstance and context
* The Web UI
* Core operators (BaseOperator, SubDagOperator, SensorOperator)
* REST endpoints
* Command line tools and arguments
None of the proposals listed below meets either criterion:
* They are not a feature, subsystem or functionality of Airflow.
Nothing they introduced ships to users in any Airflow release:
the linter setup, Breeze, the CI image, the move away from
Travis, pytest, the system and performance test frameworks, the
self-hosted runners, the guardrails of the AWS account that hosts
them, and running CI in contributors' forks all live in our
repository and infrastructure, not in the product.
* They change none of the interfaces listed above. No Dag authoring
component, UI page, operator, REST endpoint or CLI command
behaves differently because of any of them.
What they do change is how we, contributors and maintainers, work:
how code is checked, built and tested, and where CI runs. Those are
decisions about how the project operates. We made them AIPs only
because the AIP page was the one place we had to describe a design
and record a decision. As the AIP-120 discussion showed, that
causes confusion: about what is being decided, about who is
affected, and about which kind of vote applies. An AIP vote on a
code change lets a single binding -1 block it, while a decision
about how the project operates is a procedural, majority vote [3].
Moving them to their own section makes the AIP list again what the
AIP page says it is: changes to Airflow itself and its public
interfaces.
What I propose
--------------
1. A new wiki section, next to the AIPs: "ADIP - Airflow Development
Improvement Proposals". The name is a placeholder; if you have a
better one, say so in this thread and we will go with the one most
people prefer.
2. ADIPs cover proposals that only change how the project is
developed, tested and built: CI, the development environment,
static checks, test infrastructure and the infrastructure that
runs CI. Anything that affects users (installation, images,
providers, public interfaces) stays an AIP.
3. ADIPs are decided like any other decision about how the project
operates: discussion on dev@, then [LAZY CONSENSUS] or a
procedural [VOTE] (majority of binding votes, at least 3 binding
+1 and more binding +1 than -1) [3].
4. The CI / development AIPs listed below move to the new section and
are renumbered from 1. Nothing about any decision already made
changes: each page keeps its content, history and discussion
links.
5. Old links keep working:
- every moved page keeps its Confluence page ID, so all
".../pages/<id>/..." links (the form used in most of our mails)
resolve to the moved page;
- every new title says "(formerly AIP-N)";
- a stub page stays under each old title, saying "Moved to
ADIP-N" and linking to the new page, so links by the old title
and old bookmarks still land somewhere useful;
- the old AIP numbers are retired and never reused.
6. The AIP index page gets a short note pointing to the ADIP section.
The index lists are generated from page labels, so the moved pages
get an "adip" label instead of the AIP state labels, and they drop
out of the AIP lists automatically.
Proposed renames
----------------
Numbered in the order of the original AIP numbers.
ADIP-1 (formerly AIP-4) Automation of System Tests
was: AIP-4 Automation of System Tests [Deps: AIP-47]
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/93324355
ADIP-2 (formerly AIP-6) Enforce the usage of a code formatter & linter
was: AIP-6 Enforce the usage of a code formatter & linter
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/99844429
ADIP-3 (formerly AIP-7) Simplified development workflow
was: AIP-7 Simplified development workflow
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/99844641
ADIP-4 (formerly AIP-9) Automated Dependency Management
was: AIP-9 Automated Dependency Management
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/100828074
ADIP-5 (formerly AIP-10) Multi-layered and multi-stage official Airflow
CI image
was: AIP-10 Multi-layered and multi-stage official Airflow CI image
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/100828709
ADIP-6 (formerly AIP-23) Migrate out of Travis CI
was: AIP-23 Migrate out of Travis CI
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/122916333
ADIP-7 (formerly AIP-27) Migrate to pytest
was: AIP-27 Migrate to pytest
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/132321242
ADIP-8 (formerly AIP-47) New design of Airflow System Tests
was: AIP-47 New design of Airflow System Tests
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/199532973
ADIP-9 (formerly AIP-59) Performance tests framework
was: AIP-59 Performance tests framework
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/278465469
ADIP-10 (formerly AIP-118) Self-hosted runners for Apache Airflow CI
was: AIP-118 Self-hosted runners for Apache Airflow CI
https://cwiki.apache.org/confluence/x/-JXwGg
(its appendix page moves with it, as
"ADIP-9 Appendix - evidence and implementation details")
ADIP-11 (formerly AIP-119) Anomaly monitoring and guardrails for the
Airflow AWS account
was: AIP-119 Anomaly monitoring and guardrails for the Airflow AWS
account
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/451974695
ADIP-12 (formerly AIP-120) Run CI for external contributions in contributor
forks
was: AIP-120 Run CI for external contributions in contributor forks
https://cwiki.apache.org/confluence/spaces/AIRFLOW/pages/451974711
These stay AIPs, although they are close to the line, because they
affect users: AIP-8 (providers as separate packages), AIP-11 (landing
page), AIP-26 (production Docker image) and AIP-95 (provider
lifecycle).
AIP-47 (System tests) is the most borderline of the moved items, since
User docs take their examples from system tests. If you think it,
or any other entry, belongs on the other side, please say so in the
thread and I will adjust the list.
The vote proposal
--------
This would be a procedural vote: majority of binding votes, at least 3
binding +1 and more binding +1 than -1 [3]. Everyone is welcome to
vote; votes from PMC members are binding.
I realise this is a busy time: the 3.4.0 release vote, provider
releases, the Summit Reconnect on 4-5 November. If you need more time
to have a look, say so, and I would like to start a vote on it this week.
But not by
much: I fear we will have to act quickly in the "Your PR, your CI"
area (AIP-120, which would become ADIP-12), given the pressure on the
shared ASF runners and on our reviewers, and our quest to limit
big PRs and encourage small ones.
For the same reason, I would like to start the vote on "Your PR, your CI"
(formerly AIP-120 - possibly future ADIP-12) soon,
without waiting for this one to complete. The two are
independent: that vote decides whether we run CI for external
contributions in contributors' forks; this one only decides where
such proposals live on the wiki and how they are numbered.
Let me know if that proposal makes sense and whether you have
any concerns.
J.
[1] https://lists.apache.org/thread/h5qsfqthmsqoh5j7wyy12r90mnnvz8kt
[2]
https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals
[3] https://www.apache.org/foundation/voting.html