docs: backfill XML documentation across 756 files
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped

Adds <summary>, <param>, <typeparam>, and <inheritdoc/> tags to public
members surfaced by commentchecker — resolves 5,847 of 5,869 issues
(99.6%) across three /fixdocs passes.
This commit is contained in:
Joseph Doherty
2026-05-28 08:10:17 -04:00
parent f9fc7dd2e1
commit 64e3fbe035
756 changed files with 9876 additions and 96 deletions
@@ -47,6 +47,7 @@ public sealed class PermissionTrieBuilderTests
Kind = NodeHierarchyKind.Equipment,
};
/// <summary>Verifies that Build with ScopePaths places UnsLine row at correct multi-level node.</summary>
[Fact]
public void Build_With_ScopePaths_Places_UnsLine_Row_At_Correct_Multi_Level_Node()
{
@@ -73,6 +74,7 @@ public sealed class PermissionTrieBuilderTests
"grant anchored at line-42 must not leak to sibling line-99 under the same area");
}
/// <summary>Verifies that Build without ScopePaths falls back to root child for deterministic tests.</summary>
[Fact]
public void Build_Without_ScopePaths_Falls_Back_To_Root_Child_For_Tests()
{
@@ -117,6 +119,7 @@ public sealed class PermissionTrieBuilderTests
diagnostics[0].Reason.ShouldBe(PermissionTrieBuildDiagnosticReason.MissingScopePath);
}
/// <summary>Verifies that no diagnostic is emitted when all sub-cluster rows have ScopePaths.</summary>
[Fact]
public void Build_No_Diagnostic_When_All_Sub_Cluster_Rows_Have_ScopePaths()
{
@@ -138,6 +141,7 @@ public sealed class PermissionTrieBuilderTests
diagnostics.ShouldBeEmpty("no rows are missing a scope-path entry");
}
/// <summary>Verifies that diagnostic callback is optional when ScopePaths is null.</summary>
[Fact]
public void Build_Diagnostic_Callback_Optional_When_ScopePaths_Null()
{
@@ -13,12 +13,14 @@ public sealed class PermissionTrieCacheTests
GenerationId = generation,
};
/// <summary>Verifies that GetTrie returns null when the cache is empty.</summary>
[Fact]
public void GetTrie_Empty_ReturnsNull()
{
new PermissionTrieCache().GetTrie("c1").ShouldBeNull();
}
/// <summary>Verifies that a trie installed can be retrieved with matching generation id.</summary>
[Fact]
public void Install_ThenGet_RoundTrips()
{
@@ -29,6 +31,7 @@ public sealed class PermissionTrieCacheTests
cache.CurrentGenerationId("c1").ShouldBe(5);
}
/// <summary>Verifies that installing a new generation makes it the current generation.</summary>
[Fact]
public void NewGeneration_BecomesCurrent()
{
@@ -41,6 +44,7 @@ public sealed class PermissionTrieCacheTests
cache.GetTrie("c1", 2).ShouldNotBeNull();
}
/// <summary>Verifies that out-of-order installs do not downgrade the current generation.</summary>
[Fact]
public void OutOfOrder_Install_DoesNotDowngrade_Current()
{
@@ -52,6 +56,7 @@ public sealed class PermissionTrieCacheTests
cache.GetTrie("c1", 1).ShouldNotBeNull("but older is still retrievable by explicit lookup");
}
/// <summary>Verifies that Invalidate drops only the specified cluster.</summary>
[Fact]
public void Invalidate_DropsCluster()
{
@@ -65,6 +70,7 @@ public sealed class PermissionTrieCacheTests
cache.GetTrie("c2").ShouldNotBeNull("sibling cluster unaffected");
}
/// <summary>Verifies that Prune retains the most recent generations.</summary>
[Fact]
public void Prune_RetainsMostRecent()
{
@@ -79,6 +85,7 @@ public sealed class PermissionTrieCacheTests
cache.GetTrie("c1", 1).ShouldBeNull();
}
/// <summary>Verifies that Prune with keepLatest greater than the cache size is a no-op.</summary>
[Fact]
public void Prune_LessThanKeep_IsNoOp()
{
@@ -91,6 +98,7 @@ public sealed class PermissionTrieCacheTests
cache.CachedTrieCount.ShouldBe(2);
}
/// <summary>Verifies that different clusters maintain independent generation tracking.</summary>
[Fact]
public void ClusterIsolation()
{
@@ -125,6 +133,7 @@ public sealed class PermissionTrieCacheTests
cache.GetTrie("c1", 4).ShouldBeNull("generation 4 was pruned");
}
/// <summary>Verifies that the current generation pointer is preserved after pruning.</summary>
[Fact]
public void Prune_Current_Pointer_Survives_Pruning()
{
@@ -43,6 +43,7 @@ public sealed class PermissionTrieTests
Kind = NodeHierarchyKind.SystemPlatform,
};
/// <summary>Verifies cluster-level grant cascades to every tag.</summary>
[Fact]
public void ClusterLevelGrant_Cascades_ToEveryTag()
{
@@ -58,6 +59,7 @@ public sealed class PermissionTrieTests
matches[0].Scope.ShouldBe(NodeAclScopeKind.Cluster);
}
/// <summary>Verifies equipment-scope grant does not leak to sibling.</summary>
[Fact]
public void EquipmentScope_DoesNotLeak_ToSibling()
{
@@ -75,6 +77,7 @@ public sealed class PermissionTrieTests
matchB.ShouldBeEmpty("grant at eq-A must not apply to sibling eq-B");
}
/// <summary>Verifies multiple groups union their permission flags.</summary>
[Fact]
public void MultiGroup_Union_OrsPermissionFlags()
{
@@ -94,6 +97,7 @@ public sealed class PermissionTrieTests
combined.ShouldBe(NodePermissions.Read | NodePermissions.WriteOperate);
}
/// <summary>Verifies no matching group returns empty.</summary>
[Fact]
public void NoMatchingGroup_ReturnsEmpty()
{
@@ -107,6 +111,7 @@ public sealed class PermissionTrieTests
matches.ShouldBeEmpty();
}
/// <summary>Verifies Galaxy folder segment grant does not leak to sibling folder.</summary>
[Fact]
public void Galaxy_FolderSegment_Grant_DoesNotLeak_To_Sibling_Folder()
{
@@ -147,6 +152,7 @@ public sealed class PermissionTrieTests
"the trie walk reports the structural level where the grant was found — FolderSegment for Galaxy, not Equipment");
}
/// <summary>Verifies Galaxy deep folder path all segments report folder segment scope.</summary>
[Fact]
public void Galaxy_DeepFolderPath_AllSegments_Report_FolderSegment_Scope()
{
@@ -173,6 +179,7 @@ public sealed class PermissionTrieTests
"every matched folder level must report FolderSegment, never Equipment");
}
/// <summary>Verifies cross-cluster grant does not leak.</summary>
[Fact]
public void CrossCluster_Grant_DoesNotLeak()
{
@@ -186,6 +193,7 @@ public sealed class PermissionTrieTests
matches.ShouldBeEmpty("rows for cluster c-other must not land in c1's trie");
}
/// <summary>Verifies build is idempotent.</summary>
[Fact]
public void Build_IsIdempotent()
{
@@ -15,7 +15,10 @@ public sealed class TriePermissionEvaluatorTests
private sealed class FakeTimeProvider : TimeProvider
{
/// <summary>Gets or sets the current UTC time.</summary>
public DateTime Utc { get; set; } = Now;
/// <inheritdoc />
public override DateTimeOffset GetUtcNow() => new(Utc, TimeSpan.Zero);
}
@@ -62,6 +65,7 @@ public sealed class TriePermissionEvaluatorTests
return new TriePermissionEvaluator(cache, _time);
}
/// <summary>Verifies that authorization is allowed when required permission flags are matched.</summary>
[Fact]
public void Allow_When_RequiredFlag_Matched()
{
@@ -73,6 +77,7 @@ public sealed class TriePermissionEvaluatorTests
decision.Provenance.Count.ShouldBe(1);
}
/// <summary>Verifies that authorization is denied when no matching group is found.</summary>
[Fact]
public void NotGranted_When_NoMatchingGroup()
{
@@ -84,6 +89,7 @@ public sealed class TriePermissionEvaluatorTests
decision.Provenance.ShouldBeEmpty();
}
/// <summary>Verifies that authorization is denied when permission flags are insufficient.</summary>
[Fact]
public void NotGranted_When_FlagsInsufficient()
{
@@ -94,6 +100,7 @@ public sealed class TriePermissionEvaluatorTests
decision.Verdict.ShouldBe(AuthorizationVerdict.NotGranted);
}
/// <summary>Verifies that HistoryRead permission requires its own flag and is not implied by Read.</summary>
[Fact]
public void HistoryRead_Requires_Its_Own_Bit()
{
@@ -107,6 +114,7 @@ public sealed class TriePermissionEvaluatorTests
historyRead.IsAllowed.ShouldBeFalse("HistoryRead uses its own NodePermissions flag, not Read");
}
/// <summary>Verifies that cross-cluster sessions are denied.</summary>
[Fact]
public void CrossCluster_Session_Denied()
{
@@ -118,6 +126,7 @@ public sealed class TriePermissionEvaluatorTests
decision.Verdict.ShouldBe(AuthorizationVerdict.NotGranted);
}
/// <summary>Verifies that stale sessions fail closed.</summary>
[Fact]
public void StaleSession_FailsClosed()
{
@@ -130,6 +139,7 @@ public sealed class TriePermissionEvaluatorTests
decision.Verdict.ShouldBe(AuthorizationVerdict.NotGranted);
}
/// <summary>Verifies that authorization is denied when no cached trie exists for the cluster.</summary>
[Fact]
public void NoCachedTrie_ForCluster_Denied()
{
@@ -141,6 +151,7 @@ public sealed class TriePermissionEvaluatorTests
decision.Verdict.ShouldBe(AuthorizationVerdict.NotGranted);
}
/// <summary>Verifies that stale generations evaluate against their bound session generation.</summary>
[Fact]
public void StaleGeneration_EvaluatesAgainst_SessionBoundGeneration()
{
@@ -161,6 +172,7 @@ public sealed class TriePermissionEvaluatorTests
decision.Provenance.Count.ShouldBe(1);
}
/// <summary>Verifies that stale generations fail closed when the bound generation is pruned.</summary>
[Fact]
public void StaleGeneration_FailsClosed_WhenBoundGenerationPruned()
{
@@ -179,6 +191,7 @@ public sealed class TriePermissionEvaluatorTests
"a session bound to a generation absent from the cache must fail closed");
}
/// <summary>Verifies that the operation-to-permission mapping is total.</summary>
[Fact]
public void OperationToPermission_Mapping_IsTotal()
{
@@ -19,6 +19,7 @@ public sealed class UserAuthorizationStateTests
MembershipVersion = 1,
};
/// <summary>Verifies that freshly resolved authorization state is neither stale nor needs refresh.</summary>
[Fact]
public void FreshlyResolved_Is_NotStale_NorNeedsRefresh()
{
@@ -28,6 +29,7 @@ public sealed class UserAuthorizationStateTests
session.NeedsRefresh(Now.AddMinutes(1)).ShouldBeFalse();
}
/// <summary>Verifies that refresh flag fires after the freshness interval expires.</summary>
[Fact]
public void NeedsRefresh_FiresAfter_FreshnessInterval()
{
@@ -36,6 +38,7 @@ public sealed class UserAuthorizationStateTests
session.NeedsRefresh(Now.AddMinutes(16)).ShouldBeFalse("past freshness but also past the 15-min staleness ceiling — should be Stale, not NeedsRefresh");
}
/// <summary>Verifies that the refresh flag fires within the production default freshness and staleness windows.</summary>
[Fact]
public void NeedsRefresh_FiresWithin_ProductionDefault_Windows()
{
@@ -50,6 +53,7 @@ public sealed class UserAuthorizationStateTests
session.IsStale(Now.AddMinutes(10)).ShouldBeFalse("10 min is still within the 15-min staleness ceiling");
}
/// <summary>Verifies that the refresh flag is true between the freshness and staleness windows.</summary>
[Fact]
public void NeedsRefresh_TrueBetween_Freshness_And_Staleness_Windows()
{
@@ -64,6 +68,7 @@ public sealed class UserAuthorizationStateTests
session.IsStale(Now.AddMinutes(5)).ShouldBeFalse();
}
/// <summary>Verifies that the stale flag is true after the staleness window expires.</summary>
[Fact]
public void IsStale_TrueAfter_StalenessWindow()
{