# v0.55.0 — Final Pre-1.0 Polish

> **Full details:** [v0.55.0.md-full.md](v0.55.0.md-full.md)

## What's New

v0.55.0 delivers the final pre-1.0 polish pass across scalability, module
structure, security, documentation, and one new SQL feature.

### M-1: GUC-Configurable Invalidation Ring (up to 4,096)

The shared-memory invalidation ring capacity ceiling is raised from 1,024 to
4,096 entries, and the GUC default is updated from 128 to 1,024. Clusters
experiencing excessive full DAG rebuilds in DDL-burst environments can now
tune this higher without recompiling the extension.

### M-2: api/mod.rs Module Decomposition

`src/api/mod.rs` (8,000+ lines) is split into three focused submodules:

- `api/create.rs` — `create_stream_table`, `create_or_replace_stream_table`, `bulk_create`, and all creation helpers
- `api/alter.rs` — `alter_stream_table`, `alter_stream_table_query`, `drop_stream_table`, `resume_stream_table`, `repair_stream_table`, and schema-migration helpers
- `api/refresh.rs` — `refresh_stream_table`, `execute_manual_refresh`, `execute_manual_full_refresh`, `execute_manual_differential_refresh`

`api/mod.rs` retains shared helpers, error reporting, and re-exports so all
existing call sites continue to compile without changes.

### M-3: monitor.rs Module Decomposition

`src/monitor.rs` (4,000+ lines) is split into three focused submodules:

- `monitor/alert.rs` — `AlertEvent`, `emit_alert`, and all `alert_*` helpers
- `monitor/health.rs` — `health_check`, `health_summary`, `slot_health`, `check_cdc_health`, and related helpers
- `monitor/tree.rs` — `dependency_tree`, `render_dependency_tree`, and DFS traversal

`monitor/mod.rs` retains SQL-callable functions and re-exports from submodules.

### M-4: serde_json NOTIFY Payloads

NOTIFY alert payloads are now built with `serde_json::json!()` instead of
manually escaped format strings.  This guarantees well-formed JSON for error
messages that contain backslashes, control characters, or embedded quotes,
closing a latent security/correctness gap.

### M-5: Multi-Column IN Rewrite to EXISTS

The DVM parser now automatically rewrites `WHERE (a, b) IN (SELECT x, y FROM ...)`
to the semantically equivalent `WHERE EXISTS (SELECT 1 FROM ... WHERE a = x AND b = y)`.
Previously, such queries were rejected with an unsupported-feature error.
This closes the last user-visible SQL coverage gap in DIFFERENTIAL mode.

### M-6: DVM Parse Metrics

Two new Prometheus gauges are exported at the `/metrics` endpoint:

- `pg_trickle_dvm_parse_ms` — cumulative time spent in the DVM parser (milliseconds)
- `pg_trickle_delta_query_size_bytes` — cumulative size of generated delta SQL (bytes)

These metrics help operators identify queries with expensive parse overhead or
abnormally large delta SQL.

### M-7: Reserved-Prefix Documentation

The `__PGS_*` and `__PGT_*` column-name prefixes used internally by the
extension are now documented in `docs/SQL_REFERENCE.md`.  User-defined columns
with these prefixes will conflict with internal template tokens and produce
incorrect results.

### M-8: GUC Rationale Comments

All magic-number GUC defaults in `src/config.rs` now include a rationale
comment explaining the choice of default value and the expected impact of
raising or lowering it.

### M-9: PR Coverage Gate

Codecov coverage reporting is now wired into the PR gate.  Coverage
regressions of more than 1% fail the PR, making coverage drops visible
before merge.
