Dario Gabriel LipicarandClaude Opus 5 94239acea6 Merge base branch: the burst-drain bound is stated against the burst
Base-update only — the tree is byte-identical to this branch before the merge.
Both conflicts resolve to this branch's side because the base commit rewrites a
mechanism the fold has already deleted:

  * test_plain_waiter_reaping.cpp — the base reworks the idle-burst bound into
    kBurst/2 because, with a waiter thread per call, what survives an idle burst
    is the last EXIT BATCH: scheduling-dependent, frozen once the threads are
    gone, and up to 402 of 800 on a loaded Linux box. None of that exists here.
    An entry in CallState::inflight lives exactly as long as its call and is
    erased by the one delivery it gets, so there is no exit batch, no residue,
    and no reason to loosen the bound this file already asserts.

  * plain_logos_object.h — the base amends the retention note above m_waiters.
    There is no m_waiters here.

What DOES carry over is the reason the base commit exists, and it is worth
knowing while this branch is still open: on Linux the 800-call burst is not
concurrent, because spawning a std::thread costs more than a loopback ping. The
spawn-path reaper collects most of it before the last call is issued, which is
why the pre-fold defect's own residue (4-168 idle) overlapped a correct build's
there and why the old bound of 8 failed correct code in 35 of 60 unloaded Linux
runs. The fold removes the thread per call, so it removes the cause; the 8 this
file still asserts is measuring an exact registry now, not a race.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 12:41:21 -03:00
2026-06-09 23:33:17 -03:00
2026-06-09 23:37:23 -03:00
2026-06-09 23:37:23 -03:00
2026-06-09 23:33:17 -03:00

logos-protocol

The Logos protocol layer: transports, token exchange, and the language-neutral lp_* C ABI (cpp/logos_protocol.h) that every Logos SDK builds on.

Extracted from logos-cpp-sdk so that non-C++ SDKs (Rust, …) consume the same transports, capability/token flow and wire behavior through one stable, versioned boundary instead of re-wrapping the C++/Qt SDK.

What lives here

  • Public C ABIcpp/logos_protocol.h: consumer surface (lp_client_*, lp_invoke[_async], lp_subscribe, tokens, lp_get_methods), provider groundwork (lp_provider_*), and the protocol version (LOGOS_PROTOCOL_VERSION_*, lp_protocol_version(), lp_protocol_abi_major()). JSON-in-strings data model; bytes cross the boundary as {"_bytes":"<base64url>"} (lossless, NUL-safe).
  • Transports — plain TCP / TCP+TLS (Boost.Asio + OpenSSL + nlohmann, Qt-free), qt_local, in-memory mock, and Qt Remote Objects (qt_remote — the only Qt-bearing transport).
  • Consumer coreLogosAPIClient / LogosAPIConsumer including the automatic capability_module.requestModule token-fetch flow (behind the protocol boundary: every language gets it for free).
  • Provider-side plumbingModuleProxy (auth gate the transports publish) and the abstract LogosProviderObject interface (logos_provider_interface.h).
  • Token manager, transport/registry factories, mode config (remote/local/mock), and the canonical QVariant↔JSON conversion used at the QRO boundary.

logos-cpp-sdk layers the typed C++ developer API (LogosAPI, module context, code generator, provider base classes) on top of this repo.

Versioning

This repo carries the logos-protocol semver — the single number that governs Logos load/call compatibility. Two participants (modules, hosts, SDKs in any language) interoperate iff they share the same MAJOR. MINOR is additive/back-compatible; PATCH never affects compatibility. SDKs must re-expose the version of the protocol they linked (never mint their own).

Building

# Via workspace
ws build logos-protocol

# Standalone
nix build

# Tests
nix build .#tests

Layering invariant

logos-protocol depends only on Qt / Boost / OpenSSL / nlohmann_json — it must NEVER depend on logos-cpp-sdk, logos-qt-sdk, logos-rust-sdk, liblogos or logos-lidl. Everything points inward.

S
Description
No description provided
Readme
1.6 MiB
Languages
C++ 91.5%
C 3.9%
CMake 2.7%
Nix 1.1%
Shell 0.8%