Skip to content

feat(core): migrate to GraphQL 17 typed documents - #243

Merged
aryeko merged 2 commits into
mainfrom
codex/graphql17-typed-documents
Jul 31, 2026
Merged

feat(core): migrate to GraphQL 17 typed documents#243
aryeko merged 2 commits into
mainfrom
codex/graphql17-typed-documents

Conversation

@aryeko

@aryeko aryeko commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Summary

  • upgrade the published @ghx-dev/core runtime to GraphQL 17.0.2
  • replace the generated graphql-request SDK layer with typed document nodes executed through the existing GraphqlTransport contract
  • remove graphql-request, direct graphql-tag, the GraphQL-request Codegen plugin, and the TypedDocumentString adapter
  • preserve public transport, client, GitHub client, and token-client APIs
  • add one minor changeset for the complete two-PR modernization

Codegen compatibility

The private root Codegen toolchain intentionally uses GraphQL 16.14.2 because the current @graphql-codegen/near-operation-file-preset and graphql-config peer ranges do not accept GraphQL 17 under strict peer dependency enforcement. Published core runtime code uses GraphQL 17.0.2. No overrides, package extensions, or peer suppressions are used.

Verification

  • pnpm install --frozen-lockfile
  • pnpm audit --audit-level=moderate (only one low-severity finding)
  • pnpm --filter @ghx-dev/core run gql:verify
  • pnpm run ci --outputStyle=static
  • core coverage run: 177 files, 1,992 tests passed
  • published declaration build contains no graphql-request or typed-document dependency imports
  • repository inventory contains no removed GraphQL-request tooling references

Summary by CodeRabbit

  • New Features

    • Added support for executing generated, type-safe GraphQL documents through the existing transport.
    • Updated GraphQL runtime support to version 17.
    • Added a public helper for typed GraphQL document execution.
  • Documentation

    • Updated GraphQL architecture, repository structure, and custom transport guides to reflect the new execution model and default fetch transport.
  • Refactor

    • Replaced operation-specific GraphQL SDK usage across issues, pull requests, projects, releases, and repositories.
    • Removed legacy GraphQL request and typed-string adapter support.

@changeset-bot

changeset-bot Bot commented Jul 31, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: cac6f85

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@ghx-dev/core Minor
@ghx-dev/eval Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: eaa7dc0d-8852-4508-bb1c-db4d914c3315

📥 Commits

Reviewing files that changed from the base of the PR and between b561e3f and cac6f85.

📒 Files selected for processing (1)
  • packages/core/docs/architecture/graphql-layer.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/core/docs/architecture/graphql-layer.md

📝 Walkthrough

Walkthrough

GraphQL Code Generator now emits typed document nodes. The runtime uses GraphQL 17 and executes these documents through GraphqlTransport. Issue, pull request, project, release, and repository operations no longer create generated SDK clients.

Changes

GraphQL runtime migration

Layer / File(s) Summary
Typed document codegen toolchain
.changeset/*, package.json, packages/core/codegen.ts, packages/core/scripts/*, packages/core/docs/*, docs/repository-structure.md, packages/core/test/unit/codegen-config.test.ts
Codegen now emits typed document nodes. GraphQL 17 is used at runtime. Artifact processing no longer rewrites typed-string imports.
Typed document transport contract
packages/core/src/gql/transport.ts, packages/core/src/gql/builders.ts, packages/core/src/gql/document-registry.ts, packages/core/test/unit/transport.test.ts
executeTypedDocument executes typed documents through the transport. Registered documents and mutation constants are serialized with GraphQL print.
Issue operation migration
packages/core/src/gql/domains/issue-queries.ts, packages/core/src/gql/domains/issue-mutations.ts
Issue operations use generated documents and preserve validation, parsing, and error handling.
Pull request operation migration
packages/core/src/gql/domains/pr-queries.ts, packages/core/src/gql/domains/pr-mutations.ts
Pull request operations use direct typed-document execution, including paginated comment-reaction requests.
Project, release, and repository migration
packages/core/src/gql/domains/project.ts, packages/core/src/gql/domains/release.ts, packages/core/src/gql/domains/repo.ts, packages/core/test/unit/github-client-sdk.test.ts
Project, release, and repository operations use the shared transport. Integration tests verify generated queries and variables.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant DomainRunner
  participant executeTypedDocument
  participant GraphqlTransport
  participant GitHub
  DomainRunner->>executeTypedDocument: generated document and variables
  executeTypedDocument->>GraphqlTransport: printed query and variables
  GraphqlTransport->>GitHub: GraphQL request
  GitHub-->>GraphqlTransport: response data
  GraphqlTransport-->>DomainRunner: typed operation result
Loading

Possibly related PRs

  • aryeko/ghx#61: Expands tests for document-registry mutation and lookup behavior.
  • aryeko/ghx#185: Overlaps with the pull request domain and document-registry changes.

Poem

A rabbit hops through typed nodes bright,
Queries print and travel right.
SDK wrappers leave the view,
Transport carries each request through.
GraphQL seventeen joins the run—
Hop, hop! The migration’s done.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 2.99% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: migrating the core package to GraphQL 17 typed documents.
Description check ✅ Passed The description explains the migration, compatibility decisions, validation results, changeset, and preserved APIs; some template headings are omitted.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/graphql17-typed-documents

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

@codecov

codecov Bot commented Jul 31, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/core/docs/architecture/graphql-layer.md`:
- Around line 60-62: Update the GraphqlClient label in the architecture diagram
to say “query + queryRaw” instead of “query + mutate,” matching the methods
documented for createGraphqlClient.
🪄 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 Plus

Run ID: 892ae90b-19a1-4a46-b516-4cf122256ea1

📥 Commits

Reviewing files that changed from the base of the PR and between 18b6122 and b561e3f.

⛔ Files ignored due to path filters (74)
  • packages/core/src/gql/operations/fragments/issue-core-fields.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/fragments/page-info-fields.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/fragments/pr-core-fields.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/fragments/reaction-group-fields.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-assignees-add.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-assignees-lookup-by-number.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-assignees-lookup.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-assignees-remove.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-assignees-update.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-blocked-by-add.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-blocked-by-remove.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-close.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-comment-create.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-comments-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-create-repository-id.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-create.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-delete.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-labels-add.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-labels-lookup-by-number.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-labels-lookup.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-labels-remove.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-labels-update.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-linked-prs-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-milestone-lookup-by-number.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-milestone-lookup.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-milestone-set.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-node-id-lookup.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-parent-lookup.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-parent-remove.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-parent-set.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-relations-get.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-reopen.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-update.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/issue-view.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-assignees-add.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-assignees-lookup-by-number.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-assignees-remove.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-branch-update.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-close.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-comment-reply.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-comment-resolve.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-comment-unresolve.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-comments-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-comments-reactions-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-create.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-diff-list-files.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-merge-status.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-merge.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-node-id.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-reactions-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-review-submit.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-reviews-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-reviews-request.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-update.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/pr-view.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-fields-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-issue-node-id.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-item-add.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-item-field-update.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-item-remove.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-items-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-org-view.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-owner-id.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/project-v2-user-view.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/release-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/release-view.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/repo-issue-types-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/repo-labels-list.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/repo-view.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/review-thread-state.generated.ts is excluded by !**/*.generated.*
  • packages/core/src/gql/operations/user-node-id.generated.ts is excluded by !**/*.generated.*
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (22)
  • .changeset/modernize-graphql-runtime.md
  • docs/repository-structure.md
  • package.json
  • packages/core/codegen.ts
  • packages/core/docs/architecture/graphql-layer.md
  • packages/core/docs/guides/custom-graphql-transport.md
  • packages/core/package.json
  • packages/core/scripts/generate-gql-artifacts.mjs
  • packages/core/src/gql/builders.ts
  • packages/core/src/gql/document-registry.ts
  • packages/core/src/gql/domains/issue-mutations.ts
  • packages/core/src/gql/domains/issue-queries.ts
  • packages/core/src/gql/domains/pr-mutations.ts
  • packages/core/src/gql/domains/pr-queries.ts
  • packages/core/src/gql/domains/project.ts
  • packages/core/src/gql/domains/release.ts
  • packages/core/src/gql/domains/repo.ts
  • packages/core/src/gql/operations/typed-document-string.ts
  • packages/core/src/gql/transport.ts
  • packages/core/test/unit/codegen-config.test.ts
  • packages/core/test/unit/github-client-sdk.test.ts
  • packages/core/test/unit/transport.test.ts
💤 Files with no reviewable changes (1)
  • packages/core/src/gql/operations/typed-document-string.ts

Comment thread packages/core/docs/architecture/graphql-layer.md
@aryeko
aryeko merged commit b55d7ff into main Jul 31, 2026
7 checks passed
@aryeko
aryeko deleted the codex/graphql17-typed-documents branch July 31, 2026 19:02
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.

1 participant