Skip to content

Release the first onchain version as 0.1.0, renamed to nexus-proxy - #16

Merged
Marketen merged 2 commits into
mainfrom
release/first-onchain-0.1.0
Sep 9, 2026
Merged

Release the first onchain version as 0.1.0, renamed to nexus-proxy#16
Marketen merged 2 commits into
mainfrom
release/first-onchain-0.1.0

Conversation

@Marketen

@Marketen Marketen commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Why

Two things that are only free before the first onchain publish, so they ride together.

1. First onchain version must be 0.1.0. This package has never been published to the APM registry. The registry expects a first version of 0.1.0, but the manifest claimed 0.2.0 — the 0.1.x/0.2.0 tags here were GitHub releases only, and have been deleted.

2. The package name now follows core convention. The repository is dappnode/DNP_NEXUS_PROXY, matching the DNP_<NAME> convention every core package uses, so the package identity follows:

nexus-local-proxy.dnp.dappnode.eth  ->  nexus-proxy.dnp.dappnode.eth

exactly as DNP_BIND -> bind.dnp.dappnode.eth and DNP_DAPPMANAGER -> dappmanager.dnp.dappnode.eth. A dnpName is the package's identity on the registry: renaming after publication means a new package plus a migration for everyone who installed the old one. Now it costs nothing.

Changes

before after
version 0.2.0 0.1.0
dnpName nexus-local-proxy.dnp.dappnode.eth nexus-proxy.dnp.dappnode.eth
compose service / mainService nexus-local-proxy nexus-proxy
container_name DAppNodePackage-… DAppNodeCore-…
internal DNS nexus-local-proxy.dappnode.private:3301 nexus-proxy.dappnode.private:3301
SDK pin d226fca 2199773

The container prefix moves to DAppNodeCore- because the manifest has declared type: dncore since 0.2.0, so DAppNodePackage- was already contradicting it.

Why the SDK pin moved

d226fca only ever existed on the feat/dynamic-trust-policy branch; main squash-merged that work as 2199773 (#8). The Dockerfile fetches the pinned SHA exactly:

git fetch --depth=1 origin "${UPSTREAM_VERSION}"

so pinning a PR-branch commit breaks every build the moment that branch is deleted.

Verification

Built from this branch and run against the live TEE Gateway:

nexus-proxy: verified Gateway and listening on http://[::]:3301
nexus-proxy: trust policy follows signed Gateway releases; refreshed on first
             contact with an unknown release, and every 1h0m0s as a backstop

Manifest + compose pass the dappmanager schema validation after the rename.

This is the fix for a live failure: the proxy deployed on a DAppNode right now is package 0.1.2, pinned by static policy to Gateway v0.1.58. The Gateway moved to v0.1.61 on 2026-09-03, so it has been failing closed ever since — 6971 restarts — with attested source_revision is not a pinned Gateway release. Correct fail-closed behaviour, and exactly what --trust-policy-updates exists to prevent.

The image also now builds with no GitHub token, since dappnode-nexus-sdk is public.

Follow-up

The Hermes package hardcodes the old hostname; dappnode/DAppNodePackage-Hermes-agent#48 needs the matching nexus-proxy.dappnode.private update before either lands in front of users.

🤖 Generated with Claude Code

This package has never been published to the APM registry, so the registry
expects its first onchain version to be 0.1.0. The 0.1.x and 0.2.0 tags in this
repository were GitHub releases only; renumbering here lines the manifest up
with what the first real publish will claim.

Also moves the SDK pin from d226fca to 2199773. d226fca only ever existed on
the feat/dynamic-trust-policy branch; main squash-merged that work as 2199773
(PR #8). The Dockerfile fetches the pinned SHA exactly, so a pin to a PR branch
breaks every build the moment that branch is deleted. 2199773 is current SDK
main and contains the same dynamic trust policy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The repository is now dappnode/DNP_NEXUS_PROXY, following the DNP_<NAME>
convention every core package uses. This brings the package identity in line
with it:

  nexus-local-proxy.dnp.dappnode.eth -> nexus-proxy.dnp.dappnode.eth

which is what DNP_BIND -> bind.dnp.dappnode.eth and DNP_DAPPMANAGER ->
dappmanager.dnp.dappnode.eth already do. The compose service and mainService
follow, so the internal DNS name becomes nexus-proxy.dappnode.private:3301.

The container prefix moves to DAppNodeCore- as well. The manifest has declared
type: dncore since 0.2.0, so DAppNodePackage- was already contradicting it.

This rides on the 0.1.0 renumbering rather than landing separately because
both are only free before the first onchain publish. A dnpName is the package's
identity on the registry: changing it after publication means a new package and
a migration for anyone who installed the old one. Doing it now costs nothing.

Repository and issue URLs follow the rename, and the docs use the new hostname.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Marketen Marketen changed the title Release the first onchain version as 0.1.0 Release the first onchain version as 0.1.0, renamed to nexus-proxy Sep 9, 2026
@Marketen
Marketen merged commit 1e2938e into main Sep 9, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant