Skip to content

v4.2.0 - #189

Open
chullybun wants to merge 24 commits into
mainfrom
mcp-sample
Open

v4.2.0#189
chullybun wants to merge 24 commits into
mainfrom
mcp-sample

Conversation

@chullybun

@chullybun chullybun commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

CoreEx v4.2.0

Framework release scope follows CHANGELOG.md, with Product Search and MCP demonstrations showing the new capabilities in a distributed sample.

Framework enhancements

  • Single-use HTTP request builders: Send(method, uri) and Get/Post/Put/Patch/Delete shortcuts, WithJson for JSON and WithContent for explicit content. Body helpers are also available on HttpRequestMessage. Duplicate body assignments, repeated/concurrent execution and configuration after execution starts throw InvalidOperationException. PATCH does not imply JSON Merge Patch.
  • WithStatusResult / WithErrorStatus, including validated builders, intercept selected statuses before deserialization/validation. ValidatedHttpRequestBuilder<T> integrates response validation and automatic response disposal.
  • HttpResponseMessage.GetStringAsync() / ToStringResultAsync() and corresponding builder terminals provide raw response text, returning null for successful empty/204 responses.
  • Host-builder AddNamedHttpClient() / AddHttpClient() share idempotency, service discovery and resilience with typed clients. Separate configuration-section support augments SDK-owned named clients; existing registrations or callbacks can supply base addresses.
  • IEfDb.SqlQuery<T>(SqlStatement, params object[]) provides deferred, parameterized, composable scalar/unmapped EF queries using the existing context and transaction. CoreEx tenant/logical-delete filters are not automatic.
  • ReferenceDataOrchestrator.PrefetchAsync(IEnumerable<Type>) validates all types before loading, deduplicates requests and honors configured parallelism. Name-based prefetch checks cancellation immediately.
  • Added a predicate overload for validation DependsOn: a rule runs only when the dependency is non-default, has no validation error, and satisfies the additional condition.
  • Free-text $search across QueryArgs, configurable keyword/full-text/semantic/hybrid parsing, query schema, HTTP helpers, MVC/Minimal API metadata, NSwag and GraphQL-lite list roots. Keyword predicates execute through QueryExtensions.Where; repositories own ranked retrieval. Explicit $orderby is rejected for ranked search, and unconfigured search is rejected.

Behavior changes, fixes and maintenance

  • String-specific Required() rejects empty/whitespace strings as well as null with ValidationException.
  • HTTP registration binds resilience settings from the nested Resilience section rather than the parent client section.
  • GraphQL-lite search parsing errors preserve actionable details in extensions.messages["$search"] while retaining SEARCH_PARSE_ERROR. Regression coverage includes unsupported search, length/term limits, custom validation and aliased error paths.
  • SQL Server/PostgreSQL root unit-of-work transactions honor DatabaseArgs.IsolationLevel; nested savepoints inherit parent isolation.
  • WithQuery(QueryArgs) now forwards IsIncludeText and IsIncludeInactive.
  • Framework/template dependency updates include Aspire 13.6.1, EF/.NET servicing and FusionCache 2.9.0; PKCS 10.0.13 and MessagePack 2.5.307 overrides remain. Aspire 13.6.2 is not included.
  • Fixed CI restore's NU1902 failure by explicitly referencing MessagePack 2.5.307 in CoreEx.UnitTesting and sample/template MockHost. Central version entries alone do not pin transitive packages; no audit warning suppression was added.
  • SQL guidance now favors parameterized embedded resources for all application-owned static SQL; FromText is reserved for runtime-generated SQL.
  • Included scaffold command/skill descriptions and AppHost cleanup.

Product Search demonstration

  • Products-owned search exposed through REST and GraphQL-lite, with descriptions, structured filters and price constraints.
  • Exact pgvector cosine-distance retrieval using pinned local Ollama/Nomic embeddings behind an Application-owned adapter.
  • Independent PostgreSQL full-text retrieval and opt-in Hybrid RRF (k=60, up to 100 candidates per branch), eligible exact-SKU priority and deterministic ordering/paging.
  • Explicit rebuild/readiness and asynchronous outbox/relay/Service Bus/subscriber reconciliation across product creation, updates, activation and logical deletion, including stale-write/inference-race handling.
  • Fixed hybrid-search final candidate lookup on .NET 8 by using list-based membership rather than array Contains, avoiding unsupported span expressions during EF query evaluation.
  • Shared mountain-bike catalog, interactive runner search/setup, provenance and curated relevance evaluation. Historical v1/pre-SKU-rename v2 observations are not current-catalog quality gates; HNSW benchmarking remains future work.
  • Updated setup, architecture, lifecycle, evaluation and operational documentation.

MCP demonstration

  • Stateless Streamable HTTP Contoso.Mcp facade over real Products/Shopping APIs, wired through Aspire service discovery.
  • search_products forwards search text, category/subcategory/brand and inclusive price filters; get_product_search_options discovers live codes. MCP owns no database querying, embeddings or indexes.
  • Structured product and basket lifecycle tools: list/create/read baskets, add/update/remove items, discounts, shipping address and checkout through the existing inventory/outbox flow.
  • Direct tool coverage for forwarding, filtering, encoding, validation, errors and schema; SDK-driven HTTP E2E for discovery/basket lifecycle and separate real asynchronous product indexing coverage.
  • samples/docs/search.md includes MCP Inspector and Copilot CLI checks for discovery, structured filters and evidence-grounded responses. Deterministic tool/protocol tests are distinct from exploratory, model-dependent tool-selection evaluation.
  • The unauthenticated MCP host is local-development only; manual search checks are read-only and automated E2E setup requires disposable infrastructure.

Verification

  • CI passed for commit 13cab230, including the .NET 8 hybrid-search fix: https://github.com/Avanade/CoreEx/actions/runs/39486475035. This predates the latest GraphQL fix and documentation commit e9e32f2f; its CI result remains pending.
  • All 183 GraphQL unit tests passed locally on .NET 10 after the latest fix; the four new regression cases failed before the fix.
  • All 173 Products API tests passed locally on each of .NET 8, 9 and 10 after the hybrid-search fix (519 total).
  • 143 HTTP unit tests passed during API finalization; 21 MCP ProductSearchToolTests passed after the dependency fix and AppHost edits.
  • Full solution restore passed with CI=true across target frameworks; multi-target CoreEx.UnitTesting build passed with zero warnings/errors.
  • Template validation passed 26/26 scenarios after the MockHost fix; patched MessagePack resolution was confirmed in CoreEx.UnitTesting and sample MockHost.
  • Full infrastructure E2E was not rerun locally for these final fixes; the successful CI run above provides the broader integration checks.

Changelog additions in this update

  • Added the DependsOn predicate overload. A rule now runs only when its dependency is non-default, has no validation error, and satisfies the additional predicate.
  • Added AI guidance and reference-data documentation for implicit code-to-concrete-type conversion, annotated contract code properties, and the distinction between conversion and validation.
  • Pinned local development, CI and publishing to the stable .NET SDK via global.json; updated nuget-publish.ps1 to build before packing and remove matching package versions from the local NuGet cache by default.

The latest commit 7a5eb50b adds DependsOn predicate support, tests and the changelog updates. All 116 CoreEx.Validation unit tests passed on .NET 10; CI for this latest commit has not yet completed.

chullybun and others added 14 commits October 13, 2026 06:41
…P sample and docs updates

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Wire configurable keyword and ranked search through querying, HTTP, OpenAPI and GraphQL. Update the Products and MCP samples, tests and querying documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Add a beginner-friendly living guide covering embeddings, pgvector, retrieval, indexing, evaluation and implementation status.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Manage search snapshots through provider unit-of-work isolation, add typed reference-data prefetch, and prepare search projections explicitly in test fixtures. Reuse CoreEx HTTP configuration for SDK-owned client names.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Maintain search projections through globbed product events, publish explicit backfill readiness, and load SQL from embedded resources. Add a reusable IEfDb SqlQuery bridge with parameter binding and shared transaction coverage.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Adopt DbEx 3.3.1 and patched dependency versions across framework and templates. Add opt-in net10 local builds, build-output cleanup, and leaner template validation. Preserve shared feed packages and publish only packages generated by the current run.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Capture reviewed catalog judgments and a real-model baseline, isolate evaluation data setup, and add manual/monthly reporting with retained artifacts.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Introduce independently maintained PostgreSQL full-text retrieval with exact-SKU priority and tuning-only relevance evaluation. Separate product query orchestration from CRUD and centralize server search-mode resolution.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Combine bounded lexical and semantic retrieval with reciprocal rank fusion. Expand the reviewed demo catalog and evaluation set, share catalog and reference data across demo setup, bootstrap Shopping through its sync adapter, and target the E2E Runner at net10. Normalize internal catalog SKUs without artificial DEMO prefixes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Add search-session schema caching and catalog bootstrap progress, enable Hybrid in Aspire, and resolve local target frameworks early for Visual Studio.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Expose structured category, subcategory, brand and price filters on the MCP product search tool, add a live filter-options discovery tool, and cover the new contract with focused Aspire tests.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Add single-use fluent HTTP request execution, explicit JSON/content bodies and verb shortcuts; update callers, coverage, SQL resource guidance and MCP testing documentation. Complete the v4.2.0 changelog.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 20, 2026 17:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Broad framework, database, search, and MCP changes need human review; the moderate GraphQL error-detail issue remains unresolved.

No open issues 🎉

What changed in this PR

CoreEx v4.2.0 expands HTTP execution, free-text search, and database integration, with Product Search and MCP demonstrations.

Changes:

  • Centralizes framework targeting and updates dependencies.
  • Extends HTTP, search metadata, and transaction-isolation support.
  • Adds product-search persistence, lifecycle synchronization, and MCP hosting.

Outstanding issue — moderate: src/CoreEx.Data.GraphQL/GraphQLEngine.cs:367 returns the generic search-parser exception message, discarding actionable details in Messages. Preserve those details while retaining SEARCH_PARSE_ERROR.

File Description
tests/​Directory.Build.props Applies shared framework policy.
tests/​CoreEx.Validation.Test.Unit/​CoreEx.Validation.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.UnitTesting.Test.Unit/​CoreEx.UnitTesting.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Test.Unit/​Http/​HttpClientTests.cs Exercises named-client registration.
tests/​CoreEx.Test.Unit/​GlobalUsing.cs Adds HTTP test imports.
tests/​CoreEx.Test.Unit/​CoreEx.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.RefData.Test.Unit/​CoreEx.RefData.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Events.Test.Unit/​CoreEx.Events.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.DomainDriven.Test.Unit/​CoreEx.DomainDriven.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Database.Test.Unit/​CoreEx.Database.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Database.SqlServer.Test.Unit/​GlobalUsing.cs Adds transaction-test imports.
tests/​CoreEx.Database.SqlServer.Test.Unit/​CoreEx.Database.SqlServer.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Database.SqlServer.Test.Console/​CoreEx.Database.SqlServer.Test.Console.csproj Inherits framework targets.
tests/​CoreEx.Database.Postgres.Test.Unit/​GlobalUsing.cs Adds database-test imports.
tests/​CoreEx.Database.Postgres.Test.Unit/​CoreEx.Database.Postgres.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Database.Postgres.Test.Console/​CoreEx.Database.Postgres.Test.Console.csproj Inherits framework targets.
tests/​CoreEx.Data.Test.Unit/​CoreEx.Data.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Data.GraphQL.Test.Unit/​CoreEx.Data.GraphQL.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Cosmos.Test.Unit/​CoreEx.Cosmos.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Caching.Redis.Test.Unit/​CoreEx.Caching.Redis.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.Azure.Messaging.ServiceBus.Test.Unit/​CoreEx.Azure.Messaging.ServiceBus.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.AspNetCore.Test.Unit/​CoreEx.AspNetCore.Test.Unit.csproj Inherits framework targets.
tests/​CoreEx.AspNetCore.Test.Api/​CoreEx.AspNetCore.Test.Api.csproj Inherits framework targets.
src/​Directory.Build.targets Removes empty targets file.
src/​Directory.Build.props Applies shared framework policy.
src/​CoreEx/​Http/​HttpNames.cs Defines the $search parameter name.
src/​CoreEx.DomainDriven/​CoreEx.DomainDriven.csproj Inherits framework targets.
src/​CoreEx.Database/​Abstractions/​DatabaseArgs.cs Clarifies transaction-isolation behavior.
src/​CoreEx.Database.SqlServer/​Extended/​SqlServerUnitOfWorkInvoker.cs Forwards transaction arguments.
src/​CoreEx.Database.SqlServer/​CoreEx.Database.SqlServer.csproj Adds explicit PKCS dependency.
src/​CoreEx.Database.Postgres/​Extended/​PostgresUnitOfWorkInvoker.cs Forwards transaction arguments.
src/​CoreEx.Data/​Querying/​QuerySearchParserException.cs Adds search-validation exception.
src/​CoreEx.Data.GraphQL/​Internal/​GraphQLIntrospectionSchemaBuilder.cs Advertises supported search arguments.
src/​CoreEx.Data.GraphQL/​GraphQLEngine.cs Maps search-parser errors; detail-loss issue noted above.
src/​CoreEx.AspNetCore/​OpenApiOptions.cs Adds search-parameter documentation.
src/​CoreEx.AspNetCore/​Mvc/​QueryAttribute.cs Declares endpoint search support.
src/​CoreEx.AspNetCore/​Abstractions/​WebApiOptionsBase.cs Reads HTTP search intent.
src/​CoreEx.AspNetCore.NSwag/​NSwagOpenApiOperationProcessor.cs Documents supported search parameters.
samples/​tests/​Contoso.Products.Test.Unit/​Contoso.Products.Test.Unit.csproj References Infrastructure for testing.
samples/​tests/​Contoso.Products.Test.Subscribe/​SubscriberTests.cs Uses an unmatched event subject.
samples/​tests/​Contoso.Products.Test.Subscribe/​GlobalUsing.cs Adds search-test imports.
samples/​tests/​Contoso.Products.Test.Api/​Resources/​ReadTests/​Product_Get_Found.res.json Expects product description.
samples/​tests/​Contoso.Products.Test.Api/​Resources/​ProductMutateTests/​Create_Success.res.json Expects created description.
samples/​tests/​Contoso.Products.Test.Api/​ReadTests.cs Rebuilds search with controlled embeddings.
samples/​tests/​Contoso.Products.Test.Api/​ProductMutateTests.Create.cs Verifies description round-trip.
samples/​tests/​Contoso.Customers.Test.Common/​Data/​mcp-demo.seed.yaml Seeds a dedicated demo customer.
samples/​src/​Contoso.Shopping.Infrastructure/​GlobalUsing.cs Adds HTTP status import.
samples/​src/​Contoso.Shopping.Infrastructure/​Clients/​Products/​ProductsHttpClient.cs Adopts fluent HTTP execution.
samples/​src/​Contoso.Shopping.Database/​Contoso.Shopping.Database.csproj Normalizes final newline.
samples/​src/​Contoso.Products.Subscribe/​Subscribers/​ProductSearchSubscriber.cs Reconciles product lifecycle events.
samples/​src/​Contoso.Products.Subscribe/​Program.cs Registers embedding integration.
samples/​src/​Contoso.Products.Subscribe/​GlobalUsing.cs Imports embedding integration.
samples/​src/​Contoso.Products.Subscribe/​appsettings.Development.json Configures local embedding client and resilience.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductSearchUpsert.pgsql Upserts semantic projections.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductSearchSourceHash.pgsql Reads projection fingerprints.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductSearchMatches.pgsql Computes semantic distances.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductSearchMarkReady.pgsql Records semantic readiness.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductSearchLockSource.pgsql Locks sources during semantic publication.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductSearchIsReady.pgsql Checks semantic readiness.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductSearchDeleteProfile.pgsql Clears selected semantic profile.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductSearchDeleteProduct.pgsql Removes product semantic projections.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductLexicalSearchMatches.pgsql Retrieves ranked lexical matches.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductLexicalSearchMarkReady.pgsql Records lexical readiness.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductLexicalSearchLock.pgsql Serializes lexical publication.
samples/​src/​Contoso.Products.Infrastructure/​Repositories/​Sql/​ProductLexicalSearchIsReady.pgsql Checks lexical readiness.
samples/​src/​Contoso.Products.Infrastructure/​Persistence/​Product.g.cs Adds generated description property.
samples/​src/​Contoso.Products.Infrastructure/​Contoso.Products.Infrastructure.csproj Adds embedding dependency and SQL resources.
samples/​src/​Contoso.Products.Database/​Program.cs Keeps demo catalog loading opt-in.
samples/​src/​Contoso.Products.Database/​Migrations/​20261014-172545-create-products-product_search_readiness-table.pgsql Creates semantic readiness storage.
samples/​src/​Contoso.Products.Database/​Migrations/​20261013-174408-add-product-description.pgsql Adds optional description column.
samples/​src/​Contoso.Products.Database/​Contoso.Products.Database.csproj Embeds shared demo catalog.
samples/​src/​Contoso.Products.Contracts/​ProductBase.cs Exposes product description.
samples/​src/​Contoso.Products.Application/​Validators/​ProductValidator.cs Limits description length.
samples/​src/​Contoso.Products.Application/​Repositories/​IProductQueryRepository.cs Defines read-query repository contract.
samples/​src/​Contoso.Products.Application/​Interfaces/​IProductReadService.cs Standardizes cancellation parameter names.
samples/​src/​Contoso.Products.Application/​GlobalUsing.cs Adds hashing and text imports.
samples/​src/​Contoso.Products.Application/​Adapters/​Embeddings/​IProductSearchSyncAdapter.cs Defines search-reconciliation contract.
samples/​src/​Contoso.Products.Api/​GlobalUsing.cs Imports embedding registration.
samples/​src/​Contoso.Products.Api/​Controllers/​ProductReadController.cs Advertises REST search support.
samples/​src/​Contoso.Products.Api/​Contoso.Products.Api.csproj Adds explicit PKCS dependency.
samples/​src/​Contoso.Products.Api/​appsettings.Development.json Configures local embedding client and resilience.
samples/​src/​Contoso.Orders.Database/​Contoso.Orders.Database.csproj Normalizes final newline.
samples/​src/​Contoso.Mcp/​Tools/​ProductSearchOptions.cs Models live search-filter options.
samples/​src/​Contoso.Mcp/​Properties/​launchSettings.json Adds local HTTP launch profile.
samples/​src/​Contoso.Mcp/​Program.cs Hosts stateless MCP tools.
samples/​src/​Contoso.Mcp/​GlobalUsing.cs Declares MCP host imports.
samples/​src/​Contoso.Mcp/​Contoso.Mcp.csproj Defines MCP facade dependencies.
samples/​src/​Contoso.Mcp/​appsettings.Development.json Configures downstream APIs and allowed hosts.
samples/​docs/​testing.md Explains demo-bootstrap test isolation.
samples/​Directory.Build.props Applies shared framework policy.
samples/​aspire/​Contoso.Aspire/​GlobalUsing.cs Adds configuration imports.
samples/​aspire/​Contoso.Aspire/​appsettings.json Configures embedding dependency.
Directory.Build.props Defines shared framework-selection policy.
CoreEx.Samples.Build.slnf Includes MCP in sample builds.
consumer-instructions/​.github/​copilot-instructions.md Documents HTTP builder capability.
.github/​instructions/​coreex-conventions.instructions.md Clarifies cancellation-token naming.
.config/​dotnet-tools.json Updates coverage-reporting tool.

Review effort: Balanced

Pin patched MessagePack in CoreEx.UnitTesting and the sample/template MockHost so transitive consumers resolve 2.5.307. Include remaining scaffold descriptions and AppHost cleanup.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 20, 2026 18:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Broad release scope requires human review, and the moderate GraphQL validation-detail issue remains unresolved.

No open issues 🎉

Review effort: Balanced

Use list-based candidate membership to avoid span expressions during EF query evaluation, and document the compatibility constraint.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 20, 2026 19:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

GraphQL search errors discard actionable validation details; preserve them before approval.

No open issues 🎉

1 previously missed issue

In code that hasn't changed since last review

Medium severity Surface query search parsing details in GraphQL errors

src/​CoreEx.Data.GraphQL/​GraphQLEngine.cs:367

QuerySearchParserException.Message is always the fallback "A query search parsing error occurred."; the actual reason (unsupported search, maximum length, or a custom validation failure) is stored in Messages. This branch bypasses MapValidationException and discards those details, leaving GraphQL callers unable to determine how to correct their search. Surface the stored message while retaining SEARCH_PARSE_ERROR.

Review effort: Balanced

Retain SEARCH_PARSE_ERROR while exposing structured search validation messages, add regression coverage and release notes, and include manual MCP validation guidance.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 20, 2026 20:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Broad framework, database, search, and MCP changes require final human review.

No open issues 🎉

Review effort: Balanced

@chullybun

Copy link
Copy Markdown
Collaborator Author

Fixed the GraphQL search validation-detail finding from #189 (review) in commit e9e32f2. QuerySearchParserException now uses the shared validation-error mapper, preserving actionable details in extensions.messages["$search"] while retaining SEARCH_PARSE_ERROR and the root alias path. Added regression coverage for unsupported search, maximum length, term limits and custom validation; all four cases failed before the fix, and all 183 GraphQL unit tests passed afterward. README and v4.2.0 changelog are updated.

The latest automated review reports no open issues. The original finding was published in a review summary rather than an inline review thread, so GitHub provides no thread to mark resolved; this comment records its resolution.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 21, 2026 17:50
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Cross-cutting framework, database, asynchronous indexing, and MCP changes require final human review.

No open issues 🎉

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings October 21, 2026 17:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Cross-cutting framework, database, and distributed-sample changes require final human review.

No open issues 🎉

Review effort: Balanced

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 21, 2026 19:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Broad framework, database, and distributed sample changes require final human review and approval.

No open issues 🎉

Review effort: Balanced

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 21, 2026 22:29

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Broad framework and distributed-sample changes require final human review; CI for the latest commit remains pending.

No open issues 🎉

Review effort: Balanced

Add expression-based validation factories and cached metadata fallbacks, distinguish request validation from domain business errors, and preserve DataResult mutation flags through mapping and event publication. Align samples, regression coverage, and AI guidance.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 22, 2026 22:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The cross-cutting framework, transaction, distributed search, and MCP changes require final human review despite no unresolved review findings.

No open issues 🎉

Review effort: Balanced

Use case-sensitive RFC 7396 member matching by default, recursively merge object patches, and avoid changes for absent-member removals. Preserve dictionary keys in serializer defaults and align regression coverage and documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 23, 2026 00:00

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The cross-cutting framework, database, distributed search, and MCP changes require final human review and approval.

No open issues 🎉

Review effort: Balanced

Update expected SQL Server, PostgreSQL and Redis health entry names to match their registered casing across sample and generated host tests.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Eric Sibly <eric.sibly@avanade.com>
Copilot AI balanced review requested due to automatic review settings October 23, 2026 13:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Broad framework, persistence, build, and MCP changes require final human review; latest-commit CI remains pending.

No open issues 🎉

Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants