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:
@@ -29,5 +29,6 @@ public interface IAuditBacklogProvider
|
||||
/// summed across every site's latest health report. Never negative; zero when
|
||||
/// no site is reporting a backlog.
|
||||
/// </summary>
|
||||
/// <returns>The system-wide pending Audit Log backlog count.</returns>
|
||||
long GetPendingBacklogTotal();
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ public interface IOperationTrackingStore
|
||||
/// the caller advance the cursor monotonically across follow-up pulls.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// <b>Composite keyset (Task 15).</b> When <paramref name="afterId"/> is
|
||||
/// <b>Composite keyset.</b> When <paramref name="afterId"/> is
|
||||
/// supplied the read uses a <c>(UpdatedAtUtc, TrackedOperationId)</c> keyset:
|
||||
/// it returns rows strictly after that cursor — <c>UpdatedAtUtc > sinceUtc</c>,
|
||||
/// or <c>UpdatedAtUtc = sinceUtc</c> with a <c>TrackedOperationId</c> greater
|
||||
|
||||
@@ -60,8 +60,8 @@ public enum SiteCallRelayOutcome
|
||||
/// </param>
|
||||
/// <param name="RequestedBy">
|
||||
/// The authenticated operator who initiated the retry, stamped as the <c>Actor</c>
|
||||
/// on the central direct-write audit row the relay emits — recording *who asked*
|
||||
/// (Task 14). Additive; null where no identity is available.
|
||||
/// on the central direct-write audit row the relay emits — recording *who asked*.
|
||||
/// Additive; null where no identity is available.
|
||||
/// </param>
|
||||
public sealed record RetrySiteCallRequest(
|
||||
string CorrelationId,
|
||||
|
||||
+2
-2
@@ -55,7 +55,7 @@ public record NotificationOutboxQueryResponse(
|
||||
/// <param name="NotificationId">The notification to re-queue.</param>
|
||||
/// <param name="RequestedBy">
|
||||
/// The authenticated operator who initiated the retry, stamped as the <c>Actor</c> on
|
||||
/// the emitted audit row so an un-park is attributable (Task 13). Additive; null where
|
||||
/// the emitted audit row so an un-park is attributable. Additive; null where
|
||||
/// no identity is available (legacy senders compile unchanged).
|
||||
/// </param>
|
||||
public record RetryNotificationRequest(
|
||||
@@ -78,7 +78,7 @@ public record RetryNotificationResponse(
|
||||
/// <param name="NotificationId">The notification to discard.</param>
|
||||
/// <param name="RequestedBy">
|
||||
/// The authenticated operator who initiated the discard, stamped as the <c>Actor</c> on
|
||||
/// the emitted terminal audit row (Task 13). Additive; null where no identity is available.
|
||||
/// the emitted terminal audit row. Additive; null where no identity is available.
|
||||
/// </param>
|
||||
public record DiscardNotificationRequest(
|
||||
string CorrelationId,
|
||||
|
||||
@@ -17,6 +17,8 @@ public static class AttributeValueCodec
|
||||
private static readonly JsonSerializerOptions JsonOpts = new() { WriteIndented = false };
|
||||
|
||||
/// <summary>Encodes a value to its canonical string form.</summary>
|
||||
/// <param name="value">The value to encode; scalars use invariant-culture formatting, enumerables encode as a JSON array.</param>
|
||||
/// <returns>The canonical string representation of <paramref name="value"/>, or <c>null</c> if <paramref name="value"/> is <c>null</c>.</returns>
|
||||
public static string? Encode(object? value)
|
||||
{
|
||||
switch (value)
|
||||
@@ -38,6 +40,10 @@ public static class AttributeValueCodec
|
||||
/// <c>List<T></c>; for scalars returns the string unchanged. Throws
|
||||
/// <see cref="FormatException"/> on malformed list JSON or an un-parseable element.
|
||||
/// </summary>
|
||||
/// <param name="value">The canonical string value to decode, or <c>null</c>/empty for a null result.</param>
|
||||
/// <param name="dataType">The attribute's data type; only <see cref="DataType.List"/> triggers list decoding.</param>
|
||||
/// <param name="elementType">The list element scalar type, required when <paramref name="dataType"/> is <see cref="DataType.List"/>.</param>
|
||||
/// <returns>The decoded value: a typed <c>List<T></c> for list attributes, or the string unchanged for scalars.</returns>
|
||||
public static object? Decode(string? value, DataType dataType, DataType? elementType)
|
||||
{
|
||||
if (dataType != DataType.List) return value; // scalar: unchanged
|
||||
@@ -70,6 +76,8 @@ public static class AttributeValueCodec
|
||||
/// mapping. Throws <see cref="FormatException"/> for an unsupported element
|
||||
/// type (see <see cref="IsValidElementType"/>).
|
||||
/// </summary>
|
||||
/// <param name="t">The List element scalar type.</param>
|
||||
/// <returns>The CLR <see cref="Type"/> backing the given element scalar type.</returns>
|
||||
public static Type ElementClrType(DataType t) => t switch
|
||||
{
|
||||
DataType.String => typeof(string),
|
||||
@@ -93,6 +101,9 @@ public static class AttributeValueCodec
|
||||
/// unsupported element type and may throw on an element that cannot be
|
||||
/// converted (the caller decides how to handle the failure).
|
||||
/// </summary>
|
||||
/// <param name="source">The live CLR enumerable to coerce (e.g. an OPC UA array).</param>
|
||||
/// <param name="elementType">The target List element scalar type.</param>
|
||||
/// <returns>A typed <c>List<T></c> containing the coerced elements.</returns>
|
||||
public static IList CoerceEnumerable(IEnumerable source, DataType elementType)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(source);
|
||||
@@ -150,6 +161,8 @@ public static class AttributeValueCodec
|
||||
}
|
||||
|
||||
/// <summary>True if the type may be a List element scalar.</summary>
|
||||
/// <param name="t">The data type to check.</param>
|
||||
/// <returns><c>true</c> if <paramref name="t"/> may be a List element scalar; otherwise <c>false</c>.</returns>
|
||||
public static bool IsValidElementType(DataType t) =>
|
||||
t is DataType.String or DataType.Int32 or DataType.Float
|
||||
or DataType.Double or DataType.Boolean or DataType.DateTime;
|
||||
|
||||
@@ -11,11 +11,15 @@ namespace ZB.MOM.WW.ScadaBridge.Commons.Types.Deployment;
|
||||
public static class DeploymentFetchToken
|
||||
{
|
||||
/// <summary>Generates a URL-safe random token (256 bits of entropy).</summary>
|
||||
/// <returns>A URL-safe, base64-encoded random token string.</returns>
|
||||
public static string Generate() =>
|
||||
Convert.ToBase64String(RandomNumberGenerator.GetBytes(32))
|
||||
.Replace('+', '-').Replace('/', '_').TrimEnd('=');
|
||||
|
||||
/// <summary>Constant-time string comparison (no early-out on first mismatch).</summary>
|
||||
/// <param name="a">The first string to compare.</param>
|
||||
/// <param name="b">The second string to compare.</param>
|
||||
/// <returns><see langword="true"/> if the strings are equal; otherwise <see langword="false"/>.</returns>
|
||||
public static bool ConstantTimeEquals(string a, string b) =>
|
||||
CryptographicOperations.FixedTimeEquals(
|
||||
Encoding.UTF8.GetBytes(a), Encoding.UTF8.GetBytes(b));
|
||||
|
||||
@@ -38,7 +38,7 @@ public enum AuditKind
|
||||
/// the row is permanently lost from the mirror. The reconciliation actor
|
||||
/// emits ONE synthetic audit row of this kind (carrying the abandoned
|
||||
/// <c>EventId</c>, source site, and final error) so the loss is queryable in
|
||||
/// the Audit Log itself, not only in a rotating log file. (arch-review 04, Task 17)
|
||||
/// the Audit Log itself, not only in a rotating log file.
|
||||
/// </summary>
|
||||
ReconciliationAbandoned
|
||||
}
|
||||
|
||||
@@ -38,6 +38,8 @@ public static class OverrideCsvParser
|
||||
/// per-line errors; never throws. On a missing/unrecognized header returns zero
|
||||
/// rows and a single header error.
|
||||
/// </summary>
|
||||
/// <param name="csvText">The raw CSV text to parse.</param>
|
||||
/// <returns>The parsed rows and any per-line errors.</returns>
|
||||
public static OverrideCsvParseResult Parse(string csvText)
|
||||
{
|
||||
var rows = new List<OverrideCsvRow>();
|
||||
|
||||
@@ -28,6 +28,8 @@ public static class PurgeTimerSchedule
|
||||
/// already shorter than <see cref="ShortFirstTick"/> (preserving fast test
|
||||
/// cadences), otherwise capped at <see cref="ShortFirstTick"/>.
|
||||
/// </summary>
|
||||
/// <param name="interval">The purge timer's steady-state interval.</param>
|
||||
/// <returns>The initial delay to use before the first purge tick.</returns>
|
||||
public static TimeSpan InitialDelay(TimeSpan interval) =>
|
||||
interval < ShortFirstTick ? interval : ShortFirstTick;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user