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
@@ -29,7 +29,7 @@ public sealed class EntitySerializer
var folderNameById = aggregate.TemplateFolders.ToDictionary(f => f.Id, f => f.Name);
var templateNameById = aggregate.Templates.ToDictionary(t => t.Id, t => t.Name);
// M8 name-link lookups. Instances/data-connections reference their owning
// Name-link lookups. Instances/data-connections reference their owning
// site by the portable SiteIdentifier (not the EF surrogate SiteId); a
// connection binding references its DataConnection by Name. Build both
// id→name maps once so the projections below resolve in O(1).
@@ -138,7 +138,7 @@ public sealed class EntitySerializer
NotificationLists: aggregate.NotificationLists.Select(nl => new NotificationListDto(
Name: nl.Name,
Type: nl.Type,
// S10: carry BOTH contacts. Keep any recipient that has at least
// Carry BOTH contacts. Keep any recipient that has at least
// one contact (email OR phone) — SMS-only recipients have a null
// EmailAddress and would have been dropped by the old email-only
// filter. EmailAddress/PhoneNumber are nullable on the DTO so a
@@ -172,7 +172,7 @@ public sealed class EntitySerializer
RetryDelay: smtp.RetryDelay,
Secrets: secrets);
}).ToList(),
// Inbound API keys are not transported between environments (re-arch C4):
// Inbound API keys are not transported between environments:
// the bundle carries API methods only. ApiMethod.ApprovedApiKeyIds is also
// excluded — it references keys that aren't in the bundle; method→key scopes
// are re-granted per environment via the admin UI/CLI. The legacy ApiKeys
@@ -184,7 +184,7 @@ public sealed class EntitySerializer
ReturnDefinition: m.ReturnDefinition,
TimeoutSeconds: m.TimeoutSeconds)).ToList())
{
// M8 site/instance-scoped payloads. These are init-only (non-positional)
// Site/instance-scoped payloads. These are init-only (non-positional)
// on BundleContentDto, so they're set via object-initializer here.
Sites = aggregate.Sites.Select(s => new SiteDto(
SiteIdentifier: s.SiteIdentifier,
@@ -218,7 +218,7 @@ public sealed class EntitySerializer
FailoverRetryCount: c.FailoverRetryCount,
Secrets: secretValues.Count > 0 ? new SecretsBlock(secretValues) : null);
}).ToList(),
// SMS (S10): mirror the SMTP secret handling exactly — the provider
// SMS: mirror the SMTP secret handling exactly — the provider
// auth token (never a public field) rides inside the SecretsBlock, so a
// "share without secrets" export can drop it as a unit. Omit the secret
// entirely when the token is null/empty so the importer's TryGetValue
@@ -248,7 +248,7 @@ public sealed class EntitySerializer
UniqueName: inst.UniqueName,
TemplateName: templateNameById.TryGetValue(inst.TemplateId, out var tn) ? tn : string.Empty,
SiteIdentifier: siteIdentifierBySiteId.TryGetValue(inst.SiteId, out var isid) ? isid : string.Empty,
// TODO(M8): Areas don't travel in the bundle yet — EntityAggregate
// TODO: Areas don't travel in the bundle yet — EntityAggregate
// carries no Areas collection, so there's no id→name lookup. Emit
// null until area transport is added; the importer leaves AreaId null.
AreaName: null,
@@ -268,7 +268,7 @@ public sealed class EntitySerializer
ConditionFilterOverride: o.ConditionFilterOverride)).ToList(),
// Connection bindings reference their DataConnection by NAME — the
// numeric DataConnectionId FK can't survive a cross-environment
// bundle, so the importer (D1) resolves ConnectionName→target FK at
// bundle, so the importer resolves ConnectionName→target FK at
// apply time. If the FK doesn't resolve in this aggregate (orphan
// row), the name comes through empty.
ConnectionBindings: inst.ConnectionBindings.Select(b => new InstanceConnectionBindingDto(
@@ -424,7 +424,7 @@ public sealed class EntitySerializer
var list = new NotificationList(dto.Name) { Id = ix + 1, Type = dto.Type };
foreach (var r in dto.Recipients)
{
// S10: reconstruct whichever contact(s) the bundle carries.
// Reconstruct whichever contact(s) the bundle carries.
// Email-present recipients use the email ctor (unchanged
// historical path) and additively restore the phone number;
// phone-only recipients (null email) take the SMS factory so we
@@ -453,7 +453,7 @@ public sealed class EntitySerializer
})
.ToList();
// SMS (S10): mirror the SMTP path — restore AccountSid/FromNumber and decrypt
// SMS: mirror the SMTP path — restore AccountSid/FromNumber and decrypt
// the auth token back out of the SecretsBlock (null when the key was omitted
// because the source token was null/empty).
var smsConfigurations = content.SmsConfigs
@@ -469,7 +469,7 @@ public sealed class EntitySerializer
})
.ToList();
// Inbound API keys are not transported (re-arch C4) — content.ApiKeys is a
// Inbound API keys are not transported — content.ApiKeys is a
// legacy field only present on pre-C4 bundles; it is ignored here. The
// BundleImporter is responsible for counting and reporting any such keys.
// ApiMethod.ApprovedApiKeyIds is likewise not reconstructed: scopes are
@@ -484,7 +484,7 @@ public sealed class EntitySerializer
})
.ToList();
// M8: sites first — assign synthetic ids by ordinal. Addresses are carried
// Sites first — assign synthetic ids by ordinal. Addresses are carried
// verbatim; the importer decides whether to keep or rewrite them.
var sites = content.Sites
.Select((dto, ix) => new Site(dto.Name, dto.SiteIdentifier)
@@ -516,7 +516,7 @@ public sealed class EntitySerializer
// Instances: resolve template + site by name/identifier. Areas don't travel
// (see export TODO), so AreaId stays null. Connection bindings keep their
// resolved DataConnection NAME on the wire DTO — the importer (D1) reads
// resolved DataConnection NAME on the wire DTO — the importer reads
// bindings from BundleContentDto.Instances[].ConnectionBindings directly and
// resolves ConnectionName→the target environment's DataConnectionId at apply
// time. FromBundleContent is NOT on the importer's path (BundleImporter walks