An open index of dependabot pull requests across open source projects.

build(deps): bump github.com/tochemey/goakt/v4 from 4.2.2 to 4.2.4

Open
Number: #706
Type: Pull Request
State: Open
Author: dependabot[bot] dependabot[bot]
Association: Unknown
Comments: 2
Created: May 18, 2026 at 12:29 PM UTC
(21 days ago)
Updated: May 18, 2026 at 08:23 PM UTC
(21 days ago)
Labels:
dependencies go
Description:

Bumps github.com/tochemey/goakt/v4 from 4.2.2 to 4.2.4.

Release notes

Sourced from github.com/tochemey/goakt/v4's releases.

v4.2.4

🔉 Logging changes

Quieter default log stream

The framework's Info level is now reserved for system-wide, low-frequency operator events: actor system start/stop, signal handler, clustering enable/start/stop, remote server start/listen/TLS/shutdown, scheduler start/stop, eviction loop start/stop, cluster node joined/left, rebalance start/complete, and data-center topology changes. Per-actor / per-grain / per-RPC / per-peer / per-rebalance-item lifecycle (init, shutdown, passivation, suspension, reinstate, supervision, grain activate/deactivate, remote spawn, peer replication, dead-actor cleanup, routee restart/resume, NATS peer chatter) was demoted to Debug.

Third-party [INFO] lines emitted by olric and hashicorp/memberlist (routing table updates, gossip events, anti-entropy) are also demoted to Debug. [WARN] and [ERROR]/[ERR] from those libraries are unchanged.

Migration. If you relied on the previous verbosity (per-actor lifecycle traces, olric routing-table chatter visible at Info), set your logger to log.DebugLevel. Errors and warnings are unaffected — a healthy steady-state cluster now produces close to zero Info lines per node per minute.

Memberlist transport now honors TransportConfig.Logger

internal/memberlist.NewTransport previously ignored the Logger field on its config and wrote to stdout at Info. It now routes through the configured logger (or log.DiscardLogger when none is supplied), so transport-level errors and warnings reach the same sink as the rest of the framework. Added recognition of memberlist's short [ERR] prefix in the third-party log adapter — these lines were previously dropped silently.

✨ New Additions

JSON serializer (sonic-backed)

Third built-in serializer alongside ProtoSerializer and CBORSerializer. remote.JSONSerializer encodes arbitrary Go values as JSON via bytedance/sonic using the ConfigFastest preset (no HTML escaping, no JSON-marshaler validation — output is consumed by another goAkt node, not a browser).

  • Same wire shape as the other built-ins. Length-prefixed self-describing frame: totalLen | nameLen | type-name | json-bytes, all big-endian uint32 headers — identical layout to ProtoSerializer and CBORSerializer.
  • Same registration path. WithSerializers(new(MyMessage), remote.NewJSONSerializer()) auto-registers the type in the global types registry; no separate RegisterSerializableTypes-style step. Both sender and receiver must register the same types.
  • Platform support. sonic ships JIT-accelerated fast paths for amd64 and arm64 and falls back to encoding/json on other architectures (386, riscv64, s390x). API surface is identical; only throughput differs.
  • Depth bound. sonic does not expose a per-decode nesting limit, so peer-controlled payloads are bounded by WithMaxFrameSize (default 16MB). Tune downward if accepting frames from untrusted peers.

WithJSONSerializables convenience option

Bulk JSON registration mirroring WithSerializables for CBOR. Shares a lazy DefaultJSONSerializer() singleton across all calls — JSONSerializer is stateless, so reuse is safe and avoids per-option allocation.

remote.NewConfig("0.0.0.0", 9000,
    remote.WithJSONSerializables(new(MyEventA), new(MyEventB), (*MyInterface)(nil)),
)

Typed nil interface pointers bind the serializer at the interface level; concrete types bind per-type.

Full Changelog: https://github.com/Tochemey/goakt/compare/v4.2.3...v4.2.4

v4.2.3

Highlights

Cluster-wide stream topologies. This release rounds out the stream package with cross-node and non-linear primitives — you can now wire pipelines across the cluster the same way you wire them in-process. See changelog

Features

  • Cross-node SourceRef / SinkRef. Wire-portable handles that let any node materialise a remote Source[T] or Sink[T]. Direct host:port resolution (no cluster-registry round-trip), wire-level credit, single-subscription with a 30s grace window, and Watch-based death detection. Requires stream.RemoteOptions() on remote.NewConfig and remote.WithSerializables(...) for element types on every node.
  • Graph junctions. Eight fan-in / fan-out operators: Concat, Zip / ZipWith, MergePreferred, MergePrioritized, MergeLatest, MergeSequence, Partition, Unzip. Graph DSL gains ConcatInto.
  • SubFlow (stream of streams). GroupBy, SplitWhen, SplitAfter produce a SubFlow[K, T]; compose with SubFlowVia and collapse with MergeSubstreams. Per-substream state is genuinely independent.

... (truncated)

Changelog

Sourced from github.com/tochemey/goakt/v4's changelog.

v4.2.4 - 2026-05-15

🔉 Logging changes

Quieter default log stream

The framework's Info level is now reserved for system-wide, low-frequency operator events: actor system start/stop, signal handler, clustering enable/start/stop, remote server start/listen/TLS/shutdown, scheduler start/stop, eviction loop start/stop, cluster node joined/left, rebalance start/complete, and data-center topology changes. Per-actor / per-grain / per-RPC / per-peer / per-rebalance-item lifecycle (init, shutdown, passivation, suspension, reinstate, supervision, grain activate/deactivate, remote spawn, peer replication, dead-actor cleanup, routee restart/resume, NATS peer chatter) was demoted to Debug.

Third-party [INFO] lines emitted by olric and hashicorp/memberlist (routing table updates, gossip events, anti-entropy) are also demoted to Debug. [WARN] and [ERROR]/[ERR] from those libraries are unchanged.

Migration. If you relied on the previous verbosity (per-actor lifecycle traces, olric routing-table chatter visible at Info), set your logger to log.DebugLevel. Errors and warnings are unaffected — a healthy steady-state cluster now produces close to zero Info lines per node per minute.

Memberlist transport now honors TransportConfig.Logger

internal/memberlist.NewTransport previously ignored the Logger field on its config and wrote to stdout at Info. It now routes through the configured logger (or log.DiscardLogger when none is supplied), so transport-level errors and warnings reach the same sink as the rest of the framework. Added recognition of memberlist's short [ERR] prefix in the third-party log adapter — these lines were previously dropped silently.

✨ New Additions

JSON serializer (sonic-backed)

Third built-in serializer alongside ProtoSerializer and CBORSerializer. remote.JSONSerializer encodes arbitrary Go values as JSON via bytedance/sonic using the ConfigFastest preset (no HTML escaping, no JSON-marshaler validation — output is consumed by another goAkt node, not a browser).

  • Same wire shape as the other built-ins. Length-prefixed self-describing frame: totalLen | nameLen | type-name | json-bytes, all big-endian uint32 headers — identical layout to ProtoSerializer and CBORSerializer.
  • Same registration path. WithSerializers(new(MyMessage), remote.NewJSONSerializer()) auto-registers the type in the global types registry; no separate RegisterSerializableTypes-style step. Both sender and receiver must register the same types.
  • Platform support. sonic ships JIT-accelerated fast paths for amd64 and arm64 and falls back to encoding/json on other architectures (386, riscv64, s390x). API surface is identical; only throughput differs.
  • Depth bound. sonic does not expose a per-decode nesting limit, so peer-controlled payloads are bounded by WithMaxFrameSize (default 16MB). Tune downward if accepting frames from untrusted peers.

WithJSONSerializables convenience option

Bulk JSON registration mirroring WithSerializables for CBOR. Shares a lazy DefaultJSONSerializer() singleton across all calls — JSONSerializer is stateless, so reuse is safe and avoids per-option allocation.

remote.NewConfig("0.0.0.0", 9000,
    remote.WithJSONSerializables(new(MyEventA), new(MyEventB), (*MyInterface)(nil)),
)

Typed nil interface pointers bind the serializer at the interface level; concrete types bind per-type.

v4.2.3 - 2026-05-09

✨ New Additions

Cross-node stream refs (SourceRef / SinkRef)

Wire-portable handles that adapt a Source[T] or Sink[T] into a stage usable on any node in the cluster, mirroring Akka StreamRefs.

  • Source.SourceRef(ctx, sys) publishes a producer; receivers reconstruct the source via ref.Source(sys). Sink.SinkRef(ctx, sys) does the symmetric thing for consumers via ref.Sink(sys). Refs themselves are plain serialisable values and can be shipped inside any registered remote message — so a node can hand off "where to send/read from" the same way it would hand off any other piece of data.
  • Setup prerequisite — both registrations are required on every node: append stream.RemoteOptions() to your remote.NewConfig (registers the subscribe / request / complete / error / cancel control wires) and register the element type with remote.WithSerializables(new(MyEvent)) (the same registration any remote rctx.Tell to a remote PID needs). Forgetting either is the common failure mode — missing control-plane registration manifests as the bridge hanging on subscribe; missing element-type registration manifests as "no serializer found" on the producer's first ship or as silent dead-letter on the consumer side. Asymmetric registration (one node has it, the other doesn't) breaks only the unconfigured direction. User element types travel across the wire as ordinary remote messages — no extra envelope, no double encoding — so the remoting layer's existing CBOR registry handles them with no per-stream serializer overhead.
  • Single-subscription semantics. The endpoint stays alive through a 30s grace window after stream completion so a racing late subscriber gets a deterministic "already consumed" rejection rather than telling a dead actor; after the window the endpoint reaps itself via system.ScheduleOnce, so consumed refs don't leak in long-running processes.

... (truncated)

Commits
  • 3124a6f chore: automate github release (#1178)
  • 2643a88 chore(deps): update go modules
  • beb28ef refactor: demote per-actor and third-party Info logs to Debug (#1177)
  • a60ebdc feat: add built-in remote json serializer (#1176)
  • 1ef4b9a chore(deps): update module github.com/bufbuild/buf to v1.69.0 (#1175)
  • 5bac0c5 refactor: refactor discovery providers for efficiency (#1174)
  • 54a4c67 docs: set latest release date in changelog.md
  • 13cdab8 chore(deps): upgrade dependencies
  • 665440d refactor: cleanup godocs
  • e9de56a feat: add remote streams functions (#1172)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Package Dependencies
Ecosystem:
go
Version Change:
4.2.2 → 4.2.4
Update Type:
Patch
Technical Details
ID: 15844007
UUID: 4469096670
Node ID: PR_kwDOOTv_y87cpdgC
Host: GitHub
Repository: GoCodeAlone/workflow