Proto commits in wundergraph/cosmo

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:8aadbf0
Author:Suvij Surya
Committer:GitHub

feat: add support for feature subgraph checks (#3029)

Commit:cb138b5
Author:JivusAyrus

Merge branch 'main' of github.com:wundergraph/cosmo into suvij/eng-9391-controlplane-support-schema-checks-for-feature-subgraphs-and

Commit:f704e34
Author:Wilson Rivera
Committer:GitHub

feat: decouple feature flag composition when split config is enabled (#3034)

Commit:4b26cda
Author:Milinda Dias

fix(entity-caching): rename EntityCachingConfiguration.entity_cache to entity_cache_configurations Align the proto field with origin/main (entity_cache_configurations). The old name serialized to JSON as entityCache, so the router silently dropped the control-plane's entity caching config on unmarshal. Regenerated Go/TS bindings and updated all GetEntityCache() consumers.

Commit:9a6df7b
Author:Milinda Dias

fix(entity-caching): rename EntityCachingConfiguration.entity_cache to entity_cache_configurations Align the proto field with origin/main (entity_cache_configurations). The old name serialized to JSON as entityCache, so the router silently dropped the control-plane's entity caching config on unmarshal. Regenerated Go/TS bindings and updated all GetEntityCache() consumers in the router core and tests.

Commit:426cbf0
Author:Milinda Dias

fix(entity-caching): rename EntityCachingConfiguration.entity_cache to entity_cache_configurations Align the proto field name with origin/main (entity_cache_configurations), which the control plane emits. The old name (entity_cache -> JSON entityCache) caused the router to silently drop the entity caching config on unmarshal. Regenerated Go/TS bindings and updated the router-config builder.

Commit:0c26d31
Author:Wilson Rivera

feat: decouple feature flag composition when split config is enabled

Commit:a9e3827
Author:Milinda Dias
Committer:Milinda Dias

Merge remote-tracking branch 'origin/main' into milinda/entity-caching-2-router # Conflicts: # composition/src/directive-definition-data/directive-definition-data.ts # composition/src/errors/errors.ts # composition/src/router-configuration/types.ts # composition/src/v1/constants/constants.ts # composition/src/v1/constants/directive-definitions.ts # composition/src/v1/normalization/normalization-factory.ts # composition/src/v1/normalization/types/types.ts # composition/src/v1/normalization/utils.ts # composition/tests/v1/directives/cache-populate.test.ts # connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go # connect/src/wg/cosmo/node/v1/node_pb.ts # proto/wg/cosmo/node/v1/node.proto # router/gen/proto/wg/cosmo/node/v1/node.pb.go # shared/src/router-config/builder.ts

Commit:15b3265
Author:Milinda Dias
Committer:Milinda Dias

Merge remote-tracking branch 'origin/main' into milinda/entity-caching-1b-demo # Conflicts: # composition/src/directive-definition-data/directive-definition-data.ts # composition/src/errors/errors.ts # composition/src/router-configuration/types.ts # composition/src/v1/constants/constants.ts # composition/src/v1/constants/directive-definitions.ts # composition/src/v1/normalization/normalization-factory.ts # composition/src/v1/normalization/types/types.ts # composition/src/v1/normalization/utils.ts # composition/tests/v1/directives/cache-populate.test.ts # connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go # connect/src/wg/cosmo/node/v1/node_pb.ts # proto/wg/cosmo/node/v1/node.proto # router/gen/proto/wg/cosmo/node/v1/node.pb.go # shared/src/router-config/builder.ts

Commit:8c47d71
Author:JivusAyrus

feat: add support for feature subgraph checks

Commit:a45b33c
Author:Suvij Surya
Committer:GitHub

fix: pagination in proposals page (#2989)

Commit:3db24b0
Author:Milinda Dias
Committer:GitHub

fix: proto changes for entity cache (#2996)

Commit:e96a801
Author:Milinda Dias

Merge queryCache into requestScoped (requestScoped becomes 5/5) Restacks @openfed__requestScoped on top of the queryCache branch. The resulting tree is identical to the previous combined stack tip; this commit re-applies the requestScoped feature (including its assertions in shared/test/entity-caching.test.ts) on top of queryCache.

Commit:efa4cdf
Author:Milinda Dias

chore: remove requestScoped from queryCache branch (queryCache becomes 4/5) Reorders the stack so @openfed__queryCache/@openfed__is sits directly on main as the 4th PR. The @openfed__requestScoped feature is removed here and re-applied on top in the requestScoped branch (now 5/5). The requestScoped assertions in shared/test/entity-caching.test.ts move to that PR. Proto regenerated (request_scoped_configurations field 4 dropped; query_cache remains field 5).

Commit:a8cc2af
Author:Milinda Dias
Committer:GitHub

feat(composition): @openfed__cachePopulate directive (3/5) (#2984) Co-authored-by: Aenimus <david@wundergraph.com>

Commit:cd52465
Author:Milinda Dias

Merge branch 'milinda/requestScoped-directive' into milinda/queryCache-directive # Conflicts: # composition/src/router-configuration/types.ts # composition/src/v1/normalization/normalization-factory.ts # composition/src/v1/warnings/warnings.ts # connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go # connect/src/wg/cosmo/node/v1/node_pb.ts # proto/wg/cosmo/node/v1/node.proto # router/gen/proto/wg/cosmo/node/v1/node.pb.go # shared/src/router-config/builder.ts

Commit:dc74e32
Author:Milinda Dias

fix: review comments

Commit:9058b72
Author:Milinda Dias

Merge branch 'milinda/requestScoped-directive' into milinda/queryCache-directive Reconcile queryCache's cache-extraction (old dispatcher structure) with requestScoped's refactored inline structure (from cachePopulate review fixes): - Adopt requestScoped's inline 1-arg extractCacheInvalidateConfig/extractCachePopulateConfig (called during the parent walk); trim processRootFieldCacheDirectives() to only dispatch @openfed__queryCache extraction + @openfed__is placement validation, re-add its normalize() call - extractQueryCacheConfig writes via getOrInitializeEntityCaching (required-field type) - Restore queryCache's richer maxAgeNotPositiveIntegerErrorMessage({directiveName, value}) and update entityCache/cachePopulate call sites + tests to the object form - Dedup imports (ENTITY_CACHE/OPENFED_ENTITY_CACHE/EntityCacheConfiguration/EntityCacheDirectiveNode) - Regenerate node.pb.go (max_age_seconds non-optional); rename test helper to createSubgraphWithDefaultName

Commit:e48fef3
Author:Milinda Dias

Merge branch 'milinda/cachePopulate-directive' into milinda/requestScoped-directive Resolve conflicts from cachePopulate's review-fix refactor: - EntityCachingConfiguration: cachePopulateConfigurations now required; keep requestScopedFields - Dedup imports in normalization-factory.ts / utils.ts (ENTITY_CACHE, OPENFED_ENTITY_CACHE) - Adopt CacheInvalidateConfig -> CacheInvalidateConfiguration rename - normalize(): drop obsolete processRootFieldCacheDirectives() (cache invalidate/populate now extracted inline); extractRequestScopedFields() uses getOrInitializeEntityCaching() - Regenerate node.pb.go (max_age_seconds non-optional per cachePopulate) - Rename test helper createSubgraphWithDefault -> createSubgraphWithDefaultName

Commit:da93894
Author:Milinda Dias

fix: review comments

Commit:845b75a
Author:Suvij Surya
Committer:GitHub

Merge branch 'main' into suvij/eng-9781-studio-proposals-table-shows-page-1-of-1-when-more-than-one

Commit:19bbbe5
Author:Milinda Dias
Committer:GitHub

feat(composition): @openfed__cacheInvalidate directive (2/5) (#2983) Co-authored-by: Aenimus <daviditstutt@gmail.com>

Commit:44cab48
Author:Milinda Dias

Merge branch 'milinda/cacheInvalidate-directive' into milinda/cachePopulate-directive

Commit:c6fb320
Author:Milinda Dias

Merge branch 'milinda/entityCache-directive' into milinda/cacheInvalidate-directive

Commit:2075164
Author:Milinda Dias
Committer:GitHub

feat(composition): @openfed__entityCache directive (1/5) (#2980)

Commit:f21a2a2
Author:Milinda Dias
Committer:GitHub

Merge branch 'main' into milinda/entityCache-directive

Commit:238e4fb
Author:JivusAyrus

refactor: rename totalProposalsCount to totalCount in proposal responses

Commit:ea22596
Author:Milinda Dias

Merge branch 'milinda/requestScoped-directive' into milinda/queryCache-directive # Conflicts: # composition/src/v1/normalization/normalization-factory.ts # connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go # connect/src/wg/cosmo/node/v1/node_pb.ts # router/gen/proto/wg/cosmo/node/v1/node.pb.go # shared/src/router-config/builder.ts

Commit:09ebecc
Author:Milinda Dias

Merge branch 'milinda/cachePopulate-directive' into milinda/requestScoped-directive # Conflicts: # composition/src/v1/normalization/normalization-factory.ts # connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go # connect/src/wg/cosmo/node/v1/node_pb.ts # router/gen/proto/wg/cosmo/node/v1/node.pb.go

Commit:bcbc740
Author:Milinda Dias

Merge branch 'milinda/cacheInvalidate-directive' into milinda/cachePopulate-directive # Conflicts: # composition/src/v1/normalization/normalization-factory.ts # composition/src/v1/normalization/types/types.ts # connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go # connect/src/wg/cosmo/node/v1/node_pb.ts # router/gen/proto/wg/cosmo/node/v1/node.pb.go # shared/src/router-config/builder.ts

Commit:34122a1
Author:Milinda Dias

Merge branch 'milinda/entityCache-directive' into milinda/cacheInvalidate-directive # Conflicts: # composition/src/router-configuration/types.ts # composition/src/v1/normalization/normalization-factory.ts # connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go # connect/src/wg/cosmo/node/v1/node_pb.ts # proto/wg/cosmo/node/v1/node.proto # router/gen/proto/wg/cosmo/node/v1/node.pb.go # shared/src/router-config/builder.ts

Commit:ecc8047
Author:Milinda Dias

fix: review comments

Commit:c3301e0
Author:JivusAyrus

fix: pagination in proposals page

Commit:69f5af6
Author:Milinda Dias

feat(composition): @openfed__entityCache directive

Commit:1d693ce
Author:Milinda Dias

feat(composition): @openfed__cacheInvalidate directive

Commit:b52c0a2
Author:Milinda Dias

feat(composition): @openfed__cachePopulate directive

Commit:4c90da9
Author:Milinda Dias

feat(composition): @openfed__queryCache and @openfed__is directives

Commit:faca30a
Author:Milinda Dias

feat(composition): @openfed__requestScoped directive

Commit:37a198e
Author:Milinda Dias

feat(composition): @openfed__queryCache and @openfed__is directives

Commit:2859cba
Author:Milinda Dias

feat(composition): @openfed__requestScoped directive

Commit:c7044af
Author:Milinda Dias

feat(composition): @openfed__cachePopulate directive

Commit:3e8d3c5
Author:Milinda Dias

feat(composition): @openfed__cacheInvalidate directive

Commit:62bbc85
Author:Milinda Dias

feat(composition): @openfed__entityCache directive

Commit:f54ef2a
Author:Wilson Rivera
Committer:GitHub

feat: controlpanel move to a accept first strategy for batch (#2963)

Commit:9aef4ca
Author:Ondrej Synacek
Committer:GitHub

feat: delete & list clients using wgc (#2795)

Commit:51f766e
Author:Milinda Dias
Committer:Milinda Dias

feat(composition): entity caching directives, proto config types, and generated bindings Extracted from jensneuse/entity-caching-v2 (PR #2777) — composition + proto layer only. - composition: @openfed__entityCache / @openfed__queryCache / @openfed__requestScoped directive definitions, extraction in normalization-factory, ConfigurationData types, warnings, and tests (incl. fuzz + mapping rules) - proto: additive DataSourceConfiguration fields 17-21 and new messages (EntityCacheConfiguration, RootFieldCacheConfiguration, EntityKeyMapping, EntityCacheFieldMapping, CachePopulateConfiguration, CacheInvalidateConfiguration, RequestScopedFieldConfiguration) - regenerated bindings: router/gen, connect-go, connect (incl. graphqlmetrics regen side-effects), composition-go bundle - shared: router-config serializer for the new proto fields Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Commit:6029ae0
Author:Ahmet Soormally
Committer:GitHub

fix(router/connectrpc): map GraphQL enum values to proto names on response path (#2928)

Commit:ccbcb76
Author:Suvij Surya
Committer:GitHub

feat: implement early stop for feature flag updates with no changes (#2932) Co-authored-by: Wilson Rivera <wilson@wundergraph.com>

Commit:9361a30
Author:Nithin Kumar B
Committer:GitHub

feat(cli): add subgraph batch-publish command (#2899)

Commit:2c2cb71
Author:Suvij Surya
Committer:GitHub

feat: add functionality to restrict the login methods of an organization (#2896) Co-authored-by: Alessandro Pagnin <ale@wundergraph.com>

Commit:42b307b
Author:Suvij Surya
Committer:GitHub

feat: add options to restrict certain namespaces to certain login methods (#2876)

Commit:89635b7
Author:Ondrej Synacek
Committer:GitHub

feat: declutter step 1 in the onboarding + new empty state (#2888)

Commit:716b786
Author:Ondrej Synacek
Committer:GitHub

feat: studio handles analytics downtime gracefully (#2878)

Commit:d465de3
Author:Jens Neuse

feat(router): entity caching with L1/L2, shadow mode, and analytics Re-implementation of PR #2777 entity caching on top of fresh origin/main (74ce84b4b6). Previous branch was hard-reset; backup preserved on backup/v2-pre-merge-attempt-2-20260524-121556 and rescue/entity-caching-merge-attempt-20260523-135801. What's added: - @openfed__entityCache, queryCache, cachePopulate, cacheInvalidate, is, requestScoped composition directives + extraction - router/pkg/entitycache: ristretto memory + go-redis L2 + circuit breaker - router/pkg/metric/entity_cache_metrics: OTLP + Prometheus instruments - router/core wiring: WithEntityCaching, WithEntityCacheInstances, EntityCachingHandlerOptions, cachingOptions(reqCtx) for per-request X-WG-Disable-Entity-Cache[-L1/-L2] header overrides (dev-only), EntityCacheKeyInterceptor module interface - Proto extensions on node.v1.DataSourceConfiguration: EntityCacheConfiguration, QueryCacheConfiguration / RootFieldCacheConfiguration, CachePopulateConfiguration, CacheInvalidateConfiguration, EntityKeyMapping/EntityCacheFieldMapping, RequestScopedFieldConfiguration - Playground Cache Explorer view + cache-mode dropdown - demo cachegraph/cachegraph_ext/viewer subgraphs + cache-demo runner - router-tests/entity_caching test suite (59 subtests) - composition tests: entity-caching (60), entity-cache-mapping-rules, entity-cache-fuzz (~135 total) - benchmark/ k6 scenarios for cache performance - cli/cachegraph-cachedemo compose configs Dep bump: - graphql-go-tools v2.4.0 -> v2.4.1-0.20260523190154-590f67798262 (PR #1259 HEAD, includes widening fix 85fb34e388 for L1 request-scoped refetch behavior). Adapts to: - LoaderCache.Set TTL moved to per-entry CacheEntry.TTL - SubscriptionUpdater.Close(kind) split into Complete()/Error(data)/Done() - resolve.VariablesView replaces *astjson.Value in cost calc - ArenaResolveGraphQLResponse (3-arg) replaces ResolveGraphQLResponse - resolve.ConnectionID typed alias; NewConnectionID() - plan.FieldCost (was FieldWeight) + DirectiveArgumentWeights - subscriptionclient.ErrFailedUpgrade / ErrInvalidSubprotocol - graphql_datasource.WithUpgradeClient/WithStreamingClient options Adopts main's individual-metric-fields pattern in graphServer (dropped the grouped serverMetrics struct). Adopts main's separated Complete() + Done() pattern in subscription_event_updater (adapters pair the calls). Validation: - go build ./... clean for router, router-tests, demo - router-tests/entity_caching: 59/59 subtests pass - router/core unit tests (entity cache wiring): pass - router/pkg/{entitycache,metric,config}: pass - composition entity-caching tests: 60/60 pass - composition entity-cache mapping + fuzz: 135/135 pass - composition build clean - demo end-to-end smoke: router serves cached entities, cache hit observed (17ms cold -> 0ms warm), embedded playground includes Cache Explorer + cache-mode dropdown Supersedes the failed merge attempt preserved on the rescue branch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:cbd541c
Author:Milinda Dias
Committer:Milinda Dias

emit FIELD_SELECTION events for nested object accessors When events export is enabled, the router writes one FIELD_SELECTION row per Object/Array accessor selected inside an entity scope, in addition to the existing per-leaf FIELD_HASH rows. Emission rides on EventsExport.Enabled — no separate sub-flag. Downstream consumers filter via the EventType column if they only want field_hash. The accessor row gives downstream coverage analytics (hub) the signal to count an accessor as observed even though cosmo's router flattens nested reads onto the parent entity and never emits a row keyed by the accessor name on its own. Wire change: - proto: new EventType.FIELD_SELECTION = 13, new string child_type_name field at slot 94 (reserved 95 for a future concrete_type_name). - engine flag plumbed through CachingOptions.EmitFieldSelections; router sets it to true whenever EventsExport.Enabled is true. - router builder mirrors the FIELD_HASH PII guard (drop on KeyHash=0). - writer appends ChildTypeName as the last column; new ClickHouse migration adds the column (additive, no row rewrite). - end-to-end router-test asserts FIELD_SELECTION for Warehouse.location emits with ChildTypeName=Location, non-zero KeyHash, zero FieldHash. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:cc85f26
Author:Jens Neuse
Committer:Ahmet Soormally

chore(code-mode-v2): demo full-federation fix + yoko proto/mock refresh Multi-topic snapshot of code-mode-v2 work in progress. demo/code-mode: - Include all non-EDFS demo subgraphs in the local federation: hobbies, products, test1, countries + the products_fg feature graph (under feature flag myff), in addition to the existing employees, family, availability, mood. Mirrors demo/graph-no-edg.yaml. The previous 4-subgraph set silently lacked Employee.hobbies (and Country, products, test1 fields), so code-mode-search-tools could never resolve prompts about those domains. - Fix BSD sed bug in prepare-schemas.sh: the previous regex used `\b` which macOS BSD sed treats as a literal `b`, so @authenticated stayed on type/enum/interface definitions. Switch to a portable (^|whitespace)/(non-word|EOL) anchor pair. Also extend the loop to cover all 9 subgraphs. - start.sh + run_subgraphs_subset.sh: launch the 5 added subgraphs on ports 4003/4004/4006/4009/4010 with matching wait_url checks. - README + Makefile comment: document the new subgraph set. yoko proto + mock + client: - Rewrite proto/wg/cosmo/code_mode/yoko/v1/yoko.proto and regenerate router/gen/proto/.../{yoko.pb.go, yokov1connect/yoko.connect.go}. - Rewrite demo/code-mode/yoko-mock/main.go (and tests). - Refresh router/internal/codemode/yoko/{client.go, client_test.go, searcher.go} against the new contract. - Bump demo/code-mode/{mcp-stdio-proxy,yoko-mock}/go.{mod,sum}. Connect demo: - Refresh demo/code-mode-connect/{README.md, router-config.yaml, start.sh} against the same yoko contract. Build / generate: - Makefile: pass --include-imports to `buf generate` so transitive protobuf imports are regenerated alongside the yoko v1 schema. - buf.yaml + buf.lock: pin the buf module deps now needed for that --include-imports run. - router/gen/proto/buf/validate/validate.pb.go: regenerated buf validate import. Misc: - router/pkg/codemode/varschema: new package + tests. - router/pkg/grpcconnector/grpcplugin/grpc_plugin.go: minor update. - router/internal/codemode/sandbox/sandbox_test.go + router/internal/codemode/server/observability_handler_test.go: adjust tests for the refreshed client surface. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:85b4593
Author:Jens Neuse
Committer:Ahmet Soormally

feat(router): add Code Mode MCP server Adds a second MCP server next to the existing per-operation one, exposing two generic tools instead of one-tool-per-operation: - code_mode_search_tools: takes prompts, generates GraphQL ops, registers them in the session catalog, returns their TS signatures. - code_mode_run_js: runs an async arrow against the session catalog inside a JS sandbox (V8 isolate), with tools.<name>(vars) bound to the registered ops. Includes: - router/internal/codemode: harness, sandbox, server, storage, tsgen, yoko (query-gen client), calltrace, observability. - proto/wg/cosmo/code_mode/yoko/v1: Yoko query-gen Connect API. - router/pkg/config: code_mode config block (auth, sandbox limits, query-generation endpoint, named-ops, mutation approval). - demo/code-mode: local federation + Yoko mock + start scripts + MCP client config snippets (Claude Code, Claude Desktop, Codex). - demo/code-mode-connect: alternate demo against an external yoko Connect supergraph (set YOKO_DIR). - router-tests: end-to-end named-ops integration test.

Commit:f0d0ef6
Author:Milinda Dias

Squash merge cohort-config-versions-rpc into milinda/entity-caching-3-feature-flag-rollout-router

Commit:3f125a2
Author:Wilson Rivera
Committer:GitHub

feat: add feature flag recomposition support (#2853)

Commit:522968a
Author:Wilson Rivera

Merge branch 'feat/split-configs' into wilson/eng-9541-controlplane-add-rpc-method-to-recompose-a-specific-feature # Conflicts: # connect-go/gen/proto/wg/cosmo/platform/v1/platform.pb.go # connect-go/gen/proto/wg/cosmo/platform/v1/platformv1connect/platform.connect.go # connect/src/wg/cosmo/platform/v1/platform-PlatformService_connectquery.ts # connect/src/wg/cosmo/platform/v1/platform_connect.ts # connect/src/wg/cosmo/platform/v1/platform_pb.ts # controlplane/src/core/bufservices/PlatformService.ts # controlplane/src/core/services/CompositionService.ts # proto/wg/cosmo/platform/v1/platform.proto

Commit:3bd0039
Author:Wilson Rivera

chore: add audit log and error counts

Commit:6a64b7e
Author:Wilson Rivera

feat: add rpc method to recompose feature flags

Commit:ba63680
Author:Dominik Korittki
Committer:GitHub

fix(router): fix unmarshall error of mapper.json during config fetch (#2842)

Commit:3c5d33e
Author:Jens Neuse

chore(code-mode-v2): demo full-federation fix + yoko proto/mock refresh Multi-topic snapshot of code-mode-v2 work in progress. demo/code-mode: - Include all non-EDFS demo subgraphs in the local federation: hobbies, products, test1, countries + the products_fg feature graph (under feature flag myff), in addition to the existing employees, family, availability, mood. Mirrors demo/graph-no-edg.yaml. The previous 4-subgraph set silently lacked Employee.hobbies (and Country, products, test1 fields), so code-mode-search-tools could never resolve prompts about those domains. - Fix BSD sed bug in prepare-schemas.sh: the previous regex used `\b` which macOS BSD sed treats as a literal `b`, so @authenticated stayed on type/enum/interface definitions. Switch to a portable (^|whitespace)/(non-word|EOL) anchor pair. Also extend the loop to cover all 9 subgraphs. - start.sh + run_subgraphs_subset.sh: launch the 5 added subgraphs on ports 4003/4004/4006/4009/4010 with matching wait_url checks. - README + Makefile comment: document the new subgraph set. yoko proto + mock + client: - Rewrite proto/wg/cosmo/code_mode/yoko/v1/yoko.proto and regenerate router/gen/proto/.../{yoko.pb.go, yokov1connect/yoko.connect.go}. - Rewrite demo/code-mode/yoko-mock/main.go (and tests). - Refresh router/internal/codemode/yoko/{client.go, client_test.go, searcher.go} against the new contract. - Bump demo/code-mode/{mcp-stdio-proxy,yoko-mock}/go.{mod,sum}. Connect demo: - Refresh demo/code-mode-connect/{README.md, router-config.yaml, start.sh} against the same yoko contract. Build / generate: - Makefile: pass --include-imports to `buf generate` so transitive protobuf imports are regenerated alongside the yoko v1 schema. - buf.yaml + buf.lock: pin the buf module deps now needed for that --include-imports run. - router/gen/proto/buf/validate/validate.pb.go: regenerated buf validate import. Misc: - router/pkg/codemode/varschema: new package + tests. - router/pkg/grpcconnector/grpcplugin/grpc_plugin.go: minor update. - router/internal/codemode/sandbox/sandbox_test.go + router/internal/codemode/server/observability_handler_test.go: adjust tests for the refreshed client surface. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:3fdfd16
Author:Milinda Dias

chore(proto): clarifying comment on CacheEventsService Touches a path under proto/ to retrigger the Proto CI workflow on this branch. The previous Proto CI run on 3ba5c01a5 left a stale "uncommitted changes detected" sticky comment that never cleared because subsequent commits on this branch shared SHAs with branch 2 (where Proto CI ran once and succeeded). Locally `make generate-go` is clean against this proto state, so this push should produce a green Proto CI and clear the sticky.

Commit:601ff7e
Author:Milinda Dias

chore(controlplane,proto): minor cleanups for proposal rollout code - ProposalRepository.getLinkedRolloutFlag: scope by organizationId. Defense-in-depth — every current caller pre-validates via ById/ByName, but a future careless caller could leak a sibling org's flag id. - composer.ts and getProposal.ts: replace `trafficPercentage == null ? undefined : trafficPercentage` with `trafficPercentage ?? undefined`. Same semantics, less noise. - node.proto: comment that `optional` on traffic_percentage is load-bearing — explicit `0` (paused rollout, still part of cumulative budget) is distinct from unset (preview-only flag, header-pinned), and proto3 presence is the only way to tell the two apart. Don't drop it. - Regenerated Go proto bindings to pick up the new comment.

Commit:ffdfc9a
Author:Milinda Dias
Committer:Milinda Dias

feat(proto): add traffic_percentage on FeatureFlagRouterExecutionConfig + proposal-rollout RPCs Adds the wire contract for percentage-based feature flag rollouts driven from proposals. node.proto carries traffic_percentage on each feature flag's execution config so the router can route a configured share of unpinned traffic to that flag's variant. platform.proto adds the rollout-side RPCs: - BulkUpdateProposalRolloutPercentages (atomic create-or-update of one or more proposal rollouts on the same federated graph; deploys feature subgraphs + flag if no rollout exists yet, otherwise updates the percentage) - TeardownProposalRollout (deletes the linked feature flag + feature subgraphs) - rolloutFeatureFlagId / rolloutPercentage fields on the Proposal message Includes regenerated TS bindings (connect/src). Go bindings are regenerated locally but not committed — those will land alongside the consuming code. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:774aed4
Author:Milinda Dias

feat: router proto update for cache event pipeline

Commit:bef8aa9
Author:Jens Neuse

feat(router): add Code Mode MCP server Adds a second MCP server next to the existing per-operation one, exposing two generic tools instead of one-tool-per-operation: - code_mode_search_tools: takes prompts, generates GraphQL ops, registers them in the session catalog, returns their TS signatures. - code_mode_run_js: runs an async arrow against the session catalog inside a JS sandbox (V8 isolate), with tools.<name>(vars) bound to the registered ops. Includes: - router/internal/codemode: harness, sandbox, server, storage, tsgen, yoko (query-gen client), calltrace, observability. - proto/wg/cosmo/code_mode/yoko/v1: Yoko query-gen Connect API. - router/pkg/config: code_mode config block (auth, sandbox limits, query-generation endpoint, named-ops, mutation approval). - demo/code-mode: local federation + Yoko mock + start scripts + MCP client config snippets (Claude Code, Claude Desktop, Codex). - demo/code-mode-connect: alternate demo against an external yoko Connect supergraph (set YOKO_DIR). - router-tests: end-to-end named-ops integration test.

Commit:932f4ec
Author:Dominik Korittki
Committer:GitHub

chore(router, controlplane): add engine config hash mapping to node proto v1 (#2816)

Commit:ca888a4
Author:Jens Neuse

Merge remote-tracking branch 'origin/main' into streams-bypass-filtering-techniques # Conflicts: # composition-go/index.global.js # router-tests/go.mod # router-tests/go.sum # router/core/factoryresolver.go # router/go.mod # router/go.sum

Commit:4d3b15a
Author:Jens Neuse

feat: add bypassIfValuesNull to openfed__subscriptionFilter Adds an optional `bypassIfValuesNull: Boolean` field to `openfed__SubscriptionFieldCondition`. When set to `true`, an `IN` condition whose templated value resolves to `nil` or GraphQL `null` evaluates as match instead of skip, so customers with optional subscription arguments can express "no filter when the argument is absent or null". Default `false`; existing behavior unchanged. The flag flows from SDL through composition validation, the proto wire format, the shared serializer, and the router's proto-to-plan mapper into the upstream graphql-go-tools runtime where the bypass is evaluated as a preflight before the event payload is consulted. Coverage: - composition: validate Boolean type, dedup, explicit `false` collapses to undefined, propagation through nested OR - shared: serializer emits proto field only when explicitly `true` - router/core: unit tests for `mapProtoFilterToPlanFilter` covering IN, OR, AND > NOT propagation - router-tests/events: end-to-end NATS tests for explicit value match, non-matching value drops, explicit null variable bypass, and declared-but-absent variable bypass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:3227519
Author:Ondrej Synacek
Committer:GitHub

feat: onboarding wizard (#2790) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

Commit:b70a55b
Author:Yury Smolski
Committer:GitHub

feat(router): support costs on arguments of directives (#2781) This PR supports cost weights on the arguments of the directives. When a customer applies such a directive with the specific non-null argument to a field, then its cost will be added to the cost of the field. Composition now tracks weights for arguments of directives for each field. This is a static data so it goes into the config of a schema. It is needed for the engine to understand where directives' arguments with costs were used. Router/engine uses it to take those weights into costs accounting. If such directive was applied to the implementing type of some interface, and if the interface type is being used in the operation, then all the implementing types are taken into an account and maximum weight is picked among them. I have added just a simple e2e test to verify that feature is working. More extended tests are implemented in the corresponding engine PR. Example how cost from the directive could be added to the employees' field of the Engineer` type: directive @expensiveOp(applied: Boolean = true @cost(weight: 22)) on FIELD_DEFINITION type Engineer implements RoleType { departments: [Department!]! title: [String!]! employees: [Employee!]! @goField(forceResolver: true) @expensiveOp engineerType: EngineerType! }

Commit:2958f1d
Author:Jens Neuse

feat(router): entity caching with L1/L2, shadow mode, and analytics Squashed snapshot of jensneuse/entity-caching (e5ac2b97) onto main. The original branch's history was rooted at unsigned "Initial commit" 4d73e222c... while wundergraph/cosmo:main is rooted at the GPG-signed equivalent — every commit SHA differs and GitHub treated the two as unrelated histories, which is why PR #2677 was closed and could not be reopened. This commit re-bases the entire feature as a single diff on top of current main so it can be reviewed and merged. Original branch is preserved at jensneuse/entity-caching for history. Supersedes #2677.

Commit:8ed1534
Author:Jens Neuse

Merge remote-tracking branch 'origin/main' into jensneuse/entity-caching Resolve conflicts: keep local entity-caching changes (graphql-go-tools rc.270 with @requestScoped, EntityCachingConfiguration, MemoryStorageProvider, normalization factory typing) and merge upstream additions (CostControl ValidateSliceArguments, StorageProvider envPrefix, PQLManifestConfig tests, Cosmo Connect args + @requires). Regenerate proto bindings (make generate-go), composition-go bundle, and demo plugins (cd demo && make plugin-build-ci). Add staticcheck.conf to remaining entity_caching subgraphs to silence SA4004 in gqlgen-generated federation code. Apply gofmt to attributes.go and router_entity_cache_test.go. Includes a regression test (TestEntityCaching) that asserts @cachePopulate must not write to L2 when router L2 caching is disabled. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:5cfa453
Author:Jens Neuse

feat(entity-caching): address PR #2677 review feedback See TODO.md for the per-item resolution log. Highlights: - Namespace 6 new entity-caching directives as @openfed__ (Aenimus). - Proto field rename negative_cache_ttl_seconds -> not_found_cache_ttl_seconds (field #6 preserved, old name reserved) + TTL-semantics field comments. - Composition correctness: nested-key mapping iterates all + carries correct isBatch on list returns; renamed root types attach cache config under the canonical root; TypeScript hygiene (branded aliases, Array<T>, ordinal helper, alphabetical constants, reuse isTypeNodeListType). - Router: default cache stored under both "default" and its provider_id so overrides reuse the instance; executor nil-safety + skip+warn on unknown subgraph ID; buildRedisClient rename; logEntityCacheOverrideIssues rename; metrics source labels via CacheOperationSource; otel attribute constants; config.schema.json memory max_size bytes-string format. - Test truthfulness: 10 router-tests subtests now assert counters.* and/or cache.Len(); 9 of 10 fail with L2 disabled (was 0). negative_cache tests redesigned with mutation-created IDs; items subgraph mutations persist and emit events. Circuit breaker concurrent tests; redis post-close Set and Delete coverage; memory concurrency test error propagation; ristretto bounded assertion; post-close len guard. - New unit coverage: entity_cache_metrics_test.go (0% -> ~94%), graphql_handler caching-options tests, router_entity_cache_test.go covering default-cache reuse via require.Same. - Playground: functional setHeaders (no stale closure), Math.max zero duration clamp, controlled Tabs. - Docs: PII redaction on raw keys, namespace sweep across all references, ENTITY_CACHING_DEMO SDL refresh, CLAUDE.md cheatsheet + code-block tags. Flagged follow-up: @openfed__cachePopulate writes still land in L2 when L2.Enabled=false. Read path correctly gates so user-visible impact is wasted writes only. Fix location: cache-populate write path must respect EntityCachingConfiguration.L2.Enabled. Verified: - composition: 1194 tests pass. - router, router-tests: -race clean. - router-tests/entity_caching: 63/64 pass (1 pre-existing skip). - cache-demo e2e: every documented query + all three X-WG-Disable-Entity-Cache* header gates behave as documented. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:560a0c6
Author:Jens Neuse

feat(composition): entity caching + @requestScoped directive Adds @entityCache, @queryCache, @cachePopulate, @cacheInvalidate, @is, and @requestScoped directives with validation, type-aware key mapping, and end-to-end wiring through the composition pipeline (composition → shared → proto → connect/connect-go → composition-go bundle). Includes new test suites (entity-cache-fuzz, entity-cache-mapping-rules) and composition docs (AGENTS.md, CLAUDE.md, COMPOSITION_CONVENTIONS.md). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Commit:74f44a1
Author:Suvij Surya
Committer:GitHub

feat: add new endpoints for fetching feature flags and feature subgraphs by federated graph (#2729) Co-authored-by: Wilson Rivera <wilson@wundergraph.com> Co-authored-by: Wilson Rivera <mr.wilson.rivera@gmail.com>

Commit:cf05b22
Author:Suvij Surya
Committer:GitHub

feat: add new endpoints for fetching feature flags and feature subgraphs by federated graph (#2729) Co-authored-by: Wilson Rivera <wilson@wundergraph.com> Co-authored-by: Wilson Rivera <mr.wilson.rivera@gmail.com>

Commit:23fc31d
Author:Alessandro Pagnin
Committer:GitHub

feat: use email as main tracking field (#2700) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Nithin Kumar B <nithinkumar5353@gmail.com>

Commit:a3b622d
Author:Alessandro Pagnin
Committer:GitHub

feat: use email as main tracking field (#2700) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Nithin Kumar B <nithinkumar5353@gmail.com>

Commit:787b178
Author:Ondřej Synáček
Committer:Ondřej Synáček

feat: expose comm settings fields

Commit:411745f
Author:Ondřej Synáček
Committer:Ondřej Synáček

feat: handlers + proto schema + repository for creating + getting onboarding

Commit:62ff114
Author:Ondřej Synáček
Committer:Ondřej Synáček

feat: handlers + proto schema + repository for finishing onboarding

Commit:3f05deb
Author:Dominik Korittki
Committer:GitHub

feat(router): support fields with arguments and @requires (Cosmo Connect) (#2731)

Commit:f90dc88
Author:Dominik Korittki
Committer:GitHub

feat(router): support fields with arguments and @requires (Cosmo Connect) (#2731)

Commit:9696c37
Author:Ludwig Bedacht
Committer:GitHub

feat(router): add support for composite types in requires fields (#2689)

Commit:9a303d1
Author:Ludwig Bedacht
Committer:GitHub

feat(router): add support for composite types in requires fields (#2689)

Commit:507e4a5
Author:Suvij Surya
Committer:GitHub

feat: add server-side pagination to operation overrides with limit and offset parameters (#2695)

Commit:41bb6b9
Author:Suvij Surya
Committer:GitHub

feat: add server-side pagination to operation overrides with limit and offset parameters (#2695)

Commit:faa3476
Author:Jens Neuse

Merge remote-tracking branch 'origin/main' into jensneuse/entity-caching # Conflicts: # composition/src/errors/errors.ts # composition/src/v1/constants/directive-definitions.ts # composition/src/v1/normalization/directive-definition-data.ts # composition/src/v1/normalization/normalization-factory.ts # connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go # connect/src/wg/cosmo/node/v1/node_pb.ts # proto/wg/cosmo/node/v1/node.proto # router-tests/go.mod # router-tests/go.sum # router/core/factoryresolver.go # router/core/graph_server.go # router/core/graphql_handler.go # router/core/router.go # router/gen/proto/wg/cosmo/node/v1/node.pb.go # router/go.mod # router/go.sum

Commit:5294b8f
Author:Yury Smolski
Committer:GitHub

feat: expose costs (#2470) Integrate static and dynamic cost calculation into the router. Expose the static (estimated) cost value in the modules. Expose both costs via telemetry and response headers. Metrics for costs should be enabled individually in the corresponding telemetry section. Composition was reviewed in another PR and merged here. End-to-end benchmark for a big query to measure the impact of cost control: │ SequentialBig │ SequentialBigCostAnalysis │ │ sec/op │ sec/op vs base │ *-14 584.1µ ± 0% 586.7µ ± 0% +0.45% (p=0.000 n=40) │ SequentialBig │ SequentialBigCostAnalysis │ │ B/s │ B/s vs base │ *-14 5.527Mi ± 0% 5.503Mi ± 0% -0.43% (p=0.000 n=40) │ SequentialBig │ SequentialBigCostAnalysis │ │ B/op │ B/op vs base │ *-14 456.1Ki ± 0% 456.1Ki ± 0% ~ (p=0.822 n=40) │ SequentialBig │ SequentialBigCostAnalysis │ │ allocs/op │ allocs/op vs base │ *-14 6.444k ± 0% 6.452k ± 0% +0.12% (p=0.000 n=40) Fixes ENG-8844 Fixes ENG-8986 Co-authored-by: Aenimus <47415099+Aenimus@users.noreply.github.com> Co-authored-by: StarpTech <deusdustin@gmail.com>

Commit:d43aa40
Author:Yury Smolski
Committer:GitHub

feat: expose costs (#2470) Integrate static and dynamic cost calculation into the router. Expose the static (estimated) cost value in the modules. Expose both costs via telemetry and response headers. Metrics for costs should be enabled individually in the corresponding telemetry section. Composition was reviewed in another PR and merged here. End-to-end benchmark for a big query to measure the impact of cost control: │ SequentialBig │ SequentialBigCostAnalysis │ │ sec/op │ sec/op vs base │ *-14 584.1µ ± 0% 586.7µ ± 0% +0.45% (p=0.000 n=40) │ SequentialBig │ SequentialBigCostAnalysis │ │ B/s │ B/s vs base │ *-14 5.527Mi ± 0% 5.503Mi ± 0% -0.43% (p=0.000 n=40) │ SequentialBig │ SequentialBigCostAnalysis │ │ B/op │ B/op vs base │ *-14 456.1Ki ± 0% 456.1Ki ± 0% ~ (p=0.822 n=40) │ SequentialBig │ SequentialBigCostAnalysis │ │ allocs/op │ allocs/op vs base │ *-14 6.444k ± 0% 6.452k ± 0% +0.12% (p=0.000 n=40) Fixes ENG-8844 Fixes ENG-8986 Co-authored-by: Aenimus <47415099+Aenimus@users.noreply.github.com> Co-authored-by: StarpTech <deusdustin@gmail.com>

Commit:dfa7a05
Author:Aenimus
Committer:GitHub

feat: add graph recompose (#2652)

Commit:8bdb7d0
Author:Aenimus
Committer:GitHub

feat: add graph recompose (#2652)

Commit:3d8740e
Author:Jens Neuse

refactor(router): clean up entity caching review feedback - Remove entity analytics pipeline (deferred to future PR, see ENTITY_CACHE_ANALYTICS.md) - Rename config fields: Subgraphs → SubgraphCacheOverrides, CacheName → StorageProviderID - Add subgraph-level storage_provider_id with 3-tier resolution (entity → subgraph → default) - Add memory storage provider support for L2 cache - Add protoOperationTypeSubscription constant for type-safe comparison - Rename entity_caching_test.go → entity_caching_standard_subgraphs_test.go for clarity - Extract repeated query literals into req variables in tests - Add redis unit tests with miniredis (package coverage 69.9% → 94.3%) - Improve OTEL entity cache metrics: add logger, Shutdown(), centralize attributes - Update ENTITY_CACHING_CONFIGURATION.md with all config options Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Commit:d929c50
Author:Jens Neuse

feat(router): add entity cache analytics support

Commit:36cdeb3
Author:Jens Neuse

Merge remote-tracking branch 'origin/main' into jensneuse/entity-caching # Conflicts: # router-tests/go.mod # router-tests/go.sum # router/go.mod # router/go.sum

Commit:4d2ee63
Author:Ludwig Bedacht
Committer:GitHub

feat(router): add router support for field resolvers without arguments (#2645)