Changelog
All notable changes to ACE will be captured in this document. The project follows semantic versioning; the latest changes appear first.
[v1.4.2] - 2025-12-03
Added
- Installation guide covering
go install, release tarballs, and a Docker quickstart that links to the full container docs.
Changed
- CLI entrypoint moved from
cmd/servertocmd/ace, sogo install github.com/pgedge/ace/cmd/ace@…produces anacebinary (no moreserver). - GoReleaser, README build snippets, and helper scripts updated to the new
cmd/acepath.
Fixed
- Avoids user confusion where
go installpreviously emitted aserverbinary.
[v1.4.1] - 2025-12-03
Added
table-repair --fix-nullsmode (with dry-run support) to cross-fill NULL-only drifts without a single source-of-truth, plus broader datatype coverage (arrays, JSON/JSONB, bytea, intervals) and dedicated integration tests.- CDC can run snapshot-style drains to the current WAL flush LSN, periodically flushes metadata via the new
mtree.cdc.cdc_metadata_flush_secondssetting, and exposes--skip-cdcto bypass replication updates before Merkle diffs. - Documentation updates: Docker usage guide (GHCR images, config generation, ephemeral and long-running modes), design docs promoted into the docs nav, and mermaid diagrams enabled for architecture pages.
Changed
- Connection pool lifecycle and privilege handling tightened across CLI/API paths; API handlers now require client roles, repairs set roles per transaction, and connection options avoid unnecessary privilege drops.
- Table-diff now records the base table and table filter in diff summaries, cleans up filtered materialized views automatically, and handles JSON/bytea/interval/array casting more defensively.
Fixed
- CDC processing handles slot
confirmed_flush_lsnfallbacks, stops once it reaches the caller’s high-water mark, and flushes metadata during/after streaming to avoid re-chasing new WAL. - Table-repair validates diff-file schema/table metadata, enforces consistent column definitions across nodes, and closes connection pools reliably across all repair paths.
[v1.4.0] - 2025-11-24
Added
- REST API server secured with mutual TLS (configurable allowed CNs and optional CRL) that runs table-diff, table-rerun, table-repair, schema/repset/spock diffs, and Merkle tree init/build/update/diff/teardown as tracked tasks in a SQLite-backed store; runnable via
ace serverorace start --component api. - Client certificate authentication for PostgreSQL connections via the new
cert_authsettings, allowing ACE to use user cert/key/CA pairs instead of passwords when talking to mTLS-secured nodes. max_diff_rowsguardrail for table-diff runs (configurable inace.yamlor API payloads) that stops comparisons once the threshold is hit and marks JSON/HTML reports when early termination occurs.
Changed
- All CLI commands now expose short flag aliases and updated command reference docs;
ace startalso gained a--componentselector to run just the scheduler, just the API server, or both. - Release automation and packaging were reworked: GoReleaser now builds CGO-enabled Linux binaries (amd64/arm64) alongside non-CGO macOS/Windows artifacts, and a GitHub Actions workflow publishes tagged releases.
Fixed
- Table filters now create deterministic, sanitised filtered view names per task to avoid collisions and invalid identifiers when
--table-filteris used.
[v1.3.5] - 2025-11-06
Added
- Background task scheduler capable of running table-diff, schema-diff, and repset-diff jobs on a cron or fixed interval cadence, including run-on-start semantics and shared job definitions.
- Persistent SQLite-backed task store that records job metadata, execution status, and timing so schedules and operators have historical visibility.
default_clusterconfig option plus supporting docs to eliminate the need to pass the cluster name on every CLI invocation once set.- Official multi-stage Dockerfile that fetches a published ACE release tarball, installs it into a distroless base image, and wires up
/etc/ace/ace.yaml. - Comprehensive Go API and scheduling documentation covering the new automation flows.
[v1.3.4] - 2025-10-22
Fixed
ace --help,ace help …,ace config init, andace cluster initnow skip configuration checks, so bootstrapping ACE no longer fails whenace.yamlis missing.- All other commands still abort early with a clear error if a config file is not found, making misconfiguration obvious.
[v1.3.3] - 2025-10-21
Added
- Native support for PostgreSQL
pg_service.conffiles (includingACE_PGSERVICEFILEandPGSERVICEFILEoverrides) so ACE can auto-discover cluster and node definitions without JSON stubs.
Changed
- Service-file parsing merges base and per-node settings, validates required host/database attributes, and respects node filters before running diffs.
- Updated CLI options and documentation to explain the new service-file workflow.
[v1.3.2] - 2025-10-18
Changed
- Configuration discovery now walks
ACE_CONFIG, the working directory,$HOME/.config/ace/ace.yaml, and/etc/ace/ace.yaml, dramatically simplifying shared installs. - When no config file is present, ACE exits immediately with
config file 'ace.yaml' not found, preventing confusing downstream failures.
[v1.3.1] - 2025-10-17
Added
- HTML diff report output (paired with JSON/CSV) that presents per-node summaries, highlights differing cells, and bundles metadata for sharing with stakeholders.
Changed
- Table-diff runtime received major performance optimisations: per-task contexts, parallel leaf-hash recomputation, and more efficient goroutine usage cut latency for large tables.
- GoReleaser settings were updated so the new artifacts ship with every tagged release.
[v1.3.0] - 2025-09-30
Added
- Merkle tree subsystem (init/build/update/listen/table-diff/teardown) that maintains per-table rolling hashes to detect drift without rescanning entire relations.
- CDC listener now streams from PostgreSQL’s native
pgoutputplugin for lower overhead Merkle updates. - Automatic Merkle range split/merge plus transactional writes keep trees balanced and consistent as workloads fluctuate.
- Merkle objects moved into the dedicated
spockschema and avisualise.shhelper script renders tree hierarchies for debugging. - Additional docs and integration tests covering Merkle workflows and a key boundary-calculation fix for accurate diff windows.
[v1.2.0] - 2025-07-23
Added
- Centralised logger abstraction adopted across the CLI/server so every module emits consistent, leveled output.
- Shared helper functions consolidated into
pkg/common/utils.go, reducing duplication and paving the way for future configuration improvements. - GitHub Actions CI now runs the full integration test suite on every push and pull request.
Changed
- Repository licensing and documentation were aligned with PostgreSQL License requirements: added LICENSE, propagated headers to all files, and reorganised long-form API docs.
[v1.1.0] - 2025-07-16
Added
schema-difffor whole-schema comparisons (with optional per-table diffs) plus a DDL-only inspection mode.repset-diffto iterate table-diff across all tables in a replication set and aggregate the findings.spock-diffto validate Spock metadata, slots, and replication state across nodes.table-rerunto re-check only the rows captured in a previous diff report and confirm whether repairs succeeded.- Diff reports now include commit timestamps and origin metadata for better provenance tracking.
[v1.0.0] - 2025-06-30
Added
- Initial ACE release featuring
table-diffwith rich tuning flags (block size, concurrency, compare units, table filters, and JSON/CSV output). table-repairworkflow that consumes a diff report and applies repairs with safeguards such as dry-run, insert-only/upsert-only, and trigger controls.- Baseline configuration workflow using
ace.yamlplus cluster definitions, establishing the foundation for subsequent automation.