v0.11.0
Status: Released
All roadmap items for v0.11 "Phase 14 — Diagnostic Quality, CLI Surface &
Documentation Correctness" are complete. This release focuses on making the CLI
output trustworthy, the error messages actionable, and the documentation honest.
What's new
Diagnostic Infrastructure
-
Q-08: New unified
Diagnostictype (aqueduct_core::diagnostic) replaces
the separateValidationError,LintDiagnostic, and ad-hoc parse error strings.
DiagnosticSetcollects diagnostics with file/line/column context. Both the
validate and lint subsystems now emitDiagnosticSetresults. -
Q-04: Stable numeric error codes (
error_code()method onAqueductError).
Error categories: 1000–1099 database, 1100–1199 configuration, 1200–1299 planning,
1300–1399 execution, 1400–1499 catalog. Codes are stable across releases. -
Q-03:
ManageWalSlotplan step uses typedWalSlotActionenum (Create/Drop)
instead of a free-formString. Eliminates the "Unknown action" dead code path.
CLI Surface Correctness
-
U-02: Fixed
aqueduct planexit semantics. Previously exited 1 for any non-empty
plan. Now exits 0 by default; exits 1 only when--fail-if-changedor
--fail-on-driftis explicitly set. CI pipelines that just want to see a plan
without failing now work correctly. -
U-03: New
--fail-on-driftflag foraqueduct diff. Exits 1 when any delta is
non-Unchanged, exits 0 for a clean diff. -
U-05:
executor.execute()now returnsExecutionResult { migration_id, dag_version }
instead of a bareu64. Theapply_completeJSON event on stderr now emits both
migration_id(aqueduct.migrations row id) anddag_version(bigserial) as separate
fields. -
U-06/SEC-01: Password redaction for all connection strings displayed in error
messages.redact_dsn()replaces passwords with***in both URL-form and
keyword-value DSNs. -
U-10: YAML output format for
aqueduct status(use--format yaml).
Read-Only Safety (D-03/SEC-08)
aqueduct planandaqueduct statusnow useconnect_read_only(), which issues
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLYimmediately after connecting.
These commands cannot accidentally mutate data.
Documentation Correctness
-
D-01: README updated to v0.11.0 status and feature list.
-
D-04/D-05: Blue/green migration strategy (still planned for v0.13) is now clearly
marked as[PLANNED]indocs/api-reference.md,docs/ha-operations.md, and the
apply action YAML. The--strategy blue-greenflag in the apply action is disabled
(no-op) pending the v0.13 implementation. -
D-07: Unimplemented features (YAML output, IMMEDIATE mode, real secret backends)
moved from[Released]to[Planned]sections in CHANGELOG. -
D-09/SEC-02:
docs/security.mdnow clearly marks AWS/GCP/Vault secret backends
as "Planned (v0.12)". Onlyenv,sops, andageare implemented today. -
D-11:
docs/ha-operations.mdmaintenance window documentation updated to remove
blue/green from the implementedmaintenance_window_applies_tovalues. -
D-12: Example workflow version pins in
aqueduct-plan.ymlandaqueduct-apply.yml
updated from@v0.4.0to@v0.11.0.
Code Quality
-
Q-01: Step registry contract test — exhaustive match on all
PlanStepvariants
ensures every variant has a non-emptydescription(). Adding a new variant without
updatingdescription()is now a compile error. -
Q-02: Typed
PlanExecutorconstructors:for_apply(),for_rollback(),
for_promote(),for_dry_run(). The genericnew()constructor is still available. -
Q-06: Typed DAG state wrappers:
DesiredDagState,LiveDagState,
RecordedDagStatenewtypes wrappingDagState. Prevents mixing state kinds in
function signatures. -
Q-09:
lib.rsexportsCLI_VERSION = env!("CARGO_PKG_VERSION")as the single
source of version truth. All commands useenv!("CARGO_PKG_VERSION")directly.
CI Improvements
-
M-13:
docs-buildjob in CI runsmdbook buildandmdbook teston every push. -
U-01/D-02:
docs-lintjob in CI builds the release binary and verifies that
every subcommand responds to--help, and that the binary--versionmatches
Cargo.toml. -
New
docs-clirecipe injustfilegenerates a Markdown CLI reference from
--helpoutput.
Security
- SEC-07: New
docs/roles.sqlcontains SQL grant templates for the four aqueduct
roles:aqueduct_planner,aqueduct_applier,aqueduct_preview,aqueduct_destroy.