#1155

refactor(api): remove deprecated Python names and plugin SDK types scheduled for 0.19.0

Openiamgpwants to merge intofrom

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).

RemovedReplacement
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_assetsphlo.ingest.assets("dlt")
phlo.phlo_quality, phlo.quality.phlo_qualityphlo.quality.pandera or phlo.quality.provider(name)
phlo.backfill, phlo.flow.backfillThe phlo backfill CLI for partitioned provider assets
phlo.schedule, phlo.flow.scheduleA 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.IngestionEnginePluginCapability specs translated by an orchestrator adapter

Other changes:

  • The retained phlo migrate decorators-2026-05 codemod now also rewrites from phlo.ingestion import ..., from phlo import phlo_ingestion/get_ingestion_assets/phlo_quality, import phlo.ingestion, and get_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.ingestion decorators. Its "no workflow found" message now names @phlo.ingest.dlt.
  • The removal schedule in docs/reference/python-api.md now 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. The cli.md and cli.json references were regenerated with scripts/generate_reference_docs.py.
  • Tests now prove the names are gone: tests/plugins/test_public_api_exports.py checks attributes, __all__ and module imports, and tests/plugins/test_plugin_system.py checks the transformation family. This follows the pattern from #1216.

Unchanged:

  • The phlo migrate decorators-2026-05 codemod stays through 0.20.0.
  • The regulated-mode aliases, legacy Dagster env files and MCP JSONL tracing are handled separately.
  • phlo_dlt.phlo_ingestion and phlo_dlt.get_ingestion_assets stay. They are the provider's own names and are not deprecated.
  • get_backfill_assets, clear_backfill_assets, get_schedules, clear_schedules and ScheduleSpec stay. 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

313
coldtea-pr-lens[bot]3h ago
  • Redraw · drawn at 16a54af, the branch has moved on

Architecture

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


TIP

After a push, tick Redraw to draw the latest commit

🪧 More tips
  • Run 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."
  • Run npx @coldtea/pr-lens-cli analyze --base origin/main on a branch, then npx @coldtea/pr-lens-cli render .pr-lens/graph.json. Same lenses, your own model key, before the pull request exists
  • Click the link under each diagram to open it on a canvas you can zoom, pan and step through
  • The diagrams are links. Click one to open it on the canvas, then press W or click play to walk through the change
  • Open a diagram on the canvas, then press W or click play to walk through the change one step at a time
  • The CLI's render reads .github/pr-lens.yml and applies your renames, exclusions and lane pins at draw time
  • Set github.comment.collapsed: true in .github/pr-lens.yml to fold the comment behind one View architecture… row. Drawing still runs as before
  • Set github.draw: on-demand in .github/pr-lens.yml and PR Lens stops drawing pull requests on its own. Comment @pr-lens draw on a pull request when you want that one drawn
  • Add .github/workflows/pr-lens.yml with coldteadotai/pr-lens/packages/action@v0 and your model provider's key as its api-key to run PR Lens from your own CI. Any /chat/completions endpoint works
  • Switch GitHub to dark mode and the diagrams follow. The moving dots are this pull request's data in motion
  • Set github.description: false in .github/pr-lens.yml to stop PR Lens adding buttons to your PR descriptions

Thanks for using PR Lens! It's free for OSS. If it helped, a star helps other teams find it. 

phlo-agent[bot]3h ago

Reviewed 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.