Repository navigation
move(core): split Hosting.AspNetCore — the portal host middleware leaves for MeshWeaver.Plugins (delete half) - #7310
Conversation
…te half) memex/MeshModulesPublish.targets and memex/aspire/Memex.Portal.ServiceDefaults are MeshWeaver.Plugins' now (Plugins#4333); memex/Directory.Build.props served only them. Gone with them: the slnx entries, MeshWeaver.Hosting.Test's ServiceDefaults reference and AnArbitraryUrlFetcherGivingUpIsAWarningTest (moved to Memex.Portal.Shared.Test), .aspire/settings.json and two .gitignore lines that pointed at memex/aspire paths core no longer has, and 'memex' from every source guard's scanned roots. Roslynator: five PackageVersion pins no core project restores, whose only use was a PackageReference Update= block in MeshWeaver.Layout.csproj that matched no Include. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…les-publish-targets
…r MeshWeaver.Plugins (split, delete half) MeshWeaver.Hosting.AspNetCore keeps the endpoint-contribution hook (a satellite compiles its module against it) and the Portal/ types published Plugins module bytes bind — PortalApplication, PortalErrorSink, UserIdentityCache/UserIdentityLookup — with what their signatures name (ICircuitContextAccessor, UserDirectoryReading, split out of UserDirectoryReadiness.cs). Measured from the TypeRefs of all 42 registry module DLLs: no forwarder can point from core into Plugins, so a bound type cannot leave. The host-only rest moves to MeshWeaver.Plugins as MeshWeaver.Hosting.AspNetCore.Portal, namespace unchanged: UserContextMiddleware, ValidatedTokenCache, MeshUserProjection, VUserHelper, UserDirectoryReadiness, RequestNamingExceptionHandling, NonfileRouteConstraint, ArticleExtensions, Authentication/AuthenticationOptions. The ContentCollections reference leaves with ArticleExtensions; Markdown.Export.Contract stays with PortalApplication. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oves to Plugins (#7310) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Test Results 25 files ±0 25 suites ±0 56m 4s ⏱️ -35s Results for commit 5081359. ± Comparison against base commit 3c37044. This pull request removes 59 and adds 22 tests. Note that renamed tests count towards both.♻️ This comment has been updated with latest results. |
…space; why a checkout switch failed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Removing 13 public types without forwarders depends on Plugins#4344, which returned 404, leaving replacement implementations, consumer migration, and prerequisite merge status independently unverifiable.
No open issues 🎉
What changed in this PR
This PR removes the host-only portion of MeshWeaver.Hosting.AspNetCore as the deletion half of the move to MeshWeaver.Plugins#4344. Core retains the endpoint hooks and portal types needed by published modules, preserving their existing assembly identities.
Changes:
- Removes portal middleware, authentication options, routing helpers, and readiness infrastructure relocated to Plugins.
- Keeps
UserDirectoryReadingin core as a separate file and removes the unusedContentCollectionsreference. - Records 13 type departures and updates architecture documentation to explain the split and new locations.
| File | Description |
|---|---|
src/MeshWeaver.Hosting.AspNetCore/Portal/VUserHelper.cs |
Removes the relocated virtual-user provisioning helper. |
src/MeshWeaver.Hosting.AspNetCore/Portal/ValidatedTokenCache.cs |
Removes the relocated token-validation cache. |
src/MeshWeaver.Hosting.AspNetCore/Portal/UserIdentityCache.cs |
Updates XML comments to identify readiness code in Plugins. |
src/MeshWeaver.Hosting.AspNetCore/Portal/UserDirectoryReading.cs |
Preserves the directory-reading record in its existing namespace. |
src/MeshWeaver.Hosting.AspNetCore/Portal/UserDirectoryReadiness.cs |
Removes the relocated readiness service; retains its record separately. |
src/MeshWeaver.Hosting.AspNetCore/Portal/UserContextMiddleware.cs |
Removes the relocated request identity middleware. |
src/MeshWeaver.Hosting.AspNetCore/Portal/RequestNamingExceptionHandling.cs |
Removes the relocated request-naming and exception helpers. |
src/MeshWeaver.Hosting.AspNetCore/Portal/NonfileRouteConstraint.cs |
Removes the relocated route constraint and endpoint extensions. |
src/MeshWeaver.Hosting.AspNetCore/Portal/MeshUserProjection.cs |
Removes the relocated user-profile projection helper. |
src/MeshWeaver.Hosting.AspNetCore/Portal/Authentication/AuthenticationOptions.cs |
Removes the relocated authentication configuration types. |
src/MeshWeaver.Hosting.AspNetCore/Portal/ArticleExtensions.cs |
Removes the relocated author-name formatting helper. |
src/MeshWeaver.Hosting.AspNetCore/MeshWeaver.Hosting.AspNetCore.csproj |
Drops ContentCollections and documents retained dependencies. |
src/MeshWeaver.Documentation/Data/Architecture/UserDirectoryOpensAtStart.md |
Updates the readiness service’s documented location. |
src/MeshWeaver.Documentation/Data/Architecture/TokenValidationHotPath.md |
Updates middleware and cache source locations. |
src/MeshWeaver.Documentation/Data/Architecture/MeshRestApiContract.md |
Documents the exception handler’s new namespace and project. |
src/MeshWeaver.Documentation/Data/Architecture/CarvingProjectsOutOfCore.md |
Explains the compatibility evidence and namespace transition. |
scripts/type-forwards.allow |
Adds 13 PR-scoped entries for departed host types. |
Review effort: Balanced
…l-split # Conflicts: # src/MeshWeaver.Documentation/Data/Architecture/CarvingProjectsOutOfCore.md
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing. Review the Copilot code review billing settings.
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing. Review the Copilot code review billing settings.
This is the DELETE half of splitting
MeshWeaver.Hosting.AspNetCore. Its ADDITION half is Systemorph/MeshWeaver.Plugins#4344. It is separate from the test-container and voice-gateway pair (#7306).Stacked on #7297. The base is
chore/core-drops-modules-publish-targets, because core'smemex/aspire/Memex.Portal.ServiceDefaultsusesUserDirectoryReadiness, and #7297 deletes that project. This PR stays a draft until three things have landed, in this order:main.Pairs-with: Systemorph/MeshWeaver.Plugins#4344
The rule this follows: published bytes must still link
A
[TypeForwardedTo]can only point at an assembly the forwarding assembly references, and core never references MeshWeaver.Plugins. So a type may leave core for Plugins only if no published plugin or satellite binary binds it by assembly name. I measured that rather than inferring it:main, with fix(#4296): a negated path is a FILTER, never the anchor it excludes #4333) and read everyTypeRefthey hold intoMeshWeaver.Hosting.AspNetCorefrom their metadata.MeshEndpointProviderAttribute(Courses, Mail.Gmail, Mail.MicrosoftGraph, Mcp, Teams, WhatsApp),McpConfiguration(Mcp) andSessionHubResolver(Mcp).Portaltypes:PortalApplication(AppleMessages, Blazor.Chat, Courses, Mail.Gmail, Mail.MicrosoftGraph, Teams, WhatsApp),PortalErrorSink(Blazor.Chat), andUserIdentityCache/UserIdentityLookup(Mail.MicrosoftGraph).Systemorphorg forMeshWeaver.Hosting.AspNetCorefound one satellite, MeshWeaver.SocialMedia. ItsMeshWeaver.Socialmodule and suite use only the root namespace (the endpoint hook andMapMeshModuleEndpoints). A search forMarkdown.Exportoutside core and Plugins found nothing compiled.Portalnamespace.What stays
MeshEndpointProviderAttribute,ModuleEndpointDataSource,MeshModuleEndpointExtensions,MeshModuleEndpointMetadataandMeshModuleStaticAssetExtensionswith its records.McpConfigurationandSessionHubResolver.Portaltype above, plus what their signatures name:ICircuitContextAccessor/CircuitContextAccessor,PortalErrorReporting, andUserDirectoryReading. That record is split out ofUserDirectoryReadiness.csinto its own file, becauseUserIdentityCache.Readingreturns it.MeshWeaver.Markdown.Export.Contractstays, becausePortalApplicationneeds it. It did not lose its only core consumer.What leaves
These are host code, and no published binary binds any of them:
UserContextMiddleware,ValidatedTokenCache,MeshUserProjectionandVUserHelperUserDirectoryReadinessRequestNamingExceptionHandlingandRequestNameNonfileRouteConstraintandNonfileRouteConstraintExtensionsArticleExtensionsAuthentication/AuthenticationOptions,ExternalProviderConfigandAuthenticationProvidersThey are now at Plugins
src/MeshWeaver.Hosting.AspNetCore.PortalHost, under the NEW namespaceMeshWeaver.Hosting.AspNetCore.PortalHost. Keeping the old namespace failed on the Plugins module-bundle build, which compiles against the sealed image and not a core checkout. It reported CS0436 against this assembly's still-exported names. The full account is in Plugins#4344 and inCarvingProjectsOutOfCore. TheContentCollectionsreference leaves withArticleExtensions.scripts/type-forwards.allowgets one entry per departed type, 13 in total. Each states that no shipped module holds theTypeRef, which the measurement above backs, so no epoch is declared and no break is claimed.Local gates
MeshWeaver.Hosting.AspNetCoreandMeshWeaver.Documentation.Testbuild Release-warnaserrorwith 0 warnings and 0 errors.DocumentationLinkIntegrityTest,PackageFamiliesMoveTogetherGuard,ArchitectureTopicMapTestandNoLiteralNulInSourceGuardpass 13 of 13 (trx).check-type-forwards.pyagainst the base reported exactly these 13 departures before the allow entries, and reports OK after them.origin/main(41d0dd5) builds against this branch with no other repository.MeshWeaver.Socialbuilds Release-warnaserrorwith 0 warnings and 0 errors.MeshWeaver.Social.Testbuilds with 0 errors. Its 34xUnit1069warnings are demoted by that repository's own props.SocialModuleContributionTestpasses 3 of 3 (trx).Not verified
platform-compatandplatform-ladder-compat) were not run locally. They will measure the deployed bundles against this build in CI.Removal owed once this lands
MeshWeaver.Plugins keeps ONE transitional allow key for this assembly's old type:
MeshWeaver.Hosting.AspNetCore.Portal.NonfileRouteConstraint.ExcludedPrefixes, insrc/MeshWeaver.PathResolution.Test/NoStaticCollectionsTest.csandsrc/Memex.Hosts.Test/NoStaticCollectionsTest.cs(added back by Plugins#4344). The guard ignores keys whose type is absent, so the key becomes inert as soon as this delete is in the pinned platform set. Delete both lines in the first Plugins PR after that pin moves. The Plugins copy is aFrozenSetand needs no key.Recycles: none. Nothing a per-node hub serves changes.
🤖 Generated with Claude Code