Skip to content

feat: fix recomposition bugs and optimise recompositions#2860

Merged
wilsonrivera merged 7 commits into
mainfrom
wilson/eng-9560-controlplane-updating-a-base-subgraph-does-not-recompose
May 13, 2026
Merged

feat: fix recomposition bugs and optimise recompositions#2860
wilsonrivera merged 7 commits into
mainfrom
wilson/eng-9560-controlplane-updating-a-base-subgraph-does-not-recompose

Conversation

@wilsonrivera
Copy link
Copy Markdown
Contributor

@wilsonrivera wilsonrivera commented May 12, 2026

Summary by CodeRabbit

  • New Features

    • Add label-based lookup for feature flags by subgraph labels with optional enabled-only filtering.
    • Improve tracking of affected federated graphs and feature flags during subgraph updates; recomposition now honors the split-config-loading toggle.
  • Tests

    • Expand integration coverage for feature-flag recomposition scenarios, add split-config-loading tests, and include additional GraphQL schema fixtures for publish/update flows.

Review Change Stack

Checklist

  • I have discussed my proposed changes in an issue and have received approval to proceed.
  • I have followed the coding standards of the project.
  • Tests or benchmarks have been added or updated.
  • Documentation has been updated on https://github.com/wundergraph/docs-website.
  • I have read the Contributors Guide.

Open Source AI Manifesto

This project follows the principles of the Open Source AI Manifesto. Please ensure your contribution aligns with its principles.

Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

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

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 12, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This PR adds FeatureFlagRepository.getFeatureFlagsBySubgraphLabels, uses it from SubgraphRepository.update to collect affected feature flags and federated graphs with split-config-loading gating, and updates integration tests and GraphQL fixtures to assert recomposition behavior for base and mutual subgraph changes.

Changes

Feature Flag Recomposition on Subgraph Updates

Layer / File(s) Summary
Feature flag query by subgraph labels
controlplane/src/core/repositories/FeatureFlagRepository.ts
New getFeatureFlagsBySubgraphLabels method normalizes labels, optionally filters disabled flags, queries featureFlags by namespace/org with label overlap (or exact empty-label match), and returns feature flags with their featureSubgraphs excluding subgraphs with empty schemaVersionId.
Subgraph update with feature flag tracking
controlplane/src/core/repositories/SubgraphRepository.ts
update imports OrganizationRepository, initializes affectedFederatedGraphById and affectedFeatureFlagIds earlier, checks split-config-loading, accumulates federated graph candidates in a map, queries enabled feature flags by subgraph labels for non-feature updates, early-returns when no changes, derives affectedFeatureFlags from ids, schedules recomposition via compositionService, and re-fetches federated graphs by map keys after recomposition.
Integration tests and fixtures for split-config-loading
controlplane/test/feature-flag/feature-flag-integration.test.ts, controlplane/test/test-data/feature-flags/*, controlplane/test/label.test.ts
Tests import eq and graphCompositions, enable debug mode, add default URL constants, adjust assertions and descriptions for enable/disable/re-enable flows, add tests confirming no recomposition when only a base subgraph changes and recomposition when a mutual subgraph changes, add a test.todo for orphaned feature flags, and add GraphQL Product/Mutation/User fixtures used by the tests.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • wundergraph/cosmo#2853: Related feature-flag recomposition work that exposes/implements the recomposeFeatureFlag API/CLI used to run composition/deployment for feature flags.
  • wundergraph/cosmo#2729: Related changes to FeatureFlagRepository and subgraph-related feature-flag handling.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main objectives: it describes fixing recomposition bugs and optimizing recompositions, which aligns with the substantial changes to SubgraphRepository and FeatureFlagRepository recomposition logic.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
controlplane/test/feature-flag/feature-flag-integration.test.ts (1)

34-34: ⚡ Quick win

Avoid committing debug mode enabled by default.

isDebugMode = true makes the suite run in debug timing mode for normal runs; this is easy to forget and slows CI feedback.

💡 Suggested fix
-const isDebugMode = true;
+const isDebugMode = false;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@controlplane/test/feature-flag/feature-flag-integration.test.ts` at line 34,
The test constant isDebugMode is hard-coded to true causing tests to run in
debug timing mode; change isDebugMode to default to false (or read from an
explicit CI/env flag like process.env.DEBUG_MODE or a test CLI flag) so normal
CI runs are not slowed. Update the declaration of isDebugMode and any test setup
that references it (search for isDebugMode in feature-flag-integration.test.ts
and related helpers) to use the new default or environment-driven value and
ensure any local debug override is documented in test README or env variable.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@controlplane/src/core/repositories/FeatureFlagRepository.ts`:
- Around line 1044-1055: The loop over matchingFeatureFlags populates result
with FeatureFlagWithFeatureSubgraphs even when, after calling
getFeatureSubgraphsByFeatureFlagId and filtering out entries with empty
schemaVersionId, the featureSubgraphs array is empty; change the logic in the
loop (the block around getFeatureSubgraphsByFeatureFlagId and the result.push
that builds the FeatureFlagWithFeatureSubgraphs) to only push a feature flag
into result when the filtered featureSubgraphs.length > 0 so flags without any
publishable feature subgraphs are excluded.
- Around line 1016-1037: The query currently omits any label predicate when
uniqueLabels is empty, causing all feature flags in the namespace to match;
update the logic that builds conditions (the block using uniqueLabels,
arrayOverlaps, featureFlags.labels, and joinLabel) so that when
uniqueLabels.length === 0 you add a predicate that prevents matches (e.g., a
constant false predicate or an explicit check that cannot be true) instead of
omitting the label condition; ensure this change applies before constructing
matchingFeatureFlags (the
.select(...).from(featureFlags).where(and(eq(featureFlags.namespaceId,
namespaceId), eq(featureFlags.organizationId, this.organizationId),
...conditions)) statement).

In `@controlplane/src/core/repositories/SubgraphRepository.ts`:
- Around line 461-465: The feature-flag lookup currently always passes the
pre-update subgraph.labels to featureFlagRepo.getFeatureFlagsBySubgraphLabels;
change it to use the post-update labels when provided (e.g., use data.labels or
the update payload) so flags matching newly applied labels aren't missed.
Concretely, compute labelsToUse = data.labels ?? subgraph.labels (or the
equivalent update field present in this method) and pass labelsToUse to
getFeatureFlagsBySubgraphLabels instead of subgraph.labels.

---

Nitpick comments:
In `@controlplane/test/feature-flag/feature-flag-integration.test.ts`:
- Line 34: The test constant isDebugMode is hard-coded to true causing tests to
run in debug timing mode; change isDebugMode to default to false (or read from
an explicit CI/env flag like process.env.DEBUG_MODE or a test CLI flag) so
normal CI runs are not slowed. Update the declaration of isDebugMode and any
test setup that references it (search for isDebugMode in
feature-flag-integration.test.ts and related helpers) to use the new default or
environment-driven value and ensure any local debug override is documented in
test README or env variable.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a17578e0-977a-4f9e-8f68-c6b1535f87dd

📥 Commits

Reviewing files that changed from the base of the PR and between 1b23b47 and 64e435c.

📒 Files selected for processing (6)
  • controlplane/src/core/repositories/FeatureFlagRepository.ts
  • controlplane/src/core/repositories/SubgraphRepository.ts
  • controlplane/test/feature-flag/feature-flag-integration.test.ts
  • controlplane/test/test-data/feature-flags/products-standalone-update.graphql
  • controlplane/test/test-data/feature-flags/products-standalone.graphql
  • controlplane/test/test-data/feature-flags/products-update.graphql

Comment thread controlplane/src/core/repositories/FeatureFlagRepository.ts
Comment thread controlplane/src/core/repositories/FeatureFlagRepository.ts
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts
@codecov
Copy link
Copy Markdown

codecov Bot commented May 12, 2026

Codecov Report

❌ Patch coverage is 99.28571% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 64.55%. Comparing base (3f125a2) to head (3655e8d).
⚠️ Report is 3 commits behind head on main.

Files with missing lines Patch % Lines
...lplane/src/core/repositories/SubgraphRepository.ts 98.86% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##             main    #2860       +/-   ##
===========================================
+ Coverage   40.94%   64.55%   +23.60%     
===========================================
  Files        1026      318      -708     
  Lines      129324    45209    -84115     
  Branches     5997     4908     -1089     
===========================================
- Hits        52956    29184    -23772     
+ Misses      74628    16000    -58628     
+ Partials     1740       25     -1715     
Files with missing lines Coverage Δ
...ane/src/core/repositories/FeatureFlagRepository.ts 87.46% <100.00%> (+0.63%) ⬆️
...lplane/src/core/repositories/SubgraphRepository.ts 88.55% <98.86%> (+0.29%) ⬆️

... and 708 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
controlplane/test/feature-flag/feature-flag-integration.test.ts (1)

3157-3161: ⚡ Quick win

Use baseline/delta assertions instead of absolute global composition counts.

At Line 3157 and the repeated queries below, asserting absolute lengths on all isFeatureFlagComposition=true rows can become order-dependent when this TODO is enabled. Prefer capturing an initial count and asserting deltas for this test flow.

💡 Suggested pattern
+        const getFeatureFlagCompositionCount = async () =>
+          (
+            await server.db
+              .select({ id: graphCompositions.id })
+              .from(graphCompositions)
+              .where(eq(graphCompositions.isFeatureFlagComposition, true))
+              .execute()
+          ).length;
+
+        const baselineFeatureFlagCompositionCount = await getFeatureFlagCompositionCount();
-
-        let featureFlagCompositions = await server.db
-          .select({ id: graphCompositions.id })
-          .from(graphCompositions)
-          .where(eq(graphCompositions.isFeatureFlagComposition, true))
-          .execute();
-
-        expect(featureFlagCompositions).toHaveLength(1);
+        expect((await getFeatureFlagCompositionCount()) - baselineFeatureFlagCompositionCount).toBe(1);

         await assertNumberOfCompositions(client, baseGraphName, 1, namespace);
         // ...
-        featureFlagCompositions = await server.db
-          .select({ id: graphCompositions.id })
-          .from(graphCompositions)
-          .where(eq(graphCompositions.isFeatureFlagComposition, true))
-          .execute();
-
-        expect(featureFlagCompositions).toHaveLength(1);
+        expect((await getFeatureFlagCompositionCount()) - baselineFeatureFlagCompositionCount).toBe(1);

Also applies to: 3176-3180, 3195-3199, 3212-3216, 3229-3233

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

In `@controlplane/test/feature-flag/feature-flag-integration.test.ts` around lines
3157 - 3161, The tests currently assert absolute counts by querying
graphCompositions for isFeatureFlagComposition=true (variable
featureFlagCompositions) multiple times; change these to baseline/delta
assertions by first querying and storing an initialCount (e.g.,
initialFeatureFlagCount = (await
server.db.select(...).where(eq(graphCompositions.isFeatureFlagComposition,
true)).execute()).length) before the operations, then after each operation
re-query to get newCount and assert newCount === initialFeatureFlagCount +
expectedDelta (and update initialFeatureFlagCount = newCount when chaining
checks); apply this pattern for all occurrences involving
graphCompositions/isFeatureFlagComposition (the queries around lines referenced:
3157, 3176-3180, 3195-3199, 3212-3216, 3229-3233).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@controlplane/test/feature-flag/feature-flag-integration.test.ts`:
- Around line 3157-3161: The tests currently assert absolute counts by querying
graphCompositions for isFeatureFlagComposition=true (variable
featureFlagCompositions) multiple times; change these to baseline/delta
assertions by first querying and storing an initialCount (e.g.,
initialFeatureFlagCount = (await
server.db.select(...).where(eq(graphCompositions.isFeatureFlagComposition,
true)).execute()).length) before the operations, then after each operation
re-query to get newCount and assert newCount === initialFeatureFlagCount +
expectedDelta (and update initialFeatureFlagCount = newCount when chaining
checks); apply this pattern for all occurrences involving
graphCompositions/isFeatureFlagComposition (the queries around lines referenced:
3157, 3176-3180, 3195-3199, 3212-3216, 3229-3233).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 62fe18b2-4c7d-425f-ab10-f1c37747394d

📥 Commits

Reviewing files that changed from the base of the PR and between 64e435c and 4b64981.

📒 Files selected for processing (1)
  • controlplane/test/feature-flag/feature-flag-integration.test.ts

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@controlplane/src/core/repositories/SubgraphRepository.ts`:
- Around line 389-392: The predicate logic in the loop over newFeatureFlags is
inverted: change the condition that determines when to add a feature flag to
affectedFeatureFlagIds so it selects flags that depend on the updated base
subgraph rather than those that don’t; specifically, replace the every((fsg) =>
fsg.baseSubgraphId !== subgraph.id) check with a positive membership test (e.g.,
some((fsg) => fsg.baseSubgraphId === subgraph.id) or negate the current
predicate) so featureFlag.id is added to affectedFeatureFlagIds only when
featureFlag.featureSubgraphs includes a baseSubgraphId equal to subgraph.id;
apply the same fix to the similar block handling newFeatureFlags later in the
file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2b6a4a33-7dff-4cd0-8f62-06be3b90bfba

📥 Commits

Reviewing files that changed from the base of the PR and between 4b64981 and 2118f35.

📒 Files selected for processing (4)
  • controlplane/src/core/repositories/FeatureFlagRepository.ts
  • controlplane/src/core/repositories/SubgraphRepository.ts
  • controlplane/test/feature-flag/feature-flag-integration.test.ts
  • controlplane/test/test-data/feature-flags/products-standalone-feature.graphql
🚧 Files skipped from review as they are similar to previous changes (1)
  • controlplane/src/core/repositories/FeatureFlagRepository.ts

Comment thread controlplane/src/core/repositories/SubgraphRepository.ts
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts Outdated
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts Outdated
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts Outdated
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

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

Inline comments:
In `@controlplane/src/core/repositories/SubgraphRepository.ts`:
- Around line 392-396: The new-label feature-flag lookup
(featureFlagRepo.getFeatureFlagsBySubgraphLabels call) currently includes
disabled flags (excludeDisabled: false), which diverges from the old-label
reconciliation pass that only scans enabled flags; change the new-label call in
SubgraphRepository (the getFeatureFlagsBySubgraphLabels invocation) to use the
same excludeDisabled behavior as the old-label pass (i.e., set excludeDisabled:
true or reuse the same flag/constant) so disabled flags are not enqueued on
label-only updates and both scans remain aligned.
- Line 579: The call to .map on affectedFederatedGraphById.keys() fails because
keys() returns an IterableIterator; convert the iterator to an array before
mapping so Promise.all can call fedGraphRepo.byId for each id and populate
refreshedGraphs. Replace the keys() usage in the refreshedGraphs assignment (the
expression that builds refreshedGraphs and calls fedGraphRepo.byId) with an
array-conversion like Array.from(...) or the spread operator to produce an array
of ids, then map over that array to call fedGraphRepo.byId.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: cf9bc4b9-37b5-46cc-9b15-51d0df2cf02b

📥 Commits

Reviewing files that changed from the base of the PR and between 2118f35 and 846a75b.

📒 Files selected for processing (1)
  • controlplane/src/core/repositories/SubgraphRepository.ts

Comment thread controlplane/src/core/repositories/SubgraphRepository.ts
Comment thread controlplane/src/core/repositories/SubgraphRepository.ts
Copy link
Copy Markdown
Member

@Aenimus Aenimus left a comment

Choose a reason for hiding this comment

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

LGTM!

@Aenimus Aenimus enabled auto-merge (squash) May 12, 2026 23:34
@Aenimus Aenimus changed the title feat: fix bug where base subgraphs would not recompose feature flags feat: fix recomposition bugs and optimise recompositions May 12, 2026
@Aenimus Aenimus disabled auto-merge May 13, 2026 00:00
…ating-a-base-subgraph-does-not-recompose' into wilson/eng-9560-controlplane-updating-a-base-subgraph-does-not-recompose
@wilsonrivera wilsonrivera enabled auto-merge (squash) May 13, 2026 00:27
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
controlplane/test/label.test.ts (1)

622-627: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Assert updateSubgraph success to avoid false-positive test outcomes

Line 622 and Line 684 mutate state but don’t assert success. In the “should not trigger recomposition” case, a failed update can still leave compositions at 1, causing a false pass.

Suggested patch
-    await client.updateSubgraph({
+    const updateRes = await client.updateSubgraph({
       name: subgraph1Name,
       namespace: 'default',
       labels: [label2],
     });
+    expect(updateRes.response?.code).toBe(EnumStatusCode.OK);

@@
-    await client.updateSubgraph({
+    const updateRes = await client.updateSubgraph({
       name: subgraph1Name,
       namespace: 'default',
       labels: [label3],
     });
+    expect(updateRes.response?.code).toBe(EnumStatusCode.OK);

Also applies to: 684-688

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

In `@controlplane/test/label.test.ts` around lines 622 - 627, The test calls
client.updateSubgraph (e.g., updateSubgraph in the test) to mutate state but
doesn't assert the call succeeded, which can produce false-positive passes;
change the test to capture and assert the result of client.updateSubgraph (or
the returned response object/boolean) and/or verify by fetching the subgraph
after the update (e.g., call client.getSubgraph or inspect the update response)
to ensure the update completed before proceeding with the rest of the test, and
apply the same assertion for the other occurrence around lines 684-688 so
failures in updateSubgraph fail the test instead of masking them.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@controlplane/test/label.test.ts`:
- Around line 622-627: The test calls client.updateSubgraph (e.g.,
updateSubgraph in the test) to mutate state but doesn't assert the call
succeeded, which can produce false-positive passes; change the test to capture
and assert the result of client.updateSubgraph (or the returned response
object/boolean) and/or verify by fetching the subgraph after the update (e.g.,
call client.getSubgraph or inspect the update response) to ensure the update
completed before proceeding with the rest of the test, and apply the same
assertion for the other occurrence around lines 684-688 so failures in
updateSubgraph fail the test instead of masking them.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a1f46c43-d260-4400-be4b-816ff1eaa76b

📥 Commits

Reviewing files that changed from the base of the PR and between 846a75b and 3655e8d.

📒 Files selected for processing (2)
  • controlplane/src/core/repositories/SubgraphRepository.ts
  • controlplane/test/label.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • controlplane/src/core/repositories/SubgraphRepository.ts

@wilsonrivera wilsonrivera merged commit e49a03b into main May 13, 2026
11 checks passed
@wilsonrivera wilsonrivera deleted the wilson/eng-9560-controlplane-updating-a-base-subgraph-does-not-recompose branch May 13, 2026 00:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants