Skip to content

gate: pin the module-identity chain (9 repos) - #101

Draft
dlipicar wants to merge 4 commits into
feat/sdk-codegen-phase-afrom
gate/identity-methods
Draft

gate: pin the module-identity chain (9 repos)#101
dlipicar wants to merge 4 commits into
feat/sdk-codegen-phase-afrom
gate/identity-methods

Conversation

@dlipicar

@dlipicar dlipicar commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Integration gate for the module-identity chain — every module exposes name() and version(), autogenerated from its metadata.

The chain

repo pin PR
logos-lidl dd34401 logos-co/logos-lidl#10 — the derived-identity pass
logos-protocol 40180d1 logos-co/logos-protocol#61 — proxy fallback + listing
logos-cpp-sdk 1e516c0 logos-co/logos-cpp-sdk#141 — cdylib dispatch + consumer wrappers
logos-qt-sdk 9e5ddf1 logos-co/logos-qt-sdk#35 — Qt consumer wrappers
logos-rust-sdk eb46a2f logos-co/logos-rust-sdk#43 — Rust provider + consumer
logos-module-builder 378bdba catch-up
logos-plugin-qt 9b2c64e catch-up
logos-test-modules 626fbaa catch-up
logos-capability-module c670f7f catch-up

logos-protocol is independent of the other four and can merge on its own.

Why four catch-up pins

Each identity PR is branched off its repo's master, and qt-sdk master has removed --backend cdylib from logos-qt-generator (it moved to logos-qt-host-generator in logos-plugin-qt). The module-builder this branch pinned still calls the removed flag, so pinning qt-sdk without module-builder fails every universal module build. plugin-qt follows because its master needs TokenManager::forIdentity, which arrived in protocol master.

module-builder master then refuses a core module declaring no interface — and both logos-test-modules and logos-capability-module had some until the 2026-08-20 merge wave migrated them. Both pins are required, not opportunistic: a stale one fails at build time with that rejection and never at eval, so neither is visible by reading the flake.

Why this targets feat/sdk-codegen-phase-a and not master

Workspace master pins logos-nix e637a1f (March), which predates lib.forAllTargets. Every repo master in this chain needs it, so these pins do not even evaluate on master. phase-a carries logos-nix 6e0f4a7, which has it. Not a preference — master cannot hold these pins.

Status: 18 of 21 test-module targets build

All three failures were checked against a control with all five identity repos swapped for their plain masters. Every one reproduces, so none is caused by this chain:

target symptom control
test_fullapi_ext_cpp echoOptional: an optional RETURN (-> ?T) is not supported reproduces with qt-sdk at master
test_qml_backend no member named 'add' in 'TestBasicModule' reproduces with qt-sdk at master
tests (the suite) 24 assertions: every value-returning call yields an empty .result while status is ok reproduces with all five at master — identical 24 failures, identical set

The third is the one worth attention: status: ok with an empty result points at the result-serialization path in the call envelope rather than at dispatch. It could not be bisected further by downgrading logos-protocol, because plugin-qt master needs TokenManager::forIdentity from protocol master — the two move together.

Any repin of this workspace onto current masters meets all three, independently of this chain. Draft for that reason: the reds are upstream, and this gate is what makes them visible.

Verified

test_basic_module (previously blocked by the interface-less rejection), test_basic_module_cpp, test_interface_module_cpp and 15 others build on these pins, with consumer wrappers carrying QString name(...) / QString version(...).

🤖 Generated with Claude Code

dlipicar and others added 2 commits August 20, 2026 13:03
Pins the five identity PRs plus the two catch-up inputs they require:

  logos-lidl           dd34401  #10   the derived-identity pass
  logos-protocol       40180d1  #61   proxy fallback + listing
  logos-cpp-sdk        1e516c0  #141  cdylib dispatch + consumer wrappers
  logos-qt-sdk         9e5ddf1  #35   Qt consumer wrappers
  logos-rust-sdk       8425301  #43   Rust provider + consumer
  logos-module-builder 378bdba        catch-up, see below
  logos-plugin-qt      9b2c64e        catch-up, see below

WHY THE TWO CATCH-UP PINS. Each identity PR is branched off its repo's master,
and qt-sdk master has already removed `--backend cdylib` from logos-qt-generator
(it moved to logos-qt-host-generator in logos-plugin-qt). The module-builder
this branch pinned still calls the removed flag, so pinning qt-sdk without
pinning module-builder fails every universal module build with "--backend cdylib
was removed". plugin-qt then has to come along because protocol master's
TokenManager::forIdentity is what its master needs.

WHY THIS IS ON feat/sdk-codegen-phase-a AND NOT master. Workspace master pins
logos-nix e637a1f (March), which predates lib.forAllTargets; every repo master
here now needs it, so the same pins do not even EVALUATE on master. phase-a
already carries logos-nix 6e0f4a7, which has it. That is the empirical answer to
"which branch carries the gate".

NOT MERGEABLE AS IS, and the reason is pre-existing rather than anything in the
identity work. module-builder master refuses a core module that declares no
`interface` -- "NO glue would be generated and every call into it would fail at
runtime rather than at build time" -- and logos-test-modules still ships six:

  dummy_module_000000, test_basic_module, test_extlib_module,
  test_fullapi_qtproxy, test_ipc_module, test_ipc_new_api_module

Those need migrating to interface "universal" (or "cdylib") before this gate can
go green. That is the SDK-stack reconciliation, not this feature.

VERIFIED GREEN on these pins: test_basic_module_cpp and test_interface_module_cpp
both build, the latter emitting a consumer wrapper carrying name()/version().

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The 2026-08-20 merge wave migrated the last interface-less core modules to
interface "universal": logos-test-modules 626fbaa and logos-capability-module
c670f7f. That clears what blocked this gate -- module-builder master refuses a
core module declaring no `interface`, and both of those repos had some.

Both pins are REQUIRED, not opportunistic. A stale one fails at BUILD time with
module-builder's rejection, never at eval, so neither shows up by reading the
flake -- capability_module was found only by building it and watching the old
pin fail exactly as predicted.

Sweep over all 21 logos-test-modules targets on these pins: 18 pass. The two
failures reproduce with this branch's logos-qt-sdk swapped for plain
origin/master, so they are logos-test-modules-master vs logos-qt-sdk-master
skew, not the identity work:

  test_fullapi_ext_cpp  echoOptional: an optional RETURN (`-> ?T`) is not
                        supported -- needs `-> result`, or the check needs to
                        admit it
  test_qml_backend      no member named 'add' in 'TestBasicModule' -- the
                        consumer wrapper generated from the newly-migrated
                        test_basic_module contract no longer carries add()

Both would meet any repin of this workspace onto current masters, independently
of this chain.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@dlipicar dlipicar changed the title gate: pin the module-identity chain (7 repos) gate: pin the module-identity chain (9 repos) Aug 20, 2026
The lidl-gen round-trip spec asserted the provider backend emits '9 methods';
it is 11 with the derived identity methods. logos-rust-sdk eb46a2f.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
logos-lidl#10 landed as ae3ffe0 and logos-protocol#61 as 43cd059, so the gate
tracks their masters instead of the PR branches. cpp-sdk, qt-sdk and rust-sdk
move with their re-pointed locks.

The lidl narHash is unchanged across the merge
(sha256-WHmisUvYA8DQ2ZxSF2mM2...), so the merged tree is byte-identical to the
branch everything here was built and tested against.

Remaining in the chain: logos-cpp-sdk#141, logos-qt-sdk#35, logos-rust-sdk#43.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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