diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e4f8c..e68e7e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,25 @@ +## v0.144.0 — R8 measures the real download; an OS pass reports even when its agent was killed; the debug pass runs with the hub away (R-865, R-868, R-866) (2026-10-05) + +Released by `scripts/release-agent.sh`: binary sha256 `f18093c3466749ec4cd47f83f97a401160a24bad1e704f1183051adad14db928`, +config bundle `felhom-config-bundle.json` sha256 `6acf42fe46df5223384d767801cb2bf73238ba4dab82debb7811ca2f790591d8`. +The wrapper `felhom-os-apply` changed, so a box needs BOTH the signed `agent_update` and the signed `agent_config_update`. + +- **R-865.** `download_bytes` runs `apt-get --print-uris` WITHOUT `-s`: with `-s` apt prints the simulation and no URI + list, so R8 summed 0 B and only its 500 MB floor ever applied. `--print-uris` alone downloads nothing (measured on + 9202: the archive cache and the versions unchanged). The test fake now answers like real apt (with `-s`: no URIs), + and `test_R8_counts_the_real_download` / `test_download_bytes_never_simulates` pin it. +- **R-868.** The wrapper writes every apply pass's report to `/report---apply.json` before it + prints it (root writes into the agent's dir: the dir opened O_NOFOLLOW and checked to be the agent's own, the file + created O_EXCL|O_NOFOLLOW, 0600, handed to the agent). The plan now carries `run_id`, `trigger`, `ring`, echoed in + the report. The agent deletes the copy once the hub has the report; a copy left on disk (the agent was killed, or + the hub was away) is sent at the agent's start and before every pass (`Leg.SendUnsent`), then deleted. A pass lock + (flock on `pass.lock`, across the daemon and a selftest) keeps the sender off a pass that is still running. +- **R-866.** The daemon saves the hub's newest os_update block (`os-update-block.json`); `--selftest=os-update` uses it + when the hub cannot be reached and says so in its header (`block=SAVED(