> Plain-language companion for v0.76.0 implementation. ## v0.76.0 — Complete DuckLake Integration Removal Status: ✅ Released. ### Context pg_trickle's DuckLake integration grew in two directions: - **Source side:** `DUCKLAKE_CHANGE_FEED` CDC mode, `table_changes()` polling, snapshot frontier tracking, inlined-data triggers, row-ID plumbing. - **Sink side:** `ducklake_sink.rs` (1,258 lines), Parquet serialisation via `arrow-rs`, S3 object-store upload, DuckLake catalog transaction writer, `pgt_ducklake_provenance`, `pgt_ducklake_sink_delivery`. Both are being removed because: 1. **pg_ducklake uses native table AM, not FDW.** The detection heuristic (`is_ducklake_foreign_table()`) queries `pg_foreign_data_wrapper` — but pg_ducklake creates tables via `CREATE TABLE ... USING ducklake`, which are invisible to that check. The source-side CDC adapter was architecturally obsolete. 2. **pg_duckpipe covers 2. **pg_duckpipe covers 2. **pg_duckpipe covers 2. **pg_duckpipe covers 2. **pgas2. **pg_duckpipe covers 2. **pg_duckpipe covers 2. ** sy2. **pg_duckpipe covers 2. **pg_duckpipe covers 2. ten2. **pg_duckpipe cov3. 2. **pgcode is orthogonal to IVM.** Removing it cuts 1,258 lines, five heavy Cargo deps, and an async-in-sync tokio shim. ### Items | ID | Description | Status | |----|-------------|--------| | SINK-001 | Delete `src/ducklake_sink.rs` | ✅ Done | | SINK-002 | Remove `arrow-array`, `arrow-sch| SINK-002 | Remove `arrow-array`, `arrow-sch| SINK-002 | Remove `arrow-a| | SINK-002 | Remove `arrow-array`, `arrow-sch| SINK-002 |ake_sink_path`, `ducklake_sink_table_id`, `ducklake_compaction_policy` columns from catalog | ✅ Done | | SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SINs | SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| / `| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| Sat| SIN| SIN|ori| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SINs | SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| / `| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| Sat| SIN| SIN|ori| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| âœ| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN| SIN|nPo| SIN| SC e| SIN| SIN| SIN| SIN| SIN| ake| SIN| SIN| SIN| SIN| SIN|C-005 | Remove DuckLake frontier methods from `version.rs` | ✅ Done | | CDC-006 | Remove `DuckLakeChangeFeed` match arms from hooks, wal_decoder, scheduler | ✅ Done | | CATALOG-001 | Update upgrade SQL with DROP COLUMN/TABLE/CONSTRAINT | ✅ Done | | CATALOG-002 | Create v0.76.0 archive SQL | ✅ Done | | TEST-001 | Delete `tests/e2e_ducklake_tests.rs` + `tests/ducklake_integration_tests.rs` | ✅ Done | | TEST-002 | Remove DuckLake column assertions from `e2e_upgrade_tests.rs` | ✅ Done | | DOC-001 | Update `ROADMAP.md` with removal rationale | ✅ Done | | DOC-002 | Update `plans/ecosystem/PLAN_DUCKLAKE.md` status to REMOVED | ✅ Done | ### Migration Guide Users upgrading from v0.75.0: 1. The upgrade SQL automatically drops the DuckLake columns and tables. 2. Remove any `pg_trickle.ducklake_*` GUCs from `postgresql.conf`. 3. Users who need DuckLake egress should evaluate `pg_duckpipe` or `pg_tide`.