OverviewFilesCommitsIssuesDocsReleasesPeers

P2P-Hiverelay commits / 59d2362

chore(release): prepare v0.25.0-rc.5
Canary prerelease superseding rc.4. Version bump + changelog only; the channels.json promotion is deliberately left for the signed tag. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
59d23623ce6a860453482005533511833cd36222
by bigdestiny2 <33146784+bigdestiny2@users.noreply.github.com> · 2026-07-28T00:19:42.000Z

Changed files (9) +95 -15

CHANGELOG.md +77 -0
……@@ -6,6 +6,83 @@ documented here. Dates in YYYY-MM-DD.
66
77The packages are versioned in lockstep.
88
9## [0.25.0-rc.5] — 2026-07-28
10
11**Preferred canary prerelease.** Supersedes rc.4. Restores a set of features that
12convergence refactors had orphaned — the code was gone but the tests, docs, and
13capability claims still described it — and fixes three defects that were live on
14the public read plane.
15
16### Fixed — public read plane
17- **Every non-HEAD file GET returned 502.** `HyperGateway.handle()` dereferenced
18 the optional exact-app `context` without a null guard, and `gateway-server`
19 serves the `/v1/hyper/:key/...` route with no context. Any request for drive
20 content threw before headers were sent.
21- **The per-window egress byte budget was silently unenforced** on exact
22 app-origin responses. The gateway's storage-lease wrapper re-entered
23 `handle(req, res)` without forwarding `context`, dropping
24 `reserveResponseBytes` along with the `X-Hive-App-Key` / `X-Hive-Byte-Mode`
25 headers.
26
27### Fixed — storage durability
28- **A seed reported success when its durable registry write failed.**
29 `AppRegistry.set()` persists fire-and-forget, so the drive served traffic and
30 then was simply absent after restart. The seed path now persists explicitly,
31 awaits it, and restores the pre-seed entry on failure.
32- **Durable retirement could begin while an HTTP response was still streaming**
33 from pinned core sessions. `unseedApp` now takes the same per-drive storage
34 lease HyperGateway holds for reads. It bypasses the lease once the authority
35 stops accepting mutations, because `stop()` retires every drive after that
36 point and must still be able to close its own drives.
37- **A concurrent shutdown and forget retired the same drive twice** — closing the
38 drive, persisting the delete, and releasing the storage commitment two times.
39 Both callers now share one coalesced retirement owner.
40- **Mixed-case app keys bypassed the live-entry check**, seeding a duplicate
41 drive for the same content under a different storage-admission mutation key.
42- **Manifest indexing read from the live drive**, so indexed metadata did not
43 have to match the proven version. It now reads `{ wait: false }` from a
44 checkout pinned to the storage proof, with fork/length stability checks, and
45 always closes the checkout. This also removes a timed-out manifest read that
46 left an in-flight network request alive after its caller had given up.
47
48### Restored (orphaned by convergence refactors)
49- **Seed-admission queue.** The old spin-wait mutex could not cancel: a caller
50 that timed out, or a node shutting down, still had its queued closure run
51 later against the registry and storage ledger. Queued work is now cancellable;
52 work that has already started runs to completion.
53- **`getDriveSize` authoritative-proof mode** (`requireAuthoritative`,
54 `pinSnapshots`). `length` and `byteLength` are separate getters, so an append
55 between them produced a tuple that never existed and under-counted the drive.
56 They are now read as one bracketed tuple, and pinned snapshots reject
57 `DRIVE_VERSION_CHANGED_DURING_PROOF`.
58- **Ordered auxiliary share-bundle teardown**, which had no production caller at
59 all — snapshot sessions and download trackers leaked on every PVSS
60 share-bundle read.
61- **Exact drive-discovery teardown and download-snapshot-core release** during
62 drive retirement, with per-owner retry on failure.
63- **`hiverelay-forward` transport advertisement.** The client path resolver gates
64 on `supported_transports`, which never contained it, so the shipped
65 source-ip-hidden / hidden-1hop privacy tier was unreachable end to end.
66
67### Fail-closed hardening
68- Seed and repair now stop before Corestore session, Hyperdrive adoption, or
69 storage reservation when the physical authority cannot accept durable writes,
70 instead of failing later with a reservation error that masked the cause.
71- Seeding before recovery inventories seal reports
72 `STORAGE_RECOVERY_INVENTORY_PENDING`.
73
74### Tests
75- The unit suite previously aborted at test 727 on a hard `TypeError` in the
76 app-lifecycle teardown path, leaving most of the 327 files unexecuted. It now
77 runs 3510 tests with 3 known failures (serve-only recovery mode, and two
78 startup-rollback cases blocked on the Corestore-7 storage-sweep question).
79
80### Fleet
81- Canary target: `v0.25.0-rc.5`. Stable remains `v0.24.3`.
82- `sydney` and `dallas` are held off this rollout (Track B blind public-test
83 hosts). `dallas` has no updater installed and is excluded by construction;
84 `sydney` must be pinned explicitly before any `stable` bump.
85
986## [0.25.0-rc.4] — 2026-07-26
1087
1188**Preferred canary prerelease.** Do not deploy rc.1–rc.3.
README.md +1 -1
……@@ -14,7 +14,7 @@ and key-material fields at the schema boundary.
1414a one-page dashboard, first-run setup, wallet destination, service selection,
1515and persistent identity behind each platform's authenticated app proxy.
1616
17**Open source (Apache 2.0)** | **[GitHub](https://github.com/bigdestiny2/P2P-Hiverelay)** | **[npm](https://www.npmjs.com/package/p2p-hiverelay)** | **Status: v0.25.0-rc.4**
17**Open source (Apache 2.0)** | **[GitHub](https://github.com/bigdestiny2/P2P-Hiverelay)** | **[npm](https://www.npmjs.com/package/p2p-hiverelay)** | **Status: v0.25.0-rc.5**
1818
1919The four packages are versioned in lockstep:
2020
package-lock.json +6 -6
……@@ -1,12 +1,12 @@
11{
22 "name": "p2p-hiverelay-monorepo",
3 "version": "0.25.0-rc.4",
3 "version": "0.25.0-rc.5",
44 "lockfileVersion": 3,
55 "requires": true,
66 "packages": {
77 "": {
88 "name": "p2p-hiverelay-monorepo",
9 "version": "0.25.0-rc.4",
9 "version": "0.25.0-rc.5",
1010 "hasInstallScript": true,
1111 "license": "Apache-2.0",
1212 "workspaces": [
……@@ -8204,7 +8204,7 @@
82048204 },
82058205 "packages/client": {
82068206 "name": "p2p-hiverelay-client",
8207 "version": "0.25.0-rc.4",
8207 "version": "0.25.0-rc.5",
82088208 "license": "Apache-2.0",
82098209 "dependencies": {
82108210 "@noble/hashes": "^2.2.0",
……@@ -8257,7 +8257,7 @@
82578257 },
82588258 "packages/core": {
82598259 "name": "p2p-hiverelay",
8260 "version": "0.25.0-rc.4",
8260 "version": "0.25.0-rc.5",
82618261 "license": "Apache-2.0",
82628262 "dependencies": {
82638263 "@grpc/grpc-js": "^1.14.4",
……@@ -8333,7 +8333,7 @@
83338333 },
83348334 "packages/services": {
83358335 "name": "p2p-hiveservices",
8336 "version": "0.25.0-rc.4",
8336 "version": "0.25.0-rc.5",
83378337 "license": "Apache-2.0",
83388338 "dependencies": {
83398339 "@noble/curves": "^2.2.0",
……@@ -8380,7 +8380,7 @@
83808380 },
83818381 "packages/verifier": {
83828382 "name": "p2p-hiverelay-verifier",
8383 "version": "0.25.0-rc.4",
8383 "version": "0.25.0-rc.5",
83848384 "license": "Apache-2.0",
83858385 "dependencies": {
83868386 "b4a": "^1.8.1"
package.json +4 -1
……@@ -1,6 +1,6 @@
11{
22 "name": "p2p-hiverelay-monorepo",
3 "version": "0.25.0-rc.4",
3 "version": "0.25.0-rc.5",
44 "description": "Monorepo root for HiveRelay (Core + Services + Client)",
55 "private": true,
66 "type": "module",
……@@ -51,6 +51,9 @@
5151 "release:check-image-manifest": "node scripts/check-release-image-manifest.mjs",
5252 "release:smoke-image": "node scripts/smoke-release-image.mjs",
5353 "fleet:check-rollout": "node scripts/check-fleet-rollout.mjs",
54 "dashboard:admin-operator": "node dashboard-admin-operator/server.cjs",
55 "dashboard:admin-operator:dev": "PORT=3458 FLEET_INTERVAL=30 node dashboard-admin-operator/server.cjs",
56 "fleet:control": "node dashboard-admin-operator/server.cjs",
5457 "umbrel:check-gallery": "node scripts/check-umbrel-gallery.mjs",
5558 "umbrel:export-official": "node scripts/export-official-umbrel-app.mjs",
5659 "umbrel:write-runtime-review": "node scripts/write-umbrel-runtime-review-evidence.mjs",
packages/client/package.json +2 -2
……@@ -1,6 +1,6 @@
11{
22 "name": "p2p-hiverelay-client",
3 "version": "0.25.0-rc.4",
3 "version": "0.25.0-rc.5",
44 "description": "Unified client SDK for HiveRelay (Core + Services). Talks to either via capability flags advertised by relay nodes.",
55 "type": "module",
66 "main": "index.js",
……@@ -61,7 +61,7 @@
6161 "corestore": "^7.11.0",
6262 "hyperdrive": "^13.3.2",
6363 "hyperswarm": "^4.17.0",
64 "p2p-hiverelay": "^0.25.0-rc.4",
64 "p2p-hiverelay": "^0.25.0-rc.5",
6565 "sodium-universal": "^5.0.1"
6666 },
6767 "engines": {
packages/core/package.json +1 -1
……@@ -1,6 +1,6 @@
11{
22 "name": "p2p-hiverelay",
3 "version": "0.25.0-rc.4",
3 "version": "0.25.0-rc.5",
44 "description": "HiveRelay Core — minimal always-on P2P availability infrastructure (seeding, circuit relay, proof-of-relay, gateway)",
55 "type": "module",
66 "main": "core/index.js",
packages/services/package.json +2 -2
……@@ -1,6 +1,6 @@
11{
22 "name": "p2p-hiveservices",
3 "version": "0.25.0-rc.4",
3 "version": "0.25.0-rc.5",
44 "description": "HiveRelay Services — application-layer services (AI inference, identity, schemas, SLAs, storage CRUD) that ride on top of HiveRelay Core",
55 "type": "module",
66 "exports": {
……@@ -20,7 +20,7 @@
2020 "@noble/hashes": "^2.2.0",
2121 "@noble/secp256k1": "^3.1.0",
2222 "b4a": "^1.8.1",
23 "p2p-hiverelay": "^0.25.0-rc.4",
23 "p2p-hiverelay": "^0.25.0-rc.5",
2424 "sodium-universal": "^5.0.1"
2525 },
2626 "engines": {
packages/verifier/package.json +1 -1
……@@ -1,6 +1,6 @@
11{
22 "name": "p2p-hiverelay-verifier",
3 "version": "0.25.0-rc.4",
3 "version": "0.25.0-rc.5",
44 "description": "Independent reference verifier for HiveRelay — reads raw hypercores from multiple relays and reports divergence. Ships separately from the main client SDK so cross-client verification is meaningful (see docs/THREAT-MODEL.md action item #3).",
55 "type": "module",
66 "main": "index.js",
startos/README.md +1 -1
……@@ -167,7 +167,7 @@ Three paths, smallest to widest reach:
167167## Status
168168
169169Package source targets multi-arch image tarballs (x86_64 + aarch64),
170v0.25.0-rc.4, one-page dashboard via `HIVERELAY_UI_SIMPLE`, review-mode first boot,
170v0.25.0-rc.5, one-page dashboard via `HIVERELAY_UI_SIMPLE`, review-mode first boot,
171171and a first-boot-only 10 GB storage cap. Current `v0.20.2` package verification
172172is externally gated on the published GHCR image/tag and digest; once that image
173173exists, `make verify IMAGE_DIGEST=sha256:<multi-arch-digest>` is the release