OverviewFilesCommitsIssuesDocsReleasesPeers

P2P-Hiverelay commits / b65f77e

chore(release): prepare v0.25.0-rc.8 repair candidate
b65f77eb29d0ff352e77581579e0f6039bd62a0a
by bigdestiny2 <33146784+bigdestiny2@users.noreply.github.com> · 2026-07-29T20:44:57.000Z

Changed files (12) +67 -29

CHANGELOG.md +3 -3
……@@ -6,10 +6,10 @@ documented here. Dates in YYYY-MM-DD.
66
77The packages are versioned in lockstep.
88
9## [Unreleased] — 2026-07-29
9## [0.25.0-rc.8] — 2026-07-29
1010
11**Post-RC7 release repair. Requires a new prerelease identity before any fleet
12deployment.**
11**Post-RC7 repair prerelease. The signed tag, image evidence, and separate
12canary promotion remain required before deployment.**
1313
1414### Fixed — runtime and persistence
1515
README.md +2 -2
……@@ -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.7**
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.8**
1818
1919The four packages are versioned in lockstep:
2020
……@@ -34,7 +34,7 @@ and StartOS metadata so the published release surfaces agree.
3434
3535| Surface | Current source state | Publication/evidence boundary |
3636|---|---|---|
37| Core3 packages | Monorepo and package manifests are at `v0.25.0-rc.7`; the last release with a captured multi-arch GHCR digest is `v0.20.2` | A tag/release must run `npm run release:prepare` so versions, fleet channels, Umbrel, and StartOS metadata move together |
37| Core3 packages | Monorepo and package manifests are prepared for `v0.25.0-rc.8`; its signed tag, multi-arch image, and release evidence are still pending | The prerelease workflow must build and verify the digest-pinned image before any separate canary promotion |
3838| Blindspark on Umbrel | In-repo package uses app proxy, persistent `/data`, review-mode default, and guarded setup/add-wallet/service-manager smoke paths with visible in-flight state | Official App Store inclusion still needs the upstream `getumbrel/umbrel-apps` PR/review plus real-device `umbrel-runtime-review-evidence.json` |
3939| StartOS | Source can build and verify a digest-pinned `.s9pk` from a published GHCR release image and publish to a configured registry | Current `v0.20.2` package proof is blocked until `ghcr.io/bigdestiny2/p2p-hiverelay:0.20.2` resolves to a multi-arch digest; registry proof requires `startos-registry-evidence.json`; marketplace/community inclusion remains Start9 review-controlled |
4040| Raw fleet | Pull updater, channel metadata, health gate, rollback, and rollout verifier are in-repo | A release is live on the selected fleet only when `fleet-rollout-evidence.json` proves target SHA, package version, `/health.version`, and relay health |
docs/LADDER-SHIP-MAP.md +8 -8
……@@ -1,6 +1,6 @@
11# Ladder ship map (chronological)
22
3**Date:** 2026-07-29 · **Status:** living operator/product plan · **Baseline:** fleet canary `v0.25.0-rc.7` · stable `v0.24.3` · post-RC7 repair candidate in `codex/hiverelay-release-fleet-20260729`
3**Date:** 2026-07-29 · **Status:** living operator/product plan · **Baseline:** fleet canary `v0.25.0-rc.7` · stable `v0.24.3` · `v0.25.0-rc.8` repair candidate prepared in `codex/hiverelay-release-fleet-20260729`
44
55> Two parallel tracks, one honesty ladder. **Version tags and claim badges stay separate until a deliberate merge.** Do not call the blind public-test pilot “fleet v0.25.0,” and do not claim rungs the current ship has not evidenced.
66
……@@ -55,8 +55,8 @@ Marketing one-liner when both are live: **“Fleet v0.25.0 + Blind public-test o
5555| Item | State |
5656|------|--------|
5757| Fleet channel | **canary `v0.25.0-rc.7`** · **stable `v0.24.3`** · held `v0.24.3` |
58| Repair candidate | Post-RC7 tree: full Node unit **3559/3559**, integration **107/107**, lint, workspace audit, public-artifact audit, and npm package dry-runs green; requires a new prerelease identity before deployment |
59| Scoped live health (2026-07-29) | 9/10 permitted relays reachable; eight are healthy at their assigned target; `utah-8gb` is healthy but drifted at RC4 with its stable updater disabled; Bern is unreachable |
58| Repair candidate | `v0.25.0-rc.8` package identity prepared: full Node unit **3561/3561**, integration **107/107**, lint, public-artifact audit, release mailbox benchmark, and npm package dry-runs green; signed tag and CI image evidence remain pending |
59| Scoped live health (2026-07-29) | 9/10 permitted relays reachable; eight are healthy at their assigned target; `utah-8gb` is healthy on its signed RC4 hold with `CHANNEL=stable`, exact `PINNED_TAG=v0.25.0-rc.4`, and updater timer enabled/active; Bern is unreachable |
6060| Wake runtime | `notify` loaded 9/9 reachable, but signed live egress **0/9** and exact-lane wake **0/9**; seven stable relays still carry the old false `notify-v1` feature claim |
6161| Agent mailbox | `outboxlog` loaded and signed-advertised on **7/9** reachable permitted relays; absent on canary Utah and drifted Utah-8GB |
6262| Privacy runtime | two signed Tor endpoints, both restricted without a negative proof on their deployed versions; post-RC7 code suppresses that claim until the anonymous rejection probe succeeds |
……@@ -440,11 +440,11 @@ You can call the **product ladder complete for honest marketing** when:
440440
441441## 9. Immediate next three moves (in order)
442442
4431. **Name and ship the repair candidate:** finish release gates, cut a new signed
444 post-RC7 prerelease, and deploy it to the permitted canary only. Correct
445 Utah-8GB's disabled stable updater separately: install the repaired updater,
446 set `CHANNEL=stable` plus `PINNED_TAG=v0.25.0-rc.4`, prove a no-op dry run,
447 then arm its timer. Do not fold a downgrade into a canary promotion.
4431. **Sign and ship the prepared RC8 candidate:** unlock the existing release
444 signer, cut and push the signed `v0.25.0-rc.8` tag, and let CI build and prove
445 the digest-pinned image. Promote only the permitted canary in a separate
446 health-gated change. Utah-8GB's exact RC4 updater pin and timer repair is
447 complete; do not fold a downgrade into the canary promotion.
4484482. **Prove the claims on live canary:** configure operator-owned push egress if
449449 wake is a release claim; verify exact-lane wake, outboxlog persistence,
450450 restricted-Tor negative probe, and the 100 MB onion transfer. Observe for
package-lock.json +8 -8
……@@ -1,12 +1,12 @@
11{
22 "name": "p2p-hiverelay-monorepo",
3 "version": "0.25.0-rc.7",
3 "version": "0.25.0-rc.8",
44 "lockfileVersion": 3,
55 "requires": true,
66 "packages": {
77 "": {
88 "name": "p2p-hiverelay-monorepo",
9 "version": "0.25.0-rc.7",
9 "version": "0.25.0-rc.8",
1010 "hasInstallScript": true,
1111 "license": "Apache-2.0",
1212 "workspaces": [
……@@ -8152,7 +8152,7 @@
81528152 },
81538153 "packages/client": {
81548154 "name": "p2p-hiverelay-client",
8155 "version": "0.25.0-rc.7",
8155 "version": "0.25.0-rc.8",
81568156 "license": "Apache-2.0",
81578157 "dependencies": {
81588158 "@noble/hashes": "^2.2.0",
……@@ -8166,7 +8166,7 @@
81668166 "corestore": "^7.11.0",
81678167 "hyperdrive": "^13.3.2",
81688168 "hyperswarm": "^4.17.0",
8169 "p2p-hiverelay": "^0.25.0-rc.7",
8169 "p2p-hiverelay": "^0.25.0-rc.8",
81708170 "sodium-universal": "^5.0.1"
81718171 },
81728172 "engines": {
……@@ -8206,7 +8206,7 @@
82068206 },
82078207 "packages/core": {
82088208 "name": "p2p-hiverelay",
8209 "version": "0.25.0-rc.7",
8209 "version": "0.25.0-rc.8",
82108210 "license": "Apache-2.0",
82118211 "dependencies": {
82128212 "@grpc/grpc-js": "^1.14.4",
……@@ -8282,14 +8282,14 @@
82828282 },
82838283 "packages/services": {
82848284 "name": "p2p-hiveservices",
8285 "version": "0.25.0-rc.7",
8285 "version": "0.25.0-rc.8",
82868286 "license": "Apache-2.0",
82878287 "dependencies": {
82888288 "@noble/curves": "^2.2.0",
82898289 "@noble/hashes": "^2.2.0",
82908290 "@noble/secp256k1": "^3.1.0",
82918291 "b4a": "^1.8.1",
8292 "p2p-hiverelay": "^0.25.0-rc.7",
8292 "p2p-hiverelay": "^0.25.0-rc.8",
82938293 "sodium-universal": "^5.0.1"
82948294 },
82958295 "engines": {
……@@ -8329,7 +8329,7 @@
83298329 },
83308330 "packages/verifier": {
83318331 "name": "p2p-hiverelay-verifier",
8332 "version": "0.25.0-rc.7",
8332 "version": "0.25.0-rc.8",
83338333 "license": "Apache-2.0",
83348334 "dependencies": {
83358335 "b4a": "^1.8.1"
package.json +1 -1
……@@ -1,6 +1,6 @@
11{
22 "name": "p2p-hiverelay-monorepo",
3 "version": "0.25.0-rc.7",
3 "version": "0.25.0-rc.8",
44 "description": "Monorepo root for HiveRelay (Core + Services + Client)",
55 "private": true,
66 "type": "module",
packages/client/package.json +2 -2
……@@ -1,6 +1,6 @@
11{
22 "name": "p2p-hiverelay-client",
3 "version": "0.25.0-rc.7",
3 "version": "0.25.0-rc.8",
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.7",
64 "p2p-hiverelay": "^0.25.0-rc.8",
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.7",
3 "version": "0.25.0-rc.8",
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.7",
3 "version": "0.25.0-rc.8",
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.7",
23 "p2p-hiverelay": "^0.25.0-rc.8",
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.7",
3 "version": "0.25.0-rc.8",
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",
scripts/lib/audit-owned-diff.mjs +17 -0
……@@ -82,6 +82,23 @@ export const AUDIT_OWNED_DIFF_SLICES = Object.freeze([
8282 'test/unit/audit-owned-diff.test.js'
8383 ]
8484 },
85 {
86 id: 'prerelease-version-identity',
87 title: 'Lockstep prerelease package version identity',
88 files: [
89 'CHANGELOG.md',
90 'README.md',
91 'package.json',
92 'package-lock.json',
93 'packages/client/package.json',
94 'packages/core/package.json',
95 'packages/services/package.json',
96 'packages/verifier/package.json',
97 'scripts/lib/audit-owned-diff.mjs',
98 'startos/README.md',
99 'test/unit/audit-owned-diff.test.js'
100 ]
101 },
85102 {
86103 id: 'hyperdrive-release-lifecycle',
87104 title: 'Bounded Hyperdrive release rotation and scoped reclamation',
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.7, one-page dashboard via `HIVERELAY_UI_SIMPLE`, review-mode first boot,
170v0.25.0-rc.8, 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
test/unit/audit-owned-diff.test.js +21 -0
……@@ -222,6 +222,27 @@ test('audit-owned diff assigns the Hyperdrive release lifecycle surface', (t) =>
222222 }
223223})
224224
225test('audit-owned diff assigns lockstep prerelease version surfaces', (t) => {
226 const paths = [
227 'CHANGELOG.md',
228 'README.md',
229 'package.json',
230 'package-lock.json',
231 'packages/client/package.json',
232 'packages/core/package.json',
233 'packages/services/package.json',
234 'packages/verifier/package.json',
235 'startos/README.md'
236 ]
237 const report = buildOwnedDiffReport(paths.map(file => ` M ${file}`).join('\n'))
238
239 t.is(report.status, 'pass')
240 t.is(report.totals.unknown, 0)
241 for (const entry of report.entries) {
242 t.ok(entry.owners.some(owner => owner.id === 'prerelease-version-identity'), entry.path)
243 }
244})
245
225246test('audit-owned diff blocks unknown development paths', async (t) => {
226247 const fixture = await tempFile(t, '?? stray-release-note.txt\n')
227248 const res = await runAudit(['--json', '--status-file', fixture])