Skip to content
15 changes: 12 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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)

<hr>

**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.

<hr>

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.

<hr>

Expand All @@ -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).

<hr>

**4 March 2026**

We've published a new article to coincide with the public preview of the Copilot coding agent for Jira integration.
Expand Down
10 changes: 9 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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"]
13 changes: 8 additions & 5 deletions config/kubernetes/default/deployments/webapp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,16 @@ spec:
resources:
requests:
cpu: 1000m
memory: 4500Mi
# Keep ~600 MB headroom above --max-old-space-size in
# config/moda/configuration/default/env.yaml for Node
# off-heap memory and OS overhead.
# 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
limits:
cpu: 8000m
memory: 16Gi
memory: 8.0Gi
ports:
- name: http
containerPort: 4000
Expand Down
5 changes: 1 addition & 4 deletions config/kubernetes/production/deployments/webapp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +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
# Keep ~600 MB headroom above --max-old-space-size in
# config/moda/configuration/production/env.yaml for Node
# off-heap memory and OS overhead.
limits:
cpu: 16000m
memory: 16Gi
memory: 8.0Gi
ports:
- name: http
containerPort: 4000
Expand Down
10 changes: 3 additions & 7 deletions config/moda/configuration/default/env.yaml
Original file line number Diff line number Diff line change
@@ -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: 4500 MiB request, 4096 MiB heap = 404 MiB headroom
NODE_OPTIONS: '--max-old-space-size=4096'
# 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'
Expand Down
10 changes: 3 additions & 7 deletions config/moda/configuration/production/env.yaml
Original file line number Diff line number Diff line change
@@ -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'
Expand Down
10 changes: 6 additions & 4 deletions content/billing/concepts/product-billing/git-lfs.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion content/billing/reference/cost-center-allocation.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
|:--|:--|
Expand All @@ -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)

Expand Down
2 changes: 1 addition & 1 deletion data/reusables/billing/cost-center-allocation.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Loading