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
@@ -22,6 +22,7 @@ public static class DebugTreeBuilder
/// <see cref="AttributeValueChanged.AttributeName"/>). Null/empty/whitespace
/// keeps everything; matching leaves carry along their ancestor branches.
/// </param>
/// <returns>The root nodes of the attribute composition forest.</returns>
/// <remarks>
/// The caller is expected to pass at most one <see cref="AttributeValueChanged"/>
/// per <see cref="AttributeValueChanged.AttributeName"/>. The DebugView page
@@ -74,6 +75,7 @@ public static class DebugTreeBuilder
/// keeps everything; kept items carry along their ancestor branches and, for native
/// conditions, their binding node.
/// </param>
/// <returns>The root nodes of the alarm composition forest.</returns>
/// <remarks>
/// Two flavours are placed differently:
/// <list type="bullet">
@@ -18,18 +18,26 @@ public sealed class DebugTreeNode
/// <summary>Display label (the last path segment).</summary>
public required string Segment { get; init; }
/// <summary>Child nodes, one per next path segment. Empty on a leaf.</summary>
public List<DebugTreeNode> Children { get; } = new();
// Leaf payloads — exactly one is set on a leaf; both null on a pure branch.
/// <summary>The attribute value payload when this node is an attribute leaf; null otherwise.</summary>
public AttributeValueChanged? Attribute { get; init; }
/// <summary>The alarm state payload when this node is an alarm leaf (computed, native condition, or placeholder); null otherwise.</summary>
public AlarmStateChanged? Alarm { get; init; } // computed leaf, native condition, or placeholder
/// <summary>True when this is a branch node grouping native alarm conditions.</summary>
public bool IsNativeBinding { get; init; } // branch grouping native conditions
// Roll-up (set by the builder for branch nodes).
/// <summary>The worst alarm state rolled up from this node's descendants.</summary>
public AlarmState WorstState { get; set; } = AlarmState.Normal;
/// <summary>The count of active alarms rolled up from this node's descendants.</summary>
public int ActiveCount { get; set; }
/// <summary>True when any descendant attribute has bad quality.</summary>
public bool HasBadQuality { get; set; }
/// <summary>True when this node is a branch (has one or more children).</summary>
public bool HasChildren => Children.Count > 0;
}
@@ -53,6 +53,8 @@ public partial class InstanceConfigure
/// </summary>
/// <param name="parsed">The result of <see cref="OverrideCsvParser.Parse"/>.</param>
/// <param name="overridableAttributes">The instance's non-locked attributes (the page's <c>_overrideAttrs</c>).</param>
/// <returns>The validated override outcome; <see cref="CsvOverrideImportOutcome.Overrides"/> is
/// empty and errors are populated when any row fails validation.</returns>
internal static CsvOverrideImportOutcome BuildCsvOverrideImport(
OverrideCsvParseResult parsed,
IReadOnlyList<TemplateAttribute> overridableAttributes)