From c6a8671e262afbb6ff15c1bb89885f3b9307758b Mon Sep 17 00:00:00 2001 From: Lyric Yu Date: Wed, 18 Mar 2026 01:36:22 -0700 Subject: [PATCH 1/9] Fix bullet ordering for LFS doc (#60293) Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- content/billing/concepts/product-billing/git-lfs.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/content/billing/concepts/product-billing/git-lfs.md b/content/billing/concepts/product-billing/git-lfs.md index e31c391ceb92..5fd79f215050 100644 --- a/content/billing/concepts/product-billing/git-lfs.md +++ b/content/billing/concepts/product-billing/git-lfs.md @@ -49,14 +49,16 @@ category: Previously, {% data variables.large_files.product_name_short %} billing used pre-paid data packs. These have been removed and replaced with metered billing and you only pay for what you actually use. -Each {% data variables.product.github %} account includes a quota of free bandwidth and storage for {% data variables.large_files.product_name_long %} ({% data variables.large_files.product_name_short %}). If you exceed this quota, what happens next depends on your {% data variables.large_files.product_name_short %} budget setting: +Each {% data variables.product.github %} account includes a quota of free bandwidth and storage for {% data variables.large_files.product_name_long %} ({% data variables.large_files.product_name_short %}). + +* **Bandwidth:** Your free quota resets at the start of each billing cycle. +* **Storage:** Charges accrue continuously throughout the month based on hourly usage. Your accrued storage total resets to zero at the beginning of each billing cycle. + +If you exceed this quota, what happens next depends on your {% data variables.large_files.product_name_short %} budget setting: * **Budget set to $0**: You are not charged for overages, but {% data variables.large_files.product_name_short %} usage is blocked for the rest of the calendar month. Usage resets on the first of the next month. * **Budget deleted**: There is no spending limit, and you are billed for all usage beyond the free quota. -* **Bandwidth:** Your free quota resets at the start of each billing cycle. -* **Storage:** Charges accrue continuously throughout the month based on hourly usage. Your accrued storage total resets to zero at the beginning of each billing cycle. - {% data variables.large_files.product_name_short %} storage is calculated based on all {% data variables.large_files.product_name_short %} objects associated with a repository, regardless of when they were uploaded. Storage usage is only zero when no {% data variables.large_files.product_name_short %} objects are associated with the repository. If you delete {% data variables.large_files.product_name_short %} objects partway through a calendar month, the storage usage for that month is not recalculated. Storage resets on the first of the following month. From 5ac7f8f3305e7973e8651e442b7d49341830f2f4 Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Wed, 18 Mar 2026 02:21:40 -0700 Subject: [PATCH 2/9] Update docs changelog (for PR #60110) (#60305) Co-authored-by: github-actions[bot] Co-authored-by: hubwriter Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- CHANGELOG.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52df890d20ee..d22965855dab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,21 @@ # Docs changelog +**18 March 2026** + +We added documentation for using session data in Copilot CLI—including the `/chronicle` slash command: + +* [About GitHub Copilot CLI session data](https://docs.github.com/en/copilot/concepts/agents/copilot-cli/chronicle) +* [Using GitHub Copilot CLI session data](https://docs.github.com/copilot/how-tos/copilot-cli/chronicle) + +
+ **17 March 2026** We published [Maintaining codebase standards in a GitHub Copilot rollout](https://docs.github.com/en/enterprise-cloud@latest/copilot/tutorials/roll-out-at-scale/maintain-codebase-standards). The guide shows how customers can create a strong governance framework for Copilot by leveraging GitHub's enterprise-grade platform alongside cultural best practices. -
- -We published [Resources for getting approval of GitHub Copilot](https://docs.github.com/enterprise-cloud@latest/copilot/get-started/resources-for-approval), a guide that collects resources for enterprise admins to send to legal, compliance, and cybersecurity teams in their company. +We also published [Resources for getting approval of GitHub Copilot](https://docs.github.com/enterprise-cloud@latest/copilot/get-started/resources-for-approval), a guide that collects resources for enterprise admins to send to legal, compliance, and cybersecurity teams in their company.
@@ -18,6 +25,8 @@ We've updated our documentation to include a series of articles about the GitHub See [GitHub integration in Teams](https://docs.github.com/integrations/how-tos/teams). +
+ **4 March 2026** We've published a new article to coincide with the public preview of the Copilot coding agent for Jira integration. From d9d6f966d30db70d8bf04bcf0dab5a17b55af0a6 Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Wed, 18 Mar 2026 10:25:15 +0100 Subject: [PATCH 3/9] Create docs-internal PR for Early Access preview (#60306) From 0247f7734086163f59de8cdd1a757bf2a8c661f1 Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Wed, 18 Mar 2026 10:29:48 +0100 Subject: [PATCH 4/9] [2026-03-13] Organization CLI Metrics [GA] (#60182) --- .../copilot-usage-metrics/copilot-usage-metrics.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md b/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md index 513fc95bc9d1..bea49ce2cb57 100644 --- a/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md +++ b/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md @@ -91,16 +91,15 @@ For example schemas of the data returned by the APIs, see [AUTOTITLE](/copilot/r | `totals_by_language_feature` | Breakdown combining language and feature dimensions. | | `totals_by_model_feature` / `totals_by_language_model` | Model-specific breakdowns for chat activity (not completions). | | `last_known_ide_version` / `last_known_plugin_version` | The most recent IDE and {% data variables.copilot.copilot_chat_short %} extension version detected for each user. | -| `daily_active_cli_users` | Number of unique users in the enterprise who used {% data variables.product.prodname_copilot_short %} via the CLI on a given day. This field is **independent** of IDE active user counts and is **not** included in IDE-based active user definitions. Omitted for enterprises with no CLI usage on that day. | -| `totals_by_cli` | Breakdown of CLI-specific metrics for the enterprise on a given day. Independent of IDE metrics—CLI usage is **not** reflected in other fields such as `totals_by_ide` or `totals_by_feature`. Omitted for enterprises with no CLI usage on that day. See [{% data variables.copilot.copilot_cli_short %} metrics fields](#copilot-cli-metrics-fields-api-only) below. | +| `daily_active_cli_users` | Number of unique users in the enterprise or organization who used {% data variables.product.prodname_copilot_short %} via the CLI on a given day. This field 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 on that day. | +| `totals_by_cli` | Breakdown of CLI-specific metrics for the enterprise or organization on a given day. Independent of IDE metrics—CLI usage is **not** reflected in other fields such as `totals_by_ide` or `totals_by_feature`. Omitted for enterprises or organizations with no CLI usage on that day. See [{% data variables.copilot.copilot_cli_short %} metrics fields](#copilot-cli-metrics-fields-api-only) below. | | `used_cli` | Captures whether the user has used {% data variables.copilot.copilot_cli_short %} that day. | | `used_agent` | Captures whether the user has used IDE agent mode that day. | | `used_chat` | Captures whether the user has used IDE chat that day. | - ### {% data variables.copilot.copilot_cli_short %} metrics fields (API only) -The `totals_by_cli` object contains the following nested fields when CLI usage is present. These metrics are currently only available in the enterprise-level and user-level reports. +The `totals_by_cli` object contains the following nested fields when CLI usage is present. | Field | Description | |:--|:--| @@ -110,7 +109,7 @@ The `totals_by_cli` object contains the following nested fields when CLI usage i | `totals_by_cli.token_usage.prompt_tokens_sum` | Total number of prompt tokens sent across all CLI requests on this day. | | `totals_by_cli.token_usage.avg_tokens_per_request` | Average number of **output** and **prompt** tokens per CLI request, computed as `(output_tokens_sum + prompt_tokens_sum) ÷ request_count`.| | `totals_by_cli.prompt_count` | Total number of user prompts, commands, or queries executed within a session. | -| `totals_by_cli.last_known_cli_version` | Most recent Copilot CLI version detected for the user that day. | +| `totals_by_cli.last_known_cli_version` | Most recent {% data variables.copilot.copilot_cli_short %} version detected for the user that day. | ### Pull request activity fields (API only) From d8ba9e35311d4fccfdfc7e60dc61a5841bfa3a63 Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Wed, 18 Mar 2026 11:59:53 +0100 Subject: [PATCH 5/9] Create docs-internal PR for Early Access preview (#60308) From 27310c8396f1e7dd5f7dd9d65184f0931bab60b4 Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Wed, 18 Mar 2026 04:32:58 -0700 Subject: [PATCH 6/9] Align default/staging memory config with production (7168 MiB heap, 8 Gi request) (#60309) Align default/staging memory config with production to fix OOM crashes caused by Moda config layering applying the 4096 MiB heap limit instead of the production 7168 MiB limit. --- config/kubernetes/default/deployments/webapp.yaml | 9 ++++++++- config/moda/configuration/default/env.yaml | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/config/kubernetes/default/deployments/webapp.yaml b/config/kubernetes/default/deployments/webapp.yaml index f71de2831a19..5af0507b1e60 100644 --- a/config/kubernetes/default/deployments/webapp.yaml +++ b/config/kubernetes/default/deployments/webapp.yaml @@ -24,7 +24,14 @@ spec: resources: requests: cpu: 1000m - memory: 4500Mi + # Absolute minimum to start app is 1000m + # Node is single-threaded but we want more CPUs + # for OS and image resizing, and other binary executions + # Better to increase replicas or memory than CPU + memory: 8.0Gi + # Absolute minimum to start app is 4500Mi + # Would increase with more pages, versions, or languages supported + # The additional memory helps during traffic surges # Keep ~600 MB headroom above --max-old-space-size in # config/moda/configuration/default/env.yaml for Node # off-heap memory and OS overhead. diff --git a/config/moda/configuration/default/env.yaml b/config/moda/configuration/default/env.yaml index 10360f1b261c..11b3ab7f5122 100644 --- a/config/moda/configuration/default/env.yaml +++ b/config/moda/configuration/default/env.yaml @@ -6,8 +6,8 @@ data: # V8 code cache, libuv) and OS overhead. If you change the memory # request in config/kubernetes/default/deployments/webapp.yaml, # update this value to match. - # Current: 4500 MiB request, 4096 MiB heap = 404 MiB headroom - NODE_OPTIONS: '--max-old-space-size=4096' + # Current: 8.0 Gi (8192 MiB) request, 7168 MiB heap = 1024 MiB headroom + NODE_OPTIONS: '--max-old-space-size=7168' PORT: '4000' ENABLED_LANGUAGES: 'en,es,ja,pt,zh,ru,fr,ko,de' RATE_LIMIT_MAX: '21' From 828429514674354b708356d59fd288bdf456f1ba Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Wed, 18 Mar 2026 05:05:46 -0700 Subject: [PATCH 7/9] Move V8 heap config to Dockerfile with --max-old-space-size-percentage (#60311) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- Dockerfile | 10 +++++++++- config/kubernetes/default/deployments/webapp.yaml | 5 ++--- config/kubernetes/production/deployments/webapp.yaml | 5 ++--- config/moda/configuration/default/env.yaml | 10 +++------- config/moda/configuration/production/env.yaml | 10 +++------- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/Dockerfile b/Dockerfile index e04ae800a3cb..6a9179f4b081 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,9 @@ # This Dockerfile is used solely for production deployments to Moda # For building this file locally, see src/deployments/production/README.md -# Environment variables are set in the Moda configuration: +# Most environment variables are set in the Moda configuration: # config/moda/configuration/*/env.yaml +# V8 heap sizing is set here via NODE_OPTIONS and mirrored in +# the Moda config files for defense-in-depth. # --------------------------------------------------------------- # BASE STAGE: Install linux dependencies and set up the node user @@ -151,5 +153,11 @@ COPY --chown=node:node --from=precompute_stage $APP_HOME/.pageinfo-cache.json.br ARG BUILD_SHA ENV BUILD_SHA=$BUILD_SHA +# V8 heap limit as a percentage of the container cgroup memory limit. +# Uses --max-old-space-size-percentage (Node 24+) so the heap adapts +# automatically when K8s memory limits change. 75% leaves ~25% headroom +# for off-heap memory (Buffers, V8 code cache, libuv) and OS overhead. +ENV NODE_OPTIONS="--max-old-space-size-percentage=75" + # Entrypoint to start the server CMD ["node_modules/.bin/tsx", "src/frame/server.ts"] diff --git a/config/kubernetes/default/deployments/webapp.yaml b/config/kubernetes/default/deployments/webapp.yaml index 5af0507b1e60..3d0a7ecbfd4e 100644 --- a/config/kubernetes/default/deployments/webapp.yaml +++ b/config/kubernetes/default/deployments/webapp.yaml @@ -32,9 +32,8 @@ spec: # Absolute minimum to start app is 4500Mi # Would increase with more pages, versions, or languages supported # The additional memory helps during traffic surges - # Keep ~600 MB headroom above --max-old-space-size in - # config/moda/configuration/default/env.yaml for Node - # off-heap memory and OS overhead. + # V8 heap is set to 75% of the cgroup memory limit via + # --max-old-space-size-percentage in the Dockerfile. limits: cpu: 8000m memory: 16Gi diff --git a/config/kubernetes/production/deployments/webapp.yaml b/config/kubernetes/production/deployments/webapp.yaml index 387e4524b4cd..6467618ab097 100644 --- a/config/kubernetes/production/deployments/webapp.yaml +++ b/config/kubernetes/production/deployments/webapp.yaml @@ -34,9 +34,8 @@ spec: # Absolute minimum to start app is 4500Mi # Would increase with more pages, versions, or languages supported # The additional memory helps during traffic surges - # Keep ~600 MB headroom above --max-old-space-size in - # config/moda/configuration/production/env.yaml for Node - # off-heap memory and OS overhead. + # V8 heap is set to 75% of the cgroup memory limit via + # --max-old-space-size-percentage in the Dockerfile. limits: cpu: 16000m memory: 16Gi diff --git a/config/moda/configuration/default/env.yaml b/config/moda/configuration/default/env.yaml index 11b3ab7f5122..fd28256d4dd1 100644 --- a/config/moda/configuration/default/env.yaml +++ b/config/moda/configuration/default/env.yaml @@ -1,13 +1,9 @@ data: MODA_APP_NAME: docs-internal NODE_ENV: production - # V8 heap limit (--max-old-space-size) should leave at least ~600 MiB - # below the K8s memory request for Node off-heap memory (Buffers, - # V8 code cache, libuv) and OS overhead. If you change the memory - # request in config/kubernetes/default/deployments/webapp.yaml, - # update this value to match. - # Current: 8.0 Gi (8192 MiB) request, 7168 MiB heap = 1024 MiB headroom - NODE_OPTIONS: '--max-old-space-size=7168' + # Matches the Dockerfile ENV. Both set the same value so that + # the heap limit is correct regardless of config-layering order. + NODE_OPTIONS: '--max-old-space-size-percentage=75' PORT: '4000' ENABLED_LANGUAGES: 'en,es,ja,pt,zh,ru,fr,ko,de' RATE_LIMIT_MAX: '21' diff --git a/config/moda/configuration/production/env.yaml b/config/moda/configuration/production/env.yaml index feae34ade6c6..dae252096588 100644 --- a/config/moda/configuration/production/env.yaml +++ b/config/moda/configuration/production/env.yaml @@ -1,13 +1,9 @@ data: MODA_APP_NAME: docs-internal NODE_ENV: production - # V8 heap limit (--max-old-space-size) should leave at least ~600 MiB - # below the K8s memory request for Node off-heap memory (Buffers, - # V8 code cache, libuv) and OS overhead. If you change the memory - # request in config/kubernetes/production/deployments/webapp.yaml, - # update this value to match. - # Current: 8.0 Gi (8192 MiB) request, 7168 MiB heap = 1024 MiB headroom - NODE_OPTIONS: '--max-old-space-size=7168' + # Matches the Dockerfile ENV. Both set the same value so that + # the heap limit is correct regardless of config-layering order. + NODE_OPTIONS: '--max-old-space-size-percentage=75' PORT: '4000' ENABLED_LANGUAGES: 'en,es,ja,pt,zh,ru,fr,ko,de' RATE_LIMIT_MAX: '21' From ad3b6f0db99b1449a793b26c5b8603ddcebfdf7f Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Wed, 18 Mar 2026 06:42:11 -0700 Subject: [PATCH 8/9] Set limit == request for memory (#60317) --- config/kubernetes/default/deployments/webapp.yaml | 5 +---- config/kubernetes/production/deployments/webapp.yaml | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/config/kubernetes/default/deployments/webapp.yaml b/config/kubernetes/default/deployments/webapp.yaml index 3d0a7ecbfd4e..5aff611caa1f 100644 --- a/config/kubernetes/default/deployments/webapp.yaml +++ b/config/kubernetes/default/deployments/webapp.yaml @@ -31,12 +31,9 @@ spec: memory: 8.0Gi # Absolute minimum to start app is 4500Mi # Would increase with more pages, versions, or languages supported - # The additional memory helps during traffic surges - # V8 heap is set to 75% of the cgroup memory limit via - # --max-old-space-size-percentage in the Dockerfile. limits: cpu: 8000m - memory: 16Gi + memory: 8.0Gi ports: - name: http containerPort: 4000 diff --git a/config/kubernetes/production/deployments/webapp.yaml b/config/kubernetes/production/deployments/webapp.yaml index 6467618ab097..f5bf99c2dccc 100644 --- a/config/kubernetes/production/deployments/webapp.yaml +++ b/config/kubernetes/production/deployments/webapp.yaml @@ -34,11 +34,9 @@ spec: # Absolute minimum to start app is 4500Mi # Would increase with more pages, versions, or languages supported # The additional memory helps during traffic surges - # V8 heap is set to 75% of the cgroup memory limit via - # --max-old-space-size-percentage in the Dockerfile. limits: cpu: 16000m - memory: 16Gi + memory: 8.0Gi ports: - name: http containerPort: 4000 From 651f9b8bf7847eb942c3d9ffb0b3aafe4fde5e90 Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:46:58 +0100 Subject: [PATCH 9/9] [Improvement]: Improve accuracy of cost center allocation docs as related to Copilot premium requests (#60199) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- content/billing/reference/cost-center-allocation.md | 2 +- data/reusables/billing/cost-center-allocation.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/billing/reference/cost-center-allocation.md b/content/billing/reference/cost-center-allocation.md index cb4d7be26601..651b61428024 100644 --- a/content/billing/reference/cost-center-allocation.md +++ b/content/billing/reference/cost-center-allocation.md @@ -26,7 +26,7 @@ This article contains reference information for how spending is assigned to cost | {% data variables.product.prodname_enterprise %} | The user who receives the license (priority), or the organization that is billed for the license. | | Git Large File Storage | The repository or organization where Git LFS is used. | | {% data variables.product.prodname_registry %} | The repository or organization that owns the package. | -| {% data variables.product.prodname_prus_caps %} | The user who triggered the use of the {% data variables.product.prodname_pru %} (priority), or the organization they belong to. | +| {% data variables.product.prodname_prus_caps %} | The user who triggered {% data variables.product.prodname_pru %} usage (priority), or the organization that granted the user's {% data variables.product.prodname_copilot_short %} license. | | {% data variables.product.prodname_GHAS %} | A user who uses a license (priority), or the organization that is billed for the license. | ## Details for license-based products diff --git a/data/reusables/billing/cost-center-allocation.md b/data/reusables/billing/cost-center-allocation.md index 09e2be726c30..1428f16c0b35 100644 --- a/data/reusables/billing/cost-center-allocation.md +++ b/data/reusables/billing/cost-center-allocation.md @@ -2,6 +2,6 @@ To allocate metered spending to a cost center, you add repositories, organizatio * For **usage-based** products, like {% data variables.product.prodname_actions %}, cost centers are charged based on the **repositories or organizations** in the cost center, as this is where the usage takes place. * For **license-based** products, like {% data variables.product.prodname_copilot %}, cost centers are charged based on the **users** in the cost center. -* For products billed by **{% data variables.product.prodname_pru %}** usage, like {% data variables.copilot.copilot_coding_agent %}, cost centers are also charged based on the **users** in the cost center. +* For products billed by **{% data variables.product.prodname_pru %}** usage, like {% data variables.copilot.copilot_coding_agent %}, cost centers are charged based on the **users** in the cost center, or the **organization that granted the user's {% data variables.product.prodname_copilot %} license** if the user isn't directly assigned to a cost center. Cost centers only apply to metered usage, and do not work with volume or subscription billing.