Skip to content

Add Apollo Federation Composition#9632

Merged
michaelstaib merged 7 commits into
mainfrom
mst/apollo-fed-composition
May 1, 2026
Merged

Add Apollo Federation Composition#9632
michaelstaib merged 7 commits into
mainfrom
mst/apollo-fed-composition

Conversation

@michaelstaib
Copy link
Copy Markdown
Member

No description provided.

Copilot AI review requested due to automatic review settings May 1, 2026 12:44
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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__Schema enum values) and exposes FusionSchemaDefinition.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

  • DefaultGraphQLClientConfigurationParser currently claims any source schema that has transports.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 checking schema.GetSourceSchemaConnectorKind(sourceSchema.Name) and returning false when 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.apolloFederation settings but the composed schema isn’t stamped with @fusion__connector(kind: "Apollo"). TryParse currently ignores the extensions block entirely and will happily claim the schema via transports.http; add an explicit check for extensions.apolloFederation here and throw an InvalidOperationException with a migration hint (as asserted by the test).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@michaelstaib michaelstaib merged commit 82d77d0 into main May 1, 2026
268 of 273 checks passed
@michaelstaib michaelstaib deleted the mst/apollo-fed-composition branch May 1, 2026 15:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants