v3.1.1
v3.1.1
May 2, 2026 · GitHub ↗
Post-v3.1.0 hygiene release: packaging metadata, coverage scope, CI workflow polish, a test-coverage push, cross-platform fixes, and toolchain bumps. No public API changes.
Changed
gempba::create_custom_nodenow takes astd::shared_ptr<node_core>directly (no more wrapping at the call site)wall_timereimplemented on top ofstd::chrono(replacesgettimeofday) — same observable values, monotonic clock semanticsgempba::log_and_throwmarked[[noreturn]]so static analyzers and the compiler's flow analysis understand the call never returnsscore: cleaned up thekind/to_raw/from_rawpaths and added explicitunreachablemarkersnode_core_impl: lazy-init and result paths consolidated; redundant explicit destructor onnoderemoved; excessive debug logging trimmed- Codebase-wide
clang-tidyidentifier-naming pass (private members and locals only — no public API renames)
Removed
- Dead
prune()overload inwork_stealing_load_balancer - Unreachable defensive checks in
get_root_level_pending_node
Fixed
gempba::utils::get_nb_set_bitssigned-charoverflow on MinGW- MSYS2/MinGW build:
<windows.h>is now included before<psapi.h>sopsapi.hsees the types it needs centralized_utils.hpp:NOMINMAXredefinition guarded so headers that already define it don't trigger a warningnode.hpp:<stacktrace>inclusion gated on the__cpp_lib_stacktracefeature test, not just__has_include
Build
- MSYS2
PKGBUILDsha256updated to match the v3.1.0 source tarball - Codecov reporting now excludes
examples/,tests/, andexternal/so coverage numbers reflect only library code - New
clang-tidyandclang-formatidentifier-naming and configuration rules so future changes can't reintroduce the patterns just cleaned up - Ubuntu CI bumped to GCC 14;
<stacktrace>andstdc++explinkage gated accordingly so older toolchains still build the library - macOS CI defaults to the
macos-26runner image - Self-hosted runners are now matched by label set (multiple labels combined) rather than a single label
- MS-MPI runtime installed on the Windows CI runner so the multiprocessing test set actually runs
clang-formatdiagnostics surfaced with the colored summary;lint.shdiagnostics made readable on the terminal- Skip the
publish-test-resultsjob when the upstream build was cancelled runs-oninjected fromvars.RUNNER_*repository variables so runner targets can change without editing each workflow- New full-coverage tests for the
gempbafacade,node_manager,quasi_horizontal_load_balancer,work_stealing_load_balancer,node_core_impl,centralized_utils, plus branch coverage forqueue,utils,score, andnode - Thread pool readiness ordering tightened in throw/discard tests so the
send()race no longer deflakes them - Dropped flaky peak-vs-current RSS comparisons from the memory-usage tests
-Wunusedwarnings silenced on header-only helpers