Skip to content

feat: add defer support#2697

Draft
devsergiy wants to merge 23 commits intomainfrom
feat/eng-7770-add-defer-support
Draft

feat: add defer support#2697
devsergiy wants to merge 23 commits intomainfrom
feat/eng-7770-add-defer-support

Conversation

@devsergiy
Copy link
Copy Markdown
Member

@devsergiy devsergiy commented Mar 27, 2026

closes ENG-7979

Summary by CodeRabbit

  • Tests
    • Added comprehensive integration tests for GraphQL defer functionality, covering scenarios including single defers, nested defers, parallel defers, and extensive field deferral patterns to ensure reliable defer resolution.

Checklist

  • I have discussed my proposed changes in an issue and have received approval to proceed.
  • I have followed the coding standards of the project.
  • Tests or benchmarks have been added or updated.
  • Documentation has been updated on https://github.com/wundergraph/docs-website.
  • I have read the Contributors Guide.

Open Source AI Manifesto

This project follows the principles of the Open Source AI Manifesto. Please ensure your contribution aligns with its principles.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 27, 2026

Walkthrough

Added comprehensive GraphQL @defer directive integration tests to the router test suite, including a new test file that validates defer behavior through multipart response parsing and response reconstruction, along with extensive query and fixture data variations covering single/multiple/nested defers and parallel defer patterns.

Changes

Cohort / File(s) Summary
Core Test Implementation
router-tests/defer_test.go
Added integration test with multipart response parsing, JSON AST-based merge strategies, path-keyed patch application, incremental response reconstruction, and Goldie-based golden file assertions for defer scenario validation.
Dependency Update
router-tests/go.mod
Updated github.com/wundergraph/graphql-go-tools/v2 to a more specific build revision v2.0.0-rc.250.0.20260327010529-31ffc570e6ea.
Test Fixture Documentation
router-tests/testdata/queries_defer/README.md
Added documentation defining fixture naming conventions ({source}_{number}_{description}.graphql), enumeration of 13 test variations, and regeneration instructions.
Employee Details Query Fixtures (01–10)
router-tests/testdata/queries_defer/employeeDetails_defer_*.graphql, employeeDetails_defer_*.txt, employeeDetails_defer_*_reconstructed.json
Added 10 variations testing single defer, defers between regular fields, multiple deferred fields, all-deferred, nested defers, nested variations, parallel defers, nested objects, duplicated fields, and extensive parallelization; each with .graphql query, .txt multipart fixture, and .json reconstructed expectation.
Base Employee Details Fixture
router-tests/testdata/queries_defer/employeeDetails_original.graphql, employeeDetails_original.json
Added base query and expected response for the employee details subgraph federation scenario.
Employee Single-Subgraph Fixtures (01–04+)
router-tests/testdata/queries_defer/employee_defer_*.graphql, employee_defer_*.txt, employee_defer_*_reconstructed.json
Added variations testing single employee queries with defer patterns across different field combinations, each with query, multipart fixture, and reconstructed JSON expectation.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add defer support' directly and clearly describes the main change: adding GraphQL defer functionality. It is concise, specific, and accurately represents the primary purpose of the pull request.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (2)
router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json (1)

1-1724: Consider reducing cross-fixture duplication for reconstructed outputs.

This full reconstructed payload is effectively duplicated across multiple defer scenario files in this PR. Consider loading a shared canonical expected JSON (or generating these fixtures from one source) to reduce drift and fixture-maintenance overhead.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json`
around lines 1 - 1724, The reconstructed "employees" payload is duplicated
across multiple defer test fixtures; create a single shared canonical fixture
(e.g., canonical_employeeDetails_reconstructed.json) containing the full
reconstructed payload and update each defer test that currently uses the large
payload (including the fixture named
employeeDetails_defer_01_single_defer_reconstructed.json and other similar
files) to load/require that shared JSON instead of inlining the data; ensure
test assertions still reference the "data.employees" root structure so behavior
remains unchanged.
router-tests/defer_test.go (1)

78-83: Gate the engine debug prints behind an opt-in switch.

Lines 79-82 enable very verbose planner output for every fixture variation. That will bloat CI logs and slow this suite down even when the test is healthy.

Suggested fix
 					ModifyEngineExecutionConfiguration: func(cfg *config.EngineExecutionConfiguration) {
-						cfg.Debug.PrintIntermediateQueryPlans = true
-						cfg.Debug.PrintPlanningPaths = true
-						// cfg.Debug.PrintNodeSuggestions = true
-						cfg.Debug.PrintOperationTransformations = true
+						if os.Getenv("WG_DEBUG_DEFER_TESTS") == "1" {
+							cfg.Debug.PrintIntermediateQueryPlans = true
+							cfg.Debug.PrintPlanningPaths = true
+							cfg.Debug.PrintOperationTransformations = true
+						}
 					},
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@router-tests/defer_test.go` around lines 78 - 83, The test unconditionally
enables verbose planner debug flags inside ModifyEngineExecutionConfiguration
(setting cfg.Debug.PrintIntermediateQueryPlans, cfg.Debug.PrintPlanningPaths,
cfg.Debug.PrintOperationTransformations), which bloats CI; change this to gate
those debug flags behind an opt-in flag (e.g., an environment variable or a test
flag) so they remain off by default: read the opt-in (ENV_TEST_VERBOSE_PLANNER
or t.Run flag) at test startup, and only set
cfg.Debug.PrintIntermediateQueryPlans, cfg.Debug.PrintPlanningPaths, and
cfg.Debug.PrintOperationTransformations to true when that opt-in is enabled,
leaving them false otherwise.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@router-tests/defer_test.go`:
- Around line 195-227: The loop currently does an early continue when patchData
is nil which skips collecting incremental "errors"; instead, change the loop so
that the error-collection logic always runs whether or not patchData exists:
only skip the merge step when patchData == nil, but always execute the block
that reads item.Get("errors") and merges into result using existing :=
result.Get("errors"), appendArrayValues(existing, patchErrors) and
result.Set(nil, "errors", merged). Keep references to mergeAtPath,
appendArrayValues, patchData, patchErrors, pathKeys and result when modifying
the control flow so that path-building and mergeAtPath are conditional but error
aggregation always happens.

In `@router-tests/go.mod`:
- Line 29: Update the module dependency on go.opentelemetry.io/otel/sdk: in the
go.mod require block change the version for go.opentelemetry.io/otel/sdk to
v1.40.0 or later, and remove or update any replace directive that forces an
older version (the existing replace of go.opentelemetry.io/otel/sdk v1.28.0) so
the require pin is respected; ensure there are no conflicting replace entries
and run go mod tidy to lock the updated version.

In `@router-tests/testdata/queries_defer/README.md`:
- Around line 8-10: The fenced code block containing
"{source}_{number}_{description}.graphql" is missing a language tag (MD040);
update the triple-backtick fence to include a language tag (use "text") so it
becomes ```text before the content and ``` after; modify the README.md fenced
block around the "{source}_{number}_{description}.graphql" snippet to add the
"text" tag.
- Around line 48-50: Update the regeneration command in README.md so the -run
regex matches the actual test name: change the `go test ... -run
TestDeferTestdataQueries` invocation to use `-run TestDeferTestDataQueries` (the
test defined in router-tests/defer_test.go as TestDeferTestDataQueries),
ensuring the documented command will run the new test.

---

Nitpick comments:
In `@router-tests/defer_test.go`:
- Around line 78-83: The test unconditionally enables verbose planner debug
flags inside ModifyEngineExecutionConfiguration (setting
cfg.Debug.PrintIntermediateQueryPlans, cfg.Debug.PrintPlanningPaths,
cfg.Debug.PrintOperationTransformations), which bloats CI; change this to gate
those debug flags behind an opt-in flag (e.g., an environment variable or a test
flag) so they remain off by default: read the opt-in (ENV_TEST_VERBOSE_PLANNER
or t.Run flag) at test startup, and only set
cfg.Debug.PrintIntermediateQueryPlans, cfg.Debug.PrintPlanningPaths, and
cfg.Debug.PrintOperationTransformations to true when that opt-in is enabled,
leaving them false otherwise.

In
`@router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json`:
- Around line 1-1724: The reconstructed "employees" payload is duplicated across
multiple defer test fixtures; create a single shared canonical fixture (e.g.,
canonical_employeeDetails_reconstructed.json) containing the full reconstructed
payload and update each defer test that currently uses the large payload
(including the fixture named
employeeDetails_defer_01_single_defer_reconstructed.json and other similar
files) to load/require that shared JSON instead of inlining the data; ensure
test assertions still reference the "data.employees" root structure so behavior
remains unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7d43ed19-2030-4a3c-82cf-af3d2aa0160d

📥 Commits

Reviewing files that changed from the base of the PR and between c2e9db6 and fcd37f6.

⛔ Files ignored due to path filters (1)
  • router-tests/go.sum is excluded by !**/*.sum
📒 Files selected for processing (299)
  • router-tests/defer_test.go
  • router-tests/go.mod
  • router-tests/testdata/queries_defer/README.md
  • router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql
  • router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt
  • router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json
  • router-tests/testdata/queries_defer/employeeDetails_original.graphql
  • router-tests/testdata/queries_defer/employeeDetails_original.json
  • router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql
  • router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt
  • router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql
  • router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt
  • router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql
  • router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt
  • router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql
  • router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt
  • router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql
  • router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt
  • router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.graphql
  • router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt
  • router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql
  • router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt
  • router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql
  • router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt
  • router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql
  • router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt
  • router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json
  • router-tests/testdata/queries_defer/employee_original.graphql
  • router-tests/testdata/queries_defer/employee_original.json
  • router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql
  • router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt
  • router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql
  • router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt
  • router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql
  • router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt
  • router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql
  • router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt
  • router-tests/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql
  • router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt
  • router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql
  • router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt
  • router-tests/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql
  • router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt
  • router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql
  • router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt
  • router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql
  • router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt
  • router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql
  • router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt
  • router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql
  • router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt
  • router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql
  • router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt
  • router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json
  • router-tests/testdata/queries_defer/employees_original.graphql
  • router-tests/testdata/queries_defer/employees_original.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.graphql
  • router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.json
  • router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql
  • router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt
  • router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json
  • router-tests/testdata/queries_defer/findEmployees_original.graphql
  • router-tests/testdata/queries_defer/findEmployees_original.json
  • router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/full_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql
  • router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt
  • router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql
  • router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt
  • router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql
  • router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt
  • router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql
  • router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt
  • router-tests/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql
  • router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt
  • router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql
  • router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt
  • router-tests/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql
  • router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt
  • router-tests/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql
  • router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt
  • router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql
  • router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt
  • router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql
  • router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt
  • router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql
  • router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt
  • router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json
  • router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql
  • router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt
  • router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json
  • router-tests/testdata/queries_defer/full_original.graphql
  • router-tests/testdata/queries_defer/full_original.json
  • router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/products_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql
  • router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt
  • router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql
  • router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt
  • router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql
  • router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt
  • router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql
  • router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt
  • router-tests/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql
  • router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt
  • router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql
  • router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt
  • router-tests/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql
  • router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt
  • router-tests/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql
  • router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt
  • router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql
  • router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt
  • router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql
  • router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt
  • router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql
  • router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo
  • router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt
  • router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json
  • router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql
  • router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt
  • router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json
  • router-tests/testdata/queries_defer/products_original.graphql
  • router-tests/testdata/queries_defer/products_original.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt
  • router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json
  • router-tests/testdata/queries_defer/requires_different_depth_original.graphql
  • router-tests/testdata/queries_defer/requires_different_depth_original.json
  • router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql
  • router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt
  • router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json

Comment on lines +195 to +227
for _, item := range partVal.GetArray("incremental") {
patchData := item.Get("data")
if patchData == nil {
continue
}

// Build path: prepend "data", then each segment from the path array.
pathKeys := []string{"data"}
for _, seg := range item.GetArray("path") {
switch seg.Type() {
case astjson.TypeNumber:
pathKeys = append(pathKeys, string(seg.MarshalTo(nil)))
default:
s, _ := seg.StringBytes()
pathKeys = append(pathKeys, string(s))
}
}

if err := mergeAtPath(result, patchData, pathKeys); err != nil {
return nil, fmt.Errorf("merge at path %v: %w", pathKeys, err)
}

// Collect errors from incremental items into root errors.
patchErrors := item.Get("errors")
if patchErrors != nil && patchErrors.Type() == astjson.TypeArray {
existing := result.Get("errors")
if existing == nil || existing.Type() == astjson.TypeNull {
result.Set(nil, "errors", patchErrors)
} else {
merged := appendArrayValues(existing, patchErrors)
result.Set(nil, "errors", merged)
}
}
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.

⚠️ Potential issue | 🟡 Minor

Don’t drop incremental errors when data is absent.

The early continue on Line 198 means an incremental entry that only carries errors never reaches the merge on Lines 217-227, so deferred error cases get reconstructed without those errors.

Suggested fix
 		for _, item := range partVal.GetArray("incremental") {
+			patchErrors := item.Get("errors")
+			if patchErrors != nil && patchErrors.Type() == astjson.TypeArray {
+				existing := result.Get("errors")
+				if existing == nil || existing.Type() == astjson.TypeNull {
+					result.Set(nil, "errors", patchErrors)
+				} else {
+					merged := appendArrayValues(existing, patchErrors)
+					result.Set(nil, "errors", merged)
+				}
+			}
+
 			patchData := item.Get("data")
 			if patchData == nil {
 				continue
 			}
@@
-			// Collect errors from incremental items into root errors.
-			patchErrors := item.Get("errors")
-			if patchErrors != nil && patchErrors.Type() == astjson.TypeArray {
-				existing := result.Get("errors")
-				if existing == nil || existing.Type() == astjson.TypeNull {
-					result.Set(nil, "errors", patchErrors)
-				} else {
-					merged := appendArrayValues(existing, patchErrors)
-					result.Set(nil, "errors", merged)
-				}
-			}
 		}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
for _, item := range partVal.GetArray("incremental") {
patchData := item.Get("data")
if patchData == nil {
continue
}
// Build path: prepend "data", then each segment from the path array.
pathKeys := []string{"data"}
for _, seg := range item.GetArray("path") {
switch seg.Type() {
case astjson.TypeNumber:
pathKeys = append(pathKeys, string(seg.MarshalTo(nil)))
default:
s, _ := seg.StringBytes()
pathKeys = append(pathKeys, string(s))
}
}
if err := mergeAtPath(result, patchData, pathKeys); err != nil {
return nil, fmt.Errorf("merge at path %v: %w", pathKeys, err)
}
// Collect errors from incremental items into root errors.
patchErrors := item.Get("errors")
if patchErrors != nil && patchErrors.Type() == astjson.TypeArray {
existing := result.Get("errors")
if existing == nil || existing.Type() == astjson.TypeNull {
result.Set(nil, "errors", patchErrors)
} else {
merged := appendArrayValues(existing, patchErrors)
result.Set(nil, "errors", merged)
}
}
for _, item := range partVal.GetArray("incremental") {
patchErrors := item.Get("errors")
if patchErrors != nil && patchErrors.Type() == astjson.TypeArray {
existing := result.Get("errors")
if existing == nil || existing.Type() == astjson.TypeNull {
result.Set(nil, "errors", patchErrors)
} else {
merged := appendArrayValues(existing, patchErrors)
result.Set(nil, "errors", merged)
}
}
patchData := item.Get("data")
if patchData == nil {
continue
}
// Build path: prepend "data", then each segment from the path array.
pathKeys := []string{"data"}
for _, seg := range item.GetArray("path") {
switch seg.Type() {
case astjson.TypeNumber:
pathKeys = append(pathKeys, string(seg.MarshalTo(nil)))
default:
s, _ := seg.StringBytes()
pathKeys = append(pathKeys, string(s))
}
}
if err := mergeAtPath(result, patchData, pathKeys); err != nil {
return nil, fmt.Errorf("merge at path %v: %w", pathKeys, err)
}
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@router-tests/defer_test.go` around lines 195 - 227, The loop currently does
an early continue when patchData is nil which skips collecting incremental
"errors"; instead, change the loop so that the error-collection logic always
runs whether or not patchData exists: only skip the merge step when patchData ==
nil, but always execute the block that reads item.Get("errors") and merges into
result using existing := result.Get("errors"), appendArrayValues(existing,
patchErrors) and result.Set(nil, "errors", merged). Keep references to
mergeAtPath, appendArrayValues, patchData, patchErrors, pathKeys and result when
modifying the control flow so that path-building and mergeAtPath are conditional
but error aggregation always happens.

Comment thread router-tests/go.mod Outdated
github.com/wundergraph/cosmo/router v0.0.0-20260213130455-6e3277e7b850
github.com/wundergraph/cosmo/router-plugin v0.0.0-20250808194725-de123ba1c65e
github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.250
github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.250.0.20260327010529-31ffc570e6ea
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.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Direct OTel requirements =="
rg -n '^\s*go\.opentelemetry\.io/otel(|/sdk|/sdk/metric|/trace)\s+v' router-tests/go.mod

echo
echo "== OTel replace overrides =="
rg -n '^\s*go\.opentelemetry\.io/otel(|/sdk|/sdk/metric|/trace)\s*=>\s*go\.opentelemetry\.io/otel(|/sdk|/sdk/metric|/trace)\s+v' router-tests/go.mod

echo
echo "Expected: go.opentelemetry.io/otel/sdk resolves to >= v1.40.0 with no downgrade via replace."

Repository: wundergraph/cosmo

Length of output: 690


Pin go.opentelemetry.io/otel/sdk to v1.40.0 or later in router-tests/go.mod.

The current configuration contains two OTel SDK versions both below the security baseline:

  • require directive: v1.36.0 (line 31)
  • replace override: v1.28.0 (line 198)

Both versions are vulnerable to GHSA-9h8m-3fm2-qjrq (CVE-2026-24051). Pin go.opentelemetry.io/otel/sdk to v1.40.0 or later in the require block and remove or update the replace directive to maintain the pinned version.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@router-tests/go.mod` at line 29, Update the module dependency on
go.opentelemetry.io/otel/sdk: in the go.mod require block change the version for
go.opentelemetry.io/otel/sdk to v1.40.0 or later, and remove or update any
replace directive that forces an older version (the existing replace of
go.opentelemetry.io/otel/sdk v1.28.0) so the require pin is respected; ensure
there are no conflicting replace entries and run go mod tidy to lock the updated
version.

Comment on lines +8 to +10
```
{source}_{number}_{description}.graphql
```
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.

⚠️ Potential issue | 🟡 Minor

Add a language tag to this fenced block.

Line 8 triggers MD040; text is enough here.

Suggested fix
-```
+```text
 {source}_{number}_{description}.graphql
</details>

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.22.0)</summary>

[warning] 8-8: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @router-tests/testdata/queries_defer/README.md around lines 8 - 10, The
fenced code block containing "{source}{number}{description}.graphql" is
missing a language tag (MD040); update the triple-backtick fence to include a
language tag (use "text") so it becomes text before the content and
after; modify the README.md fenced block around the
"{source}{number}{description}.graphql" snippet to add the "text" tag.


</details>

<!-- fingerprinting:phantom:medusa:grasshopper -->

<!-- This is an auto-generated comment by CodeRabbit -->

Comment on lines +48 to +50
```bash
cd router-tests
go test -v -run TestDeferTestdataQueries -update ./...
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.

⚠️ Potential issue | 🟡 Minor

Fix the test name in the regeneration command.

Line 50 uses TestDeferTestdataQueries, but the test added in router-tests/defer_test.go is TestDeferTestDataQueries. As written, the documented -run regex will miss the new test.

Suggested fix
 cd router-tests
-go test -v -run TestDeferTestdataQueries -update ./...
+go test -v -run TestDeferTestDataQueries -update ./...
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```bash
cd router-tests
go test -v -run TestDeferTestdataQueries -update ./...
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@router-tests/testdata/queries_defer/README.md` around lines 48 - 50, Update
the regeneration command in README.md so the -run regex matches the actual test
name: change the `go test ... -run TestDeferTestdataQueries` invocation to use
`-run TestDeferTestDataQueries` (the test defined in router-tests/defer_test.go
as TestDeferTestDataQueries), ensuring the documented command will run the new
test.

@devsergiy devsergiy force-pushed the feat/eng-7770-add-defer-support branch from c66159b to 9be5939 Compare April 7, 2026 19:44
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 7, 2026

Router image scan passed

✅ No security vulnerabilities found in image:

ghcr.io/wundergraph/cosmo/router:sha-9176b04b7c4092a17ab3d89d8998e148dea6837e

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 7, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 43.25%. Comparing base (329e5cc) to head (9be5939).
⚠️ Report is 2 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##             main    #2697       +/-   ##
===========================================
- Coverage   63.45%   43.25%   -20.21%     
===========================================
  Files         251      236       -15     
  Lines       26767    26311      -456     
===========================================
- Hits        16986    11380     -5606     
- Misses       8414    13636     +5222     
+ Partials     1367     1295       -72     

see 177 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant