Skip to content

chore: release v0.0.24 (seed P2P reachability) - #44

Merged
bdchatham merged 1 commit into
mainfrom
chore/release-v0.0.24
Jul 27, 2026
Merged

chore: release v0.0.24 (seed P2P reachability)#44
bdchatham merged 1 commit into
mainfrom
chore/release-v0.0.24

Conversation

@bdchatham

Copy link
Copy Markdown
Collaborator

Cuts v0.0.24, carrying the seed-mode fixes from #43.

  • applySeedOverrides binds P2P to 0.0.0.0:26656. A seed previously inherited the baseDefaults loopback and accepted no external peers — silently, since it boots clean and logs nothing.
  • Bounds the PEX recv path via max_packet_msg_payload_size (102400, down from the 1 MB baseline).
  • Seed config with pex disabled now fails validation rather than hard-erroring in makeSeedNode at boot.
  • NodePortsForMode gains a seed arm; port names exported as constants.

Why this release matters downstream

seictl's sidecar is what calls ResolveIntent at runtime, so a seed created by the controller resolves its config against whatever sei-config version seictl was built with. Until seictl bumps to v0.0.24, a seed still gets the loopback binding. This release unblocks that bump, which is the step that actually makes seed config correct in a running cluster.

🤖 Generated with Claude Code

Carries the seed-mode fixes in #43: applySeedOverrides binds P2P to
0.0.0.0 (a seed previously inherited the baseDefaults loopback and
accepted no external peers, silently), bounds the PEX recv path via
max_packet_msg_payload_size, and rejects a seed config with pex disabled.
Also adds a seed arm to NodePortsForMode and exports the port-name
constants.

Consumed next by seictl, whose sidecar resolves ConfigIntent and is
therefore what makes seed config correct in a running cluster.

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

cursor Bot commented Jul 27, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Single-field version bump with no runtime code changes in the PR diff itself.

Overview
Release tag only: updates version.json to v0.0.24 (from v0.0.23). No application code changes in this diff.

This version is intended to ship seed-mode fixes already merged elsewhere (#43)—notably P2P bind to 0.0.0.0:26656, tighter PEX payload limits, stricter seed validation when PEX is off, and seed support in NodePortsForMode. Downstream tools (e.g. seictl) need this bump to resolve seed config against the fixed behavior at runtime.

Reviewed by Cursor Bugbot for commit 1dc9b0e. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

Copy link
Copy Markdown

Suggested version: v0.0.24

Comparing to: v0.0.23 (diff)

Changes in go.mod file(s):

(empty)

gorelease says:

The following panic happened checking types near:
	/opt/hostedtoolcache/go/1.26.5/x64/src/internal/godebugs/table.go:28:5
panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x60b0b2]

goroutine 32 [running]:
go/types.(*Checker).handleBailout(0x3afdb1cba200, 0x3afdb1dc3c30)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/check.go:473 +0x91
panic({0x6ea840?, 0x98eba0?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/runtime/panic.go:860 +0x13a
go/types.(*Checker).objDecl.func1()
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/decl.go:55 +0x5c
panic({0x6ea840?, 0x98eba0?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/runtime/panic.go:860 +0x13a
go/types.(*StdSizes).Sizeof(0x0, {0x759c68, 0x992360})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/sizes.go:229 +0x312
go/types.(*Config).sizeof(...)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/sizes.go:334
go/types.representableConst.func1(...)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/const.go:77
go/types.representableConst({0x75ba60, 0x7679b8}, 0x3afdb1cba200, 0x992360, 0x3afdb1dc27c8)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/const.go:93 +0x1e9
go/types.(*Checker).representation(0x3afdb1cba200, 0x3afdb1dac580, 0x992360)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/const.go:257 +0x5f
go/types.(*Checker).implicitTypeAndValue(0x3afdb1cba200, 0x3afdb1dac580, {0x759c68?, 0x992360?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/expr.go:404 +0x3ed
go/types.(*Checker).assignment(0x3afdb1cba200, 0x3afdb1dac580, {0x759c68, 0x992360}, {0x73f03b, 0xe})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/assignments.go:70 +0x445
go/types.(*Checker).compositeLit(0x3afdb1cba200, 0x3afdb1dac580, 0x3afdb1d92380, {0x759bf0?, 0x3afdb1d9a000?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/literals.go:189 +0x1325
go/types.(*Checker).exprInternal(0x3afdb1cba200, 0x0, 0x3afdb1dac580, {0x75adf8, 0x3afdb1d92380}, {0x759bf0?, 0x3afdb1d9a000?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/expr.go:1076 +0x20f
go/types.(*Checker).rawExpr(0x3afdb1cba200, 0x0, 0x3afdb1dac580, {0x75adf8?, 0x3afdb1d92380?}, {0x759bf0?, 0x3afdb1d9a000?}, 0x0)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/expr.go:982 +0x18c
go/types.(*Checker).exprWithHint(0x3afdb1cba200, 0x3afdb1dac580, {0x75adf8, 0x3afdb1d92380}, {0x759bf0, 0x3afdb1d9a000})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/expr.go:1326 +0x65
go/types.(*Checker).indexedElts(0x3afdb1cba200, {0x3afdb1d62488, 0x36, 0x3afdb1c731d8?}, {0x759bf0, 0x3afdb1d9a000}, 0xffffffffffffffff)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/literals.go:362 +0x12a
go/types.(*Checker).compositeLit(0x3afdb1cba200, 0x3afdb1dac440, 0x3afdb1d93a00, {0x0?, 0x0?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/literals.go:246 +0x42a
go/types.(*Checker).exprInternal(0x3afdb1cba200, 0x0, 0x3afdb1dac440, {0x75adf8, 0x3afdb1d93a00}, {0x0?, 0x0?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/expr.go:1076 +0x20f
go/types.(*Checker).rawExpr(0x3afdb1cba200, 0x0, 0x3afdb1dac440, {0x75adf8?, 0x3afdb1d93a00?}, {0x0?, 0x0?}, 0x0)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/expr.go:982 +0x18c
go/types.(*Checker).expr(0x3afdb1cba200, 0x0?, 0x3afdb1dac440, {0x75adf8?, 0x3afdb1d93a00?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/expr.go:1276 +0x30
go/types.(*Checker).varDecl(0x3afdb1cba200, 0x3afdb1d1a360, {0x3afdb1e98158, 0x1, 0x1}, {0x0, 0x0}, {0x75adf8, 0x3afdb1d93a00})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/decl.go:482 +0x178
go/types.(*Checker).objDecl(0x3afdb1cba200, {0x761530, 0x3afdb1d1a360})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/decl.go:156 +0xa7d
go/types.(*Checker).packageObjects(0x3afdb1cba200)
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/resolver.go:690 +0x412
go/types.(*Checker).checkFiles(0x3afdb1cba200, {0x3afdb1a94050?, 0x5c4d25?, 0x993280?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/check.go:534 +0x385
go/types.(*Checker).Files(0x3afdb1a3c000?, {0x3afdb1a94050?, 0x3afdb19a80c0?, 0x6?})
	/opt/hostedtoolcache/go/1.26.5/x64/src/go/types/check.go:491 +0x75
golang.org/x/tools/go/packages.(*loader).loadPackage(0x3afdb1a3c000, 0x3afdb1a8e570)
	/home/runner/go/pkg/mod/golang.org/x/tools@v0.2.0/go/packages/packages.go:1037 +0x8f2
golang.org/x/tools/go/packages.(*loader).loadRecursive.func1()
	/home/runner/go/pkg/mod/golang.org/x/tools@v0.2.0/go/packages/packages.go:847 +0x1a7
sync.(*Once).doSlow(0x0?, 0x0?)
	/opt/hostedtoolcache/go/1.26.5/x64/src/sync/once.go:78 +0xac
sync.(*Once).Do(...)
	/opt/hostedtoolcache/go/1.26.5/x64/src/sync/once.go:69
golang.org/x/tools/go/packages.(*loader).loadRecursive(0x0?, 0x0?)
	/home/runner/go/pkg/mod/golang.org/x/tools@v0.2.0/go/packages/packages.go:835 +0x3b
golang.org/x/tools/go/packages.(*loader).loadRecursive.func1.1(0x0?)
	/home/runner/go/pkg/mod/golang.org/x/tools@v0.2.0/go/packages/packages.go:842 +0x26
created by golang.org/x/tools/go/packages.(*loader).loadRecursive.func1 in goroutine 30
	/home/runner/go/pkg/mod/golang.org/x/tools@v0.2.0/go/packages/packages.go:841 +0x8c

gocompat says:

Your branch is up to date with 'origin/main'.

Automatically created GitHub Release

A draft GitHub Release has been created.
It is going to be published when this PR is merged.
You can modify its' body to include any release notes you wish to include with the release.

@bdchatham
bdchatham merged commit 308a3c8 into main Jul 27, 2026
5 checks passed
@bdchatham
bdchatham deleted the chore/release-v0.0.24 branch July 27, 2026 19:16
bdchatham added a commit to sei-protocol/seictl that referenced this pull request Jul 27, 2026
## Why this repo matters here

The sidecar's `ConfigApplier` is what calls `seiconfig.ResolveIntent`,
so **this module's sei-config version is what a seed node actually boots
on** — not the controller's. On v0.0.23 a seed resolved the
`baseDefaults` loopback P2P bind and accepted zero external peers,
silently: it boots clean and logs nothing. This bump is the step that
makes seed config correct in a running cluster.

## What v0.0.24 brings

From sei-config
[#43](sei-protocol/sei-config#43) /
[#44](sei-protocol/sei-config#44):

- seed binds `network.p2p.listen_address` to `0.0.0.0:26656`
- seed caps `max_packet_msg_payload_size` at 102400, bounding PEX
recv-path allocation
- a seed config with pex disabled now fails validation instead of
hard-erroring in `makeSeedNode` at boot
- `NodePortsForMode` gains a seed arm; port names exported as constants

## No sidecar code changes

`config-apply` is mode-agnostic by construction — it deserializes a
`ConfigIntent` and calls `ResolveIntent`, with all per-mode knowledge
living in sei-config. A new node mode therefore costs the sidecar
nothing. The diff is `go.mod`/`go.sum` plus tests.

## Tests

Two added at the boundary this bump exists to fix, rather than
re-testing sei-config's own defaults:

- `TestConfigApplier_SeedIsReachable` — an applied seed config binds
`0.0.0.0:26656` and has pex enabled, asserted after a real write/read
round-trip through the applier
- `TestConfigApplier_SeedWithoutPexRejected` — a seed reaching the
sidecar with `network.p2p.pex=false` fails the task, rather than writing
a config seid rejects at startup. This exercises the new validation rule
through the task handler, which is the last gate before seid boots.

`go build ./...`, `go test ./...`, `go vet ./...`, `gofmt -s -l` all
clean.

## Next in the chain

sei-k8s-controller bumps to v0.0.24 and adds the `seed` SeiNode mode.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 (1M context) <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.

1 participant