> **See also:** [ROADMAP.md](../ROADMAP.md) ## v1.0.0 — Stable Release **Goal:** First officially supported release. Semantic versioning locks in. API, catalog schema, and GUC names are considered stable. Focus is distribution — getting pg_trickle onto package registries — and PostgreSQL 19 forward-compatibility. ### PostgreSQL 19 Forward-Compatibility (A3) > **In plain terms:** When PostgreSQL 19 beta stabilises and pgrx 0.18.x > ships with PG 19 support, this milestone bumps the pgrx dependency, > audits every internal `pg_sys::*` API call for breaking changes, adds > conditional compilation gates, and validates the WAL decoder against any > pgoutput format changes introduced in PG 19. Moved here from the > earlier v0.26.0 milestone because PG 19 beta availability is uncertain. | Item | Description | Effort | Ref | |------|-------------|--------|-----| | A3-1 | pgrx version bump to 0.18.x (PG 19 support) + `cargo pgrx init --pg19` | 2–4h | [PLAN_PG19_COMPAT.md](plans/infra/PLAN_PG19_COMPAT.md) §2 | | A3-2 | `pg_sys::*` API audit: heap access, catalog structs, WAL decoder `LogicalDecodingContext` | 8–16h | [PLAN_PG19_COMPAT.md](plans/infra/PLAN_PG19_COMPAT.md) §3 | | A3-3 | Conditional compilation (`#[cfg(feature = "pg19")]`) for changed APIs | 4–8h | [PLAN_PG19_COMPAT.md](plans/infra/PLAN_PG19_COMPAT.md) §4 | | A3-4 | CI matrix expansion for PG 19 + full E2E suite run | 4–8h | [PLAN_PG19_COMPAT.md](plans/infra/PLAN_PG19_COMPAT.md) | > **A3 subtotal: ~18–36 hours** ### Release engineering > **In plain terms:** The 1.0 release is the official "we stand behind this > API" declaration — from this point on the function names, catalog schema, > and configuration settings won't change without a major version bump. The > practical work is getting pg_trickle onto standard package registries > (PGXN, apt, rpm) so it can be installed with the same commands as any > other PostgreSQL extension, and hardening the CloudNativePG integration > for Kubernetes deployments. | Item | Description | Effort | Ref | |------|-------------|--------|-----| | R1 | Semantic versioning policy + compatibility guarantees | 2–3h | [PLAN_VERSIONING.md](plans/infra/PLAN_VERSIONING.md) | | R2 | apt / rpm packaging (Debian/Ubuntu `.deb` + RHEL `.rpm` via PGDG) | 8–12h | [PLAN_PACKAGING.md](plans/infra/PLAN_PACKAGING.md) | | R2b | PGXN `release_status` → `"stable"` (flip one field; PGXN testing release ships in v0.7.0) | 30min | [PLAN_PACKAGING.md](plans/infra/PLAN_PACKAGING.md) | | R3 | ~~Docker Hub official image~~ → CNPG extension image | ✅ Done | [PLAN_CLOUDNATIVEPG.md](plans/ecosystem/PLAN_CLOUDNATIVEPG.md) | | R4 | ~~CNPG operator hardening (K8s 1.33+ native ImageVolume)~~ ➡️ Pulled to v0.15.0 | 4–6h | [PLAN_CLOUDNATIVEPG.md](plans/ecosystem/PLAN_CLOUDNATIVEPG.md) | | R5 | **Docker Hub official image.** Publish `pgtrickle/pg_trickle:1.0.0-pg18` and `:latest` to Docker Hub. Sync Dockerfile.hub version tag with release. Automate via GitHub Actions release workflow. | 2–4h | — | | R6 | **Version sync automation.** Ensure `just check-version-sync` covers all version references (Cargo.toml, extension control files, Dockerfile.hub, dbt_project.yml, CNPG manifests). Add to CI as a blocking check. | 2–3h | — | | SAST-SEMGREP | **Elevate Semgrep to blocking in CI.** CodeQL and cargo-deny already block; Semgrep is advisory-only. Flip to blocking for consistent safety gating. Before flipping, verify zero findings across all current rules. | 1–2h | [PLAN_SAST.md](plans/testing/PLAN_SAST.md) | | OTL-1 | **OpenTelemetry tracing spans.** Add `pgtrickle.refresh`, `pgtrickle.cdc_capture`, and `pgtrickle.snapshot` spans via the OTel SDK so every pg_trickle operation is visible to OTel collectors. Minimum viable: trace_id propagation through the refresh pipeline; attribute set = `stream_table`, `refresh_mode`, `rows_processed`. | 4–8h | [PLAN_OVERALL_ASSESSMENT_3.md](plans/PLAN_OVERALL_ASSESSMENT_3.md) §9.6 | | SIGN-1 | **Cosign-sign GHCR release images.** Add `cosign sign` step to the GitHub Actions release workflow for `grove/pg-trickle`, `grove/pgtrickle-relay`, and `pg_trickle-ext` GHCR images. Attach Rekor transparency log entry. Document `cosign verify` command in `SECURITY.md`. | 2–4h | [PLAN_OVERALL_ASSESSMENT_3.md](plans/PLAN_OVERALL_ASSESSMENT_3.md) §9.11 | | MDB-1 | **Promote G17-MDB multi-database soak test to `ci.yml`.** The `stability-tests.yml` G17-MDB job runs multi-database scenarios in isolation. Move it to `ci.yml` under the "Push to main" trigger alongside the existing soak test. Gate it on a 30-min wall-clock budget for PR CI; use the full 2-hour run on schedule. | 2–3h | [PLAN_OVERALL_ASSESSMENT_3.md](plans/PLAN_OVERALL_ASSESSMENT_3.md) §9.10 | > **v1.0.0 total: ~42–78 hours** (incl. PG 19 compat ~18–36h + release engineering ~18–30h + OTel/cosign/MDB ~8–12h) **Exit criteria:** - [ ] A3: PG 19 builds and passes full E2E suite - [ ] CI matrix includes PG 19 - [ ] Published on PGXN (stable) and apt/rpm via PGDG - [ ] Docker Hub image published (`pgtrickle/pg_trickle:1.0.0-pg18` and `:latest`) - [x] CNPG extension image published to GHCR (`pg_trickle-ext`) - [x] CNPG cluster-example.yaml validated (Image Volume approach) - [ ] `just check-version-sync` passes and blocks CI on mismatch - [ ] SAST-SEMGREP: Semgrep elevated to blocking in CI; zero findings verified - [ ] OTL-1: OTel refresh/CDC/snapshot spans emitted; visible in Jaeger test run - [ ] SIGN-1: All GHCR release images cosign-signed; `cosign verify grove/pg-trickle:1.0.0` passes - [ ] MDB-1: G17-MDB soak test runs in `ci.yml` on push to main; green - [ ] Upgrade path from v0.30.0 tested - [ ] Semantic versioning policy in effect ---