Skip to content

v1.3.3 — Logging facade + TWIN/trunk roster observability

Choose a tag to compare

@audric audric released this 18 Apr 22:49
· 164 commits to master since this release

Highlights

Logging facade

geulog:: replaces ad-hoc TRUNK_DEBUG flags and direct stderr writes. Async worker, 7 subsystems (core, client, trunk, twin, satellite, redis, mqtt), configurable via LOG= in [GLOBAL] and live-reloaded over the command PTY. Documented in docs/LOGGING.md.

Twin protocol observability (fixes #3)

Twin-connected reflectors now exchange the full connected-station roster over the [TWIN] link (reusing MsgTrunkNodeList, no new wire type).

  • /status exposes a new twin object: connection/hello state for both directions, peer id, priorities, and twin.nodes — the partner's roster.
  • MQTT publishes the twin partner's roster under nodes/<peer_id>.
  • Redis pushPeerNode / tombstones also cover twin partners.
  • Cleared automatically when the twin link goes fully inactive.

/status parity for trunk peers

/status.trunks[SECTION].nodes now surfaces the per-peer roster that was already flowing to MQTT and Redis. Dashboards can attribute every node to a specific reflector from a single /status call.

Other

  • docs/LOGGING.md sysop reference (linked from README).
  • Redis peer-node mirror + input sanitization on trunk-received strings.
  • MQTT init fixed to work in satellite mode; retained per-client status blobs published.
  • reflector: fix clientStatus() isMember check to target nodes subtree.

Caveat (pre-existing)

In PAIRED trunk mode, both paired peers share one peerId(), so the latest roster arrival overwrites the prior one. MQTT, Redis, and /status.trunks[X].nodes all reflect this. Fixing it requires per-connection peer_id attribution and is tracked as future work.