Novij Storage
Stable readiness and current Relay bootstrap
- Package-managed Nginx and Traefik edges now route the exact public node
challenge endpoint to the status sidecar instead of the PHP login page.
- Canonical inventory refresh now starts before the strict TTL expires, so an
unchanged node no longer enters a periodic `syncing` window during scheduled
refresh.
- The full canonical cache now warms at startup and refreshes halfway through its
TTL, leaving enough headroom when background sync is also using the disk.
- Bounded `sync repair all` persists the next divergent prefix and resumes from
it in the following systemd cycle instead of starving the end of the range.
- An incomplete prefix comparison with an unavailable peer now remains
`degraded` instead of treating zero partial counters as success.
- Built-in bootstrap moved from the retiring INO node to active SPB/MNS Relays;
authoritative membership still comes from the Network Registry.
P30-P32 package/sync foundation
- Added read-only sync/status foundation: `/sync/status`, `/sync/peers`,
`/sync/inventory`, `/sync/block/{block_id}/chunks`, `/sync/conflicts`, `/sync/lag`.
- Added `novij-storagectl` for audit dry-run, safe pull-missing, peer visibility,
install auth, and first-run setup.
- Added Debian packaging configuration for `novij-storage`.
- Added package smoke and package-site publish flow for `packages.novij.tech/storage`.
- Package services require owner-signed install authorization before startup.
- `novij-storage-sync.timer` runs missing-only sync with caps and no overwrite/delete.
Live write/append, fake billing source, and payout settlement were not added.