fix(runtime): mux adapter forwards the dependency's real status code (05/STAB-19)

This commit is contained in:
Joseph Doherty
2026-08-20 10:30:14 -04:00
parent ae97b32c82
commit 3f8d5815b3
4 changed files with 117 additions and 3 deletions
@@ -66,10 +66,23 @@ public sealed class DependencyConsumerMuxAdapter : ReceiveActor
_log.Debug("DependencyConsumerMuxAdapter: registered {Count} dependency ref(s)", refs.Count);
}
/// <summary>
/// Forwards one dependency value to the consumer, <b>status code included</b> (archreview
/// 05/STAB-19).
/// </summary>
/// <remarks>
/// This used to pass a hard-coded <c>0u</c> behind a comment saying quality was stripped at the
/// mux boundary. That was true when the adapter was written and stopped being true at #478/#519 —
/// <see cref="VirtualTagActor.DependencyValueChanged"/> has carried the source driver's full status
/// code, sub-code and all, ever since. The stale comment outliving the fact is what kept a
/// comms-lost input arriving at the Calculation driver as <i>arrived, Good, null</i>:
/// indistinguishable from a genuine Good null, so the warm-up gate was satisfied by a value that
/// never arrived and the calc output stayed Good over a dead source.
/// </remarks>
/// <param name="msg">The dependency value, as the mux delivered it.</param>
private void OnDependencyValueChanged(VirtualTagActor.DependencyValueChanged msg)
{
// Quality is stripped at the mux boundary (value + timestamp only), so forward Good (0).
_consumer.OnDependencyValue(msg.TagId, msg.Value, statusCode: 0u, msg.TimestampUtc);
_consumer.OnDependencyValue(msg.TagId, msg.Value, msg.StatusCode, msg.TimestampUtc);
}
/// <summary>The mux's batched delivery: one message carrying this adapter's whole matched slice of a