Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ There are two ways to qualify for free access to {% data variables.copilot.copil

{% data variables.product.company_short %} reevaluates your eligibility every month.

{% data reusables.copilot.free-access-cancellation-note %} For more information about managing your plan, see [AUTOTITLE](/copilot/how-tos/manage-your-account/view-and-change-your-copilot-plan).

## What if I don't qualify for free access to {% data variables.copilot.copilot_pro_short %}?

If you do not meet the previous criteria, you can do one of the following:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ You can upgrade or downgrade your {% data variables.product.prodname_copilot_sho

You can cancel your {% data variables.product.prodname_copilot_short %} plan at any time. You’ll retain access to your current features until your billing cycle ends. You will automatically be downgraded to {% data variables.copilot.copilot_free_short %} at the end of your billing cycle.

If you have been granted free access to {% data variables.product.prodname_copilot_short %} as a verified student, teacher, or maintainer of a popular open source project, you won’t be able to cancel your plan. If you have access to {% data variables.product.prodname_copilot_short %} through an organization or enterprise, you will not be able to cancel your plan. In these cases, you can disable {% data variables.product.prodname_copilot_short %} in your environment. See [AUTOTITLE](/copilot/how-tos/configure-personal-settings/configure-in-ide).
{% data reusables.copilot.free-access-cancellation-note %} If you have access to {% data variables.product.prodname_copilot_short %} through an organization or enterprise, you will not be able to cancel your plan. In these cases, you can disable {% data variables.product.prodname_copilot_short %} in your environment. See [AUTOTITLE](/copilot/how-tos/configure-personal-settings/configure-in-ide).

{% data reusables.copilot.copilot-one-account-short %}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ Active-user counts:
| `weekly_passive_copilot_code_review_users` | `integer` | No | Number of unique users who had {% data variables.copilot.copilot_code-review_short %} automatically assigned to review their pull request during a trailing seven-day window, with no active engagement. |
| `monthly_passive_copilot_code_review_users` | `integer` | No | Number of unique users who had {% data variables.copilot.copilot_code-review_short %} automatically assigned to review their pull request during a trailing 28-day window, with no active engagement. |
| `daily_active_cli_users` | `integer` | Yes | Number of unique users who used {% data variables.copilot.copilot_cli_short %} on a given day. This count is **independent** of IDE active-user counts and is **not** included in IDE-based active-user definitions. Omitted for enterprises or organizations with no CLI usage that day. |
| `daily_active_copilot_app_users` | `integer` | Yes | Number of unique users who used the {% data variables.copilot.github_copilot_app_short %} on a given day. Enterprise reports only. Null when the enterprise has no {% data variables.copilot.github_copilot_app_short %} activity that day. |
| `daily_active_copilot_app_users` | `integer` | Yes | Number of unique users who used the {% data variables.copilot.github_copilot_app_short %} on a given day. Null when the enterprise or organization has no {% data variables.copilot.github_copilot_app_short %} activity that day. |

Activity totals and breakdowns:

Expand All @@ -177,7 +177,7 @@ Activity totals and breakdowns:
| `totals_by_language_model` | `array` | No | Aggregated language-and-model activity breakdown. See [Activity breakdown objects](#activity-breakdown-objects). |
| `totals_by_model_feature` | `array` | No | Aggregated model-and-feature activity breakdown. See [Activity breakdown objects](#activity-breakdown-objects). |
| `totals_by_cli` | `object` | Yes | Aggregated {% data variables.copilot.copilot_cli_short %} metrics for the day. Omitted when there is no CLI usage that day. Unlike the per-user form, it does not include `last_known_cli_version`. See [{% data variables.copilot.copilot_cli_short %} metrics fields](#copilot-cli-metrics-fields). |
| `totals_by_copilot_app` | `object` | Yes | Aggregated {% data variables.copilot.github_copilot_app_short %} metrics for the day. Enterprise reports only. Null when the enterprise has no {% data variables.copilot.github_copilot_app_short %} activity that day. See [{% data variables.copilot.github_copilot_app_short %} metrics fields](#copilot-app-metrics-fields). |
| `totals_by_copilot_app` | `object` | Yes | Aggregated {% data variables.copilot.github_copilot_app_short %} metrics for the day. Null when the enterprise or organization has no {% data variables.copilot.github_copilot_app_short %} activity that day. See [{% data variables.copilot.github_copilot_app_short %} metrics fields](#copilot-app-metrics-fields). |
| `totals_by_3rd_party_agent` | `array` | Yes | Aggregated per-agent usage metrics for recognized {% data variables.copilot.agent_apps %}. Omitted when the enterprise or organization had no recognized {% data variables.copilot.agent_app %} activity that day. See [{% data variables.copilot.agent_apps_caps %} metrics fields](#agent-apps-metrics-fields). |
| `totals_by_ai_adoption_phase` | `array` | Yes | Per-phase aggregates of users and their average activity. Omitted when no adoption-phase data is available. See [AI adoption phase fields](#ai-adoption-phase-fields). |
| `pull_requests` | `object` | No | Daily pull request activity for the enterprise or organization. See [Pull request activity fields](#pull-request-activity-fields). |
Expand Down Expand Up @@ -366,6 +366,8 @@ Each entry in the aggregated `totals_by_ai_adoption_phase` array contains:
| `avg_pull_requests_merged` | `number` | No | Average pull requests merged per user in this phase. |
| `total_pull_requests_merged` | `integer` | No | Total pull requests merged by users in this phase. Applies to the organization day and enterprise day aggregated reports. |
| `avg_pull_requests_median_minutes_to_merge` | `number` | No | Average of the per-user median minutes to merge for users in this phase. |
| `avg_pull_requests_minutes_to_review` | `number` | No | Median time in minutes from pull request creation to first review, scoped to merged pull requests and attributed to the pull request's merge day. |
| `avg_pull_requests_review_cycles` | `number` | No | Median number of review submissions (review cycles) per pull request, scoped to merged pull requests and attributed to the pull request's merge day. |

### Breakdown dimension values

Expand Down
99 changes: 97 additions & 2 deletions content/copilot/reference/copilot-usage-metrics/example-schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ The following are example schemas for the user-level, enterprise-level, and repo

```json copy
[{
"ai_adoption_phase": {
"phase": "Phase 2",
"phase_number": 2,
"version": "v1"
},
"ai_credits_used": 12.5,
"code_acceptance_activity_count": 3,
"code_generation_activity_count": 3,
Expand Down Expand Up @@ -124,6 +129,10 @@ The following are example schemas for the user-level, enterprise-level, and repo
"used_chat": false,
"used_cli": true,
"used_copilot_app": true,
"used_copilot_cloud_agent": false,
"used_copilot_code_review_active": null,
"used_copilot_code_review_passive": null,
"used_copilot_coding_agent": false,
"user_id": 1,
"user_login": "login1",
"user_initiated_interaction_count": 1,
Expand All @@ -135,6 +144,8 @@ The following are example schemas for the user-level, enterprise-level, and repo

Organization per-user reports use the same `totals_by_3rd_party_agent` entry fields and also include `organization_id`. Per-user entries do not include `session_count`.

In this example, `used_copilot_code_review_active` and `used_copilot_code_review_passive` are `null` because there was no {% data variables.copilot.copilot_code-review_short %} signal for the user that day. `used_copilot_cloud_agent` and `used_copilot_coding_agent` always carry the same value.

## Enterprise-level schema example

```json copy
Expand All @@ -144,7 +155,10 @@ Organization per-user reports use the same `totals_by_3rd_party_agent` entry fie
"code_generation_activity_count" : 4,
"daily_active_cli_users" : 2,
"daily_active_copilot_app_users" : 1,
"daily_active_copilot_cloud_agent_users" : 1,
"daily_active_copilot_code_review_users" : 1,
"daily_active_users" : 2,
"daily_passive_copilot_code_review_users" : 0,
"day" : "2025-10-01",
"enterprise_id" : "1",
"loc_added_sum" : 54,
Expand All @@ -153,7 +167,10 @@ Organization per-user reports use the same `totals_by_3rd_party_agent` entry fie
"loc_suggested_to_delete_sum" : 6,
"monthly_active_agent_users" : 0,
"monthly_active_chat_users" : 0,
"monthly_active_copilot_cloud_agent_users" : 1,
"monthly_active_copilot_code_review_users" : 1,
"monthly_active_users" : 2,
"monthly_passive_copilot_code_review_users" : 0,
"pull_requests" : {
"median_minutes_to_merge" : 2.5,
"median_minutes_to_merge_copilot_authored" : 2.5,
Expand Down Expand Up @@ -181,6 +198,39 @@ Organization per-user reports use the same `totals_by_3rd_party_agent` entry fie
"session_count" : 2,
"user_initiated_interaction_count" : 2
} ],
"totals_by_ai_adoption_phase" : [ {
"avg_code_acceptance_activities" : 1.0,
"avg_code_generation_activities" : 1.0,
"avg_loc_added" : 22.0,
"avg_loc_deleted" : 0.0,
"avg_pull_requests_created" : 1.0,
"avg_pull_requests_median_minutes_to_merge" : 2.5,
"avg_pull_requests_merged" : 1.0,
"avg_pull_requests_minutes_to_review" : 1.5,
"avg_pull_requests_review_cycles" : 1.0,
"avg_pull_requests_reviewed" : 0.0,
"avg_user_initiated_interactions" : 0.0,
"phase" : "Phase 1",
"phase_number" : 1,
"total_engaged_users" : 1,
"total_pull_requests_merged" : 1
}, {
"avg_code_acceptance_activities" : 3.0,
"avg_code_generation_activities" : 3.0,
"avg_loc_added" : 32.0,
"avg_loc_deleted" : 6.0,
"avg_pull_requests_created" : 1.0,
"avg_pull_requests_median_minutes_to_merge" : 2.5,
"avg_pull_requests_merged" : 1.0,
"avg_pull_requests_minutes_to_review" : 2.0,
"avg_pull_requests_review_cycles" : 2.0,
"avg_pull_requests_reviewed" : 1.0,
"avg_user_initiated_interactions" : 1.0,
"phase" : "Phase 2",
"phase_number" : 2,
"total_engaged_users" : 1,
"total_pull_requests_merged" : 1
} ],
"totals_by_cli" : {
"prompt_count" : 3,
"request_count" : 3,
Expand Down Expand Up @@ -252,7 +302,10 @@ Organization per-user reports use the same `totals_by_3rd_party_agent` entry fie
"totals_by_language_model" : [ ],
"totals_by_model_feature" : [ ],
"user_initiated_interaction_count" : 1,
"weekly_active_users" : 2
"weekly_active_copilot_cloud_agent_users" : 1,
"weekly_active_copilot_code_review_users" : 1,
"weekly_active_users" : 2,
"weekly_passive_copilot_code_review_users" : 0
} ],
"enterprise_id" : "1",
"report_end_day" : "2025-10-01",
Expand All @@ -264,7 +317,10 @@ Organization per-user reports use the same `totals_by_3rd_party_agent` entry fie
"day_totals" : [ {
"code_acceptance_activity_count" : 2,
"code_generation_activity_count" : 3,
"daily_active_copilot_cloud_agent_users" : 0,
"daily_active_copilot_code_review_users" : 0,
"daily_active_users" : 2,
"daily_passive_copilot_code_review_users" : 0,
"day" : "2025-10-01",
"enterprise_id" : "2",
"loc_added_sum" : 50,
Expand All @@ -273,7 +329,10 @@ Organization per-user reports use the same `totals_by_3rd_party_agent` entry fie
"loc_suggested_to_delete_sum" : 3,
"monthly_active_agent_users" : 0,
"monthly_active_chat_users" : 0,
"monthly_active_copilot_cloud_agent_users" : 0,
"monthly_active_copilot_code_review_users" : 0,
"monthly_active_users" : 2,
"monthly_passive_copilot_code_review_users" : 0,
"pull_requests" : {
"total_applied_suggestions" : 0,
"total_copilot_applied_suggestions" : 0,
Expand All @@ -287,6 +346,39 @@ Organization per-user reports use the same `totals_by_3rd_party_agent` entry fie
"total_reviewed_by_copilot" : 0,
"total_suggestions" : 1
},
"totals_by_ai_adoption_phase" : [ {
"avg_code_acceptance_activities" : 0.0,
"avg_code_generation_activities" : 1.0,
"avg_loc_added" : 12.0,
"avg_loc_deleted" : 3.0,
"avg_pull_requests_created" : 0.0,
"avg_pull_requests_median_minutes_to_merge" : 0.0,
"avg_pull_requests_merged" : 0.0,
"avg_pull_requests_minutes_to_review" : 0.0,
"avg_pull_requests_review_cycles" : 0.0,
"avg_pull_requests_reviewed" : 0.0,
"avg_user_initiated_interactions" : 0.0,
"phase" : "No Cohort",
"phase_number" : 0,
"total_engaged_users" : 1,
"total_pull_requests_merged" : 0
}, {
"avg_code_acceptance_activities" : 2.0,
"avg_code_generation_activities" : 2.0,
"avg_loc_added" : 38.0,
"avg_loc_deleted" : 0.0,
"avg_pull_requests_created" : 1.0,
"avg_pull_requests_median_minutes_to_merge" : 0.0,
"avg_pull_requests_merged" : 0.0,
"avg_pull_requests_minutes_to_review" : 0.0,
"avg_pull_requests_review_cycles" : 0.0,
"avg_pull_requests_reviewed" : 1.0,
"avg_user_initiated_interactions" : 1.0,
"phase" : "Phase 1",
"phase_number" : 1,
"total_engaged_users" : 1,
"total_pull_requests_merged" : 0
} ],
"totals_by_feature" : [ {
"code_acceptance_activity_count" : 1,
"code_generation_activity_count" : 2,
Expand Down Expand Up @@ -338,7 +430,10 @@ Organization per-user reports use the same `totals_by_3rd_party_agent` entry fie
"totals_by_language_model" : [ ],
"totals_by_model_feature" : [ ],
"user_initiated_interaction_count" : 1,
"weekly_active_users" : 2
"weekly_active_copilot_cloud_agent_users" : 0,
"weekly_active_copilot_code_review_users" : 0,
"weekly_active_users" : 2,
"weekly_passive_copilot_code_review_users" : 0
} ],
"enterprise_id" : "2",
"report_end_day" : "2025-10-01",
Expand Down
10 changes: 7 additions & 3 deletions content/migrations/elm/migrated-data-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,12 @@ The only organization-level action supported by {% data variables.product.prodna
| Repository PR settings | Pull request merge and review settings |
| Actions settings | Repository-level GitHub Actions configuration, including allowed actions and permissions |
| Autolinks | Custom autolink references |
| Branch protections | Branch protection rules |
| Branch protections | Branch protection rules are partially migrated, with the limitations described below |
| Pages | GitHub Pages configuration |

> [!WARNING]
> Branch protection migration is partially supported. {% data variables.product.prodname_elm_short %} preserves whether actor restrictions are enabled for dismissing pull request reviews and pushing to protected branches, but it does not preserve the permitted users, teams, or apps. A push restriction can therefore be recreated on the destination with an empty allowlist. It also does not migrate pull request bypass actors, force-push actors, status check app bindings, matching-branch creation restrictions, merge queue settings, deployment requirements, or branch locking. Review and update migrated branch protection rules before allowing users to work in the destination repository.

### Git data, LFS, and wikis

| Resource | Notes |
Expand Down Expand Up @@ -96,7 +99,7 @@ The only organization-level action supported by {% data variables.product.prodna
| Data | Notes |
|---|---|
| Repository defaults | N/A |
| Repository rulesets | Only branch protection rules are migrated. |
| Repository rulesets | Repository rulesets are not migrated. Branch protection rules are partially migrated. |
| Pull requests from forks | N/A |
| Pending pull request reviews | Only submitted reviews are migrated. |

Expand Down Expand Up @@ -127,7 +130,7 @@ The following tables document which resource types support live updates and whic
| **Label** | `created` | `deleted`, `edited` |
| **Release** | `created`, `edited`, `prereleased`, `published`, `released`, `unpublished` | `deleted` |
| **Milestone** | `closed`, `created`, `edited`, `opened` | `deleted` |
| **Branch protection rule** | `created`, `edited` | `deleted` |
| **Branch protection rule (partial support)** | `created`, `edited` | `deleted` |
| **Commit comment** | `created`, `edited` | `deleted` |
| **Page build** | All actions | N/A |
| **Commit status checks** | All actions | N/A |
Expand All @@ -138,6 +141,7 @@ The following tables document which resource types support live updates and whic
| **Repository actions settings** | `updated` | N/A |
| **Repository webhook** | `created`, `updated` | N/A |

The branch protection limitations described in [Repository settings and configuration](#repository-settings-and-configuration) apply to both the initial migration and live updates.

> [!NOTE]
> When a pull request review is submitted, {% data variables.product.prodname_elm_short %} imports the full review including all inline comments together. Inline comments that are part of an initial review submission are migrated correctly. However, **replies added to a review thread after the review has been submitted** are not captured as live updates and will not appear in the migrated repository.
Expand Down
1 change: 1 addition & 0 deletions data/reusables/copilot/free-access-cancellation-note.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
If you have been granted free access to {% data variables.product.prodname_copilot_short %} as a verified student, teacher, or maintainer of a popular open source project, you won’t be able to cancel your plan.
6 changes: 3 additions & 3 deletions data/tables/supported-code-languages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ features:
languages:
C:
copilot: 'supported'
codeNavigation: 'not-supported'
codeNavigation: 'supported'
codeScanning: 'supported'
depGraph: 'not-supported'
depUpdates: 'not-supported'
actions: 'supported'
packages: 'not-supported'
C++:
copilot: 'supported'
codeNavigation: 'not-supported'
codeNavigation: 'supported'
codeScanning: 'supported'
depGraph: 'not-supported'
depUpdates: 'not-supported'
Expand Down Expand Up @@ -129,7 +129,7 @@ languages:
packages: 'not-supported'
Scala:
copilot: 'supported'
codeNavigation: 'not-supported'
codeNavigation: 'supported'
codeScanning: 'third-party [^1]'
depGraph: 'Maven'
depUpdates: 'Maven, Gradle'
Expand Down
23 changes: 23 additions & 0 deletions src/links/lib/update-internal-links.ts
Original file line number Diff line number Diff line change
Expand Up @@ -701,3 +701,26 @@ function singleStartingQuote(text: string) {
function isSimpleQuote(text: string) {
return text.startsWith('"') && text.endsWith('"') && text.split('"').length === 3
}
/**
* Write a Markdown page back out, preserving the original frontmatter text verbatim
* whenever the frontmatter data itself didn't change.
*
* Round-tripping frontmatter through the YAML serializer reflows values that were
* never touched: long `intro` strings become block scalars, `redirect_from` entries get
* rewrapped, and quote styles change. That churn dwarfs the actual link fixes and makes
* a bulk run unreviewable, which is why this only reserializes when it has to.
*/
export function serializeMarkdown(
rawContent: string,
content: string,
newContent: string,
newData: Record<string, unknown> | undefined,
differentData: boolean,
): string {
// `content` is the tail of the file, so everything before it is the frontmatter
// block exactly as the author wrote it, delimiters and all.
if (!differentData && rawContent.endsWith(content)) {
return rawContent.slice(0, rawContent.length - content.length) + newContent
}
return frontmatter.stringify(newContent, newData || {})
}
Loading
Loading