Skip to content

feat: LogosCore runs the runtime in a process of its own - #171

Draft
dlipicar wants to merge 2 commits into
feat/drop-legacy-modefrom
feat/runtime-process
Draft

dlipicar wants to merge 2 commits into
feat/drop-legacy-modefrom
feat/runtime-process

Conversation

@dlipicar

Copy link
Copy Markdown
Contributor

Part of running the Logos runtime in a process of its own (logos-co/logos-liblogos#229). Stacked on #170 (feat/drop-legacy-mode).

What changes

logos::host::LogosCore runs the runtime in a process of its own by default.

  • Config::separateProcess, on by default. start() spawns liblogos' bin/logos_runtime with the host's settings (logos_runtime_spawn) and takes the binding it hands back. capability_module and every module's credential then stay out of the host's process.
  • Nothing else changes for callers. Every call already went through core_service over the binding, so lifecycle, queries and consumers keep their signatures.
  • Where a setting is refused. In-process, a refused setting still throws from the constructor. With a separate runtime it is refused there, and start() throws with the runtime's reason. So does a spawn that fails, for example with no token authority.
  • processModule goes over the runtime's private channel once it has started (logos_runtime_process_module). It is never a core_service call.
  • onRuntimeExit(callback) hears of a separate runtime that exits before the host stops it. The destructor stops the runtime, which unloads its modules in order.
  • With separateProcess off the runtime runs in the host's process, as before, for tests and single-process deployments.
  • The C mirror gains the five logos_runtime_* declarations.

Verification

  • checks.tests on macOS: 393/393. The in-process cases now opt out explicitly.
  • New cases: a separate runtime is the default; start() spawns with every setting and nothing is configured in the host's process; a failed spawn throws with its reason and cleans nothing up; processModule runs in the runtime; the runtime's exit reaches the host.
  • Downstream: Basecamp, the standalone app (logos-co/logos-qt-sdk, logos-co/logos-basecamp, logos-co/logos-standalone-app) on macOS and Linux.

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

📊 cpp-sdk doc-test report

The real accounts module, run through a logoscore daemon with the whole stack built against this commit of the C++ SDK — rendered alongside the commands actually run and their output (updated each run, commit d3c8f00):

Pages can take a minute to update after the run finishes.

With Config::separateProcess (on by default) start() spawns liblogos'
bin/logos_runtime with the host's settings and takes the binding it
hands back, so the token authority and every module's credential stay
out of the host's process. Every call already went through core_service
over the binding, so none of them changes. The destructor stops that
runtime, processModule goes over its private channel, and
onRuntimeExit() hears of an exit nobody asked for.

With separateProcess off the runtime runs in the host's process, as
before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dlipicar
dlipicar force-pushed the feat/drop-legacy-mode branch from b389bd4 to 0dc0adc Compare October 3, 2026 12:47
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dlipicar
dlipicar force-pushed the feat/runtime-process branch from e106edb to 1cb7a74 Compare October 3, 2026 12:48

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant