docs(xml): fill missing XML doc comments + strip task-tracking refs across src (fixdocs)

Add missing <summary>/<param>/<returns>/<typeparam> tags and switch
interface implementations to <inheritdoc/> across 106 files; strip
project bookkeeping identifiers (Task NN, #05-TNN, PLAN-04, StoreAndForward-0NN)
from shipped code comments while preserving the descriptive rationale.
Comment-only: zero code-logic lines changed; solution builds 0/0.

Claude-Session: https://claude.ai/code/session_01MtdgwpEeCUn6cUA5f1LMPj
This commit is contained in:
Joseph Doherty
2026-07-10 08:23:56 -04:00
parent 75007b9edd
commit 5a878b78d4
106 changed files with 580 additions and 180 deletions
@@ -292,6 +292,7 @@ public class ScriptRuntimeContext
/// carried over verbatim from this context.
/// </summary>
/// <param name="childCallDepth">The recursion depth of the shared-script call.</param>
/// <returns>A new child <see cref="ScriptRuntimeContext"/> for the shared-script invocation.</returns>
internal ScriptRuntimeContext CreateChildContextForSharedScript(int childCallDepth)
{
return new ScriptRuntimeContext(
@@ -2199,11 +2200,10 @@ public class ScriptRuntimeContext
target: _listName,
payloadJson: payloadJson,
originInstanceName: _instanceName,
// 0 = the documented "no limit" escape hatch (StoreAndForward-015):
// notifications are retried until central acks and are never parked
// for retry exhaustion — a long central outage must not strand them
// behind per-message operator unparking. (Corrupt payloads still
// park — Task 14.)
// 0 = the documented "no limit" escape hatch: notifications are
// retried until central acks and are never parked for retry
// exhaustion — a long central outage must not strand them behind
// per-message operator unparking. (Corrupt payloads still park.)
maxRetries: 0,
// Never run the forwarder's 30s central Ask inline on the script
// thread: buffer due-immediately and kick the sweep. Send returns
@@ -24,6 +24,10 @@ internal readonly record struct TriggerRoutingDecision(TriggerRoutingKind Kind,
{
public static readonly TriggerRoutingDecision AllChanges = new(TriggerRoutingKind.AllChanges, null);
public static readonly TriggerRoutingDecision None = new(TriggerRoutingKind.None, null);
/// <summary>Creates a decision routing on changes to a single named attribute.</summary>
/// <param name="attribute">The name of the attribute to monitor.</param>
/// <returns>A <see cref="TriggerRoutingDecision"/> of kind <see cref="TriggerRoutingKind.MonitoredAttribute"/>.</returns>
public static TriggerRoutingDecision Monitored(string attribute) => new(TriggerRoutingKind.MonitoredAttribute, attribute);
}
@@ -44,6 +48,9 @@ internal static class TriggerRouting
/// <c>"attributeName"</c> (scripts + alarms) and <c>"attribute"</c> (alarm alias) keys.
/// Returns false when the JSON is missing, malformed, or carries no attribute name.
/// </summary>
/// <param name="triggerConfigJson">The trigger config JSON to read from.</param>
/// <param name="attribute">When this method returns, the monitored attribute name, or an empty string if not found.</param>
/// <returns><c>true</c> if an attribute name was found; otherwise <c>false</c>.</returns>
public static bool TryReadAttributeName(string? triggerConfigJson, out string attribute)
{
attribute = "";
@@ -76,6 +83,9 @@ internal static class TriggerRouting
/// unknown → all-changes (fail open — a misconfigured script still reacts, its own gate
/// remains the correctness check).
/// </summary>
/// <param name="triggerType">The script's trigger type (e.g. "valuechange", "expression", "interval", "call").</param>
/// <param name="triggerConfigJson">The trigger config JSON, used to extract the monitored attribute name where applicable.</param>
/// <returns>The routing decision for the script's trigger.</returns>
public static TriggerRoutingDecision ForScript(string? triggerType, string? triggerConfigJson)
{
switch (triggerType?.ToLowerInvariant())
@@ -100,6 +110,9 @@ internal static class TriggerRouting
/// RateOfChange → the named attribute (fail open to all-changes if unparseable); an
/// unknown/unparseable trigger type → all-changes (fail open).
/// </summary>
/// <param name="triggerType">The alarm's trigger type (e.g. "Expression", "HiLo", "ValueMatch").</param>
/// <param name="triggerConfigJson">The trigger config JSON, used to extract the monitored attribute name where applicable.</param>
/// <returns>The routing decision for the alarm's trigger.</returns>
public static TriggerRoutingDecision ForAlarm(string? triggerType, string? triggerConfigJson)
{
if (Enum.TryParse<AlarmTriggerType>(triggerType, ignoreCase: true, out var tt))