diff --git a/CHANGELOG.md b/CHANGELOG.md index 705fdc11875c..33cf5b70a21a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ **12 August 2025** +OpenAI GPT-5 is now available in public preview for GitHub Copilot. GPT-5 is slowly rolling out to all paid Copilot plans and you will be able to access the model in GitHub Copilot Chat on github.com and Visual Studio Code (Agent, Ask, and Edit modes). + +See [Supported AI models in Copilot](https://docs.github.com/en/copilot/reference/ai-models/supported-models). + +
ID+USERNAME@users.noreply.github.com. If you created your account _prior to_ July 18, 2017, and enabled **Keep my email address private** prior to that date, your `noreply` email address is USERNAME@users.noreply.github.com. You can get an ID-based `noreply` email address by selecting (or deselecting and reselecting) **Keep my email address private** in your email settings.
-
-If you use your `noreply` email address for {% data variables.product.github %} to make commits and then change your username, those commits will not be associated with your account. This does not apply if you're using the ID-based `noreply` address from {% data variables.product.github %}. For more information, see [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/changing-your-github-username).{% endif %}
## Setting your commit email address on {% data variables.product.github %}
@@ -109,3 +80,7 @@ You can change the email address associated with commits you make in a single re
```
1. {% data reusables.user-settings.link_email_with_your_account %}
+
+## Next steps
+
+To learn more about using a private email address, see [AUTOTITLE](/account-and-profile/reference/email-addresses-reference#your-noreply-email-address).
diff --git a/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-adding-an-email.md b/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-adding-an-email.md
new file mode 100644
index 000000000000..24d3970bcfab
--- /dev/null
+++ b/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-adding-an-email.md
@@ -0,0 +1,32 @@
+---
+title: Troubleshooting adding an email
+intro: 'Troubleshoot problems when adding an email address to your {% data variables.product.github %} account.'
+versions:
+ fpt: '*'
+ ghes: '*'
+ ghec: '*'
+topics:
+ - Accounts
+ - Notifications
+ - Troubleshooting
+shortTitle: Troubleshoot adding an email
+---
+
+## Email already in use
+
+If you see the error message `Error adding EMAIL: email is already in use`, it means the email address is already linked to another {% data variables.product.prodname_dotcom %} account. An email address can only be associated with one {% data variables.product.prodname_dotcom %} account at a time.
+
+To use this email with a different account, follow these steps:
+
+1. Sign in to the account currently linked to the email address and remove it from that account.
+1. If you don’t have access to the account, request a password reset email to recover it. See [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/updating-your-github-access-credentials).
+
+## Email linked to a {% data variables.enterprise.prodname_managed_user %}
+
+If the email address that you are trying to add is provided to you by your organization, you may see the `Error adding EMAIL: email is already in use` error when your organization has created a {% data variables.enterprise.prodname_managed_user %} for you in their {% data variables.enterprise.prodname_emu_enterprise %}.
+
+Reach out to your site administrator or internal IT helpdesk to learn about their deployment of {% data variables.product.prodname_ghe_cloud %} and how to access the account. You may be able to sign into the {% data variables.product.prodname_ghe_cloud %} application via the organization's identity provider (IdP).
+
+If you want to use your email address with a personal account, you must sign in to your {% data variables.enterprise.prodname_managed_user %} and unverify the email in your account settings. The email will remain linked to your {% data variables.enterprise.prodname_managed_user %}, allowing you to access the account through your organization's IdP.
+
+However, some third-party apps or services may not function properly with a {% data variables.enterprise.prodname_managed_user %} that has an unverified email address.
diff --git a/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-email-verification.md b/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-email-verification.md
new file mode 100644
index 000000000000..7593a2fe4cd1
--- /dev/null
+++ b/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-email-verification.md
@@ -0,0 +1,34 @@
+---
+title: Troubleshooting email verification
+intro: 'Troubleshoot problems when verifying your email address.'
+versions:
+ fpt: '*'
+ ghes: '*'
+ ghec: '*'
+topics:
+ - Accounts
+ - Notifications
+ - Troubleshooting
+shortTitle: Troubleshoot verifying an email
+---
+
+## Unable to send verification email
+
+{% data reusables.user-settings.no-verification-disposable-emails %}
+
+## Error page after clicking verification link
+
+The verification link expires after 24 hours. If you don't verify your email within 24 hours, you can request another email verification link.
+
+If you click on the link in the confirmation email within 24 hours and you are directed to an error page, you should ensure that you're signed into the correct account on {% data variables.product.github %}.
+
+1. Sign out of your account.
+1. Quit and restart your browser.
+1. Sign in to your account.
+1. Click on the verification link in the email we sent you.
+
+## Email is already verified by another user
+
+If you see the error message `Error adding EMAIL: Email is already verified by another user`, you must either unverify the email for the other account before proceeding, or choose a different email address to verify.
+
+To unverify an email address, delete it in your email settings, then optionally re-add it without verifying to keep any commits linked to your account. See [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/changing-your-primary-email-address).
diff --git a/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/verifying-your-email-address.md b/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/verifying-your-email-address.md
index 43652ec03e31..2ae4ea6ac75c 100644
--- a/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/verifying-your-email-address.md
+++ b/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/verifying-your-email-address.md
@@ -17,46 +17,6 @@ topics:
shortTitle: Verify your email address
---
-## About email verification for personal accounts
-
-You can verify your email address after signing up for a new account, or when you add a new email address. If an email address is undeliverable or bouncing, it will be unverified.
-
-If you do not verify your email address, you will not be able to:
-* Create or fork repositories
-* Create issues or pull requests
-* Comment on issues, pull requests, or commits
-* Authorize {% data variables.product.prodname_oauth_app %} applications
-* Generate {% data variables.product.pat_generic %}s
-* Receive email notifications
-* Star repositories
-* Create or update projects
-* Create or update gists
-* Create or use {% data variables.product.prodname_actions %}
-* Sponsor developers with {% data variables.product.prodname_sponsors %}
-* Accept organization invitations
-
-> [!WARNING]
-> * {% data reusables.user-settings.no-verification-disposable-emails %}
-> * {% data reusables.user-settings.verify-org-approved-email-domain %}
-
-## About email verification for {% data variables.enterprise.prodname_managed_users %}
-
-For Enterprise Managed Users (EMUs), email addresses are no longer automatically verified. This prevents unauthorized access and potential data leaks from third-party {% data variables.product.prodname_github_apps %} and OAuth applications that rely on email addresses as a primary identifier.
-
->[!NOTE] If you are a member of an {% data variables.enterprise.prodname_emu_enterprise %} and your account was created after August 1st, 2024, your email address is unverified by default.
-
-Having an unverified email address does not affect most actions you can take on {% data variables.product.prodname_dotcom %}. However, we **recommend email verification** to prevent potential exploitation of third-party {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_apps %} which may not have followed our best practices around secure authentication methods for apps (see [AUTOTITLE](/apps/oauth-apps/building-oauth-apps/best-practices-for-creating-an-oauth-app) and [AUTOTITLE](/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app)).
-
-Until you verify your email address, your account will use a placeholder email address with your enterprise's shortcode appended for certain operations. For example, the [AUTOTITLE](/rest/users/users) and [AUTOTITLE](/rest/users/emails) will return `email+shortcode@domain.com`. In rare cases, you may find that your company's email provider does not handle the placeholder email correctly, or that the placeholder prevents you from accessing some third-party {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_apps %}.
-
-You cannot verify an email address for your {% data variables.enterprise.prodname_managed_user %} if the email address is already verified by another account on {% data variables.product.prodname_dotcom_the_website %}. To verify the email, you will need to unverify the email address on the conflicting account, then verify it for your {% data variables.enterprise.prodname_managed_user %}. See [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/changing-your-primary-email-address).
-
-Once you verify an email with a {% data variables.enterprise.prodname_managed_user %}, you won't be able to use the email to sign up for a personal account on {% data variables.product.prodname_dotcom_the_website %}.
-
->[!NOTE] If you need to use the same email address for both your {% data variables.enterprise.prodname_managed_user %} and another {% data variables.product.github %} account (for example, for innersource, open source, or other valid use cases), you must sign in to your managed user account and unverify the email in your account settings.
->
-> The email will still be linked to your managed user account, so you can continue signing in through your organization's or enterprise's identity provider (IdP). However, because the email is unverified, it may affect your access to third-party applications that identify users based solely on email address.
-
## Verifying your email address
{% data reusables.user-settings.access_settings %}
@@ -66,29 +26,6 @@ Once you verify an email with a {% data variables.enterprise.prodname_managed_us

1. {% data variables.product.prodname_dotcom %} will send you an email with a link in it. After you click that link, you'll be taken to your {% data variables.product.prodname_dotcom %} dashboard and see a confirmation banner.
-## Troubleshooting email verification
-
-### Unable to send verification email
-
-{% data reusables.user-settings.no-verification-disposable-emails %}
-
-### Error page after clicking verification link
-
-The verification link expires after 24 hours. If you don't verify your email within 24 hours, you can request another email verification link. For more information, see [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/verifying-your-email-address#verifying-your-email-address).
-
-If you click on the link in the confirmation email within 24 hours and you are directed to an error page, you should ensure that you're signed into the correct account on {% data variables.product.github %}.
-
-1. Sign out of your account.
-1. Quit and restart your browser.
-1. Sign in to your account.
-1. Click on the verification link in the email we sent you.
-
-### Email is already verified by another user
-
-If you see the error message `Error adding EMAIL: Email is already verified by another user`, you must either unverify the email for the other account before proceeding, or choose a different email address to verify.
-
-To unverify an email address, delete it in your email settings, then optionally re-add it without verifying to keep any commits linked to your account. See [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/changing-your-primary-email-address).
-
-## Further reading
+## Next steps
-* [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/changing-your-primary-email-address)
+If you are having trouble verifying your email address, see [AUTOTITLE](/free-pro-team@latest/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/troubleshooting-email-verification).
diff --git a/content/account-and-profile/reference/email-addresses-reference.md b/content/account-and-profile/reference/email-addresses-reference.md
new file mode 100644
index 000000000000..ec730164f617
--- /dev/null
+++ b/content/account-and-profile/reference/email-addresses-reference.md
@@ -0,0 +1,49 @@
+---
+title: Email addresses reference
+shortTitle: Email addresses
+intro: 'Find information about your email addresses on {% data variables.product.github %}, including verification, privacy, and commit attribution.'
+topics:
+ - Accounts
+versions:
+ fpt: '*'
+ ghes: '*'
+ ghec: '*'
+---
+
+## Email verification restrictions
+
+{% data reusables.user-settings.no-verification-disposable-emails %}
+
+{% data reusables.user-settings.verify-org-approved-email-domain %}
+
+## Unverified email address restrictions
+
+If you do not verify your email address, you cannot:
+
+* Create or fork repositories
+* Create issues or pull requests
+* Comment on issues, pull requests, or commits
+* Authorize {% data variables.product.prodname_oauth_app %} applications
+* Generate {% data variables.product.pat_generic %}s
+* Receive email notifications
+* Star repositories
+* Create or update projects
+* Create or update gists
+* Create or use {% data variables.product.prodname_actions %}
+* Sponsor developers with {% data variables.product.prodname_sponsors %}
+* Accept organization invitations
+
+## Email verification for {% data variables.enterprise.prodname_managed_users %}
+
+If you are a member of an {% data variables.enterprise.prodname_emu_enterprise %} and your account was created after August 1st, 2024, your email address is unverified by default.
+
+{% ifversion fpt or ghec %}
+
+## Your `noreply` email address
+
+Your `noreply` email address format depends on when you created your account and your email privacy settings:
+
+* If you created your account _after_ July 18, 2017, your `noreply` email address is an ID number and your username in the form of ID+USERNAME@users.noreply.github.com.
+* If you created your account _prior to_ July 18, 2017, and enabled **Keep my email address private** before that date, your `noreply` email address is USERNAME@users.noreply.github.com.
+* To get an ID-based `noreply` email address, select (or deselect and reselect) **Keep my email address private** in your email settings.
+If you use your `noreply` email address for {% data variables.product.github %} to make commits and then change your username, those commits will not be associated with your account. This does not apply if you're using the ID-based `noreply` address from {% data variables.product.github %}. For more information, see [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-user-account-settings/changing-your-github-username).{% endif %}
diff --git a/content/account-and-profile/reference/index.md b/content/account-and-profile/reference/index.md
index cec718dd581f..5144fcbdb3f1 100644
--- a/content/account-and-profile/reference/index.md
+++ b/content/account-and-profile/reference/index.md
@@ -11,4 +11,5 @@ children:
- /best-practices-for-leaving-your-company
- /types-of-emails-github-sends
- /why-are-my-contributions-not-showing-up-on-my-profile
+ - /email-addresses-reference
---
diff --git a/content/billing/concepts/enterprise-billing/azure-devops-licenses.md b/content/billing/concepts/enterprise-billing/azure-devops-licenses.md
index e930cec28916..e9bfdf3fd474 100644
--- a/content/billing/concepts/enterprise-billing/azure-devops-licenses.md
+++ b/content/billing/concepts/enterprise-billing/azure-devops-licenses.md
@@ -1,9 +1,10 @@
---
title: Combined use of GitHub Enterprise and Azure DevOps
-intro: '{% data variables.product.prodname_ghe_cloud %} customers can use Azure DevOps without additional costs.'
+intro: '{% data variables.product.prodname_ghe_cloud %} customers who manage users with Entra ID can access Azure DevOps without additional cost.'
versions:
fpt: '*'
ghec: '*'
+product: Enterprise accounts using Microsoft Entra ID as their identity provider, see [AUTOTITLE](/enterprise-cloud@latest/admin/managing-iam/provisioning-user-accounts-with-scim/configuring-scim-provisioning-for-users)
topics:
- Billing
- Enterprise
@@ -14,6 +15,6 @@ contentType: concepts
{% data variables.product.prodname_ghe_cloud %} customers can use Azure DevOps without additional costs per user. For customers using Microsoft Entra, users can sign in with the same credentials on {% data variables.product.github %} and Azure DevOps.
-No additional setup is required. {% data variables.product.prodname_enterprise %} users are detected automatically when they sign in to Azure DevOps. See [User and permissions management](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/faq-user-and-permissions-management?view=azure-devops#github-enterprise) in the Microsoft Learn documentation.
+No additional setup is required for enterprises hosted on {% data variables.product.prodname_dotcom_the_website %}. {% data variables.product.prodname_enterprise %} users are detected automatically when they sign in to Azure DevOps. See [User and permissions management](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/faq-user-and-permissions-management?view=azure-devops#github-enterprise) in the Microsoft Learn documentation.
-Combined use is not currently available with {% data variables.enterprise.data_residency %}, but this is planned as a future improvement.
+{% data variables.enterprise.data_residency %} administrators need to link their instance of {% data variables.enterprise.data_residency_site %} to Azure DevOps before {% data variables.product.prodname_enterprise %} users can be detected. See [How are GitHub Enterprise users in data residency regions identified?](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/faq-user-and-permissions-management?view=azure-devops#q--how-are-github-enterprise-users-in-data-residency-regions-identified-) in the Microsoft Learn documentation.
diff --git a/content/copilot/how-tos/use-chat/use-chat-in-github.md b/content/copilot/how-tos/use-chat/use-chat-in-github.md
index 7fd7fb79afaf..50fb1e9e0e50 100644
--- a/content/copilot/how-tos/use-chat/use-chat-in-github.md
+++ b/content/copilot/how-tos/use-chat/use-chat-in-github.md
@@ -140,6 +140,7 @@ You can attach an image to {% data variables.product.prodname_copilot_short %} a
1. If you see the AI model picker at the top of the page, select one of the models that supports adding images to prompts:
* {% data variables.copilot.copilot_gpt_41 %} (the default that's used if you don't see a model picker)
+ * {% data variables.copilot.copilot_gpt_5_mini %}
* {% data variables.copilot.copilot_gpt_5 %}
* {% data variables.copilot.copilot_claude_sonnet_35 %}
* {% data variables.copilot.copilot_claude_sonnet_37 %}
diff --git a/content/copilot/reference/ai-models/model-comparison.md b/content/copilot/reference/ai-models/model-comparison.md
index 16ab8c03fbfa..a5a963d82e16 100644
--- a/content/copilot/reference/ai-models/model-comparison.md
+++ b/content/copilot/reference/ai-models/model-comparison.md
@@ -26,6 +26,7 @@ Use this table to find a suitable model quickly, see more detail in the sections
| Model | Task area | Excels at (primary use case) | Additional capabilities |
|-------------------------------------------------------|-----------|-------------------------------|--------------------------|
| {% data variables.copilot.copilot_gpt_41 %} | General-purpose coding and writing | Fast, accurate code completions and explanations | Agent mode, vision |
+| {% data variables.copilot.copilot_gpt_5_mini %} | Deep reasoning and debugging | Well-defined tasks and precise prompts | Reasoning |
| {% data variables.copilot.copilot_gpt_5 %} | Deep reasoning and debugging | Multi-step problem solving and architecture-level code analysis | Reasoning |
| {% data variables.copilot.copilot_o3 %} | Deep reasoning and debugging | Multi-step problem solving and architecture-level code analysis | Reasoning |
| {% data variables.copilot.copilot_o4_mini %} | Fast help with simple or repetitive tasks | Fast, reliable answers to lightweight coding questions | Lower latency |
@@ -95,6 +96,7 @@ These models are designed for tasks that require step-by-step reasoning, complex
| Model | Why it's a good fit |
|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
+| {% data variables.copilot.copilot_gpt_5_mini %} | Delivers deep reasoning and debugging with faster responses and lower resource usage than GPT-5. Ideal for interactive sessions and step-by-step code analysis. |
| {% data variables.copilot.copilot_gpt_5 %} | Great at complex reasoning, code analysis, and technical decision-making. |
| {% data variables.copilot.copilot_o3 %} | Strong at algorithm design, system debugging, and architecture decisions. Balances performance and reasoning. |
| {% data variables.copilot.copilot_claude_sonnet_37 %} | Provides hybrid reasoning that adapts to both fast tasks and deeper thinking. |
diff --git a/content/copilot/reference/ai-models/model-hosting.md b/content/copilot/reference/ai-models/model-hosting.md
index 2bbc26161e00..cff17d2aeaf8 100644
--- a/content/copilot/reference/ai-models/model-hosting.md
+++ b/content/copilot/reference/ai-models/model-hosting.md
@@ -19,13 +19,14 @@ contentType: reference
Used for:
* {% data variables.copilot.copilot_gpt_41 %}
+* {% data variables.copilot.copilot_gpt_5_mini %}
* {% data variables.copilot.copilot_gpt_5 %}
* {% data variables.copilot.copilot_o3 %}
* {% data variables.copilot.copilot_o4_mini %}
{% data variables.copilot.copilot_gpt_41 %} is hosted by {% data variables.product.github %}'s Azure tenant when used in {% data variables.product.prodname_copilot %}.
-{% data variables.copilot.copilot_gpt_5 %}, {% data variables.copilot.copilot_o3 %} and {% data variables.copilot.copilot_o4_mini %} models are hosted by OpenAI and {% data variables.product.github %}'s Azure tenant. OpenAI makes the [following data commitment](https://openai.com/enterprise-privacy/): _We [OpenAI] do not train our models on your business data by default_. {% data variables.product.github %} maintains a [zero data retention agreement](https://platform.openai.com/docs/guides/your-data) with OpenAI.
+{% data variables.copilot.copilot_gpt_5 %}, {% data variables.copilot.copilot_gpt_5_mini %}, {% data variables.copilot.copilot_o3 %} and {% data variables.copilot.copilot_o4_mini %} models are hosted by OpenAI and {% data variables.product.github %}'s Azure tenant. OpenAI makes the [following data commitment](https://openai.com/enterprise-privacy/): _We [OpenAI] do not train our models on your business data by default_. {% data variables.product.github %} maintains a [zero data retention agreement](https://platform.openai.com/docs/guides/your-data) with OpenAI.
When using OpenAI's models, input requests and output responses continue to run through {% data variables.product.prodname_copilot %}'s content filters for public code matching, when applied, along with those for harmful or offensive content.
diff --git a/content/copilot/reference/ai-models/supported-models.md b/content/copilot/reference/ai-models/supported-models.md
index beaf9fa8fde1..ded6a6a270d7 100644
--- a/content/copilot/reference/ai-models/supported-models.md
+++ b/content/copilot/reference/ai-models/supported-models.md
@@ -38,6 +38,7 @@ This table lists the AI models available in {% data variables.product.prodname_c
| Model name | Provider | Release status | Agent mode | Ask mode | Edit mode |
|----------------------------------------------------------------|----------|--------------|------------|----------------------|---------------|
| {% data variables.copilot.copilot_gpt_41 %} | OpenAI | GA | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_gpt_5_mini %} | OpenAI | {% data variables.release-phases.public_preview_caps %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_gpt_5 %} | OpenAI | {% data variables.release-phases.public_preview_caps %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_o3 %} | OpenAI | {% data variables.release-phases.public_preview_caps %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_o4_mini %} | OpenAI | {% data variables.release-phases.public_preview_caps %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
@@ -61,6 +62,7 @@ The following table shows which models are available in each client.
| Model | {% data variables.product.prodname_dotcom_the_website %} | {% data variables.product.prodname_vscode %} | {% data variables.product.prodname_vs %} | Eclipse | Xcode | JetBrains IDEs |
|----------------------------------------------------------------|------------|---------|----------------------------------------------|---------------------------------------------|---------------------------------------------|---------------------------------------------|
| {% data variables.copilot.copilot_gpt_41 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_gpt_5_mini %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} |
| {% data variables.copilot.copilot_gpt_5 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} |
| {% data variables.copilot.copilot_o3 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_o4_mini %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
diff --git a/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/index.md b/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/index.md
index 0e9c2e7c70cc..6447dfbab041 100644
--- a/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/index.md
+++ b/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/index.md
@@ -1,6 +1,6 @@
---
title: Viewing and triaging notifications
-intro: 'To optimize your notifications workflow, you can customize how you view and triage notifications.'
+intro: To optimize your notifications workflow, you can customize how you view and triage notifications.
redirect_from:
- /articles/managing-notifications
- /articles/managing-your-notifications
@@ -16,6 +16,7 @@ topics:
children:
- /managing-notifications-from-your-inbox
- /triaging-a-single-notification
+ - /managing-marketing-emails-from-github
shortTitle: Customize a workflow
---
diff --git a/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/managing-marketing-emails-from-github.md b/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-marketing-emails-from-github.md
similarity index 62%
rename from content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/managing-marketing-emails-from-github.md
rename to content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-marketing-emails-from-github.md
index 2cb40d5621de..f64b0c33e31c 100644
--- a/content/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/managing-marketing-emails-from-github.md
+++ b/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-marketing-emails-from-github.md
@@ -1,25 +1,22 @@
---
title: Managing marketing emails from GitHub
-intro: 'In addition to notifications and account emails, {% data variables.product.prodname_dotcom %} occasionally sends marketing emails with news and information about our products. If you unsubscribe from existing marketing emails, you won''t be included in future campaigns unless you change your {% data variables.product.prodname_dotcom %} email settings.'
+intro: In addition to notifications and account emails, {% data variables.product.prodname_dotcom %} occasionally sends marketing emails with news and information about our products. If you unsubscribe from existing marketing emails, you won't be included in future campaigns unless you change your {% data variables.product.prodname_dotcom %} email settings.
redirect_from:
- /articles/managing-marketing-emails-from-github
- /github/setting-up-and-managing-your-github-user-account/managing-marketing-emails-from-github
- /github/setting-up-and-managing-your-github-user-account/managing-email-preferences/managing-marketing-emails-from-github
- /account-and-profile/setting-up-and-managing-your-github-user-account/managing-email-preferences/managing-marketing-emails-from-github
- /account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/managing-marketing-emails-from-github
+ - /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/managing-marketing-emails-from-github
versions:
fpt: '*'
ghec: '*'
topics:
- Accounts
- Notifications
-shortTitle: Marketing emails
+shortTitle: Manage marketing emails
---
-## About {% data variables.product.prodname_dotcom %} marketing emails
-
-{% data reusables.accounts.marketing-emails %}
-
## Managing {% data variables.product.prodname_dotcom %} marketing emails
If you have subscribed to {% data variables.product.prodname_dotcom %} marketing emails, you can choose which types of topics you still want to be informed about, and which topics you no longer want to receive updates on.
@@ -40,7 +37,8 @@ You can choose to unsubscribe from all {% data variables.product.prodname_dotcom
1. Select **Unsubscribe from all topics**.
1. Click **Save subscription preferences**.
-## Further reading
+## Next steps
+
+To learn about other types of emails {% data variables.product.github %} sends, see [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/types-of-emails-github-sends).
-* [AUTOTITLE](/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/types-of-emails-github-sends)
-* [AUTOTITLE](/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications)
+To manage email notifications about activity on {% data variables.product.github %}, see [AUTOTITLE](/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications).
diff --git a/data/reusables/copilot/available-models-per-plan.md b/data/reusables/copilot/available-models-per-plan.md
index b4e397079191..5b453263ceea 100644
--- a/data/reusables/copilot/available-models-per-plan.md
+++ b/data/reusables/copilot/available-models-per-plan.md
@@ -3,6 +3,7 @@
| Available models in chat | {% data variables.copilot.copilot_free_short %} | {% data variables.copilot.copilot_pro_short %} | {% data variables.copilot.copilot_pro_plus_short %} | {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.copilot_enterprise_short %} |
|----------------------------------------------------------------|-------------------------------------------------|--------------------------------------------------|------------------------------------------------------|-------------------------------------------------------|----------------------------------------------------------|
| {% data variables.copilot.copilot_gpt_41 %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
+| {% data variables.copilot.copilot_gpt_5_mini %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_gpt_5 %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_o3 %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} |
| {% data variables.copilot.copilot_o4_mini %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} |
diff --git a/data/reusables/copilot/model-multipliers.md b/data/reusables/copilot/model-multipliers.md
index e75a46ff0d22..301d550eb9a9 100644
--- a/data/reusables/copilot/model-multipliers.md
+++ b/data/reusables/copilot/model-multipliers.md
@@ -3,6 +3,7 @@
| Model | Multiplier for **paid plans** | Multiplier for **{% data variables.copilot.copilot_free_short %}** |
|----------------------------------------------------------------|-------------------------------|--------------------------------------------------------------------|
| {% data variables.copilot.copilot_gpt_41 %} | 0 | 1 |
+| {% data variables.copilot.copilot_gpt_5_mini %} | 0 | 1 |
| {% data variables.copilot.copilot_gpt_5 %} | 1 | Not applicable |
| {% data variables.copilot.copilot_gpt_4o %} | 0 | 1 |
| {% data variables.copilot.copilot_claude_sonnet_35 %} | 1 | 1 |
diff --git a/data/variables/copilot.yml b/data/variables/copilot.yml
index fac5fed41e11..17368af3c861 100644
--- a/data/variables/copilot.yml
+++ b/data/variables/copilot.yml
@@ -112,6 +112,7 @@ copilot_gemini_25_pro: 'Gemini 2.5 Pro'
copilot_gpt_41: 'GPT-4.1'
copilot_gpt_4o: 'GPT-4o'
copilot_gpt_5: 'GPT-5'
+copilot_gpt_5_mini: 'GPT-5 mini'
# OpenAI 'o' series:
copilot_o3: 'o3'
copilot_o4_mini: 'o4-mini'
diff --git a/src/search/lib/helpers/external-search-analytics.ts b/src/search/lib/helpers/external-search-analytics.ts
index 74b4ca2c68ad..e2ba35b5241f 100644
--- a/src/search/lib/helpers/external-search-analytics.ts
+++ b/src/search/lib/helpers/external-search-analytics.ts
@@ -1,5 +1,8 @@
import { publish } from '@/events/lib/hydro'
import { hydroNames } from '@/events/lib/schema'
+import { createLogger } from '@/observability/logger'
+
+const logger = createLogger(import.meta.url)
/**
* Handles search analytics and client_name validation for external requests
@@ -40,7 +43,6 @@ export async function handleExternalSearchAnalytics(
else if (normalizedHost.endsWith('.github.net') || normalizedHost.endsWith('.githubapp.com')) {
return null
}
- // For localhost development without client_name, we'll still send analytics below
}
// For localhost, ensure we have a client_name for analytics
@@ -48,12 +50,22 @@ export async function handleExternalSearchAnalytics(
client_name = 'localhost'
}
+ // Log when we detect an external request that we will send analytics for
+ if (client_name && client_name !== 'docs.github.com-client') {
+ logger.info('External search analytics: Sending analytics for external client', {
+ client_name,
+ searchContext,
+ isLikelyExternalAPI,
+ normalizedHost,
+ userAgent: sanitizeUserAgent(req.headers['user-agent']),
+ })
+ }
+
// Send search event with client identifier
try {
- await publish({
+ const analyticsPayload = {
schema: hydroNames.search,
value: {
- type: 'search',
version: '1.0.0',
context: {
event_id: crypto.randomUUID(),
@@ -73,7 +85,9 @@ export async function handleExternalSearchAnalytics(
search_context: searchContext,
search_client: client_name as string,
},
- })
+ }
+
+ await publish(analyticsPayload)
} catch (error) {
// Don't fail the request if analytics fails
console.error('Failed to send search analytics:', error)
@@ -82,6 +96,34 @@ export async function handleExternalSearchAnalytics(
return null
}
+/**
+ * Sanitizes user agent by extracting only the main client type
+ * Returns a safe string with just the primary client identifier
+ */
+function sanitizeUserAgent(userAgent: string | undefined): string {
+ if (!userAgent) return 'unknown'
+
+ // Extract common client types while removing version numbers and detailed info
+ const patterns = [
+ { regex: /^curl/i, name: 'curl' },
+ { regex: /^wget/i, name: 'wget' },
+ { regex: /python-requests/i, name: 'python-requests' },
+ { regex: /axios/i, name: 'axios' },
+ { regex: /node-fetch/i, name: 'node-fetch' },
+ { regex: /Go-http-client/i, name: 'go-http-client' },
+ { regex: /okhttp/i, name: 'okhttp' },
+ { regex: /Mozilla/i, name: 'browser' },
+ ]
+
+ for (const pattern of patterns) {
+ if (pattern.regex.test(userAgent)) {
+ return pattern.name
+ }
+ }
+
+ return 'other'
+}
+
/**
* Determines if a host should bypass client_name requirement for analytics
* Returns true if the host ends with github.net or githubapp.com