1.0.0 - 2026-08-25
Changed
-
Upgrade
moby/go-archiveandgolang.org/x/cryptoto their current
security-fixed releases and reconcile the resulting indirect dependency
graph. -
Exclude intentional nested modules from root local-proxy archives so local,
bootstrap, CI, and public module checksums describe the same source
boundary. -
Track the pinned documentation-tool lockfile so clean CI checkouts install
the exact validated cspell dependency. -
Reconcile standalone dependency checksums against deterministic current
module archives so CI, local verification, and release consumers resolve
identical content. -
Harden standalone documentation validation with deterministic spelling and
link checks, package-specific documentation gates, and repository-local
contributor guidance.
Documentation
- Correct stale package, standalone, and authoritative-source links in public
documentation.
Documentation
- Link the package README to the repository-wide Golib documentation portal.
Changed
-
Publish the module from its standalone
github.com/faustbrian/go-migrationsidentity while preserving its documented API and behavior. -
Replace obsolete owned-module pseudo-version pins with the monorepo's local
v0.0.0source-proxy coordinates; release tooling continues to emit exact
v1.0.0dependency versions. -
Remove unused CLI-related indirect dependencies from canonical module
metadata. -
Pin owned sibling modules to exact resolvable main pseudo-versions so
standalone and clean external consumers use immutable dependency content. -
OpenTelemetry API dependencies now use 1.44.x consistently after adding the
service command adapter.
Added
- A
migrationsserviceadapter for the standard one-shotmigratecommand,
caller-owned runner construction and operation selection, and explicit
migration-only resource cleanup. - Engine-neutral immutable migration, plan, status, baseline, recovery, event,
backend, session, and runner contracts. - Canonical embedded SQL format with SHA-256 identities and strict parsing.
- PostgreSQL advisory locking, owned ledger, transactional and explicit
no-transaction execution, timeouts, and schema fingerprint baselines. - Explicit dirty-state recovery and deterministic rollback planning.
- PostgreSQL 14 through 18 integration coverage, concurrency tests, fuzzing,
and persistence-boundary fault injection. - Reusable engine conformance tests, public API snapshots, embedded/Kubernetes
examples, operational runbooks, and release automation. - MIT open-source license.
- Immutable v1 migration and ledger compatibility corpus with cross-version
PostgreSQL upgrade tests. - Production-shaped Laravel baseline fixtures for empty, exact, drifted,
partial, and unexpectedly advanced schemas. - Process-death coverage for lock waiters, transactional SQL, dirty execution,
clean-ledger writes, and connection loss. - Native parser, source, planner, status, and fingerprint benchmark baselines.
- Goose 3.26 and 3.27 adapter upgrade matrix against persisted v1 history.
Security
- Fail-closed validation for modified, renamed, deleted, reordered, malformed,
partial, dirty, or baseline-conflicting history. - Upgrade
golang.org/x/textto the latest fixed release to remove
GO-2026-5970from reachable pgx-backed inspection paths.
Fixed
- Run the engine-neutral boundary check from the release API gate and restrict
its scan to public Go documentation snapshots so the binary API compatibility
baseline cannot produce a false Goose leak. - Bind owned-ledger preparation to the advisory-lock session so first-run
migration works with a database pool limited to one connection. - Length-prefix canonical up and down SQL before hashing so distinct section
boundaries cannot produce the same migration checksum. - Enforce UTF-8, NUL-byte, and size limits in the public migration constructor,
preventing callers from bypassing canonical file validation. - Reject an explicit whitespace-only down section instead of representing an
irreversible migration as a runnable rollback. - Reject sub-millisecond PostgreSQL statement timeouts instead of truncating
them to PostgreSQL's timeout-disabled0msvalue. - Reject the all-zero checksum sentinel during parsing so every successfully
parsed checksum is valid for records and baselines. - Limit migration versions to positive signed 64-bit values so plans cannot
contain identities that the owned PostgreSQL ledger cannot persist. - Qualify every ledger operation with the
publicschema so a hostile
search_pathcannot create a separate migration history. - Reject ledger rows whose dirty flag disagrees with completion state, even if
a pre-existing table is missing the package-owned constraint. - Persist the owned PostgreSQL contract instead of Goose identity in migration
rows so adapter upgrades cannot leak into ledger semantics. - Keep replaceable adapter identity out of errors returned through the public
backend contract.
Release integrity
- Source commit:
ffa4a2848318d745a86e72c053efdae415cc09ee - Exact-head CI: https://github.com/faustbrian/go-migrations/actions/runs/32907481126
- Release dry-run: urn:sha256:d5eaa40fe2491279c7cb4dad7914e56eb8ee69d2096a33cb81e9197b3d4de0d0
- Assets include a CycloneDX SBOM, SLSA v1 in-toto provenance, and SSH-signed checksums.
Verify the checksum attestation with:
ssh-keygen -Y verify -f ALLOWED_SIGNERS -I brian@cline.sh -n golib-release -s SHA256SUMS.sig < SHA256SUMS