test(site-runtime): HandshakeResetEchoTests — label the legacy pin as permanent behaviour (#36 review)

Claude-Session: https://claude.ai/code/session_01XPsuy2ZZ5Gbyfpt8PrK5BV
This commit is contained in:
Joseph Doherty
2026-09-10 15:36:28 -04:00
parent 17d5d3e639
commit 3595f00dad
@@ -84,7 +84,12 @@ public class HandshakeResetEchoTests : TestKit, IDisposable
private static IReadOnlyDictionary<string, string?> Values(int batchId)
=> new Dictionary<string, string?> { ["MoveOutBatchID"] = AttributeValueCodec.Encode(batchId) };
/// <summary>The defect, as documentation: the legacy overload answers from the stale cache.</summary>
/// <summary>
/// Pins the PERMANENT legacy behaviour, not a bug awaiting a fix: the six-argument overload is
/// deliberately unchanged (deployed scripts keep their semantics) and answers from the stale
/// cache — callers migrate to the reset-aware overload instead. Never "fix" the fast-path in
/// place; delete this test only if the legacy overload itself is removed.
/// </summary>
[Fact]
public async Task LegacyOverload_FastPathsOnThePreviousRunsCachedTrue()
{
@@ -127,11 +132,13 @@ public class HandshakeResetEchoTests : TestKit, IDisposable
// Only now the batch + trigger.
var batch = dcl.ExpectMsg<WriteTagBatchRequest>(TimeSpan.FromSeconds(5));
Assert.Equal(TriggerTag, batch.TriggerTagPath);
// TriggerValue may arrive boxed as bool or as its already-encoded string; normalise both sides.
Assert.Equal(AttributeValueCodec.Encode(true), AttributeValueCodec.Encode(batch.TriggerValue));
Assert.True(batch.Values.ContainsKey(BatchTag));
dcl.Reply(new WriteTagBatchResponse(batch.CorrelationId, true, null, DateTimeOffset.UtcNow));
// Still pending: the cache now holds False.
// Still pending: the cache now holds False, and nothing can complete the call until the
// TagValueUpdate below is sent — no race here, only a documented intermediate state.
Assert.False(call.IsCompleted);
// The device completes THIS request.