fix(doctests): unpin logoscore-cli, and retire the archived accounts module

The macOS doc-test job has been red since 2026-08-21: every module call came
back {"__logos_rpc_status__":"unauthorized"}, preceded in the daemon log by
capability_module rejecting the CLI's own requestModule handshake. Linux was
green throughout.

NOT MODULE ROT. A freshly-built test_basic_module failed identically to
accounts_module. Bisected on one macOS box, one variable, same CLI, same module:

    liblogos 3893c833 (parent)   ->  "result":42
    liblogos b2a9a0ba (#182)     ->  unauthorized

MECHANISM, from `nm -mu` on the logoscore binary:

    pre-#182:  TokenManager::instance()  (from liblogos_core)
    at-#182:   TokenManager::instance()  (from liblogos_module_client)

#182 made liblogos_core export ZERO TokenManager symbols -- they moved to
liblogos_protocol. macOS two-level namespace then rebound the CLI's imports to
the next image still statically absorbing a copy, so the CLI wrote its token
into one singleton while the runtime authorized against another. ELF cannot
show this: flat namespace collapses every definition onto the first-loaded
image, so Linux held the invariant by accident.

THE PIN IS THE BUG, not the linkage. The shared-runtime split landed as one pin
SET -- logos-protocol 2e3344a, logos-plugin-qt 1aa3e31, logos-liblogos b2a9a0b
(#182), logoscore-cli 2312a3a. This spec pinned the CLI at b92ade06
(2026-06-10) and overrode only logos-liblogos, manufacturing exactly the
half-migrated pairing the set exists to prevent. That pin's own commit (050f2d3)
called it "Temporary -- drop when the chain PRs merge"; nobody did. Dropping the
rev is the fix. logoscore master had already shed the deprecated
logos-module-client in its #48, so nothing there needs changing.

WHY THIS READ AS ONE FLAKY STEP rather than a total auth outage: "Call a method"
asserted on the bare string '"result"', which the unauthorized envelope also
contains. Both calls now assert values -- '"result":"hello"' and '"result":42'.

ALSO RETIRED: logos-accounts-module was archived on 2026-07-22. Both specs now
drive test_basic_module from logos-test-modules, via the
`#modules.$SYSTEM.<name>.lgx` attribute path the logoscore-cli doc-tests already
use. The module-runtime spec no longer clones a repo at all, so it loses its git
prerequisite and one step.

VERIFIED on aarch64-darwin against 959d11d9 -- the exact commit CI failed on:
34 passed, 0 failed (was 34 passed, 1 failed of 35), and zero "rejecting
unauthorized call" lines in the daemon log.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Dario Gabriel Lipicar
2026-08-26 23:32:20 -03:00
committed by Dario Lipicar
co-authored by Claude Opus 5
parent 2ac002b410
commit f05ed5a899
6 changed files with 176 additions and 176 deletions
+4 -4
View File
@@ -3,11 +3,11 @@ name: liblogos Doc-Tests
# Runs the executable liblogos doc-tests end-to-end via the shared doctest CLI,
# both pinned to the commit of logos-liblogos under test (via --release-for):
# - doctests/liblogos-module-runtime.test.yaml — drives liblogos through the
# logoscore CLI frontend (build logoscore against this commit, install the
# accounts module, start the daemon, load + call methods).
# logoscore CLI frontend (build logoscore against this commit, install
# test_basic_module, start the daemon, load + call methods).
# - doctests/liblogos-as-a-library.test.yaml — embeds liblogos directly:
# builds liblogos_core from this commit, compiles a C++ program that links
# it, installs modules with lgpm, and loads the accounts module via the C API.
# it, installs modules with lgpm, and loads test_basic_module via the C API.
# Both specs run in one invocation, producing a single combined report.
#
# ──────────────────────────────────────────────────────────────────────────────
@@ -230,7 +230,7 @@ jobs:
const body =
`${marker}\n` +
`### 📊 liblogos doc-test report\n\n` +
`The real accounts module, run through a logoscore daemon built against ` +
`A real module, run through a logoscore daemon built against ` +
`this commit of liblogos — rendered alongside the commands actually run ` +
`and their output (updated each run, commit \`${context.sha.slice(0,7)}\`):\n\n` +
`${links}\n\n` +