Skip to content

Feat: Seed remote feature flag controller with default flags - #9747

Open
Cal-L wants to merge 4 commits into
mainfrom
feat/seed-defaults-remote-feature-flag-controller
Open

Feat: Seed remote feature flag controller with default flags#9747
Cal-L wants to merge 4 commits into
mainfrom
feat/seed-defaults-remote-feature-flag-controller

Conversation

@Cal-L

@Cal-L Cal-L commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Explanation

This is part of an effort to keep the RemoteFeatureFlagController as the source of truth for feature flags. As part of that effort, we've added a new optional constructor arg named defaultFeatureFlags, which will be provided by the platform apps. Under the hood, the controller will account for these flags when processing the effective flags that the consumers will use. The order of priority for the flags are - default flags > remote flags > override flags.

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Low Risk
Backward-compatible optional API; merge logic is centralized and covered by new tests, with no auth or persistence changes.

Overview
Adds an optional defaultFeatureFlags constructor option so platform apps can supply client-side defaults that are not persisted and sit below processed remote flags and local overrides.

Effective remoteFeatureFlags are now built through #getEffectiveFeatureFlags (defaultsprocessed remotelocalOverrides) on init, after remote fetch, and when setting or clearing overrides—so defaults still apply for keys missing from the server and reappear when an override is removed with no remote value.

The wallet initialization path accepts instanceOptions.remoteFeatureFlagController.defaultFeatureFlags and forwards it to the controller.

Reviewed by Cursor Bugbot for commit 074d2dd. Bugbot is set up for automated code reviews on this repo. Configure here.

@Cal-L
Cal-L requested review from a team as code owners July 31, 2026 18:55
@Cal-L
Cal-L temporarily deployed to default-branch July 31, 2026 18:56 — with GitHub Actions Inactive
Comment thread packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts Outdated
Comment thread packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts Outdated
includeInDebugSnapshot: true,
usedInUi: false,
},
processedRemoteFeatureFlags: {

@Cal-L Cal-L Jul 31, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This persisted state is the processed version of REMOTE feature flags, excluding defaults and overrides. Used for flag reconstruction on controller creation, preventing the need for a deconstruction.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

preventing the need for a deconstruction.

hm. my full time job right now is pretty much just removing persisted state that can be derived from other state. is that what this is?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Could you elaborate on what this is for? remoteFeatureFlags is already the "processed" flags. What do you mean by "preventing the need for a deconstruction"?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@davidmurdoch @Gudahtt I think I made these changes more complex than needed. I ended up removing this field and simplified the PR to just intake a defaultFeatureFlags arg. The state in question is no longer relevant.

Comment thread packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts Outdated
Comment thread packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts Outdated
Comment thread packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts Outdated
Comment thread packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts Outdated
@Cal-L
Cal-L force-pushed the feat/seed-defaults-remote-feature-flag-controller branch from 2b81ab9 to 8ce7cc1 Compare August 4, 2026 22:57
weitingsun
weitingsun previously approved these changes Aug 5, 2026
DDDDDanica
DDDDDanica previously approved these changes Aug 5, 2026
@Cal-L
Cal-L dismissed stale reviews from DDDDDanica and weitingsun via a77816d August 6, 2026 17:00
weitingsun
weitingsun previously approved these changes Aug 6, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a77816d. Configure here.

Comment thread packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants