Removes the deprecated Python names and plugin SDK types that the Python API removal schedule set for 0.19.0. Their deprecation warnings, shims and deprecation-behaviour tests go with them. After this change phlo.__all__ contains none of these names (ADR 0053 decision 4).
| Removed | Replacement |
|---|---|
phlo.phlo_ingestion, phlo.ingestion.phlo_ingestion, the callable phlo.ingestion(...) module (src/phlo/ingestion.py deleted) | phlo.ingest.dlt or phlo.ingest.provider(name) |
phlo.get_ingestion_assets, phlo.ingestion.get_ingestion_assets | phlo.ingest.assets("dlt") |
phlo.phlo_quality, phlo.quality.phlo_quality | phlo.quality.pandera or phlo.quality.provider(name) |
phlo.backfill, phlo.flow.backfill | The phlo backfill CLI for partitioned provider assets |
phlo.schedule, phlo.flow.schedule | A provider decorator's cron argument or native Dagster schedules |
SyncToAsyncIngesterAdapter, AsyncToSyncIngesterAdapter, SyncToAsyncTransformerAdapter, AsyncToSyncTransformerAdapter (phlo.operations.adapters deleted) | Implement the target sync or async contract directly |
TransformationPlugin, the phlo.plugins.transforms entry-point family, its registry validation, and phlo plugin create/list/info/search --type transform(s) | AssetProviderPlugin or TransformationProviderPlugin |
phlo_dagster.IngestionEnginePlugin | Capability specs translated by an orchestrator adapter |
Other changes:
- The retained
phlo migrate decorators-2026-05codemod now also rewritesfrom phlo.ingestion import ...,from phlo import phlo_ingestion/get_ingestion_assets/phlo_quality,import phlo.ingestion, andget_ingestion_assets()calls, so migrated modules no longer import a removed name. Dropping the last name from a from-import no longer leaves a trailing comma. (Raised by phlo-agent.) phlo workflow check(phlo-pandera) no longer recognises@phlo.ingestiondecorators. Its "no workflow found" message now names@phlo.ingest.dlt.- The removal schedule in
docs/reference/python-api.mdnow lists each removed name with its replacement. The plugin reference, the capabilities reference, the concepts page and the package READMEs no longer mention the removed names. Thecli.mdandcli.jsonreferences were regenerated withscripts/generate_reference_docs.py. - Tests now prove the names are gone:
tests/plugins/test_public_api_exports.pychecks attributes,__all__and module imports, andtests/plugins/test_plugin_system.pychecks the transformation family. This follows the pattern from #1216.
Unchanged:
- The
phlo migrate decorators-2026-05codemod stays through 0.20.0. - The regulated-mode aliases, legacy Dagster env files and MCP JSONL tracing are handled separately.
phlo_dlt.phlo_ingestionandphlo_dlt.get_ingestion_assetsstay. They are the provider's own names and are not deprecated.get_backfill_assets,clear_backfill_assets,get_schedules,clear_schedulesandScheduleSpecstay. They have no approved removal decision.
Verification: make check (the pytest lane passed 7549, and its one failure was fixed and re-run), make test-core-regression, make docs-build, the phlo-dagster and phlo-pandera package suites, and codespell on the changed files.
Activity
313Reviewed 16a54af against the full 40-file diff at that SHA. The removal is coherent across __all__ and attribute surfaces, plugin families, registry validation, and CLI type maps, and tests/plugins/test_public_api_exports.py pins the gone names. Three gaps:
1. The retained codemod still leaves phlo.ingestion imports behind (medium)
This PR keeps phlo migrate decorators-2026-05 through 0.20.0 as the migration route for these names, but decorators_2026_05.py only rewrites imports from phlo_dlt, phlo_dlt.decorator, and phlo.quality. For from phlo.ingestion import phlo_ingestion (a spelling the deleted src/phlo/ingestion.py supported), the decorator is still rewritten to @phlo.ingest.dlt by the dotted-name branch, but the import line survives. The "migrated" module now fails at import with ModuleNotFoundError: No module named 'phlo.ingestion'; before this change the same output imported with a deprecation warning. import phlo.ingestion plus @phlo.ingestion(...) ends the same way.
Suggestion: handle phlo.ingestion in visit_ImportFrom/leave_ImportFrom (drop phlo_ingestion, rewrite get_ingestion_assets call sites to phlo.ingest.assets("dlt")) and add a case to tests/codemods/test_decorators_2026_05.py.
2. phlo_dlt's docstring still points at the removed module (low)
packages/phlo-dlt/src/phlo_dlt/__init__.py#L57-L64 says the package "is typically accessed through phlo.ingestion" and advises from phlo.ingestion import phlo_ingestion; both now raise ModuleNotFoundError. The provider's own phlo_dlt.phlo_ingestion stays, so only the module reference needs to become phlo.ingest.dlt. The package README was already updated to the provider import; this docstring was not.
3. phlo's docstring still advertises the removed entry-point family (low)
src/phlo/__init__.py#L34 still lists phlo.transforms under "Plugin Entry Points", although PLUGIN_FAMILIES, registry validation, and the plugin CLI no longer accept that family. The same docstring was edited in this PR to drop the removed ingestion exports.
CI for 16a54af was still queued when I checked (only ci / ci / prepare selection and wheels had completed), so the PR-body verification is not reflected in checks yet.
16a54af, the branch has moved onArchitecture
Inside the changed components — 2 views
Component view — Flow authoring and plugins
Internal authoring surfaces, registry types, and removed adapters
Component view — CLI and orchestrator extensions
Command scaffold choices and Dagster extension interfaces
Data flow
No data-flow sequence changed in this PR.
Review
✨ Nothing flagged · reviewed
16a54af🪧 More tips
npx skills add coldteadotai/pr-lens, then tell your coding agent: "Diagram the change you just made with PR Lens and attach it to the pull request."npx @coldtea/pr-lens-cli analyze --base origin/mainon a branch, thennpx @coldtea/pr-lens-cli render .pr-lens/graph.json. Same lenses, your own model key, before the pull request existsrenderreads.github/pr-lens.ymland applies your renames, exclusions and lane pins at draw timegithub.comment.collapsed: truein.github/pr-lens.ymlto fold the comment behind one View architecture… row. Drawing still runs as beforegithub.draw: on-demandin.github/pr-lens.ymland PR Lens stops drawing pull requests on its own. Comment@pr-lens drawon a pull request when you want that one drawn.github/workflows/pr-lens.ymlwithcoldteadotai/pr-lens/packages/action@v0and your model provider's key as itsapi-keyto run PR Lens from your own CI. Any/chat/completionsendpoint worksgithub.description: falsein.github/pr-lens.ymlto stop PR Lens adding buttons to your PR descriptionsThanks for using PR Lens! It's free for OSS. If it helped, a star helps other teams find it.