diff --git a/content/logoscore/updates/2026-08-24.md b/content/logoscore/updates/2026-08-24.md new file mode 100644 index 000000000..cd355a572 --- /dev/null +++ b/content/logoscore/updates/2026-08-24.md @@ -0,0 +1,387 @@ +--- +title: "2026-08-24 Logoscore Weekly" +--- + +# Logoscore Weekly Update — 2026-08-24 + +## Highlights + +- **The UI shell no longer holds host privilege.** Basecamp moved to one runtime per process with a UI shell that carries no host privilege, `main_ui` went back to being a plugin behind host-privileged facades, and `capability_module` was ported to a universal module sitting on a host-granted trust root — backed by a per-client token store and a host-services C ABI in the protocol [logos-basecamp#337](https://github.com/logos-co/logos-basecamp/pull/337), [#352](https://github.com/logos-co/logos-basecamp/pull/352), [logos-capability-module#24](https://github.com/logos-co/logos-capability-module/pull/24), [logos-protocol#59](https://github.com/logos-co/logos-protocol/pull/59), [logos-module-loader-qt#8](https://github.com/logos-co/logos-module-loader-qt/pull/8) +- **Protocol 0.5 and 0.6 shipped** — a module teardown surface (0.5) and caller identity (0.6), threaded through all three SDKs, both hosts and Basecamp so a module gets its chance to finish before it is torn down and a provider can resolve who is calling [logos-protocol#62](https://github.com/logos-co/logos-protocol/pull/62), [#63](https://github.com/logos-co/logos-protocol/pull/63), [#70](https://github.com/logos-co/logos-protocol/pull/70), [logos-cpp-sdk#143](https://github.com/logos-co/logos-cpp-sdk/pull/143), [#147](https://github.com/logos-co/logos-cpp-sdk/pull/147) +- **Windows bundles are published.** Basecamp, logoscore and logosctl now build and publish Windows bundles alongside Linux and macOS, and the doctest runner gained cross-platform specs (build here, run there) so the exercise half executes on real Windows [logos-basecamp#334](https://github.com/logos-co/logos-basecamp/pull/334), [logos-logoscore-cli#88](https://github.com/logos-co/logos-logoscore-cli/pull/88), [logos-doctest#14](https://github.com/logos-co/logos-doctest/pull/14), [logos-package-manager#32](https://github.com/logos-co/logos-package-manager/pull/32) +- **macOS signing and notarization pipelines** landed for logoscore-cli, lgpm and lgpd [logos-logoscore-cli#64](https://github.com/logos-co/logos-logoscore-cli/pull/64), [logos-package-manager#30](https://github.com/logos-co/logos-package-manager/pull/30), [logos-package-downloader#23](https://github.com/logos-co/logos-package-downloader/pull/23) +- **The `logos-standalone-app` lock cycle was cut**, taking the core repos from ~3,400 flake nodes to a few hundred: 3,391 → 130 in capability-module, 3,472 → 211 in liblogos, 3,390 → 360 in module-builder, 3,282 → 252 in standalone-app [logos-capability-module#25](https://github.com/logos-co/logos-capability-module/pull/25), [logos-liblogos#183](https://github.com/logos-co/logos-liblogos/pull/183), [logos-module-builder#205](https://github.com/logos-co/logos-module-builder/pull/205), [logos-standalone-app#38](https://github.com/logos-co/logos-standalone-app/pull/38) + +## Initiatives + +### Privilege separation and host-services grants + +The week's biggest structural change: privilege moved out of the UI shell and behind an explicit, per-client grant. + +- **Protocol:** per-client token store, the host-services C ABI and a container shape-check; the proxy now authorizes against a store that can only hold INBOUND tokens [logos-protocol#59](https://github.com/logos-co/logos-protocol/pull/59), [#69](https://github.com/logos-co/logos-protocol/pull/69) +- **Basecamp:** one runtime per process and a UI shell that holds no host privilege; `main_ui` back to a plugin that holds none, reached through host-privileged facades [logos-basecamp#337](https://github.com/logos-co/logos-basecamp/pull/337), [#352](https://github.com/logos-co/logos-basecamp/pull/352) +- **Capability module:** ported to a universal module over a host-granted trust root [logos-capability-module#24](https://github.com/logos-co/logos-capability-module/pull/24) +- **Hosts and SDKs:** the Qt loader delivers the grant to privileged modules instead of carrying JSON across argv; Rust's generator emits `logos_module_grant_host_services` (the missing 11th export) and calls it through the public API [logos-module-loader-qt#8](https://github.com/logos-co/logos-module-loader-qt/pull/8), [logos-rust-sdk#41](https://github.com/logos-co/logos-rust-sdk/pull/41), [#42](https://github.com/logos-co/logos-rust-sdk/pull/42) + +### Protocol 0.5 / 0.6 — teardown and caller identity + +- **Teardown ABI:** an optional teardown pair on the module C ABI, advertised as protocol 0.5 [logos-protocol#62](https://github.com/logos-co/logos-protocol/pull/62), [#63](https://github.com/logos-co/logos-protocol/pull/63) +- **SDKs:** `aboutToUnload` in the C++ SDK, the teardown hook published on generated Qt view plugins, 0.5 teardown exports emitted for Rust modules [logos-cpp-sdk#143](https://github.com/logos-co/logos-cpp-sdk/pull/143), [logos-qt-sdk#38](https://github.com/logos-co/logos-qt-sdk/pull/38), [logos-rust-sdk#45](https://github.com/logos-co/logos-rust-sdk/pull/45) +- **Glue and hosts:** the plugin class reaches the module's teardown hook, the body is guarded on 0.5, the helper is shared; the Qt host waits for the module to finish, and ui-host gives a view its chance before teardown [logos-plugin-qt#20](https://github.com/logos-co/logos-plugin-qt/pull/20), [#21](https://github.com/logos-co/logos-plugin-qt/pull/21), [#23](https://github.com/logos-co/logos-plugin-qt/pull/23), [logos-module-loader-qt#9](https://github.com/logos-co/logos-module-loader-qt/pull/9), [logos-view-module-runtime#26](https://github.com/logos-co/logos-view-module-runtime/pull/26) +- **Basecamp:** an in-process UI plugin gets to finish before its widget is destroyed, and the shell stops reading the `package_manager_ui` widget after the host frees it [logos-basecamp#350](https://github.com/logos-co/logos-basecamp/pull/350), [#355](https://github.com/logos-co/logos-basecamp/pull/355), [#351](https://github.com/logos-co/logos-basecamp/pull/351) +- **Caller identity (0.6):** the protocol resolves who is calling and declares the export that carries it; `logos_module_set_call_caller` defined in the C++ and Rust SDKs; the Qt glue pulls the caller off the host image and pushes it across the C ABI [logos-protocol#70](https://github.com/logos-co/logos-protocol/pull/70), [logos-cpp-sdk#147](https://github.com/logos-co/logos-cpp-sdk/pull/147), [logos-rust-sdk#47](https://github.com/logos-co/logos-rust-sdk/pull/47), [logos-plugin-qt#25](https://github.com/logos-co/logos-plugin-qt/pull/25), [logos-module-builder#213](https://github.com/logos-co/logos-module-builder/pull/213) +- **Coverage:** a fixture for the module teardown contract; the hook restored on the generated PMUI plugin after a regression [logos-test-modules#46](https://github.com/logos-co/logos-test-modules/pull/46), [logos-package-manager-ui#72](https://github.com/logos-co/logos-package-manager-ui/pull/72), [logos-module-builder#214](https://github.com/logos-co/logos-module-builder/pull/214) + +### One runtime per process (shared runtime and symbol gate) + +- **Linking:** Basecamp and logosctl link the shared libraries and delete the shim; standalone-app links the shared Qt host and gates the invariant; liblogos imports the runtime instead of providing it; `liblogos_protocol.dll` became a usable single provider [logos-basecamp#348](https://github.com/logos-co/logos-basecamp/pull/348), [logos-logoscore-cli#98](https://github.com/logos-co/logos-logoscore-cli/pull/98), [logos-standalone-app#39](https://github.com/logos-co/logos-standalone-app/pull/39), [logos-liblogos#182](https://github.com/logos-co/logos-liblogos/pull/182), [logos-protocol#65](https://github.com/logos-co/logos-protocol/pull/65) +- **The gate:** CI asserts one logos runtime per process; archives emptied on every platform, not just Windows [logos-logoscore-cli#96](https://github.com/logos-co/logos-logoscore-cli/pull/96), [#95](https://github.com/logos-co/logos-logoscore-cli/pull/95), [logos-basecamp#339](https://github.com/logos-co/logos-basecamp/pull/339) +- **Gate bugs found and fixed:** `makeBinaryWrapper` stubs that `nm` reads as real, symlinked plugins silently not measured, and the gate not actually running — including on Windows, where it matters [logos-basecamp#340](https://github.com/logos-co/logos-basecamp/pull/340), [#341](https://github.com/logos-co/logos-basecamp/pull/341), [#354](https://github.com/logos-co/logos-basecamp/pull/354), [logos-logoscore-cli#102](https://github.com/logos-co/logos-logoscore-cli/pull/102), [logos-standalone-app#41](https://github.com/logos-co/logos-standalone-app/pull/41) +- **Module viewer:** bumped onto the shared runtime and ported to the current API; every liblogos shared library staged, not just `liblogos_core` [logos-module-viewer#8](https://github.com/logos-co/logos-module-viewer/pull/8), [#7](https://github.com/logos-co/logos-module-viewer/pull/7) + +### SDKs split by capability, and generated view glue + +- **The split:** the C++ SDK split by capability with the provider-header path retired and the cdylib decode hardened; the Qt SDK split by capability with the Qt-module backends retired [logos-cpp-sdk#138](https://github.com/logos-co/logos-cpp-sdk/pull/138), [logos-qt-sdk#33](https://github.com/logos-co/logos-qt-sdk/pull/33) +- **New home for the Qt host:** `logos-plugin-qt` gained the Qt host runtime and cdylib-glue generator plus `logos_qt_host_shared` with a layering assertion [logos-plugin-qt#19](https://github.com/logos-co/logos-plugin-qt/pull/19), [#22](https://github.com/logos-co/logos-plugin-qt/pull/22) +- **New home for view plugins:** `logos-view-module` now owns the view-plugin templates, the check that proves they work, and the UI plugin emitter with its paired header; the Qt SDK retired `--backend ui` and dropped `logos_ui_plugin_context.h` accordingly [logos-view-module#2](https://github.com/logos-co/logos-view-module/pull/2), [#3](https://github.com/logos-co/logos-view-module/pull/3), [logos-qt-sdk#39](https://github.com/logos-co/logos-qt-sdk/pull/39), [#42](https://github.com/logos-co/logos-qt-sdk/pull/42) +- **Consumers:** module-builder takes the view templates from logos-view-module and builds `ui_qml` glue with logos-view-generator; PMUI generates its view-plugin glue and drops the module-builder pin; the last Qt fixtures migrated to interface `universal`, `test_ipc_module` retired [logos-module-builder#203](https://github.com/logos-co/logos-module-builder/pull/203), [#211](https://github.com/logos-co/logos-module-builder/pull/211), [logos-package-manager-ui#69](https://github.com/logos-co/logos-package-manager-ui/pull/69), [logos-test-modules#44](https://github.com/logos-co/logos-test-modules/pull/44) +- **JS SDK:** a protocol-native, Qt-free `lp_*` consumer and provider over koffi [logos-js-sdk#11](https://github.com/logos-co/logos-js-sdk/pull/11) +- **Async plumbing:** the AsyncResult twin emitted and the LpClient create race fixed; the second `lp_client` behind `invokeAsyncResult` retired [logos-cpp-sdk#142](https://github.com/logos-co/logos-cpp-sdk/pull/142), [logos-qt-sdk#36](https://github.com/logos-co/logos-qt-sdk/pull/36) + +### ABI conformance gates + +- The protocol publishes the module-impl export list as data, for backends to check against [logos-protocol#66](https://github.com/logos-co/logos-protocol/pull/66) +- Generated cdylibs and the Rust scaffold are asserted to define every declared module-impl export; module-builder reads the exports off the *built* plugin, per backend [logos-cpp-sdk#144](https://github.com/logos-co/logos-cpp-sdk/pull/144), [logos-rust-sdk#46](https://github.com/logos-co/logos-rust-sdk/pull/46), [logos-module-builder#207](https://github.com/logos-co/logos-module-builder/pull/207) +- Conditional exports guarded on MAJOR, not MINOR alone; the next-major probe asserts a subset rather than equality; an unparseable protocol version no longer silently vanishes [logos-cpp-sdk#145](https://github.com/logos-co/logos-cpp-sdk/pull/145), [#146](https://github.com/logos-co/logos-cpp-sdk/pull/146), [logos-module-builder#208](https://github.com/logos-co/logos-module-builder/pull/208), [logos-protocol#68](https://github.com/logos-co/logos-protocol/pull/68) + +### Error-channel correctness + +A cross-SDK sweep: provider rejections were being collapsed to a single code, and failures were being reported as data. + +- Every provider rejection code is now folded, not just `dispatch_failed` — in the C++, Qt and Rust SDKs and in logosctl [logos-cpp-sdk#148](https://github.com/logos-co/logos-cpp-sdk/pull/148), [logos-qt-sdk#40](https://github.com/logos-co/logos-qt-sdk/pull/40), [logos-rust-sdk#49](https://github.com/logos-co/logos-rust-sdk/pull/49), [#44](https://github.com/logos-co/logos-rust-sdk/pull/44), [logos-logoscore-cli#101](https://github.com/logos-co/logos-logoscore-cli/pull/101) +- logosctl: `METHOD_FAILED` reported from the error channel instead of a null value, the daemon shutdown reply no longer lost or called a failure, and a missing daemon fails at once instead of being reported as data [logos-logoscore-cli#99](https://github.com/logos-co/logos-logoscore-cli/pull/99), [#100](https://github.com/logos-co/logos-logoscore-cli/pull/100), [#103](https://github.com/logos-co/logos-logoscore-cli/pull/103) +- Conformance suite carries the provider's own error code, not just the envelope's [logos-logoscore-py#21](https://github.com/logos-co/logos-logoscore-py/pull/21) +- Host-core stats read (and mirror into the `QVariantMap`) the keys process-stats actually emits [logos-cpp-sdk#139](https://github.com/logos-co/logos-cpp-sdk/pull/139), [logos-qt-sdk#34](https://github.com/logos-co/logos-qt-sdk/pull/34) + +### Type fidelity and derived identity + +- **Types:** a lossless Qt type mapping with LIDL types in `getMethods`; the Qt consumer keeps every type the std one keeps; record codecs qualified by wrapper class [logos-cpp-sdk#149](https://github.com/logos-co/logos-cpp-sdk/pull/149), [logos-qt-sdk#41](https://github.com/logos-co/logos-qt-sdk/pull/41), [#43](https://github.com/logos-co/logos-qt-sdk/pull/43) +- **Identity:** `name()` and `version()` derived from the module declaration in LIDL, with derived identity methods emitted for C++, Qt and Rust providers and consumers; the proxy answers for a provider that does not [logos-lidl#10](https://github.com/logos-co/logos-lidl/pull/10), [logos-cpp-sdk#141](https://github.com/logos-co/logos-cpp-sdk/pull/141), [logos-qt-sdk#35](https://github.com/logos-co/logos-qt-sdk/pull/35), [logos-rust-sdk#43](https://github.com/logos-co/logos-rust-sdk/pull/43), [logos-protocol#61](https://github.com/logos-co/logos-protocol/pull/61) +- **Fallout:** call sites updated for the widened Qt consumer surface, docs followed, and the SDK chain relocked [logos-test-modules#47](https://github.com/logos-co/logos-test-modules/pull/47), [logos-tutorial#84](https://github.com/logos-co/logos-tutorial/pull/84), [logos-module-builder#212](https://github.com/logos-co/logos-module-builder/pull/212), [logos-plugin-qt#24](https://github.com/logos-co/logos-plugin-qt/pull/24) + +### Windows bundles and cross-platform doctests + +- **Bundles:** Basecamp builds and publishes a Windows bundle alongside the other platforms; logoscore and logosctl do the same [logos-basecamp#334](https://github.com/logos-co/logos-basecamp/pull/334), [#332](https://github.com/logos-co/logos-basecamp/pull/332), [logos-logoscore-cli#88](https://github.com/logos-co/logos-logoscore-cli/pull/88), [logos-package-manager-ui#68](https://github.com/logos-co/logos-package-manager-ui/pull/68) +- **Doctest runner:** machine-readable results and cross-platform specs — build on one platform, run on another; a spec that marks only its build half is no longer an error [logos-doctest#14](https://github.com/logos-co/logos-doctest/pull/14), [#15](https://github.com/logos-co/logos-doctest/pull/15) +- **Windows legs:** the lgpm Windows leg is a doc-test leg publishing beside ubuntu/macos, with platforms marked so the run half executes there; the modules-bundle spec's second half runs on real Windows; lgpd is cross-built and proven to start on real Windows [logos-package-manager#32](https://github.com/logos-co/logos-package-manager/pull/32), [#33](https://github.com/logos-co/logos-package-manager/pull/33), [logos-logoscore-cli#89](https://github.com/logos-co/logos-logoscore-cli/pull/89), [logos-package-downloader#28](https://github.com/logos-co/logos-package-downloader/pull/28) +- **Cross-build coverage:** container-subprocess and lidl cross-build for Windows and gate their archives [logos-container-subprocess#5](https://github.com/logos-co/logos-container-subprocess/pull/5), [logos-lidl#9](https://github.com/logos-co/logos-lidl/pull/9) + +### Packaging and install correctness + +- **Signatures:** an empty signer pin was selecting exactly the UNSIGNED releases; an unknown signing key now says so; one bundled-module failure no longer disarms `signature_policy` [logos-package-downloader#30](https://github.com/logos-co/logos-package-downloader/pull/30), [logos-package-manager#36](https://github.com/logos-co/logos-package-manager/pull/36), [logos-logoscore-cli#90](https://github.com/logos-co/logos-logoscore-cli/pull/90) +- **Resolution:** the architecture half of a variant is aliased, so a bundler-built `.lgx` installs on Intel Mac; an object-form dependency no longer loses the edge itself [logos-package-manager#35](https://github.com/logos-co/logos-package-manager/pull/35), [#34](https://github.com/logos-co/logos-package-manager/pull/34) +- **Install:** reinstall removes files deleted by the new version; logosctl installs a local `.lgx` by path and refuses the mixed request; liblogos-allocated arrays are freed with `delete[]` [logos-basecamp#336](https://github.com/logos-co/logos-basecamp/pull/336), [logos-logoscore-cli#91](https://github.com/logos-co/logos-logoscore-cli/pull/91), [#93](https://github.com/logos-co/logos-logoscore-cli/pull/93) +- **Icons and metadata:** Basecamp supports icons shipped with packages, module-builder gained platform-keyed overlays in `metadata.json`, and the 256×256 icons the `ui_qml` packaging contract requires were added to the fixtures and the tutorial [logos-basecamp#321](https://github.com/logos-co/logos-basecamp/pull/321), [logos-module-builder#209](https://github.com/logos-co/logos-module-builder/pull/209), [logos-test-modules#45](https://github.com/logos-co/logos-test-modules/pull/45), [logos-tutorial#82](https://github.com/logos-co/logos-tutorial/pull/82) + +### CI and release infrastructure + +- **macOS release pipelines:** signing, notarization and release for logoscore-cli, lgpm and lgpd [logos-logoscore-cli#64](https://github.com/logos-co/logos-logoscore-cli/pull/64), [logos-package-manager#30](https://github.com/logos-co/logos-package-manager/pull/30), [logos-package-downloader#23](https://github.com/logos-co/logos-package-downloader/pull/23) +- **Shared cache action:** Nix and the Attic cache now come from `setup-nix-cache-action` in Basecamp, protocol, rust-sdk and the tutorial; Basecamp's S3 storage moved from DO to Hetzner [logos-basecamp#331](https://github.com/logos-co/logos-basecamp/pull/331), [#330](https://github.com/logos-co/logos-basecamp/pull/330), [logos-protocol#60](https://github.com/logos-co/logos-protocol/pull/60), [logos-rust-sdk#40](https://github.com/logos-co/logos-rust-sdk/pull/40), [logos-tutorial#83](https://github.com/logos-co/logos-tutorial/pull/83) +- **Binary cache in flakes:** added across the blockchain UIs, libp2p-module and storage-ui [lez-explorer-ui#20](https://github.com/logos-blockchain/lez-explorer-ui/pull/20), [logos-blockchain-ui#60](https://github.com/logos-blockchain/logos-blockchain-ui/pull/60), [logos-execution-zone-module#54](https://github.com/logos-blockchain/logos-execution-zone-module/pull/54), [logos-execution-zone-wallet-ui#44](https://github.com/logos-blockchain/logos-execution-zone-wallet-ui/pull/44), [logos-libp2p-module#105](https://github.com/logos-co/logos-libp2p-module/pull/105), [logos-storage-ui#90](https://github.com/logos-co/logos-storage-ui/pull/90) +- **Pipelines:** the Linux ARM path in the combined Jenkinsfile fixed; module-unload and failure-path test suites added to Basecamp [logos-basecamp#335](https://github.com/logos-co/logos-basecamp/pull/335), [#329](https://github.com/logos-co/logos-basecamp/pull/329), [#318](https://github.com/logos-co/logos-basecamp/pull/318) + +### UI and networking + +- Logos Notice and Logos Toast added as generic components; `logosTabBar` issues fixed [logos-design-system#51](https://github.com/logos-co/logos-design-system/pull/51), [#52](https://github.com/logos-co/logos-design-system/pull/52) +- Hot reload fixed in standalone-app and the view-module runtime [logos-standalone-app#36](https://github.com/logos-co/logos-standalone-app/pull/36), [logos-view-module-runtime#24](https://github.com/logos-co/logos-view-module-runtime/pull/24) +- NAT traversal configuration options exposed in the libp2p module [logos-libp2p-module#104](https://github.com/logos-co/logos-libp2p-module/pull/104) + +### Execution-zone wallet UI (in-review) + +- Onboarding reworked into two paths — create a wallet, or open an existing one — with tests enabled in CI and the UI moved onto LogosDesignSystem components *(in-review)* [logos-execution-zone-wallet-ui#41](https://github.com/logos-blockchain/logos-execution-zone-wallet-ui/pull/41), [#42](https://github.com/logos-blockchain/logos-execution-zone-wallet-ui/pull/42), [#43](https://github.com/logos-blockchain/logos-execution-zone-wallet-ui/pull/43) +- Execution-zone module exposes its persistent path through `LogosModuleContext` *(in-review)* [logos-execution-zone-module#53](https://github.com/logos-blockchain/logos-execution-zone-module/pull/53) + +### Housekeeping + +- **Lock cycle cut:** the `logos-standalone-app` cycle removed from the locks of capability-module, liblogos, module-builder and standalone-app, plus the two private copies of the package-manager flakes Basecamp was unrolling [logos-capability-module#25](https://github.com/logos-co/logos-capability-module/pull/25), [logos-liblogos#183](https://github.com/logos-co/logos-liblogos/pull/183), [logos-module-builder#205](https://github.com/logos-co/logos-module-builder/pull/205), [logos-standalone-app#38](https://github.com/logos-co/logos-standalone-app/pull/38), [logos-basecamp#353](https://github.com/logos-co/logos-basecamp/pull/353), [#356](https://github.com/logos-co/logos-basecamp/pull/356), [#358](https://github.com/logos-co/logos-basecamp/pull/358), [logos-package-manager-ui#71](https://github.com/logos-co/logos-package-manager-ui/pull/71), [logos-package-downloader-module#24](https://github.com/logos-co/logos-package-downloader-module/pull/24), [logos-package-manager-module#60](https://github.com/logos-co/logos-package-manager-module/pull/60) +- **Relocks tracking the waves above:** liblogos, logosctl, standalone-app, module-builder, the package-manager/downloader modules, rust-sdk and test-modules moved onto the grant path, the teardown wait, the universal capability module and the deduplicated qt-sdk [logos-liblogos#177](https://github.com/logos-co/logos-liblogos/pull/177), [#178](https://github.com/logos-co/logos-liblogos/pull/178), [#179](https://github.com/logos-co/logos-liblogos/pull/179), [#181](https://github.com/logos-co/logos-liblogos/pull/181), [#184](https://github.com/logos-co/logos-liblogos/pull/184), [#185](https://github.com/logos-co/logos-liblogos/pull/185), [logos-logoscore-cli#92](https://github.com/logos-co/logos-logoscore-cli/pull/92), [#94](https://github.com/logos-co/logos-logoscore-cli/pull/94), [#97](https://github.com/logos-co/logos-logoscore-cli/pull/97), [logos-standalone-app#37](https://github.com/logos-co/logos-standalone-app/pull/37), [#40](https://github.com/logos-co/logos-standalone-app/pull/40), [logos-module-builder#201](https://github.com/logos-co/logos-module-builder/pull/201), [#204](https://github.com/logos-co/logos-module-builder/pull/204), [#206](https://github.com/logos-co/logos-module-builder/pull/206), [#210](https://github.com/logos-co/logos-module-builder/pull/210), [logos-package-downloader-module#25](https://github.com/logos-co/logos-package-downloader-module/pull/25), [logos-package-manager-module#61](https://github.com/logos-co/logos-package-manager-module/pull/61), [logos-rust-sdk#48](https://github.com/logos-co/logos-rust-sdk/pull/48), [logos-test-modules#48](https://github.com/logos-co/logos-test-modules/pull/48), [logos-basecamp#351](https://github.com/logos-co/logos-basecamp/pull/351) +- **Docs caught up with the refactors:** Basecamp references to files, outputs and pins that no longer exist retired; the shared-API scheme that actually shipped described; removed generator flags dropped; the archived `logos-module-client` de-referenced [logos-basecamp#357](https://github.com/logos-co/logos-basecamp/pull/357), [logos-protocol#67](https://github.com/logos-co/logos-protocol/pull/67), [logos-qt-sdk#37](https://github.com/logos-co/logos-qt-sdk/pull/37), [logos-tutorial#81](https://github.com/logos-co/logos-tutorial/pull/81), [logos-view-module-runtime#25](https://github.com/logos-co/logos-view-module-runtime/pull/25), [logos-cpp-sdk#140](https://github.com/logos-co/logos-cpp-sdk/pull/140) +- **Nix packaging:** `nlohmann_json` propagated and a deleted-file reference dropped in liblogos; the dead `gen_provider` example deleted [logos-liblogos#184](https://github.com/logos-co/logos-liblogos/pull/184), [logos-rust-sdk#39](https://github.com/logos-co/logos-rust-sdk/pull/39) + +## Appendix: all merged PRs, by repo + +[lez-explorer-ui](#lez-explorer-ui), [logos-basecamp](#logos-basecamp), [logos-blockchain-ui](#logos-blockchain-ui), [logos-capability-module](#logos-capability-module), [logos-container-subprocess](#logos-container-subprocess), [logos-cpp-sdk](#logos-cpp-sdk), [logos-design-system](#logos-design-system), [logos-doctest](#logos-doctest), [logos-execution-zone-module](#logos-execution-zone-module), [logos-execution-zone-wallet-ui](#logos-execution-zone-wallet-ui), [logos-js-sdk](#logos-js-sdk), [logos-liblogos](#logos-liblogos), [logos-libp2p-module](#logos-libp2p-module), [logos-lidl](#logos-lidl), [logos-logoscore-cli](#logos-logoscore-cli), [logos-logoscore-py](#logos-logoscore-py), [logos-module-builder](#logos-module-builder), [logos-module-loader-qt](#logos-module-loader-qt), [logos-module-viewer](#logos-module-viewer), [logos-package-downloader](#logos-package-downloader), [logos-package-downloader-module](#logos-package-downloader-module), [logos-package-manager](#logos-package-manager), [logos-package-manager-module](#logos-package-manager-module), [logos-package-manager-ui](#logos-package-manager-ui), [logos-plugin-qt](#logos-plugin-qt), [logos-protocol](#logos-protocol), [logos-qt-sdk](#logos-qt-sdk), [logos-rust-sdk](#logos-rust-sdk), [logos-standalone-app](#logos-standalone-app), [logos-storage-ui](#logos-storage-ui), [logos-test-modules](#logos-test-modules), [logos-tutorial](#logos-tutorial), [logos-view-module](#logos-view-module), [logos-view-module-runtime](#logos-view-module-runtime) + +### lez-explorer-ui + +- [feat(flake): add nix binary cache (#20)](https://github.com/logos-blockchain/lez-explorer-ui/pull/20) + +### logos-basecamp + +- [chore(deps): relock the package-manager repos, now that they are cut too (#358)](https://github.com/logos-co/logos-basecamp/pull/358) +- [docs: retire references to files, outputs and pins that no longer exist (#357)](https://github.com/logos-co/logos-basecamp/pull/357) +- [chore(deps): take the cycle cut that already landed upstream (#356)](https://github.com/logos-co/logos-basecamp/pull/356) +- [fix(shell): stop reading the package_manager_ui widget after the host frees it (#355)](https://github.com/logos-co/logos-basecamp/pull/355) +- [fix(ci): run the symbol gate — on Windows too, where it matters (#354)](https://github.com/logos-co/logos-basecamp/pull/354) +- [chore(deps): stop unrolling two private copies of the package-manager flakes (#353)](https://github.com/logos-co/logos-basecamp/pull/353) +- [feat(shell): host-privileged facades — main_ui goes back to a plugin that holds no privilege (#352)](https://github.com/logos-co/logos-basecamp/pull/352) +- [chore(deps): pick up ui-host's teardown grace period (#351)](https://github.com/logos-co/logos-basecamp/pull/351) +- [feat(ui): let an in-process UI plugin finish before its widget is destroyed (#350)](https://github.com/logos-co/logos-basecamp/pull/350) +- [feat(shared-runtime): link the shared libraries, and delete the shim (#348)](https://github.com/logos-co/logos-basecamp/pull/348) +- [fix(symbol-gate): find -L, or a symlinked plugin is silently not measured (#341)](https://github.com/logos-co/logos-basecamp/pull/341) +- [fix(symbol-gate): resolve makeBinaryWrapper stubs, which nm reads as real (#340)](https://github.com/logos-co/logos-basecamp/pull/340) +- [fix(shared-runtime): empty the archives on every platform, and gate it (#339)](https://github.com/logos-co/logos-basecamp/pull/339) +- [feat(shell): one runtime per process, and a UI shell that holds no host privilege (#337)](https://github.com/logos-co/logos-basecamp/pull/337) +- [fix: Reinstall doesn't remove files deleted by the new version — inst… (#336)](https://github.com/logos-co/logos-basecamp/pull/336) +- [fix(ci): wrong path to linux arm pipeline in combined jenkinsfile (#335)](https://github.com/logos-co/logos-basecamp/pull/335) +- [feat(windows): build and publish a Windows bundle alongside the other platforms (#334)](https://github.com/logos-co/logos-basecamp/pull/334) +- [fix(windows): bump logos-package-manager-ui so the Windows build completes (#332)](https://github.com/logos-co/logos-basecamp/pull/332) +- [ci: take Nix and the Attic cache from setup-nix-cache-action (#331)](https://github.com/logos-co/logos-basecamp/pull/331) +- [feat(ci): change s3 storage from DO to Hetzner (#330)](https://github.com/logos-co/logos-basecamp/pull/330) +- [Test/module unload (#329)](https://github.com/logos-co/logos-basecamp/pull/329) +- [feat: support icons available with packages (#321)](https://github.com/logos-co/logos-basecamp/pull/321) +- [Test/failure paths (#318)](https://github.com/logos-co/logos-basecamp/pull/318) + +### logos-blockchain-ui + +- [feat(flake): add nix binary cache (#60)](https://github.com/logos-blockchain/logos-blockchain-ui/pull/60) + +### logos-capability-module + +- [fix(nix): cut the logos-standalone-app cycle out of the lock (3,391 → 130 nodes) (#25)](https://github.com/logos-co/logos-capability-module/pull/25) +- [feat: capability_module as a universal module, over a host-granted trust root (#24)](https://github.com/logos-co/logos-capability-module/pull/24) + +### logos-container-subprocess + +- [ci(windows): cross-build for Windows and gate the archive (#5)](https://github.com/logos-co/logos-container-subprocess/pull/5) + +### logos-cpp-sdk + +- [feat(codegen): a lossless Qt type mapping, and LIDL types in getMethods (#149)](https://github.com/logos-co/logos-cpp-sdk/pull/149) +- [fix: fold EVERY provider rejection code, not just dispatch_failed (#148)](https://github.com/logos-co/logos-cpp-sdk/pull/148) +- [feat(abi): define logos_module_set_call_caller, gated on protocol 0.6 (#147)](https://github.com/logos-co/logos-cpp-sdk/pull/147) +- [fix(abi-check): the next-major probe asserts a SUBSET, not equality (#146)](https://github.com/logos-co/logos-cpp-sdk/pull/146) +- [fix(cdylib): guard the conditional exports on MAJOR too, not MINOR alone (#145)](https://github.com/logos-co/logos-cpp-sdk/pull/145) +- [test(abi): assert the generated cdylib defines every declared module-impl export (#144)](https://github.com/logos-co/logos-cpp-sdk/pull/144) +- [feat(sdk): aboutToUnload — a module's chance to finish before teardown (#143)](https://github.com/logos-co/logos-cpp-sdk/pull/143) +- [feat(lp): emit the AsyncResult twin, and fix the LpClient create race (#142)](https://github.com/logos-co/logos-cpp-sdk/pull/142) +- [feat(generator): emit the derived module identity methods (#141)](https://github.com/logos-co/logos-cpp-sdk/pull/141) +- [docs(doctests): drop references to the archived logos-module-client (#140)](https://github.com/logos-co/logos-cpp-sdk/pull/140) +- [fix(host-core): read the stats keys process-stats actually emits (#139)](https://github.com/logos-co/logos-cpp-sdk/pull/139) +- [feat: split the SDK by capability, retire the provider-header path, and harden the cdylib decode (#138)](https://github.com/logos-co/logos-cpp-sdk/pull/138) + +### logos-design-system + +- [fix: issues in logosTabBar (#52)](https://github.com/logos-co/logos-design-system/pull/52) +- [feat: add Logos Notice and Logos Toast to be used generically (#51)](https://github.com/logos-co/logos-design-system/pull/51) + +### logos-doctest + +- [fix(emit-smoke): a spec that marks only its build half is not an error (#15)](https://github.com/logos-co/logos-doctest/pull/15) +- [feat: machine-readable results, and cross-platform specs (build here, run there) (#14)](https://github.com/logos-co/logos-doctest/pull/14) + +### logos-execution-zone-module + +- [feat(flake): add nix binary cache (#54)](https://github.com/logos-blockchain/logos-execution-zone-module/pull/54) + +### logos-execution-zone-wallet-ui + +- [feat(flake): add nix binary cache (#44)](https://github.com/logos-blockchain/logos-execution-zone-wallet-ui/pull/44) + +### logos-js-sdk + +- [feat: protocol-native SDK — Qt-free lp_* consumer and provider over koffi (#11)](https://github.com/logos-co/logos-js-sdk/pull/11) + +### logos-liblogos + +- [chore(deps): bump logos-qt-sdk past the header dedup, and follow its plugin-qt (#185)](https://github.com/logos-co/logos-liblogos/pull/185) +- [fix(nix): propagate nlohmann_json, and stop pointing at a deleted file (#184)](https://github.com/logos-co/logos-liblogos/pull/184) +- [chore(deps): relock logos-capability-module onto the cycle cut (3,472 → 211 nodes) (#183)](https://github.com/logos-co/logos-liblogos/pull/183) +- [feat(shared-runtime): import the runtime instead of providing it (#182)](https://github.com/logos-co/logos-liblogos/pull/182) +- [chore(deps): relock default-module-loader onto the teardown wait (#181)](https://github.com/logos-co/logos-liblogos/pull/181) +- [chore(deps): relock capability_module onto the universal port (#179)](https://github.com/logos-co/logos-liblogos/pull/179) +- [chore(deps): relock default-module-loader onto the host-services grant (#178)](https://github.com/logos-co/logos-liblogos/pull/178) +- [chore(deps): track protocol and plugin-qt master (#177)](https://github.com/logos-co/logos-liblogos/pull/177) + +### logos-libp2p-module + +- [feat(flake): add nix binary cache (#105)](https://github.com/logos-co/logos-libp2p-module/pull/105) +- [feat: expose NAT traversal configuration options (#104)](https://github.com/logos-co/logos-libp2p-module/pull/104) + +### logos-lidl + +- [feat: derive name() and version() from the module declaration (#10)](https://github.com/logos-co/logos-lidl/pull/10) +- [ci(windows): cross-build for Windows and gate the archives (#9)](https://github.com/logos-co/logos-lidl/pull/9) + +### logos-logoscore-cli + +- [fix(client): fail at once when the daemon is gone, and stop reporting that as data (#103)](https://github.com/logos-co/logos-logoscore-cli/pull/103) +- [fix(ci): run the symbol gate, and fix what it does on Windows (#102)](https://github.com/logos-co/logos-logoscore-cli/pull/102) +- [fix: fold EVERY provider rejection code, not just dispatch_failed (#101)](https://github.com/logos-co/logos-logoscore-cli/pull/101) +- [fix(daemon stop): stop losing the shutdown reply, and stop calling that a failure (#100)](https://github.com/logos-co/logos-logoscore-cli/pull/100) +- [fix(core_service): report METHOD_FAILED from the error channel, not a null value (#99)](https://github.com/logos-co/logos-logoscore-cli/pull/99) +- [feat(shared-runtime): link the shared libraries, and delete the shim (#98)](https://github.com/logos-co/logos-logoscore-cli/pull/98) +- [chore(deps): relock liblogos onto the teardown wait (#97)](https://github.com/logos-co/logos-logoscore-cli/pull/97) +- [feat(symbol-gate): assert one logos runtime per process, in CI (#96)](https://github.com/logos-co/logos-logoscore-cli/pull/96) +- [fix(shared-runtime): empty the archives on every platform, not just Windows (#95)](https://github.com/logos-co/logos-logoscore-cli/pull/95) +- [chore(deps): relock logos-protocol and logos-liblogos onto the grant path (#94)](https://github.com/logos-co/logos-logoscore-cli/pull/94) +- [fix: delete[] the arrays liblogos allocates with new[], and clean up on error (#93)](https://github.com/logos-co/logos-logoscore-cli/pull/93) +- [chore(deps): track master for protocol, cpp-sdk and plugin-qt (#92)](https://github.com/logos-co/logos-logoscore-cli/pull/92) +- [feat(logosctl): install a local .lgx by path, and refuse the mixed request (#91)](https://github.com/logos-co/logos-logoscore-cli/pull/91) +- [fix(logosctl): don't let one bundled-module failure disarm signature_policy (#90)](https://github.com/logos-co/logos-logoscore-cli/pull/90) +- [doctest(logosctl): run the modules-bundle spec's second half on real Windows (#89)](https://github.com/logos-co/logos-logoscore-cli/pull/89) +- [feat(windows): build and publish Windows bundles for logoscore and logosctl (#88)](https://github.com/logos-co/logos-logoscore-cli/pull/88) +- [ci: add macOS signing, notarization and release pipeline (#64)](https://github.com/logos-co/logos-logoscore-cli/pull/64) + +### logos-logoscore-py + +- [conformance: carry the provider's own error code, not just the envelope's (#21)](https://github.com/logos-co/logos-logoscore-py/pull/21) + +### logos-module-builder + +- [fix(deps): restore the view teardown hook, and pick up the deduplicated qt-sdk (#214)](https://github.com/logos-co/logos-module-builder/pull/214) +- [chore(deps): bump onto the caller-identity wave — protocol 0.6 (#213)](https://github.com/logos-co/logos-module-builder/pull/213) +- [chore(deps): relock onto the SDKs carrying the lossless Qt mapping (#212)](https://github.com/logos-co/logos-module-builder/pull/212) +- [feat: build ui_qml glue with logos-view-generator, not logos-qt-generator (#211)](https://github.com/logos-co/logos-module-builder/pull/211) +- [chore(deps): pick up ui-host's teardown grace period (#210)](https://github.com/logos-co/logos-module-builder/pull/210) +- [feat(metadata): platform-keyed overlays in metadata.json (#209)](https://github.com/logos-co/logos-module-builder/pull/209) +- [fix: a protocol version that will not parse must not silently vanish (#208)](https://github.com/logos-co/logos-module-builder/pull/208) +- [test(abi): read the module-impl exports off the BUILT plugin, per backend (#207)](https://github.com/logos-co/logos-module-builder/pull/207) +- [chore(deps): relock logos-rust-sdk onto the teardown exports (#45) (#206)](https://github.com/logos-co/logos-module-builder/pull/206) +- [chore(deps): relock logos-standalone-app onto the cycle cut (3,390 → 360 nodes) (#205)](https://github.com/logos-co/logos-module-builder/pull/205) +- [chore(deps): bump the SDK chain onto master (#204)](https://github.com/logos-co/logos-module-builder/pull/204) +- [feat: take the view templates from logos-view-module (#203)](https://github.com/logos-co/logos-module-builder/pull/203) +- [chore: bump logos-standalone-app and logos-view-module-runtime (#201)](https://github.com/logos-co/logos-module-builder/pull/201) + +### logos-module-loader-qt + +- [feat(host): wait for the module to finish before tearing it down (#9)](https://github.com/logos-co/logos-module-loader-qt/pull/9) +- [feat: deliver the host-services grant to privileged modules, and stop carrying JSON across argv (#8)](https://github.com/logos-co/logos-module-loader-qt/pull/8) + +### logos-module-viewer + +- [feat: bump liblogos onto the shared runtime, and port to the current API (#8)](https://github.com/logos-co/logos-module-viewer/pull/8) +- [fix(nix): stage every liblogos shared library, not just liblogos_core (#7)](https://github.com/logos-co/logos-module-viewer/pull/7) + +### logos-package-downloader + +- [fix(resolver): an empty signer pin selected exactly the UNSIGNED releases (#30)](https://github.com/logos-co/logos-package-downloader/pull/30) +- [ci(windows): cross-build lgpd and prove it starts on real Windows (#28)](https://github.com/logos-co/logos-package-downloader/pull/28) +- [ci: add macOS signing, notarization and release pipeline (#23)](https://github.com/logos-co/logos-package-downloader/pull/23) + +### logos-package-downloader-module + +- [chore(deps): bump onto the module-builder that restores the view hook (#25)](https://github.com/logos-co/logos-package-downloader-module/pull/25) +- [chore(deps): take the module-builder cycle cut (#24)](https://github.com/logos-co/logos-package-downloader-module/pull/24) + +### logos-package-manager + +- [fix(signature): say something when an unknown key signed the package (#36)](https://github.com/logos-co/logos-package-manager/pull/36) +- [fix(variant): alias the architecture half, so a bundler-built .lgx installs on Intel Mac (#35)](https://github.com/logos-co/logos-package-manager/pull/35) +- [fix: an object-form dependency lost the edge itself, not just its constraint (#34)](https://github.com/logos-co/logos-package-manager/pull/34) +- [doctest(lgpm-cli): mark the platforms, so the run half can execute on Windows (#33)](https://github.com/logos-co/logos-package-manager/pull/33) +- [ci(windows): the Windows leg is a doc-test leg, publishing beside ubuntu/macos (#32)](https://github.com/logos-co/logos-package-manager/pull/32) +- [ci: add macOS signing, notarization and release pipeline (#30)](https://github.com/logos-co/logos-package-manager/pull/30) + +### logos-package-manager-module + +- [chore(deps): bump onto the module-builder that restores the view hook (#61)](https://github.com/logos-co/logos-package-manager-module/pull/61) +- [chore(deps): take the module-builder cycle cut (#60)](https://github.com/logos-co/logos-package-manager-module/pull/60) + +### logos-package-manager-ui + +- [fix(deps): restore aboutToUnload() on the generated UI plugin (#72)](https://github.com/logos-co/logos-package-manager-ui/pull/72) +- [chore(deps): take the module-builder cycle cut, in two passes (#71)](https://github.com/logos-co/logos-package-manager-ui/pull/71) +- [refactor: generate the view-plugin glue, and drop the module-builder pin (#69)](https://github.com/logos-co/logos-package-manager-ui/pull/69) +- [fix(windows): bump the pins so package_manager publishes an x86_64-windows target (#68)](https://github.com/logos-co/logos-package-manager-ui/pull/68) + +### logos-plugin-qt + +- [feat(glue): pull the caller from the host image and push it across the C ABI (#25)](https://github.com/logos-co/logos-plugin-qt/pull/25) +- [chore(deps): track logos-lidl master, for lidl/identity.hpp (#24)](https://github.com/logos-co/logos-plugin-qt/pull/24) +- [feat(qt-host): share the teardown helper, and guard the glue on MAJOR too (#23)](https://github.com/logos-co/logos-plugin-qt/pull/23) +- [feat(qt-host): add logos_qt_host_shared, and assert its layering (#22)](https://github.com/logos-co/logos-plugin-qt/pull/22) +- [fix(glue): guard the teardown body on protocol 0.5 (#21)](https://github.com/logos-co/logos-plugin-qt/pull/21) +- [feat(glue): reach the module's teardown hook from the plugin class (#20)](https://github.com/logos-co/logos-plugin-qt/pull/20) +- [feat: the Qt host runtime and cdylib-glue generator (#19)](https://github.com/logos-co/logos-plugin-qt/pull/19) + +### logos-protocol + +- [feat(caller): resolve who is calling, and declare the export that carries it (#70)](https://github.com/logos-co/logos-protocol/pull/70) +- [fix(proxy): authorize against a store that can only hold INBOUND tokens (#69)](https://github.com/logos-co/logos-protocol/pull/69) +- [docs(version): the obvious way to guard a conditional surface is wrong (#68)](https://github.com/logos-co/logos-protocol/pull/68) +- [docs(shared-api): describe the scheme that actually shipped (#67)](https://github.com/logos-co/logos-protocol/pull/67) +- [feat(abi): publish the module-impl export list as data, for backends to check against (#66)](https://github.com/logos-co/logos-protocol/pull/66) +- [feat(shared-api): make liblogos_protocol.dll a usable single provider (#65)](https://github.com/logos-co/logos-protocol/pull/65) +- [feat(abi): 0.5 — advertise the module teardown surface (#63)](https://github.com/logos-co/logos-protocol/pull/63) +- [feat(abi): an optional teardown pair on the module C ABI (#62)](https://github.com/logos-co/logos-protocol/pull/62) +- [feat(proxy): answer name()/version() for a provider that does not (#61)](https://github.com/logos-co/logos-protocol/pull/61) +- [ci: use logos-co/setup-nix-cache-action for Nix setup and caching (#60)](https://github.com/logos-co/logos-protocol/pull/60) +- [feat: per-client token store, the host-services C ABI, and a container shape-check (#59)](https://github.com/logos-co/logos-protocol/pull/59) + +### logos-qt-sdk + +- [fix(qt-consumer): qualify the record codecs by wrapper class (#43)](https://github.com/logos-co/logos-qt-sdk/pull/43) +- [chore: drop logos_ui_plugin_context.h; logos-view-module is its sole owner (#42)](https://github.com/logos-co/logos-qt-sdk/pull/42) +- [feat(consumer): the Qt consumer keeps every type the std one keeps (#41)](https://github.com/logos-co/logos-qt-sdk/pull/41) +- [fix: fold EVERY provider rejection code, not just dispatch_failed (#40)](https://github.com/logos-co/logos-qt-sdk/pull/40) +- [chore(qt-generator): retire --backend ui; logos-view-module owns it now (#39)](https://github.com/logos-co/logos-qt-sdk/pull/39) +- [feat(ui): publish the teardown hook on generated view plugins (#38)](https://github.com/logos-co/logos-qt-sdk/pull/38) +- [docs: point at the scheme that replaced LogosSharedFromDll.cmake (#37)](https://github.com/logos-co/logos-qt-sdk/pull/37) +- [chore(bridge): retire the second lp_client behind invokeAsyncResult (#36)](https://github.com/logos-co/logos-qt-sdk/pull/36) +- [feat(generator): derive identity methods onto Qt consumer wrappers (#35)](https://github.com/logos-co/logos-qt-sdk/pull/35) +- [fix(host-core): mirror the corrected stats fields into the QVariantMap (#34)](https://github.com/logos-co/logos-qt-sdk/pull/34) +- [feat: split the SDK by capability, and retire the Qt-module backends (#33)](https://github.com/logos-co/logos-qt-sdk/pull/33) + +### logos-rust-sdk + +- [fix: fold EVERY provider rejection code, not just dispatch_failed (#49)](https://github.com/logos-co/logos-rust-sdk/pull/49) +- [chore(deps): relock logos-module-builder — the root ipc-test was red and unrun (#48)](https://github.com/logos-co/logos-rust-sdk/pull/48) +- [feat(abi): define logos_module_set_call_caller, gated on protocol 0.6 (#47)](https://github.com/logos-co/logos-rust-sdk/pull/47) +- [test(abi): assert the scaffold defines every declared module-impl export (#46)](https://github.com/logos-co/logos-rust-sdk/pull/46) +- [fix(lidl-gen): emit the protocol 0.5 teardown exports for Rust modules (#45)](https://github.com/logos-co/logos-rust-sdk/pull/45) +- [fix: fold provider rejections into the consumer error channel, and unblock the client-cache lock (#44)](https://github.com/logos-co/logos-rust-sdk/pull/44) +- [feat(lidl-gen): derive identity methods for Rust providers and consumers (#43)](https://github.com/logos-co/logos-rust-sdk/pull/43) +- [fix(lidl-gen): call grant_host_services through the public API, not `ffi` (#42)](https://github.com/logos-co/logos-rust-sdk/pull/42) +- [fix(lidl-gen): emit logos_module_grant_host_services, the missing 11th export (#41)](https://github.com/logos-co/logos-rust-sdk/pull/41) +- [ci: use logos-co/setup-nix-cache-action for Nix setup and caching (#40)](https://github.com/logos-co/logos-rust-sdk/pull/40) +- [chore(lidl-gen): delete the dead gen_provider example (#39)](https://github.com/logos-co/logos-rust-sdk/pull/39) + +### logos-standalone-app + +- [fix(ci): run the symbol gate, and fix what it does on Windows (#41)](https://github.com/logos-co/logos-standalone-app/pull/41) +- [chore(deps): pick up ui-host's teardown grace period (#40)](https://github.com/logos-co/logos-standalone-app/pull/40) +- [feat(shared-runtime): link the shared Qt host, and gate the invariant (#39)](https://github.com/logos-co/logos-standalone-app/pull/39) +- [chore(deps): relock logos-liblogos onto the cycle cut (3,282 → 252 nodes) (#38)](https://github.com/logos-co/logos-standalone-app/pull/38) +- [chore(deps): track master for protocol, cpp-sdk and plugin-qt (#37)](https://github.com/logos-co/logos-standalone-app/pull/37) +- [fix: fix the hot relaods (#36)](https://github.com/logos-co/logos-standalone-app/pull/36) + +### logos-storage-ui + +- [feat(flake): add nix binary cache (#90)](https://github.com/logos-co/logos-storage-ui/pull/90) + +### logos-test-modules + +- [chore(deps): bump module-builder — test_fullapi_ui does not compile without it (#48)](https://github.com/logos-co/logos-test-modules/pull/48) +- [fix(tests): update call sites for the widened Qt consumer surface (#47)](https://github.com/logos-co/logos-test-modules/pull/47) +- [test: a fixture for the module teardown contract (#46)](https://github.com/logos-co/logos-test-modules/pull/46) +- [fix(ui): ship the 256x256 icons that ui_qml packaging now requires (#45)](https://github.com/logos-co/logos-test-modules/pull/45) +- [Migrate the last Qt fixtures to interface "universal", retire test_ipc_module, and repoint onto logos-qt-host (#44)](https://github.com/logos-co/logos-test-modules/pull/44) + +### logos-tutorial + +- [docs: the widened Qt consumer surface (#84)](https://github.com/logos-co/logos-tutorial/pull/84) +- [ci: use logos-co/setup-nix-cache-action for Nix setup and caching (#83)](https://github.com/logos-co/logos-tutorial/pull/83) +- [fix(doctests): ship a 256x256 placeholder icon, per the LGX icon contract (#82)](https://github.com/logos-co/logos-tutorial/pull/82) +- [docs: stop documenting removed generator flags (#81)](https://github.com/logos-co/logos-tutorial/pull/81) + +### logos-view-module + +- [feat(view-generator): own the ui plugin emitter, and the header it pairs with (#3)](https://github.com/logos-co/logos-view-module/pull/3) +- [feat: own the view-plugin templates, and the check that proves they work (#2)](https://github.com/logos-co/logos-view-module/pull/2) + +### logos-view-module-runtime + +- [feat(ui-host): give a view its chance to finish before teardown (#26)](https://github.com/logos-co/logos-view-module-runtime/pull/26) +- [docs: the module-side templates live in logos-view-module now (#25)](https://github.com/logos-co/logos-view-module-runtime/pull/25) +- [fix: fix the hot relaods (#24)](https://github.com/logos-co/logos-view-module-runtime/pull/24)