Onboarding guide
Phase 4, Coverage Audit
This audit reconciles the written guide against the mechanically-extracted inventory, logs every
deliberate exception, verifies the grouping/ordering rules, proves all 34 rubric categories are
explained, and lists what could not be determined from source. All counts are reproducible from
Tools/invtool/ (classify.ps1, plan.ps1, verify.ps1).
1. Coverage reconciliation
| Quantity | Count | Source |
|---|---|---|
.cs files scanned |
3,746 | 00-inventory.md |
| , in-scope | 3,612 | |
| , generated/excluded | 134 | logged exception §2.1 |
| Type declaration rows (incl. partial-class fragments) | 5,055 | 00-inventory.md |
| Distinct type nodes (partials collapsed) | 4,905 | the master checklist |
| → mapped to a functional group | 4,905 | classify.ps1 (0 unmapped) |
| → individually sectioned (named in a chapter) | 2,624 | verify.ps1 |
| → rolled up by project (G25 test classes) | 2,281 | logged exception §2.2 |
Distinct ### sections written across 28 chapters |
2,554 | covering the 2,624 (sibling families share a section, §2.3) |
| Chapter overviews written | 28 | one per group |
Cross-check result: verify.ps1 confirms 0 of the 2,624 individually-sectioned types are
missing from their group chapter, every one appears as a ### heading or in a sibling-family
File:Line table. 4,905 = 2,624 individually-sectioned + 2,281 rolled-up. Nothing dropped, nothing
double-counted (each type maps to exactly one group).
Caveat on what
verify.ps1proves. Its check is name presence: a type counts as covered when its name appears as a###heading, in a sibling-familyFile:Linecell, or anywhere in the chapter text. A type that is only named in passing therefore passes. A stricter check (heading or table cell only) run at the v1.135.0 pass reported 64 types that are cross-linked from other sections but have no section of their own, so those anchors resolve nowhere. They are listed in §5 as an open item, not a silent omission (not re-measured at the v1.142.0 pass).
Regeneration note (re-verified against current source, polyglot-persistence update). This audit was regenerated after the polyglot-persistence framework enhancement (MMCA.Common commit
74c0372, ADR-018) and the matching ADC change. The net change since the previous pass (+25 distinct nodes: 1,826 → 1,851) is:
- G03 (+3): the cross-source specification helper,
CrossSourceSpecification+ itsParameterReplacer(Application layer) and the newInlineSpecification<T,TId>(Domain layer) that resolve a related principal's keys and filter by foreign-keyIN, so a predicate stays translatable when the principal lives in a different physical data source.- G07 (+1): the unified engine-aware
EntityTypeConfiguration<T,TId>base (declares its engine via[UseDataSource]); the three…SQLServer/Sqlite/Cosmosbases are now thin shims over it.- G18 (+1 net): ADC Conference's public-session filter was refactored from the cross-source-unsafe
PublicSessionSpecification(removed) toGetPublicSessionFilterQuery+GetPublicSessionFilterHandlerbuilt onCrossSourceSpecification.- G25 (+20): the polyglot test suites (
CrossSourceSpecificationTests,SpecificationFitnessTests,CosmosConfigurationPortabilityTests,DatabaseInitializationExtensionsTests, plus fixtures) and the sharedSpecificationConventionTestsBase+ the opt-inSpecificationsDoNotNavigateToOtherEntitiesfitness rule, against the removedPublicSessionSpecificationTests.The Aspire hosting API was also renamed (
WithDataSource→WithSQLServerDataSource, plus newWithCosmosDataSource/WithSqliteDataSource), and ADRs 011–018 (which post-date the first build) are now cross-referenced where their patterns are taught.
Regeneration note (re-verified against current source, permission-authorization + TimeProvider update). This audit was regenerated again after the permission-based authorization mechanism (MMCA.Common commit
bc6c5d7, released v1.80.0) and ADC's adoption of it (commitac5b175), together with a framework-wide move off ambientDateTime.UtcNowto an injectedTimeProvider. The net change since the polyglot pass (+16 distinct nodes: 1,851 → 1,867) is:
- G08 (+9): the Common permission mechanism,
IPermissionRegistry/PermissionRegistry/PermissionRegistryBuilder/AuthClaimTypes(Shared) andHasPermissionAttribute/PermissionAuthorizationHandler/PermissionPolicy/PermissionPolicyProvider/PermissionRequirement(API).AuthorizationExtensionsgainedAddPermissions, andRoleNamesgainedContentEditor.- G17 (+1): ADC's
ConferencePermissionscapability catalog (Conference.Shared).- G23 (+2): ADC's
IdentityPermissionscatalog (Identity.Shared) and theAuthenticationValidatorsparameter object (Identity.Application) that keepsAuthenticationServiceunder the constructor-arity ceiling.UserRolegainedContentEditor.- G25 (+4): the new permission tests,
PermissionRegistryTests,PermissionAuthorizationHandlerTests,PermissionPolicyProviderTests(Common), andConferencePermissionGrantsTests(ADC).TimeProvider adoption changed signatures without adding types:
TokenService(G08),UserNotification.MarkAsRead+ the two notification read handlers (G10),Event.RecordSessionizeRefresh(G17),RefreshFromSessionizeHandler(G18), andAuthenticationService(G23) now take or inject the clock. ADR-019 (layered rate limiting) was added to the ADR set (001–019) and is cross-referenced where rate limiting is taught (G08/G12).
Regeneration note (re-verified against current source, v1.83.0 full drift sweep). This audit was regenerated again at framework v1.83.0 (MMCA.Common
b9a6a28; MMCA.ADC17dce5a; FACTS.md is the source of truth for the version / 13-package / 23-ADR figures). The net change since the permission pass (+2 distinct nodes: 1,867 to 1,869) is entirely in G25 (+2):FixedTimeProvider(the injected-TimeProvidertest clock inMarkAllNotificationsReadHandlerTests.cs:65) andRateLimitPartitionTests(MMCA.Common.API.Tests/Startup/RateLimitPartitionTests.cs:16, ADR-019). Both are per-project test types and roll up by project (768 to 770), so the individually-sectioned count is unchanged at 1,099. No type was added, removed, or regrouped outside G25.
- Two moved declaration citations were re-verified and corrected:
BaseDomainEvent(MMCA.Common/Source/Core/MMCA.Common.Domain/DomainEvents/BaseDomainEvent.cs:10to:18, an<remarks>block now documenting the creation-timeDateOccurreddefault as a deliberate choice, comment-only, commitb99f46c) andOpenApiEndpointExtensions(MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/OpenApiEndpointExtensions.cs:16to:18), which gained an opt-in Scalar OpenAPI UI helper (MapCommonScalarUi, behind the non-production guard, commit706df4d); the G12 section now documents it.- Four ADRs finalized since the last pass (020-023) are now cross-referenced where their patterns are taught. The code for all four predated the last guide pass (the types were already in the baseline), so the sections existed but did not yet cite the ADRs: ADR-020 (permission authorization) in G08 (the permission-policy sections + the
IPermissionRegistry/PermissionRegistry/PermissionRegistryBuilderregistry), ADR-021 (consumer inbox idempotency) in G04 (theIInboxStore/EfInboxStore/InboxMessagesections), ADR-022 (browser session-cookie auth) in G08 (the session-cookie subsystem), and ADR-023 (security response headers + pluggable CSP) in G16 (SecurityHeadersMiddleware/ICspPolicyProviderinMMCA.Common.Aspire) and G24 (ADC'sBlazorCspPolicyProvider).- G08 unit repack (no content lost). Re-running
plan.ps1repartitioned G08's sections units: the session-cookie (MMCA.Common.API.SessionCookies) and permission (MMCA.Common.API.Authorization) namespaces shifted the level-ordered packing, so G08 was re-authored across five units (p00 overview + p01 to p04, 49###sections) to restore the twelve session-cookie sections and re-home the JWT/token/DTO/ registry sections without any drop or duplicate (verify.ps1: 0 missing; no new same-name-collision headings). The G25 per-project rollup (-p07) was reconciled to 770, correcting four pre-existing undercounts (MMCA.Common.Shared.Tests18 to 19,MMCA.Common.API.Tests37 to 40,MMCA.Common.Application.Tests133 to 134,MMCA.ADC.Conference.API.Tests13 to 14). Scope note:build/facts(the new FACTS.md generator in the MMCA.Common repo root) is build tooling, not framework/app source, and is excluded from the inventory by the same rule asTools/invtool.
Regeneration note (re-verified against current source, v1.93.0 full drift sweep). Regenerated at framework v1.93.0 (MMCA.Common
3e72bfa; MMCA.ADC89d8439; FACTS.md is the source of truth for the version / 13-package / 34-ADR (001-034) figures). Net change since the v1.83.0 pass: +41 distinct nodes (1,869 → 1,910), individually-sectioned 1,099 → 1,137, rolled-up 770 → 773,###sections 883 → 931. The change is +73 added, 9 removed (all G25 test renames/consolidation), 0 regrouped, clustered around the post-v1.83 ADRs (verify.ps1: 0 missing; rubric 34/34):
- i18n / multi-locale (ADR-027, supersedes ADR-011). Server-side edge error localization keyed by
Error.Code: G12 (+5)ErrorLocalizer/IErrorLocalizer/ErrorResourceSource(MMCA.Common.API/Localization/),ErrorResources(MMCA.Common.API/Resources/ErrorResources.cs:9), andSupportedCultures(MMCA.Common.Shared/Globalization/SupportedCultures.cs:9, re-homed from theShared-to-G08 catch-all into G12 beside the edge localizer via a new classifier rule). Per-module localized error resources: G20 (+1)ConferenceErrorResources, G22 (+1)EngagementErrorResources, G23 (+1)IdentityErrorResources. Culture bootstrap + forwarding in G15:MmcaCultureBootstrap,CultureDelegatingHandler,SharedResource, theIUserPreferenceReader/Writer+ApiUserPreferenceReader/Writerpair,UserPreferences/UserPreferencesRequest(MMCA.Common.UI/).- Day/Dark theme (ADR-028). G15
ThemeService(MMCA.Common.UI/Services/ThemeService.cs:16) plus the per-user preference plumbing above; G23 (+6)ChangePreferences{Command,Handler,Request}/GetUserPreferences{Query,Handler}/UserPreferencesResponsepersistPreferredCulture/PreferredTheme. Honest adoption note: theAddUserPreferencesEF migration is not yet applied to the production ADC / Store Identity databases, so the Profile preferences endpoint errors in prod until it is (stated in G23).- PII redaction (§30 / ADR-005). G02 (+2)
PiiRedactor+ its private nestedRedactableProperty(MMCA.Common.Domain/Privacy/PiiRedactor.cs:24,123, commitb2b0aae) mask[Pii]-marked members for log/telemetry-safe output; a new classifier rule routesMMCA.Common.Domain.Privacy.*to G02 beside the existingPiiAttribute/IAnonymizable.- G25 (+12 net, 874 total). New reusable/fitness infra sectioned in full:
LocalizationResourceTestsBase
TranslationCompletenessTests(ADR-027 resx parity),PiiErasureContractFitnessTests+DataSubjectSample(§30/ADR-005),SliceCohesionTests/SliceCohesionTestsBase(§5 VSA),MarkupSnapshot/MarkupSnapshotResult(§28),ConstructorDependencyCountTests/FormsConventionTests/FrameworkVersionConsistencyTests. NewMMCA.Common.Benchmarksproject (4 BenchmarkDotNet types:SpecificationBenchmarks/SampleItem/MinValueSpec/ActiveSpec, §12 perf smoke) added to the per-project rollup. The 9 removed are G25 renames (OrganizerSpeaker*Tests/SpeakerProfileTests/AttendeeBookmarkEdgeCaseTests→CrossService*;IntegrationTestBase/*Fixture/*Collection/TestWebApplicationFactoryconsolidated).- ADRs 024-034 are now cross-referenced where their patterns are taught even when they added no type (their code predated the baseline): ADR-024 (two-channel notifications) in G10, ADR-025 (startup warm-up/readiness) in G16, ADR-026 (two-tier caching) in G09, ADR-029 (brute-force protection) / ADR-032 (password hashing) / ADR-033 (resource-ownership,
OwnerOrAdminFilter/OwnershipHelper, Store-adopted) in G08, ADR-030 (startup sole-migrator) in G07/G12, ADR-031 (feature-flag management) and ADR-034 (generic entity controllers + dynamic query contract) in G12/G03. The primer's ADR table was extended 019 → 034 and its §27 note rewritten (ADR-011 → ADR-027), with a new §20 day/dark-theme note (ADR-028).- Pipeline governance changes (classifier/extractor, in the uncommittable workspace
Tools/invtool): one new prefix ruleDomain.Privacy → G02, oneShared.Globalization → G12(SupportedCultures),Benchmarks → G25test-detection, and an extractor exclusion ofbuild/facts(the FACTS.md generator) soFactsGeneratorno longer leaks into the inventory. Cycles 13 → 14 (a new G25 test SCC). Edge resolution: 6,238 namespace- visible (~98%) + 140 globally-unique fallback, 25 dropped ambiguous.
Regeneration note (re-verified against current source, v1.103.1 full drift sweep). Regenerated at framework v1.103.1 (MMCA.Common
62fefa9, MMCA.ADCbdf8604d, both clean; FACTS.md is the source of truth for the version / 14-package / ADR-range figures, the fourteenth package being the newMMCA.Common.UI.Webproject). Net change since the v1.93.0 pass: +31 distinct nodes (1,910 → 1,941), individually-sectioned 1,137 → 1,166, rolled-up 773 → 775,###sections 931 → 996 (verify.ps1: 0 missing; rubric 34/34). The change is +34 added, 2 removed, 8 moved repo-to-repo, 1 two-to-one merge, 0 regrouped, clustered around the move-to-Common extraction Waves 2-3 and the i18n pseudo-localization gate:
- Shared authentication workflow (ADR-032, Wave 3, MMCA.Common commit
69dfd53). G08 (+4, 54 total):AuthenticationServiceBase<TUser>(MMCA.Common.Application/Auth/AuthenticationServiceBase.cs:34),IAuthUser(MMCA.Common.Domain/Auth/IAuthUser.cs:10),OwnerOrAdminFilterOptions(MMCA.Common.API/Authorization/OwnerOrAdminFilterOptions.cs:11), plusAuthenticationValidatorsmoved in from ADC Identity.Application (byte-identical body). ADC'sAuthenticationServiceis now a thin subclass supplying per-app hooks (its G23 section was rewritten accordingly). One new classifier prefix rule,MMCA.Common.Domain.Auth → G08(user-approved 2026-07-04), resolved the only unmapped type.- Edge controller bases hoisted (G12 +5, 52 total):
OAuthControllerBaseandServiceInfoControllerBase(new, with nestedServiceInfoResponse/ServiceInfoV2Responsemoved from ADC'sServiceInfoController), plusExternalAuthExtensionsmoved from ADC Identity.API (the ADC copies were deleted).- UI auth/CSP plumbing hoisted + pseudo-loc gate (G15 +11, 80 total). Moved in:
BlazorCspPolicyProviderandServerTokenStorageService(into the newMMCA.Common.UI.Webproject, whoseDependencyInjectionis also new),WasmTokenStorageService,ChildEntityServiceBase, andConfigurationOAuthUISettings(a 2-to-1 merge of ADC'sAdcOAuthUISettings+WasmOAuthUISettings, the sole -1 in the node arithmetic). New for the ADR-027 pseudo-localization gate:PseudoLocalizer/PseudoStringLocalizer/PseudoStringLocalizerFactory/ResxMudLocalizer(MMCA.Common.UI/Globalization/) andMudTranslations. G16 (+1, 15 total):GatewayCorsExtensions. Donor chapters shrank accordingly: G20 38 → 36, G21 71 → 70, G23 68 → 66, G24 35 → 30.- G22 (-1, 56 total):
OwnBookmarkSpecificationdeleted as dead code (zero call sites at prior HEAD89d8439; its ownership-scoping role had already been superseded by the sharedOwnerOrAdminFilter, ADR-033).- G25 (+21 net, 895 total). New sectioned infrastructure: six Testing.Architecture bases (
BrandColorTokenTestsBase,ConstructorDependencyCountTestsBase,DataResidencyTestsBase,FormsConventionTestsBase,FrameworkVersionConsistencyTestsBase,LocalizedTextConventionTestsBase), theWebVitalsCollector/WebVitalsSample/WebVitalsArtifacttrio,AuthorizationTestsBase,SecurityHeadersTestsBase, andSqlServerIntegrationTestFixtureBase<TEntryPoint>; plus rolled-up test classes (pseudo-loc and web-vitals suites,LocalizedTextConventionTestsin both repos). ADC'sProtectedPageExtensionswas removed, functionally superseded byAuthorizationTestsBase(different shape, tracked as removed+added, not moved). Rollup reconciled:MMCA.Common.UI.Tests26 → 31,MMCA.Common.UI.E2E.Tests7 → 9.- Level repack (no content lost). The new Common bases changed dependency Levels, which re-sorted
plan.ps1's packing in G08/G12/G15/G18/G21/G22/G23/G25. 48 units (10 overviews + 37 section units + the G25 rollup) were re-authored to the new unit boundaries and the orphaned partgroup-25-adc-host-composition-p03(all-stale sections) was deleted (verify.ps1: 0 missing, no duplicate headings). G18's inputs repacked with zero content change, so its parts were deliberately left as-is (chapter coverage is unaffected; part/unit alignment catches up on the next G18-touching pass).- Corrections made while re-verifying: the stale G23 callout that the Profile preferences endpoint errors in production was removed (the
AddUserPreferencesmigrations were since applied; applied-state itself is Not determinable from source),IdentitySettingsis now documented as an unwired placeholder (noConfigure<IdentitySettings>and no reader anywhere in MMCA.ADC; the live BR-213 registration throttle is Common'sLoginProtectionSettings.MaxRegistrationsPerIpPerHour), andEngagementUIModule's stale XML-doc claim of contributing navigation items is corrected to the code's actualNavItems = []. Cycles 14 → 13 (the extraction dissolved one SCC). Edge resolution: 143 globally-unique fallback, 25 dropped ambiguous.
Regeneration note (re-verified against current source, v1.111.0 full drift sweep + new group creation). Regenerated at framework v1.111.0 (MMCA.Common
c50d86f, clean; MMCA.ADCf3aba4b9, working tree dirty only on three governance files unrelated to this pass:ArchitectureScorecard.md,RemediationBacklog.md,infra/main.bicep;FACTS.mdis the source of truth for the version / 14-package / ADR-range (001-041) figures). Net change since the v1.103.1 pass: +346 distinct nodes (1,941 -> 2,287), individually-sectioned 1,166 -> 1,284, rolled-up 775 -> 1,003,###sections 996 -> 1,143 across the now-26 chapters (verify.ps1: 0 missing; rubric 34/34). The change is +346 added, 0 removed, 0 moved repo-to-repo, 7 regrouped (all approved classifier fixes, below), clustered around the v1.106.0-v1.111.0 release train:
- New group created (governance event, user-approved 2026-07-10): G26, "ADC Engagement Live Layer (Real-Time Polls & Session Q&A)", chapter file
group-23-engagement-live-layer.md(89 types). All 89 land mechanically in G22 via the broadMMCA.ADC.Engagementprefix rule, but G22's charter is explicitly the async Session-Bookmarks slice; the live layer (added whole in MMCA.ADC commits58476d84/e2f304ea) is a synchronous, SignalR-hub-channel-driven (ADR-039), cross-service (gRPC) audience-interaction capability with its own aggregates (LivePoll/LivePollOption/LivePollVote,SessionQuestion/SessionQuestionUpvote), 7 CQRS use-case folders, 2 controllers, and the HappeningNow / SessionLive / PresenterView UI. Approved with mid-list placement directly after G22 (IDs are append-only, so the new group ID is G26 while the chapter takes file slot 23); renumber fallout: identity-module 23 -> 24, adc-host-composition 24 -> 25, testing-infrastructure 25 -> 26 (17 part files renamed content-unchanged, 3 stale assembled chapters deleted, 110 link occurrences fixed across 30 files).- Three approved regroups (catch-all fallback landings, classifier O-override/prefix fixes dated 2026-07-10 in
Tools/invtool/classify.ps1): the ADR-039 hub-channel trioILiveChannelPublisher/NullLiveChannelPublisher/SignalRLiveChannelPublisherfrom the G07 fallback to G10 (exact structural sibling of the push-sender trio); the Result JSON round-trip trioResultJsonConverterFactory/ResultConverter/PropertyReader(MMCA.Common.Shared/Serialization/ResultJsonConverterFactory.cs:15,35,95) from the G08Sharedcatch-all to G01 (the three form a 3-node cycle withResultitself); andHttpResilienceDefaults(MMCA.Common.Shared/Resilience/HttpResilienceDefaults.cs:10) to G16, since its only consumers are ServiceDefaults (MMCA.Common.Aspire/Extensions.cs:45-78) and the typed gRPC client (MMCA.Common.Grpc/DependencyInjection.cs:87-108), which re-apply the same Polly values.- Per-group adds: G04 +1
OutboxFinalizer(MMCA.Common.Infrastructure/Persistence/Outbox/OutboxFinalizer.cs:12, the v1.110.0 async outbox finalize); G05 +1QueryCacheKeyLocks(nested inCachingQueryDecorator.cs, cache-stampede lock); G12 +2 ADR-040 authenticated output caching (OutputCacheOptionsExtensions.cs:6,PublicEndpointOutputCachePolicy.cs:35); G15 +1ChannelSubscription(nested inNotificationHubService.cs, a new L2 cycle); G17 +7 two-event-home + live-validation contracts (MMCA.ADC.Conference.Shared/Events/:CurrentEventSelector,CurrentEventDefaults,EventLiveInfo,SessionLiveInfo,IEventLiveValidationService,DisabledEventLiveValidationService,QuestionModerationDefault); G18 +3 (EventLiveValidationService.cs:18+ theGetSpeakersByEventFilterquery/handler); G20 +3 cross-service live-validation gRPC (EventLiveValidationServiceGrpcAdapter.cs:23,GrpcErrorTrailerParser.cs:14,EventLiveValidationGrpcService.cs:22); G10 +6 (addsLiveChannelPublisherGrpcAdapter.cs:20,LiveChannelGrpcService.cs:19, the new Notification.ContractsDependencyInjection.cs:14, plus the 3 regrouped in); G01 +3 and G16 +1 regrouped in; G26 +89 (the new chapter); G25 +229 rolled-up test classes (the v1.106.0 unit/integration/E2E programs plus the live-layer suites), including the new individually-sectionedUserPreferencesTestsBase(Testing.E2E), lifting the sectioned G25 infrastructure count 120 -> 121.- Repack alignment repair.
plan.ps1's repack shifted unit boundaries through G17/G18, so the first assembly dropped 9 sections (the 5 DecisionSupport records and the 4 Questions/Update use-case types) and duplicated 23 headings between re-authored and stale parts. Thirteen stale parts (G17 p01/p03/p04/p05, G18 p04/p06-p13) were re-authored to the new boundaries; finalverify.ps1reports 0 missing and the two chapters have no same-type duplicate headings (the remaining### StatusBucketpair is two distinct nested enums:GetCategoryDistributionHandler.cs:94andGetSessionSelectionDashboardHandler.cs:308). G12's p02-p05 part/unit misalignment (chapter-complete, duplicate-free) is pre-existing and catches up on the next G12-touching pass, per the same convention as the v1.103.1 G18 note.- Corrections made while re-verifying (spot-checks + re-author passes): the G15 overview's claim that
LayoutSettingsis validated on start was fixed (onlyApiSettingshas.ValidateDataAnnotations().ValidateOnStart(),MMCA.Common.UI/DependencyInjection.cs:29-32;LayoutSettingsis bind-only with defaults,:34-36); theSpeakersection's claim that category-item adds have no duplicate guard was fixed (the guard exists atSpeaker.cs:296-303; the unguarded add isAddSpeakerQuestionAnswer,:353); theEventwalkthrough was refreshed including the newQuestionModerationDefaultfield (Event.cs:54, BR-233).- ADR cross-references: ADR-039 (hub channels) is now cited in G10/G15 and throughout the new live-layer chapter; ADR-040 (authenticated output caching) in G12/G20. ADR-041 (observability) is not yet cross-referenced anywhere in the guide; its natural home is the devops-aspire chapter, which is outside this pass's scope. Flagged for the next devops-touching pass rather than cited without re-verifying that chapter.
- Cycles 13 -> 16 (new: the G15
NotificationHubService/ChannelSubscriptionpair and two G25 test SCCs aroundCosmosConfigurationPortabilityTests/DatabaseInitializationExtensionsTests/FixedAssemblyProvider/MultiSourceSqliteIntegrationTests); all three verified in-group. Edge resolution: 192 globally-unique fallback, 26 dropped ambiguous.
Regeneration note (re-verified against current source, v1.116.0 full drift sweep + G27 chapter authored). Regenerated at framework v1.116.0 (MMCA.Common
09cf78e, clean; MMCA.ADC2632af6c, clean;FACTS.mdis the source of truth for the version / 15-package / 48-ADR (001-048) figures, the fifteenth package beingMMCA.Common.UI.Maui, the one MAUI-TFM package, ADR-042). Net change since the v1.111.0 pass: +210 distinct nodes (2,287 -> 2,497), individually-sectioned 1,284 -> 1,465, rolled-up 1,003 -> 1,032,###sections 1,143 -> 1,397 across the now-27 chapters (verify.ps1: 0 missing; rubric 34/34). The change is +210 added, 0 removed, several repo-to-repo moves, 0 confident type-level regroups, clustered around the v1.106.0-v1.116.0 release train (ADRs 042-048). Data-quality caveat: an earlier incomplete session had already regenerated the mechanical files (out/,00-group-taxonomy.md,00-inventory.md,00-dependency-manifest.md,_units/,_typemap.tsv) to this 2,497/27-group state without authoring the new chapter or touching the front-matter prose, so the exact prior00-nodes.tsvsnapshot no longer existed on disk; this delta was reconstructed from git history (v1.111.0..HEAD/f3aba4b9..HEAD) cross-referenced against the fresh inventory, not a byte-exact file diff. The node totals and classifier output are exact; the per-type added/moved attributions are git-derived.
- New group created (governance event, user-approved 2026-07-16): G27, "Device Capability Abstraction Layer (Native Contracts, MAUI, Browser & Fallback Adapters)", chapter file
group-26-device-capability-layer.md(87 types, 87###sections). Per-capability interface contracts inMMCA.Common.UI/Services/Capabilities/(biometric, geocoding/geolocation, speech, push registration, media/clipboard/screenshot, haptics, share, external auth/links, local cache/notifications, connectivity/battery/accessibility, deep links) plus their MAUI-native (MMCA.Common.UI.Maui/Capabilities/), browser-JS-interop (.../Capabilities/Browser/), and inert-fallback (.../Capabilities/Fallbacks/) implementations, selected per host at DI composition time (ADR-042/043/044/045). Why no existing group fit: G15 (the naturalMMCA.Common.UI.*catch-all) is generic MudBlazor building blocks/theme/base-pages, whereas this is a distinct one-contract-plus-three-adapters concern spanning three assemblies (MMCA.Common.UI,MMCA.Common.UI.Web,MMCA.Common.UI.Maui) unified by the platform-adapter pattern, not by MudBlazor. The classifier rules that carve G27 out ahead of the G15 catch-all (Tools/invtool/classify.ps1, theMMCA.Common.UI.Services.Capabilities/MMCA.Common.UI.Mauiprefix rules + theIFormFactor/WasmFormFactor/WebFormFactorO-overrides) were already present on disk; this pass authored the chapter and reconciled the front matter to match. Approved with mid-list placement directly after ADC Host Composition (chapter slot 26, ID G27 append-only); renumber fallout: the testing chapter shifts to slot 27 (group-28-testing-infrastructure.md, its file name unchanged from the prior append-only-ID artifact, so no part renames or link rewrites were needed).- ADR-045 managed file storage / avatars (G07 +13, 70 -> 83).
IFileStorageService(MMCA.Common.Application/Interfaces/Infrastructure/IFileStorageService.cs:11),AzureBlobFileStorageService/NullFileStorageService(MMCA.Common.Infrastructure/Services/),IImageProcessor/ImageSharpImageProcessor(decode, auto-orient, exact-square crop, strip metadata, re-encode JPEG),ImageContentSniffer(moved in from ADC'sSetUserAvatarslice),FileStorageSettings, plus ADR-044'sINativePushSender/IPushDeviceRegistrar+ Azure/Null impls landing in the same infrastructure group.- ADR-044 native push (G10 +8, 45 -> 53), shipped inert.
AzureNotificationHubNativePushSender(MMCA.Common.Infrastructure/Services/AzureNotificationHubNativePushSender.cs:14),DeviceInstallationRequest(MMCA.Common.Shared/Notifications/PushNotifications/DeviceInstallationRequest.cs:12), the OS-level FCM/APNs third leg +DevicesControllercontrol plane. Honest security note captured while spot-checking: the class XML-doc claims ownership "is stamped server-side" without qualification, but onlyPUT/UpsertAsyncstamps the caller'sUserId;DeleteAsync(DevicesController.cs:50-56) is scoped only by the client-generated (non-enumerable)installationIdwith no ownership check. The G10 overview now describes the code's actual behavior, not the comment's overclaim (code wins, per the guide's ground rule).- Other per-group adds: G08 +2 (external-auth-broker contract
IExternalAuthBroker/UnavailableExternalAuthBroker, ADR-042/043); G12 +2 (ADR-043 app-association/deep-link endpointsAppAssociationEndpointExtensions/AppAssociationOptions, hoisted from ADC, plus the ADR-046 versioning and ADR-047 soft-deleted-user-revocation surfaces cross-referenced); G14 +2, G15 +1 net (most new UI capability surface was diverted to the G27 prefix rule ahead of the G15 catch-all, so net movement understates churn); G17 +2, G18 +7 (Sessions/UseCases/ExportCalendar.ics slice, ADR-042), G20 +1 (NowNextDTOpublic snapshot), G21 +9 (calendar/QR export UI, OfflineBanner, PresenterLayout onto Common theme providers), G22 +11 (UserEngagementExportServicecross-service gRPC export slice), G26 +3, G23/Identity +12 (ADR-045 user avatar end to end:SetUserAvatar/GetUserAvatar/RemoveUserAvataruse-case family), G24/Host +4 (device-capability DI wiring,AppLockKeyMigrationone-time preference migrator), G25/Testing +46 (new reusableRouteAuthorizationTestsBase+ OpenAPI/ProblemDetails/ServiceInfo-versioning contract bases + the sharedHttpTestDoublesUI harness consolidated from 3 ADC copies, plus per-project growth across every touched module).- ADRs 042-048 are now cross-referenced where their patterns are taught: 042 (device-capability) in the new G27 chapter + G08/G24; 043 (mobile deep links / app association / native OAuth callback) in G12/G27; 044 (native push) in G07/G10; 045 (managed file storage + avatars) in G07/G23; 046 (HTTP API versioning) in G12/G20/G25; 047 (soft-deleted-user session revocation) in G12; 048 (primitive identifier type aliases) in G02/G14 where the alias convention is taught.
- Corrections made while re-verifying (adversarial spot-checks on the authored overviews): the G08 auth overview's 7
MMCA.Common.APIcitations were pointing atSource/Core/instead of the realSource/Presentation/MMCA.Common.APIlayer (corrected; the section parts had it right), and itsTokenServicealgorithm re-check citation was split to:130(theValidAlgorithmspin passed intoValidateToken) +:139-140(the post-return header re-check); the G10 DevicesController DELETE overclaim above; a G10[ApiVersion]citation range widened:29-30->:28-30.- Cycles 16 (unchanged this pass, re-verified via invtool). Edge resolution: 8,596 namespace-visible (~97%), 237 globally-unique fallback, 26 dropped ambiguous. ADR-041 (observability) remains not cross-referenced in the guide; its natural home is the devops-aspire chapter, outside this pass's scope (still flagged, as at v1.111.0).
Regeneration note (re-verified against current source, v1.121.0 full drift sweep). Regenerated at framework v1.121.0 (MMCA.Common
658786b, clean, prior-documented09cf78e; MMCA.ADCcf69cb8e, clean, prior-documented2632af6c;FACTS.mdis the source of truth for the version / 15-package / 50-ADR (001-050) figures). Net change since the v1.116.0 pass: +90 distinct nodes (2,497 -> 2,587), individually-sectioned 1,465 -> 1,495, rolled-up 1,032 -> 1,092,###sections 1,397 -> 1,421 across the (unchanged) 27 chapters (verify.ps1: 0 missing; rubric 34/34). The change is +26 production types added, 1 removed, 8 types moved G24 -> G21, 0 confident type-level regroups, plus a +64 net test-only rollup. No new functional group was needed (classify.ps1: 0 unmapped).
- G02 +1 (27 -> 28):
IRowVersioned(MMCA.Common.Domain/Interfaces/IRowVersioned.cs:11), the opt-in optimistic-concurrency marker consumed byEFRepositoryand the audit interceptor (ADR-035 cited from the source doc comment; the ADR text itself was not opened this pass).- G03 +1 (25 -> 26):
FilterValueParser(MMCA.Common.Application/Services/Filtering/FilterValueParser.cs:8), which ships the IN-operator dynamic-filter feature by parsing comma-delimited value lists (int/Guid lists skip unparseable entries; the string-list path only splits + trims).- G07 +2 (83 -> 85):
SoftDeleteUniqueIndexConvention(.../Persistence/Conventions/SoftDeleteUniqueIndexConvention.cs:24) andDeferredDispatch(.../Persistence/Interceptors/DomainEventSaveChangesInterceptor.cs:275), the latter a new 6th member of the L6 persistence cycle (see section 3).- G18 +9 (202 -> 211): the batch
GetSessionBookmarkCountsQuery/Handlerbookmark-count perf slice (Speakers/UseCases/GetSessionBookmarkCounts/, commitfa420f65), the six per-fieldSession*Rules<T>validation-rule family (Sessions/Validation/SessionValidationRules.cs:37-99: Description/Status/LiveUrl/RecordingUrl/AccessibilityInfo/ResourceLinks) andSessionRoomScheduling(Sessions/Validation/SessionRoomScheduling.cs:14).- G21 +10 (79 -> 89): the 8 ADC Home-page view-model types moved in from G24 (see moves below) plus
ScorePollSignal/ScorePollTracker(Pages/SessionSelection/ScorePollTracker.cs:6,31, commitadee5058), the AI-scoring poll recovery state machine.- G22 +5 (67 -> 72): the durable ADR-039 live-channel publish queue,
LiveChannelPublishWorkItem/ILiveChannelPublishQueue/LiveChannelPublishQueue(Engagement.Application/Live/) +LiveChannelPublishProcessor(Engagement.Infrastructure/Live/LiveChannelPublishProcessor.cs:21, commitbf99b92a).- G23/Identity +4 (78 -> 82): the external-login lifetime fix
IExternalLoginEmailVerifier(Identity.Application/Users/IExternalLoginEmailVerifier.cs:11) +HttpContextExternalLoginEmailVerifier(Identity.API/Authentication/HttpContextExternalLoginEmailVerifier.cs:17, commitcf69cb8e) andListPageActions(Identity.UI/Common/ListPageActions.cs:13).- G10/G20/G22/G23 shared add: a same-shaped
KestrelConfigurationwas added once per extractable ADC service host (Notification/Conference/Engagement/Identity, 4 total), sectioned in the module's chapter (counted in each group's delta above; G10 53 -> 54, G20 40 -> 41).- Moved (de-duplication, commit
adee5058): 8 ADC Home-page types G24 -> G21.ADCHome,ADCEventInfo,ConferenceTrackInfo,EventPhase,KeynoteSpeakerInfo,SponsorInfo,SponsorTierInfo,ADCCollectionResultwere duplicated across both host shells (MMCA.ADC.UI/Pages/ADCHome.razor.cs+MMCA.ADC.UI.Web.Client/Pages/ADCHome.razor.cs, 16 nodes) and were consolidated into one shared componentMMCA.ADC.Conference.UI/Pages/Home/ADCHome.razor.cs(8 nodes). Net: G24/Host 34 -> 18 (-16), G21 +8 of its +10. Their prose sections moved to the Conference UI chapter and are cross-linked from G24.- Removed (1):
AnonymousAuthenticationStateProvider(Gallery stub), superseded byGalleryAuthenticationStateProvider+GalleryFakeAuthenticationHandler(MMCA.Common.UI.Gallery/Stubs/, a different shape, tracked as remove + add).- G25/Testing +64 net (1,170 -> 1,242, mostly rolled up): 6 newly individually-sectioned reusable bases (
DecoratorPipelineOrderTestsBase<...>,HandlerTestBase<THandler>,HandlerResultConventionTestsBase,RawQueryableConventionTestsBase, the two Gallery stubs above) plus per-project [Fact] growth (Common.Application.Tests 147 -> 160, Common.Infrastructure.Tests 157 -> 171, ADC.Identity.IntegrationTests 28 -> 33, ADC.Architecture.Tests 26 -> 30, ADC.Engagement.UI.Tests 14 -> 19, and newMMCA.ADC.Notification.API.Tests/.Application.Tests/ServiceBusEmulator.IntegrationTestsprojects; ADC.Conference.Application.Tests 139 -> 133 net decrease via consolidation).- Cycles 16 (unchanged this pass, re-verified via invtool), but the L6 persistence cycle grew from 5 to 6 members with
DeferredDispatchadded (section 3). Edge resolution: 8,868 namespace-visible (~96%), 331 globally-unique fallback, 27 dropped ambiguous. ADR-041 (observability) remains not cross-referenced in the guide (still flagged; its home is the devops-aspire chapter, outside scope).- Authoring-methodology note (honest process record). Adding 90 nodes shifted
plan.ps1's write-unit packing boundaries mid-chapter across G10/G18/G25(Testing), so several pre-existing types were pushed into a different part than the drift delta first flagged. A verification pass (duplicate-heading scan + per-part membership diff, beyondverify.ps1's presence-only check) caught 17 fall-through types and 17 transient duplicate sections in the testing chapter; a second targeted author wave over the shifted parts (G10 p02-p04, G18 p07-p15, G25 p01/p04/p05/p07) restored parts-to-units 1:1 (final: 0 missing, 0 new duplicates). One part (group-18 p15) was authored to a stray path and relocated. The node totals and classifier output are exact; the per-type attributions are commit-anchored where a commit is cited.
Regeneration note (re-verified against current source, v1.123.0 full drift sweep). Regenerated 2026-07-23 at framework v1.123.0 (MMCA.Common
c911480, clean, prior-documented658786b; MMCA.ADC160f59f5, clean, prior-documentedcf69cb8e;FACTS.mdremains the source of truth for the version / package / ADR figures). Net change since the v1.121.0 pass: +1 distinct node (2,587 -> 2,588; declaration rows 2,674 -> 2,676), individually-sectioned 1,495 -> 1,494, rolled-up 1,092 -> 1,094,###sections 1,421 -> 1,436 across the (unchanged) 27 chapters (verify.ps1: 0 missing; rubric 34/34). The change is +1 production type added, 2 removed, 0 regrouped, plus a +2 net test-only rollup. No new functional group was needed (classify.ps1: 0 unmapped).
- G03 +1 (26 -> 27):
LongFilterStrategy(MMCA.Common.Application/Services/Filtering/LongFilterStrategy.cs:14), the v1.122.0 long-typed dynamic-filter strategy (comparisons plus IN/BETWEEN/IS EMPTY), joining the Bool/DateTime/Decimal/Guid/Int/String sibling family. The chapter also repaired a pre-existing gap:EntityQueryParameters<TEntity>,ParameterReplacer,IEntityQueryPipeline,EntityQueryPipeline,INavigationMetadataProvider, andNavigationMetadataProviderwere previously narrated only in overview prose behind#anchorlinks with no matching anchors; they now have real###sections (part p02).- G04 -2 (31 -> 29):
IIntegrationEventPublisher(interface,MMCA.Common.Application/Interfaces/IIntegrationEventPublisher.cs) andIntegrationEventPublisher(adapter,MMCA.Common.Infrastructure/Services/IntegrationEventPublisher.cs) removed in the v1.123.0 IEventBus consolidation (Common commite5d25b5, PR #104); callers publish throughIEventBusdirectly and the chapter overview was rewritten to drop the adapter pattern.- G18 (no count change):
GetNowNextQuerynow implementsIQueryCacheable(ADR-042 Wave 8:CacheKeyunder the Session-aggregate prefix, 30sCacheDuration); its citation movedGetNowNextQuery.cs:11 -> :23and its computed Level moved 0 -> 7, relocating its section within the chapter (old unit p05 -> p14).- G25/Testing +2 net (1,242 -> 1,244, all rolled up): +
LongFilterStrategyTests, +GetNowNextQueryCacheTests, +WarningCountingLogger(nested,DistributedCacheServiceTests.cs:116); -IntegrationEventPublisherTests;RecordingIntegrationEventPublisherrenamed in place toRecordingEventBus(TestSupport.cs:266, retargeted from the deleted contract toIEventBus, net-zero). Extractor artifact honestly recorded: the new nestedItemfixture inLongFilterStrategyTests.cs:8collides by name+namespace with the sibling files' existing fixture, so declaration rows rose +2 while distinct nodes rose +1 for that hunk.- Citation-line-only shifts corrected across G03/G04/G09/G14/G25 (e.g.
DistributedCacheService.cs:14 -> :17, InfrastructureDependencyInjection.cs:35 -> :37after losing the adapter registration,InProcessMessageBus.cs:20 -> :19). Cycles 16 (unchanged, same membership, re-verified via invtool). Edge resolution: 8,871 namespace-visible (~96%), 331 globally-unique fallback, 27 dropped ambiguous (rounded figures unchanged).- Post-author verification record: an adversarial spot-check flagged and corrected two authored claims before this note was written: the testing-chapter overview's "eighteen
ArchitectureRules.*partial files" (actual: 16, with noAggregatespartial; aggregate rules live insideArchitectureRules.Entities.csand are exercised viaBases/AggregateConventionTestsBase.cs) and a G03 claim thatStringFilterStrategy's nine operators are the family's largest set (the DateTime/Decimal/Int/Long strategies have ten each), plus three minor citation-precision slips in the testing overview.
Regeneration note (re-verified against current source, v1.128.0 full drift sweep). Regenerated 2026-07-25 at framework v1.128.0 (MMCA.Common
3dff29b, clean, prior-documentedc911480; MMCA.ADCec7a0c4a, clean, prior-documented160f59f5;FACTS.mdremains the source of truth for the version / package / ADR figures). Net change since the v1.123.0 pass: +49 distinct nodes (2,588 -> 2,637; declaration rows 2,676 -> 2,727; files scanned 2,210 -> 2,252, generated exclusions 78 -> 88), individually-sectioned 1,494 -> 1,517, rolled-up 1,094 -> 1,120,###sections 1,436 -> 1,456 across the (unchanged) 27 chapters (verify.ps1: 0 missing; rubric 34/34). The change is +23 production types added, 0 removed, 0 regrouped, 0 moved, plus a +26 test-only rollup. No new functional group was needed (classify.ps1: 0 unmapped).
- G03 +2 (27 -> 29):
DynamicQueryConfig(MMCA.Common.Application/Services/Filtering/DynamicQueryConfig.cs:18) andPagingMath(MMCA.Common.Application/Services/Query/PagingMath.cs:20), the extracted page-size clamp shared by the query pipeline and the controller base.- G07 +5 (85 -> 90): the
ExecuteUpdateAsyncset-builder pairIUpdatePropertySetter<TEntity>(MMCA.Common.Application/Interfaces/Infrastructure/IUpdatePropertySetter.cs:13) andUpdatePropertySetterBuilder<TEntity>(MMCA.Common.Infrastructure/Persistence/Repositories/UpdatePropertySetterBuilder.cs:14);PeriodicBackgroundService(MMCA.Common.Infrastructure/Services/PeriodicBackgroundService.cs:20); and two nested types now surfaced by the extractor,DetectChangesScope(MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:170) andAggregateCapture(MMCA.Common.Infrastructure/Persistence/Interceptors/DomainEventSaveChangesInterceptor.cs:303).- G08 +3 (56 -> 59):
AllowMissingOwnerAttribute(MMCA.Common.API/Authorization/AllowMissingOwnerAttribute.cs:21) and the striped async lockKeyedSemaphoreStripe+ its nestedReleaser(MMCA.Common.Shared/Concurrency/KeyedSemaphoreStripe.cs:22and:78).- G09 +2 (4 -> 6):
CacheKeyPrefixOptionsandCacheKeyNamespace(MMCA.Common.Infrastructure/Caching/CacheKeyPrefix.cs:28and:41), doubling the caching chapter.- G12 +1 (56 -> 57):
ConcurrencyTokenRequest(MMCA.Common.Shared/DTOs/ConcurrencyTokenRequest.cs:12), the shared row-version DTO the v1.125.0 sweep swapped every lifecycle-transition record onto (ADR-035).- G17 +1 (85 -> 86) and G22 +1 (72 -> 73): the per-module transition requests built on that DTO,
EventTransitionRequest(MMCA.ADC.Conference.Shared/Events/EventTransitionRequest.cs:14) andLifecycleTransitionRequest(MMCA.ADC.Engagement.Shared/LifecycleTransitionRequest.cs:15).- G18 +5 (211 -> 216): the AI session-scoring queue
ISessionScoringQueue/SessionScoringEnqueueResult(.../DecisionSupport/ScoreEventSessions/ISessionScoringQueue.cs:31and:4) +SessionScoringQueue(.../ScoreEventSessions/SessionScoringQueue.cs:17), and the server-side speaker filterGetSessionsBySpeakerFilterQuery/GetSessionsBySpeakerFilterHandler(.../GetSessionsBySpeakerFilter/GetSessionsBySpeakerFilterQuery.cs:11,...Handler.cs:21) that replaced the client-side virtual filter.- G19 +1 (27 -> 28):
SessionScoringProcessor(MMCA.ADC.Conference.Infrastructure/Services/SessionScoringProcessor.cs:31), the background drain for that queue.- Chapter 23 / G26 +2 (92 -> 94): the atomic counter handlers
LivePollVoteChangedHandler(MMCA.ADC.Engagement.Application/LivePolls/DomainEventHandlers/LivePollVoteChangedHandler.cs:31) andSessionQuestionUpvoteChangedHandler(MMCA.ADC.Engagement.Application/SessionQuestions/DomainEventHandlers/SessionQuestionUpvoteChangedHandler.cs:32).- G25/Testing +26 net (1,244 -> 1,270, all rolled up; individually-sectioned reusable infrastructure stays at 150): new suites across
MMCA.Common.Application.Tests,MMCA.Common.Infrastructure.Tests,MMCA.Common.Shared.Tests,MMCA.Common.Benchmarks,MMCA.ADC.Conference.Application.TestsandMMCA.ADC.Engagement.Application.Tests, plus a brand-new projectMMCA.Common.Infrastructure.Redis.Tests(1 type,DistributedCacheServiceRedisTests) which gets its own row in the per-project rollup table.- Cycles 16 -> 18: two new test-only SCCs,
MidSaveContextCreatingDbContext/ReentrantSaveInterceptorandFailingSaveInterceptor/OutboxRoutingTestDbContext, both wholly inside the testing group (all four assignedG25), and theCosmosConfigurationPortabilityTestsSCC's level shifted 9 -> 10. Edge resolution: 9,038 namespace-visible (~96%), 335 globally-unique fallback, 28 dropped ambiguous.- Post-author verification record: re-authoring under a repacked unit layout dropped three pre-existing sections whose types had shifted across unit boundaries into a part that was not in the re-author set (
GetSessionBookmarkCountQuery,GetSessionBookmarkCountHandler,SessionEventIdRules<T>, all group-18).verify.ps1caught it (3 missing); the sections were restored into their new home unit and re-verified line by line against current source, which surfaced one genuine drift corrected in the restored text: the bookmark-count endpoint's output-cache policy is nowBookmarkCountsCache, notConferencePublicCache(MMCA.ADC.Conference.API/Controllers/SpeakersController.cs:264). A second spot-check corrected a loose anchor in the group-08 overview: 75-octet folding and the CRLF writes both live inIcsCalendarBuilder.AppendLine(MMCA.Common.Shared/Calendars/IcsCalendarBuilder.cs:83-104), not at:22. Final run: 0 missing, rubric 34/34.
Regeneration note (re-verified against current source, v1.131.0 full drift sweep). Regenerated 2026-07-28 at framework v1.131.0 (MMCA.Common
2c52aa9, clean, prior-documented3dff29b; MMCA.ADC2ec77796, clean, prior-documentedec7a0c4a;FACTS.mdremains the source of truth for the version / package / ADR figures). Net change since the v1.128.0 pass: +8 distinct nodes (2,637 -> 2,645; declaration rows 2,727 -> 2,735; files scanned 2,252 -> 2,260, generated exclusions unchanged at 88), individually-sectioned 1,517 -> 1,524, rolled-up 1,120 -> 1,121, across the (unchanged) 27 chapters (verify.ps1: 0 missing; rubric 34/34). The change is +7 individually-sectioned types added, 0 removed, 0 regrouped, plus a +1 net test-only rollup (+2 added, -1 removed) and 2 citation-line corrections. No new functional group was needed (classify.ps1: 0 unmapped). The whole delta traces to one change: ADC commit01551f14("Bump MMCA.Common to v1.131.0 and adopt the shared health-check and test bases", #77) and the framework work it consumes.
- G16 +1 (16 -> 17):
HealthCheckTags(MMCA.Common.Aspire/HealthCheckTags.cs:6), the shared liveness/readiness tag vocabulary the service hosts now register against. The chapter repacked from one sections unit to two, which relocated the existingHttpResilienceDefaultssection into the newp02unit unchanged.- G22 +1 (73 -> 74) and G23 +1 (82 -> 83):
SelfHttpWarmupTask, one per extractable service host (MMCA.ADC.Engagement.Service/SelfHttpWarmupTask.cs:19andMMCA.ADC.Identity.Service/SelfHttpWarmupTask.cs:19). They are two distinct classes that share a name, taught in their own service chapters. The Conference service has no equivalent today.- G25 +5 (1,270 -> 1,275), of which +4 are individually sectioned: the shared host bases
ProductionHostApplicationFactory<TEntryPoint>(MMCA.Common.Testing/ProductionHostApplicationFactory.cs:22) andGracefulShutdownTestsBase<TEntryPoint>(MMCA.Common.Testing/GracefulShutdownTestsBase.cs:24), the fitness baseObservabilityConventionTestsBase(MMCA.Common.Testing.Architecture/Bases/ObservabilityConventionTestsBase.cs:30) and its own suiteObservabilityConventionTestsBaseTests(MMCA.Common.Architecture.Tests/ObservabilityConventionTestsBaseTests.cs:14); plus two rolled-up suites,AuthControllerBaseRateLimitTests(MMCA.Common.API.Tests/Controllers/AuthControllerBaseRateLimitTests.cs:16) andInfrastructureHealthChecksTests(MMCA.Common.Aspire.Tests/Health/InfrastructureHealthChecksTests.cs:16). The one removal this pass is ADC's localGatewayApplicationFactory(MMCA.ADC.Gateway.Tests/GatewayApplicationFactory.cs:12), deleted in01551f14and functionally superseded by the shared generic base above; because the shapes differ (local concrete factory vs shared generic base) it is tracked as remove + add, not a move, per the earlierAnonymousAuthenticationStateProviderprecedent. Reusable-infrastructure sections rose 150 -> 154; the per-project rollup table movedMMCA.ADC.Gateway.Tests6 -> 5,MMCA.Common.API.Tests65 -> 66 andMMCA.Common.Aspire.Tests11 -> 12.- Citation-only corrections (no behavior change):
AuthControllerBase(MMCA.Common.API/Controllers/AuthControllerBase.cs):16 -> :40in group-12, andAuthController(MMCA.ADC.Identity.API/Controllers/AuthController.cs):25 -> :26in group-24. Three rolled-up test classes also shifted lines (ConstructorDependencyCountTests:11 -> :17,GracefulShutdownTests:14 -> :9,ObservabilityConventionTests:17 -> :7); they are cited only in00-inventory.md, which regenerates.- Cycles 18 -> 19, and the 19th is a phantom. The new SCC pairs the two
SelfHttpWarmupTaskclasses with each other. Neither references the other; they are unrelated types in different services that the extractor's globally-unique-name fallback cannot tell apart. It is the first cycle whose members sit in two different groups (G22andG23), and correctly so, since each chapter teaches its own class. Recorded here rather than suppressed, because00-dependency-manifest.mdis generated and will keep reporting it until the fallback gains namespace disambiguation or one class is renamed. Edge resolution: 9,050 namespace-visible (~96%), 338 globally-unique fallback (335 -> 338), 28 dropped ambiguous (unchanged).- Correction to the prior pass's section count. The v1.128.0 note recorded
###sections as 1,436 -> 1,456. The assembled corpus at that commit actually held 1,439, so the recorded figure was overstated by 17; it appears to have been inferred rather than measured. This pass measures it directly fromconcat.ps1's per-chapter output: 1,439 -> 1,446, exactly +7 for the seven new individually-sectioned types (group-16 16 -> 17, group-22 64 -> 65, group-24 65 -> 66, group-27 145 -> 149; group-12 unchanged at 57, its edit being citation-only). Coverage was never affected:verify.ps1checks names, not section totals, and reported 0 missing at both passes.- Post-author verification record: the spot-check pass returned two DRIFTED verdicts on prose this run authored, both confirmed against source and corrected before assembly. (1) The group-22 overview attributed the design-time migrations factory's configuration-assembly handle to the Application-layer
AssemblyReference; the factory actually usesMMCA.ADC.Engagement.Infrastructure.AssemblyReference(MMCA.ADC/Source/Hosting/MMCA.ADC.Migrations.SqlServer.Engagement/DesignTimeSQLServerDbContextFactory.cs:27), which is the correct layer because theIEntityTypeConfigurationclasses live in Infrastructure. (2) The group-12ApiControllerBasesection claimed the sharedinternal staticErrorHttpMappingmembers letUnhandledResultFailureFilterproduce a "byte-identical" body. Only the status code and theerrorsextension are shared;Title/Detaildeliberately differ ("Unhandled result failure" / "The action returned a Result.Failure that was not mapped to an HTTP error response." atMMCA.Common.API/Middleware/UnhandledResultFailureFilter.cs:41-42against "Operation failed" / "One or more errors occurred." atMMCA.Common.API/Controllers/ApiControllerBase.cs:43-44), so a response that fell through the filter stays distinguishable from one the controller mapped on purpose. Final run after both corrections: 0 missing, rubric 34/34.- One code-side fix landed out of this sweep. Authoring the group-16 chapter surfaced a stale in-code comment:
OutboxPollFilterProcessorexplained its duplicated activity-name literals with "the Aspire package has no project references by design", which stopped being true whenMMCA.Common.Aspiretook aProjectReferenceonMMCA.Common.SharedforHttpResilienceDefaults. Corrected in MMCA.Common006812e(PR #167, merged after this sweep's extraction at2c52aa9): the real reason is that the package does not referenceMMCA.Common.Infrastructure, whereOutboxProcessorlives, soAddServiceDefaultsstays usable from a host that does not take the persistence stack. That commit lengthened the comment by three lines, shifting the citations inside the type's body, so the group-16 overview and section were re-cited against006812e(OnEnd:24 -> :27, parent-chain walk:34 -> :37, the both-names match:36-37 -> :39-40, theRecordedclear:42 -> :45, the null guard:26-30 -> :29-33, the two constants:20-21 -> :23-24, the comment itself:17-19 -> :17-22). The type's own declaration line (:15) is above the comment and did not move, so the generated inventory, taxonomy and node set are unaffected and were not re-extracted. The chapter prose also repeated the false "no project references" reason in two places; both now state the Infrastructure-specific one.
Regeneration note (re-verified against current source, v1.135.0 full drift sweep). Regenerated at framework v1.135.0 (MMCA.Common
f292233; MMCA.ADC995a7886; both clean;FACTS.mdis the source of truth for the version and package figures). Net change since the v1.131.0 pass: +92 distinct nodes (2,645 to 2,737), individually-sectioned 1,524 to 1,556, rolled-up 1,121 to 1,181, cycles 19 to 20.classify.ps1: 0 unmapped, so no new functional group was needed and the chapter count stays at 27.verify.ps1: 0 missing, rubric 34/34.###sections 1,446 to 1,442, which is a fall despite 43 new sections because this pass also removed 47 duplicate or dead ones (see the dedup paragraph below): 1,446 - 47 + 43 = 1,442, measured fromconcat.ps1's per-chapter output rather than inferred. The delta traces to the bug-hunt remediation waves in both repos (MMCA.Common #177/#179/#180, MMCA.ADC #88 to #94) and releases v1.132.0 through v1.135.0.
- 34 new individually-sectioned types, +60 rolled-up test types, 2 removed. G05 +1 (
IDistributedLock,MMCA.Common.Application/Interfaces/IDistributedLock.cs:30); G07 +1 (TransactionCommitAmbiguousException,MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/TransactionCommitAmbiguousException.cs:22); G14 +4 (the distributed-lock implementations and their handles,Infrastructure/Concurrency/); G15 +3 (ICultureApplier,EndpointCultureApplier,ChannelReferenceCounter); G17 +1 (ConferenceReadAudience,Conference.Shared/Authorization/ConferenceReadAudience.cs:23); G18 +13 (the sixGetPublic*Filterquery/handler pairs,PublicConferenceVisibility,PublicSessionStatusSpecification,LocalityLookupEntry); G20 +2 (PublicLookupReader,CurrentUserServiceExtensions); G21 +1 (SessionSelectionFilterOptions) and -2 (SponsorInfo,SponsorTierInfo, both deleted fromADCHome.razor.cs, whose sections and inbound links were removed); G22 +5 (the now-and-next slice plusLiveEventListener); G26 +3 (the MAUI culture applier, initializer and store). The clusters are the BR-49/BR-239 public-visibility projection, the culture-applier boundary (ADR-027), distributed locking behind the idempotency filter, and reference-counted hub-channel membership (ADR-039).- The
DbContexts.Factoryfamily was written for the first time (+9 sections).IDbContextFactory,IPhysicalDbContextFactory,PhysicalDbContextFactory,ApplicationDbContextEFFactory, the threeDefault*DbContextFactoryengine shims,DbContextFactoryandIdentityInsertGrouphad no sections at all despite other chapters cross-linking to them, so those anchors resolved nowhere. Closing them dropped the anchor-less count from 107 to 64 (§5, item 4).- 47 duplicate or dead sections removed. Earlier passes re-authored a repacked part into its successor without removing the predecessor, so seven chapters taught the same type twice: the assembled corpus held 42 duplicate headings, 28 of them in group-07 alone, where
p02's 13 sections were a strict subset ofp03's 14 andp04's 15 a subset ofp05's 16. The stale copies were the losers on evidence (p02citedApplicationDbContext.cs:34andclass;p03cites:35andclass (abstract)), so four fully-redundant part files were deleted and the individual duplicates removed fromgroup-04-p02,group-19-p01,group-23-p07andgroup-24-p02. One deletion was caught and reverted:group-25-p03also held the WinUIApp(MMCA.ADC.UI/Platforms/Windows/App.xaml.cs:8), a distinct type fromp01'sApp(MMCA.ADC.UI/App.xaml.cs:7), so a name-based subset test wrongly read it as redundant; that section was restored. A (section + citation) pair check across the whole corpus now reports 0 duplicates.- 137 section-header citations corrected mechanically from the fresh inventory across 35 parts (3 same-name cases were left alone as ambiguous). This only fixes the declaration line in each section's meta line; see §5 item 5 for why that is not sufficient.
- 8 sections repaired after an adversarial prose check returned 8 DRIFTED out of 8. The sampled sections were the ones whose declaration line had moved furthest, and several described behaviour that has since inverted:
SafeDomainEventHandler<TDomainEvent>was documented as swallowing handler exceptions when the current code uses an exception filter that logs and rethrows (SafeDomainEventHandler.cs:63-67);WarmupHostedServicewas documented as having no per-task deadline, with the hang called out as an open gap, when aWaitAsync(_taskTimeout, ...)timeout and a fourthLogTaskTimedOutmessage now exist (WarmupHostedService.cs:69,:105);QueryCacheKeyLockswas documented as aConcurrentDictionary<string, SemaphoreSlim>keyed exactly when it is now a fixed-widthKeyedSemaphoreStripethat buckets keys (CachingQueryDecorator.cs:123);MemoryCacheService's claimed load-bearing write ordering no longer exists;SpeakerLocalityHelper'sFindLocalityCategoryis now the pluralFindLocalityCategoriesreturning every match (SpeakerLocalityHelper.cs:88); andConferenceTrackInfodescribed twelve tracks with names that appear nowhere in source against the real eight (ADCHome.razor.cs:254-268).PropertyAccessorandAggregateCapturewere citation-stale throughout. All eight were rewritten against current source.- The 20th cycle is genuine, unlike the 19th.
CommitFailingDbContextandFailingDatabaseFacade(MMCA.Common.Infrastructure.Tests/Persistence/DbContextFactoryCommitAmbiguityTests.cs:175and:230) really do reference each other: the context holds the facade and the facade takes the context. Both are rolled-up test doubles, so no chapter section is affected. Edge resolution: 9,543 namespace-visible (~96%), 348 globally-unique fallback (338 to 348), 28 dropped ambiguous (unchanged).- Method note. The mechanical plan repacked G18 (16 to 17 units) and G26 (10 to 11), and the workflow's default apply path would have re-authored all 28 of those parts from their new rosters. That was deliberately not done: parts and unit boundaries have been out of sync for many passes (44 of 123 sections units at this pass), so a wholesale rewrite drops the sections that migrated elsewhere, which is exactly what produced the 42 duplicates above. New sections were inserted into the part where their siblings already live, leaving every other section byte-identical.
Regeneration note (re-verified against current source, v1.142.0 full drift sweep). Regenerated at framework v1.142.0 (MMCA.Common
710d29d; MMCA.ADCe50ce9b8; both clean;FACTS.mdis the source of truth for the version and package figures). Net change since the v1.135.0 pass: +127 distinct nodes (2,737 to 2,864), individually-sectioned 1,556 to 1,598, rolled-up 1,181 to 1,266, cycles 20 to 21.classify.ps1: 0 unmapped, no new functional group needed, the chapter count stays at 27.verify.ps1: 0 missing, rubric 34/34.###sections 1,442 to 1,388 (28 stale duplicate copies deleted after the full-roster re-author, plus sibling-family consolidation in the rewritten parts; measured fromconcat.ps1's per-chapter output). The delta traces to the production-patterns extraction program and releases v1.136.0 through v1.142.0.
- The dominant cluster is the user-account use-case extraction to Common. The generic
ChangePassword/ChangePreferences/DeleteUser/GetUserPreferenceshandler bases plus the user-scoping contracts (IUserScopedRequest,IUserOwnedRequest,UserOwnershipRule,SoftDeletedUserValidator<TUser>,UserUseCaseLog) landed in G14 (MMCA.Common.Application/Users/), the preference/erasure domain contracts (IErasableUser,IPasswordChangeableUser,IUserPreferences) in G08 (MMCA.Common.Domain/Auth/),OwnedByUserSpecification<TEntity, TIdentifierType>in G03 (MMCA.Common.Domain/Specifications/OwnedByUserSpecification.cs:20), andUserAccountAuthControllerBasein G12. The ADC Identity originals (ChangePreferencesRequest,GetUserPreferencesQuery,UserPreferencesResponse, the non-genericSoftDeletedUserValidator) were deleted from G23, and the ConferenceOwnEventQuestionAnswerSpecification/OwnSessionQuestionAnswerSpecificationpair was replaced by the generic specification (G18).- Hosting extraction (G16/G24/G27-device). The four per-service
KestrelConfigurationclasses were replaced byKestrelEndpointExtensions+KestrelListenerSpec(MMCA.Common.Aspire/Kestrel/), self-warmup gained the sharedSelfHttpWarmupTaskBase(MMCA.Common.Aspire/Warmup/), andMauiTokenStorageServicemoved fromMMCA.ADC.UItoMMCA.Common.UI.Maui(joined by the newMainPageBase).- New framework surface. G07 +9 (the four value converters under
MMCA.Common.Infrastructure/Persistence/Conversions/,EntityTypeBuilderExtensions/IndexBuilderExtensions,IdentityModuleDbSeederBase<TUser>+SeedAccount,SoftDeleteFilterSql); G04 +1 (OutboxMetrics); G12 +2 (IdempotencyMetrics,UserAccountAuthControllerBase); G08 +7; G14 +12; G16 +4; G18 +2 (SessionizeSyncWarnings,SessionScoringWorkItem); G20 -2 (PublicLookupReaderremoved, Kestrel config extracted); G25 +99 net rolled-up test types plus new individually-sectioned testing bases (CrossServiceFixtureBase,DependencyInjectionAssert,TestPolling,ModuleConformanceTestsBase<TModule>,WebVitalsBudget).- The 21st cycle is genuine and test-only.
RecordingDistributedLockand its nestedHandle(MMCA.ADC.Conference.Infrastructure.Tests/Services/SessionScoringProcessorTests.cs:197and:235) reference each other; both are rolled-up test doubles, so no chapter section is affected. Edge resolution: 9,964 namespace-visible (~97%), 358 globally-unique fallback (348 to 358), 28 dropped ambiguous (unchanged).- Method note: this pass re-authored to the new rosters, then deduplicated. 53 approved units were re-authored from current source (15 overviews, 37 sections units, the G25 rollup), and the G18 repack fallout was closed by re-authoring all 18 of its sections units so parts and unit boundaries are back in sync there. The re-author left 28 stale duplicate section copies behind in six not-re-authored parts; each was deleted in favor of the freshly authored owner copy, which emptied three part files entirely (
group-07-...-p07,group-26-...-p09,group-27-...-p07, removed). A duplicate scan against the prior corpus now reports only legitimate same-name families (e.g. the five per-assembly IdentityDependencyInjectionclasses, the fifth being the newly addedMMCA.ADC.Identity.API/DependencyInjection.cs:18).- Spot-checks. All 15 re-authored overviews plus the G25 rollup were adversarially spot-checked: 14 CONFIRMED, one DRIFTED on a citation nit (the G10 overview called all four notification defaults no-ops;
IEmailSender's default is the realSmtpEmailSender,MMCA.Common.Infrastructure/DependencyInjection.cs:234, andINotificationRecipientProvider's no-op default lives atMMCA.Common.Application/Notifications/DependencyInjection.cs:67); the sentence was corrected in place and re-verified against source.
Regeneration note (re-verified against current source, v1.152.0 full drift sweep). Regenerated at framework v1.152.0 (MMCA.Common
3ba8d13; MMCA.ADCe129c82f; both clean;FACTS.mdis the source of truth for the version and package figures). Net change since the v1.142.0 pass: +400 distinct nodes (2,864 to 3,264), individually-sectioned 1,598 to 1,804, rolled-up 1,266 to 1,460, cycles 21 to 26,###sections 1,388 to 1,740.classify.ps1: 0 unmapped, no new functional group needed, the chapter count stays at 27.verify.ps1: 0 missing, rubric 34/34. One honest caveat up front: this delta spans releases v1.143.0 through v1.152.0 (roughly ten releases with no intervening onboarding sweep), so per-type attribution below is derived from the mechanical inventory diff, not from per-release narration.
- The dominant application cluster is the Engagement build-out (G22 +100, 78 to 178). The shipped conference-day features: the QR badge check-in surface (organizer scanning, manual fallback, attendee self-service from printed room/sponsor codes, attendance rollup), the points economy (an append-only ledger plus the opt-in public leaderboard with GDPR erasure), and their use cases, persistence, API and UI. The chapter's fourteen sections units plus overview were re-authored to the new roster and the
00-index.mdconcern line now names all four capability families.- The dominant framework cluster is the enterprise wave (v1.150.0, ADRs 073-078; +61 across G02/G05/G07/G08/G09/G12/G14/G16). Audit trail (
AuditTrailEntry,AuditTrailSaveChangesInterceptor,MMCA.Common.Infrastructure/Persistence/AuditTrail/), the scheduler (IScheduledJob,ScheduledJobRunner,SchedulerMetrics), multi-tenancy (TenantContext,TenantSaveChangesInterceptor,TenantResolutionMiddleware,TenancySettings), hybrid caching (HybridCacheService,RedisPrefixScanner), and the GDPR data-export generalization (ExportUserDataHandlerBase<TUser, TQuery>,DataExportControllerBase<TQuery>,IUserDataExportSection,CsvWriter).- The one removed type is a move-to-Common, not a deletion.
UserDataExportDTOleftMMCA.ADC.Identity.Shared.Usersand reappears in G08 underMMCA.Common.Shared.PrivacyalongsideUserDataExportSectionDTOandPrivacyFeatures; the ADC Identity chapter (G24) sections were updated accordingly.- Conference additions (+44 across G17-G21): sponsors (the
AddSponsorsmigration family and home-page sponsor rail), the per-event organizer contact email, the room-name unique index, and decision-support/session additions; plus +194 rolled-up test types in the testing chapter (G25 classifier id, chapter 27) covering all of the above.- Graph and cycle movement. Edge resolution: 11,706 namespace-visible (~96%), 481 globally-unique fallback (358 to 481), 28 dropped ambiguous (unchanged). Cycles 21 to 26; three of the 26 are now identical-name fallback artifacts rather than real dependencies (the
SelfHttpWarmupTaskservice pair, plus the new test pairsPriorityatMMCA.Common.Infrastructure.Tests/Persistence/Conversions/EnumerationValueConverterTests.cs:89/MMCA.Common.Shared.Tests/ValueObjects/EnumerationTests.cs:122andGateTestContextatMMCA.Common.Infrastructure.Tests/Persistence/AuditTrail/AuditTrailModelGateTests.cs:76/MMCA.Common.Infrastructure.Tests/Scheduling/SchedulerModelGateTests.cs:71). The largest new genuine cycle is the eight-member G07 interceptor SCC aroundApplicationDbContext(now includingAuditTrailSaveChangesInterceptorandTenantSaveChangesInterceptor).- Method note: this pass re-authored 118 units, then deduplicated against unit rosters. The approved scope was 102 units (83 sections units mapped from the added/moved type sets, 17 overviews, the testing rollup); the G18 repack fallout then required its remaining 11 sections units (
plan.ps1regrew the chapter to 19 sections units), and five newly-packed units with no prior part (G07 p02/p11, G14 p06, G21 p07, testing p07) were authored to close the packing. Deduplication removed 71 stale duplicate section copies across 11 not-re-authored parts, emptying five part files (removed). 35 sole-copy sections remain in parts whose new roster no longer lists them (placement drift, coverage intact perverify.ps1); they reconcile at the next repack re-author.- Spot-checks. All 16 authored overview/rollup parts were adversarially spot-checked: 15 CONFIRMED, one DRIFTED on a citation nit (the G02 overview cited the PII-erasure fitness rule at
ArchitectureRules.Governance.cs:50, a shared helper; the rule methodEntitiesWithPiiImplementAnonymizablelives atArchitectureRules.Governance.cs:11); the citation was corrected in place, alongside one cosmetic line-count fix in the G05 overview flagged by an otherwise-CONFIRMED check.
Regeneration note (re-verified against current source, devops-scope refresh, 2026-08-14). A scoped refresh of the five hand-authored DevOps chapters (outside the type pipeline; last refreshed 2026-08-02) against MMCA.Common
3ba8d13and MMCA.ADCe129c82f. Each chapter was drift-checked read-only first, then re-authored targeted-sections-only; all five verdicts were TARGETED, no full re-author and no node-count change (the type inventory was already current from the v1.152.0 sweep).
- devops-cicd (3 fixes): the integration-tests gate now guards roughly 390
[Fact]methods (was 330), the three freshness jobs grant two read privileges,actions: readpluscontents: read(deploy.yml:553-555/610-612/667-669), and the Testcontainers-tier description cite moved tocross-service-tests.yml:6-10.- devops-iac: new coverage for the post-08-02 pure-insertion bicep additions: the daily ACR purge task (
foundation.bicep:83-108, a third foundation resource), the twoTelemetry__Disable*Metricsenv vars on all six apps (main.bicep:231-238), the private DataProtection key-ring container (main.bicep:821-827) with Identity/UI wiring (:1134-1135,:1780-1781) and the explicitly-not-implemented Key Vault Crypto User follow-up, theKeyVault__Uriconfig source on five apps (Gateway excluded,:937-939), and theScheduler__PollingIntervalSeconds/Outbox__DeadLetterRetentionDayssettings; everymain.bicep/foundation.bicepcite was re-derived (insertion offsets of +15 to +101).- devops-aspire: the Gateway's three forwarder configs with explicit activity timeouts and the two new
Gateway:*knobs (Gateway/Program.cs:75-110), the eighthMMCA.Common.Aspire.HostingextensionWithE2eRegistrationThrottleLift(Extensions.cs:176-191, replacing the inline AppHost throttle lift), a new subsection forAddCommonKeyVaultConfiguration/AddCommonDataProtection/AddScheduledJobs(each no-ops when its config key is absent), the four-meter OTel list, and a full AppHost/Extensions cite sweep.- devops-runbooks: the restore-drill narrative was inverted to match source: the DR doc now documents three automated paths with the weekly cron as the enforcing one, and a six-row drill ledger, latest 2026-08-10 (
DISASTER-RECOVERY.md:120-175); the stale OPERATIONS.md 3-day-window caution was dropped (fixed at source in ADC1dd53f8d); roughly 20main.bicepcites re-anchored.- devops-testing: all 45 per-project rows re-derived from the regenerated inventory (methodology unchanged: distinct inventory nodes), roll-ups now 875 Common + 658 ADC = 1,533 types (was 1,246); FACTS-owned fitness numbers moved to 100 methods / 32 bases / 78 executed by Common's own build (
FACTS.md:44,47-48), withModuleConformanceTestsBaseand its Common-repo test class newly covered; the shipped-package roll-up is now 95 (was 89).
Regeneration note (re-verified against current source, 2026-08-18 full drift sweep). Regenerated with MMCA.Common at
0b19b56and MMCA.ADC at018ccc50(both clean;FACTS.mdstays the source of truth for version and package figures). Net change since the v1.152.0 pass: +201 distinct nodes (3,264 to 3,465), 0 removed, individually-sectioned 1,804 to 1,890, rolled-up 1,460 to 1,575,###sections 1,740 to 1,834, cycles 26 to 30 (four new deliberate fitness-test/map pairs:CancellationTokenFitnessTests+CancellationTestMap,IdempotencyFitnessTests+IdempotencyTestMap,NamespaceCycleFitnessTests+CycleTestMap,EventScopeFitnessTests+FakeConsumerMap; the three name-collision artifact pairs are unchanged). Edge resolution moved to 12,293 namespace-visible (~96%), 493 globally-unique fallback, 29 dropped ambiguous.classify.ps1: 0 unmapped;verify.ps1: 0 missing, rubric 34/34.
- Governance event, two classifier rules approved 2026-08-18 (no new group needed).
MMCA.Common.Domain.IntegrationEventsmaps to G04, created for the first framework-shipped concrete integration event,OutputCacheEvictionRequested(MMCA.Common.Domain/IntegrationEvents/OutputCacheEvictionRequested.cs:23, a frozen-contract candidate per its ADR-010 versioning remarks); andMMCA.ADC.Gatewaymaps to G16, created for the first first-party type in the Gateway host,Http2ForwardingConfigFilter(MMCA.ADC.Gateway/Http2ForwardingConfigFilter.cs:23, theForwardHttp2h2c rollback switch), placed with the gateway edge teaching in group-16. Both were unmapped refusals; neither is a cohesive new subsystem, so the chapter count stays at 27.- Framework edge hardening dominates the Common delta (G12 +11, G16 +9). Optimistic HTTP concurrency (
ConcurrencyETag,SupportsIfMatchAttribute), Redis fixed-window rate limiting (RedisFixedWindowRateLimiterand settings/lease/algorithm), event-driven output-cache eviction (theOutputCacheEviction*handler/extensions/metrics inMMCA.Common.API/Caching/), the idempotency opt-outNonIdempotentAttribute, and the gateway hardening family (DownstreamServiceHealthCheck,GatewayCorrelationExtensions/Middleware,GatewayDownstreamRegistry,GatewayHealthCheckExtensions,GatewayRateLimitingExtensions/SettingsinMMCA.Common.Aspire/Gateway/).- The CQRS pipeline grew two decorator families (G05 +7):
AuthorizationCommandDecorator/AuthorizationQueryDecorator(withIRequiresPermission),TimeoutCommandDecorator/TimeoutQueryDecorator(withIHasTimeout), and theCqrsMetricsmeter they record into.- The specification stack relocated Application to Domain (G03 +7, G07 +3, G01 +3).
QuerySpecification<T,TId>,OrderExpression,SpecificationComposer,SpecificationExtensionsandParameterReplacernow sit inMMCA.Common.Domain/Specifications/as their own files (ParameterReplacermoved out ofCrossSourceSpecification.cs),SpecificationEvaluatorhas its own file under Infrastructure, and keyset pagination arrived end to end:KeysetPageRequest/KeysetCollectionResult<T>/KeysetCursor(MMCA.Common.Shared/Abstractions/KeysetPagination.cs) plusKeysetQueryBuilder(Infrastructure).- Messaging resilience (G04 +2, G14 +1, G07 +1):
FaultIntegrationEventConsumer<TEvent>,InboxDisabledWarningService,BrokerMetricsandBrokerResilienceDefaults.- ADC additions: the
SessionScoringSweepJobbackground job withSessionScoreStamp/SessionScoringCandidate(G19 +3),UserSessionBookmarkCacheEvictionHandler(G22 +1), and notification DTO projection (PushNotificationDTOProjection/Projector, G10 +2).- The device-capability chapter flipped its adoption story: 13
Maui*capability services inMMCA.Common.UI.Mauiare now fully implemented (they were inert fallbacks at the last pass), withServerTokenStorageService/WebFormFactorweb counterparts; the chapter overview and four section parts were re-authored to the implemented reality.- Testing growth (G25 +152 nodes): roughly 250 new per-
[Fact]classes net across ten test assemblies, rolled up per the standing exception, plus four new individually-sectioned reusable bases (CancellationTokenConventionTestsBase,IdempotencyConventionTestsBase,NamespaceCycleTestsBase,ProtoContractTestsBase) and theProtoScope/ProtoScopeKindmodel.- Authoring pass and verification: 24 units re-authored across 12 chapters. Adversarial spot-checks returned CONFIRMED on all sampled units after one repair: the G16 overview claimed every
GatewayRateLimitingSettingsproperty carries[Range], butBypassPathPrefixes(MMCA.Common.Aspire/Gateway/GatewayRateLimitingSettings.cs:74) does not; the prose now says the three numeric properties. The v1.135.0 backlog of sections with corrected citations but unverified bodies remains open outside the parts re-authored here.
Regeneration note (re-verified against current source, 2026-08-23 full drift sweep). Regenerated at MMCA.Common
0110aee+ MMCA.ADC96f0919a(both clean; prior pass0b19b56/018ccc50). Net change: +203 distinct nodes (3,465 to 3,668), 0 removed, 0 regrouped;classify.ps1reports 0 unmapped and the per-group counts sum to 3,668. Individually-sectioned types 1,890 to 2,001, roll-ups 1,575 to 1,667,###sections 1,834 to 1,910, cycles 30 to 34.
- Password-reset vertical (G08 +8, G12 +5, G14 +2, ADR-091): the cache-backed forgot/reset-password flow:
ForgotPasswordHandlerBase<TUser, TCommand>(MMCA.Common.Application/Users/UseCases/ForgotPassword/ForgotPasswordHandlerBase.cs:35) and its Reset sibling,PasswordResetTokenService(MMCA.Common.Infrastructure/Auth/PasswordResetTokenService.cs:26),PasswordResetSettings(MMCA.Common.Application/Auth/PasswordResetSettings.cs:10), andPasswordResetAuthControllerBase<TForgotPasswordCommand, TResetPasswordCommand>(MMCA.Common.API/Controllers/PasswordResetAuthControllerBase.cs:43).- Event upcasting (G03 +1, G05 +2, ADR-090):
IEventUpcaster<in TSource, out TTarget>andEventUpcasterRegistry(MMCA.Common.Application/Services/EventUpcasterRegistry.cs:30).- ADC Conference application (G18 +33): the session-selection decision-support vertical (
GetContentSimilarity,GetSessionSelectionDashboard,GetSpeakerSessionOverlap,GetCategoryDistributionunderMMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/, incl.IAiScoringServiceat.../ScoreEventSessions/IAiScoringService.cs:40), calendar export (ExportEventCalendarQuery/ExportSessionCalendarQuery), and new sponsor/category/question update use-cases; G17 +4, G19 +1, G20 +1, G21 +9, G23/Identity +5, G26/Live +1, G15 +2, G07 +2 ride the same waves.- Testing growth (G25 +127): per-
[Fact]classes rolled up per the standing exception; the individually-sectioned reusable base set in group-27 now counts 240 types.- Level-repack fallout (the reason 17 extra parts were re-authored):
plan.ps1's repack moved 174 existing sections across unit boundaries beyond the delta-touched units (G08, G15, G18 p03/p06-p16, G19, G21, G22). A deterministic heading-vs-membership scan overparts/confirms 0 stale sections remain; the residual duplicate headings in group-23/group-24 are distinct same-name types (twoOptionStatecomponent states;UserDeleteddomain event vs integration event), not leftovers.- Cycles 30 to 34: four new SCCs, each wholly inside one group: two in G12 (
InsecureJwtMetadataWarningStartupFilter/WebApplicationBuilderExtensionsandMiddlewarePipelineBuilder/WebApplicationExtensions) and two test-only in G25 (AnonymousEndpointTestsBaseTests/DriftedTests/StaleAllowListTests/ConformantTests, andEventUpcasterFitnessTests/UpcasterTestMap).- Outside the type pipeline:
devops-iacwas re-authored against the 2026-08-22 FinOps second-stage Bicep changes (MMCA.ADC/infra/main.bicep,foundation.bicep; ADC PRs #135/#136);CONCEPT-MAPS.mdneeded no change (27 groups, 15 packages unchanged); the00-primer.mdADR table gained rows 090-096 from the canonical index.- Authoring pass and verification: 73 parts re-authored across 16 group chapters (52 approved units + the 17 repack-fallout units + 3 G18 units +
devops-iac), authored against real source withpath:linecitations.verify.ps1: 0 missing, rubric 34/34. All adversarial spot-checks (overviews of G03/G05/G07/G08/G12, G08-p02, G15-p04) returned CONFIRMED.
Regeneration note (re-verified against current source, 2026-09-02 full drift sweep). Regenerated at MMCA.Common
5f4d9e2+ MMCA.ADC2b77dc07(both clean; prior pass0110aee/96f0919a, ten Common releases v1.161 to v1.181 in between). Net change: +537 distinct nodes (3,668 to 4,205), 593 added and 56 removed by name, 813 relocated (same type, newfile:line), 0 regrouped;classify.ps1reports 0 unmapped and the per-group counts sum to 4,205. Individually-sectioned types 2,001 to 2,273, roll-ups 1,667 to 1,932,###sections 1,910 to 2,188, cycles 34 to 36, edges 15,334 by namespace / 586 by unique-name fallback / 38 dropped.
- Governance event, classifier extension (G16 +14): the new
MMCA.Common.Gatewaypackage (Source/Hosting/MMCA.Common.Gateway/, v1.163 hardening wave) fit no rule andclassify.ps1refused by design. Approved 2026-09-02: one prefix ruleMMCA.Common.Gatewayto G16, the same home the 2026-08-18 decision gave the ADC gateway host types (that namespace now holds 0 types, itsHttp2ForwardingConfigFilterhaving moved into the package). No new group. Members:GatewaySettingsand its six nested settings records (MMCA.Common.Gateway/GatewaySettings.cs:12),GatewayReverseProxyExtensions(GatewayReverseProxyExtensions.cs:26),ForwardedHeadersExtensions(ForwardedHeadersExtensions.cs:23), the twoConfiguration/*ConfigFiltertypes,RateLimiting/GatewayRoutePolicyExtensions.cs:27andTransforms/GatewayTraceHeaderTransformProvider.cs:18.- Multi-device refresh sessions (G08 +11, G07 +3, ADR-097):
RefreshSession(MMCA.Common.Domain/Auth/RefreshSession.cs:31),IRefreshSessionStore,SessionStampingTokenService,RefreshSessionSettings,EFRefreshSessionStoreandRefreshSessionCleanupService;AuthorizationPoliciesremoved. PBKDF2-only hashing (ADR-102) is a body change toPasswordHasher, not a type change.- Generic write side (G05 +19, G18 +26/-8, G12 +4, ADR-099):
UpdateEntityCommand<TEntity, TUpdateRequest, TIdentifierType>,IEntityUpdateApplier<...>,MutateEntityHandlerCore<...>, the child-entity handler bases andCqrsContractInspector(MMCA.Common.Application/UseCases/),CrudEntityControllerBase<...>in the API; in ADC the hand-writtenUpdate{Activity,ConferenceCategory,Sponsor}Command/Handlerpairs are gone, replaced by per-entity*UpdateApplier+*FieldRules<T>families.- Outbox from messaging mode (G04 +4, G14 +6, ADR-100):
OutboxDisabledNoticeService,EventNameResolver,ScopedIntegrationEventHandlerBase<T>,DecoratorPipelineSeal,ServiceBusEmulatorSupport; theI*Settingsinterfaces (IApplicationSettings,IConnectionStringSettings,IJwtSettings,ISmtpSettings,IPushNotificationSettings) and theDefaultEngineDbContextFactoriesfamily removed.- Move-to-Common wave (G15 +27, G16 +12, G27 +3):
IPublicLinkBuilder,NavigationPublicLinkBuilder,InfiniteScrollSentinel,ListPageActions,MauiPublicLinkBuilderandConcurrencyETag(MMCA.Common.Shared/Http/ConcurrencyETag.cs:24) left their ADC chapters for the Common ones;IUiReadCache/UiReadCache, the toast/dialog services andModelValidationare new in G15; the h2c health-check family,BrokerSelectionandServiceBusEmulatorResourceare new in G16.- ADC Conference UI (G21 +44): per-entity
*CreateModel/*EditModel/*FormModelfamilies,EventFilteredListPageBase<TDto>,DetailPageBase,ScorePollHost; Engagement/Live/Identity/Host ride the same waves (+4/+4/+3/+1).- Testing growth (G25 +383): per-
[Fact]classes rolled up per the standing exception; the individually-sectioned base set in group-27 gainedMmcaGatewayHardeningTestsBase<TEntryPoint>,ServiceBusEmulatorFixtureBase,DataResidencyTestsBase(ADR-105) andBunitComponentTestBase(ADR-103).- Outside the type pipeline: all five
devops-*chapters were re-authored (every cited workflow, Bicep and AppHost file had newer commits: ADCdeploy.yml7 commits incl. the revision-activation gate, Commonci.yml/release.yml08-31,main.bicep8 commits);devops-cicddropped the removedcutover-per-service-dbs.ymland, per the approved coverage-gap fix, gained a section onclaude.yml/claude-code-review.yml(both repos) and ADCmaui-audit.yml.CONCEPT-MAPS.mdmoved from fifteen to the FACTS-owned 17 packages. The00-primer.mdADR table gained rows 097-106, struck 032 (by 102) and 050 (by 097), and amended 003/026/034.- Authoring pass and verification: 184 of 196 units re-authored (112 in a first wave cut off by a spend limit, 72 in the resumed wave; 11 unchanged units reused as-is) plus the five devops chapters and the concept maps, all against real source with
path:linecitations.verify.ps1: 0 missing, rubric 34/34. Adversarial spot-checks: G18-p19 CONFIRMED; G20-p00 DRIFTED on fourProgram.cswalkthrough lines off by one to two (corrected to:163,:166-168,:273-277,:280); G18-p18 DRIFTED on an inventedCheckboxquestion type (corrected toText;QuestionInvariants.cs:118-129switches only on Rating, Text and Email).
Regeneration note (re-verified against current source, 2026-09-05 full drift sweep). Regenerated at MMCA.Common
f994eb1+ MMCA.ADC977a9776(both clean; prior pass5f4d9e2/2b77dc07, five Common releases in between: v1.182.0 to v1.186.0). Net change: +46 distinct nodes (4,211 to 4,257), 68 added and 22 removed by name, 418 line-shifted and 1,278 relocated (same type, new namespace and/or path with no diff hunk in its span), 111 body-changed, 43 regrouped;classify.ps1reports 0 unmapped and the per-group counts sum to 4,257. Individually-sectioned types 2,273 to 2,286, roll-ups 1,932 to 1,971,###sections 2,188 to 2,204, cycles 36 to 37, edges 15,415 by namespace / 589 by unique-name fallback / 42 dropped.
- Per-group movement (25 of 27 groups moved; G01 and G06 are unchanged):
- G02 Domain Building Blocks (36):
Moneybody (Money.cs:21, a doc-comment cref only); 10 relocated by the v1.184.0 namespace split.- G03 Querying (38), G05 CQRS pipeline (57), G11 Navigation (12), G12 API hosting (81), G20 Conference API/gRPC (44), G21 Conference UI (146, 126 relocated) and G27 Device capability layer (99, 83 relocated): citation-only drift from the namespace split, fixed by
fixcites.ps1with no author.- G04 Events + Outbox (37):
IntegrationEventConsumerExtensionsbody (IntegrationEventConsumerExtensions.cs:12);OutboxSettingsregrouped in from G14.- G07 Persistence & EF Core (122):
DomainEventSaveChangesInterceptorbody (DomainEventSaveChangesInterceptor.cs:46); the 11 persistence/audit-trail/connection-string/data-source/tenancy settings types regrouped in from G14; 13 host-level services (file storage, image processing, native push,TenantContext, the upcasting/fault consumers,PeriodicBackgroundService) regrouped out to G14.- G08 Auth (90):
JwtSettings,JwksSettings,JwtSigningAlgorithmregrouped in from G14. G09 Caching (9):CacheSettingsregrouped in from G14.- G10 Notifications (57):
NotificationHubbody (NotificationHub.cs:17). G13 gRPC contracts (6):DependencyInjectionbody (DependencyInjection.cs:25).- G14 Module system (69):
DeleteUserHandlerBase<TUser, TCommand>(DeleteUserHandlerBase.cs:58), twoDependencyInjectionroots (:27,:53) andUserUseCaseLog(UserUseCaseLog.cs:11) body-changed; 16 settings types out to G04/G07/G08/G09, 13 host-level services in from G07 (net 72 to 69).- G15 Common UI (117):
AuthenticatedServiceBase(AuthenticatedServiceBase.cs:15; namespace nowMMCA.Common.UI.Services.Api, tokens via...Services.Auth.Tokens) andResultUiExtensions(ResultUiExtensions.cs:63) body-changed.- G16 Aspire (60): added
HealthEndpointPaths(HealthEndpointPaths.cs:8),ProbeTelemetryFilter(ProbeTelemetryFilter.cs:27) andProbeTelemetryFilterProcessor(ProbeTelemetryFilterProcessor.cs:20), the probe-telemetry suppression;DownstreamServiceHealthCheck(:39) andExtensions(Extensions.cs:29) body-changed.- G17 Conference domain (99):
Event(Event.cs:24),SessionAiScore(SessionAiScore.cs:13) andSessionAiScoreDTO(SessionAiScoreDTO.cs:6) body-changed (model + prompt versioning persisted per score, ADR-111).- G18 Conference application (303):
IAiScoringService(IAiScoringService.cs:6, now carriesModelId+PromptVersion),ScoreEventSessionsHandler(:18),GetSessionSelectionDashboardHandler(:16) andEventDTOMapper(EventDTOMapper.cs:15) body-changed.- G19 Conference infrastructure (37): added
AnthropicOutputConfig(AnthropicScoringService.cs:452),AnthropicJsonSchemaFormat(:458),AnthropicUsage(:488) andScoringInstruments(:326) (schema-constrained output + token metering);AnthropicScoringService(:19) and its request/response records,EventConfiguration(:12) andSessionAiScoreConfiguration(:11) body-changed.- G22 Engagement module (193) / G26 Engagement live layer (85): 14 types regrouped from the live layer into the module chapter (the
SessionLive/LivePoll/SessionQuestion/LiveEventUI services, theSessionLookupServicefamily and the three live-poll EF configurations).- G23 Identity module (90):
DeleteUserHandlerbody (DeleteUserHandler.cs:28). G24 ADC host (17):AppDelegate(AppDelegate.cs:20) andMauiProgram(MauiProgram.cs:37) body-changed.- G25 Testing (2,315): +61 / -22 by name (nested fakes and specs re-homed per test class, e.g.
BetaSpecification,FakeEntity,DriftedTests; the new 11-typeMMCA.ADC.Conference.Scoring.Evaluation.Testsproject withGoldenReplayTests,PromptContractTests,LiveJudgeTests; per-repoFolderWidthTestssubclasses, ADR-109; the probe-telemetry tests), 80 body-changed; the per-project rollup counts moved for five projects (Common Infrastructure 380 to 403, Aspire 41 to 44, Shared 44 to 45, ADC Conference Infrastructure 14 to 15, Scoring.Evaluation 0 to 11).- Handled mechanically (no re-authoring): 6,742 citation remaps over 193 part files (209 flagged for an author: 119 inside a modified range, 80 ambiguous basenames, 10 in deleted files); 624 section blockquotes rewritten for the relocated types that carry their own section (the other relocated types are rolled-up test classes with no blockquote); 867 section repacks (57 flagged); after authoring, 170 cross-links to the 43 regrouped types retargeted by script, one stray leftover part (live-layer p08, three sections already moved) removed, and a duplicate rollup narrative that the unit split had left in testing p08 removed.
- Authoring pass: 66 units re-authored (9 overview, 1 rollup, 56 sections) across 19 groups plus 4 devops chapters, all against real source with
path:linecitations; 1,154 tool calls in total against 15,266 on the 2026-09-02 sweep. Adversarial spot-checks: G04-p00, G07-p00, G08-p00, G09-p00, G14-p00, G16-p00 all CONFIRMED.- Outside the type pipeline: 4 of 5
devops-*chapters refreshed, each because a file it cites has newer commits than the chapter:devops-cicd,devops-testinganddevops-aspirefor MMCA.ADCdeploy.yml4598c679 (2026-09-05: AI scoring evaluation gate TD-22,scoringpath filter, cross-browser freshness gate),devops-iacfor MMCA.ADCinfra/main.bicep4598c679 (AI-scoring token-ceiling alert) and MMCA.Commonsamples/deployment/main.bicepdd0b6a9 (SQL connection string as a Key Vaultsql-connsecretRef). Thedevops-testingper-project test-type table was reconciled to this scan (Common 1,420, ADC 770, combined 2,190).
- Coverage gap logged as an exception:
MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Fixtures/observability-main.bicepis an architecture-test fixture (input to the observability-convention fitness base), not deployed infrastructure, so no devops chapter covers it.- CONCEPT-MAPS.md: 289 mechanical checks, 0 mismatches; no relationship-level edit, because none of the 43 regrouped types is named in a diagram.
- Verification:
verify.ps1: 0 missing, rubric 34/34.- Governance events: no new group. Classifier change accepted by the user on 2026-09-05: 36 dead
Ooverrides inclassify.ps1(keyed on pre-split namespaces) were re-keyed to the post-split namespaces, which produced the 43 regroups above (G14 settings to G07/G08/G09/G04; G07 host-level services to G14; G26 live UI services to G22).- Same-day follow-up pass (2026-09-05, second PR):
- Rubric v2 retag (ADR-110): the 297 section-16 Maintainability tags became section 15 Best Practices & Code Quality (289) or section 34 Architecture Governance & Documentation (8, where the sentence is about coupling, tech debt or shotgun surgery); the 137 section-10 Cross-Cutting tags moved to the category that absorbed their criterion, chosen by the tag's own sentence (12 Performance & Scalability 49, 29 Resilience 27, 17 DevOps & Deployment 20, 6 CQRS & Event-Driven 19, 9 API & Contract Design 12, 13 Observability 10); 35 outbox/bus/consumer sections in groups 04 and 14 gained
[Rubric §10, Messaging & Integration Architecture]and 25 AI session-scoring sections gained[Rubric §16, AI-Native Application Architecture]; the primer's Part A list, the concept-map rubric diagram, the matrix below and the authoring spec now carry the v2 names.verify.ps1still reports 34/34.- devops-iac bicep cites: an evidence-verifier sample (44 of 221
main.bicepcites) found every single-line pinpoint cite in the six-app section landing one line early on the preceding comment; 61 cites were corrected (26 comment-landing singles, 27 shorthand:Nnumbers, 8 verifier-specific items incl. one wrong parameter mapping), all against the committed f2623329.- Flagged citations: of the 209 flagged at the gate, 100 had already been fixed by the sweep's authors, 6 were resolved by the new
fixcites.ps1 -Residualtext-match pass, and the remaining 92 went to 36 per-part author agents (one part each, 15-call budget): about a third were genuinely stale and were corrected (line shifts after the namespace split, a file moved fromServices/toSessions/Scoring/, the soft-deleted-user marker write that moved from ADC'sDeleteUserHandlerintoDeleteUserHandlerBase.cs:142-144), the rest were baseline-absent false positives confirmed correct against today's source; a handful of sentences also had their pre-split namespace text corrected.- Same-name headings: the renderer already dedups repeated heading slugs (
dependencyinjection,dependencyinjection-1, ...) in document order; the newfixlinks.ps1computes those effective anchors from the assembled part order, records them in_typemap.tsv(now one row per type instance with aNamespacecolumn), and retargets cross-links by namespace proximity: 68 links rewritten, 33 typemap anchors suffixed, 76 confirmed already on the right instance, 58 left on the first instance (26 from overview parts, which carry no namespace, and 32 equidistant ties).- Pipeline additions (all dry-run by default):
fixcites.ps1 -Residual,fixlinks.ps1,repack.ps1stray-part deletion and orphan-narrative cleanup,devops-staleness.ps1test-count diff (_testcounts.json) feeding the devops-testing author,plan.ps1typemapNamespacecolumn.
Regeneration note (re-verified against current source, 2026-09-15 full drift sweep). Regenerated at MMCA.Common
3a98862+ MMCA.ADCbe87e1fc(both clean; prior passf994eb1/977a9776, sixteen Common releases in between: v1.187.0 to v1.202.0). Net change: +555 distinct nodes (4,263 to 4,818), 595 added and 40 removed by name, 100 relocated (same type, newfile:line), 367 body-only, 0 regrouped;classify.ps1reports 0 unmapped and the per-group counts sum to 4,818. Individually-sectioned types 2,286 to 2,568, roll-ups 1,971 to 2,250,###sections 2,204 to 2,482, cycles 37 to 44, edges 17,598 by namespace / 724 by unique-name fallback / 101 dropped.
- Per-group movement (24 of 28 groups moved; G01, G06, G11 and G13 are unchanged):
- G02 Domain Building Blocks (36):
AuditableAggregateRootEntity<TIdentifierType>body (AuditableAggregateRootEntity.cs:13, a doc-comment change; the author verified no section edit was needed).- G03 Querying (42): added
QueryTagScopeand its nestedAmbientScope(QueryTagScope.cs:20,:61) plusQueryFieldContract(QueryFieldContract.cs:34), the v1.192.0 query tags, andStronglyTypedIdFilterStrategy<TSelf, TValue>(StronglyTypedIdFilterStrategy.cs:24, ADR-115);EntityQueryService(:32),EntityQueryPipeline,EntityQueryParameters,QueryFieldServiceandQueryFilterServicebody-changed.- G04 Events + Outbox (38): added
OutboxOrigin(OutboxOrigin.cs:29, the v1.195.0 outbox-origin column);BrokerEventBus(:31),BrokerMessageBus(:43),InProcessEventBus,IntegrationEventConsumer<TEvent>(:38),OutboxMessageandOutboxProcessor(:56) body-changed.- G05 CQRS pipeline (61): added
AuthorizationGate(AuthorizationGate.cs:19, the v1.201.0 permission-claim gate),IRequiresMfa(IRequiresMfa.cs:28, ADR-116),ISharedQueryCache(ISharedQueryCache.cs:21) andUserCacheKey(UserCacheKey.cs:26); the authorization, caching and logging decorators,IQueryCacheableandMutateEntityHandlerCore(MutateEntityHandlerBase.cs:52) body-changed.- G07 Persistence & EF Core (161): +40 / -1 by name. The internal-command job queue (
InternalCommandProcessor.cs:47,InternalCommandScheduler.cs:39,InternalCommandDispatcher.cs:21, cleanup, metrics, administration and settings, ADR-114); the PostgreSQL engine (PostgreSQLDbContext.cs:23,EntityTypeConfigurationPostgreSQL.cs:22, ADR-113); the strongly typed id converter, comparer and model configuration (StronglyTypedIdValueConverter.cs:28,:56,:80,StronglyTypedIdModelConfiguration.cs:21, ADR-115);RestrictDeleteByDefaultConvention(RestrictDeleteByDefaultConvention.cs:41, ADR-119); the stored permission grants (EFPermissionGrantStore.cs:34,PermissionGrantCache.cs:35,PermissionGrantRefreshService.cs:31,PermissionGrantModelGate.cs:19, ADR-116);EFRawSqlQueryExecutor(EFRawSqlQueryExecutor.cs:22);SensitiveDataLoggingGate(SensitiveDataLoggingGate.cs:24, ADR-122); the upload guardsDocumentContentSniffer,FileUploadOptionsandBlobNames(DocumentContentSniffer.cs:49, v1.199.0);EfCoreConcurrencyConflictDetector,UtcDateTimeConverter,QueryTags.ValReturn<T>removed. 28 body-changed, among themApplicationDbContext(:46),DbContextFactory(:46),EFRepository(:23),KeysetQueryBuilder(:22) andDesignTimeDbContextOptions(:11).- G08 Auth (152): +63 / -1 by name. Two-factor contracts (
ITwoFactorService.cs:16,ITwoFactorStore.cs:24,ITwoFactorAuthenticator.cs:24,RecoveryCodeSet), email confirmation (EmailConfirmationTokenService.cs:35, its requests, validators, errors and settings), stored permission grants and role administration (PermissionGrant.cs:24,IPermissionGrantStore.cs:16,IPermissionCatalog.cs:24,IRoleAdministrationService.cs:29,StoredPermissionRoleAdministrationService.cs:45,LayeredPermissionRegistry.cs:30,AdministrationPermissions.cs:15), user administration contracts (IUserAdministrationService.cs:24,IUserAdminDTO.cs:15,SetUserRolesRequest), the feature-flag lifecycle (FeatureFlagRegistry.cs:35,FeatureFlagAttribute.cs:32,FeatureFlagLifetime.cs:9), fallback authorization (FallbackAuthorizationHandler.cs:15),IStronglyTypedId<TSelf, TValue>andStronglyTypedId(IStronglyTypedId.cs:60,StronglyTypedId.cs:19),RefreshSessionRevocation,MessageHeaders,AuthErrorCodes.RoleNamesremoved from Common (the role vocabulary is app-owned since v1.201.0; it now lives in ADC Identity, G23). 18 body-changed, among themTokenService(TokenService.cs:26, onepermissionclaim per effective permission),AuthenticationServiceBase<TUser>(:74),OwnerOrAdminFilterOptions(:13,BypassRolerequired),PermissionRegistryandUnconfiguredPermissionRegistry.- G09 Caching (9):
CacheKeyNamespaceandCacheKeyPrefixOptionsbody (CacheKeyPrefix.cs:50,:31).- G10 Notifications (59): added
LiveChannelJoinAuthorizer(LiveChannelJoinAuthorizer.cs:43) andNotificationPermissionGrants(NotificationPermissionGrants.cs:26);NotificationHub(:25),SmtpEmailSender(:15, transport security per ADR-122),NotificationFeaturesandDependencyInjectionbody-changed.- G12 API hosting (85): added
UsersAdminControllerBase<TUserDto>(UsersAdminControllerBase.cs:49) andRolesAdminControllerBase(RolesAdminControllerBase.cs:61) (ADR-116) plusStronglyTypedIdSchemaTransformerandStronglyTypedIdParameterTransformer(StronglyTypedIdSchemaTransformer.cs:24,:74); 8 body-changed, among themMiddlewarePipelineBuilder(:16),OAuthControllerBase(:35),RateLimitingSettings(:21) andWebApplicationBuilderExtensions(:33).- G14 Module system (86): added the internal-command contracts (
IInternalCommand.cs:38,IInternalCommandScheduler.cs:16,IInternalCommandAdministration.cs:17,InternalCommandDeadLetter,InternalCommandNameAttribute.cs:25),AmbientOriginandConsumerOriginRestore(AmbientOrigin.cs:19,ConsumerOriginRestore.cs:24),ApplicationNamespace(ApplicationNamespace.cs:28), the two-factor and email-confirmation handler bases (BeginTwoFactorEnrollmentHandlerBase.cs:35,ConfirmTwoFactorEnrollmentHandlerBase.cs:29,DisableTwoFactorHandlerBase.cs:29,RegenerateRecoveryCodesHandlerBase.cs:30,ConfirmEmailHandlerBase.cs:33,SendEmailConfirmationHandlerBase.cs:40),ImpersonatingCurrentUserServiceandScopedUserOverride(ImpersonatingCurrentUserService.cs:20,ScopedUserOverride.cs:24),SmtpTransportSecurity(SmtpTransportSecurity.cs:26, ADR-122); 16 body-changed, among them the user use-case handler bases (DeleteUserHandlerBase.cs:58,ExportUserDataHandlerBase.cs:49,ChangePasswordHandlerBase.cs:36) and bothDependencyInjectionroots (:27,:62).- G15 Common UI (133): added the role and user administration UI (
RoleAdminList.razor.cs:27,RoleAdminEdit.razor.cs:35,UserAdminList.razor.cs:47, theirRoleAdminService/UserAdminService<TUserDto>clients, service contracts and resources),TrustedCallerHandler(TrustedCallerHandler.cs:35, v1.191.0),OAuthFlowStateStore(OAuthFlowStateStore.cs:20) andBiometricGate(BiometricGate.razor.cs:17); 12 body-changed, among themNavItem(NavItem.cs:20,RequiredPermission),NotificationUIModule(:15, gated on the manage permission),AuthUIService(:44),MudToastService(:19, live-region toasts, v1.194.0),MMCAThemeandLayoutSettings.- G16 Aspire (65): added
CachedHealthReportProviderandHealthReportCacheOptions(CachedHealthReportProvider.cs:25,HealthReportCacheOptions.cs:28) and ADC'sAdcAppHostFixture/AdcAppHostCollection/AdcAppHostSmokeTests(AdcAppHostFixture.cs:28,AdcAppHostSmokeTests.cs:32, on the newMMCA.Common.Testing.Aspirebase, ADR-117);AppHostCompositionSmokeTestsremoved;SecurityHeadersMiddleware(SecurityHeaders.cs:145),GatewayRateLimitingExtensions(:43),OutboxPollFilterProcessor(:17) and bothExtensionsroots body-changed.- G17 Conference domain (107): added the
SessionAssetaggregate with its kind, invariants, limits, event and DTO (SessionAsset.cs:23,SessionAssetChanged.cs:13,SessionAssetInvariants.cs:13, ADR-123),ConferencePermissionGrants(ConferencePermissionGrants.cs:27) andSessionizeCodeFormat(SessionizeCodeFormat.cs:27);Session(:22),SessionDTO,ConferencePermissions,ConferenceFeaturesand the cascade-deletion domain service body-changed.- G18 Conference application (335): +38 / -6 by name. The session-asset use cases (
UploadSessionAssetHandler.cs:35,AddSessionAssetLinkHandler.cs:20,UpdateSessionAssetHandler.cs:20,DeleteSessionAssetHandler.cs:21,GetSessionAssetsHandler.cs:27, the validation rule sets,SessionAssetAccessService.cs:22),ScoreEventSessionsInternalCommandand its handler (ScoreEventSessionsInternalCommand.cs:26,ScoreEventSessionsInternalCommandHandler.cs:39: scoring moved from the in-process queue onto an internal command, ADR-114),DeleteSessionAssetBlobInternalCommand(:29),SessionScoringRunner(SessionScoringRunner.cs:17),ISessionScoresCacheEvictor, and per-aggregateEntityQueryServicesubclasses; removedScoreEventSessionsCommand/ScoreEventSessionsHandler,ISessionScoringQueue/SessionScoringQueue,SessionScoringWorkItemandSessionScoringEnqueueResult. 11 body-changed, among themDeleteEventHandler(:22),DeleteSessionHandler(:25),RefreshFromSessionizeHandler(:20) andUserRegisteredHandler(:54).- G19 Conference infrastructure (27): +2 / -12 by name. The hand-rolled Anthropic request/response records (
AnthropicRequest,AnthropicResponse,AnthropicMessage,AnthropicContentBlock,AnthropicOutputConfig,AnthropicJsonSchemaFormat,AnthropicUsage),ScoringInstruments,SessionScoringProcessor,SessionScoringSweepJob,SessionScoringCandidateandSessionScoreStampare gone: the model call now goes throughMMCA.Common.AI(ADR-120) and the sweep through an internal command (ADR-114). AddedSessionAssetConfiguration(SessionAssetConfiguration.cs:18) andOutputCacheSessionScoresCacheEvictor(:17);AnthropicScoringService(:30),ModuleApplicationDbContext(:21),SessionConfigurationandSessionizeServicebody-changed.- G20 Conference API (45): added
SessionAssetsController(SessionAssetsController.cs:51);SessionSelectionController(:31),EventQuestionAnswersController(:57),SessionQuestionAnswersController(:78) andDependencyInjectionbody-changed.- G21 Conference UI (153): added
SessionAssetsPanel(SessionAssetsPanel.razor.cs:31),SessionAssetsDownloadList(:18),SessionAssetService(SessionAssetService.cs:26),ISessionAssetUIService,SessionAssetDisplayand the two asset request records;SpeakerDetail(:24),PublicSpeakerDetail(:22) andDependencyInjectionbody-changed.- G22 Engagement module (194): added
EngagementPermissionGrants(EngagementPermissionGrants.cs:24);EngagementFeaturesandDependencyInjectionbody-changed. G26 Engagement live layer (85): 9 body-changed (LivePollsController.cs:45,SessionQuestionsController.cs:37,SubmitQuestionHandler.cs:31,CreateLivePollHandler.cs:20,GetPollResultsHandler.cs:23,LivePollAuthorization.cs:12,SessionLive.razor.cs:27, ...), the permission-marker adoption.- G23 Identity module (113): added
RoleNames(RoleNames.cs:20, moved here from Common Auth),AdminRolesController(AdminRolesController.cs:36),UsersAdminController(:25),UserAdministrationService(:38),UserAdminDTO, theRoleList/RoleEdit/UserDetailpages (RoleList.razor.cs:27,RoleEdit.razor.cs:16,UserDetail.razor.cs:22), email confirmation end to end (ConfirmEmail.razor.cs:23,EmailConfirmationController.cs:34,EmailConfirmationService.cs:21,SendEmailConfirmationHandler.cs:27,ConfirmEmailHandler.cs:21),DeleteAvatarBlobInternalCommandand its handler (:17,:21),IdentityPermissionGrants,TokenPermissionGrants(TokenPermissionGrants.cs:34) andAuthenticationServiceSettings; 21 body-changed, among themUser(User.cs:34),AuthController(:33),AuthenticationService(:46),DeleteUserHandler(:29),SetUserAvatarHandler(:26),IdentityUIModuleandUserList.- G24 ADC host (22): added
BoundedCircuitHandlerwithBlazorCircuitLimitSettings/BlazorCircuitLimitExtensions(BoundedCircuitHandler.cs:37,BlazorCircuitLimitSettings.cs:17) andUiRateLimitingSettings/UiRateLimitingExtensions(UiRateLimitingSettings.cs:33), the v1.188.0 security hardening;App(App.xaml.cs:9) andMainActivity(:35) body-changed.- G27 Device capability layer (103): added
IAppLifecycleNotifier,AppLifecycleNotifier,AppResumedEventArgsandWindowLifecycleExtensions(IAppLifecycleNotifier.cs:13,AppLifecycleNotifier.cs:9,WindowLifecycleExtensions.cs:22); the three local-cache stores,ILocalCacheStore,DeepLinkDispatcher,MauiExternalAuthBroker(:20) andDependencyInjectionbody-changed.- G28 Common AI Integration (8): a new group, all eight types added:
AiSettingsandAiProvider(AiSettings.cs:31,:11),AiServiceCollectionExtensions(DependencyInjection.cs:49),BoundedChatClient(BoundedChatClient.cs:51),UsageRecordingChatClient(UsageRecordingChatClient.cs:21),AiUsageMeter(AiUsageMeter.cs:20),IAiTokenEstimator(IAiTokenEstimator.cs:14) andPromptContract(PromptContract.cs:23), the v1.192.0MMCA.Common.AIpackage (ADR-120).- G25 Testing (2,643): +341 / -19 by name (the new
MMCA.Common.Testing.Aspirepackage and its own tests,MMCA.Common.AI.Tests,MMCA.Common.Infrastructure.PostgreSQL.Tests, and the internal-command, permission-grant, strongly-typed-id, two-factor and email-confirmation test classes: Common Infrastructure +90, Application +54, Architecture +34, API +15, Shared +13, ADC Conference Application +21; removed the ADC scoring queue / processor / sweep tests and their fakes), 181 body-changed, 56 line-shifted; the per-project rollup counts moved for 26 projects (reconciled indevops-testing, see below).- Handled mechanically (no re-authoring): 3,387 citation remaps over 176 part files; 0 relocations rewritten (this delta had none); 854 section repacks with 41 flagged (13 testing-family splits across the renumbered
group-28parts, 27 orphan headings for the removed Anthropic records, scoring queue types andValReturn<T>plus the testing rollup headings, and theRoleNamesmove intogroup-24-identity-module-p02); 2 emptied part files deleted; links fixed in 96 files by the renumber. Citations flagged for an author: 379 at the gate, 23 then resolved byfixcites.ps1 -Residual; a dry-run re-check after the authoring pass still lists 132 across 57 parts (69 old-line-text-not-found, 21 range-end-not-found, 18 ambiguous basenames, the rest baseline-absent, deleted-file or already-correct false positives), left for a per-part follow-up pass like the 2026-09-05 one.- Authoring pass: 189 units re-authored (22 overview, 1 rollup, 166 sections) across 24 groups, all against real source with
path:linecitations, at concurrency 5 on the sections model. Adversarial spot-checks: G03-p00, G04-p00, G05-p00, G07-p00, G08-p00, G09-p00 all CONFIRMED.- Outside the type pipeline: 5 of 5
devops-*chapters refreshed, each because a file it cites has newer commits than the chapter:devops-aspire,devops-cicdanddevops-testingfor MMCA.ADCdeploy.yml64d6ffee / 29f7997d (2026-09-07 to 2026-09-10: the DataProtection KEK URI, the drift-plan fixes) andcross-service-tests.ymlc64b9fe2 / d841f798 (the AppHost smoke tier and its ephemeral RS256 keypair);devops-cicdalso for MMCA.Commonci.yml14435b9 / 960221b (the AppHost integration test base and the PostgreSQL engine) and the 2026-09-07 security-hardening commits on everyclaude*.yml,cost-guard.yml,dr-drill.yml,e2e.yml,load-test.yml,maui-audit.ymlandrelease.yml;devops-iacfor MMCA.ADCinfra/main.bicep(eight commits up to d5297706: the session-asset container, the v1.195.0 circuit-open alert) and the Identity serviceappsettings.json5c87387e (stored permission grants);devops-runbooksfordr-drill.yml88a129fe. Thedevops-testingper-project test-type table was reconciled to this scan (Common 1,647, ADC 824, combined 2,471; 26 projects had moved).
- Coverage gap: unchanged;
MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Fixtures/observability-main.bicepremains the logged exception (an architecture-test fixture, not deployed infrastructure).- CONCEPT-MAPS.md: 9 mechanical mismatches corrected: the group count 27 to 28 (the preamble twice, section 3 three times), the section 3 node label
G27re-pointed from Testing to Common AI Integration (Testing is nowG28), the package count 17 to 19 in section 1 (three claims, perMMCA.Common/FACTS.md), and ADR-052 marked superseded by ADR-121 in section 13.- Verification:
verify.ps1: 0 missing, rubric 34/34.- Governance events (approved by the user on 2026-09-14): new group G28 "Common AI Integration" (
group-27-common-ai-integration.md, 8 members, all fromMMCA.Common.AI); no existing group fit because the package is self-contained (aFrameworkReferenceonly, no first-party group dependency) and its concern, a governed language-model boundary, belongs to none of the persistence, pipeline or UI groups. It was inserted above the testing group inclassify.ps1, so the testing chapter moved from slot 27 to slot 28 (group-28-testing-infrastructure.md: 26 part files renamed, the stalegroup-27-testing-infrastructure.mddeleted, links fixed in 96 files). Second event: the G25 rule was extended so the assembliesMMCA.Common.Testing.AspireandMMCA.Common.Testing.Aspire.AppHostTestsroute to Testing & Quality Infrastructure (a classifier gap, not a new group). The primer's ADR table gained rows 112 to 123 and struck 052 (superseded by 121).
Regeneration note (re-verified against current source, 2026-09-19 full drift sweep). Regenerated at MMCA.Common
90ffa7a+ MMCA.ADC3f203a03(both clean; prior pass3a98862/be87e1fc, Common releases v1.203.0, v1.204.0 and v1.205.0 in between). Net change: +79 distinct nodes (4,826 to 4,905), 87 added and 8 removed by name, 19 relocated (same type, newfile:line), 78 body-only, 0 regrouped;classify.ps1reports 0 unmapped and the per-group counts sum to 4,905. Individually-sectioned types 2,568 to 2,624, roll-ups 2,250 to 2,281,###sections 2,482 to 2,554, cycles 44 to 44, edges 17,963 by namespace / 736 by unique-name fallback / 101 dropped. The 8 "removed" names are not deletions: four are generic-arity renames whose new arity was already sectioned (UpdateEntityCommand/UpdateEntityHandlerlostTApplier,MutateEntityHandlerBaselostTEntityDTO,StronglyTypedIdFilterStrategygained<TSelf, TValue>) and four are baseline duplicates the prior taxonomy rolled into the testing group for lack of a membership row (Result<T>,ResultConverter<T>,IEventUpcaster,AppHostFixtureBase<TAppHost>); no section was deleted.
- Per-group movement (13 of 28 groups moved; the rest are unchanged):
- G02 Domain Building Blocks (members 36): body 1, lineShift 3. The
IBaseEntity<TIdentifierType>hunk is an XML-doc tag change only (<c>init</c>to<see langword>), so the section was verified and left byte-identical; the threeEnumerationcites moved with the fitness-rule remark correction (Common #421).- G04 Domain & Integration Events + Outbox Dual-Dispatch (members 38): body 1.
OutputCacheEvictionRequestedspan touched by the scorecard-lever sweep (Common #412); walkthrough re-verified against current source.- G12 API Hosting, Middleware, Idempotency & DTO/Contract Mapping (members 85): body 1.
EntityControllerBasehunks at:576and:610are XML-doc tag changes; section verified, no textual change.- G14 Module System, Composition & Configuration (members 86): body 2, lineShift 1.
DependencyInjectionandMessageBusSettingsgained the broker-messaging registration path (Common #412; covered by the newDependencyInjectionBrokerMessagingTests).- G15 Common UI Framework (members 138): added 5, body 8, lineShift 2. Added
BlazorCspSettings+BlazorCspSettingsValidator(configurable frame-src allow-list for the Blazor CSP, Common #417),InvariantMudLocalizationInterceptor,StringLocalizerPluralExtensionsandBuiltInStrings(the MAUI culture-pin fix, ADR-027, Common #411); body changes inBlazorCspPolicyProvider,NotificationSend,RoleAdminEdit,MoneyExtensions,RegisterModel/ResetPasswordModeland bothDependencyInjectionroots.- G16 Aspire Orchestration & Service Defaults (members 65): body 1.
Extensions(ServiceDefaults) touched by Common #412; re-verified.- G17 ADC Conference - Domain Model & Module Contracts (members 112): added 5, body 3. The new Partner aggregate (
MMCA.ADC.Conference.Domain/Partners/Partner.cs:19, ADC #207):Partner,PartnerInvariants,PartnerType,PartnerDTO,PartnerChanged;ConferencePermissionsgained the Partners permissions andEventCascadeDeletionDomainServicenow cascades partners.- G18 ADC Conference - Application & Use Cases (members 353): added 18, body 2. The Partner use-case slice end to end (create/update handlers, request mappers and validators, the per-field
Partner*Rules<T>family,PartnerDTOMapper,PartnerNavigationPopulator,GetPublicPartnerFilterQuery/Handler);DeleteEventHandlerand the moduleDependencyInjectionregistered them (ADC #207).- G19 ADC Conference - Infrastructure & Persistence (members 28): added 1, body 2.
PartnerConfiguration(EF config) plus theModuleApplicationDbContextDbSet andConferenceModuleDbSeederrows for it (ADC #207).- G20 ADC Conference - API, gRPC Contracts & Service Host (members 46): added 1.
PartnersController(MMCA.ADC.Conference.API/Controllers/Partners/PartnersController.cs:41) with its 5-minute public output-cache policy (ADC #207).- G21 ADC Conference - UI (members 168): added 15, body 16, lineShift 6. The Partner pages and models (
PartnerList,PartnerDetail,PartnerCreate,PartnerFormModel/CreateModel/EditModel,IPartnerUIService/PartnerService), the home-page content alignment (ADCHome,ADCHomeContent,ADCPartnerInfo,ADCPartnerCollectionResult, ADC #207),VenueMapLinks,SessionAssetComposer,SessionBookmarkButtonand the static category chips / Happening Now links fix (ADC #208); the*Detailpages migrated toDetailPageBase.- G28 Common AI Integration (members 12): added 4, body 4. The guardrail layer (
IChatGuardrail,GuardrailVerdict,GuardrailChatClient,ChatGuardrailException, Common #412) inserted into the delegating-client pipeline built byAiServiceCollectionExtensions;AiUsageMeter,UsageRecordingChatClientandPromptContractre-verified.- G25 Testing & Quality Infrastructure (members 2681): added 38, removed 8, body 37, lineShift 7. The Partner test suites across Domain/Application/API/UI/E2E (
PartnerTests,PartnerInvariantsTests,CreatePartnerHandlerTests,PartnersControllerTests,PartnerListPage/DetailPage/CreatePage,OrganizerPartnerManagementTests), the guardrail tests,SqlClientEntraAuthenticationTests(Common #415),SliceCohesionFitnessTests+ theSliceFixtureshandler bases,SampleDeploymentObservabilityTests; the 8 removals are the arity renames and duplicates above.- Handled mechanically (no re-authoring): citation remaps 645 over 103 part file(s), 78 flagged for a human (41 inside a modified range, 37 ambiguous
DependencyInjection.csbasenames); 0 relocations; repack moves 502, 18 flagged (12 testing family headings whose members now span parts, kept as family tables in their first part; 6 orphan module-name headings in the testing chapter, removed).- Pipeline fix this pass:
repack.ps1recorded the type name of each moved section as its first letter, so the delta could not see where a section had moved and flagged every repack-touched unit as unsectioned (89 units instead of 64). Fixed at harness commit25c718dbefore authoring.- Authoring pass: 62 units re-authored (8 overview, 1 rollup, 53 sections) across 15 groups, all against real source with
path:linecitations; sections units on sonnet from per-unit briefs, overview/rollup/devops/concept-maps on opus. Struck at the gate as false positives: two Engagement/Identity parts whose only reason was the multi-layerAssemblyReference/ClassReferenceheadings the coverage check cannot count. Six adversarial spot-checks (the five Conference overviews and the Common UI overview): all CONFIRMED.- Outside the type pipeline: 3 of 5
devops-*chapters refreshed, each because a file it cites has newer commits than the chapter;devops-cicdwas struck because its only newer commit is theclaude-code-actionversion bump (Common #407) and the chapter names the action without a version.
devops-aspire:MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/appsettings.json(0a77a9fe, 2026-09-17, Partner aggregate, ADC #207).devops-iac:MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/appsettings.json(e3f01c5b, 2026-09-15, NuGet audit sweep, ADC #205) andMMCA.Common/samples/deployment/main.bicep(630afc9, 2026-09-15, Common #412).devops-testing: nine per-project test counts reconciled to the inventory (Architecture.Tests 196 to 203, Conference.UI.Tests 56 to 63, E2E.Tests 88 to 92, Conference.Application.Tests 184 to 191, Conference.Domain.Tests 31 to 34, UI.Tests 136 to 140, Infrastructure.Tests 493 to 494, Aspire.Tests 49 to 50, Conference.API.Tests 21 to 22).- Coverage gap: unchanged;
MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Fixtures/observability-main.bicepremains the logged exception (a test fixture, not an operational file).- CONCEPT-MAPS.md: 294 mechanical checks, 0 mismatches; one relationship-level edit, the section 12 module diagram now lists Partner among the Conference aggregates (
Partner.cs:19).- Verification:
verify.ps1: 0 missing, rubric 34/34.- Governance events: none (no new group, no classifier rule;
classify.ps10 unmapped). Primer ADR table gained rows 124 (UI host as its own hardened edge, g25) and 125 (parameterized SQL only, g07/g28).
Regeneration note (re-verified against current source, 2026-09-23 full drift sweep). Regenerated at MMCA.Common
0527211+ MMCA.ADC0883e184(both clean; prior pass90ffa7a/3f203a03, spanning Common releases v1.206.0 through v1.209.0). Net change: +76 distinct nodes (4,913 to 4,989), 93 added and 17 removed by name, 13 line-shifted (same type, newfile:line), 61 body-only, 0 regrouped;classify.ps1reports 0 unmapped and the per-group counts sum to 4,989. Individually-sectioned types 2,624 to 2,671, roll-ups 2,281 to 2,318,###sections 2,554 to 2,601, cycles 44 to 45, edges 18,261 by namespace / 745 by unique-name fallback / 101 dropped.
- Per-group movement (16 of 28 groups moved; the rest are unchanged):
- G04 Events + Outbox (38): body 1.
OutboxProcessorreshaped by the Common v1.206.0 internals pass (#422); walkthrough re-verified.- G07 Persistence & EF Core (162): added 1, body 1.
LookupRow<TId, TName>is the new id/name projection row read byEFReadRepository<TEntity, TIdentifierType>.- G08 Authentication & Authorization (153): added 1, body 3.
EmailIdentityis the shared address normalizer now used byEmailConfirmationTokenService,LoginProtectionServiceandPasswordResetTokenServicefor every email-derived cache key.- G12 API Hosting (85): body 1.
WebApplicationBuilderExtensionsgained the v1.209.0 consumer wiring (#436).- G14 Module System & Composition (86): body 2. The Application and Infrastructure
DependencyInjectionroots moved with the AI and gate-coverage waves.- G15 Common UI Framework (143): added 5. The Blazor Server UI-host hardening kit (
BoundedCircuitHandler,BlazorCircuitLimitSettings/Extensions,UiRateLimitingSettings/Extensions) was extracted from ADC intoMMCA.Common.UI.Web.Hardening(v1.206.0, #422); its sections moved here from G24.- G16 Aspire Orchestration (65): body 1.
Extensions(service defaults) re-verified.- G17 Conference Domain (112): body 1.
ConferenceFeaturesnow carries a second flag,SessionScoring(the scoring kill switch, ADC #214).- G18 Conference Application (358): added 5, body 3. The batch event-feedback slice (
BatchAddEventQuestionAnswers*,EventQuestionAnswerRules, ADC #217) plus scoring-runner changes.- G19 Conference Infrastructure (29): added 2, removed 1, body 2.
AnthropicScoringServicereplaced by the provider-agnosticSessionScoringServiceplusSessionScoreResponseGuardrail(ADC #215/#217).- G20 Conference API (52): added 6, body 5. The controller split (
EventLifecycleController,SessionCalendarController,SpeakerLinksController,SpeakerSessionsController, ADC #214) and the batch-answer request DTOs.- G22 Engagement Module (195): added 1, body 3.
LivePollVotingControllersplit out;EventFeedbacknow posts one batch.- G26 Engagement Live Layer (85): body 1.
LivePollsControllerlost its voting actions to the new controller.- G24 ADC Host Composition (17): removed 5. The hardening kit left for Common (see G15).
- G28 Common AI Integration (32): added 21, removed 1, body 7.
MMCA.Common.AIbecame provider-agnostic (v1.207.0, #425): theAiProviderenum gave way toIAiProviderFactory+ the Anthropic adapter package, plusChatToolPolicy,IChatRequestRedactor, the golden-replay evaluation base, andContentPolicyGuardrail(v1.208.0, #428).- G25 Testing & Quality Infrastructure (2,730): added 51, removed 10, body 30. Tests for all of the above, the constructor-dependency fitness fixtures, and seven rollup counts moved.
- Handled mechanically (no re-authoring): 950 citation remaps, 8 more by baseline-text match, 606 section repacks, 26 cross-link anchor rewrites; 515 citations flagged for an author.
- Authoring pass: 131 units: 64 driven by the delta (10 overview, 1 rollup, 47 sections, 5 devops, concept maps) plus 67 parts opened only to repair the flagged citations, each author working from the citation list and current source. Adversarial spot-check: 6 of 6 CONFIRMED. The rollup narrative that the repack had stranded in p25 and a stale copy of the rollup table in p29 were reunited with the rollup unit under a new
## Test suites by moduleheading.- Outside the type pipeline: 5 of 5
devops-*chapters refreshed (devops-aspire, devops-cicd, devops-iac, devops-runbooks, devops-testing) against ADC #213/#215/#216/#217/#219 and Common #436;devops-testingper-project counts reconciled to the inventory.
- Coverage gap: unchanged;
MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Fixtures/observability-main.bicepremains the logged exception.- CONCEPT-MAPS.md: 3 mechanical mismatches corrected (section 1 said 19 NuGet packages three times;
FACTS.mdsays 22), and the heading anchor moved with the number.- Verification:
verify.ps1: 0 missing, rollup contract 0 failures, rubric 34/34. A path-and-length check over 7,412 full-path cites found 80 that point at a missing file or past end-of-file; 75 predate this pass (abbreviated component paths and older test-base paths) and are an open item, the 5 this pass introduced were fixed.- Governance events: none (no new group, no classifier rule). Primer ADR table gained rows 126 (event sourcing not adopted, g02/g04) and 127 (actor model not adopted, g07/g09/g10); row 124 now links g15 alongside g25.
Regeneration note (re-verified against current source, 2026-09-26 full drift sweep). Regenerated at MMCA.Common
834a8fa+ MMCA.ADC3a32fd34(both clean; prior pass0527211/0883e184, spanning Common releases v1.210.0 and v1.211.0). Net change: +37 distinct nodes (4,997 to 5,034), 80 added and 43 removed by name, 47 line-shifted (same type, newfile:line), 287 body-only, 0 regrouped;classify.ps1reports 0 unmapped and the per-group counts sum to 5,034. Individually-sectioned types 2,671 to 2,704, roll-ups 2,318 to 2,330,###sections 2,601 to 2,647, cycles 45 to 46, edges 18,427 by namespace / 745 by unique-name fallback / 97 dropped.
- Per-group movement (16 of 28 groups moved; the rest are unchanged):
- G04 Events + Outbox (38): body 5.
OutboxProcessor,OutboxSignal,OutboxCleanupService,OutboxAdministrationandInProcessEventBusreworked: the processor's wait-and-wake loop now runs on the shared polling core (Common #440), plus code-health wave 2 edits (#439).- G07 Persistence & EF Core (165): added 3, body 20.
PollingLoopandWakeUpSignal(Persistence.Polling) are the polling core the outbox and internal-command processors now share (#440);ColumnWidth(Persistence.Conversions) is new in #439, which also touched the three engine contexts,UnitOfWork/IUnitOfWork, the interceptors,EFRepository<TEntity, TIdentifierType>, data-source routing and the cleanup jobs.- G08 Authentication & Authorization (153): body 1.
TokenService(#439).- G10 Notifications (59): body 3. The three notification query handlers (#439).
- G12 API Hosting (88): added 3, body 4.
CommonForwardedHeaders+CommonForwardedHeadersExtensionsandEntityCsvExporter<TEntityDTO>extracted into Common by the drift-analysis wave (v1.211.0, #443); the HTTPS-redirect exemption now keys on negotiated cleartext HTTP/2 (MiddlewarePipelineBuilder.IsCleartextHttp2).- G14 Module System & Composition (88): added 2, body 4.
DeleteBlobInternalCommandHandlerBase<TCommand>+IDeleteBlobInternalCommandextracted (#443) and now back both ADC blob-delete commands;ScheduledJobRunner,PeriodicBackgroundServiceand the two password-handler bases edited (#439/#440).- G15 Common UI Framework (153): added 10, body 2. The v1.211.0 extractions (#443):
DetailPageBase(from the Conference UI), the email-confirmation page and UI service (ConfirmEmail,ConfirmationState,IEmailConfirmationUIService,EmailConfirmationUIService, from the Identity UI), the client-config endpoint (ClientConfigBuilder,ClientConfigEndpointExtensions,MmcaClientConfigBootstrap),RatingStarsandTokenHydrationWarmup.- G17 Conference Domain (111): added 1, removed 2, body 2.
SessionStatusesmoved from the Domain to the Shared project;IEventCascadeDeletionDomainServiceis gone becauseEventCascadeDeletionDomainServiceis now a static class (ADC #220); theSessionDTOdescription limit rose to 8,000 for long Sessionize abstracts (#224).- G18 Conference Application (358): body 18. The scoring runner and its internal command (#224, the poll no longer finishing early), read-side handlers moved onto read repositories (#220),
SessionSyncStrategy(#224), and the session-asset blob delete on the new Common base (#221/#222).- G20 Conference API (52): body 2.
SessionsController(default title sort, #223) andSessionSelectionController(#224).- G21 Conference UI (162): added 1, removed 7, body 24.
DetailPageBaseleft for Common (every page link now targets the G15 section);ADCHomebindsEventDTO/SponsorDTO/PartnerDTOthrough the UI services, so its six private info/result records are gone;SessionStatusDisplayis new; the create/detail pages and the scoring poll tracker were edited (#220/#222/#224).- G22 Engagement Module (194): removed 1, body 5.
IBookmarkManagementDomainServiceis gone;BookmarkManagementDomainServiceis static (#220).- G26 Engagement Live Layer (85): body 5. The five poll and question query handlers (#220).
- G23 Identity Module (107): removed 6, body 7. The email-confirmation UI moved to Common (see G15),
IdentitySettingsandAuthenticationServiceSettingswere removed, and the avatar blob delete runs on the Common base (#221/#222).- G24 ADC Host Composition (17): body 1.
DeviceUIModule(#220).- G25 Testing & Quality Infrastructure (2,771): added 60, removed 27, body 184. Tests for all of the above (15 new Common architecture fitness fixtures, 12 Common UI tests);
MMCA.ADC.Conference.Shared.Testsfell 18 to 9 with theSessionStatusesmove, and 14 rollup counts moved.- Handled mechanically (no re-authoring): 1,076 citation remaps, 4 more by baseline-text match, 633 section repacks, 33 cross-link rewrites; 174 citations flagged for an author.
- Authoring pass: 130 units: 107 driven by the delta (9 overview, 1 rollup, 92 sections, 5 devops) plus 23 parts opened only to repair flagged citations; 59 units carried a citation-repair list. Sections units ran on sonnet from their briefs, the rest on opus. Adversarial spot-check: 6 of 6 CONFIRMED.
- Outside the type pipeline: 5 of 5
devops-*chapters refreshed against ADC #222 (dr-drill.ymltimeout 30 to 60 minutes, the UI host log in the E2E artifact, the audit-trail DML auditing and per-service cost tags inmain.bicep, which also shifted every latermain.bicepcite);devops-testingper-project counts reconciled to the inventory.
- Coverage gap: unchanged;
MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Fixtures/observability-main.bicepremains the logged exception.- CONCEPT-MAPS.md: unchanged. The one mechanical flag ("four AI packages" against the 22-package total) was a false positive: four is the AI subset, and
MMCA.Common/FACTS.mdlists exactly those four.- Verification:
verify.ps1: 0 missing, rollup contract 0 failures, citation integrity 0 failures, rubric 34/34.verify.ps1gained a fourth check this pass, anchor integrity: every in-guide#anchorlink must land on a heading id the renderer emits. Before it existed, a rougher scan had already fixed 46 links pointing at an existing type in the wrong chapter (40 of themRoleNames, which lives in G23, not G08). Its first run then found 591 dead links across 24,498. Most were two systematic classes, now repaired byfixlinks.ps1on every pass: 426 links to rolled-up test classes (catalogued by project, so never given a heading; they now link the per-project rollup table) and 128 to single members of a family section (now the family heading). The rest were renamed or re-slugged headings, fixed by hand, and the cycles link now uses a stable#cyclesid. The same pass found a stale second copy of the per-project rollup table rendering above the current one (the rollup unit's id moved when the group grew); it was removed, and the rollup contract now fails on a duplicated row or a restated count that disagrees with the inventory. The last 26 named types that no longer exist in source (mostly the earlier scoring pipeline,ScoreEventSessionsHandler,AnthropicScoringService,SessionScoringProcessor,SessionScoringQueue), in prose the type-drift pipeline never reopens because the sections holding it were unchanged. A follow-up pass re-authored those sentences in 15 parts from current source (the durable scoring internal command,ScoreEventSessionsInternalCommandHandlerplusSessionScoringRunner, and the AppHost smoke tier indevops-aspire); spot-check 4 CONFIRMED, 2 DRIFTED on framing only (an unchartered but intended rollup subsection, an evidence row that is not a cite). Anchor integrity 0 failures.- Governance events: none (no new group, no classifier rule). The primer ADR table already matches the 127-record index.
Regeneration note (re-verified against current source, 2026-10-02 full drift sweep). Regenerated at MMCA.Common
cd0026df+ MMCA.ADC024e4a98(both clean; prior pass834a8fa/3a32fd34, Common releases v1.212.0 through v1.218.1 in between). Net change: +192 distinct nodes (5,042 to 5,234), 205 added and 13 removed by name, 186 relocated (same type, newfile:line), 581 body-only, 0 regrouped;classify.ps1reports 0 (after the approvedMMCA.Common.LoadTestsrule below; the first run refused 14) unmapped and the per-group counts sum to 5,234. Individually-sectioned types 2,704 to 2,776, roll-ups 2,330 to 2,458,###sections 2,647 to 2,720, cycles 46 to 47, edges 19,214 by namespace / 786 by unique-name fallback / 101 dropped.
- Per-group movement (26 of 28 groups moved; the rest are unchanged):
- G02 Domain Building Blocks (Entities, Value Objects, Aggregates) (members 36): body 3, lineShift 5. PiiRedactor now finds [Pii] through Attribute.IsDefined with inherit: true so an override sees the base declaration, DateRange.Overlaps became inclusive at both ends, and AuditableAggregateRootEntity.SetItems always copies into a fresh list; these are the Common bug-hunt 2026-09-30 and 1.218.0 remediation waves (0cf2a909, e9c28d15), anchored by MMCA.Common/Source/Core/MMCA.Common.Domain/Privacy/PiiRedactor.cs:122.
- G03 Querying: Specifications, Filtering & the Entity Query Service (members 42): body 4. StringFilterStrategy.CanParseValue now overrides for the IN operator only and QueryFilterService gained validation hooks, with the three new RS0026 SuppressMessage attributes shifting QueryFieldService anchors; the filter fix is Common 1.213.1 (11434c80, server-mapped filter applied verbatim), anchored by MMCA.Common/Source/Core/MMCA.Common.Application/Services/Filtering/StringFilterStrategy.cs:26.
- G04 Domain & Integration Events + Outbox Dual-Dispatch (members 38): body 6. OutboxProcessor, OutboxCleanupService, OutboxAdministration and the event buses now take FrameworkTableTargets and gate on context.Engine.Capabilities.IsRelational instead of ApplicationDbContext.SupportsOutbox, and EfInboxStore takes TimeProvider; this is the 1.218.0 constructor-narrowing (ceiling 7) and per-engine contract plus the 1.216.0 TimeProvider change, anchored by MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs:58.
- G05 CQRS: Commands, Queries & the Decorator Pipeline (members 61): lineShift 2. No type body changed; TransactionalCommandDecorator and CacheKeyLocks only moved lines (CacheKeyLocks because ICacheService gained TryGetAsync and GetFromSharedStoreAsync), reason for the decorator shift not stated in source, anchored by MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Decorators/TransactionalCommandDecorator.cs:22.
- G06 Validation (members 22): body 1, lineShift 11. StrongPasswordRules<T> now takes its lengths and four character classes from the new PasswordComplexity type in Common.Shared (Level 0 to 1), and the other CommonValidationRules fragments shifted one line; the stated driver is the 1.218.0 password-rule parity gate (3 non-ASCII rows), anchored by MMCA.Common/Source/Core/MMCA.Common.Application/Validation/CommonValidationRules.cs:191.
- G07 Persistence & EF Core (members 177): added 13, removed 1, body 39, lineShift 10. Per-engine strategy replaces enum branching: IDataSourceEngine, DataSourceEngines, DataSourceEngineCapabilities, MigrationPolicy, RowVersionStrategy, IExplicitKeyInsertDialect, ExplicitKeyInsertGroup, four engine classes and FrameworkTableTargets were added and IdentityInsertGroup removed (RequestIdentityInsert became RequestExplicitKeyInsert), so adding an engine no longer needs a hand hunt for branches (ADR-130, e9c28d15), anchored by MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DataSources/Engines/IDataSourceEngine.cs:18.
- G08 Authentication & Authorization (members 162): added 9, body 21, lineShift 6. Refresh-session issue, rotation, reuse detection and session cap moved out of AuthenticationServiceBase (10 to 7 constructor dependencies) into the new IAuthSessionIssuer/AuthSessionIssuer, the SessionCookieStore family (ISessionCookieStore, SessionCookieSettings, SessionClaimsToken, SessionRefreshOutcome) was added for the same-origin proxy, and PasswordComplexity was added (e9c28d15, ADR-131), anchored by MMCA.Common/Source/Core/MMCA.Common.Application/Auth/Sessions/AuthSessionIssuer.cs:39.
- G09 Caching (members 9): body 4. ICacheService gained GetFromSharedStoreAsync so single-use auth records (OAuth code, reset and confirmation tokens, last 2FA step) skip the local L1 tier, plus TryGetAsync for value-type misses, and MemoryCacheService now applies Cache:DefaultDuration; reasons are a record redeemable from another replica's L1 for 30s (0439838b) and the bug-hunt items L47 and L57 (0cf2a909), anchored by MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/ICacheService.cs:62.
- G10 Notifications (Push + In-App Inbox + Email) (members 59): body 9. MarkAllNotificationsReadHandler became one set-based ExecuteUpdateAsync (bug-hunt L49), and ADC LiveChannelGrpcService now rejects blank or over-long channel keys, event names, bad characters and payloads over 64 KiB so the anonymous internal surface is bounded (9b423f97), anchored by MMCA.Common/Source/Core/MMCA.Common.Application/Notifications/UserNotifications/UseCases/MarkAllRead/MarkAllNotificationsReadHandler.cs:50.
- G12 API Hosting, Middleware, Idempotency & DTO/Contract Mapping (members 88): body 14. AuthControllerBase login and register are [NonIdempotent] so token pairs never enter the replay cache (M137), EntityControllerBase.ExportAsync is fail-closed unless AllowUnscopedExport is set (403 Export.RowScopeRequired, 1.218.0 privacy item #30), and startup gained InitializeDatabaseUnlessDesignTimeAsync, anchored by MMCA.Common/Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:273.
- G13 gRPC & Inter-Service Contracts (members 7): added 1, body 3. GrpcWireFormat was added so UTC DateTime and invariant decimal wire strings are written and parsed in one tested place, replacing nine service and adapter copies in ADC and Store (0439838b), anchored by MMCA.Common/Source/Presentation/MMCA.Common.Grpc/GrpcWireFormat.cs:30.
- G14 Module System, Composition & Configuration (members 87): removed 1, body 19, lineShift 1. UserUseCaseLog was removed and each Users handler base now declares its own private partial [LoggerMessage] methods (event ids unchanged, 46 verified identical), ModuleLoader keeps loadable types and logs Error on a ReflectionTypeLoadException instead of a Warning, and ScheduledJobRunner stamps under its own 5-second token (1.218.0 slices refactor, 0439838b, M119), anchored by MMCA.Common/Source/Core/MMCA.Common.Application/Modules/ModuleLoader.cs:81.
- G15 Common UI Framework (MudBlazor components, theme, base pages) (members 174): added 21, body 42, lineShift 3. The same-origin API proxy family was added to MMCA.Common.UI.Web (SameOriginApiProxyEndpoint, SameOriginProxyInvoker, SessionHandoffEndpoints, HandoffTokenRefresher and others) so access and refresh tokens stay in HttpOnly cookies (ADR-131), PagedReadAll moved in from ADC, IdempotentReadRetry and NotificationPageGate were added, and the bundled Bootstrap stylesheet was dropped, anchored by MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/SameOriginProxy/SameOriginApiProxyEndpoint.cs:29.
- G16 Aspire Orchestration & Service Defaults (members 65): body 5. Service-default HTTP retry now skips POST and PATCH (a timed-out attempt may still be running; L80), and a Telemetry:DisableAspNetCoreMetrics knob and Live Metrics off-switch were added for idle-billing cost (d4824b36, ADC e882f40e), anchored by MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs:56.
- G17 ADC Conference - Domain Model & Module Contracts (members 111): body 5. Conference domain invariants tightened: Speaker optional fields and Category type are length-checked (M139), question entity and type compared ordinally (M143), speaker link URLs must be absolute http(s) (M161), from the ADC bug-hunt remediation (495c3167), anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Domain/Speakers/SpeakerInvariants.cs:16.
- G18 ADC Conference - Application & Use Cases (members 358): added 1, removed 1, body 15. SpeakerQuestionAnswerNavigationPopulator was removed, UserDeletedFeedbackHandler was added so erasure also deletes Conference feedback answers (L106), UpdateEventQuestionAnswerHandler now applies the create-path rules via EnsureAnswerIsValid (M140), and RefreshFromSessionizeCommand is no longer ITransactional so the throttle stamp commits alone (L96), all from ADC 495c3167, anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Events/UseCases/UpdateEventQuestionAnswer/UpdateEventQuestionAnswerHandler.cs:80.
- G19 ADC Conference - Infrastructure & Persistence (members 29): body 1. SessionScoringService body changed only in comments (the PII guardrail is now composed by AddConferenceAiGuardrails and the fail-closed path is described as a direct construction over a bare chat client), from the ADR-audit comment fix (3478eb27), anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Infrastructure/Sessions/Scoring/SessionScoringService.cs:42.
- G20 ADC Conference - API, gRPC Contracts & Service Host (members 52): body 20. Every Conference controller that returns a null read scope now sets AllowUnscopedExport (privileged-reader predicate, Organizer check or true for reference data) to match Common 1.218.0's fail-closed CSV export (024e4a98), and EventLiveValidationServiceGrpcAdapter returns a failure Result for a malformed speaker id instead of throwing (9b423f97), anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.API/Controllers/Events/RoomsController.cs:138.
- G21 ADC Conference - UI (members 163): added 1, body 40, lineShift 1. Public pages now share PublicReadAudience.IsPrivilegedReaderAsync (cancellation propagates, no bare catch), the Conference and Engagement UI read time through TimeProvider, session create and edit enforce end-after-start (BR-122), and the AI scoring panel counts this run's scores, from ADC 9b423f97, 495c3167 and 85ef8c18, anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.UI/Pages/Public/PublicReadAudience.cs:18.
- G22 ADC Engagement Module (Session Bookmarks) (members 196): added 2, body 13, lineShift 1. UserDeletedBookmarksHandler and UserDeletedBadgeHandler were added so UserDeleted erases session bookmarks and the attendee badge (L106), and SetLeaderboardParticipationHandler plus BookmarkService bodies changed for the terminal erased opt-in (L100) and cancellation-aware retry (L104), from ADC 495c3167, anchored by MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Application/CheckIns/IntegrationEventHandlers/UserDeletedBadgeHandler.cs:22.
- G26 ADC Engagement Live Layer (Real-Time Polls & Session Q&A) (members 87): added 2, body 5. UserDeletedVotesHandler and UserDeletedSessionQuestionsHandler were added to the UserDeleted fan-out (L106), CastVote and ToggleUpvote treat a lost first-insert unique-index race as success (M146), the poll and question reads apply the published-scope gate (L105), and HappeningNow reads time through TimeProvider, from ADC 495c3167 and 9b423f97, anchored by MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Application/LivePolls/UseCases/CastVote/CastVoteHandler.cs:58.
- G23 ADC Identity Module (Users, Profiles, GDPR Export/Erasure) (members 108): added 1, body 4, lineShift 1. AuthenticationService now takes IAuthSessionIssuer in place of ITokenService, TimeProvider, IRefreshSessionStore and RefreshSessionSettings, JwtAudience was added for a fail-fast JWT audience, and user name and device columns widened to nvarchar (M148), from ADC 024e4a98, 9b423f97 and 495c3167, anchored by MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Application/Users/AuthenticationService.cs:56.
- G24 ADC Application Host, UI Shell & Cross-Module Composition (members 17): body 1. AppDelegate (iOS) now asks DeepLinkDispatcher.IsAppRelativeRoute before publishing a universal link, because Publish throws on a non-app-relative route and an exception out of a UIKit delegate callback terminates the app (SEC-Common-88, mirrors MainActivity), from ADC 495c3167 and 46271321, anchored by MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI/Platforms/iOS/AppDelegate.cs:20.
- G27 Device Capability Abstraction Layer (Native Contracts, MAUI, Browser & Fallback Adapters) (members 103): body 7, lineShift 2. IExternalLinkService.OpenAsync now returns Task<bool> so map navigation reports the real outcome (L70), BrowserExternalLinkService explains why noopener hides a blocked tab, and MauiPushRegistrationService serializes registration passes (L79), from the Common bug-hunt wave C-5 (0cf2a909), anchored by MMCA.Common/Source/Presentation/MMCA.Common.UI/Services/Capabilities/Interop/IExternalLinkService.cs:23.
- G28 Common AI Integration (members 32): body 4, lineShift 1. PiiRedactionGuardrail now scrubs tool results, tool-call string arguments and reasoning text (M136), ChatToolPolicy fails closed on unrecognised consequential-marker shapes (M135), AiSettings rejects Ai:Timeout above one hour at startup (L90), and ReplayChatClient records under a lock (L84), from the Common bug-hunt wave C-6 (0cf2a909), anchored by MMCA.Common/Source/Core/MMCA.Common.AI/Guardrails/PiiRedactionGuardrail.cs:108.
- G25 Testing & Quality Infrastructure (members 2923): added 154, removed 10, body 296, lineShift 142. New gates landed in Common 1.218.0 (FrameworkConstructorDependencyTests with a 7-dependency ceiling, PiiConventionTests, PasswordRuleParityTests, EditorRequiredParameterConventionTests, DataSourceBranchingFitnessTests), a weekly MMCA.Common.LoadTests tier (OutboxThroughputLoadTests, PagedQueryLoadTests) and a sqlserver-integration tier were added, and many existing test bodies moved with the bug-hunt, same-origin proxy and gRPC adapter changes, anchored by MMCA.Common/Tests/Performance/MMCA.Common.LoadTests/OutboxThroughputLoadTests.cs:20.
- Handled mechanically (no re-authoring): citation remaps 3,589 over 212 part file(s), 405 flagged for a human; 18 more fixed by the residual baseline-text match; 0 relocations; repack moved 609 sections, 19 flagged; fixlinks rewrote 4 anchors.
- Authoring pass: 162 units re-authored (13 overview, 1 rollup, 148 sections) across 25 groups, all against real source with
path:linecitations. Spot-checks (evidence-verifier): first pass 5 CONFIRMED (g07, g09, g13, g14, g15 overviews) and 1 DRIFTED (g08 overview still placed the refresh-session workflow inAuthenticationServiceBase.cs, re-anchored toMMCA.Common/Source/Core/MMCA.Common.Application/Auth/Sessions/AuthSessionIssuer.cs:39). A short-form cite scan then found 299File.cs:Ncites past end-of-file in 56 parts (198 in parts re-authored this pass), whichverify.ps1did not check; a 70-unit citation fix pass took that to 0. Its spot-checks: 4 CONFIRMED (g04, g08, g23, g28 overviews), 2 DRIFTED in group-02 (a non-existentOrder.cscites), both corrected by hand againstMMCA.Common/Source/Core/MMCA.Common.Shared/ValueObjects/Contact/Email.cs:44andMMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.Domain/Orders/Order.cs:220.- Outside the type pipeline: 5 of 5
devops-*chapters refreshed (devops-aspire, devops-cicd, devops-iac, devops-runbooks, devops-testing), each because a file it cites has newer commits than the chapter.
devops-aspire: MMCA.ADC/.github/workflows/cross-service-tests.yml: 1 commit(s) [9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)] | MMCA.ADC/.github/workflows/deploy.yml: 3 commit(s) [024e4a98 2026-10-01 Adopt MMCA.Common 1.218.1 (remediation wave) (#236); 2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231)] | MMCA.ADC/infra/main.bicep: 1 commit(s) [e882f40e 2026-09-29 chore(infra): idle-billing cost settings (Live Metrics off, ASP.NET Core metrics drop, 120s gateway probes) (#226)] | MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/appsettings.json: 1 commit(s) [e882f40e 2026-09-29 chore(infra): idle-billing cost settings (Live Metrics off, ASP.NET Core metrics drop, 120s gateway probes) (#226)] | MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/Dockerfile: 1 commit(s) [9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)] | MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Dockerfile: 1 commit(s) [9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)]devops-cicd: MMCA.ADC/.github/workflows/claude-code-review.yml: 1 commit(s) [2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231)] | MMCA.ADC/.github/workflows/claude.yml: 1 commit(s) [2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231)] | MMCA.ADC/.github/workflows/cost-guard.yml: 1 commit(s) [2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231)] | MMCA.ADC/.github/workflows/cross-service-tests.yml: 1 commit(s) [9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)] | MMCA.ADC/.github/workflows/deploy.yml: 3 commit(s) [024e4a98 2026-10-01 Adopt MMCA.Common 1.218.1 (remediation wave) (#236); 2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231)] | MMCA.ADC/.github/workflows/dr-drill.yml: 2 commit(s) [2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231); 9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)] | MMCA.ADC/.github/workflows/e2e.yml: 1 commit(s) [9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)] | MMCA.ADC/.github/workflows/load-test.yml: 1 commit(s) [2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231)] | MMCA.Common/.github/workflows/ci.yml: 2 commit(s) [1f4df71f 2026-10-01 docs: fix stale source comments found by the 2026-10-01 ADR audit (#468); 0439838b 2026-10-01 feat: auth-cache hardening, tighter gates, shared consumer code (v1.216.0) (#463)] | MMCA.Common/.github/workflows/claude-code-review.yml: 2 commit(s) [0439838b 2026-10-01 feat: auth-cache hardening, tighter gates, shared consumer code (v1.216.0) (#463); 693038e7 2026-09-30 ci: Bump anthropics/claude-code-action from 1.0.231 to 1.0.235 (#446)] | MMCA.Common/.github/workflows/claude.yml: 2 commit(s) [0439838b 2026-10-01 feat: auth-cache hardening, tighter gates, shared consumer code (v1.216.0) (#463); 693038e7 2026-09-30 ci: Bump anthropics/claude-code-action from 1.0.231 to 1.0.235 (#446)] | MMCA.Common/.github/workflows/release.yml: 1 commit(s) [0439838b 2026-10-01 feat: auth-cache hardening, tighter gates, shared consumer code (v1.216.0) (#463)]devops-iac: MMCA.ADC/infra/main.bicep: 1 commit(s) [e882f40e 2026-09-29 chore(infra): idle-billing cost settings (Live Metrics off, ASP.NET Core metrics drop, 120s gateway probes) (#226)] | MMCA.Common/samples/deployment/main.bicep: 1 commit(s) [e9c28d15 2026-10-01 feat!: remediation backlog wave (1.218.0) (#469)]devops-runbooks: MMCA.ADC/.github/workflows/dr-drill.yml: 2 commit(s) [2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231); 9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)]devops-testing: MMCA.ADC/.github/workflows/cross-service-tests.yml: 1 commit(s) [9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)] | MMCA.ADC/.github/workflows/deploy.yml: 3 commit(s) [024e4a98 2026-10-01 Adopt MMCA.Common 1.218.1 (remediation wave) (#236); 2140ebd1 2026-10-01 chore(deps): Bump the github-actions group across 1 directory with 4 updates (#231)] | MMCA.ADC/.github/workflows/e2e.yml: 1 commit(s) [9b423f97 2026-10-01 Conference-day hardening, tighter deploy gates, shared Common code; bump MMCA.Common to v1.216.0 (#233)] | MMCA.Common/.github/workflows/ci.yml: 2 commit(s) [1f4df71f 2026-10-01 docs: fix stale source comments found by the 2026-10-01 ADR audit (#468); 0439838b 2026-10-01 feat: auth-cache hardening, tighter gates, shared consumer code (v1.216.0) (#463)] | test-count drift: MMCA.Common.Shared.Tests chapter 58 vs inventory 60; MMCA.Common.Domain.Tests chapter 62 vs inventory 64; MMCA.Common.Application.Tests chapter 398 vs inventory 401; MMCA.Common.Infrastructure.Tests chapter 499 vs inventory 514; MMCA.Common.API.Tests chapter 155 vs inventory 170; MMCA.Common.Grpc.Tests chapter 16 vs inventory 18; MMCA.Common.UI.Tests chapter 152 vs inventory 170; MMCA.Common.UI.Web.Tests chapter 12 vs inventory 24; MMCA.Common.Aspire.Tests chapter 50 vs inventory 52; MMCA.Common.Architecture.Tests chapter 230 vs inventory 254; MMCA.Common.UI.E2E.Tests chapter 20 vs inventory 21; MMCA.ADC.Identity.Shared.Tests chapter 2 vs inventory 3; MMCA.ADC.Conference.Application.Tests chapter 193 vs inventory 196; MMCA.ADC.Conference.UI.Tests chapter 66 vs inventory 81; MMCA.ADC.Engagement.Application.Tests chapter 65 vs inventory 70; MMCA.ADC.Architecture.Tests chapter 56 vs inventory 57; MMCA.ADC.Services.Tests chapter 7 vs inventory 17- Coverage gaps (operational files no chapter mentions): MMCA.Common/.github/workflows/load-tests.yml, MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Fixtures/observability-main.bicep.
load-tests.ymlis now covered indevops-testing;observability-main.bicepis an architecture-test fixture, not an operational file, and stays uncovered by design.- CONCEPT-MAPS.md: 1 mechanical mismatch(es) corrected. The flagged number ("four AI packages" vs the 22-package total) was a checker false positive and stands (FACTS.md lists exactly four AI packages). Non-numeric drift fixed: map 8 gains the per-engine
IDataSourceEnginestrategy and the PostgreSQL shim (ADR-130), map 9 moves session issuance and rotation toAuthSessionIssuer, map 11 adds the same-origin proxy.- Verification:
verify.ps1: 0 missing, rubric 34/34, 0 rollup, 0 citation (7,971 full-path cites), 0 anchor (25,310 links), and the new short-cite check 0.verify.ps1gained check 5 (short-formFile.cs:linepast end-of-file, exit bit 16) with atest-verify.ps1negative case (38/38 pass).- Governance event: a classifier rule, no new group. The new
MMCA.Common.LoadTestsassembly (14 types, e.g.MMCA.Common/Tests/Performance/MMCA.Common.LoadTests/OutboxThroughputLoadTests.cs:20) routes to G25 Testing & Quality Infrastructure besideMMCA.Common.Benchmarks(user-approved 2026-10-01;Tools/invtool/classify.ps1:268).
Regeneration note (re-verified against current source, 2026-10-08 full drift sweep). Regenerated at MMCA.Common
55e427b3+ MMCA.ADCbac50ead(both clean; prior passcd0026df/024e4a98, Common releases v1.219.0 through v1.233.0 in between). Net change: +270 distinct nodes (5,242 to 5,512), 284 added and 14 removed by name, 221 relocated (same type, newfile:line), 652 body-only, 0 regrouped;classify.ps1reports 0 unmapped and the per-group counts sum to 5,512. Individually-sectioned types 2,776 to 2,874, roll-ups 2,458 to 2,638,###sections 2,720 to 2,817, cycles 47 to 49, edges 20,396 by namespace / 835 by unique-name fallback / 109 dropped.
- Per-group movement (26 of 28 groups moved; the rest are unchanged):
- G01 Result & Error Handling (members 16): body 3, lineShift 1.
Error,ErrorTypeandErrorTypeSeveritychanged in the remediation from the 2026-10-02 ADC local test run (Common #473), anchored by MMCA.Common/Source/Core/MMCA.Common.Shared/Abstractions/Error.cs:103.- G02 Domain Building Blocks (Entities, Value Objects, Aggregates) (members 36): body 4, lineShift 2.
Money,DateTimeRange,CurrencyJsonConverterandDomainHelperchanged in the bug-hunt ninth wave (Common #516, 1.232.0) and the run-7 defects (#518), anchored by MMCA.Common/Source/Core/MMCA.Common.Shared/ValueObjects/Financial/Currency.cs:88.- G03 Querying: Specifications, Filtering & the Entity Query Service (members 42): body 6, lineShift 3. The specification composers (
AndSpecification,OrSpecification,NotSpecification,SpecificationComposer),EntityQueryServiceandQueryFieldServicechanged in the bug-hunt ninth wave (Common #516), anchored by MMCA.Common/Source/Core/MMCA.Common.Domain/Specifications/Specification.cs:81.- G04 Domain & Integration Events + Outbox Dual-Dispatch (members 38): body 8, lineShift 1.
OutboxMessage,OutboxFinalizer,OutboxProcessor, both event buses and the integration-event consumer changed for multi-replica safety (outbox leases, Common #520) and the bug-hunt ninth wave (#516), anchored by MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/BrokerEventBus.cs:81.- G05 CQRS: Commands, Queries & the Decorator Pipeline (members 61): body 5, lineShift 4. The create and add-child handler bases,
MutateEntityHandlerCoreand both feature-gate decorators changed in the bug-hunt ninth wave (Common #516) and the ADC run-6 defects (#504).IQueryCacheablenow has no production adopter in Common or ADC, because ADC'sGetNowNextQueryopts out in favour of its Redis-backed output-cache policy (MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Sessions/UseCases/NowNext/GetNowNextQuery.cs:10-12, ADC #256); the stale adopter claims in g05, g09 and g22 were corrected by hand after the authoring pass. Anchored by MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Crud/ChildEntityHandlerBase.cs:139.- G07 Persistence & EF Core (members 181): added 4, body 20, lineShift 11.
EnrolledCommandWake(a wake owed to an uncommitted transaction, released only after commit, Common #476),LocalLease,OwnedDependentsandExplicitKeyInsertRoundOrderwere added, and the interceptors,UnitOfWorkand the data-source resolver changed in the bug-hunt ninth wave (#516) and run-7 defects (#518), anchored by MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/InternalCommands/EnrolledCommandWake.cs:14.- G08 Authentication & Authorization (members 172): added 10, body 21, lineShift 5. The opt-in terms-acceptance contracts (
LegalAcceptancePolicy,LegalAcceptanceDTO,ILegalAcceptanceService,AcceptLegalTermsRequestand their options, routes and errors) were added by Common #486, andBrowserOriginjoined the cookie-session family; the session issuer and cookie refresher changed for refresh grace under multiple replicas (#520), anchored by MMCA.Common/Source/Core/MMCA.Common.Shared/Legal/AcceptLegalTermsRequest.cs:12.- G09 Caching (members 9): body 2.
ICacheServiceandHybridCacheServicechanged in the run-7 defects (Common #518) and multi-replica safety (#520), anchored by MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Caching/HybridCacheService.cs:48.- G10 Notifications (Push + In-App Inbox + Email) (members 59): body 6. The inbox read handlers,
NotificationHub,NotificationScopeKeyand the gRPC live-channel adapter changed in the bug-hunt ninth wave (Common #516) and ADC run-5 defects (#498), anchored by MMCA.Common/Source/Core/MMCA.Common.Application/Notifications/UserNotifications/UseCases/GetInbox/GetMyNotificationsHandler.cs:73.- G12 API Hosting, Middleware, Idempotency & DTO/Contract Mapping (members 92): added 4, body 15, lineShift 3.
LegalAcceptanceControllerBaseandEmailConfirmationControllerBasewere added (the email-confirmation actions moved here from ADC, which now only supplies its command records),JwtAudiencemoved here from the ADC Identity module, andApiVersionReportingResultFilterwas added, anchored by MMCA.Common/Source/Presentation/MMCA.Common.API/Caching/ApiVersionReportingResultFilter.cs:21.- G13 gRPC & Inter-Service Contracts (members 7): body 1, lineShift 1.
ResultGrpcExtensionschanged in the remediation from the 2026-10-02 ADC local test run (Common #473), anchored by MMCA.Common/Source/Presentation/MMCA.Common.Grpc/ResultGrpcExtensions.cs:37.- G14 Module System, Composition & Configuration (members 90): added 3, body 11.
FaultEndpointConfigurator,OriginSnapshotandRestoreHandlewere added around the consumer origin-restore path, andImageSharpImageProcessornow restricts its decoders under the 2026-10-07 ImageSharp advisory hold (Common #525), anchored by MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/Consumers/IntegrationEventConsumerExtensions.cs:189.- G15 Common UI Framework (MudBlazor components, theme, base pages) (members 195): added 21, body 44, lineShift 8. The shared
ChangePasswordCard, the terms-acceptance UI service (ILegalAcceptanceUIService,LegalAcceptanceUIService,LegalSettings),BrowserOriginHandler,ComponentLifetimeExtensionsandIInitialThemeModeSourcewere added from the drift-plan items (Common #513) and the legal feature (#486), anchored by MMCA.Common/Source/Presentation/MMCA.Common.UI/Resources/AuthFieldMessages.cs:19.- G16 Aspire Orchestration & Service Defaults (members 63): added 2, removed 4, body 7, lineShift 10.
BrokerSelectionmoved intoMMCA.Common.Aspire.HostingandLeadingSlashPathPrefixesAttributewas added; ADC'sAdcAppHostSmokeTestsfixture family was removed, anchored by MMCA.Common/Source/Hosting/MMCA.Common.Aspire.Hosting/BrokerSelection.cs:24.- G17 ADC Conference - Domain Model & Module Contracts (members 112): added 1, body 13.
SessionCalendarExportwas added as the shared exportability rule, and the event and question invariants changed in the ADC bug-hunt ninth wave (ADC #254) and the legal feature (#244), anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Shared/Sessions/SessionCalendarExport.cs:9.- G18 ADC Conference - Application & Use Cases (members 364): added 6, body 30, lineShift 19. The event validation rules split into per-field families (
EventDescriptionRules,EventVenueAddressRules,EventVenueMapUrlRules,EventWiFiInfoRules,SponsorTierRules) andUserDeletedSpeakerUnlinkHandlerwas added, from the ADC bug-hunt ninth wave (#254) and the speaker fixes (#239), anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Events/Validation/EventValidationRules.cs:27.- G19 ADC Conference - Infrastructure & Persistence (members 29): body 3.
ConferenceModuleDbSeeder,EventConfigurationandSessionScoringServicechanged in the bug-hunt ninth wave (ADC #254) and multi-replica safety (#256), anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Infrastructure/Persistence/DbContexts/Seeding/ConferenceModuleDbSeeder.cs:574.- G20 ADC Conference - API, gRPC Contracts & Service Host (members 54): added 2, body 11, lineShift 8.
ConferenceBrokerConsumersandConferenceGrpcEndpointswere extracted from the service host, and the controllers changed in the run-7 defects (ADC #255), anchored by MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/ConferenceBrokerConsumers.cs:11.- G21 ADC Conference - UI (members 167): added 4, body 52, lineShift 1. The public session list was split into
PublicSessionEventCatalog,PublicSessionEventScope,PublicSessionBookmarkStateandNewestLoadTracker(TD-16, ADC #264), and most page bodies changed in the test-run-2 defects (#240) and the drift plan (#253), anchored by MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.UI/Pages/Public/Sessions/NewestLoadTracker.cs:14.- G22 ADC Engagement Module (Session Bookmarks) (members 200): added 4, body 25, lineShift 5.
BookmarkCacheEvictionProcessorandBookmarkCacheEvictionSignalpace the session-cache evictions thatUserSessionBookmarkCacheEvictionHandlernow only flags (conference mode, ADC #241), and the user-engagement export gained poll-vote and question-upvote rows, anchored by MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Infrastructure/Caching/BookmarkCacheEvictionProcessor.cs:35.- G26 ADC Engagement Live Layer (Real-Time Polls & Session Q&A) (members 87): body 14, lineShift 2. The moderation and question reads,
HappeningNowandLivePollAuthorizationchanged in the drift plan (ADC #253) and test-run-2 defects (#240), anchored by MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Application/SessionQuestions/UseCases/GetModerationQueue/GetModerationQueueHandler.cs:37.- G23 ADC Identity Module (Users, Profiles, GDPR Export/Erasure) (members 113): added 6, removed 1, body 17.
LegalAcceptanceController,LegalAcceptanceServiceand theLegalAndDataCardprofile card were added with the Terms and Privacy feature (ADC #244), the data export gained poll-vote and upvote rows,SyntheticAccountswas added for the load test, andJwtAudienceleft for Common, anchored by MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.API/Controllers/LegalAcceptanceController.cs:24.- G24 ADC Application Host, UI Shell & Cross-Module Composition (members 17): body 3.
App,MainActivityandMauiProgramchanged in the ADC run-5 defects (#249), anchored by MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI/App.xaml.cs:85.- G27 Device Capability Abstraction Layer (Native Contracts, MAUI, Browser & Fallback Adapters) (members 105): added 2, body 8.
MauiThemeStoreandMauiInitialThemeModeSourcewere added so the MAUI head restores the theme before first paint, and several MAUI services changed in the ADC run-5 and run-6 defects (Common #498, #504), anchored by MMCA.Common/Source/Presentation/MMCA.Common.UI.Maui/Theme/MauiInitialThemeModeSource.cs:12.- G28 Common AI Integration (members 32): body 2.
BoundedChatClientandPiiRedactionGuardrailchanged in the bug-hunt ninth wave (Common #516), anchored by MMCA.Common/Source/Core/MMCA.Common.AI/Chat/BoundedChatClient.cs:65.- G25 Testing & Quality Infrastructure (members 3137): added 215, removed 9, body 321, lineShift 137. The legal feature (ADC #244) and the two bug-hunt waves (Common #516, ADC #254) account for most added and changed test classes; new gates include the ADC route contract (
NavigationContractTests, TD-16, ADC #264) and cross-service host isolation (Common #476), anchored by MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Api/NavigationContractTests.cs:20.- Handled mechanically (no re-authoring): citation remaps 4,387 over 229 part file(s), 381 flagged for a human; 33 more fixed by the residual baseline-text match; 0 relocations; repack moved 1,176 sections, 4 flagged (all 4 resolved by the repack itself: the three
AdcAppHost*orphan headings removed,JwtAudiencesectioned once in g12); fixlinks rewrote 1 anchor.- Authoring pass: 181 units re-authored (16 overview, 1 rollup, 164 sections, the sections on sonnet) across 26 groups, all against real source with
path:linecitations. Spot-checks (evidence-verifier): 5 CONFIRMED (g07, g08, g09, g12, g14 overviews) and 1 DRIFTED (g04 overview, two off-by-one cites corrected to MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/Consumers/IntegrationEventConsumer.cs:71 and:102). A post-apply fix pass then cleared what the authors left: 12 full-path and 17 short-form cites past end-of-file (16 re-anchored by onesource-grounded-author, which also renumbered 40 more stale cites in the same sections and corrected two sentences, and one test-data string reworded), 4 anchors retargeted to g12 forLegalAcceptanceControllerBaseandJwtAudience, theIQueryCacheableadopter claim in five parts, and 108 staleci.ymlcites indevops-cicdanddevops-testing(Common #523 removed 82 lines from it anddevops-staleness.ps1did not flag the file, because Website #241 committed both chapters after that change without renumbering these cites) plus twoui-e2ecoverage claims the workflow no longer makes, found by anevidence-verifierpass over all 189ci.ymlcites.- Outside the type pipeline: 5 of 5
devops-*chapters refreshed (devops-aspire, devops-cicd, devops-iac, devops-runbooks, devops-testing), each because a file it cites has newer commits than the chapter: ADCdeploy.ymlandcost-guard.yml(ADC #264, #261), ADCinfra/main.bicep(comment-only, #261), ADCdr-drill.yml(#245), Commonrelease.yml(#524) and the Common freshness-gate action (#523, #476);devops-testingalso reconciled all 31 per-project test counts to the inventory.
- Coverage gaps (operational files no chapter mentions):
MMCA.ADC/.github/workflows/conference-day-load-test.ymlis now covered indevops-runbooks; the three.bicepfiles underMMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Fixtures/are architecture-test fixtures, not operational files, and stay uncovered by design.- CONCEPT-MAPS.md: unchanged. The one flagged number ("four AI packages" vs the 22-package total) is the same checker false positive as the 2026-10-02 pass and stands (FACTS.md lists exactly four AI packages).
- Verification:
verify.ps1: 0 missing, rubric 34/34, 0 rollup, 0 citation (8,637 full-path cites), 0 anchor (25,923 links), 0 short-cite (15,421 cites); exit 0.- Governance events: none (no new group, no classifier rule).
2. Exceptions log (every deliberate omission, with reason)
2.1 Generated / scaffolded code, not sectioned (134 files)
EF Core migrations (/Migrations/, .Migrations.SqlServer), ModelSnapshot, *.Designer.cs,
*.g.cs, GlobalUsings.g.cs, and AssemblyInfo.cs are excluded by rule (Tools/invtool IsGenerated).
The mechanisms that produce them are taught instead: the DbContext, the migration workflow, and
the .proto/gRPC contracts (see group-07,
group-13, and devops-testing). The full file list is
in 00-inventory.md.
2.2 Per-[Fact] test classes, rolled up by project (2,281 types)
Per the guide's TESTS note, individual test classes are not given per-type sections. The Testing chapter (group-28) instead:
- sections the reusable test infrastructure in full (the 400 types in
MMCA.Common.Testing,.Testing.E2E,.Testing.UI, the shared.Testing.Architecturerule library + bases, now including the six convention/fitness bases added since v1.93.0, the web-vitals collector, the localization resx-parity base, the slice-cohesion base, the markup-snapshot helper, the new contract/route-authorization bases (RouteAuthorizationTestsBase, the OpenAPI/ProblemDetails/ ServiceInfo-versioning contract bases) and the sharedHttpTestDoublesUI harness added since v1.111.0, the sharedProductionHostApplicationFactory<TEntryPoint>/GracefulShutdownTestsBase<TEntryPoint>host bases and theObservabilityConventionTestsBasefitness base added at the v1.135.0 pass, plus the cross-service fixture/data-source bases,DependencyInjectionAssert,TestPolling,ModuleConformanceTestsBase<TModule>and theWebVitalsBudgetadded at the v1.142.0 pass, and the per-repo architecture-fitness test classes plus theGalleryharness), and - rolls the remaining 2,281 per-suite test classes (including the
MMCA.Common.Benchmarksperf-smoke project) into a per-project table (purpose + style: unit / integration / fitness / E2E / component / performance-smoke). Every one of the 2,281 remains individually listed withfile:linein00-inventory.md. This is the only category of first-party type not given its own prose section.
2.3 Sibling-family grouping (sibling families fold into shared sections)
Near-identical families (per-entity Add*/Remove*/Update* commands, *DTOMapper, *CreateRequest,
*Validator, per-type filter strategies, etc.) are taught in one ### A, B, C section that explains
the shared shape once. Every grouped type is still named and cited individually via the section's
File:Line table, so citation coverage is complete (this is what verify.ps1 checks). The 2,624
individually-sectioned types are covered by 2,554 ### sections; the 70-type difference is family grouping.
3. Grouping & ordering verification
- Every type in exactly one group.
classify.ps1assigns all 3,668 nodes via name-level overrides (for the grab-bagMMCA.Common.*Interfaces*/Servicesnamespaces) + ordered namespace-prefix rules; it reports 0 unmapped and the per-group counts sum to 3,668. See00-group-taxonomy.md. - Within-group ascending Level. Each chapter's sections were authored from a pre-sorted, Level- ascending unit table, so no section precedes a same-group type it depends on (ties broken by name).
- Cycles kept whole. 18 of the 19 dependency cycles (SCCs) sit inside a single group, never
split. The one exception is the 19th, added this pass, and it is not a real cycle: the two
identically-named
SelfHttpWarmupTaskclasses (MMCA.ADC.Engagement.Service/SelfHttpWarmupTask.cs:19,G22, andMMCA.ADC.Identity.Service/SelfHttpWarmupTask.cs:19,G23) are unrelated types in different services that neither references the other; the extractor's globally-unique-name fallback cannot distinguish them and links each to the other, producing a phantom 2-node SCC whose members sit in two different groups. Splitting it across the two service chapters is correct, since each chapter teaches its own class. The real cycles were re-verified as whole (including the two new in the v1.128.0 pass, both test-only and both wholly in group-28:MidSaveContextCreatingDbContext/ReentrantSaveInterceptorandFailingSaveInterceptor/OutboxRoutingTestDbContext, all four assignedG25inout/00-assigned.csv): theApplicationDbContext ↔ AuditSaveChangesInterceptor ↔ DomainEventSaveChangesInterceptor ↔ DataSourceModelCacheKeyFactory ↔ OutboxFinalizer ↔ DeferredDispatchcycle (now 6 members, theDeferredDispatchrecord added this pass so the domain-event interceptor can defer a dispatch across the SaveChanges boundary) is wholly in group-07; the Event/Session/Speaker/Category aggregate nav-cycles are wholly in group-17; theAddress/Currencyvalue-object + converter pairs in group-02 (plus polyglot-fitness and the new localization/markup test cycles in group-28). Full list: manifest. - Cross-group forward references are allowed and cross-linked. Because group order is functional
(not a strict global topological sort), some sections reference a first-party type whose home group
comes later. These are correct by construction: every cross-link target is resolved through
_typemap.tsv(type → group file + anchor), so a link can only point at the type's actual home. Representative forward references (lower group → later group), each cross-linked in the text:ErrorType/Result(group-01) →ApiControllerBase/ErrorHttpMapping(group-12) andResultGrpcExtensions(group-13) for the HTTP/gRPC mapping.EntityQueryService(group-03) → the repository contracts andEFRepository(group-07).INavigationPopulator(group-11) → its concrete ADC populators (groups 18/22/23).- The Common base classes (groups 01–16) → their ADC consumers (groups 17–24) throughout. Scope note: this list is representative, not exhaustive; an exhaustive enumeration is unnecessary because the typemap guarantees every link resolves to the correct home group.
4. Rubric coverage matrix
Every one of the 34 categories is explained at least once against real code. "First explained in" is the earliest group chapter (by order) that tags it; many recur and several are also developed in the DevOps/test chapters (noted).
| § | Category | First explained in |
|---|---|---|
| §1 | SOLID Principles | group-02 |
| §2 | Design Patterns | group-01 |
| §3 | Clean Architecture | group-01 |
| §4 | Domain-Driven Design | group-01 |
| §5 | Vertical Slice Architecture | group-02 (developed in groups 17–23) |
| §6 | CQRS & Event-Driven | group-02 (developed in groups 04–05) |
| §7 | Microservices Readiness | group-04 (developed in groups 13–14, devops-iac) |
| §8 | Data Architecture | group-02 (developed in group-07) |
| §9 | API & Contract Design | group-01 (developed in groups 12–13) |
| §10 | Messaging & Integration Architecture | group-04 (developed in group-14) |
| §11 | Security | group-02 (developed in group-08) |
| §12 | Performance & Scalability | group-01 |
| §13 | Observability & Operability | group-02 (developed in devops-aspire) |
| §14 | Testability & Test Strategy | group-03 (developed in group-26, devops-testing) |
| §15 | Best Practices & Code Quality | group-02 (also primer §4) |
| §16 | AI-Native Application Architecture | group-17 (developed in groups 18-19, devops-cicd) |
| §17 | DevOps & Deployment | group-07 (developed in devops-cicd/iac) |
| §18 | UI Architecture & Component Design | group-08 (developed in groups 15, 21) |
| §19 | State Management & Data Flow | group-08 (developed in group-15) |
| §20 | Design System, Theming & Consistency | group-15 (incl. day/dark ThemeService, ADR-028) |
| §21 | Accessibility (a11y) | group-15 (developed in group-26/devops-testing) |
| §22 | Responsive & Cross-Browser/Device | group-15 |
| §23 | Front-End Performance & Rendering | group-15 |
| §24 | Forms, Validation & UX Safety | group-05 (developed in groups 06, 15, 21) |
| §25 | Navigation, Routing & Information Architecture | group-15 |
| §26 | Front-End Security | group-08 |
| §27 | Internationalization & Localization | group-02 (now multi-locale en-US + es per ADR-027, developed in groups 12/15/20/22/23; note in primer §6) |
| §28 | Front-End Testing & Quality | group-15 (developed in group-26) |
| §29 | Resilience, Reliability & Business Continuity | group-04 (developed in devops-runbooks) |
| §30 | Compliance, Privacy & Data Governance | group-02 (developed in group-24) |
| §31 | Cost Efficiency / FinOps | group-04 (developed in devops-cicd) |
| §32 | Dependency & Supply-Chain | group-18 (also primer §4) |
| §33 | Developer Experience & Inner Loop | group-06 (developed in devops-aspire) |
| §34 | Architecture Governance & Documentation | group-02 (also primer §4) |
Result: 34 / 34 categories explained. (verify.ps1 confirms all 34 §N tokens appear across the
chapters. It also reports a 35th distinct §N token, §1798, which is the legal citation
"CCPA §1798.100" in group-24, not a rubric category; ignore it.)
5. Open questions / not determinable from source
IDbSeederhost invocation (group-07). The seeding contract and implementations are inMMCA.Common, but theIHostedService/startup invoker that actually runs seeding at boot lives in consuming-app host code, not inMMCA.Commonsource, so its exact wiring is noted as out-of-scope-for-source rather than asserted.- Engine extension points (Cosmos / SQLite) are supported, with a staged first adoption (ADR-018). All
current production entity configs use the
…SQLServerbase, so in deployed ADC the polyglot paths are not yet live. But the polyglot-persistence framework work (ADR-018) added the unified engine-awareEntityTypeConfiguration<T,TId>base, the cross-sourceCrossSourceSpecification, the Cosmos-index skip in the degrade convention, SQLiteEnsureCreated, and a fitness rule + new test suites (Cosmos config portability, cross-source spec, SQLite init), and ADC Conference'sSession→Cosmos /Room→SQLite move is the staged-but-not-yet-deployed first use. The guide documents these as real, exercised capabilities with honest adoption notes (see primer §2 and group-07), not yet as live production options. - Edge-resolution approximation. The dependency graph is a syntactic (namespace-aware) resolve, not a full semantic compiler bind: ~96% of edges bind by namespace visibility (17,963), the rest by a globally-unique-name fallback (736 edges), and 101 references are dropped as ambiguous. This is accurate enough for the leveling spine but is a documented approximation (manifest accuracy note).
- 64 cross-linked types have no section of their own (measured at the v1.135.0 pass by the
stricter heading-or-table-cell check described in §1). They are named in prose and, in many cases,
linked to with a
#anchorthat resolves nowhere: G07 17 (theEntityTypeConfigurationfamily, seeding, encryption, the repository factory, value generators,IUnitOfWork,ReadRepositoryExtensions), G21 16 (the Conference UI lookup/service contracts), G23 15 (Identity:ChangePassword,DeleteUser,ExportUserData,ModuleApplicationDbContext,Profile, the gRPC adapters), G18 9, G22 5 (the Shared bookmark contracts), G08 2. TheDbContexts.Factoryfamily that sat in this list was written at this pass, which is how the count fell from 107 to 64. Same-name types (severalDependencyInjectionclasses) can hide a hole from a name-based check, so 64 is a floor, not an exact figure: one such hole (MMCA.ADC.Identity.Contracts.DependencyInjection) was found by hand at this pass. - Body drift is not mechanically detectable, and it is real. A section's declaration citation can be corrected from the inventory, but its walkthrough line numbers and its description of behaviour cannot. At the v1.135.0 pass, 199 of the 1,556 individually-sectioned types were declared in one of the 256 non-test source files that changed since the previous sweep. An adversarial spot-check of 8 sections whose declaration line had moved returned 8 DRIFTED, several with inverted behaviour (see the v1.135.0 regeneration note). Eight were repaired at this pass; the rest of the 199 have corrected declaration citations but unverified bodies, and should be treated as the next pass's first task.
- ADR-112 (Catalog owns effective pricing) has no teaching chapter, by design. Its worked example (VariantDiscount, the effective-price computation, the checkout snapshot) lives in MMCA.Store, which 00-index places outside this guide's two codebases. The primer row for ADR-112 links only the ValueObject base it builds on and says so. Logged here as a deliberate omission rather than a coverage gap (2026-09-19); it becomes a gap only if the guide's scope grows to include Store.
6. How to regenerate this audit
# from C:\Projects\MMCA\Tools\invtool
dotnet run -- out ../../MMCA.Common/Source ../../MMCA.Common/Tests ../../MMCA.ADC/Source ../../MMCA.ADC/Tests
pwsh -File classify.ps1 # -> 00-group-taxonomy.md + _groups.tsv (0 unmapped check)
pwsh -File plan.ps1 # -> _typemap.tsv + _units/* + _workplan.json
pwsh -File concat.ps1 # parts/* -> group-NN-*.md
pwsh -File fixanchors.ps1 # inject <a id> aliases for sibling-family members (from _typemap.tsv)
pwsh -File fixanchors2.ps1 # conservative cross-link repair (unique-heading-token match)
pwsh -File verify.ps1 # 0-missing coverage check + rubric 34/34 check
Then copy the refreshed out/00-inventory.md and out/00-dependency-manifest.md into
Docs/Onboarding/ (the 00-group-taxonomy.md is written there directly by classify.ps1).