Commit Graph
135 Commits
Author SHA1 Message Date
stubbsta 6c136e54f8 use LD repo branch with hardocoded RLN instantiation bypass 2026-08-27 09:49:39 +02:00
stubbsta 37fe4e3a52 Update docs for rln module 2026-08-27 09:49:39 +02:00
stubbsta 83977a69af replace rln stub header with actual header and update tests 2026-08-27 09:49:38 +02:00
stubbsta 7b49c80f88 flake update to logos-delivery rln-module-impl-branch 2026-08-27 09:49:38 +02:00
stubbsta 21b935a383 Add RLN module callbacks 2026-08-27 09:47:26 +02:00
Tanya S 3770771eba bump logos delivery to latest master (#93) 2026-08-26 11:30:53 +02:00
Igor Sirotin b8b9ac2f46 fix: set metadata version to 0.2.1 (#92) v0.2.1 2026-08-26 00:10:39 +01:00
Igor Sirotin f719052096 chore: bump logos-delivery and migrate to the nim-ffi 0.3 C ABI (#90) 2026-08-25 16:39:41 +02:00
Igor SirotinandClaude Fable 5 3f0f2d8b20 docs: move run-node guide and shipped configs to the layered createNode shape (#82)
* docs: move run-node guide and shipped configs to the layered createNode shape

The shipped conf files carried a bare top-level logLevel, which routes the
config through the legacy flat parser (#79 documented the layered shapes in
the README but left the guide behind). Pin the p2p ports in
messagingOverrides so the docker-compose port mappings actually match what
the node binds (the flat default was 60000, never the mapped 30303).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: drop redundant mode from the run-node configs

The layered parser defaults mode to Core when omitted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: tighten the run-node configuration section

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-08 10:18:17 +01:00
Igor SirotinandClaude Fable 5 3258cdb013 chore: release v0.2.0 (#75)
* chore: release v0.2.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore: remove accidentally committed nix result symlinks

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
v0.2.0
2026-07-31 12:47:44 +01:00
Igor SirotinandClaude Fable 5 a81e255b77 refactor!: drop the version() API method (#80)
Modules don't self-report versions — Logos Core is the authority: the
version lives in the module's embedded metadata.json and is served by
the core's module registry (core_service.getModuleInfo). version() also
hardcoded a stale "1.1.0" module version, and its liblogosdelivery
suffix duplicated getNodeInfo("Version").

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 12:28:29 +01:00
Igor SirotinandClaude Fable 5 531e61e11c docs: document the three createNode config shapes (#79)
* docs: document createNode config shapes for the three user roles

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: drop port defaulting, make the storage-path default shape-aware

The injected top-level keys forced every config through the legacy flat
parser and broke the layered shapes ('kernel entry layer takes only
kernelConf'). Ports now follow upstream defaults; the per-instance
storage path goes inside kernelConf when the config carries one.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: place the storage-path default in messagingOverrides for structured configs

Requires logos-delivery#4083 (localStoragePath on MessagingClientConf).
Pins logos-delivery to that branch; re-lock to master once it merges.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore: tighten config-defaults comments

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* chore: re-lock logos-delivery to master with #4083 and #4084

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: route wrapper-less layered configs through messagingOverrides

A plain {mode, preset} config previously fell to the legacy flat parser
because the injected top-level storage path counts as a bare kernel
field. Creating messagingOverrides for it keeps the storage path set and
gives layered configs the structured defaults (ephemeral p2p ports).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 09:33:17 +01:00
Igor SirotinandClaude Fable 5 ee8d231fa3 chore: bump logos-delivery to latest master (#78)
8125cd0 -> ed8e881. Picks up the fix to stop emitting receive events
after channel_close (#4075).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 08:57:56 +01:00
Igor SirotinandClaude Fable 5 d223a2c07a chore: bump logos-delivery to latest master (#77)
8ad99f1 -> 8125cd0. Picks up the logos_delivery_ metrics prefix
migration (#4074), QUIC-before-TCP dialing fix (#4061), and the
channel_message_received sender-id fix (#4073).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 22:41:49 +01:00
Igor SirotinandClaude Fable 5 2701c440b4 feat: expose Store queries via storeQuery (#76)
* feat: expose Store queries via storeQuery

A Logos Core module integrating paid Store retrieval (lez-payment-streams)
needs to issue Store queries through delivery_module, but the plugin surface
only covered lifecycle, send, subscribe and node info. liblogosdelivery already
ships waku_store_query in its kernel tier, so forward to it: storeQuery(
jsonQuery, peerAddr, timeoutMs) hands the query JSON through verbatim and
returns the response JSON, waiting past the query's own timeout so the FFI
error (not a callback timeout) is what the caller sees.

The kernel tier is explicitly unstable; the include is scoped to this one
symbol and the method documents that its JSON contract follows it.

Resolves logos-co/logos-delivery-module#30

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: add use-at-your-own-risk warning on storeQuery

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 16:23:33 +01:00
967ad9222b feat: add Reliable Channels API support (#68)
* chore: bump logos-delivery to master 8ad99f1

Brings in the Reliable Channels FFI API (logosdelivery_channel_create/
_exists/_send/_close) and channel_message_* events. The create_node
config gained the layered {mode, preset, messagingOverrides,
channelsOverrides} shape; legacy flat JSON remains accepted, so the
existing flat configs and applyPortDefaults keep working.

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

* test: sync liblogosdelivery.h stub with logos-delivery master 8ad99f1

Replace the hand-condensed stub with the real header surface so the
unit-test ABI matches exactly: adds the four Reliable Channels
functions, RET_MISSING_CALLBACK, and the FFICallBack typedef name used
by the real header.

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

* feat: add Reliable Channels API to delivery module

Expose the new logos-delivery channel FFI surface:
- channelCreate(channelId, contentTopic, senderId) -> channel id
- channelExists(channelId) -> "true"/"false" (verbatim FFI string)
- channelSend(channelId, payload) -> requestId, payload base64-encoded
  into { payload, ephemeral:false } like send()
- channelClose(channelId)

Route the new event types through event_callback as typed events:
channel_message_received (payload base64-decoded), channel_message_sent,
channel_message_error.

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

* test: mock channel FFI functions and add channel-api unit tests

Mock the four logosdelivery_channel_* functions (invokeOk pattern),
stub the three new channel event bodies, and cover
channelCreate/channelExists/channelSend/channelClose with the same
no-context / mocked-value / call-count assertions as the existing API.

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

* test: add reliable-channel integration tests

Cover the full channel lifecycle against the real library: exists=false
for unknown ids, create returns the channel id, exists flips true/false
across create/close, close of an unknown channel errors, and
channelSend returns a request id on an open channel and fails on an
unknown one.

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

* refactor: extract shared decodePayloadField for event payloads

Both message_received and channel_message_received now decode their
payload field through one helper that accepts either wire shape: a JSON
array of numbers (generic Nim seq[byte] serialization) or a base64
string (hand-built events).

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

* fix: make event_callback exception-safe across the FFI boundary

Address PR review: event_callback is a C callback invoked from the Nim
runtime, so a C++ exception escaping it would unwind into Nim frames
and terminate the process.

- decodePayloadField: validate array elements are integers in 0..255
  instead of a throwing get<int>(); malformed payloads decode to empty.
- Wrap the whole parse + field-extraction + dispatch in one try/catch
  on nlohmann::json::exception — .value()/.get() type mismatches were
  equally able to escape, not just the payload conversion.
- Stub header: note that upstream's onChannelMessage* comment refers to
  internal listener labels, while the delivered eventType strings are
  channel_message_*; the mirrored body stays verbatim with upstream.

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

* refactor: split the event payload decoder per event type

message_received carries a JSON byte array, channel_message_received a
base64 string. One parser sniffing both shapes let either event silently
accept the other's encoding; each now decodes only its own.

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

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Igor Sirotin <sirotin@status.im>
2026-07-29 14:41:16 +01:00
Igor SirotinandClaude Fable 5 294adeee6b ci: cut CI wall clock from ~17 to ~6 min (#73)
* ci: bump logoscore-py pin to pick up Attic-cached smoke image

logoscore-py a58573e adds the Logos Attic substituters to the smoke
image's build stage (logos-co/logos-logoscore-py#12). The CLI pin moves
to 665ac28 in lockstep — logoscore-py bumped its flake pin in #10.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: run e2e-tests in parallel with build-and-test

The job builds everything it needs itself (Attic-cached), so waiting
for both build-and-test legs — including the slower macos one — only
added ~4 min of wall clock.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: cache smoke image layers via buildx gha backend

The logoscore-py pin makes the docker build input-identical between
runs, so with mode=max every layer — including the ~5 min inner
nix build — replays from cache until the pin is bumped. Same pattern
as logoscore-py's own CI; build_smoke_image.sh forwards the env vars.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: expose Actions runtime env so the buildx gha cache actually works

type=gha needs ACTIONS_RUNTIME_TOKEN/ACTIONS_CACHE_URL, which GitHub
injects into actions but not run steps — buildx called from
build_smoke_image.sh silently skipped the cache. (logoscore-py's own
CI has the same latent no-op.)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 14:00:20 +01:00
Igor SirotinandClaude Fable 5 e82d24853b ci: use setup-nix-cache-action in e2e-tests instead of cachix (#71)
The e2e job added in #51 predates the Attic migration (#69) and still
pulled through cachix. Wire it to setup-nix-cache-action like
build-and-test, including the public-cache environment gate on master.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 23:44:56 +01:00
Igor SirotinandClaude Opus 5 8b6e961fff fix: store node data under the module's per-instance path (#72)
logos-delivery defaults to "./data", relative to the process working
directory, so instances launched from the same directory shared one
SQLite file. The host already hands each instance its own directory via
LogosModuleContext::instancePersistencePath(); use it when the caller
did not pin a storage path.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-28 23:12:19 +01:00
Igor SirotinandClaude Opus 5 0f513f7dfc chore: pin logos-module-builder to 0.2.5 for the binary-event payload fix (#70)
Pulls logos-cpp-sdk past #100/#102: before those, the generated cdylib
event sidecar serialized every bstr event argument as {"_bytes":""},
so messageReceived (and channelMessageReceived, once #68 lands) reached
consumers with an empty payload.

Also names the release instead of tracking master, so builder upgrades
are explicit rather than picked up by any flake update.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-28 22:10:15 +01:00
Egor RachkovskiiandEgor Rachkovskii 3f8a0ed99a test: add Python e2e suite driving delivery_module over RPC (#51)
* test: add Python e2e suite driving delivery_module over RPC

Adds tests/e2e/: a pytest suite that boots logoscore daemons in docker, loads delivery_module, and drives it over RPC — exercising the plugin-load + codegen + RPC + two-node network-delivery paths the in-process C++ tests can't. Reuses logos-integration-test-framework / logoscore, pinned to chat-module's known-good SHAs.

Single-daemon: load/createNode/start/stop lifecycle, createNode-twice rejection, and query + subscribe/unsubscribe round-trips. Two-daemon (direct staticnodes peering, relay-only single shard): sender-side messagePropagated is the hard gate; messageReceived is xfail until the receive path and event-payload shape are confirmed on a green run.

CI: new e2e-tests job (needs build-and-test, ubuntu-latest) building .#install-portable plus the logoscore smoke image and CLI, with a cachix pre-warm step added to build-and-test.

* test(e2e): add RPC-reply-wedge diagnostic probes

Opt-in (E2E_PROBES=1) probe suite that isolates which factor wedges a
delivery node's RPC reply channel after a watched send: event emission
alone, the watcher subscription alone, messagePropagated transmission, or
the loopback messageReceived (vector<uint8_t>). Each probe runs on a fresh
two-node pair so a wedge can't pollute later probes. Enabled in the e2e CI
job; set E2E_QT_DEBUG=1 to also capture Qt RemoteObjects transport logs.

* update(README): clarify module packaging and add build reproducibility note

* Revert "update(README): clarify module packaging and add build reproducibility note"

This reverts commit 5aed6447a9.

* Revert "test(e2e): add RPC-reply-wedge diagnostic probes"

This reverts commit ef1f541358.

* test(e2e): mark propagation and messageReceived tests xfail due to known issues (#59)

* ci: make e2e-tests non-gating while build bug #58 is open

The module build is reproducible per source tree but some trees produce a
plugin whose start() never returns (#58), which fails the solo lifecycle
tests at start. xfail can't cover that (it hits setup), so allow the e2e
job to fail without blocking the PR until #58 is fixed.

* test(e2e),ci: drop narrative/decorative comments per repo style

Remove explanatory comment blocks, section-banner comments, and redundant
inline rationale across the e2e suite and the CI workflow; keep only linter
directives and a single footgun one-liner. No behaviour change.

* test(e2e): refactor node interaction to use LogosDelivery API

Refactor message delivery tests and helpers for clarity using the new `LogosDelivery` class. Replaced low-level RPC calls with higher-level methods (`subscribe`, `send`, `watch`, etc.), streamlining node interaction and removing redundant logic. Updated lifecycle tests for consistency. No behavior change.

* ci(e2e): capture gdb thread backtraces when start wedges (#58)

Non-gating diagnostic in the e2e-tests job: boot a solo logoscore daemon,
call start on a background thread, and if it wedges attach gdb to every
container process for thread backtraces, /proc maps and kernel stacks.
Uploaded with the e2e-test-logs artifact.

* ci(e2e): fix #58 wedge detection so gdb actually fires

The client RPC errors (exit 4) ~20s before the daemon-side start() releases
its 30s semaphore, so a populated result no longer means success. Classify any
non-success outcome as wedged, poll to detect it early, and attach gdb to every
container process in parallel to freeze them before the semaphore releases.

* debug(#58): log start callback path and capture daemon log past 30s

Add fprintf in callApiRetVoid at callback entry, after invoke, and on the
semaphore timeout to show whether liblogosdelivery ever invokes our completion
callback (upstream) vs a userData/map miss (adapter). Keep the wedge probe
daemon alive past the 30s CALLBACK_TIMEOUT so the start outcome is captured.

* debug(#58): add pre-invoke positive control and inspect loaded plugin

Log unconditionally right before invoke() so a bad build distinguishes
'start_node did not return' from 'the loaded plugin lacks the instrumentation'.
On a wedge the probe now strings/sha256 the loaded delivery_module_plugin.so
for the instrumentation literals and ldd's the bundled libs.

* debug(#58): force stderr unbuffered so start-path logs are reliable

Prior run showed the 'about to invoke' line (which provably executed — the node
started right after) missing from the captured log, making log-line absence
useless as evidence. setvbuf(_IONBF) at module init + fflush after each
instrumented fprintf so the next bad build's log is trustworthy.

* debug(#58): probe RPC channel after a start wedge

start() returns and no thread is stuck (kernel stacks), so the wedge is a lost
RPC reply, not a hang. On a wedge, issue follow-up version/getAvailableConfigs
calls: if they also time out the whole QtRO reply channel is dead (matches the
sync-reply-wedge bug); if they succeed only start's reply was lost.

* debug(#58): revert useless stderr instrumentation

The fprintf/setvbuf tracing added to localize #58 is dead weight — logoscore's
stderr capture drops adapter log lines during the node-startup flood, so the
log-based method never worked. Revert it (src/ is now net-zero vs master) and
drop the diagnostic's now-moot instrumentation-strings check. The gdb + kernel
stacks + RPC-channel probe in wedge_gdb.py are what actually localized the bug
and stay.

* ci(e2e): bump logoscore daemon+CLI past the QtRO reply-wedge fix (#58)

Root-caused #58/#59 to the pre-fix ModuleProxy in the e2e daemon's SDK: it
emits module events directly on the caller's (module FFI) thread, racing QtRO
source serialization against an in-flight reply and permanently wedging the
sync-reply channel. Fixed upstream in logos-cpp-sdk d77c3dd (marshal events
onto the source thread) + logos-protocol #7 (defer async completion off the
QtRO read stack). Our daemon was pinned 6 commits before it.

Bump the smoke-image daemon (logoscore-py aa45db52 -> 71e00381) and the CLI
(logoscore-cli 5a1cf746 -> a9e18455) to a post-split closure carrying both
fixes. The Python client already floats logoscore@master, so no requirements
change is needed.

* test(e2e): un-xfail two-node delivery tests; drop the #58 wedge diagnostic

The daemon-pin bump (901c525) fixed the QtRO reply-wedge behind #58/#59, so the
three two-node delivery tests now pass (propagation both directions + receive).
Un-xfail them and delete the temporary gdb wedge diagnostic + its CI step; revert
the artifact upload to failure-only. Keep continue-on-error on e2e-tests for now
to gather a flake baseline on the real cross-node delivery before it gates.

* test(e2e): rename lifecycle test for clarity

---------

Co-authored-by: Egor Rachkovskii <egorrachkovskii@status.im>
2026-07-28 10:21:21 +01:00
Igor SirotinandClaude Fable 5 810dbe1759 ci: switch the Nix cache setup to setup-nix-cache-action (#69)
Adopts logos-co/setup-nix-cache-action@v1, same as logos-chat-module#57:
pull from the public+ci Attic caches on every ref, publish master builds
to public (via the public-cache environment token) and other refs to ci.
Replaces the pre-rotation attic-action config, which pointed master pushes
at a token that no longer exists repo-wide.

flake.nix: update the public cache signing key, rotated with the tokens
(the old key no longer matches the server, so local pulls silently fell
back to building from source).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 21:47:43 +01:00
Khushboo-dev-cpp c21ffb83b2 chore: bump logos-module-builder (#60) 2026-06-30 13:25:15 -03:00
Igor SirotinandClaude Opus 4.8 620225e528 flake: add Logos Attic public cache as substituter (#63)
Lets local/dev and downstream builds pull prebuilt liblogosdelivery,
librln, etc. from the public Logos Attic cache (infra-ci#263). Read-only
and anonymous; honored on trusted users / CI via --accept-flake-config.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:34:18 +01:00
Igor SirotinandClaude Opus 4.8 3a4234fd1d ci: switch Nix binary cache from Cachix to Attic (#61)
* ci: switch Nix binary cache from Cachix to Attic

Replace the cachix/cachix-action step with ryanccn/attic-action, pushing
to the self-hosted Logos Attic cache (cache.nix.logos.co) per infra-ci #263.
PRs are read-only (skip-push); only master/main builds populate the cache.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* ci: read ATTIC_ENDPOINT from secrets, not vars

ATTIC_ENDPOINT is configured as a repo/org secret, so vars.ATTIC_ENDPOINT
resolved empty and attic login failed with 'relative URL without a base'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 18:18:45 +01:00
Igor SirotinandClaude Opus 4.8 ab904fd4c2 docs: add prebuilt-binary run path to run-node guide (#54)
* docs: add prebuilt-binary run path (no build) to run-node guide

Document running a node without building from source: download the
logoscore daemon AppImage, the lgpm package manager, and this module's
prebuilt delivery_module.lgx from the logos-modules release, install with
lgpm, and boot the node — same load-module / createNode / start calls,
defaulting to the logos.test fleet.

Splits "Without Docker" into "prebuilt binaries" (Linux only) and "build
with Nix" (any platform). All three methods default to logos.test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: fix prebuilt module source to logos-modules-release (logos.test)

The modules release repo was renamed to logos-modules-release and now
publishes per-module, versioned releases (no rolling `latest`). Point the
prebuilt delivery_module download at the versioned tag/asset
(delivery_module-v0.1.3 / delivery_module-0.1.3.lgx) and note that the
logos.test preset needs delivery_module >= 0.1.3 — earlier builds only
support twn and logos.dev.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: prebuilt path uses lgpd + covers macOS

Rework the prebuilt-binary section around the canonical downloader flow
used by logos-docker: fetch the module with `lgpd download delivery_module`
(its built-in catalog is logos-modules-release) and install with
`lgpm install`, instead of curling a release asset by hand.

Add macOS (Apple Silicon) alongside Linux — logoscore/lgpd/lgpm are all
published for both. Keep the note that logos.test needs delivery_module
>= 0.1.3, and mention the direct-.lgx fallback.

Verified end-to-end on macOS (host) and Linux (VM): lgpd download ->
lgpm install -> logoscore createNode @logos-test.json -> start, with the
node dialing the logos.test bootstrap fleet on both.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: resolve tools from latest release, move Metrics to run-node

- Prebuilt path: drop pinned pre-release tags; a latest()/dl() helper
  pair resolves each tool's newest release from the GitHub API, so no
  version is hardcoded.
- Move the Metrics (openmetrics scrape) instructions from README into
  run-node.md as a "## Metrics" section; README keeps the API reference
  and links to it.
- Drop the trailing note block from the prebuilt section.

Verified the exact doc commands on macOS: latest()/dl() -> tools on PATH,
lgpd download delivery_module -> 0.1.3, lgpm install.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: simplify prebuilt setup to a one-line install script

Replace the two helper functions + per-OS download blocks with
scripts/install-node-tools.sh, which detects OS/arch, resolves the latest
release of logoscore/lgpd/lgpm, and drops them in ./bin. The doc shrinks
to a curl one-liner + the lgpd/lgpm/run steps.

The script handles the per-OS packaging (Linux AppImage vs macOS app
tree) so the doc no longer has to. Verified on macOS + Linux: the script
installs all three working CLIs; lgpd download -> lgpm install -> boot.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: pin tool releases instead of resolving latest

Drop the GitHub API lookup; install-node-tools.sh now pins the current
releases of logoscore/lgpd/lgpm via *_TAG vars (bump to upgrade). Removes
the unauthenticated API call (and its rate-limit failure mode) from the
install path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 17:18:47 +01:00
Igor SirotinandClaude Opus 4.8 794c21cbe1 chore: release v0.1.3 (#57)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
v0.1.3
2026-06-23 22:44:11 +01:00
Igor SirotinandClaude Opus 4.8 9e6d2f6020 feat: expose node metrics via collectOpenMetricsText() for openmetrics (#55)
* feat: expose node metrics via collectOpenMetricsText() for openmetrics

liblogosdelivery already aggregates Prometheus metrics in its global
registry and renders them as exposition text behind the "Metrics"
node-info attribute. Implement the openmetrics module's new
collectOpenMetricsText() convention (logos-co/openmetrics-module#5) by
handing that text back verbatim — the scraper parses it, injects a
module="delivery_module" label, and merges it with other modules.

No in-module parsing/reshaping: the module is a pure passthrough.
Select it with {"name":"delivery_module","format":"text"} in the
openmetrics start config.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test: add real-node integration test for collectOpenMetricsText()

Asserts the live liblogosdelivery "Metrics" node-info path returns
non-empty Prometheus/OpenMetrics exposition text — the document the
openmetrics module's text source consumes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 22:19:50 +01:00
Igor SirotinandClaude Opus 4.8 b43a6e5561 docs: point run-node guide at logos.test fleet (#53)
* docs: point run-node guide at logos.test fleet

Switch the run-a-node instruction from the logos.dev network to the
logos.test fleet, and add conf/logos-test.json (preset logos.test) for
the createNode boot step to reference.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: make logos.test the default fleet and add non-Docker run path

- README: list logos.test first as the default preset and use it in the
  minimal createNode example; keep logos.dev and twn documented.
- run-node.md: restructure into "With Docker" and "Without Docker"
  sections. The native path builds logoscore + lgpm and this module's
  .lgx with Nix, runs the daemon on the host, and boots the node with the
  same createNode @conf/logos-test.json / start calls.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 11:18:15 +01:00
Iuri Matias 76d5fe9626 add doctest (#47)
add doctest

update config

test for kadmelia; remove kadmelia option from doctests; add another hang test

test for kadmelia

remove kadmelia option from doctests; add another hang test

test lib directly

increase timeout

make start call non-blocking and generate an event instead

remove poc test

remove poc test
2026-06-17 10:09:41 -04:00
Darshan 2577383f6e fix: bump logos-delivery to pick up the zerokit/RLN nix build fix (#49) 2026-06-09 16:38:10 +01:00
Igor SirotinandClaude Opus 4.7 9043408857 chore: release v0.1.2 (#46)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v0.1.2
2026-05-25 22:44:27 +01:00
Igor Sirotin 982ceaa806 chore: build against cpp-sdk event-threading fix (#45)
* chore: point logos-module-builder at cpp-sdk event-threading fix branch

Temporarily tracks logos-module-builder#101 so the module builds against
logos-cpp-sdk#68 (provider event marshaling). Revert to master once #101 merges.

* chore: bump logos-module-builder (cpp-sdk event-threading fix)

The fix chain is merged, so track module-builder master (carries
logos-cpp-sdk#68 + the fixed standalone-app host) instead of the temporary
branch pin.
2026-05-25 18:48:42 +01:00
Igor SirotinandClaude Opus 4.7 23ee54dec5 fix: default listening ports to 0 in createNode (#18) (#39)
In createNode, default each listening port (tcpPort, discv5UdpPort,
restPort, metricsServerPort, websocketPort) to 0 when the caller did
not pin it, so the OS assigns ephemeral ports and multiple module
instances can coexist on one host. Caller-supplied ports are preserved
so fleet configs that pin ports keep working.

logos-delivery now accepts port 0 (status-im/nim-confutils#146), which
is what makes injecting 0 work end to end.

Also stop logging the cfg payload from createNode: it can carry
sensitive config.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 14:17:15 +01:00
Igor Sirotin 968c39b7ec chore(deps): bump logos-delivery to master, source librln from it (#42) 2026-05-22 23:14:11 +01:00
Igor SirotinandClaude Opus 4.7 2f277cd882 chore: fix logos-delivery version (#41)
* chore: fix logos-delivery version

* chore(deps): bump logos-module-builder, drop libpq test workaround

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 21:28:06 +01:00
2abc08df8c update to new api (#40)
* update to new api

update to new api

update to new api

replace with boost

update flake

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-21 13:26:39 -04:00
Igor Sirotin f461c05662 docs: run and query a node (#38) 2026-05-19 18:27:06 +01:00
Igor SirotinandClaude Sonnet 4.6 28cd24c5c1 fix: unify event timestamp format to nanoseconds since epoch (#29)
* Terminal fix: unify event timestamp format to nanoseconds since epoch

All five plugin events now emit timestamps as nanoseconds since epoch
(qint64 via QVariant). Previously messageSent, messageError,
messagePropagated, and connectionStateChanged used a local ISO-8601
string while messageReceived passed the raw waku nanosecond value as a
stringified float, forcing consumers to special-case each event.

Closes #26

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: annotate event timestamp fields as qint64, not QString

The value emitted into the QVariantList is a qint64 (ns since epoch);
the contract comments still said QString. Align the documented type
with what is actually emitted.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 20:59:52 +01:00
Igor SirotinandClaude Sonnet 4.6 9206d41ccc docs: add versioning policy (#25)
Documents the MAJOR.MINOR.PATCH scheme: MAJOR fixed at 0 (pre-stable),
MINOR tracks the Logos testnet number, PATCH for module releases within
a testnet.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 20:59:44 +01:00
Igor SirotinandClaude Sonnet 4.6 a588d6494f fix: use QByteArray for payload end to end, removing base64 layer (#28)
send() now accepts QByteArray directly (base64 still applied internally
for the FFI JSON). messageReceived emits payload as QByteArray instead
of a base64-encoded QString, matching logos-delivery behaviour.

Closes #27

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:55:30 +01:00
Igor Sirotin b18ec06751 wip 2026-05-15 12:00:20 +01:00
Igor Sirotin e0b913ca80 wip 2026-05-14 22:20:55 +01:00
NagyZoltanPeter 4ec7aa7491 Merge pull request #16 from logos-co/add_tests
add tests and ci run
2026-05-06 16:48:34 +02:00
NagyZoltanPeter 0c346c0c2a Changed version to 1.1.0 v0.1.1 2026-04-22 03:39:16 +02:00
NagyZoltanPeter 8f521378c3 Merge pull request #19 from logos-co/fix-dev-build-rpath
fix dev build rpath
2026-04-21 15:02:40 +02:00
NagyZoltanPeter 822a3ef9aa fix: linux patchelf needs permission 2026-04-21 14:59:22 +02:00
NagyZoltanPeter cc02867854 Adding rpath fix for linux platform too 2026-04-21 14:34:50 +02:00
NagyZoltanPeterandCopilot Autofix powered by AI 239c209f65 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-04-21 14:32:04 +02:00
Dario Gabriel Lipicar 764dbc5f6e fix dev build rpath 2026-04-20 15:19:31 -03:00