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)