* chore: add logos-delivery-module and logos-delivery-demo submodules
Register the delivery module and its demo UI app as flake submodules:
- Add both as git submodules under repos/
- scripts/ws: new "Delivery" section in the REPOS array (flake repos)
- flake.nix: input blocks with follows
- logos-delivery-module follows logos-module-builder + nix-bundle-lgx
(external logos-delivery / rln input left un-followed)
- logos-delivery-demo's delivery_module input follows logos-delivery-module
- nix/dep-graph.nix: matching dependency-graph entries
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore: bump logos-libp2p-module to latest master
Bump the submodule 8ba1a52 -> 31ecb52 (latest master). The new revision
adds two workspace-dependency inputs (logoscore-cli, package-manager) that
the openmetrics e2e drives, so register the matching follows and refresh
the dep-graph entry:
- flake.nix: pin -> 31ecb52; add inputs.logoscore-cli -> logos-logoscore-cli
and inputs.package-manager -> logos-package-manager follows
- nix/dep-graph.nix: deps/follows updated to match (hasTests stays true)
External inputs (vacp2p/nim-libp2p, openmetrics-module) are left un-followed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Registers the EVM multi-chain wallet — six Logos modules plus the
fail-closed net-proxy crate — as workspace submodules + flake inputs so
they build/test through `ws` with the rest of the tree. All seven are
pinned to their merged `main`.
logos-evm-net-proxy f1a5564 (Rust crate; fail-closed RPC chokepoint)
logos-evm-keystore-module 0419b73 (Rust cdylib module)
logos-evm-eth-rpc-module de295ef (Rust cdylib module, concurrency:multi)
logos-evm-token-list-module 283e711 (Rust cdylib module)
logos-evm-uniswap-module e06d777 (Rust cdylib module, concurrency:multi)
logos-evm-wallet-backend-module 394e3a3 (Rust coordinator + tx builder)
logos-evm-wallet-ui 033e74e (universal C++ QtRO+QML UI)
Wiring:
- .gitmodules: 7 submodules. dir == input name == GitHub slug
(logos-evm-*). The doctest matrix (tests-and-doctests.yml) intersects
logos-doctest-hub's repos.json names against submodule DIR names, and
the hub names must be the slug for the github.io/<slug> report URL —
so the dir has to be the slug too. (No inputToDirOverrides needed.)
- flake.nix: inputs with follows wiring every cross-dep and
logos-module-builder to the workspace's shared inputs, so an
--auto-local override of any one propagates downstream.
- scripts/ws: REPOS entries + an `evm-wallet` group. keystore +
token-list ship no committed flake.lock, so get_manual_follows()
declares their module-builder dep by hand.
- nix/dep-graph.nix: regenerated (repoInputNames is derived from it).
- flake.lock: the 7 inputs added; no existing input's rev changed.
Based off master: master's logos-module-builder (38ddf92, with the
nix.rust external-dep support these Rust cdylib modules need) is newer
than the cdylib-universal branch's pin, so master is the correct base.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Re-lands the per-module concurrent-dispatch ("concurrency: multi") SDK
stack onto the workspace. The component PRs merged to their masters on
2026-06-19 but the workspace pin (PR #86) was closed unmerged, so master
still pinned the pre-multi-dispatch protocol (9de4165, 06-12) — which has
no consumer-side resolver for the {"__logos_pending_call__"} sentinel a
`multi` module returns. Anything driving a `concurrency: multi` module
(e.g. the EVM eth-rpc / uniswap modules) gets the raw sentinel back.
Bumps the 5 coordinated inputs to their current masters:
logos-protocol 9de4165 → 4ea32a3 (adds cpp/logos_async_dispatch.h: the resolver)
logos-cpp-sdk f032cf2 → aea29d3 (multi-dispatch IPC layer)
logos-qt-sdk 8123692 → cdf077c (multi glue + QThread worker fix#6)
logos-rust-sdk 34458a1 → eff1ad5 (multi scaffold + async C-ABI)
logos-module-builder 38ddf92 → 7bcd2de (concurrency flag codegen)
nixpkgs / logos-nix unchanged (no Qt-version cascade). Every downstream
repo rebuilds against the new stack via `follows`; flake.lock + the 5
gitlinks bumped so `ws test --all` and the doctest `--release-for`
pinning both exercise the same state.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The nightly bump surfaced two harness failures (not failing doctests) in
the reusable tests-and-doctests pipeline:
- logos-execution-zone-module failed at checkout: the doctest leg hardcoded
`repository: logos-co/<name>`, but this suite lives under the
`logos-blockchain` org, so checkout 404'd (git exit 128). The `setup` job
now parses each submodule's owner from its .gitmodules URL and carries it
through the matrix; the leg checks out `<owner>/<name>`.
- logos-logoscore-cli failed at "Discover doctest specs": it now passes its
specs via a bash array (`SPECS=(doctests/*.test.yaml)` + `"${SPECS[@]}"`,
for macOS bash 3.2 portability) instead of inlining the glob on the
`-- run` line, so the parser matched zero `.test.yaml` tokens and exited 1.
Discovery now resolves `${NAME[@]}` references back to the array's tokens
before matching. Inline-glob repos are unaffected.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
The nightly-bump workflow pushed the bumped state to `nightly/bump` and
created/refreshed its PR *before* running the test pipeline, so the branch
and PR advanced even when the bump broke the build.
Restructure into test-first / gated-promote:
- `bump` stages the bumped state on a throwaway `nightly/bump-candidate`
branch instead of touching `nightly/bump` or the PR. Outputs the commit
sha + changed repos.
- `tests-and-doctests` runs the reusable pipeline against that candidate
(reports still publish under nightly/<date>/, team still pinged on
failure via notify-team).
- new `promote` job, gated on `needs.tests-and-doctests.result == 'success'`,
fast-forwards `nightly/bump` to the tested commit and opens/refreshes the
PR. On any test failure it is skipped, leaving `nightly/bump` and its PR
untouched and the candidate branch for inspection.
The reusable pipeline's per-suite PR comment (via pr-number) is dropped
since no PR exists at test time; the promoted PR body links to the full
doc-test report index instead.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
logos-module-builder 03ad946 → f7452d9 (#127 merged to master)
Adds the nix.rust metadata block so Rust cdylib modules can declare external
system build deps for their crate compile. Validated green via the full
Tests-and-Doctests matrix (run 27652207133) at the pre-merge commit; the merged
master tree is identical (same flake.lock narHash).
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Advance the two repos that add the `.#generate` module output to their
merged masters:
logos-plugin-qt 3aefbc5 → dca52b9 (#13: backend generate mode)
logos-module-builder a646725 → 233a9b6 (#123: `.#generate` on every C++/UI-backend module)
logos-plugin-qt + logos-plugin-core move together (module-builder follows
logos-plugin-qt).
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: pin cdylib-universal landing — cpp-sdk#88 + plugin-qt#11/#12 + module-builder#121/#122 + dev-boost#11
Advance the four repos that carry the universal→cdylib migration to their
merged masters:
logos-cpp-sdk d1d341f → 6761540 (Lp api-style, lidl_gen_cdylib, header-to-lidl)
logos-plugin-qt 650ecfa → 3aefbc5 (apiStyle lp for universal core; glue emission)
logos-module-builder 24cec35 → a646725 (universalCodegen via cdylib; headers-lp)
logos-dev-boost 52c4116 → 277fa49 (scaffold.ts drops obsolete --from-header)
Universal modules now build as header-first cdylibs (LIDL derived from the
impl header), proving full source + load/call ABI compatibility through the
new module builder. Both plugin-qt inputs (logos-plugin-qt + logos-plugin-core)
move together.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump dev-boost to 12758ab (scaffold universal CMakeLists fix, #12)
dev-boost#12 drops the stale generated_code/<name>_qt_glue.h +
<name>_dispatch.cpp lines from the scaffolded universal-module CMakeLists
(LogosModule.cmake globs generated_code automatically). Fixes the only failing
job on the cdylib-universal landing gate (doctest logos-dev-boost, both OSes);
all other jobs — ws test --all + every other doctest — were already green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump lgpd chain pins so plain builds get the guarded downloader
Scoped 4-input bump (cpp-sdk, package-downloader,
package-downloader-module, package-manager-ui):
- logos-cpp-sdk 25c88f4d -> 800f65a: provides logos_module_context.h
which package_downloader_impl.h now requires (PR #61).
- logos-package-downloader dea6503 -> 96371ef: defensive objOrEmpty /
is_object guards so a null in index.json no longer throws
type_error.306.
- logos-package-downloader-module 5d4bc2a -> ab4169f: legacy
releaseTag method removal + resolver-fence failures attributed to
the requested package(s).
- logos-package-manager-ui f3f9a03 -> b21c9ba: multi-repo API
migration + nameless-error-row defense-in-depth.
A plain `nix build .#logos-basecamp` (no --override-input) now links
the guarded lgpd; verified the closure's libpackage_downloader_lib
carries the post-guard code. Edited the 4 url= lines by hand rather
than `ws sync-graph` (which would have bumped 17 unrelated submodule
pins); a later sync-graph run will reconcile the rest.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Add logos-protocol: workspace wiring for the protocol extraction
New Foundation repo logos-protocol hosts the transport/token/IPC layer
extracted from logos-cpp-sdk behind the versioned lp_* C ABI.
- .gitmodules + repos/logos-protocol submodule
- flake.nix: logos-protocol input; logos-cpp-sdk follows logos-protocol;
cpp-sdk pinned to its PR branch (bump at merge)
- flake.lock: lock the two changed inputs
- nix/dep-graph.nix: protocol entry + cpp-sdk dep edge (surgical; full
sync-graph regeneration deferred until the nightly-bump drift settles)
- scripts/ws: REPOS entry (Foundation) + core group
* Phase 2-4 wiring: logos-qt-sdk submodule + Qt-split repins + qt-sdk follows
- repos/logos-qt-sdk submodule (Foundation; core group; ws REPOS)
- flake.nix: logos-qt-sdk input (temporarily over ssh while the repo is
private); repins to the qt-split branch heads of cpp-sdk/protocol/
module-builder/plugin-qt/liblogos/module/module-client/basecamp;
follows for the retargeted repos' new logos-protocol/logos-qt-sdk
inputs (incl. logoscore-cli)
- dep-graph: qt-sdk node + new edges (surgical; full sync-graph still
deferred until the nightly-bump drift settles)
* fix: repin logos-module-builder to 59983c0 (restored universal-module cmake path)
The previous module-builder pin's LogosModule.cmake sync dropped the
generated_code glob / metadata copy / api-style blocks, so universal
modules built without Qt-plugin glue and capability_module failed to
load, breaking all cross-module IPC in the integration gate.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: repin gate inputs — logoscore-cli P2 head, test-modules/capability master
logoscore-cli was pinned pre-retarget (5a1cf746, before the qt-split link
commit); test-modules/capability rode stale nightly revs. Pin all three so
the integration gate runs on committed pins, no overrides.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: repin logos-test-modules to qt-split branch (unit-test harness retarget)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: logos-qt-sdk is public — switch flake input from git+ssh to github:
Same rev (b64f9102), just the fetcher: anonymous tarball fetches work now,
so CI needs no ssh key or API token for this input.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump module-builder pin — inner mkLogosModuleTests import fix
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: register logos-lidl in .gitmodules, drop leaked openmetrics gitlink
The Phase 2-4 wiring commit swept two local gitlinks into the tree:
repos/logos-lidl (a real chain repo — now properly registered, pinned at
the feat/lidl-frontend head) and repos/openmetrics-module (an untracked
local checkout that exists neither on master nor in .gitmodules —
removed). 'git submodule update --init' died on the unregistered paths,
killing every job in the new tests-and-doctests workflow at setup.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: align submodule gitlinks with flake pins
The tests-and-doctests workflow runs against the checked-out gitlink
state, so gitlinks must match the flake pins: module-builder → cae33ce
(inner mkLogosModuleTests import fix), module-client → 2bf380e (facade
fail-fast fix), and chat-ui/storage-module/nix-bundle-dir back to
master's pointers (drifted in the bump merge resolution).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: pin logoscore-py tagged-bytes branch — the one red in ws test --all
The protocol's canonical {"_bytes"} result form leaked through the
python client's call() and its repr went back over the wire
(test_return_bytes_size: 21 != 5). Fixed in
logos-co/logos-logoscore-py#4; temporary pin, drop at merge.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: pin logoscore-py tagged-bytes branch — the one red in ws test --all
The protocol's canonical {"_bytes"} result form leaked through the
python client's call() and its repr went back over the wire
(test_return_bytes_size: 21 != 5). Fixed in
logos-co/logos-logoscore-py#4; temporary pin, drop at merge.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump builder (QML-path arg fix) + cpp-sdk (doctest logoscore pin)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump basecamp (vmr/liblogos lock fixes) + cpp-sdk (nested-builder doctest overrides)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump cpp-sdk — doctest overrides applied to all three specs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump vmr (unit-test link fix) + pin standalone-app retarget branch
ws test --all reached both once the QML eval fix landed: vmr's
tests/CMakeLists.txt still linked the dead logos_sdk archive, and the
workspace still pinned standalone-app master (the retarget lives on
logos-co/logos-standalone-app#20).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump standalone-app — master merge brings the 3-arg spawn caller
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump basecamp — diagnostic 300s first-action waits
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump basecamp — design-system/qt-mcp lock fixes, drop diagnostic waits
* chore: bump chain pins — rust-sdk cdylib adoption closes the ipc-test floor
liblogos cf793ea (authToken property for the cdylib glue) · logoscore
616cb07 · protocol 1ca34a0 (integers stay integers across the C ABI) ·
qt-sdk 019ac36 (lock) · rust-sdk d85d49b (fixtures on the cdylib path:
one protocol stack + logos_module_accept_token handshake — ipc-test
green locally).
* chore: bump rust-sdk — rust-provider doctest ported to the cdylib path
* chore: bump tutorial — outcome-agnostic bad-bind doctest step
* chore: bump tutorial — wait_for gate before the Modules click
* chore: bump tutorial — Settings-first Modules navigation
* chore: call-error channel for typed wrappers — pins + tutorial demo
protocol 6492494 (CallError + err-out invoke overloads; lp_invoke
returns LP_ERR_UNAVAILABLE + canonical error JSON for unacquirable
targets) · cpp-sdk bd24fb6 (generated wrappers take a trailing
logos::CallError* = nullptr; dispatch catch-alls) · qt-sdk/builder/
rust-sdk lock layer · tutorial 65da5c3 (sumVia demonstrates the
out-param; returns -1 on a failed bind call).
* chore: bump rust-sdk + cpp-sdk pins for the parity doctest set
logos-rust-sdk -> f263e7c: cross-language feature-parity doctest
(contract-first C++ cdylib + Rust-first module + universal C++ consumer,
typed calls/events in both directions), lidl-gen parity features
(--from-rust, bind, typed event decode, dep clients, on_context_ready),
ipc fixtures already on the cdylib path.
logos-cpp-sdk -> 810e7c6: generated-wrapper error channel
(logos::CallError out-param) + generated onInit ordering fix (modules
aggregate + event wiring before onContextReady so universal modules can
subscribe from the hook).
Gitlinks aligned with the pins.
* ci: generate a root index on gh-pages so the Pages root stops 404ing
The publish job writes each run's reports under branch/<name>/ or
nightly/<date>/ (peaceiris keep_files merge) and generates an index one
level down at <base>/index.html — but nothing ever wrote site/index.html,
so https://logos-co.github.io/logos-workspace/ itself returned 404 while
every deep report link worked.
The arrange step now enumerates the report sets already published on
gh-pages (shallow clone of the branch; tolerant of it not existing on the
first run), merges in the current run's base, and writes a root index
grouping them as Nightly / Branches.
* ci: don't let a failed cachix post-step push fail a green test job
Run 27421167515: ws test --all finished 21 passed / 0 failed, every doctest
suite green on both platforms — but the job (and run) went red because the
cachix action's post step failed pushing some store paths (exit 3). The
cache is an optimization; continue-on-error on the setup step covers its
post hook too.
* chore: bump rust-sdk to 713abbc — multi-spec doctest workflow
The suite's Doc-Tests workflow now lists BOTH specs in its run block, so
the tests-and-doctests pipeline (which parses that block for spec
discovery) picks up the cross-language-composition doctest alongside
rust-provider-module. Verified green on both platforms in the rust-sdk
repo (run 27424612866).
* chore: bump builder + rust-sdk for the composition doctests + load-time context hook
logos-module-builder -> 48b7ff6 (feat/cdylib-interface): the two
cross-language composition doctests now live HERE (moved from rust-sdk —
they exercise the builder's authoring surface across both SDKs), plus the
mirror scenario (LIDL-first Rust -> pure C++ -> pure Rust) is new. Lock
carries cpp-sdk 2642133: the cdylib ready-latch — the context hook now
fires at module LOAD (once context + emit callback are wired; tokens
seeded before context in the glue), matching universal C++ semantics.
logos-rust-sdk -> b145bbd: EventSubscription (typed event subscriptions
own their client lifetime — a bare Receiver used to die silently with the
temporary typed client), the matching scaffold ready-latch, and the
composition doctest moved out.
Gitlinks aligned.
* fix: correct rust-sdk pin sha + complete the relock
The previous commit carried a mistyped rust-sdk rev (nonexistent object)
and consequently a stale flake.lock — the relock had 404'd. Pins now
actually resolve: builder 48b7ff6, rust-sdk b145bbd758a.
* chore: bump pins for the qt-generator split
ALL Qt glue emission moved from logos-cpp-sdk's generator into
logos-qt-sdk's NEW logos-qt-generator (per the Qt-confinement invariant —
generated Qt code is the Qt layer's product):
- logos-qt-sdk -> c9e3130: hosts logos-qt-generator (universal glue,
cdylib glue, NEW ui backend), compiling the LIDL frontend distributed
by cpp-sdk (share/lidl-frontend) so the two tools share one parser.
- logos-module-builder -> c115998: glue invocations switched to
logos-qt-generator; NEW uiCodegen (type=ui_qml + interface=universal —
the universal authoring model for UI plugin backends, typed deps/events
via modules() + onContextReady at load); both composition doctests
green on the split pipeline (23/23, 25/25).
- logos-cpp-sdk -> a84b641 (workspace pin stays on the qt-free branch;
the deletion rev 6ecef82 rides the builder/qt-sdk locks): generator now
emits ONLY Qt-free outputs.
- logos-rust-sdk -> 1c5e65b: builder locks at the split heads.
Gitlinks aligned.
* fix: workspace cpp-sdk pin must carry the lidl-frontend distribution
The follows wiring resolves the builder's and qt-sdk's cpp-sdk to THIS
pin — and logos-qt-generator compiles cpp-sdk's share/lidl-frontend,
which lives on feat/cdylib-authoring (6ecef82, a superset of the qt-free
head pinned before). At a84b641 the frontend was absent, so the qt
generator had no sources and every universal-module build failed in the
gate. Pin moves to the cdylib-authoring head (also the rev the builder's
own lock carries).
* chore: land cpp-sdk master f5a127dd across the chain
The one master commit since the chain cut ('use updated capability
module', cpp-sdk#85): its three files moved to logos-protocol in P1, so
the typed-requestModule refactor is PORTED there (protocol 3de5398,
111/111) and cpp-sdk's chain branches merge master recording the
supersession (modify/delete -> deleted). Locks cascaded:
protocol 3de5398 · cpp-sdk 9044f1b (master merged + protocol pin) ·
qt-sdk c1d5a06 · builder c849834 (also carries the master-merge
propagation from #113's unblocking) · rust-sdk 27e3526. Gitlinks aligned.
* chore: bump pins — the universal UI backend ships
type=ui_qml + interface=universal: a UI module backend is now ONE clean
impl class deriving LogosModuleContext — typed dependency callers, typed
event subscriptions, bind_<interface> binders, and onContextReady, with
the .rep and all plugin glue generated (logos-qt-generator --backend ui).
Proven end to end by module-builder's new ui-typed-backend doctest (4/4:
typed call QML→glue→impl→core module; typed event captured by the
onContextReady subscription surfacing in the view). Legacy
initLogos(LogosAPI*) UI plugins are untouched.
- logos-plugin-qt 9146087: LogosModule.cmake compiles the generated glue
- logos-qt-sdk 6b5e283: glue emits name/version literals; out-of-line
ctor (incomplete LogosModules in moc TUs); CI installer fix
- logos-module-builder b398972: uiCodegen + the doctest + locks
- logos-cpp-sdk a8b8400 / logos-protocol 10cf0b9: master-merge +
frontend backport + typed-requestModule heads, CI workflows
Gitlinks aligned.
* chore: bump pins - UI authoring split rework + docs sweep
The universal UI backend lands in its final shape: the USER writes the
.rep (full QtRO surface) + the *Backend class (deriving SimpleSource +
LogosModuleContext for onContextReady/modules()); ONLY the *Plugin and
*Interface classes are generated. ui-typed-backend doctest 4/4 on the
new split, with lastTick as a .rep PROP fed straight from the typed
event subscription (QML auto-sync, no polling).
Also: docs sweep across the chain (rust-sdk binds lp_* directly -
module-client framing retired from its README/source docs; qt-sdk README
documents logos-qt-generator; builder/cpp-sdk READMEs aligned).
qt-sdk 8f33a86 / builder 104ee26 / cpp-sdk a90a37f / rust-sdk 605c90a;
gitlinks aligned.
* chore: cpp-sdk#83 merged — chain pins advance to masters + refreshed heads
protocol 9de4165 (master) · cpp-sdk f065223 (cdylib branch atop master) ·
qt-sdk 722e590 · liblogos 156a751 · logoscore-cli e428985 · module-client
55544cb · builder 8786e9a (cdylib-interface atop qt-sdk-split c567bbc) ·
basecamp 5d04fca · rust-sdk 2732a91. Every head test-verified pre-push.
* chore: qt-sdk#1 + lidl#2 merged — pins advance to masters + refreshed heads
qt-sdk 8d0e5d9 (master) · lidl gitlink 8786eca (master) · liblogos 7cb5284 ·
module-client a307ad6 · logoscore-cli 60db252 · builder 5611f61 (cdylib-iface
atop qt-sdk-split 4631ba8) · basecamp 6fc7172 · rust-sdk c8808b9. All
lock-rev swaps to content-identical inputs; every head test-verified.
* chore: builder#113 merged — builder#119 rebased onto master (a007d8e), rust-sdk follows (e37d257)
* chore: plugin-qt#10 merged — pins to master (650ecfa); builder 5fe8ef4, rust-sdk 503d4d8 follow
* fix: drop QJson from liblogos Qt-free core (user-caught) + pin cascade
logos-module de634ce exposes rawMetadataJson; liblogos 65f7b18 parses the
protocol gate with nlohmann — zero Qt includes in src/logos_core outside
runtime_qt. Consumers follow: logoscore-cli b66a41f, basecamp 508319e,
rust-sdk 2f211e3.
* chore: logos-module b42805d (result-lm untracked) + liblogos 7917251
* chore: liblogos#142 + logos-module#16 + module-client#5 merged — pins to masters
liblogos 050f2d3 · logos-module a3e288a · module-client 7abdc8b (all master
squashes, byte-identical to chain heads). Consumers re-verified: logoscore-cli
888791d, basecamp fbcacc5, rust-sdk fabdb17.
* chore: logoscore-cli#43 + basecamp#214 + rust-sdk#11 + cpp-sdk#84 merged — pins to masters
Only builder#119 (1aa7695: result out-link cleanup, deps to masters, specs
cargo-pin rust-sdk master) and this PR remain in the train.
* chore: builder#119 merged — every chain pin now at master
All 11 chain inputs point at master squashes. This PR is the last car of
the P2–P4 train.
* chore: regenerate dep-graph.nix + flake.nix auto-inputs via ws sync-graph
The hand-merged dep-graph drifted from the canonical generator output
(entry ordering + repos whose masters absorbed the chain gained
protocol/qt-sdk deps). All submodules aligned to gitlinks first so the
generator sees exactly what CI sees. No pin changes.
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore: bump lgpd chain pins so plain builds get the guarded downloader
Scoped 4-input bump (cpp-sdk, package-downloader,
package-downloader-module, package-manager-ui):
- logos-cpp-sdk 25c88f4d -> 800f65a: provides logos_module_context.h
which package_downloader_impl.h now requires (PR #61).
- logos-package-downloader dea6503 -> 96371ef: defensive objOrEmpty /
is_object guards so a null in index.json no longer throws
type_error.306.
- logos-package-downloader-module 5d4bc2a -> ab4169f: legacy
releaseTag method removal + resolver-fence failures attributed to
the requested package(s).
- logos-package-manager-ui f3f9a03 -> b21c9ba: multi-repo API
migration + nameless-error-row defense-in-depth.
A plain `nix build .#logos-basecamp` (no --override-input) now links
the guarded lgpd; verified the closure's libpackage_downloader_lib
carries the post-guard code. Edited the 4 url= lines by hand rather
than `ws sync-graph` (which would have bumped 17 unrelated submodule
pins); a later sync-graph run will reconcile the rest.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Add logos-protocol: workspace wiring for the protocol extraction
New Foundation repo logos-protocol hosts the transport/token/IPC layer
extracted from logos-cpp-sdk behind the versioned lp_* C ABI.
- .gitmodules + repos/logos-protocol submodule
- flake.nix: logos-protocol input; logos-cpp-sdk follows logos-protocol;
cpp-sdk pinned to its PR branch (bump at merge)
- flake.lock: lock the two changed inputs
- nix/dep-graph.nix: protocol entry + cpp-sdk dep edge (surgical; full
sync-graph regeneration deferred until the nightly-bump drift settles)
- scripts/ws: REPOS entry (Foundation) + core group
* fix: pin logoscore-py tagged-bytes branch — the one red in ws test --all
The protocol's canonical {"_bytes"} result form leaked through the
python client's call() and its repr went back over the wire
(test_return_bytes_size: 21 != 5). Fixed in
logos-co/logos-logoscore-py#4; temporary pin, drop at merge.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: real cpp-sdk P1 sha + completed relock
The previous commit carried a mistyped cpp-sdk rev and a silently failed
relock. Pins now resolve: protocol 1e4bc72, cpp-sdk 066db38d.
* chore: protocol#2 merged — pins advance to protocol master
protocol -> 29afbac (master, the merged extraction + typed-requestModule
port); cpp-sdk -> b309aa8 (its lock repointed to protocol master).
Gitlinks aligned.
* chore: cpp-sdk#82 merged — pin advances to cpp-sdk master
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* ci: run doc-tests in nightly bump, publish reports, notify on failure
Extend the nightly bump workflow so doc-tests run under the same commit
pinning as the nix tests, publish a consolidated report each run, and ping
the logos-core team on any failure.
- Capture each repo's exact bumped SHA as job outputs, then run its doctest
specs in 8 parallel jobs (ubuntu + macos) checked out at that SHA and
passed via --release-for, so doc-tests build against the identical commit
the nix tests ran against.
- Aggregate every suite x OS report into a dated gh-pages site
(nightly/<date>/<suite>/<os>/) with a top-level index table, and post the
links as a comment on the nightly PR.
- Add a notify-on-failure job that fans in from all jobs and pings
@logos-co/logos-core via a reused tracking issue when anything fails
(an issue, not a PR comment, since a build/test failure aborts before the
PR is created).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* ci: add logos-tutorial doctests to nightly run
logos-tutorial keeps its specs under tests/ (not doctests/) and runs them
from ci.yml rather than a dedicated doctests.yml, so it was missed. Add a
doctest-tutorial job mirroring the tutorial's own CI: checkout at the bumped
SHA and run the three executed leaves (cpp-ui-app, composing-modules,
interface-dependencies) with --continue-on-fail. No --release-for — the
tutorial doesn't pin itself; the checkout SHA pins the spec content.
Wire it into the report site (SUITES) and both fan-in jobs (publish,
notify-on-failure).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* ci: drive nightly doctests from logos-doctest-hub repos.json
Replace the 9 hardcoded per-repo doctest jobs with a single dynamic matrix
sourced from the central registry (github:logos-co/logos-doctest-hub,
repos.json). This keeps the nightly run in sync with the hub automatically and
picks up suites the hardcoded list was missing (accounts-module, wallet-module,
capability-module, dev-boost, logos-doctest).
How it works:
- nightly-bump fetches repos.json and emits a {name, sha} matrix — sha is the
bumped submodule commit when the repo is in the workspace, else "" (run
against the repo's default branch; e.g. openmetrics-module, logos-doctest are
not submodules).
- A single `doctest` matrix job (repo x os) checks out each repo at its SHA,
parses that repo's OWN publish workflow to recover exactly the specs its CI
runs (resolving globs, honouring curated subsets like tutorial's 3-of-5) and
whether it needs host graphics libs (detected, not hardcoded), then runs them
pinned via --release-for <name>=<sha>.
- publish-doctest-reports discovers suites/OSes from the uploaded artifacts (no
hardcoded suite list) and builds the dated gh-pages index + PR comment.
- notify-on-failure now fans in from the matrix job; the comment notes to open
the run to see which suite/OS legs failed.
The embedded spec-extraction mirrors logos-doctest-hub/refresh-repos.py, so the
nightly executes precisely what each repo's CI executes. Hardened the matrix and
discover steps with `set -euo pipefail` so a failed fetch/parse fails loudly
rather than yielding an empty matrix.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* ci: restrict nightly doctests to workspace submodules
Filter the hub-derived matrix to repos that are also workspace submodules
(source of truth: .gitmodules). These are the repos the nightly bump pins and
the nix tests cover, so their doc-tests can run against the exact same commit.
Hub repos that aren't submodules (openmetrics-module, logos-doctest) are
skipped and logged in the step summary. 11 suites covered.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* ci: pin the whole bumped workspace in doctest runs, not just the suite repo
Verifying run 27298332300 showed the doctest override was only configured for
each suite's OWN repo (--release-for <suite>=<sha>). Every dependency a spec
pulled via {release} fell back to latest master instead of the bumped commit —
e.g. the tutorial built `github:logos-co/logos-basecamp` unpinned and its
basecamp-launch test failed on both OSes, while the basecamp suite (pinned to
the bumped SHA) passed in the same run.
That diverges from `ws test --all --workspace`, which overrides every workspace
repo. Fix: nightly-bump now emits an `overrides` output — `--release-for
<name>=<sha>` for EVERY workspace submodule (not just the doc-test suites, so
deps like logos-module-builder that aren't suites are covered too) — and every
doctest run passes it. --release-for is repeatable and a no-op for repos a spec
never references, so each suite now builds its whole closure against the bumped
set. (Repos with no workspace commit, e.g. logos-qt-mcp, stay on latest.)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* ci: link the published report page in the failure issue
The notify-on-failure comment now includes the nightly doc-test report URL
(https://<owner>.github.io/<repo>/nightly/<date>/) so the team can jump straight
to the reports from the tracking issue. The publish job exposes its date/found
as job outputs; the link is omitted when no reports were published (e.g. the run
failed before the publish step).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* ci: extract tests+doctests into a reusable, manually-launchable pipeline
Factor the nix tests + doc-tests out of nightly-bump into a reusable workflow
(tests-and-doctests.yml) that runs against whatever workspace state a given ref
pins — no bumping of its own. It's both `workflow_call` (used by the nightly)
and `workflow_dispatch` (run it on any branch from the Actions tab).
This gives the two requested flows from one body of logic:
• Nightly: nightly-bump bumps submodules, pushes `nightly/bump`, opens the PR,
then calls the pipeline with ref=nightly/bump (reports under nightly/<date>,
comments on the PR, pings logos-core on failure).
• Manual: bump some modules in a branch, push, then run "Tests and Doc-tests"
on that branch — it tests the whole workspace state of that branch (reports
under branch/<name>, results in the run summary, no team ping).
Pipeline jobs: setup (matrix + workspace-wide --release-for overrides from the
ref's pinned submodule commits), nix-tests (ws test --all --workspace), doctest
(matrix, per-suite spec discovery), publish-reports (gh-pages + summary + opt.
PR comment incl. nix-test result), notify-on-failure (gated on notify-team).
nightly-bump shrinks to: bump → sync-graph → flake.lock → push/PR → call the
pipeline. Also fixes a latent self-referential `steps.disco` echo (always blank;
flagged by actionlint) by moving it to its own step. Validated with actionlint.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Under `ws test --all --workspace`, the workspace overrides each repo's deps
via `follows` so the workspace versions propagate. For logos-rust-sdk that
swaps its pinned logos-module-builder/c_ffi (-> logos-cpp-sdk/c_ffi) for the
workspace's master cpp-sdk — which lacks the `support c-ffi` codegen
(cpp-sdk commit d98e2a9, only on the `c_ffi` branch, never merged to master).
The caller module's generated code then fails to compile:
fatal error: sdk_test_provider_module_api.h: No such file or directory
Add a `follows_exempt` list and skip auto-follows generation for those repos,
so sync-graph emits `follows = {}` for logos-rust-sdk and it builds from its
own c_ffi-based lock (the configuration that passes standalone). Combined with
the merged cargoLock 403 fix, this takes the rust-sdk ipc-test green in the
bump. Revert once c-ffi lands on cpp-sdk master.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: bump lgpd chain pins so plain builds get the guarded downloader
Scoped 4-input bump (cpp-sdk, package-downloader,
package-downloader-module, package-manager-ui):
- logos-cpp-sdk 25c88f4d -> 800f65a: provides logos_module_context.h
which package_downloader_impl.h now requires (PR #61).
- logos-package-downloader dea6503 -> 96371ef: defensive objOrEmpty /
is_object guards so a null in index.json no longer throws
type_error.306.
- logos-package-downloader-module 5d4bc2a -> ab4169f: legacy
releaseTag method removal + resolver-fence failures attributed to
the requested package(s).
- logos-package-manager-ui f3f9a03 -> b21c9ba: multi-repo API
migration + nameless-error-row defense-in-depth.
A plain `nix build .#logos-basecamp` (no --override-input) now links
the guarded lgpd; verified the closure's libpackage_downloader_lib
carries the post-guard code. Edited the 4 url= lines by hand rather
than `ws sync-graph` (which would have bumped 17 unrelated submodule
pins); a later sync-graph run will reconcile the rest.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* ws: drop logos-calc-* tutorial sub-flakes (removed from logos-tutorial master)
The calc tutorial examples moved out of the top level into `outputs/` on
logos-tutorial master (the #63 calc_aggregator restructure), so
`repos/logos-tutorial/logos-calc-module` (and -ui / -ui-cpp) no longer exist
once the nightly bump checks out current master. `ws test --all` then reports
them as "not cloned" and counts each as a failure.
Remove the three sub-flake entries from the REPOS table and their
get_base_repo_url cases. `ws sync-graph` regenerates flake.nix's AUTO-INPUTS
and nix/dep-graph.nix from this table, so those generated files drop the calc
inputs on the next sync (which the nightly workflow runs before building).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>