From 89fcd64ccda912acc38fc73440e3cf6ad5055e25 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Sat, 15 Aug 2026 11:03:19 +0300 Subject: [PATCH 01/11] feat: integrate realtime across SDK and CI --- .github/workflows/SECURITY_CI.yml | 23 +++++++++++++++++++++++ .github/workflows/sdk-release.yml | 13 ++++++++++++- CMakeLists.txt | 25 ++++++++++++++++++------- modules/cli | 2 +- modules/realtime | 2 +- 5 files changed, 55 insertions(+), 10 deletions(-) diff --git a/.github/workflows/SECURITY_CI.yml b/.github/workflows/SECURITY_CI.yml index c67bef6..db05a0d 100644 --- a/.github/workflows/SECURITY_CI.yml +++ b/.github/workflows/SECURITY_CI.yml @@ -104,6 +104,9 @@ env: -DVIX_ENABLE_MIDDLEWARE=ON -DVIX_ENABLE_CLI=ON -DVIX_ENABLE_WEBSOCKET=ON + -DVIX_ENABLE_REALTIME=ON + -DVIX_REALTIME_WITH_WEBSOCKET=ON + -DVIX_REALTIME_WITH_POSTGRES=OFF -DVIX_ENABLE_TEMPLATE=ON -DVIX_ENABLE_UI=ON -DVIX_ENABLE_NOTE=ON @@ -143,6 +146,9 @@ env: -DVIX_ENABLE_MIDDLEWARE=ON -DVIX_ENABLE_CLI=ON -DVIX_ENABLE_WEBSOCKET=ON + -DVIX_ENABLE_REALTIME=ON + -DVIX_REALTIME_WITH_WEBSOCKET=ON + -DVIX_REALTIME_WITH_POSTGRES=OFF -DVIX_ENABLE_TEMPLATE=ON -DVIX_ENABLE_UI=ON -DVIX_ENABLE_NOTE=ON @@ -190,6 +196,7 @@ env: -DVIX_MIDDLEWARE_BUILD_TESTS=ON -DVIX_CLI_BUILD_TESTS=ON -DVIX_WEBSOCKET_BUILD_TESTS=ON + -DVIX_REALTIME_BUILD_TESTS=ON -DVIX_TEMPLATE_BUILD_TESTS=ON -DTEMPLATE_BUILD_TESTS=ON -DVIX_UI_BUILD_TESTS=ON @@ -255,6 +262,7 @@ jobs: test -f modules/template/CMakeLists.txt test -f modules/ui/CMakeLists.txt test -f modules/note/CMakeLists.txt + test -f modules/realtime/CMakeLists.txt - name: Select compiler run: | @@ -357,6 +365,11 @@ jobs: exit 1 fi + if ! grep -Eq 'vix_realtime_' /tmp/vix_ctest_list.txt; then + echo "::error::Realtime tests were not registered." + exit 1 + fi + - name: Run module tests run: | set -euxo pipefail @@ -436,6 +449,11 @@ jobs: exit 1 fi + if ! grep -Eq 'vix_realtime_' /tmp/vix_san_ctest_list.txt; then + echo "::error::Sanitized Realtime tests were not registered." + exit 1 + fi + - name: Run sanitized module tests run: | set -euxo pipefail @@ -1008,6 +1026,11 @@ jobs: exit 1 fi + if ! grep -Eq 'vix_realtime_' /tmp/vix_full_tests_list.txt; then + echo "::error::Full test profile did not register Realtime tests." + exit 1 + fi + summary: name: SECURITY_CI Summary needs: diff --git a/.github/workflows/sdk-release.yml b/.github/workflows/sdk-release.yml index 51f53ec..6c58d33 100644 --- a/.github/workflows/sdk-release.yml +++ b/.github/workflows/sdk-release.yml @@ -278,6 +278,10 @@ jobs: # --- web modules: web + all -------------------------------- if has "web all"; then have_h "vix/websocket.hpp"; have_l "libvix_websocket.a" + have_h "vix/realtime.hpp"; have_l "libvix_realtime.a" + test -d "$ID/include/vix/realtime" + test ! -d "$ID/include/vix/realtime/internal" + grep -R "vix::realtime" "$ID/lib/cmake/Vix" -n have_h "vix/validation.hpp" have_h "vix/crypto.hpp" have_h "vix/webrpc.hpp" @@ -290,6 +294,11 @@ jobs: nm -C "$ID/lib/libvix_websocket.a" | grep "vix::websocket::LongPollingManager::push_to" fi + if ! has "web all"; then + no_h "vix/realtime.hpp" + no_l "libvix_realtime.a" + fi + # --- data modules: data + all ------------------------------ if has "data all"; then have_h "vix/db.hpp" @@ -405,6 +414,7 @@ jobs: echo '#include ' if has "web all"; then echo '#include ' + echo '#include ' echo '#include ' echo '#include ' echo '#include ' @@ -433,7 +443,8 @@ jobs: if has "web all"; then echo ' vix::websocket::Config ws_config{};' echo ' vix::websocket::Router ws_router{};' - echo ' (void)ws_config; (void)ws_router;' + echo ' vix::realtime::Config realtime_config{};' + echo ' (void)ws_config; (void)ws_router; (void)realtime_config;' fi echo ' std::cout << "Vix SDK consumer (profile='"$P"') build and link works\n";' echo ' return 0;' diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ebe21b..428cc4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2069,13 +2069,24 @@ if (VIX_ENABLE_INSTALL) foreach(_m IN LISTS _VIX_INSTALL_MODULES) if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/${_m}/include") - install(DIRECTORY "modules/${_m}/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - FILES_MATCHING - PATTERN "*.hpp" - PATTERN "*.h" - PATTERN "*.inc" - ) + if (_m STREQUAL "realtime") + install(DIRECTORY "modules/${_m}/include/" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + FILES_MATCHING + PATTERN "*.hpp" + PATTERN "*.h" + PATTERN "*.inc" + PATTERN "internal" EXCLUDE + ) + else() + install(DIRECTORY "modules/${_m}/include/" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + FILES_MATCHING + PATTERN "*.hpp" + PATTERN "*.h" + PATTERN "*.inc" + ) + endif() endif() endforeach() diff --git a/modules/cli b/modules/cli index 16f2dd6..44dec7e 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 16f2dd6f947055f4e5c01528dd0328abd9e949fb +Subproject commit 44dec7e5cb9f1ce248bea69477593e3872a36448 diff --git a/modules/realtime b/modules/realtime index 7585ac0..77c944d 160000 --- a/modules/realtime +++ b/modules/realtime @@ -1 +1 @@ -Subproject commit 7585ac032753587978b3973ef7ce82c3c578e33c +Subproject commit 77c944d03167dfdf7ef7ebb1d87a6c0b399018ea From 500d69befb71cbce82ee302df0173d729cbb9a25 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Sun, 16 Aug 2026 10:04:24 +0300 Subject: [PATCH 02/11] release: prepare v2.8.5 --- CHANGELOG.md | 32 ++++++++++++++++++++++++++++++++ modules/cli | 2 +- modules/io | 2 +- modules/log | 2 +- modules/utils | 2 +- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26d8c25..d3d83cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,38 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# Vix v2.8.5 + +Vix v2.8.5 stabilizes **Vix Realtime** and strengthens the Vix package workflow with faster, safer, and better-tested dependency installation. + +## Added + +### Vix Realtime + +- Authoritative stateful rooms with persisted events. +- Replay, snapshots, session resume, presence, metrics, and health APIs. +- In-memory and PostgreSQL persistence. +- WebSocket integration and SDK packaging. + +### Install compatibility contracts + +- Deterministic tests for Git-hosted CMake dependencies. +- Coverage for header-only, static, shared, alias targets, generated headers, nested subdirectories, CMake options, compile features, and transitive dependencies. + +## Improved + +- `vix install` now reconciles `vix.app` and `vix.lock`, resolving only new or changed dependencies. +- Unchanged installs avoid remote Git resolution, unnecessary link recreation, and identical CMake rewrites. +- Git checkouts are reused directly from the Vix cache. +- Direct Git installs remain transactional on failure. +- CMake dependency options are preserved through the lockfile and generated integration. +- Vix no longer leaks its internal `SPDLOG_FMT_EXTERNAL` configuration into user dependencies. +- Realtime configuration, recovery, snapshots, SDK integration, and CI coverage were stabilized. + +## Summary + +Vix v2.8.5 makes Realtime a first-class Vix module while significantly improving the reliability, performance, and compatibility guarantees of `vix install`. + # Vix v2.8.4 Vix v2.8.4 improves the everyday C++ development loop with faster compilation and rebuilds, lighter public headers, safer caching, better diagnostics, and more consistent `build`, `run`, and `dev` behavior. diff --git a/modules/cli b/modules/cli index 44dec7e..69769de 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 44dec7e5cb9f1ce248bea69477593e3872a36448 +Subproject commit 69769de0576251e793523445b2e29242b30643c0 diff --git a/modules/io b/modules/io index 350d564..6ca8a1c 160000 --- a/modules/io +++ b/modules/io @@ -1 +1 @@ -Subproject commit 350d56414e40bb2b748fa28c2f18f1305cfd9e5e +Subproject commit 6ca8a1cba82ee782ad70e0169db2d2d9886da228 diff --git a/modules/log b/modules/log index 0ef32c5..04a82f0 160000 --- a/modules/log +++ b/modules/log @@ -1 +1 @@ -Subproject commit 0ef32c5aa0322e0d2fe94179247b7ac25ee73f93 +Subproject commit 04a82f07a307f76c72b0983c1e3c5a6badad0288 diff --git a/modules/utils b/modules/utils index 1845e1f..a503518 160000 --- a/modules/utils +++ b/modules/utils @@ -1 +1 @@ -Subproject commit 1845e1f93509b8dbecfdac100266c37e67b48655 +Subproject commit a5035184d76b24c1d6c101e3c88c8dd71825f47a From 8857067a65d351678a7bb8040fadf8786ad56c61 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Mon, 17 Aug 2026 11:11:22 +0300 Subject: [PATCH 03/11] release: prepare v2.8.5 --- CHANGELOG.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- modules/cli | 2 +- modules/process | 2 +- modules/utils | 2 +- 4 files changed, 49 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3d83cb..62702de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 # Vix v2.8.5 -Vix v2.8.5 stabilizes **Vix Realtime** and strengthens the Vix package workflow with faster, safer, and better-tested dependency installation. +Vix v2.8.5 stabilizes **Vix Realtime** and significantly strengthens dependency management and modular application architecture. ## Added @@ -18,10 +18,45 @@ Vix v2.8.5 stabilizes **Vix Realtime** and strengthens the Vix package workflow - In-memory and PostgreSQL persistence. - WebSocket integration and SDK packaging. +### Module-scoped Git dependencies + +Git dependencies can now belong to a specific application module. + +```bash +vix install https://github.com/gabime/spdlog \ + --tag v1.15.3 \ + --target spdlog::spdlog \ + --module auth +``` + +The dependency is declared in the module's `vix.module`, while the application continues to use a single root `vix.lock` and the shared Vix dependency cache. + +Module dependencies remain isolated from sibling modules and are linked only to the module that owns them. + +### Module architecture validation + +- Added a canonical `ModuleManifest` model for `vix.module`. +- Added a canonical `ModuleGraph` for module identity, paths, dependencies, cycles, and deterministic dependency ordering. +- Added dependency ownership tracking for application and module dependencies. +- Added cross-module dependency constraint analysis. +- Detects normalized module-name collisions, path collisions, invalid dependencies, disabled dependencies, self-dependencies, and dependency cycles. +- Detects incompatible dependency requirements before they reach the generated CMake graph. + +### Atomic project mutations + +Dependency and module mutations now use project-scoped transactional updates. + +- Project mutation locking prevents concurrent commands from silently overwriting each other's state. +- Multi-file mutations use staged writes and rollback. +- Interrupted transactions can be recovered from `.vix/transactions`. +- Failed operations restore previous project metadata byte-for-byte. +- `vix add`, `vix remove`, `vix update`, `vix install`, and module mutation commands use the common mutation infrastructure. + ### Install compatibility contracts - Deterministic tests for Git-hosted CMake dependencies. - Coverage for header-only, static, shared, alias targets, generated headers, nested subdirectories, CMake options, compile features, and transitive dependencies. +- Added strict module Git installation, rollback, ownership, constraint, graph, and transaction contracts. ## Improved @@ -29,13 +64,22 @@ Vix v2.8.5 stabilizes **Vix Realtime** and strengthens the Vix package workflow - Unchanged installs avoid remote Git resolution, unnecessary link recreation, and identical CMake rewrites. - Git checkouts are reused directly from the Vix cache. - Direct Git installs remain transactional on failure. +- Module-scoped Git installs validate the target module before performing remote work. +- Dependency conflicts across the application and its active modules are detected instead of using last-write-wins behavior. +- Multiple modules can share the same compatible dependency without requiring separate downloads or lockfiles. +- Git dependency identity now normalizes repository-root subdirectories consistently, so omitted subdirectories and `.` are treated as the same source location. - CMake dependency options are preserved through the lockfile and generated integration. +- Git installation progress now reports remote work immediately and displays real Git receiving progress without inventing global percentages. +- `vix install` dependency operations no longer require a build-complete `vix.app`. - Vix no longer leaks its internal `SPDLOG_FMT_EXTERNAL` configuration into user dependencies. +- Compiler-specific warning flags are now scoped correctly between GCC and Clang. - Realtime configuration, recovery, snapshots, SDK integration, and CI coverage were stabilized. ## Summary -Vix v2.8.5 makes Realtime a first-class Vix module while significantly improving the reliability, performance, and compatibility guarantees of `vix install`. +Vix v2.8.5 makes Realtime a first-class Vix module while making modular applications and dependency installation substantially safer. + +Applications can now assign Git dependencies to individual modules, detect dependency and graph conflicts before build generation, recover from interrupted metadata mutations, and reuse a single deterministic dependency graph across the application. # Vix v2.8.4 diff --git a/modules/cli b/modules/cli index 69769de..239a215 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 69769de0576251e793523445b2e29242b30643c0 +Subproject commit 239a215abe8b52cc7d2ddd0850c30ed78c4779ab diff --git a/modules/process b/modules/process index ba4a16a..55561ad 160000 --- a/modules/process +++ b/modules/process @@ -1 +1 @@ -Subproject commit ba4a16a4dc3ec7f30f64dae18d250a00272149d4 +Subproject commit 55561adaa03a4b18d43d068c1c482a5e9c6e3f06 diff --git a/modules/utils b/modules/utils index a503518..075b376 160000 --- a/modules/utils +++ b/modules/utils @@ -1 +1 @@ -Subproject commit a5035184d76b24c1d6c101e3c88c8dd71825f47a +Subproject commit 075b376b934e9a504d6d147e5a729c56c20d7c1a From 558ab5b369eaeb38c18278f665320ba3387f4bdd Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Mon, 17 Aug 2026 14:47:52 +0300 Subject: [PATCH 04/11] fix: update cli and io submodules for v2.8.5 --- modules/cli | 2 +- modules/io | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cli b/modules/cli index 239a215..99ada85 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 239a215abe8b52cc7d2ddd0850c30ed78c4779ab +Subproject commit 99ada858c51c2961999575fc89f5d468e27610db diff --git a/modules/io b/modules/io index 6ca8a1c..43113e6 160000 --- a/modules/io +++ b/modules/io @@ -1 +1 @@ -Subproject commit 6ca8a1cba82ee782ad70e0169db2d2d9886da228 +Subproject commit 43113e6a2f894fd716b34956269efed9574cb815 From 71a03fd946ee3aed10fc272119568db2fd64d645 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Mon, 17 Aug 2026 17:28:28 +0300 Subject: [PATCH 05/11] fix(utils): update utils submodule --- modules/utils | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/utils b/modules/utils index 075b376..5d3630d 160000 --- a/modules/utils +++ b/modules/utils @@ -1 +1 @@ -Subproject commit 075b376b934e9a504d6d147e5a729c56c20d7c1a +Subproject commit 5d3630d617c27d585b77031972b75f46285f5fa0 From a38da715fb80730385c0156e6850b5e524c5f2e3 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 18 Aug 2026 20:03:59 +0300 Subject: [PATCH 06/11] chore(utils): update utils submodule --- modules/utils | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/utils b/modules/utils index 5d3630d..12a725b 160000 --- a/modules/utils +++ b/modules/utils @@ -1 +1 @@ -Subproject commit 5d3630d617c27d585b77031972b75f46285f5fa0 +Subproject commit 12a725b3c68b5162a65ddc0728f21fa3c89d84a4 From 29efdc79551e6e5b91189e689dffb8a0bd7bb49d Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 18 Aug 2026 21:11:46 +0300 Subject: [PATCH 07/11] chore(utils): update utils submodule --- modules/utils | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/utils b/modules/utils index 12a725b..083df9b 160000 --- a/modules/utils +++ b/modules/utils @@ -1 +1 @@ -Subproject commit 12a725b3c68b5162a65ddc0728f21fa3c89d84a4 +Subproject commit 083df9b78110d88aa0e6157f6e31ae4220a079f8 From df44d6f863843b7cce8fc39d174917e10b89f2b0 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Wed, 19 Aug 2026 09:29:27 +0300 Subject: [PATCH 08/11] fix(cli): update cli submodule --- modules/cli | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cli b/modules/cli index 99ada85..f5752b4 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 99ada858c51c2961999575fc89f5d468e27610db +Subproject commit f5752b456068fd11182ec901c1d6027e3c58dfda From 6be634f096b88e0489c65f01732738c26df4c6be Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Wed, 19 Aug 2026 18:47:04 +0300 Subject: [PATCH 09/11] fix: update cli and note submodules --- modules/cli | 2 +- modules/note | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cli b/modules/cli index f5752b4..183a94b 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit f5752b456068fd11182ec901c1d6027e3c58dfda +Subproject commit 183a94beef3bd9ae908c16c7f508ae3252f7be45 diff --git a/modules/note b/modules/note index 10b256e..50d1724 160000 --- a/modules/note +++ b/modules/note @@ -1 +1 @@ -Subproject commit 10b256efd2167cd588e70526fc947c01f4197b9b +Subproject commit 50d1724a64cdc865f05386636f8bd612b4e6ca4e From 2c493e82d47ec01718214ad4409b27d006dd4973 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 20 Aug 2026 14:03:18 +0300 Subject: [PATCH 10/11] release: stabilize realtime for v2.8.5 --- CHANGELOG.md | 10 +++++++--- modules/realtime | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62702de..c261965 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,9 +14,13 @@ Vix v2.8.5 stabilizes **Vix Realtime** and significantly strengthens dependency ### Vix Realtime - Authoritative stateful rooms with persisted events. -- Replay, snapshots, session resume, presence, metrics, and health APIs. +- Transactional snapshots, replay, recovery, and session resume. +- Presence lifecycle and session reconnection support. - In-memory and PostgreSQL persistence. -- WebSocket integration and SDK packaging. +- WebSocket and protocol integration. +- Metrics and health APIs. +- Public SDK packaging with isolated, installable headers. +- Concurrency, persistence, recovery, and integration contracts. ### Module-scoped Git dependencies @@ -73,7 +77,7 @@ Dependency and module mutations now use project-scoped transactional updates. - `vix install` dependency operations no longer require a build-complete `vix.app`. - Vix no longer leaks its internal `SPDLOG_FMT_EXTERNAL` configuration into user dependencies. - Compiler-specific warning flags are now scoped correctly between GCC and Clang. -- Realtime configuration, recovery, snapshots, SDK integration, and CI coverage were stabilized. +- Realtime recovery, session resume, presence, snapshots, PostgreSQL support, SDK integration, and concurrency behavior were stabilized and validated. ## Summary diff --git a/modules/realtime b/modules/realtime index 77c944d..0a1c96c 160000 --- a/modules/realtime +++ b/modules/realtime @@ -1 +1 @@ -Subproject commit 77c944d03167dfdf7ef7ebb1d87a6c0b399018ea +Subproject commit 0a1c96cd0fdbd64dbb48bf79b19ce0a98c10cd00 From 532db4fb042f8fc19e63848f3a0c0f20594eac75 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 20 Aug 2026 14:39:48 +0300 Subject: [PATCH 11/11] chore(realtime): update module revision --- modules/realtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/realtime b/modules/realtime index 0a1c96c..a0141ea 160000 --- a/modules/realtime +++ b/modules/realtime @@ -1 +1 @@ -Subproject commit 0a1c96cd0fdbd64dbb48bf79b19ce0a98c10cd00 +Subproject commit a0141ea18ce67b6687b9800e3d643b2a6cd7176a