bug: mergeOrgFeatureFlags drops all valid org feature flags when one stored flag is invalid
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 39/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- nextjs, typescript
Rechercherichtung
Start in apps/webapp/app/v3/featureFlags.server.ts at mergeOrgFeatureFlags and inspect how stored organization flags are parsed; the reproduction shows a valid override being lost when another stored value is invalid. Then review FeatureFlagsDialog.tsx for unsetFlag and the derived grace-stamp rows. Done means valid overrides survive invalid stored values, unsetting clears related derived values, and derived rows stay read-only when unlocked; an open linked pull request indicates this work may already be underway.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Provide environment information
System:
OS: Linux 6.8 Ubuntu
Binaries:
Node: 22.14.0
pnpm: 9.15.0
Describe the bug
In a7f0f90e ("show stored org values for locked flags in the admin flags dialog"), the v1 and v2 admin org feature-flag routes were updated to read stored flags key-by-key via parseStoredOrgFlags(organization.featureFlags).valid, and saves now intentionally keep untouched invalid values and unknown keys from newer releases in Organization.featureFlags.
However, mergeOrgFeatureFlags in apps/webapp/app/v3/featureFlags.server.ts (used by resolveOrganizationFeatureFlags) still validates the entire orgFeatureFlags object at once with validatePartialFeatureFlags(orgFeatureFlags):
export function mergeOrgFeatureFlags(
globalFlags: Partial<FeatureFlagCatalog>,
orgFeatureFlags: unknown
) {
const parsed = orgFeatureFlags
? validatePartialFeatureFlags(orgFeatureFlags as Record<string, unknown>)
: ({ success: false } as const);
return { ...globalFlags, ...(parsed.success ? parsed.data : {}) };
}
If an org has one invalid stored flag value in Organization.featureFlags (which admin saves now keep), validatePartialFeatureFlags fails for the whole blob and mergeOrgFeatureFlags drops all of the org's valid overrides (hasWebhooksAccess, hasQueryAccess, hasLogsPageAccess, hasAiAccess, etc.), even though the admin flags dialog and /admin/api/v1/orgs/:orgId/feature-flags show them as active.
Two small related issues in FeatureFlagsDialog.tsx:
unsetFlag(key)only deletesnext[key]without clearingderivedFlagsClearedWith(key), so unsettingrunOpsMintKindleavesrunOpsMintKindPrevandrunOpsMintKindFlippedAtshown as set in the dialog list and JSON preview.- Checking "Unlock read-only flags" unlocks
effect === "derived"grace-stamp rows (runOpsMintKindPrev,runOpsMintKindFlippedAt,runOpsMintShardSetPrev,runOpsMintShardSetFlippedAt) into editable controls, even though the server strips and recomputes them on save.
Reproduction repo
To reproduce
- Call
mergeOrgFeatureFlags({ hasLogsPageAccess: false }, { hasLogsPageAccess: true, realtimeBackend: "not-a-backend" })(or save a valid flag via/admin/api/v2/orgs/:organizationId/feature-flagson an org that has an existing invalid flag). mergeOrgFeatureFlagsreturns{ hasLogsPageAccess: false }instead of{ hasLogsPageAccess: true }becausevalidatePartialFeatureFlagsfails onrealtimeBackend.
Suggested fix
Use parseStoredOrgFlags(orgFeatureFlags).valid in mergeOrgFeatureFlags, and in FeatureFlagsDialog.tsx clear derivedFlagsClearedWith(key) in unsetFlag and keep effect === "derived" flags read-only when unlocked.
Additional information
No response
- Vorherrschende Sprache
- TypeScript
- Sterne
- 16.5k
- Forks
- 1.5k
- Ø Merge
- 1 T. 15 Std.
- Gemergte PRs (30 T.)
- 17
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus triggerdotdev/trigger.dev
-
bug: retry.fetch ignores the caller's abort signal and retries aborted requestsEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
triggerdotdev/trigger.dev#5116 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug: Chat transport crashes on Safari < 17.4: AbortSignal.any is not a functionEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 83/100
triggerdotdev/trigger.dev#5098 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug: Side menu items lose their active state on detail pagesEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
triggerdotdev/trigger.dev#5088 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug: RBAC loader logs "plugin found but failed to load" when @triggerdotdev/plugins is simply not installedEvtl. wieder frei @itsfaryal hat das vor 17 Tagen übernommen, und es ist kein Pull Request offen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
triggerdotdev/trigger.dev#5083 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 83/100
triggerdotdev/trigger.dev#5072 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in triggerdotdev/trigger.dev
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug platform-android
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Termix-SSH/Mobile#146 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
devswha/herdr-web-ui#3875 ·
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
-
area: runtime chore cli consistency dependencies developer-experience difficulty: easy discovery documentation enhancement good first issue help wanted hygiene json-output packaging priority: P3 tests version
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag