Add Apollo Federation Composition#9632
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds first-class Apollo Federation v2 subgraph composition support to Fusion by transforming federation SDL into Composite Schema Spec source schemas, stamping each source schema with a connector kind, and updating execution-time configuration parsing/client creation to use that connector metadata.
Changes:
- Introduces an Apollo Federation transformation pipeline in
Fusion.Composition(remove federation infrastructure, generate lookup fields, rewrite keys/requires, stamp@fusion__connector(kind: "Apollo")). - Lifts connector kind into the merged execution schema (
fusion__Schemaenum values) and exposesFusionSchemaDefinition.GetSourceSchemaConnectorKind(...). - Refactors execution configuration parsing to claim whole source schemas (not per-transport), supports multiple configurations per schema, and passes the composed schema into client factories.
Reviewed changes
Copilot reviewed 63 out of 76 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/HotChocolate/Fusion/test/Fusion.Execution.Tests/Execution/Types/FusionSchemaDefinitionConnectorKindTests.cs | Adds tests for GetSourceSchemaConnectorKind behavior (Apollo vs absent/GraphQL/unknown). |
| src/HotChocolate/Fusion/test/Fusion.Execution.Tests/Configuration/ParsersTests.cs | Updates execution configuration parsing tests to new “claim schema” parser model and adds legacy Apollo settings mismatch test. |
| src/HotChocolate/Fusion/test/Fusion.Connectors.ApolloFederation.Tests/snapshots/SchemaTransformationIntegrationTests.Transform_FederationSubgraph_Should_ProduceValidSourceSchema.graphql | Updates snapshot to include @fusion__connector(kind: "Apollo") and directive definition. |
| src/HotChocolate/Fusion/test/Fusion.Connectors.ApolloFederation.Tests/SchemaTransformationIntegrationTests.cs | Renames/aligns test to validate transformed source schema SDL rather than “composite”. |
| src/HotChocolate/Fusion/test/Fusion.Connectors.ApolloFederation.Tests/Configuration/ParsersTests.cs | Updates Apollo connector parser tests to claim by connector kind and use new parser signature/output. |
| src/HotChocolate/Fusion/test/Fusion.Connectors.ApolloFederation.Tests/Configuration/LookupArgumentPathMapperTests.cs | Adds unit tests for mapping FSM selection nodes to representation field paths. |
| src/HotChocolate/Fusion/test/Fusion.Connectors.ApolloFederation.Tests/Configuration/ApolloFederationCompletionTests.cs | Adds tests ensuring Apollo config completion projects lookups/requires and rewriter binding behavior. |
| src/HotChocolate/Fusion/test/Fusion.Connectors.ApolloFederation.Tests/ApolloFederationConnectorTests.cs | Updates configuration constructor expectations after moving lookup/require projection to completion. |
| src/HotChocolate/Fusion/test/Fusion.Connectors.ApolloFederation.Compliance.Tests/Infrastructure/FusionGatewayBuilder.cs | Stops emitting legacy extensions.apolloFederation settings and uses transformed source schema SDL. |
| src/HotChocolate/Fusion/test/Fusion.Connectors.ApolloFederation.Compliance.Tests/HotChocolate.Fusion.Connectors.ApolloFederation.Compliance.Tests.csproj | Removes dependency on the deleted Fusion.Composition.ApolloFederation project. |
| src/HotChocolate/Fusion/test/Fusion.Composition.Tests/snapshots/SourceSchemaMergerTests.Merge_FourNamedSchemas_AddsFusionDefinitions.graphql | Updates snapshot to include fusion__connector directive definition on enum values. |
| src/HotChocolate/Fusion/test/Fusion.Composition.Tests/SourceSchemaMerger.ConnectorDirective.Tests.cs | Adds tests for lifting connector kind onto fusion__Schema enum values. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_SimpleEntity.md | Updates federation transformer snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_RequiresDirective.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_ProvidesDirective.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_NonResolvableKey.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_NonResolvableAndResolvableKeys.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_NestedObjectKey.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_NestedListKey.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_MultipleKeys.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_KeyResolvableArgument.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_FullIntegration.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_ExternalDirective.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_DeeplyNestedListKey.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/snapshots/FederationSchemaTransformerTests.Transform_CompositeKey.md | Updates snapshot to include connector stamping. |
| src/HotChocolate/Fusion/test/Fusion.Composition.ApolloFederation.Tests/HotChocolate.Fusion.Composition.ApolloFederation.Tests.csproj | Switches tests to reference Fusion.Composition after deleting separate federation composition project. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Execution/FusionRequestExecutorManager.cs | Moves client configuration creation into a schema interceptor and changes how config is attached to schema features. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Execution/FusionOptions.cs | Sets EnableSemanticIntrospection default initializer. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Clients/SourceSchemaClientFactory.cs | Updates client factory API to accept the composed FusionSchemaDefinition. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Clients/ISourceSchemaClientFactory.cs | Updates factory interface to accept the composed FusionSchemaDefinition. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Clients/HttpSourceSchemaClientFactory.cs | Updates HTTP client factory override signature to accept schema. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Clients/DefaultSourceSchemaClientScope.cs | Passes schema through to factories when creating clients. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Configuration/Parsers/DefaultGraphQLClientConfigurationParser.cs | Renames built-in parser and adapts it to new “claim schema” parsing contract. |
| src/HotChocolate/Fusion/src/Fusion.Execution/Configuration/ISourceSchemaClientConfigurationParser.cs | Changes parser API to claim a source schema and emit multiple configs. |
| src/HotChocolate/Fusion/src/Fusion.Execution.Types/Metadata/SourceSchemaInfo.cs | Extends SourceSchemaInfo to include ConnectorKind. |
| src/HotChocolate/Fusion/src/Fusion.Execution.Types/HotChocolate.Fusion.Execution.Types.csproj | Adds IVT to the Apollo Federation connector assembly. |
| src/HotChocolate/Fusion/src/Fusion.Execution.Types/FusionSchemaDefinition.cs | Stores connector kind per source schema and exposes GetSourceSchemaConnectorKind. |
| src/HotChocolate/Fusion/src/Fusion.Execution.Types/FusionBuiltIns.cs | Adds built-in name constant for fusion__connector. |
| src/HotChocolate/Fusion/src/Fusion.Execution.Types/Completion/CompositeSchemaBuilder.cs | Captures connector kind when building the source schema lookup. |
| src/HotChocolate/Fusion/src/Fusion.Connectors.InMemory/InMemorySourceSchemaClientFactory.cs | Updates in-memory client factory override signature to accept schema. |
| src/HotChocolate/Fusion/src/Fusion.Connectors.ApolloFederation/LookupFieldInfo.cs | Updates docs to reflect lookups now refer to the source schema. |
| src/HotChocolate/Fusion/src/Fusion.Connectors.ApolloFederation/LookupArgumentPathMapper.cs | Adds FSM selection-node → representation path mapping helper. |
| src/HotChocolate/Fusion/src/Fusion.Connectors.ApolloFederation/HotChocolate.Fusion.Connectors.ApolloFederation.csproj | Removes dependency on deleted federation composition project. |
| src/HotChocolate/Fusion/src/Fusion.Connectors.ApolloFederation/DependencyInjection/ApolloFederationFusionGatewayBuilderExtensions.cs | Updates DI extension docs for new connector-kind based behavior. |
| src/HotChocolate/Fusion/src/Fusion.Connectors.ApolloFederation/ApolloFederationSourceSchemaClientFactory.cs | Uses completed configuration’s rewriter and updates signature to accept schema. |
| src/HotChocolate/Fusion/src/Fusion.Connectors.ApolloFederation/ApolloFederationSourceSchemaClientConfiguration.cs | Moves federation lookup/require projection into schema completion and exposes per-schema rewriter. |
| src/HotChocolate/Fusion/src/Fusion.Connectors.ApolloFederation/ApolloFederationClientConfigurationParser.cs | Claims schema based on connector kind and parses http transport block. |
| src/HotChocolate/Fusion/src/Fusion.Composition/WellKnownDirectiveNames.cs | Adds fusion__connector directive name constant. |
| src/HotChocolate/Fusion/src/Fusion.Composition/WellKnownArgumentNames.cs | Adds kind argument name constant. |
| src/HotChocolate/Fusion/src/Fusion.Composition/SourceSchemaPreprocessor.cs | Runs federation subgraph preprocessing (transform + stamping) when federation is detected. |
| src/HotChocolate/Fusion/src/Fusion.Composition/SourceSchemaMerger.cs | Adds fusion__connector directive definition and lifts connector kind onto schema enum values. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.resx | Adds localized strings for connector directive descriptions. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.Designer.cs | Adds generated accessors for new connector directive resource strings. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Logging/LogEntryCodes.cs | Adds log entry codes for federation validation errors. |
| src/HotChocolate/Fusion/src/Fusion.Composition/HotChocolate.Fusion.Composition.csproj | Embeds federation resources and adds IVT for federation composition tests. |
| src/HotChocolate/Fusion/src/Fusion.Composition/FusionBuiltIns.cs | Registers connector directive as a source-schema directive. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Definitions/FusionConnectorMutableDirectiveDefinition.cs | Adds enum-value @fusion__connector(kind:) directive definition for execution schema. |
| src/HotChocolate/Fusion/src/Fusion.Composition/Definitions/ConnectorMutableDirectiveDefinition.cs | Adds schema-level @fusion__connector(kind:) directive definition for source schemas. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/TransformRequiresToRequire.cs | Implements federation @requires → composite-spec @require argument rewrite. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/StampConnectorKind.cs | Stamps @fusion__connector(kind: "Apollo") onto transformed federation source schemas. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/RewriteKeyDirectives.cs | Strips resolvable: from @key directives. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/RemoveFederationInfrastructure.cs | Removes federation infra types/fields/directives from source schema. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/RemoveExternalFields.cs | Removes @external fields from types. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/Properties/FederationResources.resx | Adds federation validation/parse error resource strings. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/Properties/FederationResources.Designer.cs | Adds generated accessors for federation resource strings. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/GenerateLookupFields.cs | Generates @lookup fields + @is mapping for resolvable federation keys. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/FederationTypeNames.cs | Adds federation type name constants. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/FederationSchemaTransformer.cs | Adds federation-schema detection and routes validation through CompositionLog. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/FederationSchemaAnalyzer.cs | Implements federation v2 checks and logs composition errors (v1/unsupported directives). |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/FederationFieldNames.cs | Adds federation field name constants. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/FederationDirectiveNames.cs | Adds federation directive name constants. |
| src/HotChocolate/Fusion/src/Fusion.Composition/ApolloFederation/EntityKeyInfo.cs | Adds a small model for key directive info. |
| src/HotChocolate/Fusion/src/Fusion.Composition.ApolloFederation/HotChocolate.Fusion.Composition.ApolloFederation.csproj | Deletes the standalone federation composition project. |
| src/HotChocolate/Fusion/HotChocolate.Fusion.slnx | Removes deleted federation composition project from solution. |
| src/All.slnx | Removes deleted federation composition project from umbrella solution. |
| .gitignore | Adds .work/ to ignored paths. |
Files not reviewed (1)
- src/HotChocolate/Fusion/src/Fusion.Composition/Properties/CompositionResources.Designer.cs: Language not supported
Comments suppressed due to low confidence (2)
src/HotChocolate/Fusion/src/Fusion.Execution/Configuration/Parsers/DefaultGraphQLClientConfigurationParser.cs:33
DefaultGraphQLClientConfigurationParsercurrently claims any source schema that hastransports.http, even when the composed schema declares a non-GraphQL connector kind (e.g.Apollo). This can silently fall back to the default GraphQL client if the intended connector/parser wasn’t registered; consider checkingschema.GetSourceSchemaConnectorKind(sourceSchema.Name)and returningfalsewhen it’s a non-null/non-GraphQL kind so misconfiguration surfaces as "No parser claimed source schema ...".
src/HotChocolate/Fusion/src/Fusion.Execution/Configuration/Parsers/DefaultGraphQLClientConfigurationParser.cs:29- The new execution test expects the default parser to fail loudly when a source schema contains legacy
extensions.apolloFederationsettings but the composed schema isn’t stamped with@fusion__connector(kind: "Apollo").TryParsecurrently ignores theextensionsblock entirely and will happily claim the schema viatransports.http; add an explicit check forextensions.apolloFederationhere and throw anInvalidOperationExceptionwith a migration hint (as asserted by the test).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This was referenced May 13, 2026
Open
This was referenced May 21, 2026
This was referenced May 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.