From c2090c712b9410584c0eaedf8a7ba03bf495776e Mon Sep 17 00:00:00 2001 From: Nick Meisenheimer Date: Mon, 6 Jul 2026 16:21:39 -0400 Subject: [PATCH] fix(github): Ungate inbound issue status sync from removed feature flag Closing or reopening a GitHub issue stopped resolving/unresolving its linked Sentry issue. GitHubIssueSyncSpec.get_resolve_sync_action gated on check_feature_flag(), which checked organizations:integrations-github-project-management. That flag was removed from the registry in #116551 (deemed "zero usage" because the only reference is built dynamically from self.model.provider, so a literal grep missed it). features.has() on an unregistered flag raises FeatureNotRegistered internally and returns False, so get_resolve_sync_action always returned NOOP and the inbound sync silently no-oped. It had previously been registered in #114789 and moved into the spec in #103422. Both github and github_enterprise project-management flags are fully rolled out (GA at 100%), so drop the gate entirely rather than re-register a flag no one maintains, restoring inbound status sync for GitHub and GitHub Enterprise. Fixes GH-110299 Co-Authored-By: Claude --- src/sentry/integrations/github/issue_sync.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/sentry/integrations/github/issue_sync.py b/src/sentry/integrations/github/issue_sync.py index 1bab8febb746..52f2ec206a39 100644 --- a/src/sentry/integrations/github/issue_sync.py +++ b/src/sentry/integrations/github/issue_sync.py @@ -4,7 +4,6 @@ from collections.abc import Mapping from typing import Any -from sentry import features from sentry.integrations.mixins.issues import IssueSyncIntegration, ResolveSyncAction from sentry.integrations.models.external_actor import ExternalActor from sentry.integrations.models.external_issue import ExternalIssue @@ -27,13 +26,6 @@ class GitHubIssueSyncSpec(IssueSyncIntegration): inbound_assignee_key = "sync_reverse_assignment" resolution_strategy_key = "resolution_strategy" - def check_feature_flag(self) -> bool: - """ - A temporary method so we can gate Github & Github Enterprise project management features. - """ - ff_key = f"organizations:integrations-{self.model.provider}-project-management" - return features.has(ff_key, self.organization) - def split_external_issue_key( self, external_issue_key: str ) -> tuple[str, str] | tuple[None, None]: @@ -203,9 +195,6 @@ def get_resolve_sync_action(self, data: Mapping[str, Any]) -> ResolveSyncAction: Given webhook data, check whether the GitHub issue status changed. GitHub issues only have open/closed state. """ - if not self.check_feature_flag(): - return ResolveSyncAction.NOOP - if data.get("action") == IssueEvenntWebhookActionType.CLOSED.value: return ResolveSyncAction.RESOLVE elif data.get("action") == IssueEvenntWebhookActionType.REOPENED.value: