Add contract-derived OpenAPI operation metadata - #796
Merged
Conversation
Co-authored-by: AndreaCuneo <5227688+AndreaCuneo@users.noreply.github.com>
Co-authored-by: AndreaCuneo <5227688+AndreaCuneo@users.noreply.github.com>
Copilot created this pull request from a session on behalf of
AndreaCuneo
July 26, 2026 09:28
View session
AndreaCuneo
marked this pull request as ready for review
July 26, 2026 09:28
Contributor
There was a problem hiding this comment.
Pull request overview
Adds transport-neutral, contract-derived API taxonomy so generated HTTP + gRPC surfaces share stable grouping and operation naming, improving OpenAPI output and downstream client generation stability.
Changes:
- Introduces
[ApiTag("...")]with namespace-last-segment defaulting. - Minimal API generator now emits
.WithTags(...)+.WithName(...)for all endpoints and reportsARKMF016on duplicate operation names. - gRPC generator uses
[ApiTag]as the fallback service grouping when[ServiceGroup]is absent; docs/tests updated accordingly.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/Ark.Tools.MediatorFramework.Tests/GeneratorSnapshotTests.cs | Extends generator snapshot coverage for tags, operation names, duplicate detection, and gRPC fallback grouping. |
| src/mediator-framework/Ark.Tools.MediatorFramework/ApiTagAttribute.cs | Adds new public attribute to override default API tag/group derivation. |
| src/mediator-framework/Ark.Tools.MediatorFramework.MinimalApi.Generators/MinimalApiEndpointGenerator.cs | Emits OpenAPI metadata (tags/name) and adds ARKMF016 duplicate operation name diagnostic. |
| src/mediator-framework/Ark.Tools.MediatorFramework.Grpc.Generators/GrpcEndpointGenerator.cs | Uses [ApiTag] as grouping fallback when [ServiceGroup] is not present. |
| samples/Ark.MediatorFramework.Sample/src/Ark.MediatorFramework.Sample.Application/GreetingContracts.cs | Updates sample contract to demonstrate tagging. |
| docs/mediator-framework/progress/tasks/README.md | Marks NET-06 as completed in progress tracking. |
| docs/mediator-framework/progress/tasks/aspnetcore/NET-06-openapi-tags-operation-names.md | Checks off acceptance criteria for NET-06 task. |
| docs/mediator-framework/progress/tasks.md | Marks T12.1 as completed. |
| docs/mediator-framework/design.md | Documents [ApiTag] behavior and new diagnostic ARKMF016. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
AndreaCuneo
requested changes
Jul 26, 2026
… fix ARKMF016 full type names; document GrpcMethod default Co-authored-by: AndreaCuneo <5227688+AndreaCuneo@users.noreply.github.com>
AndreaCuneo
approved these changes
Jul 26, 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.
Generated mediator endpoints lacked stable OpenAPI tags and operation IDs, producing flat API documentation and unreliable generated client method names. gRPC grouping also did not share HTTP taxonomy.
[ApiTag("...")]..WithTags(...)and.WithName(...)for all endpoint shapes.ARKMF016for duplicate operation names.[ApiTag]as the service-group fallback;[ServiceGroup]remains authoritative.