Skip to content

Bolt12 Pay v 0.3.0:2 Restore NWC initialization after admin page startup refactor - #27

Merged
MattDHill merged 1 commit into
Start9-Community:mainfrom
Alex71btc:feat/transaction-history
Jul 13, 2026
Merged

Bolt12 Pay v 0.3.0:2 Restore NWC initialization after admin page startup refactor#27
MattDHill merged 1 commit into
Start9-Community:mainfrom
Alex71btc:feat/transaction-history

Conversation

@Alex71btc

@Alex71btc Alex71btc commented Jul 12, 2026

Copy link
Copy Markdown

Summary

This follow-up release fixes another regression discovered during final end-to-end testing after the Transaction History release.

Fix

  • Restore Nostr Wallet Connect (NWC) initialization after the admin page startup refactor.

Testing

Re-tested successfully on StartOS with:

  • Incoming and outgoing BOLT12 Offers
  • LNURL
  • Lightning Address
  • BOLT11
  • Nostr Wallet Connect (NWC)
  • Keysend (including incoming message support)
  • Transaction History synchronization
  • External payments (Zeus)

Tested on both LND v0.20.x and LND v0.21.x.

@Alex71btc Alex71btc changed the title Restore NWC initialization after admin page startup refactor Bolt12 Pay v 0.3.0:2 Restore NWC initialization after admin page startup refactor Jul 12, 2026
@Alex71btc

Copy link
Copy Markdown
Author

This issue was discovered during the final verification after the Transaction History release had already shipped.

It prevented NWC initialization after the admin page startup refactor, log in button was dead.

Now fixed and re-tested successfully on LND v0.20.x and v0.21.x.

@MattDHill
MattDHill merged commit ee9d406 into Start9-Community:main Jul 13, 2026
3 checks passed
helix-nine added a commit that referenced this pull request Jul 13, 2026
Rebases `next` onto `main` after PR #27 merged, and drops the work that became
redundant.

PR #27 independently did the same upstream submodule bump this branch was carrying
(both landed on 54a4b5f, "Restore NWC initialization after admin page startup
refactor") and released it as 0.3.0:2. So that commit is now a no-op here, and its
release notes would have re-announced, under 0.3.0:3, the NWC fix that 0.3.0:2
already shipped. Dropped it; the submodule is unchanged relative to main.

The release notes now describe what this version actually adds over 0.3.0:2:

- LND 0.20 support alongside 0.21, with a version-aware Auto-Configure task. Onion
  messages are configured differently on the two — 0.21 advertises them natively
  and crash-loops if the pre-0.21 protocol.custom-* overrides are set, while 0.20
  requires them — so the task is posted only to pre-0.21 nodes and clears itself
  when LND is upgraded, rather than stranding the user with a critical task a 0.21
  node can no longer satisfy.
- Reactive dependency address resolution, so main no longer restarts on every
  dependency update and heals with one restart when a dependency is installed
  later, removed, or changes port.
- Internal start-sdk 2.0.x updates.

Also keeps this branch's CI fix rather than letting the rebase regress it: main's
workflows point at `start9labs/shared-workflows`, which is retired — the callers
here reference `Start9Labs/start-technologies`.

Verified: lockfile resolves start-sdk 2.0.5 with no nested stale copy and is at a
fixed point; `npm run check` (tsc --noEmit) green.
helix-nine added a commit that referenced this pull request Jul 13, 2026
Rebases `next` onto `main` after PR #27 merged, and drops the work that became
redundant.

PR #27 independently did the same upstream submodule bump this branch was carrying
(both landed on 54a4b5f, "Restore NWC initialization after admin page startup
refactor") and released it as 0.3.0:2. So that commit is now a no-op here, and its
release notes would have re-announced, under 0.3.0:3, the NWC fix that 0.3.0:2
already shipped. Dropped it; the submodule is unchanged relative to main.

The release notes now describe what this version actually adds over 0.3.0:2:

- The Auto-Configure task is version-aware. LND's dependency floor is unchanged
  (>=0.20.1-beta:12 on both branches — 0.20 support was never lost), but master
  posts the task unconditionally, including to 0.21 nodes. That is wrong in two
  ways: 0.21 advertises onion messages natively and its config spec drops the
  toggle entirely, so the task is a *critical* item the user cannot satisfy; and
  setting the pre-0.21 protocol.custom-* overrides on 0.21 aborts server creation
  ("feature bit: 39 already set") and crash-loops LND. The task is now posted only
  to pre-0.21 nodes and cleared when LND is upgraded.
- Reactive dependency address resolution, so main no longer restarts on every
  dependency update and heals with one restart when a dependency is installed
  later, removed, or changes port.
- Internal start-sdk 2.0.x updates.

Also keeps this branch's CI fix rather than letting the rebase regress it: master's
workflows point at `start9labs/shared-workflows`, which is retired — the callers
here reference `Start9Labs/start-technologies`.

Verified: lockfile resolves start-sdk 2.0.5 with no nested stale copy and is at a
fixed point; `npm run check` (tsc --noEmit) green.
helix-nine added a commit that referenced this pull request Jul 23, 2026
* chore: migrate to start-sdk 2.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F5qZh4QiVySBLkV5ya7XSr

* feat: resolve dependencies over the bridge reactively; restart only on real address changes

Doctrine v3 (issue start-technologies#3407): dependency addresses go
through a utils.ts bridgeAddress helper chained .const() — the mapped
value is the minimal bridge address, so main never restarts on
dependency updates, and heals with one restart when a dependency is
installed after this service, uninstalled, or changes port. Cross-
package container IPs and .startos dials are gone; static config
defaults become loopback placeholders; tor consumers fold the
allocator-guaranteed 9050 fallback into the map.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PpJxhk25X42WTafMdkUx6t

* fix: apply PR review feedback

- no fabricated dependency addresses: absent dependency => absent
  config/env value (optional fields, omitted keys), never a fake
  127.0.0.1 dial default
- dependency-task accept entries match absent-when-default fields
  (prune: 0 or absent both accepted)
- neutral naming: the Bitcoin dependency is 'Bitcoin', not 'Bitcoin
  Core'/'Bitcoin Knots', across prose, release notes, and i18n
- instructions.md keeps no version/migration notes
- remove orphaned i18n entries added by the migration
- normalize the bridgeAddress helper to an explicit early-return and
  prettier-format wave-touched files

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PpJxhk25X42WTafMdkUx6t

* chore: bump start-sdk to 2.0.3

Bumps @start9labs/start-sdk ^2.0.1 -> 2.0.3 (dependency and lockfile only).

- 2.0.3 fixes a dependency-gated daemon wedging permanently after its
  dependency's readiness flaps: Daemon.term() unconditionally destroyed the
  daemon's SubContainer, so the next start() threw "already destroyed" and the
  daemon never recovered. Adds a non-destroying Daemon.stop() for
  dependency-driven pauses, and serializes pause/resume transitions.
- 2.0.2 runs s9pk.mk's check-deps before packing, not just before install.

No packaging API changed between 2.0.1 and 2.0.3, so no source changes were
needed. Verified with `npm run check` (tsc --noEmit).

Also pins the dependency exactly rather than with a caret range, matching
the convention used by every other package in both registries.

* chore: refresh bitcoin-core-startos, lnd-startos pin to current next head

Re-resolves the git-ref dependencies (bitcoin-core-startos, lnd-startos) to the current head of the
branch each spec points at. These pins predated the start-sdk 2.0.3 bump, so
each dependency dragged a nested @start9labs/start-sdk 2.0.1 into this
package's lockfile. They now resolve to 2.0.3 and dedupe against the
top-level copy, leaving no 2.0.1 anywhere in the tree.

Lockfile only; package.json is unchanged. Verified with `npm run check`.

* feat: support LND 0.20 alongside 0.21 with a version-aware Auto-Configure task

BOLT12 Pay runs fine against LND 0.20 — only the onion-message configuration
step differs — so requiring >=0.21 would lock out operators who upgrade LND
conservatively, for no functional gain.

Restore the dependency floor to >=0.20.1-beta:12 and post LND's hidden
autoconfig task only where it is actually needed: LND advertises onion messages
natively from 0.21 (feature bit 39) and aborts server creation if the pre-0.21
protocol.custom-* overrides are also set, while 0.20 requires them. The installed
version is read with sdk.getServiceManifest(...).const(), so upgrading LND from
0.20 to 0.21 re-runs init and clears the task instead of stranding the user with
a critical task that a 0.21 node can no longer satisfy.

LND 0.21's config spec drops the onion-messages toggle entirely, so the typed
action we import can no longer describe the field; the task is posted through the
raw effects.action.createTask with the same replayId the SDK helper derives.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore: bump start-sdk to 2.0.5; refresh bitcoin-core-startos, lnd-startos pins

Bumps @start9labs/start-sdk 2.0.3 -> 2.0.5 (dependency and lockfile only).

2.0.5 fixes ExVer range operations ignoring the downstream revision:
compareVersionRangePoints and adjacentVersionRangePoints compared the upstream
twice, so two points sharing an upstream but differing downstream (1.0.0:3 vs
1.0.0:15) collapsed into one. normalize() then dropped the lower of the two,
which made packed manifests advertise a canMigrateFrom/canMigrateTo range
narrower than the truth for any package whose `other` versions share current's
upstream. No upgrade path actually broke — StartOS resolves migrations through
the version graph rather than this field — but the manifests were wrong.

Also re-resolves the git-ref dependencies (bitcoin-core-startos, lnd-startos) to the current head of the
branch each spec points at, so they carry start-sdk 2.0.5 too and dedupe
against the top-level copy instead of nesting a stale one.

No packaging API changed, so no source changes were needed. Verified with
`npm run check` (tsc --noEmit).

* chore: rebase onto main; 0.3.0:2 → 0.3.0:3

Rebases `next` onto `main` after PR #27 merged, and drops the work that became
redundant.

PR #27 independently did the same upstream submodule bump this branch was carrying
(both landed on 54a4b5f, "Restore NWC initialization after admin page startup
refactor") and released it as 0.3.0:2. So that commit is now a no-op here, and its
release notes would have re-announced, under 0.3.0:3, the NWC fix that 0.3.0:2
already shipped. Dropped it; the submodule is unchanged relative to main.

The release notes now describe what this version actually adds over 0.3.0:2:

- The Auto-Configure task is version-aware. LND's dependency floor is unchanged
  (>=0.20.1-beta:12 on both branches — 0.20 support was never lost), but master
  posts the task unconditionally, including to 0.21 nodes. That is wrong in two
  ways: 0.21 advertises onion messages natively and its config spec drops the
  toggle entirely, so the task is a *critical* item the user cannot satisfy; and
  setting the pre-0.21 protocol.custom-* overrides on 0.21 aborts server creation
  ("feature bit: 39 already set") and crash-loops LND. The task is now posted only
  to pre-0.21 nodes and cleared when LND is upgraded.
- Reactive dependency address resolution, so main no longer restarts on every
  dependency update and heals with one restart when a dependency is installed
  later, removed, or changes port.
- Internal start-sdk 2.0.x updates.

Also keeps this branch's CI fix rather than letting the rebase regress it: master's
workflows point at `start9labs/shared-workflows`, which is retired — the callers
here reference `Start9Labs/start-technologies`.

Verified: lockfile resolves start-sdk 2.0.5 with no nested stale copy and is at a
fixed point; `npm run check` (tsc --noEmit) green.

* chore: advance upstream submodule to 69d0f9d (i18n Lightning Activity history)

Points ./upstream (Alex71btc/lndk-pay) at latest main, bringing in the
internationalized Lightning Activity history UI (ac72629, d40ad07, merged
in 69d0f9d). Clean fast-forward from 54a4b5f; only the frontend
translations change, which the Dockerfile bakes into the image via
`COPY upstream/app/`. Package version stays 0.3.0:3 (this PR is unreleased).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore: bump start-sdk to 2.0.6; refresh bitcoin-core-startos, lnd-startos pins

Bumps @start9labs/start-sdk 2.0.5 -> 2.0.6 (dependency and lockfile only).

2.0.6 fixes s9pk.mk failing under `make` in a git repo with no index yet: it
listed $(GIT_DIR)/index as an unconditional prerequisite, but `git init` creates
no index until the first `git add`, so a freshly scaffolded package aborted with
"No rule to make target '.git/index'" before packing. GIT_DEPS now filters
through $(wildcard ...), so a missing HEAD or index drops out of the prerequisite
list instead of halting the build (s9pk pack already handles a commit-less repo).
Build plumbing only.

Also re-resolves the git-ref dependencies (bitcoin-core-startos, lnd-startos) to the current head of the
branch each spec points at, so they carry start-sdk 2.0.6 too and dedupe
against the top-level copy instead of nesting a stale one.

No packaging API changed, so no source changes were needed. Verified with
`npm run check` (tsc --noEmit).

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants