> For the complete documentation index, see [llms.txt](https://docs.xplatform.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.xplatform.com/release-notes/3.16/3.16.38/talon-3.16.70.md).

# Talon 3.16.70

<mark style="color:green;">Release Date: Friday, March 20, 2026</mark>

{% hint style="danger" %}
**Known issue — skip this release if you use the Rumi management agent.** The Process RSS metric added in this release ([TALON-146](#talon-146)) was assigned a heartbeat-schema field id that collides with one Rumi 4.0 already uses, with an incompatible type. As a result the rumi-agent (2.0.x) cannot deserialize heartbeats from any XVM running 3.16.70 and drops every per-XVM metric from the management dashboard. This is fixed under TALON-159 in **Talon 3.16.72 (**[**X Platform 3.16.39**](/release-notes/3.16/3.16.39/talon-3.16.72.md)**)**. Upgrade directly to 3.16.72 rather than deploying 3.16.70; customers on 3.16.63 or earlier are unaffected.
{% endhint %}

## Compatibility Notes

The following issues have compatibility implications:

* [TALON-137 - Intermittent core dump when enabling ZG per thread stats](#talon-137)

## Change Summary

* [Bug](#bug)
  * [TALON-137 - Intermittent core dump when enabling ZG per thread stats](#talon-137)
* [New Feature](#new-feature)
  * [TALON-98 - Non-zero exit code from the XVM on error](#talon-98)
  * [TALON-146 - Add Process RSS (Resident Set Size) metric to XVM heartbeats](#talon-146)
* [Improvement](#improvement)
  * [TALON-143 - Add PostWireTs to service message logs and store transaction logs](#talon-143)
  * [TALON-144 - Add PreWireTs to service message logs](#talon-144)
  * [TALON-145 - Enable parallel builds using ADM Maven Plugin](#talon-145)
* [Change](#change)
  * [TALON-147 - Change freePhysicalMemorySize heartbeat field to report MemAvailable instead of MemFree on Linux.](#talon-147)

## Bugs <a href="#bug" id="bug"></a>

### TALON-137 <a href="#talon-137" id="talon-137"></a>

<mark style="color:orange;">Intermittent core dump when enabling ZG per thread stats</mark>

This release fixes an intermittent core dump that could occur when ZG (Zero Garbage) per thread stats were enabled. The fix replaces the previous `ThreadMXBean` reflection-based approach with native JNI calls for per-thread telemetry collection, which is both more reliable and truly zero-garbage.

**Compatibility impact:**

* Per-thread stats now **require the native library** to be available. If the native runtime is not loaded, per-thread stats will be unavailable (previously there was a non-ZG fallback using `ThreadMXBean`).
* The non-ZG fallback for per-thread stats has been **removed**. Environments that relied on per-thread stats without the native library will no longer have this capability.
* Per-thread **wait time**, **wait count**, and **affinity** fields are no longer reported in individual thread stats within XVM heartbeats. Thread affinities can still be ascertained via:
  * **Automatic dump at engine start**: When thread affinitization is enabled, the AEP engine automatically logs the affinitization state at startup (at `CONFIG` trace level).
  * **XVM admin command**: The `affinitydump` (or `xvm_affinitydump`) admin command can be invoked at any time to dump the current thread affinitization state to the XVM's trace log.
* There is a maximum limit of **2048 native threads** that can be tracked per collection cycle.

## New Features <a href="#new-feature" id="new-feature"></a>

### TALON-98 <a href="#talon-98" id="talon-98"></a>

<mark style="color:orange;">Non-zero exit code from the XVM on error</mark>

This release enhances the XVM to return a non-zero exit code if an error causes its exit

### TALON-146 <a href="#talon-146" id="talon-146"></a>

<mark style="color:orange;">Add Process RSS (Resident Set Size) metric to XVM heartbeats</mark>

This release adds the current process's Resident Set Size (actual physical RAM usage) in the container heartbeats

> **Note:** the heartbeat field id assigned to this metric collides with the Rumi 4.0 schema and breaks rumi-agent heartbeat deserialization (see the known-issue notice at the top of this page). The collision is corrected under TALON-159 in [Talon 3.16.72](/release-notes/3.16/3.16.39/talon-3.16.72.md).

## Improvements <a href="#improvement" id="improvement"></a>

### TALON-143 <a href="#talon-143" id="talon-143"></a>

<mark style="color:orange;">Add PostWireTs to service message logs and store transaction logs</mark>

Adds PostWireTs — the timestamp captured just after a message is received from the messaging provider — to the inbound message log (Event Sourcing and State Replication) and the store transaction log (Event Sourcing only). Not added to the store transaction log or outbound message log for State Replication. Requires nv.msg.latency.stats=true.

### TALON-144 <a href="#talon-144" id="talon-144"></a>

<mark style="color:orange;">Add PreWireTs to service message logs</mark>

Adds PreWireTs — the timestamp captured just before a message is handed to the messaging provider send call — to the inbound message log (Event Sourcing and State Replication) and the store transaction log (Event Sourcing only). For inbound messages, PreWireTs is the upstream sender's pre-send timestamp; PostWireTs minus PreWireTs represents the wire transit time (not accounting for clock skew). Not added to the store transaction log or outbound message log for State Replication. Requires nv.msg.latency.stats=true.

### TALON-145 <a href="#talon-145" id="talon-145"></a>

<mark style="color:orange;">Enable parallel builds using ADM Maven Plugin</mark>

This release makes the ADM Maven plugin thread-safe, enabling parallel code generation during concurrent Maven builds (mvn -T). Shared static state in the plugin (import cache, plugin registry, date formatters) has been synchronized using thread-safe collections and ThreadLocal, and all Mojo goals are now declared threadSafe = true.

## Changes <a href="#change" id="change"></a>

### TALON-147 <a href="#talon-147" id="talon-147"></a>

<mark style="color:orange;">Change freePhysicalMemorySize heartbeat field to report MemAvailable instead of MemFree on Linux.</mark>

This release changes the freePhysicalMemorySize field in container heartbeat memory stats to report the host's available memory (MemAvailable) rather than raw free memory (MemFree) on Linux. Priopr to this change, the value excluded memory used by the kernel for page cache and buffers, which made the host appear to have far less usable memory than was actually available. This change accounts for reclaimable cache and buffers, providing a more accurate representation of the memory available for use.
