Novij Backup Agent
Changes
- Storage without a billing wallet registered on the selected Relay is no longer
eligible for writes: the probe verifies the actual `wallet_id` instead of
treating a WebSocket `pong` as full node readiness. Automatic failover is also
limited to Storage nodes validated during the current discovery.
- Built-in bootstrap Relay addresses now use the original Ino and Saint
Petersburg Relay domains instead of temporary seed aliases.
- Network Registry is now used as the authoritative active-membership source,
while the agent confirms Storage availability with its own probe. A delayed
heartbeat can no longer produce a false no-Storage failure in `verify`,
`doctor`, or `restore`.
- Updated the vendored C++ SDK to keep a validated Network Registry checkpoint
and scheduled node selection for 48 hours. A temporary seed failure still
triggers safe failover without unnecessary network probes.
- Fixed fragmented Storage WebSocket text responses: the C++ SDK now waits for
the final continuation frame, preserves fragment order, and builds without
the false GCC uninitialized-opcode warning.
- Removed the modern CMake warning from vendored `yaml-cpp 0.8.0`: a
reproducible patch step raises the dependency policy minimum to 3.5 without
disabling diagnostics.
- `novij-backup blocks` now prints only chunks and manifest blocks required by active retained backups; expired history and stale coverage-only links are excluded.
- Dedicated ZK funding safely retries explicit `LEDGER_BACKEND_UNAVAILABLE` responses without retrying ambiguous transfer outcomes.
- ZK sync now returns and immediately reuses the actual active coupon ID, so a coupon rotation cannot make doctor/verify recheck the expired predecessor.
- `doctor` loads the persisted `zk-coupon.json` before its first audit, making rotated-coupon checks idempotent without rewriting the obsolete bootstrap coupon.
- Added package-site channels for `latest` and `stable`.
- Added HTML release-note pages for the package site.
- Added a bilingual package-site index page.
Update
- Updated auto-update support for `updates.base_url`, `updates.channel`, and `novij-backup update --channel`.
- Updated the installer with `NOVIJ_PACKAGE_CHANNEL=latest|stable` support.
- Updated CI `.deb` version generation to the chronological `0.<Y>.<MM>.<DDHHMM>` format in the `Europe/Moscow` zone.
- Updated package-site deployment to check the whole site tree, fix ownership through `sudo` when possible, and print the server command when permissions are missing.
Compatibility
- Existing configs without `updates.base_url` and `updates.channel` keep using the `latest` channel.