Skip to content

feat(graphql): pre-release surface IR + command pipeline + projection return#129

Open
patrickleet wants to merge 8 commits into
tasks--graphql-qs-epicfrom
feat/prerelease-surface-ir-client-pipeline
Open

feat(graphql): pre-release surface IR + command pipeline + projection return#129
patrickleet wants to merge 8 commits into
tasks--graphql-qs-epicfrom
feat/prerelease-surface-ir-client-pipeline

Conversation

@patrickleet

Copy link
Copy Markdown
Collaborator

Summary

Implements a vertical slice of [[tasks/graphql-qs-prerelease-1]] for merge into tasks--graphql-qs-epic (not main).

  • Surface IR (src/graphql/surface.rs): build_surface, surface_for_role / RoleGrant, dialect-honest comparison ops; graphql_sdl_* builds SDL only via IR.
  • Client pipeline (tests/e2e-ui/ui/src/lib/gql/cache/): document-keyed QueryCache, CacheOp/Effect, runCommandPipeline (optimistic → network → result.kind → effects → reconcile). Unit tests prove ack does not invent full list rows, rollback on error, projection field apply.
  • Rust return helpers (projection_return.rs) + skill docs: same-tx view JSON vs async ack/fact.

Residuals (honest; tracked in GitKB specs/query-layer/v1/state)

  • A4/A6–A9: runtime schema not fully IR-driven yet; parity harness / red-team IR isolation incomplete
  • B6–B8: e2e-ui route migrate, full security suite, package extract
  • B9: app policy registry wiring into bindCommands
  • D3: optional client_reconcile on exposed_command → gen-commands

Test plan

  • cargo test --lib surface
  • cargo test --lib projection_return
  • cargo test --test graphql_sdl
  • node --experimental-strip-types tests/e2e-ui/ui/tests/run-pipeline-unit.mjs

…helpers

Implement pre-release tracks for graphql-qs-prerelease-1:

- Surface IR (build_surface / surface_for_role); SDL emits via IR
- Browser QueryCache + command pipeline (ack/fact/projection, rollback)
- projection_return helpers + skill docs for same-tx vs async projectors

Product rule: command success ≠ projection visibility; default ack/fact
+ reconcile. Residuals (full schema-from-IR, e2e-ui route migrate, extract
packages, client_reconcile manifest) remain in GitKB v1/state.
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ae0e9581-f295-47ad-b7ff-195934f3fda1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/prerelease-surface-ir-client-pipeline

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Pages use gql.commands.* with optimistic → fact/ack → reconcile (refetch/sub).
List UI is cache-driven; hand-rolled mergeFromServer/pending maps removed.
bindCommandsPipeline wires generated COMMAND_DOCS through runCommandPipeline.
Tests assert page structure and pipeline behavior (rollback, refetch).
Pages no longer seed/subscribe/sync QueryCache by hand. Document stores
auto-seed from SSR, follow cache notifications, and (live) open subscriptions.
UI reads \$store.data / \$store.status; commands still attach optimistic
targets via store.target().
- Rename command UI helpers to fx so they never shadow \$effect
- Type layout/Auth children as Snippet; use \$app/state consistently
- Convert +error onMount → \$effect (browser-guarded)
- Fix chat PageData (drop invalid userId); allowImportingTsExtensions
- Clear empty CSS ruleset; CommandClient cast for pipeline binder

svelte-check: 0 errors / 0 warnings
Navbar CTA is Create account (/signup); Auth keeps Sign in (/signin).
Signup starts the same OIDC flow as sign-in so Zitadel can register when enabled.
…make up

Auth.js error=Configuration was opaque: OIDC issuer unreachable (Docker/Zitadel
not running). Probe IdP before starting OIDC and return 503 with make up steps.
Bootstrap login policy sets allowRegister for Create account on hosted login.
Async projectors: keep optimistic list state; reconcile: none on todos/admin.
Soft catch-up refetch later; writeServerDataPreservingPending if server still lags.
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