• v0.0.14
    Gates / frontend (push) Successful in 1m47s
    Gates / test (push) Successful in 2m32s
    Gates / test-aarch64 (push) Successful in 8m30s
    Gates / package (push) Successful in 4m37s
    Gates / container (push) Successful in 10s
    CI / gates (push) Successful in 29m58s
    Release / guard (push) Successful in 34s
    Gates / frontend (push) Successful in 1m43s
    Gates / test (push) Successful in 2m26s
    Gates / test-aarch64 (push) Successful in 7m42s
    Gates / package (push) Successful in 59s
    Gates / container (push) Successful in 14s
    Release / gates (push) Successful in 11m28s
    Release / publish (push) Successful in 7m4s
    Stable

    mokhtar released this 2026-08-28 16:48:03 +00:00 | 0 commits to master since this release

    Schema changes stop costing you your query history. querylog.db is now version-stamped and migrated in place; the server refuses to start rather than ever reset a healthy file, and the release tooling refuses to ship a schema change that is neither migratable nor explicitly disclosed with recovery steps. Three releases (0.0.6, 0.0.9, 0.0.12) each discarded the log on upgrade; this ends that.

    Changed

    • querylog.db is migrated in place. The file now carries a schema version, and a release that changes the schema ships a migration that runs at startup: one consistent backup (querylog.db.pre-migrate-<timestamp>, mode 0600, only the most recent kept), then every step and the version stamp in a single transaction. A failure before the commit rolls back and leaves your file exactly as it was.
    • The server refuses instead of resetting. A querylog.db it cannot use — newer than the binary, older than 0.0.12, or mid-migration failure — is left untouched and the server exits with a clear message instead of setting the file aside and starting an empty log. The exit code (2) tells systemd not to restart-loop a deliberate refusal. Corruption is the only case that still sets a file aside automatically.
    • The release gate now enforces the contract. A schema change cannot be tagged unless it either ships a working migration (proven in CI against a frozen fixture of the previous schema, with shipped migration files locked byte-for-byte once released) or explicitly declares a break — which requires a version bump the server refuses on, a reset disclosure, and step-by-step restore instructions in this file.

    One hazard to know when downgrading. The first start under this release restamps querylog.db from the old fingerprint to version 1 (contents untouched). If you later downgrade to 0.0.13 or older, that binary treats the new stamp as a schema mismatch, moves your file aside as querylog.db.schema-changed-<timestamp>, and starts an empty log. To recover: return to 0.0.14 or newer, stop the server, move the empty querylog.db away and delete its querylog.db-wal and querylog.db-shm files (leaving them would corrupt the restored file), rename the .schema-changed-<timestamp> file back to querylog.db, and start.

    Artifacts

    c57d4c625a0f902e781c380cd08f13a2b1a4c64c5e8011d066708edfd46a3c65  nxdns-0.0.14-x86_64-linux-musl.tar.gz
    5b62a76fa85881ea48735ad2e6820f6759d6b9a10ad3913a07875dd0c44aa95d  nxdns-0.0.14-aarch64-linux-musl.tar.gz
    4df7ddbba563c8a89cecd61d73641522abed6f4fd4e14917dfe62a60a1c145a7  IMAGE-DIGEST.txt
    
    git.mial.net/mokhtar/nxdns:0.0.14@sha256:200f2a37d001a95d28850972911e8c3e31d7f8772ef41bcfaf6997e3532fb221
    

    Compare v0.0.13...v0.0.14

    Commits since v0.0.13
    8cc85b4 build: bump version to 0.0.14
    0f01c2f storage: version querylog.db and migrate it in place, never reset a healthy file
    
    Downloads