changelog: 0.0.3 releases today
Gates / frontend (push) Successful in 1m3s
Gates / test (push) Successful in 1m39s
Gates / test-aarch64 (push) Successful in 6m28s
Gates / container (push) Successful in 18s
Release / guard (push) Successful in 1m30s
Gates / test-aarch64 (push) Successful in 5m45s
Gates / package (push) Successful in 24s
Release / gates (push) Successful in 7m54s
Gates / package (push) Successful in 5m34s
CI / gates (push) Successful in 14m5s
Gates / frontend (push) Successful in 58s
Gates / test (push) Successful in 1m29s
Gates / container (push) Successful in 10s
Release / publish (push) Successful in 9m12s

This commit is contained in:
2026-08-15 12:24:05 +02:00
parent fc60214b3e
commit efbe355070
2 changed files with 43 additions and 1 deletions
+42
View File
@@ -10,6 +10,48 @@ subject rarely does.
## [Unreleased] ## [Unreleased]
## [0.0.3] - 2026-08-15
Devices name themselves: the clients table asks the router over reverse DNS
instead of waiting for the operator to type every name. The CI container gate
also moved from workflow shell into a compiled, tested tool, which fixed a
latent temp-directory bug shared with the release tool.
### Added
- **Client names learned over reverse DNS.** A client row that carries no
hand-typed name gets one from the network: each tracker flush pass takes up
to 16 unnamed rows, builds each address's reverse name, matches it against
the declared `forward_zones`, and on a match sends one PTR query to that
zone's resolver, storing the answer as a *learned* name. This requires a
conditional forward zone covering the LAN's reverse space — for example
`168.192.in-addr.arpa` pointed at the router; without one, nothing is sent
anywhere. A hand-typed name always wins, learned names never appear in
`nxdns export` and are never set by `nxdns import`, and each row refreshes
once a day (an hour after a failure), so a rename can show stale for up to
24 hours. The API's `Client` object gains a `learned_name` field and the
clients page shows it.
### Changed
- The container CI gate — image build, image-contents assertion against the
packaged artifacts, and the startup/shutdown smoke test — moved from
workflow shell into `tools/container_check.zig`, compiled and unit-tested by
`zig build test` and runnable on a laptop against a local docker daemon.
The health probe now runs under a real 60-second deadline (the shell loop's
"30 seconds" could stretch past three minutes), and the gate's docker
objects carry an ownership label so anything a dead runner leaks is
discoverable. The version in CI is parsed from `build.zig.zon` through the
zon grammar, once, instead of by two copies of a `sed` regex.
### Fixed
- The release tool's temporary-directory claim was not exclusive: the
"create" it relied on succeeds on a directory that already exists, so a
stale or concurrent directory could be silently adopted, written into, and
deleted on exit. Both the release tool and the new container gate now claim
their directories exclusively and retry on collision.
## [0.0.2] - 2026-08-14 ## [0.0.2] - 2026-08-14
Configuration can now be a file that every boot converges to, filtering gains Configuration can now be a file that every boot converges to, filtering gains
+1 -1
View File
@@ -1,6 +1,6 @@
.{ .{
.name = .nxdns, .name = .nxdns,
.version = "0.0.2", .version = "0.0.3",
.minimum_zig_version = "0.16.0", .minimum_zig_version = "0.16.0",
.paths = .{""}, .paths = .{""},
.fingerprint = 0x3307b311dded1d91, .fingerprint = 0x3307b311dded1d91,