Skip to content

feat(gqt): add a server target and run cases against omnigraph-server - #923

Merged
azimafroozeh merged 6 commits into
ModernRelay:mainfrom
azimafroozeh:0322-1-gqt-server-target
Oct 9, 2026
Merged

azimafroozeh merged 6 commits into
ModernRelay:mainfrom
azimafroozeh:0322-1-gqt-server-target

Conversation

@azimafroozeh

Copy link
Copy Markdown
Collaborator

What & why

This PR lets the GQT runner execute a case against a running omnigraph-server (omnigraph-gqt <case> --server <URL> --graph <ID> [--token <T>]) and makes the corpus the server's conformance suite. It is the runner half of the server execution surface RFC 0039 lists beside the embedded one; timing, records and identity stay with the bench. No engine, server, API or CLI code changes; no new case syntax.

  • Served executor in omnigraph-gqt-core: each step travels to the route that already serves it (--- query, branch list and show to POST /query; --- mutate and the branch statements to POST /mutate; the seed and --- load to POST /load) and is judged from the answer with the in-process row and error checks. Query and mutate bodies go verbatim, so the served path hits the parser doors a user hits.
  • Admission before any request, by name: --- restart, --- concurrent, seams, settings, --- expect plan, --- expect same as v1, the # traversal: pin and index-needing queries are refused. --- expect shape is observed, not judged: it holds the executor's Arrow schema against the compiler's, which no wire answer carries, and 269 of 275 cases carry one. Every request is bounded at the case budget.
  • A case opts in by declaring target: omnigraph-server; without --server that environment is planned but unselected (report scope partial), so the corpus runs in-process as before. 80 of 276 cases opt in; the rest use a refused section. A declared omnigraph-server-dst is still refused, nothing implements it.
  • Differential test: gqt_served_conformance in omnigraph-server boots an in-process server per opted-in case and requires a green in-process verdict and the same served verdict; gqt_served_count refuses an empty served set; a fourth GQ Logic Tests mode, served, runs both. 80 agree, 196 skipped, 0 differ.
  • The test caught two executor bugs before landing (a branch name that is not a lowercase identifier must travel as a string literal; a bare show statement needs its ; on the wire, pinned by the new show_statement_served_with_its_terminator case) and one server limit the in-process path has no twin for (Notes).

Backing issue / RFC

  • Relates to the accepted RFC 0039 (docs/rfcs/0039-end-to-end-benchmark.md): its environment axis names the server execution surface; this PR implements the runner side of it through the existing routes, so no API and no RFC update is owed.

Checklist

  • Focused: one logical change, the GQT server target (executor, admission, flags, conformance test with its CI mode, corpus opt-in)
  • Tests: gqt_served_conformance (80 served, 196 skipped, 0 differing) and gqt_served_count; runner_dispatch::server_target_admission_refuses_before_workers pins every flag combination refused before a worker spawns (--server without --graph, with --store, with bless, with --target naming another environment, a declared omnigraph-server-dst) plus bless on an engine-and-server case; the runner_config unit test pins the five served admission arms. Rust because no .gqt case can observe a flag, a spawned worker or a request.
  • Public docs: crates/omnigraph-gqt/README.md (served section) and docs/dev/ci.md (GQT (served)); no docs/user/ surface changed
  • Release note: changelog.d/gqt-server-target.added.md
  • Invariants: reviewed against docs/dev/invariants.md, no Hard Invariant weakened, no deny-list item hit; nearest one touched is none (no engine or server code path changes; the server crate gains a dev-dependency and two tests)

Local verification

  • cargo test -p omnigraph-server --test gqt_served_conformance --test gqt_served_count -- --nocapture: 276 cases, 80 served and agreeing, 196 skipped, 0 differing, 2.0 s wall (local FS, engine v2, in-process server); the count test prints the same totals
  • cargo test -p omnigraph-gqt-core -p omnigraph-gqt --locked: corpus 276, runner dispatch 26, gqt-core 193, gqt 47; clippy -D warnings on omnigraph-gqt, omnigraph-gqt-core, omnigraph-server all targets; fmt
  • omnigraph-gqt <case> --server <URL> --graph <ID> against a booted omnigraph-server binary: not run; the conformance test calls the served executor directly, so the CLI flag path is pinned by its refusal rows only, and a green-verdict smoke step on the server binary is the follow-up

Notes for reviewers

  • POST /query and POST /mutate refuse bodies over DEFAULT_REQUEST_BODY_LIMIT_BYTES (1 MiB), a limit the in-process path has no counterpart for: issue_856_repeat_fast_forward_past_validation_budget fails served on its large mutation and keeps its in-process environments only; no limit loosened.
  • Bless counts the declared in-process environments (exactly one, direct engine) instead of every declared environment, so a case declaring engine and server still blesses; a served run never blesses.
  • The served CI cell builds omnigraph-server plus the gqt dev-dependencies, a feature graph the other three modes do not share, under its own cache key and 60-minute budget; its cold wall time is unmeasured until the first hosted run.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-09T16:20:57.494401Z 1defe12 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1defe12c43

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/omnigraph-gqt-core/src/served.rs
Comment thread crates/omnigraph-gqt/src/dst_runner.rs
Comment thread crates/omnigraph-gqt-core/src/served.rs Outdated
Comment thread crates/omnigraph-gqt-core/src/served.rs Outdated
Comment thread crates/omnigraph-server/Cargo.toml Outdated
Comment thread crates/omnigraph-gqt/src/dst_runner.rs
@azimafroozeh
azimafroozeh enabled auto-merge October 9, 2026 22:25
@azimafroozeh
azimafroozeh added this pull request to the merge queue Oct 9, 2026
Merged via the queue into ModernRelay:main with commit 980498d Oct 9, 2026
33 checks passed
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