docs(comments): strip internal task/milestone/bundle bookkeeping from code comments

Remove project bookkeeping citations from shipped code comments across the
solution: hyphenated task IDs (WP-14, StoreAndForward-025), milestone/task/
issue refs (M3, Task 4, Audit Log #23, #21), Bundle X task-bundle labels,
and C/D/K/S/T phase labels.

Comment text only — no code logic, string/log literals, or XML-doc structure
changed. Genuine descriptions are preserved (only the citation is stripped),
and technical lookalikes are retained (UTF-8, SHA-256, T00:00:00, M365,
UTC-5, pre-C4/pre-C5 schema versions). Flagged by the new CommentChecker
TaskReferenceInComment / TrackingReferenceInComment checks plus targeted
grep passes; full solution builds clean, append-only guard tests pass.
This commit is contained in:
Joseph Doherty
2026-07-07 11:03:26 -04:00
parent 67005ca4c0
commit 9cff87fe85
435 changed files with 2338 additions and 2547 deletions
@@ -73,7 +73,7 @@ public sealed class BundleExporter : IBundleExporter
var resolved = await _resolver.ResolveAsync(selection, cancellationToken).ConfigureAwait(false);
// 2. Convert to the wire-shaped DTO (strips EF identity, refs-by-name).
// M8 (B4): the resolver's site/dataConnection/instance closure is wired
// The resolver's site/dataConnection/instance closure is wired
// through via object-initializer — without this the aggregate would
// carry the empty defaults and the bundle would ship empty site/
// instance arrays even when those were selected (review item I3).
@@ -86,16 +86,16 @@ public sealed class BundleExporter : IBundleExporter
DatabaseConnections: resolved.DatabaseConnections,
NotificationLists: resolved.NotificationLists,
SmtpConfigurations: resolved.SmtpConfigs,
// Inbound API keys are not transported between environments (re-arch C4).
// Inbound API keys are not transported between environments.
ApiMethods: resolved.ApiMethods)
{
Sites = resolved.Sites,
DataConnections = resolved.DataConnections,
Instances = resolved.Instances,
// SMS (S10b): wire the resolver's SMS config closure through the
// Wire the resolver's SMS config closure through the
// aggregate. Without this the aggregate carries the empty default and the
// bundle ships an empty smsConfigs array even when SMS configs were
// selected — mirrors the M8 site/instance fix (review item I3).
// selected — mirrors the site/instance fix (review item I3).
SmsConfigurations = resolved.SmsConfigs,
};
var contentDto = _entitySerializer.ToBundleContent(aggregate);
@@ -110,7 +110,7 @@ public sealed class BundleExporter : IBundleExporter
NotificationLists: resolved.NotificationLists.Count,
SmtpConfigs: resolved.SmtpConfigs.Count,
ApiMethods: resolved.ApiMethods.Count,
// M8 (B3): additive site/dataConnection/instance counts. Sourced from
// Additive site/dataConnection/instance counts. Sourced from
// the serialized content DTO — the same arrays the importer reads —
// so the manifest summary always matches the packed payload. These
// arrays default to empty until B1/B2 populate them, so the counts
@@ -118,7 +118,7 @@ public sealed class BundleExporter : IBundleExporter
Sites: contentDto.Sites.Count,
DataConnections: contentDto.DataConnections.Count,
Instances: contentDto.Instances.Count,
// SMS (S10b): additive count sourced from the serialized content DTO — the
// Additive count sourced from the serialized content DTO — the
// same array the importer reads — so the manifest summary always matches
// the packed payload.
SmsConfigs: contentDto.SmsConfigs.Count);
@@ -25,7 +25,7 @@ namespace ZB.MOM.WW.ScadaBridge.Transport.Export;
/// Templates are returned topologically sorted (base-before-derived) via Kahn's
/// algorithm so importers can apply them in order.
/// <para>
/// M8 adds site/instance-scoped expansion: selecting a site pulls its
/// Site/instance-scoped expansion: selecting a site pulls its
/// <c>DataConnection</c>s and <c>Instance</c>s; selecting an instance (with
/// <see cref="ExportSelection.IncludeDependencies"/>) pulls its owning site, the
/// data connections it binds, and feeds its template into the existing template
@@ -111,7 +111,7 @@ public sealed class DependencyResolver
if (sm is not null) smtpConfigs[sm.Id] = sm;
}
// SMS provider configs (S10b): mirror the SMTP seed exactly — resolve each
// SMS provider configs: mirror the SMTP seed exactly — resolve each
// selected id via the by-id repository accessor; missing ids are skipped.
var smsConfigs = new Dictionary<int, SmsConfiguration>();
foreach (var id in selection.SmsConfigurationIds.Distinct())
@@ -121,7 +121,7 @@ public sealed class DependencyResolver
}
// Inbound API keys are intentionally NOT resolved into the bundle: per the
// inbound-API-key re-architecture (C4) keys are not transported between
// inbound-API-key re-architecture, keys are not transported between
// environments. Only API methods travel.
var apiMethods = new Dictionary<int, ApiMethod>();
foreach (var id in selection.ApiMethodIds.Distinct())
@@ -130,7 +130,7 @@ public sealed class DependencyResolver
if (m is not null) apiMethods[m.Id] = m;
}
// ---- Seed: site/instance-scoped selection (M8) ----
// ---- Seed: site/instance-scoped selection ----
// sites/dataConnections/instances are keyed by surrogate id for dedup.
var sites = new Dictionary<int, Site>();
var dataConnections = new Dictionary<int, DataConnection>();
@@ -200,7 +200,7 @@ public sealed class DependencyResolver
// ---- Topological sort of templates (base-before-derived) ----
var orderedTemplates = TopologicallySortTemplates(templates.Values);
// ---- Deterministic site/instance ordering (M8) ----
// ---- Deterministic site/instance ordering ----
// siteId → SiteIdentifier map: every connection's/instance's owning site lands
// in `sites` after closure expansion, so ordering + dependsOn edges resolve names.
var siteIdentifierById = sites.Values.ToDictionary(s => s.Id, s => s.SiteIdentifier);
@@ -266,13 +266,13 @@ public sealed class DependencyResolver
Sites = orderedSites,
DataConnections = orderedDataConnections,
Instances = orderedInstances,
// SMS (S10b): ordered by AccountSid — the natural key the importer matches
// SMS: ordered by AccountSid — the natural key the importer matches
// on, mirroring how SMTP is ordered by Host.
SmsConfigs = smsConfigs.Values.OrderBy(s => s.AccountSid, StringComparer.Ordinal).ToList(),
};
}
// ---- Instance child loading (M8) ----
// ---- Instance child loading ----
// Loads an instance and attaches its overrides/bindings onto the entity's own
// navigation collections, so the serializer reads children off the entity (the
// same shape central-config entities use). Returns null if the instance is gone.
@@ -293,7 +293,7 @@ public sealed class DependencyResolver
return instance;
}
// ---- Site/instance closure (M8) ----
// ---- Site/instance closure ----
// For every gathered instance: ensure its owning Site is in the bundle, include
// the DataConnections it binds (via ConnectionBinding.DataConnectionId resolved
// within the instance's site, plus NativeAlarmSourceOverride.ConnectionNameOverride
@@ -618,19 +618,19 @@ public sealed class DependencyResolver
{
entries.Add(new ManifestContentEntry("SmtpConfiguration", s.Host, 1, Array.Empty<string>()));
}
// SMS (S10b): mirror SMTP — one manifest row per config, keyed by AccountSid
// SMS: mirror SMTP — one manifest row per config, keyed by AccountSid
// (the natural key the importer matches on).
foreach (var s in smsConfigs.OrderBy(x => x.AccountSid, StringComparer.Ordinal))
{
entries.Add(new ManifestContentEntry("SmsConfiguration", s.AccountSid, 1, Array.Empty<string>()));
}
// Inbound API keys are not transported (re-arch C4) — no ApiKey manifest entries.
// Inbound API keys are not transported — no ApiKey manifest entries.
foreach (var m in apiMethods.OrderBy(x => x.Name, StringComparer.Ordinal))
{
entries.Add(new ManifestContentEntry("ApiMethod", m.Name, 1, Array.Empty<string>()));
}
// ---- M8: site/instance-scoped manifest rows ----
// ---- Site/instance-scoped manifest rows ----
// Sites are roots (no dependsOn). DataConnections depend on their site.
// Instances depend on their template, their site, and each data connection
// they bind. Inputs arrive pre-ordered, so iterate as-is for determinism.
@@ -25,11 +25,11 @@ public sealed record ResolvedExport(
IReadOnlyList<DatabaseConnectionDefinition> DatabaseConnections,
IReadOnlyList<NotificationList> NotificationLists,
IReadOnlyList<SmtpConfiguration> SmtpConfigs,
// Inbound API keys are not transported between environments (re-arch C4); only methods.
// Inbound API keys are not transported between environments; only methods.
IReadOnlyList<ApiMethod> ApiMethods,
IReadOnlyList<ManifestContentEntry> ContentManifest)
{
// M8: site/instance-scoped closure. Additive init-only collections with empty
// Site/instance-scoped closure. Additive init-only collections with empty
// defaults so the positional ctor stays source-compatible for callers/tests
// that only resolve central-config selections (sites/instances stay empty).
// The resolver opts in via object-initializer. Each <see cref="Instance"/>
@@ -59,7 +59,7 @@ public sealed record ResolvedExport(
/// <summary>
/// SMS provider configurations in the closure, ordered by
/// <see cref="SmsConfiguration.AccountSid"/> (S10b). Mirrors
/// <see cref="SmsConfiguration.AccountSid"/>. Mirrors
/// <see cref="SmtpConfigs"/>; init-only with an empty default so callers that
/// only resolve other selections keep compiling.
/// </summary>