# Psyclone AIOS & CMSDK 2.1.1 — Release Notes *Released 26 July 2026* Psyclone AIOS and its underlying CMSDK library both step to **2.1.1**, a consolidation release that turns the 2.1.0 macOS/testing milestone into a hardened, cross-platform-clean build. Every test suite now passes on all three supported 64-bit platforms — **Linux, Windows and macOS** — for both the CMSDK unit suite (`Psyclone test=cmsdk`, 33/33) and the Psyclone system suite (`Psyclone psytest`). ## What's new since 2.1.0 **External-module lifecycle (T1.4).** Psyclone can now auto-start, supervise and gracefully stop the external-module executables declared in a spec. A crashed internal space is auto-restarted for crash isolation, and helper processes are told about a shutdown *before* the node stops — so they exit cleanly within the stop timeout instead of being force-killed. **Declarative TriggerGroup joins (T1.6).** A new `` primitive fires only on *grouped* activation across several triggers — requires-all, requires-any, or a min-count threshold — backed by a matching join primitive in CMSDK. This makes "wait until N of these things have happened" a first-class, declarative pattern rather than something you hand-roll in a component. **A tougher self-checking system test.** The `psytest` suite now self-creates its own fixtures (a clean checkout needs no manual setup), resolves its helper executables relative to the Psyclone binary, adds an end-to-end external-module auto-start stage, and prints a rich per-test PASS/FAIL summary. **Verified trigger-filter semantics.** All eight trigger-filter operators are now documented with worked examples and corrected semantics. ## Stability & correctness fixes - Fixed inverted `equalsnumeric` / `notequalsnumeric` trigger filters and `haskey` matching; numeric operators now parse as float64, and the `maxage` operand is correctly milliseconds. - Fixed a shutdown self-SIGKILL/hang where a node could terminate its own process. - Fixed graceful stop of external modules on Windows (a new-console child couldn't receive the parent's console ctrl signal). - Fixed reuse of a stale process-map entry when re-creating a space (stale shared-memory safety). - **CMSDK:** fixed an intermittent `network_http` teardown hang (a double-delete race in `NetworkChannel`, now bounded waits + invalid-handle hardening — verified over 20 consecutive clean runs); fixed a Windows `GetExitCodeProcess` misuse that reported still-running processes as terminated; fixed a Linux thread-reap SIGSEGV/hang; hardened Windows shared-memory force-zeroing; routed OpenSSL handshake/certificate errors through the log system, with client-side hostname verification and custom CA support. ## Build quality Clean builds now work out of the box. `make clean && make` (and `make rebuild`) previously failed from a pristine tree because the per-module `build/` object directory was expected to already exist. The compile rules now self-create their output directory across all four modules (CMSDK, Examples, Psyclone, System), so a fresh checkout compiles first time on every platform. The Windows `Examples` project also now links against the correct non-SSL CMSDK library. ## Platforms - **Linux 64-bit** — build clean, `test=cmsdk` 33/33, `psytest` all modules pass. - **Windows 64-bit** — build 0 warnings/0 errors, `test=cmsdk` 33/33, `psytest` all modules pass. - **macOS 64-bit** (Apple Silicon/Intel) — build clean, both suites pass. ## Downloads - Psyclone 2.1.1 source release (LGPL) - Binary distributions: Linux 64-bit, Windows 64-bit, macOS 64-bit --- *Psyclone AIOS is a distributed, real-time publish/subscribe platform with sub-100µs messaging, built on the open-source CMSDK library. Learn more at [psyclone.cmlabs.com](https://psyclone.cmlabs.com) and [cmsdk.cmlabs.com](https://cmsdk.cmlabs.com).*