prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Jira deprecation of glance panels
  Notice from Atlassian Support team about glance panel deprecation. 
  
  AC:
  - Review the deprecation plan
  - Build a recommendation based on how we're impacted. If minor development work is required, complete that with this ticket. If significant work is required, notify EM/PM to share impact and come up with next steps together.
  
  Email from Atlassian:
  ```
  Hope you are having a good day!
  As part of this deprecation notice (https://developer.atlassian.com/cloud/jira/platform/changelog/#CHANGE-897), we are reaching out because we have identified that your app, “Sentry,” will be affected by the deprecation of glance panels. 
  This was initially scheduled for the 6th of October, but we have delayed it until the 30th of November.
  The jiraIssueGlances and jira:issueGlance modules in Forge (https://developer.atlassian.com/platform/forge/manifest-reference/modules/jira-issue-glance/) and Connect (https://developer.atlassian.com/cloud/jira/platform/modules/issue-glance/) are being deprecated and replaced with the issueContext module. 
  We recommend transitioning from the glance panel to the new issue context module before the 30th of November. 
  Please note, we will not be extending this deprecation date as we announced it on the 30th of March.
  Let me know if you need any further assistance,
  Ahmud
  Product Manager-Jira Cloud
  ```
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `src/sentry/integrations/jira/endpoints/descriptor.py`
  Content:
  ```
  1 from django.conf import settings
  2 from django.urls import reverse
  3 from rest_framework.request import Request
  4 from rest_framework.response import Response
  5 
  6 from sentry.api.api_publish_status import ApiPublishStatus
  7 from sentry.api.base import Endpoint, control_silo_endpoint
  8 from sentry.utils.assets import get_frontend_app_asset_url
  9 from sentry.utils.http import absolute_uri
  10 
  11 from .. import JIRA_KEY
  12 
  13 scopes = ["read", "write", "act_as_user"]
  14 # For Jira, only approved apps can use the access_email_addresses scope
  15 # This scope allows Sentry to use the email endpoint (https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-user-email-get)
  16 # We use the email with Jira 2-way sync in order to match the user
  17 if settings.JIRA_USE_EMAIL_SCOPE:
  18     scopes.append("access_email_addresses")
  19 
  20 
  21 @control_silo_endpoint
  22 class JiraDescriptorEndpoint(Endpoint):
  23     publish_status = {
  24         "GET": ApiPublishStatus.UNKNOWN,
  25     }
  26     """
  27     Provides the metadata needed by Jira to setup an instance of the Sentry integration within Jira.
  28     Only used by on-prem orgs and devs setting up local instances of the integration. (Sentry SAAS
  29     already has an established, official instance of the Sentry integration registered with Jira.)
  30     """
  31 
  32     authentication_classes = ()
  33     permission_classes = ()
  34 
  35     def get(self, request: Request) -> Response:
  36         sentry_logo = absolute_uri(
  37             get_frontend_app_asset_url("sentry", "entrypoints/logo-sentry.svg")
  38         )
  39         return self.respond(
  40             {
  41                 "name": "Sentry",
  42                 "description": "Connect your Sentry organization to one or more of your Jira cloud instances. Get started streamlining your bug-squashing workflow by allowing your Sentry and Jira instances to work together.",
  43                 "key": JIRA_KEY,
  44                 "baseUrl": absolute_uri(),
  45                 "vendor": {"name": "Sentry", "url": "https://sentry.io"},
  46                 "authentication": {"type": "jwt"},
  47                 "lifecycle": {
  48                     "installed": "/extensions/jira/installed/",
  49                     "uninstalled": "/extensions/jira/uninstalled/",
  50                 },
  51                 "apiVersion": 1,
  52                 "modules": {
  53                     "postInstallPage": {
  54                         "url": "/extensions/jira/ui-hook/",
  55                         "name": {"value": "Configure Sentry Add-on"},
  56                         "key": "post-install-sentry",
  57                     },
  58                     "configurePage": {
  59                         "url": "/extensions/jira/ui-hook/",
  60                         "name": {"value": "Configure Sentry Add-on"},
  61                         "key": "configure-sentry",
  62                     },
  63                     "jiraIssueGlances": [
  64                         {
  65                             "icon": {"width": 24, "height": 24, "url": sentry_logo},
  66                             "content": {"type": "label", "label": {"value": "Linked Issues"}},
  67                             "target": {
  68                                 "type": "web_panel",
  69                                 "url": "/extensions/jira/issue/{issue.key}/",
  70                             },
  71                             "name": {"value": "Sentry "},
  72                             "key": "sentry-issues-glance",
  73                         }
  74                     ],
  75                     "webhooks": [
  76                         {
  77                             "event": "jira:issue_updated",
  78                             "url": reverse("sentry-extensions-jira-issue-updated"),
  79                             "excludeBody": False,
  80                         }
  81                     ],
  82                 },
  83                 "apiMigrations": {"gdpr": True, "context-qsh": True, "signed-install": True},
  84                 "scopes": scopes,
  85             }
  86         )
  87
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/src/sentry/integrations/jira/endpoints/descriptor.py b/src/sentry/integrations/jira/endpoints/descriptor.py
  --- a/src/sentry/integrations/jira/endpoints/descriptor.py
  +++ b/src/sentry/integrations/jira/endpoints/descriptor.py
  @@ -60,7 +60,7 @@
                           "name": {"value": "Configure Sentry Add-on"},
                           "key": "configure-sentry",
                       },
  -                    "jiraIssueGlances": [
  +                    "jiraIssueContexts": [
                           {
                               "icon": {"width": 24, "height": 24, "url": sentry_logo},
                               "content": {"type": "label", "label": {"value": "Linked Issues"}},
  
verification_info: {"golden_diff": "diff --git a/src/sentry/integrations/jira/endpoints/descriptor.py b/src/sentry/integrations/jira/endpoints/descriptor.py\n--- a/src/sentry/integrations/jira/endpoints/descriptor.py\n+++ b/src/sentry/integrations/jira/endpoints/descriptor.py\n@@ -60,7 +60,7 @@\n                         \"name\": {\"value\": \"Configure Sentry Add-on\"},\n                         \"key\": \"configure-sentry\",\n                     },\n-                    \"jiraIssueGlances\": [\n+                    \"jiraIssueContexts\": [\n                         {\n                             \"icon\": {\"width\": 24, \"height\": 24, \"url\": sentry_logo},\n                             \"content\": {\"type\": \"label\", \"label\": {\"value\": \"Linked Issues\"}},\n", "issue": "Jira deprecation of glance panels\nNotice from Atlassian Support team about glance panel deprecation. \r\n\r\nAC:\r\n- Review the deprecation plan\r\n- Build a recommendation based on how we're impacted. If minor development work is required, complete that with this ticket. If significant work is required, notify EM/PM to share impact and come up with next steps together.\r\n\r\nEmail from Atlassian:\r\n```\r\nHope you are having a good day!\r\nAs part of this deprecation notice (https://developer.atlassian.com/cloud/jira/platform/changelog/#CHANGE-897), we are reaching out because we have identified that your app, \u201cSentry,\u201d will be affected by the deprecation of glance panels. \r\nThis was initially scheduled for the 6th of October, but we have delayed it until the 30th of November.\r\nThe jiraIssueGlances and jira:issueGlance modules in Forge (https://developer.atlassian.com/platform/forge/manifest-reference/modules/jira-issue-glance/) and Connect (https://developer.atlassian.com/cloud/jira/platform/modules/issue-glance/) are being deprecated and replaced with the issueContext module. \r\nWe recommend transitioning from the glance panel to the new issue context module before the 30th of November. \r\nPlease note, we will not be extending this deprecation date as we announced it on the 30th of March.\r\nLet me know if you need any further assistance,\r\nAhmud\r\nProduct Manager-Jira Cloud\r\n```\n", "before_files": [{"content": "from django.conf import settings\nfrom django.urls import reverse\nfrom rest_framework.request import Request\nfrom rest_framework.response import Response\n\nfrom sentry.api.api_publish_status import ApiPublishStatus\nfrom sentry.api.base import Endpoint, control_silo_endpoint\nfrom sentry.utils.assets import get_frontend_app_asset_url\nfrom sentry.utils.http import absolute_uri\n\nfrom .. import JIRA_KEY\n\nscopes = [\"read\", \"write\", \"act_as_user\"]\n# For Jira, only approved apps can use the access_email_addresses scope\n# This scope allows Sentry to use the email endpoint (https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-user-email-get)\n# We use the email with Jira 2-way sync in order to match the user\nif settings.JIRA_USE_EMAIL_SCOPE:\n    scopes.append(\"access_email_addresses\")\n\n\n@control_silo_endpoint\nclass JiraDescriptorEndpoint(Endpoint):\n    publish_status = {\n        \"GET\": ApiPublishStatus.UNKNOWN,\n    }\n    \"\"\"\n    Provides the metadata needed by Jira to setup an instance of the Sentry integration within Jira.\n    Only used by on-prem orgs and devs setting up local instances of the integration. (Sentry SAAS\n    already has an established, official instance of the Sentry integration registered with Jira.)\n    \"\"\"\n\n    authentication_classes = ()\n    permission_classes = ()\n\n    def get(self, request: Request) -> Response:\n        sentry_logo = absolute_uri(\n            get_frontend_app_asset_url(\"sentry\", \"entrypoints/logo-sentry.svg\")\n        )\n        return self.respond(\n            {\n                \"name\": \"Sentry\",\n                \"description\": \"Connect your Sentry organization to one or more of your Jira cloud instances. Get started streamlining your bug-squashing workflow by allowing your Sentry and Jira instances to work together.\",\n                \"key\": JIRA_KEY,\n                \"baseUrl\": absolute_uri(),\n                \"vendor\": {\"name\": \"Sentry\", \"url\": \"https://sentry.io\"},\n                \"authentication\": {\"type\": \"jwt\"},\n                \"lifecycle\": {\n                    \"installed\": \"/extensions/jira/installed/\",\n                    \"uninstalled\": \"/extensions/jira/uninstalled/\",\n                },\n                \"apiVersion\": 1,\n                \"modules\": {\n                    \"postInstallPage\": {\n                        \"url\": \"/extensions/jira/ui-hook/\",\n                        \"name\": {\"value\": \"Configure Sentry Add-on\"},\n                        \"key\": \"post-install-sentry\",\n                    },\n                    \"configurePage\": {\n                        \"url\": \"/extensions/jira/ui-hook/\",\n                        \"name\": {\"value\": \"Configure Sentry Add-on\"},\n                        \"key\": \"configure-sentry\",\n                    },\n                    \"jiraIssueGlances\": [\n                        {\n                            \"icon\": {\"width\": 24, \"height\": 24, \"url\": sentry_logo},\n                            \"content\": {\"type\": \"label\", \"label\": {\"value\": \"Linked Issues\"}},\n                            \"target\": {\n                                \"type\": \"web_panel\",\n                                \"url\": \"/extensions/jira/issue/{issue.key}/\",\n                            },\n                            \"name\": {\"value\": \"Sentry \"},\n                            \"key\": \"sentry-issues-glance\",\n                        }\n                    ],\n                    \"webhooks\": [\n                        {\n                            \"event\": \"jira:issue_updated\",\n                            \"url\": reverse(\"sentry-extensions-jira-issue-updated\"),\n                            \"excludeBody\": False,\n                        }\n                    ],\n                },\n                \"apiMigrations\": {\"gdpr\": True, \"context-qsh\": True, \"signed-install\": True},\n                \"scopes\": scopes,\n            }\n        )\n", "path": "src/sentry/integrations/jira/endpoints/descriptor.py"}], "after_files": [{"content": "from django.conf import settings\nfrom django.urls import reverse\nfrom rest_framework.request import Request\nfrom rest_framework.response import Response\n\nfrom sentry.api.api_publish_status import ApiPublishStatus\nfrom sentry.api.base import Endpoint, control_silo_endpoint\nfrom sentry.utils.assets import get_frontend_app_asset_url\nfrom sentry.utils.http import absolute_uri\n\nfrom .. import JIRA_KEY\n\nscopes = [\"read\", \"write\", \"act_as_user\"]\n# For Jira, only approved apps can use the access_email_addresses scope\n# This scope allows Sentry to use the email endpoint (https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-user-email-get)\n# We use the email with Jira 2-way sync in order to match the user\nif settings.JIRA_USE_EMAIL_SCOPE:\n    scopes.append(\"access_email_addresses\")\n\n\n@control_silo_endpoint\nclass JiraDescriptorEndpoint(Endpoint):\n    publish_status = {\n        \"GET\": ApiPublishStatus.UNKNOWN,\n    }\n    \"\"\"\n    Provides the metadata needed by Jira to setup an instance of the Sentry integration within Jira.\n    Only used by on-prem orgs and devs setting up local instances of the integration. (Sentry SAAS\n    already has an established, official instance of the Sentry integration registered with Jira.)\n    \"\"\"\n\n    authentication_classes = ()\n    permission_classes = ()\n\n    def get(self, request: Request) -> Response:\n        sentry_logo = absolute_uri(\n            get_frontend_app_asset_url(\"sentry\", \"entrypoints/logo-sentry.svg\")\n        )\n        return self.respond(\n            {\n                \"name\": \"Sentry\",\n                \"description\": \"Connect your Sentry organization to one or more of your Jira cloud instances. Get started streamlining your bug-squashing workflow by allowing your Sentry and Jira instances to work together.\",\n                \"key\": JIRA_KEY,\n                \"baseUrl\": absolute_uri(),\n                \"vendor\": {\"name\": \"Sentry\", \"url\": \"https://sentry.io\"},\n                \"authentication\": {\"type\": \"jwt\"},\n                \"lifecycle\": {\n                    \"installed\": \"/extensions/jira/installed/\",\n                    \"uninstalled\": \"/extensions/jira/uninstalled/\",\n                },\n                \"apiVersion\": 1,\n                \"modules\": {\n                    \"postInstallPage\": {\n                        \"url\": \"/extensions/jira/ui-hook/\",\n                        \"name\": {\"value\": \"Configure Sentry Add-on\"},\n                        \"key\": \"post-install-sentry\",\n                    },\n                    \"configurePage\": {\n                        \"url\": \"/extensions/jira/ui-hook/\",\n                        \"name\": {\"value\": \"Configure Sentry Add-on\"},\n                        \"key\": \"configure-sentry\",\n                    },\n                    \"jiraIssueContexts\": [\n                        {\n                            \"icon\": {\"width\": 24, \"height\": 24, \"url\": sentry_logo},\n                            \"content\": {\"type\": \"label\", \"label\": {\"value\": \"Linked Issues\"}},\n                            \"target\": {\n                                \"type\": \"web_panel\",\n                                \"url\": \"/extensions/jira/issue/{issue.key}/\",\n                            },\n                            \"name\": {\"value\": \"Sentry \"},\n                            \"key\": \"sentry-issues-glance\",\n                        }\n                    ],\n                    \"webhooks\": [\n                        {\n                            \"event\": \"jira:issue_updated\",\n                            \"url\": reverse(\"sentry-extensions-jira-issue-updated\"),\n                            \"excludeBody\": False,\n                        }\n                    ],\n                },\n                \"apiMigrations\": {\"gdpr\": True, \"context-qsh\": True, \"signed-install\": True},\n                \"scopes\": scopes,\n            }\n        )\n", "path": "src/sentry/integrations/jira/endpoints/descriptor.py"}]}