diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 668bb5aceb..06213bdf40 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -4,5 +4,5 @@
# It uses the same pattern rule for gitignore file
# https://git-scm.com/docs/gitignore#_pattern_format
-
-garbage_collector.rst @pablogsal
+# PSRT member list owned by PSRT admins.
+developer-workflow/psrt*.csv @warsaw @ewdurbin @ned-deily @sethmlarson
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index b160c6ea11..f6d55b1247 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,7 +1,7 @@
name: "Bug report"
description: Create a report to help us improve the Python devguide
title: "Bug:
"
-labels: ["bug"]
+labels: ["type-bug"]
assignees: []
body:
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index a4413c137a..7a7e9ec805 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -1,7 +1,7 @@
name: "Feature request"
description: Suggest an idea for the Python devguide
title: "Feature: "
-labels: ["enhancement"]
+labels: ["type-feature"]
assignees: []
body:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6479277afe..b85a45c1bb 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,7 +12,7 @@ jobs:
timeout-minutes: 10
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "3"
diff --git a/.github/workflows/documentation-links.yml b/.github/workflows/documentation-links.yml
deleted file mode 100644
index bacb37d07c..0000000000
--- a/.github/workflows/documentation-links.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-name: Read the Docs PR preview
-on:
- pull_request_target:
- types:
- - opened
-
-permissions:
- pull-requests: write
-
-jobs:
- documentation-links:
- runs-on: ubuntu-latest
- timeout-minutes: 10
- steps:
- - uses: readthedocs/actions/preview@v1
- with:
- project-slug: "cpython-devguide"
- single-version: "true"
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index c1554eb5e6..4622f995aa 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -8,7 +8,7 @@ jobs:
timeout-minutes: 10
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "3.x"
diff --git a/.gitignore b/.gitignore
index b712492014..f61a108300 100644
--- a/.gitignore
+++ b/.gitignore
@@ -90,5 +90,5 @@ celerybeat-schedule
# Generated CSV and SVG files
include/branches.csv
include/end-of-life.csv
-include/release-cycle.svg
-include/release-cycle-all.svg
+_static/release-cycle.svg
+_static/release-cycle-all.svg
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index ae27fd1f23..c5beee4a37 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -7,14 +7,12 @@ repos:
args: [--exit-non-zero-on-fix]
- id: ruff-format
name: Run Ruff (format)
- args: [--check]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: check-case-conflict
- id: check-merge-conflict
- - id: check-json
- id: check-yaml
- id: debug-statements
- id: end-of-file-fixer
diff --git a/Makefile b/Makefile
index 3d485ae2da..a26ad48e00 100644
--- a/Makefile
+++ b/Makefile
@@ -22,8 +22,8 @@ REQUIREMENTS = requirements.txt
_ALL_SPHINX_OPTS = --jobs $(JOBS) $(SPHINXOPTS)
_RELEASE_CYCLE = include/branches.csv \
include/end-of-life.csv \
- include/release-cycle-all.svg \
- include/release-cycle.svg
+ _static/release-cycle-all.svg \
+ _static/release-cycle.svg
.PHONY: help
help:
@@ -103,15 +103,20 @@ _ensure-pre-commit:
lint: _ensure-pre-commit
$(VENVDIR)/bin/python3 -m pre_commit run --all-files
-# Defined so that "include/release-cycle.json"
-# doesn't fall through to the catch-all target.
-include/release-cycle.json:
- @exit
-
-$(_RELEASE_CYCLE): include/release-cycle.json
+# Generate all release cycle files together with a single script invocation
+# Use branches.csv as the primary target, others depend on it
+include/branches.csv:
$(VENVDIR)/bin/python3 _tools/generate_release_cycle.py
@echo Release cycle data generated.
+# Other files are generated together with branches.csv
+include/end-of-life.csv: include/branches.csv
+ @:
+_static/release-cycle-all.svg: include/branches.csv
+ @:
+_static/release-cycle.svg: include/branches.csv
+ @:
+
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.
.PHONY: Makefile
diff --git a/_static/devguide_overrides.css b/_static/devguide_overrides.css
index 5b6d67b093..625a9dda2d 100644
--- a/_static/devguide_overrides.css
+++ b/_static/devguide_overrides.css
@@ -6,102 +6,6 @@
height: 110px;
}
-/* Release cycle chart */
-
-.release-cycle-chart {
- width: 100%;
-}
-
-.release-cycle-chart .release-cycle-year-line {
- stroke: var(--color-foreground-primary);
- stroke-width: 0.8px;
- opacity: 75%;
-}
-
-.release-cycle-chart .release-cycle-year-text {
- fill: var(--color-foreground-primary);
-}
-
-.release-cycle-chart .release-cycle-today-line {
- stroke: var(--color-brand-primary);
- stroke-width: 1.6px;
-}
-
-.release-cycle-chart .release-cycle-row-shade {
- fill: var(--color-background-item);
- opacity: 50%;
-}
-
-.release-cycle-chart .release-cycle-version-label {
- fill: var(--color-foreground-primary);
-}
-
-.release-cycle-chart .release-cycle-blob {
- stroke-width: 1.6px;
- /* default colours, overridden below for individual statuses */
- fill: var(--color-background-primary);
- stroke: var(--color-foreground-primary);
-}
-
-.release-cycle-chart .release-cycle-blob-label {
- /* white looks good on both light & dark */
- fill: white;
-}
-
-.release-cycle-chart .release-cycle-blob-label.release-cycle-status-security,
-.release-cycle-chart .release-cycle-blob-label.release-cycle-status-bugfix {
- /* but use black to improve contrast for lighter backgrounds */
- fill: black;
-}
-
-.release-cycle-chart .release-cycle-blob-label.release-cycle-status-end-of-life,
-.release-cycle-chart .release-cycle-blob-label.release-cycle-status-prerelease,
-.release-cycle-chart .release-cycle-blob-label.release-cycle-status-feature {
- /* and FG when it's not in a blob */
- fill: var(--color-foreground-primary);
-}
-
-.release-cycle-chart .release-cycle-status-end-of-life {
- --status-bg-color: #DD2200;
- --status-border-color: #FF8888;
-}
-
-.release-cycle-chart .release-cycle-status-security {
- --status-bg-color: #FFDD44;
- --status-border-color: #FF8800;
-}
-
-.release-cycle-chart .release-cycle-status-bugfix {
- --status-bg-color: #00DD22;
- --status-border-color: #008844;
-}
-
-.release-cycle-chart .release-cycle-status-prerelease {
- --status-bg-color: teal;
- --status-border-color: darkgreen;
-}
-
-.release-cycle-chart .release-cycle-status-feature {
- --status-bg-color: #2222EE;
- --status-border-color: #008888;
-}
-
-.release-cycle-chart .release-cycle-blob {
- fill: var(--status-bg-color);
- stroke: transparent;
-}
-
-.release-cycle-chart .release-cycle-blob-full {
- fill: var(--status-bg-color);
- stroke: var(--status-border-color);
-}
-
-.release-cycle-chart .release-cycle-border {
- fill: transparent;
- stroke: var(--status-border-color);
- stroke-width: 1.6px;
-}
-
.good pre {
border-left: 3px solid rgba(74, 182, 93, 1);
}
diff --git a/_templates/page.html b/_templates/page.html
new file mode 100644
index 0000000000..d1c9a515a4
--- /dev/null
+++ b/_templates/page.html
@@ -0,0 +1,8 @@
+{% extends "!page.html" %}
+
+{% block extrahead %}
+{{ super() }}
+{% if not is_deployment_preview %}
+
+{% endif %}
+{% endblock %}
diff --git a/_tools/generate_release_cycle.py b/_tools/generate_release_cycle.py
index dd0a3a7c65..24dfa03e74 100644
--- a/_tools/generate_release_cycle.py
+++ b/_tools/generate_release_cycle.py
@@ -7,6 +7,9 @@
import csv
import datetime as dt
import json
+from functools import cache
+from pathlib import Path
+from urllib.request import urlopen
import jinja2
@@ -37,12 +40,17 @@ def parse_version(ver: str) -> list[int]:
return [int(i) for i in ver["key"].split(".")]
+@cache
+def get_versions() -> dict[str, dict[str, str | int]]:
+ with urlopen("https://peps.python.org/api/release-cycle.json") as in_file:
+ return json.loads(in_file.read().decode("utf-8"))
+
+
class Versions:
"""For converting JSON to CSV and SVG."""
def __init__(self, *, limit_to_active=False, special_py27=False) -> None:
- with open("include/release-cycle.json", encoding="UTF-8") as in_file:
- self.versions = json.load(in_file)
+ self.versions = get_versions()
# Generate a few additional fields
for key, version in self.versions.items():
@@ -197,11 +205,13 @@ def main() -> None:
versions = Versions()
assert len(versions.versions) > 10
+ Path("include").mkdir(exist_ok=True)
+
versions.write_csv()
- versions.write_svg(args.today, "include/release-cycle-all.svg")
+ versions.write_svg(args.today, "_static/release-cycle-all.svg")
versions = Versions(limit_to_active=True, special_py27=True)
- versions.write_svg(args.today, "include/release-cycle.svg")
+ versions.write_svg(args.today, "_static/release-cycle.svg")
if __name__ == "__main__":
diff --git a/_tools/release_cycle_template.svg.jinja b/_tools/release_cycle_template.svg.jinja
index d3d5866a06..ffc54919e7 100644
--- a/_tools/release_cycle_template.svg.jinja
+++ b/_tools/release_cycle_template.svg.jinja
@@ -4,6 +4,110 @@
class="release-cycle-chart"
viewBox="0 0 {{ diagram_width }} {{ diagram_height }}"
>
+
@@ -11,9 +115,16 @@
+
+
{% for version in versions %}
{% set y = version.y * line_height %}
-
{% if version.y % 2 %}
{% for version in versions %}
-
+
{% set top_y = version.y * line_height - 1 * SCALE %}
{% set height = 1.25 * SCALE %}
@@ -82,8 +193,6 @@
{% set end_x = date_to_x(version.end_of_life_date) %}
{% set radius = 0.25 * SCALE %}
- {% set small_text_y = version.y * line_height - 0.1 * SCALE %}
-
+
+
+ {% for version in versions %}
+
+
+ {% set start_x = date_to_x(version.first_release_date) %}
+ {% set end_x = date_to_x(version.end_of_life_date) %}
+ {% set middle_x = ([end_x, date_to_x(version.start_security_date)]|min) %}
+ {% set small_text_y = version.y * line_height - 0.1 * SCALE %}
-
- {{ version.status }}
-
+ {% for cls in ('text-outline', 'text-main') %}
+
+ {{ version.status }}
+
+ {% endfor %}
{% endfor %}
-
-
-
diff --git a/conf.py b/conf.py
index 0f6a820d88..1d88937227 100644
--- a/conf.py
+++ b/conf.py
@@ -1,6 +1,9 @@
import json
+import os
+from urllib.request import urlopen
extensions = [
+ 'linklint.ext',
'notfound.extension',
'sphinx.ext.extlinks',
'sphinx.ext.intersphinx',
@@ -36,6 +39,7 @@
"source_repository": "https://github.com/python/devguide",
"source_branch": "main",
}
+templates_path = ['_templates']
html_static_path = ['_static']
html_css_files = [
'devguide_overrides.css',
@@ -49,6 +53,14 @@
# Set to '' to prevent appending "documentation" to the site title
html_title = ""
+# Deployment preview information
+# (See .readthedocs.yaml and https://docs.readthedocs.io/en/stable/reference/environment-variables.html)
+is_deployment_preview = os.getenv("READTHEDOCS_VERSION_TYPE") == "external"
+
+html_context = {
+ "is_deployment_preview": is_deployment_preview,
+}
+
linkcheck_allowed_redirects = {
# Edit page
r"https://docs.google.com/document/d/.*/": r"https://docs.google.com/document/d/.*/edit", # noqa: E501
@@ -149,10 +161,14 @@
"pullrequest.rst": "getting-started/pull-request-lifecycle.rst",
"setup.rst": "getting-started/setup-building.rst",
# CPython Internals
- "compiler.rst": "internals/compiler.rst",
- "exploring.rst": "internals/exploring.rst",
- "garbage_collector.rst": "internals/garbage-collector.rst",
- "parser.rst": "internals/parser.rst",
+ "compiler.rst": "internals.rst",
+ "exploring.rst": "internals.rst",
+ "garbage_collector.rst": "internals.rst",
+ "parser.rst": "internals.rst",
+ "internals/compiler.rst": "internals.rst",
+ "internals/exploring.rst": "internals.rst",
+ "internals/garbage_collector.rst": "internals.rst",
+ "internals/parser.rst": "internals.rst",
# Testing and Buildbots
"buildbots.rst": "testing/buildbots.rst",
"coverage.rst": "testing/coverage.rst",
@@ -164,6 +180,56 @@
"tracker.rst": "triage/issue-tracker.rst",
"gh-labels.rst": "triage/labels.rst",
"triaging.rst": "triage/triaging.rst",
+ # Contributing guide draft pages
+ "contrib/code/git.rst": "getting-started/git-boot-camp.rst",
+ "contrib/code/pull-request-lifecycle.rst": "getting-started/pull-request-lifecycle.rst",
+ "contrib/code/setup.rst": "getting-started/setup-building.rst",
+ "contrib/code/testing.rst": "testing/index.rst",
+ "contrib/code/developer-workflow.rst": "developer-workflow/index.rst",
+ "contrib/code/index.rst": "index.rst",
+ "contrib/code/development-tools.rst": "development-tools/index.rst",
+ "contrib/doc/devguide.rst": "documentation/devguide.rst",
+ "contrib/doc/help-documenting.rst": "documentation/help-documenting.rst",
+ "contrib/doc/markup.rst": "documentation/markup.rst",
+ "contrib/doc/pull-request-lifecycle.rst": "getting-started/pull-request-lifecycle.rst",
+ "contrib/doc/start-documenting.rst": "documentation/start-documenting.rst",
+ "contrib/doc/style-guide.rst": "documentation/style-guide.rst",
+ "contrib/doc/translating.rst": "documentation/translations/index.rst",
+ "contrib/doc/index.rst": "documentation/index.rst",
+ "contrib/intro/index.rst": "index.rst",
+ "contrib/project/channels.rst": "developer-workflow/communication-channels.rst",
+ "contrib/project/conduct.rst": "index.rst",
+ "contrib/project/github.rst": "index.rst",
+ "contrib/project/governance.rst": "index.rst",
+ "contrib/project/roles.rst": "index.rst",
+ "contrib/project/generative-ai.rst": "getting-started/generative-ai.rst",
+ "contrib/project/outreach.rst": "index.rst",
+ "contrib/project/directory-structure.rst": "getting-started/setup-building.rst",
+ "contrib/project/index.rst": "index.rst",
+ "contrib/security.rst": "index.rst",
+ "contrib/triage/issue-tracker.rst": "triage/issue-tracker.rst",
+ "contrib/triage/labels.rst": "triage/labels.rst",
+ "contrib/triage/reviewing.rst": "triage/triaging.rst",
+ "contrib/triage/triage-team.rst": "triage/triage-team.rst",
+ "contrib/triage/triaging.rst": "triage/triaging.rst",
+ "contrib/triage/index.rst": "triage/index.rst",
+ "contrib/user-success.rst": "index.rst",
+ "contrib/core-team/committing.rst": "core-team/committing.rst",
+ "contrib/core-team/experts.rst": "core-team/experts.rst",
+ "contrib/core-team/index.rst": "core-team/index.rst",
+ "contrib/core-team/join-team.rst": "core-team/join-team.rst",
+ "contrib/core-team/motivations.rst": "core-team/motivations.rst",
+ "contrib/core-team/responsibilities.rst": "core-team/responsibilities.rst",
+ "contrib/core-team/team-log.rst": "core-team/team-log.rst",
+ "contrib/workflows/codespaces.rst": "getting-started/setup-building.rst",
+ "contrib/workflows/compile.rst": "getting-started/setup-building.rst",
+ "contrib/workflows/get-source.rst": "getting-started/setup-building.rst",
+ "contrib/workflows/index.rst": "getting-started/setup-building.rst",
+ "contrib/workflows/install-dependencies.rst": "getting-started/setup-building.rst",
+ "contrib/workflows/install-git.rst": "getting-started/setup-building.rst",
+ "contrib/workflows/regenerate.rst": "getting-started/setup-building.rst",
+ "contrib/workflows/troubleshooting.rst": "getting-started/setup-building.rst",
+ "contrib/index.rst": "index.rst",
}
intersphinx_mapping = {
@@ -178,8 +244,8 @@
# Dynamically expose the Python version associated with the "main" branch.
# Exactly one entry in ``release-cycle.json`` should have ``"branch": "main"``.
-with open("include/release-cycle.json", encoding="UTF-8") as _f:
- _cycle = json.load(_f)
+with urlopen("https://peps.python.org/api/release-cycle.json") as _f:
+ _cycle = json.loads(_f.read().decode("utf-8"))
_main_version = next(
version for version, data in _cycle.items() if data.get("branch") == "main"
@@ -187,21 +253,6 @@
# prolog and epilogs
rst_prolog = f"""
-.. |draft| replace::
- This is part of a **Draft** of the Python Contributor's Guide.
- Text in square brackets are notes about content to fill in.
- Currently, the devguide and this new Contributor's Guide co-exist in the
- repo. We are using Sphinx include directives to demonstrate the re-organization.
- The final Contributor's Guide will replace the devguide with content in only one
- place.
- We welcome help with this!
-
-.. |purpose| replace::
- The :ref:`contrib-plan` page has more details about the current state of this draft
- and **how you can help**. See more info about the Contributor Guide in the
- discussion forum: `Refactoring the DevGuide`_.
-
-.. _Refactoring the DevGuide: https://discuss.python.org/t/refactoring-the-devguide-into-a-contribution-guide/63409
.. |main_version| replace:: {_main_version}
diff --git a/contrib/code/developer-workflow.rst b/contrib/code/developer-workflow.rst
deleted file mode 100644
index 416ca2c022..0000000000
--- a/contrib/code/developer-workflow.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-====================
-Development workflow
-====================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-[This is the existing :ref:`dev-workflow` page from the devguide]
-
-.. toctree::
- :maxdepth: 5
-
- ../../developer-workflow/communication-channels
- ../../developer-workflow/development-cycle
- ../../developer-workflow/stdlib
- ../../developer-workflow/extension-modules
- ../../developer-workflow/c-api
- ../../developer-workflow/lang-changes
- ../../developer-workflow/grammar
- ../../developer-workflow/porting
- ../../developer-workflow/sbom
- ../../developer-workflow/psrt
diff --git a/contrib/code/development-tools.rst b/contrib/code/development-tools.rst
deleted file mode 100644
index 769bba2b06..0000000000
--- a/contrib/code/development-tools.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-=================
-Development tools
-=================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-[This is the existing :ref:`development-tools` page from the devguide.]
-
-.. toctree::
- :maxdepth: 5
-
- ../../development-tools/clinic/index
- ../../development-tools/gdb
- ../../development-tools/clang
- ../../development-tools/warnings
diff --git a/contrib/code/git.rst b/contrib/code/git.rst
deleted file mode 100644
index 7c7aaa57b1..0000000000
--- a/contrib/code/git.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-========
-Git tips
-========
-
-.. important::
-
- |draft|
-
- |purpose|
-
-[More git help for advanced things needed by code contributors.]
diff --git a/contrib/code/index.rst b/contrib/code/index.rst
deleted file mode 100644
index 7680950663..0000000000
--- a/contrib/code/index.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-.. _c_code:
-
-==================
-Code contributions
-==================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-[The main page for code contributors.]
-
-[We'll include code-focused content from the :ref:`main devguide page `: Quick
-reference, Quick links, Proposing changes, and so on.]
-
-[The existing :ref:`internals` section of the devguide will be fully
-migrated into the Python repo.]
-
-
-.. toctree::
- :maxdepth: 5
-
- setup
- git
- pull-request-lifecycle
- developer-workflow
- testing
- development-tools
diff --git a/contrib/code/pull-request-lifecycle.rst b/contrib/code/pull-request-lifecycle.rst
deleted file mode 100644
index 30c0fd5903..0000000000
--- a/contrib/code/pull-request-lifecycle.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-.. _code-pull-request-lifecycle:
-
-======================
-Pull request lifecycle
-======================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[Details of pull requests for code contributions. The existing
-:ref:`pull-request-lifecycle` page is long and includes many details.
-Some only apply to code contributions, but many are common to all
-contributions. Should we keep a common page, with extra steps here, or
-should this page have all of the details even if they are duplicated
-elsewhere?]
-
-[See :ref:`docs-pull-request-lifecycle` for the documentation half of this conundrum.]
diff --git a/contrib/code/setup.rst b/contrib/code/setup.rst
deleted file mode 100644
index 2d14bb0d91..0000000000
--- a/contrib/code/setup.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-==================
-Setup and building
-==================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-[More setup and build instructions specifically for code contributors, building
-on the basics from the :ref:`Getting Started ` section.]
diff --git a/contrib/code/testing.rst b/contrib/code/testing.rst
deleted file mode 100644
index 575d1477a4..0000000000
--- a/contrib/code/testing.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-=====================
-Testing and buildbots
-=====================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-[This is the existing :ref:`testing` page from the devguide.]
-
-.. toctree::
- :maxdepth: 5
-
- ../../testing/run-write-tests
- ../../testing/silence-warnings
- ../../testing/coverage
- ../../testing/buildbots
- ../../testing/new-buildbot-worker
diff --git a/contrib/contrib-plan.rst b/contrib/contrib-plan.rst
deleted file mode 100644
index 65e386e2b9..0000000000
--- a/contrib/contrib-plan.rst
+++ /dev/null
@@ -1,47 +0,0 @@
-.. _contrib-plan:
-
-==================================
-[Plan for the Contributor's Guide]
-==================================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-We are in the process of updating and refactoring the devguide to be a
-Contributor's Guide. It will highlight the different kinds of contribution
-possible, and how to succeed at each kind.
-
-Currently, the Contibutor's Guide is a draft in this new last section of the
-devguide. We welcome feedback, but please understand that some of the current
-content is moving or skeletal.
-
-Repo structure
-==============
-
-While the reorganization is happening, we are keeping the old devguide as it
-is. The new Contributor's Guide is represented in this last section, but will
-eventually be the only content in the guide. To avoid copying content, we're
-using Sphinx include directives to display existing devguide content in its new
-Contributor's Guide location. That is not how the eventual Guide will be
-built. Once we are ready to make the Contributor's Guide real, we will
-rearrange content into its new location.
-
-How to help
-===========
-
-To help, you can:
-
-- `Write an issue`_ detailing a change you'd like to see here.
-- `Make a pull request`_ in this repo to add content.
-- Join us in the `Python Docs Discord`_ to collaborate with other docs-minded
- community members.
-- Get in touch with the `Docs Editorial Board`_ to discuss larger documentation
- concerns.
-
-.. _Write an issue: https://github.com/python/devguide/issues
-.. _Make a pull request: https://github.com/python/devguide/pulls
-.. _Python Docs Discord: https://discord.gg/qcfPbnM2zH
-.. _Docs Editorial Board: https://python.github.io/editorial-board/
diff --git a/contrib/core-team/committing.rst b/contrib/core-team/committing.rst
deleted file mode 100644
index 5b639cd5a0..0000000000
--- a/contrib/core-team/committing.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing core developers :ref:`committing` page from the devguide. We'll
-adjust "core developer" to "core team" where appropriate.]
-
-.. include:: ../../core-team/committing.rst
diff --git a/contrib/core-team/experts.rst b/contrib/core-team/experts.rst
deleted file mode 100644
index aa16f10bd9..0000000000
--- a/contrib/core-team/experts.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing core team :ref:`experts` page from the devguide.]
-
-.. include:: ../../core-team/experts.rst
diff --git a/contrib/core-team/index.rst b/contrib/core-team/index.rst
deleted file mode 100644
index 2ca21344b0..0000000000
--- a/contrib/core-team/index.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-.. _c_core-team:
-
-=========
-Core team
-=========
-
-[This is mostly re-organized from the :ref:`core-team` section of the devguide]
-
-.. toctree::
- :maxdepth: 5
-
- responsibilities
- committing
- experts
- team-log
- motivations
- join-team
diff --git a/contrib/core-team/join-team.rst b/contrib/core-team/join-team.rst
deleted file mode 100644
index 932216f7c6..0000000000
--- a/contrib/core-team/join-team.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing core team :ref:`join-core-team` page from the devguide.]
-
-.. include:: ../../core-team/join-team.rst
diff --git a/contrib/core-team/motivations.rst b/contrib/core-team/motivations.rst
deleted file mode 100644
index 38ba310236..0000000000
--- a/contrib/core-team/motivations.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing core team :ref:`motivations` page from the devguide.]
-
-.. include:: ../../core-team/motivations.rst
diff --git a/contrib/core-team/responsibilities.rst b/contrib/core-team/responsibilities.rst
deleted file mode 100644
index d6902bd780..0000000000
--- a/contrib/core-team/responsibilities.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing core team :ref:`responsibilities` page from the devguide.]
-
-.. include:: ../../core-team/responsibilities.rst
diff --git a/contrib/core-team/team-log.rst b/contrib/core-team/team-log.rst
deleted file mode 100644
index ecfe856a41..0000000000
--- a/contrib/core-team/team-log.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing core team :ref:`team-log` page from the devguide.]
-
-.. include:: ../../core-team/team-log.rst
diff --git a/contrib/doc/devguide.rst b/contrib/doc/devguide.rst
deleted file mode 100644
index 2c83e52003..0000000000
--- a/contrib/doc/devguide.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-==================================
-Helping with the Developer's Guide
-==================================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing :ref:`devguide` page from the devguide.]
diff --git a/contrib/doc/help-documenting.rst b/contrib/doc/help-documenting.rst
deleted file mode 100644
index befb4b2461..0000000000
--- a/contrib/doc/help-documenting.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-==========================
-Helping with documentation
-==========================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing :ref:`help-documenting` page from the devguide.]
diff --git a/contrib/doc/index.rst b/contrib/doc/index.rst
deleted file mode 100644
index dc8ec93074..0000000000
--- a/contrib/doc/index.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-.. _c_docs:
-
-===========================
-Documentation contributions
-===========================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[The main page for documentation contributors.]
-
-[We'll include docs-focused content from the :ref:`main devguide page `: Quick
-reference, Quick links, and so on.]
-
-
-.. toctree::
- :maxdepth: 5
-
- start-documenting
- help-documenting
- style-guide
- markup
- pull-request-lifecycle
- translating
- devguide
diff --git a/contrib/doc/markup.rst b/contrib/doc/markup.rst
deleted file mode 100644
index 96b9faad5e..0000000000
--- a/contrib/doc/markup.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-=======================
-reStructuredText markup
-=======================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing :ref:`markup` page from the devguide.]
diff --git a/contrib/doc/pull-request-lifecycle.rst b/contrib/doc/pull-request-lifecycle.rst
deleted file mode 100644
index a62e637283..0000000000
--- a/contrib/doc/pull-request-lifecycle.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-.. _docs-pull-request-lifecycle:
-
-======================
-Pull request lifecycle
-======================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[Details of pull requests for documentation contributions. The existing
-:ref:`pull-request-lifecycle` page is long and includes many details.
-Some only apply to code contributions, but many are common to all
-contributions. Should we keep a common page, with documentation tweaks here, or
-should this page have only the documentation details even if they are duplicated
-elsewhere?]
-
-[See :ref:`code-pull-request-lifecycle` for the code half of this conundrum.]
diff --git a/contrib/doc/start-documenting.rst b/contrib/doc/start-documenting.rst
deleted file mode 100644
index c5cf96161b..0000000000
--- a/contrib/doc/start-documenting.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-===============
-Getting started
-===============
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing documentation :ref:`start-documenting` page from the devguide.]
diff --git a/contrib/doc/style-guide.rst b/contrib/doc/style-guide.rst
deleted file mode 100644
index 87762f3e03..0000000000
--- a/contrib/doc/style-guide.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-===========
-Style guide
-===========
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing documentation :ref:`style-guide` page from the devguide.]
diff --git a/contrib/doc/translating.rst b/contrib/doc/translating.rst
deleted file mode 100644
index baface2f0d..0000000000
--- a/contrib/doc/translating.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-===========
-Translating
-===========
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing :ref:`translating` page from the devguide.]
diff --git a/contrib/index.rst b/contrib/index.rst
deleted file mode 100644
index e519c7dab4..0000000000
--- a/contrib/index.rst
+++ /dev/null
@@ -1,119 +0,0 @@
-.. _c_root:
-
-==================================
-Python Contributor's Guide (draft)
-==================================
-
-.. raw:: html
-
-
-
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[Open question: how to divide content between this Introduction and the
-:ref:`introduction `?]
-
-This guide is a comprehensive resource for :ref:`contributing `
-to Python_ -- for both new and experienced contributors. It is :ref:`maintained
-` by the same community that maintains Python. We welcome your
-contributions to Python!
-
-We encourage everyone to contribute to Python. This guide should have
-everything you need to get started and be productive. If you still have
-questions after reviewing the material in this guide, the `Core Python
-Mentorship`_ group is available to help you through the process.
-
-There are a number of ways to contribute including code, documentation, and
-triaging issues. We've organized this guide to provide specifics based on the
-type of activity you'll be engaged in.
-
-
-Using this guide
-================
-
-We recommend reading this guide as needed. You can stop where you feel
-comfortable and begin contributing immediately without reading and
-understanding everything. If you do choose to skip around this guide, be aware
-that it is written assuming preceding sections have been read so you may need
-to backtrack to fill in missing concepts and terminology.
-
-No matter what kind of contribution you'll be making, you should start with
-these common sections:
-
-* :ref:`c_intro`
-* :ref:`c_project`
-
-Then choose a path based on your type of activity:
-
-*[The original table on the devguide home had a fourth column for Core
-Developers. That made the table wider and more confusing. I don't think core
-team members need a quick intro path since they will have been through the
-devguide before.]*
-
-*[I haven't adjusted the links in the table yet other than to add a link to the
-major section at the top of each column.]*
-
-.. list-table::
- :widths: 10 10 10
- :header-rows: 1
-
- * - :ref:`Documentation `
- - :ref:`Code `
- - :ref:`Triaging `
- * -
- * :ref:`docquality`
- * :ref:`documenting`
- * :ref:`style-guide`
- * :ref:`rst-primer`
- * :ref:`translating`
- * :ref:`devguide`
- -
- * :ref:`setup`
- * :ref:`help`
- * :ref:`pullrequest`
- * :ref:`runtests`
- * :ref:`fixingissues`
- * :ref:`communication`
- * :ref:`gitbootcamp`
- * :ref:`devcycle`
- -
- * :ref:`tracker`
- * :ref:`triaging`
- * :ref:`helptriage`
- * :ref:`experts`
- * :ref:`labels`
- * :ref:`gh-faq`
- * :ref:`triage-team`
-
-Core team members will find guidance in the :ref:`c_core-team` section.
-
-Contents
-========
-
-.. toctree::
- :maxdepth: 3
-
- contrib-plan
- intro/index
- project/index
- triage/index
- doc/index
- code/index
- core-team/index
- user-success
- security
- workflows/index
-
-
-.. _Python: https://www.python.org/
-.. _Core Python Mentorship: https://www.python.org/dev/core-mentorship/
diff --git a/contrib/intro/index.rst b/contrib/intro/index.rst
deleted file mode 100644
index c5ba303dfd..0000000000
--- a/contrib/intro/index.rst
+++ /dev/null
@@ -1,53 +0,0 @@
-.. _c_intro:
-
-============
-Introduction
-============
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-
-[Open question: how to divide content between this Introduction and the
-:ref:`home page `?]
-
-Welcome!
-
-New to open source?
-===================
-
-Python is an open source project, with culture and techniques from the broader
-open source world. You might find it helpful to read about open source in
-general. A number of individuals from the Python community have contributed to
-a series of excellent guides at `Open Source Guides
-`_.
-
-Anyone will find the following guides useful:
-
-* `How to Contribute to Open Source `_
-* `Building Welcoming Communities `_
-
-
-Healthy collaboration
-=====================
-
-[Importance of healthy inclusive collaboration]
-
-[While code is a large part of the project's success, project management, documentation, governance, sprint outreach, etc. matter.]
-
-[We respect the individual skills people bring to the project and strive to create and maintain a culture of inclusion.]
-
-About this guide
-================
-
-Types of contribution
-=====================
-
-[Pathways for contributors]
-
-Helping with this guide
-=======================
diff --git a/contrib/project/channels.rst b/contrib/project/channels.rst
deleted file mode 100644
index 711dbe5879..0000000000
--- a/contrib/project/channels.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-======================
-Communication channels
-======================
-
-* Repos
-* Discourse
-* Discord
-* Mailing lists (deprioritize)
-* Where to get help
diff --git a/contrib/project/conduct.rst b/contrib/project/conduct.rst
deleted file mode 100644
index 37fe3bbfa7..0000000000
--- a/contrib/project/conduct.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-===============
-Code of Conduct
-===============
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[Brief summary of the code of conduct, with links to official source.]
-
-* Standard for communication
-* How to report
-* Enforcement details
diff --git a/contrib/project/directory-structure.rst b/contrib/project/directory-structure.rst
deleted file mode 100644
index 0cebb25f7f..0000000000
--- a/contrib/project/directory-structure.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-.. _c_directory_structure:
-
-===================
-Directory structure
-===================
-
-[This is the :ref:`build_directory_structure` section from the devguide.]
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_directory_structure_start
- :end-before: c_directory_structure_end
diff --git a/contrib/project/generative-ai.rst b/contrib/project/generative-ai.rst
deleted file mode 100644
index 6cb5b62ffc..0000000000
--- a/contrib/project/generative-ai.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[This is the existing :ref:`generative-ai` page from the devguide.]
-
-.. include:: ../../getting-started/generative-ai.rst
diff --git a/contrib/project/github.rst b/contrib/project/github.rst
deleted file mode 100644
index fe45c6b8b1..0000000000
--- a/contrib/project/github.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-======
-GitHub
-======
-
-[Where are the actual artifacts?]
-
-* Main CPython repos
-* Core workflow repos
-* Infrastructure repos
diff --git a/contrib/project/governance.rst b/contrib/project/governance.rst
deleted file mode 100644
index a4bc66ff1b..0000000000
--- a/contrib/project/governance.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-==========
-Governance
-==========
-
-[How decisions are made, who is involved, how to participate.]
-
-Steering Council
-================
-
-Documentation Editorial Board
-=============================
-
-Typing Council
-==============
-
-
-Others?
-=======
diff --git a/contrib/project/index.rst b/contrib/project/index.rst
deleted file mode 100644
index 9d3c89b9a9..0000000000
--- a/contrib/project/index.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-.. _c_project:
-
-===================
-The CPython project
-===================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[Give the reader an understanding of the project as a whole. What are the
-moving parts, who is involved, how do they interact?]
-
-* Structure
-
-.. toctree::
- :maxdepth: 5
-
- conduct
- roles
- governance
- generative-ai.rst
- github
- directory-structure.rst
- channels
- outreach
diff --git a/contrib/project/outreach.rst b/contrib/project/outreach.rst
deleted file mode 100644
index d43aa8e9de..0000000000
--- a/contrib/project/outreach.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-========
-Outreach
-========
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-* Sprints
diff --git a/contrib/project/roles.rst b/contrib/project/roles.rst
deleted file mode 100644
index 8336fe4651..0000000000
--- a/contrib/project/roles.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-=====
-Roles
-=====
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-[Quick overview of the roles people play. Core team has its own section.]
-
-* Core team
-* Triager
-* Contributors
- * types of contributions
diff --git a/contrib/security.rst b/contrib/security.rst
deleted file mode 100644
index db40b4a167..0000000000
--- a/contrib/security.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-=========================================
-Security and infrastructure contributions
-=========================================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-* Security
-* Infrastructure
-* Core workflow
diff --git a/contrib/triage/index.rst b/contrib/triage/index.rst
deleted file mode 100644
index 0a547d9d77..0000000000
--- a/contrib/triage/index.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. _c_triage:
-
-===================
-Issues and triaging
-===================
-
-.. toctree::
- :maxdepth: 5
-
- issue-tracker
- triaging
- labels
- reviewing
- triage-team
diff --git a/contrib/triage/issue-tracker.rst b/contrib/triage/issue-tracker.rst
deleted file mode 100644
index a5777bc81d..0000000000
--- a/contrib/triage/issue-tracker.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-[This is the existing :ref:`issue-tracker` page from the devguide]
-
-.. include:: ../../triage/issue-tracker.rst
diff --git a/contrib/triage/labels.rst b/contrib/triage/labels.rst
deleted file mode 100644
index c364817333..0000000000
--- a/contrib/triage/labels.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-[This is the existing :ref:`labels` page from the devguide]
-
-.. include:: ../../triage/labels.rst
diff --git a/contrib/triage/reviewing.rst b/contrib/triage/reviewing.rst
deleted file mode 100644
index 060f6b78dd..0000000000
--- a/contrib/triage/reviewing.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-
-=========
-Reviewing
-=========
-
-* How? Etiquette?
-* How to request a review?
diff --git a/contrib/triage/triage-team.rst b/contrib/triage/triage-team.rst
deleted file mode 100644
index a9b59056a9..0000000000
--- a/contrib/triage/triage-team.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-[This is the existing :ref:`triage-team` page from the devguide]
-
-.. include:: ../../triage/triage-team.rst
diff --git a/contrib/triage/triaging.rst b/contrib/triage/triaging.rst
deleted file mode 100644
index 22e1ccc657..0000000000
--- a/contrib/triage/triaging.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-[This is the existing :ref:`triaging` page from the devguide]
-
-.. include:: ../../triage/triaging.rst
diff --git a/contrib/user-success.rst b/contrib/user-success.rst
deleted file mode 100644
index 2a9ef5d4e5..0000000000
--- a/contrib/user-success.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-=======================================
-Accessibility, design, and user success
-=======================================
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-* Accessibility
-* Design
-* User success
diff --git a/contrib/workflows/codespaces.rst b/contrib/workflows/codespaces.rst
deleted file mode 100644
index eb97ef7c2a..0000000000
--- a/contrib/workflows/codespaces.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-.. _c_using_codespaces:
-
-=======================
-Using GitHub Codespaces
-=======================
-
-[This is the :ref:`using-codespaces` section from the devguide.]
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_codespaces_start
- :end-before: c_codespaces_end
diff --git a/contrib/workflows/compile.rst b/contrib/workflows/compile.rst
deleted file mode 100644
index 18157b717e..0000000000
--- a/contrib/workflows/compile.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-.. _c_compiling:
-
-=================
-Compile and build
-=================
-
-.. note::
- [This is the :ref:`compiling` section from the devguide. I think this page
- is too long and could be split by build target, but we can leave that for a
- later time.]
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_compile_and_build_start
- :end-before: c_compile_and_build_end
-
-.. include:: ../../links.rst
diff --git a/contrib/workflows/get-source.rst b/contrib/workflows/get-source.rst
deleted file mode 100644
index ed56fe4e12..0000000000
--- a/contrib/workflows/get-source.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-.. _c_checkout:
-
-===================
-Get the source code
-===================
-
-.. note::
- [This is the :ref:`checkout` section from the devguide. We might need to edit
- it to clarify that some steps are only needed for code contribution.]
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_get_source_code_start
- :end-before: c_get_source_code_end
diff --git a/contrib/workflows/index.rst b/contrib/workflows/index.rst
deleted file mode 100644
index 2c6ccf2bc9..0000000000
--- a/contrib/workflows/index.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-.. _c_workflows:
-
-=========
-Workflows
-=========
-
-.. important::
-
- |draft|
-
- |purpose|
-
-
-This section contains details of workflows needed for all kinds of
-contribution.
-
-.. toctree::
-
- install-git.rst
- get-source.rst
- install-dependencies.rst
- compile.rst
- regenerate.rst
- troubleshooting.rst
- codespaces.rst
diff --git a/contrib/workflows/install-dependencies.rst b/contrib/workflows/install-dependencies.rst
deleted file mode 100644
index 9a511c6da2..0000000000
--- a/contrib/workflows/install-dependencies.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-.. _c_build-dependencies:
-
-====================
-Install Dependencies
-====================
-
-[This is the :ref:`build-dependencies` section from the devguide.]
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_install_dependencies_start
- :end-before: c_install_dependencies_end
diff --git a/contrib/workflows/install-git.rst b/contrib/workflows/install-git.rst
deleted file mode 100644
index e3d738b2ac..0000000000
--- a/contrib/workflows/install-git.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-.. _c_vcsetup:
-
-===========
-Install Git
-===========
-
-[This is the :ref:`vcsetup` section from the devguide.]
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_install_git_start
- :end-before: c_install_git_end
diff --git a/contrib/workflows/regenerate.rst b/contrib/workflows/regenerate.rst
deleted file mode 100644
index b5bca7dca7..0000000000
--- a/contrib/workflows/regenerate.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-.. _c_regenerating:
-
-===============================
-Regenerating auto-created files
-===============================
-
-.. note::
- [These are two similar sections from the is the :ref:`setup-building` section from the devguide.]
-
-Regenerate ``configure``
-========================
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_regenerate_configure_start
- :end-before: c_regenerate_configure_end
-
-Regenerate the ABI dump
-=======================
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_regenerate_abi_start
- :end-before: c_regenerate_abi_end
diff --git a/contrib/workflows/troubleshooting.rst b/contrib/workflows/troubleshooting.rst
deleted file mode 100644
index 68aa801584..0000000000
--- a/contrib/workflows/troubleshooting.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. important::
-
- |draft|
-
- |purpose|
-
-.. _c_build_troubleshooting:
-
-===========
-Install Git
-===========
-
-[This is the :ref:`build_troubleshooting` section from the devguide.]
-
-.. include:: ../../getting-started/setup-building.rst
- :start-after: c_build_troubleshooting_start
- :end-before: c_build_troubleshooting_end
diff --git a/core-team/committing.rst b/core-team/committing.rst
index 41cf672542..c606df3839 100644
--- a/core-team/committing.rst
+++ b/core-team/committing.rst
@@ -59,11 +59,11 @@ to enter the public source tree. Ask yourself the following questions:
* **Does the pull request pass a check indicating that the submitter has signed the CLA?**
Make sure that the contributor has signed a `Contributor
- Licensing Agreement `_
+ Licensing Agreement `__
(CLA), unless their change has no possible intellectual property
associated with it (for example, fixing a spelling mistake in documentation).
The `Python Software Foundation Contributor License Agreement Management Bot
- `_
+ `__
checks whether the author has signed the CLA, and replies in the PR
if they haven't. For further questions about the CLA
process, write to contributors@python.org.
@@ -73,104 +73,10 @@ to enter the public source tree. Ask yourself the following questions:
significant improvements, or backwards-incompatible changes), then an
entry in the ``What's New in Python`` document (in ``Doc/whatsnew/``) should
be added as well. Changes that affect only documentation generally do not
- require a ``NEWS`` entry. (See the following section for more information.)
-
-.. _news-entry:
-.. _what-s-new-and-news-entries:
-
-Updating NEWS and What's New in Python
---------------------------------------
-
-Changes that require NEWS entries
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Most changes made to the codebase deserve an entry in :cpy-file:`Misc/NEWS.d`,
-except for the following:
-
-* documentation changes
-* test changes
-* strictly internal changes with no user-visible effects
-* changes that already have a ``NEWS`` entry
-* reverts that have not yet been included in any formal release
- (including alpha and beta releases)
-
-For the last two, note the following:
-
-#. **If a change is reverted prior to release**, then the corresponding
- entry is simply removed. Otherwise, a new entry must be added noting
- that the change has been reverted (for example, when a feature is released in
- an alpha and then cut prior to the first beta).
-
-#. **If a change is a fix (or other adjustment) to an earlier unreleased
- change and the original** ``NEWS`` **entry remains valid**, then no additional
- entry is needed.
-
-Changes that require "What's New in Python" entries
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-If a change is particularly interesting for end users (for example, new features,
-significant improvements, or backwards-incompatible changes), add an entry in
-the "What's New in Python" document (in :cpy-file:`Doc/whatsnew/`)
-in addition to the ``NEWS`` entry.
-
-In most cases, it is sufficient to reuse the wording from the ``NEWS`` entry
-in the "What's New in Python" entry.
-
-.. note::
-
- A change that needs an entry in "What's New in Python",
- is very likely not suitable for inclusion in a maintenance release.
-
-How to add a NEWS entry
-^^^^^^^^^^^^^^^^^^^^^^^
-
-``NEWS`` entries go into the ``Misc/NEWS.d`` directory as individual files. The
-``NEWS`` entry can be created by using `blurb-it `_,
-or the :pypi:`blurb` tool and its ``blurb add`` command.
-
-If you are unable to use the tool, then you can create the ``NEWS`` entry file
-manually. The ``Misc/NEWS.d`` directory contains a sub-directory named
-``next``, which contains various sub-directories representing classifications
-for what was affected (for example, ``Misc/NEWS.d/next/Library`` for changes relating
-to the standard library). The file name itself should be in the format
-``.gh-issue-..rst``:
-
-* ```` is today's date joined with a hyphen (``-``) to your current
- local time, in the ``YYYY-MM-DD-hh-mm-ss`` format (for example, ``2017-05-27-16-46-23``).
-* ```` is the issue number the change is for (for example, ``12345``
- for ``gh-issue-12345``).
-* ```` is a unique string to guarantee that the file name is
- unique across branches (for example, ``Yl4gI2``). It is typically six characters
- long, but it can be any length of letters and numbers. Its uniqueness
- can be satisfied by typing random characters on your keyboard.
-
-As a result, a file name can look something like
-``Misc/NEWS.d/next/Library/2017-05-27-16-46-23.gh-issue-12345.Yl4gI2.rst``.
-
-How to write a NEWS entry
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-All ``NEWS`` entries end up being part of the changelog.
-The changelog contains *a lot* of entries,
-and its intended audience is mainly users, not the core team and contributors.
-Take this into consideration when wording your ``NEWS`` entry.
-Describe the user-visible effects of your change succinctly and accurately;
-avoid long technical elaborations, digressions, and do not expect or require
-the reader to have read the actual diff for the change.
-
-The contents of a ``NEWS`` file should be valid reStructuredText. An 80 character
-column width should be used. There is no indentation or leading marker in the
-file (for example, ``-``). There is also no need to start the entry with the issue
-number since it is part of the file name. You can use
-:ref:`inline markups ` too. Here is an example of a ``NEWS``
-entry::
-
- Fix warning message when :func:`os.chdir` fails inside
- :func:`test.support.temp_cwd`. Contributed by Chris Jerdonek.
-
-The inline Sphinx roles like ``:func:`` can be used help readers
-find more information. You can build HTML and verify that the
-link target is appropriate by using :ref:`make html `.
+ require a ``NEWS`` entry.
+
+ .. seealso::
+ :ref:`what-s-new-and-news-entries`
Working with Git_
diff --git a/core-team/core-team.csv b/core-team/core-team.csv
index 8c46254931..48234eff4d 100644
--- a/core-team/core-team.csv
+++ b/core-team/core-team.csv
@@ -1,3 +1,4 @@
+Itamar Oren,itamaro,2026-02-16,,
Emma Smith,emmatyping,2025-07-31,,
Tomas Roun,tomasr8,2025-06-16,,
Peter Bierma,ZeroIntensity,2025-06-16,,
diff --git a/core-team/experts.rst b/core-team/experts.rst
index 2fb37cb3f9..87d3ba4c73 100644
--- a/core-team/experts.rst
+++ b/core-team/experts.rst
@@ -20,12 +20,9 @@ following is added to an issue or pull request, they will be notified
automatically. The :cpy-file:`.github/CODEOWNERS` file is also used to indicate
maintainers that will be automatically added as reviewers to pull requests.
+Names followed by a '*' may be assigned issues involving the module or topic.
Unless a name is followed by a '*', you should never assign an issue to
-that person. Names followed by a '*' may be assigned issues involving the
-module or topic.
-
-Names followed by a '^' indicate old bugs.python.org usernames, for people
-that did not transition to GitHub.
+that person.
The Platform and Interest Area tables list broader fields in which various
people have expertise. These people can also be contacted for help,
@@ -52,204 +49,114 @@ Stdlib
==================== =============================================
Module Maintainers
==================== =============================================
-__future__
__main__ gvanrossum, ncoghlan
-_thread
-abc
annotationlib JelleZijlstra*
argparse savannahostrowski*, serhiy-storchaka*
-array
ast benjaminp, pablogsal, isidentical, JelleZijlstra, eclips4
asyncio 1st1, asvetlov, gvanrossum, graingert, kumaraditya303, willingc
-atexit
-base64
-bdb
-binascii
bisect rhettinger*
-builtins
-calendar
-cmath
-cmd
-code
-codecs malemburg, doerwalter
-codeop
+codecs malemburg
collections rhettinger*
-collections.abc rhettinger*, stutzbach^
-colorsys
+collections.abc rhettinger*
compileall carljm
-compression.bz2
-compression.gzip
-compression.lzma
compression.zlib Yhg1s, gpshead*, emmatyping
compression.zstd emmatyping*
-concurrent.futures pitrou, brianquinlan, gpshead*
+concurrent.futures pitrou, gpshead*
configparser ambv*
contextlib ncoghlan, 1st1
-contextvars
-copy avassalotti, serhiy-storchaka*
-copyreg avassalotti, serhiy-storchaka*
-cProfile
-csv smontanaro (inactive), serhiy-storchaka*
-ctypes theller (inactive), abalkin, amauryfa, meadori
+copy serhiy-storchaka*
+copyreg serhiy-storchaka*
+csv serhiy-storchaka*
curses Yhg1s
dataclasses ericvsmith*, carljm
-datetime abalkin, pganssle
-dbm
+datetime pganssle
decimal facundobatista, rhettinger
-difflib tim-one (inactive)
dis 1st1
-doctest tim-one (inactive)
-email warsaw, bitdancer*, maxking
+email warsaw, bitdancer*
encodings malemburg
ensurepip ncoghlan, dstufft, pradyunsg, pfmoore
-enum eliben*, warsaw, ethanfurman*
+enum warsaw, ethanfurman*
errno Yhg1s
faulthandler vstinner, gpshead, ZeroIntensity*
fcntl Yhg1s
-filecmp
-fileinput
fnmatch serhiy-storchaka*
-fractions
ftplib giampaolo*
functools rhettinger*
gc pitrou, pablogsal, nascheme
getopt serhiy-storchaka*
-getpath FFY00
-getpass
+getpath FFY00*
gettext tomasr8
glob serhiy-storchaka*
-grp
hashlib tiran, gpshead*, picnixz
-heapq rhettinger*, stutzbach^
+heapq rhettinger*
hmac tiran, gpshead*, picnixz
html ezio-melotti*
-http
-idlelib kbkaiser (inactive), terryjreedy*, serwy (inactive),
- taleinat
-imaplib
-importlib brettcannon
+idlelib terryjreedy*, taleinat
+importlib brettcannon, FFY00*
inspect 1st1
-io benjaminp, stutzbach^
-ipaddress pmoody^
+io benjaminp
itertools rhettinger*
-json etrepum (inactive), ezio-melotti, rhettinger,
- serhiy-storchaka*
-keyword
-libmpdec
-linecache
+json ezio-melotti, rhettinger, serhiy-storchaka*
locale malemburg
logging vsajip
-mailbox
-marshal
-math rhettinger, stutzbach^
-mimetypes
+math rhettinger
mmap Yhg1s
-modulefinder theller (inactive), jvr^
-msvcrt
-multiprocessing applio*, pitrou, jnoller^ (inactive), sbt^ (inactive), gpshead*
-netrc
-numbers
-operator
-optparse mitsuhiko, serhiy-storchaka*
-os
+modulefinder FFY00
+multiprocessing pitrou, gpshead*
+optparse serhiy-storchaka*
os.path serhiy-storchaka*
parser pablogsal
pathlib barneygale*
pdb gaogaotiantian
-pickle avassalotti, serhiy-storchaka*
-pickletools avassalotti, serhiy-storchaka*
-pkgutil
+pickle serhiy-storchaka*
+pickletools serhiy-storchaka*
+pkgutil FFY00*
platform malemburg
-plistlib
-poplib
posix larryhastings, gpshead
-pprint freddrake
-profile
-pstats
pty Yhg1s*
-pwd
py_compile carljm
pyclbr isidentical
pydoc AA-Turner, serhiy-storchaka*
queue rhettinger*
-quopri
random rhettinger
re ezio-melotti, serhiy-storchaka*
readline Yhg1s
-reprlib
resource Yhg1s
-rlcompleter
-runpy ncoghlan
-sched
-secrets
-select
-selectors neologix^, giampaolo
-shelve
-shlex
-shutil tarekziade, giampaolo
+runpy ncoghlan, FFY00
+selectors giampaolo
+shutil giampaolo
signal gpshead
-site
-smtplib
+site FFY00*
socket gpshead
-socketserver
-sqlite3 ghaering^, erlend-aasland*
-ssl jackjansen, tiran, dstufft, alex
+sqlite3 erlend-aasland*
+ssl tiran, dstufft, alex
stat tiran
-statistics stevendaprano, rhettinger
-string
-stringprep
-struct meadori
-subprocess astrand^ (inactive), giampaolo, gpshead*
+statistics rhettinger
+subprocess giampaolo, gpshead*
symtable benjaminp
-sys
-sysconfig FFY00
-syslog jafo^*
-tabnanny tim-one (inactive)
-tarfile gustaebel
+sysconfig FFY00*
tempfile serhiy-storchaka*
termios Yhg1s
test ezio-melotti, serhiy-storchaka*
-textwrap
threading pitrou, gpshead
-time abalkin, pganssle
-timeit
-tkinter gpolo^, serhiy-storchaka*
-token
-tokenize meadori
+time pganssle
+tkinter serhiy-storchaka*
tomllib hauntsaninja*
-trace abalkin
traceback iritkatriel
tracemalloc vstinner
tty Yhg1s*
-turtle gregorlingl^, willingc
+turtle willingc
turtledemo terryjreedy*
types 1st1
typing gvanrossum, JelleZijlstra*, AlexWaygood*, carljm, sobolevn*
unicodedata malemburg, ezio-melotti
-unittest ezio-melotti, rbtcollins, gpshead, serhiy-storchaka*
-unittest.mock
+unittest ezio-melotti, gpshead, serhiy-storchaka*
urllib orsenthil
-uuid
-venv vsajip, FFY00
-warnings
-wave
-weakref freddrake, nascheme
-webbrowser
-winreg stutzbach^
-winsound
-wsgiref pjenvey
-xml.dom
-xml.dom.minidom
-xml.dom.pulldom
-xml.etree eliben*, scoder
-xml.parsers.expat
-xml.sax
-xml.sax.handler
-xml.sax.saxutils
-xml.sax.xmlreader
-xmlrpc
+venv vsajip, FFY00*
+weakref nascheme
+xml.etree scoder
zipapp pfmoore
-zipfile alanmcintyre^, serhiy-storchaka, Yhg1s, gpshead
+zipfile serhiy-storchaka, Yhg1s, gpshead
zipimport Yhg1s*
zoneinfo pganssle
==================== =============================================
@@ -282,18 +189,13 @@ for “their” platform as a third-party project.
=================== ===========
Platform Maintainers
=================== ===========
-AIX edelsohn, ayappanec
+AIX ayappanec
Android mhsmith
-Cygwin jlt63^, stutzbach^
Emscripten hoodmane, pmp-p, rdb, rth, ryanking13
-FreeBSD
-HP-UX
iOS freakboy3742, ned-deily
-JVM/Java frank.wierzbicki^
Linux
macOS ronaldoussoren, ned-deily, freakboy3742
NetBSD1
-OS2/EMX aimacintyre^
Solaris/OpenIndiana jcea, kulikjak
Windows tjguk, zooba, pfmoore
=================== ===========
@@ -303,7 +205,7 @@ Miscellaneous
=============
================== ==========================================================
-Interest Area Maintainers
+Interest area Maintainers
================== ==========================================================
algorithms rhettinger*, serhiy-storchaka
argument clinic larryhastings, AlexWaygood*, erlend-aasland,
@@ -323,48 +225,251 @@ devguide merwok, ezio-melotti, willingc, Mariatta, hugovk,
documentation ezio-melotti, merwok, JulienPalard, willingc, hugovk,
AA-Turner, AlexWaygood*
emoji Mariatta
-extension modules encukou, ncoghlan
-filesystem giampaolo
-frozen modules ericsnowcurrently, gvanrossum, kumaraditya303
+extension modules encukou, ncoghlan, FFY00
+filesystem
+frozen modules ericsnowcurrently, gvanrossum, kumaraditya303, FFY00
f-strings ericvsmith*
GUI
i18n malemburg, merwok, tomasr8
-import machinery brettcannon, ncoghlan, ericsnowcurrently, FFY00
-initialization FFY00
-io benjaminp, stutzbach^, gpshead
+import machinery brettcannon, ncoghlan, ericsnowcurrently, FFY00*
+initialization FFY00*
+io benjaminp, gpshead
JIT brandtbucher*, savannahostrowski*
locale malemburg
-mathematics malemburg, stutzbach^, rhettinger, serhiy-storchaka
+mathematics malemburg, rhettinger, serhiy-storchaka
memory management tim-one, malemburg, Yhg1s, nascheme
memoryview
-networking giampaolo, gpshead
+networking gpshead
object model benjaminp, Yhg1s
-packaging tarekziade, malemburg, alexis^, merwok, dstufft, pfmoore, emmatyping
+packaging malemburg, merwok, dstufft, pfmoore, emmatyping, FFY00
pattern matching brandtbucher*
PEG parser gvanrossum, pablogsal, lysnikolaou
performance vstinner, serhiy-storchaka*, 1st1, rhettinger, markshannon,
brandtbucher, carljm, Fidget-Spinner, AlexWaygood*, nascheme
-pip ncoghlan, dstufft, pfmoore, Marcus.Smith^, pradyunsg
-release management tarekziade, malemburg, benjaminp, warsaw,
- gvanrossum, anthonybaxter^, merwok, ned-deily,
- birkenfeld, JulienPalard, hugovk
-runtime lifecycle ericsnowcurrently, kumaraditya303, zooba, ZeroIntensity, nascheme
+pip ncoghlan, dstufft, pfmoore, pradyunsg
+release management malemburg, benjaminp, warsaw,
+ gvanrossum, merwok, ned-deily,
+ JulienPalard, hugovk
+runtime lifecycle ericsnowcurrently, kumaraditya303, zooba, ZeroIntensity, nascheme, FFY00
str.format ericvsmith*
subinterpreters ericsnowcurrently, kumaraditya303, ZeroIntensity*
symbol table JelleZijlstra, carljm
testing ezio-melotti
test coverage
threads gpshead
-time and dates malemburg, abalkin, pganssle
+time and dates malemburg, pganssle
Unicode malemburg, ezio-melotti, benjaminp
version control merwok, ezio-melotti
================== ==========================================================
+Experts emeritus
+================
+
+Names followed by a '^' indicate old bugs.python.org usernames, for people
+that did not transition to GitHub.
+
+Stdlib
+------
+
+.. list-table::
+
+ * - Module
+ - Expert
+
+ * - codecs
+ - doerwalter
+
+ * - collections.abc
+ - stutzbach^
+
+ * - concurrent.futures
+ - brianquinlan
+
+ * - copy
+ - avassalotti
+
+ * - copyreg
+ - avassalotti
+
+ * - csv
+ - smontanaro
+
+ * - ctypes
+ - theller, abalkin, amauryfa, meadori
+
+ * - datetime
+ - abalkin
+
+ * - difflib
+ - tim-one
+
+ * - doctest
+ - tim-one
+
+ * - email
+ - maxking
+
+ * - enum
+ - eliben
+
+ * - heapq
+ - stutzbach
+
+ * - idlelib
+ - kbkaiser, serwy
+
+ * - io
+ - stutzbach^
+
+ * - ipaddress
+ - pmoody^
+
+ * - json
+ - etrepum
+
+ * - math
+ - stutzbach^
+
+ * - modulefinder
+ - theller, jvr^
+
+ * - multiprocessing
+ - applio, jnoller^, sbt^
+
+ * - optparse
+ - mitsuhiko
+
+ * - pickle
+ - avassalotti
+
+ * - pickletools
+ - avassalotti
+
+ * - pprint
+ - freddrake
+
+ * - selectors
+ - neologix^
+
+ * - shutil
+ - tarekziade
+
+ * - sqlite3
+ - ghaering^
+
+ * - ssl
+ - jackjansen
+
+ * - statistics
+ - stevendaprano
+
+ * - struct
+ - meadori
+
+ * - subprocess
+ - astrand^
+
+ * - syslog
+ - jafo^
+
+ * - tabnanny
+ - tim-one
+
+ * - tarfile
+ - gustaebel
+
+ * - time
+ - abalkin
+
+ * - tkinter
+ - gpolo^
+
+ * - tokenize
+ - meadori
+
+ * - trace
+ - abalkin
+
+ * - turtle
+ - gregorlingl^
+
+ * - unittest
+ - rbtcollins
+
+ * - weakref
+ - freddrake
+
+ * - winreg
+ - stutzbach^
+
+ * - wsgiref
+ - pjenvey
+
+ * - xml.etree
+ - eliben
+
+ * - zipfile
+ - alanmcintyre^
+
+Platforms
+---------
+
+.. list-table::
+
+ * - Platform
+ - Expert
+
+ * - AIX
+ - edelsohn
+
+ * - Cygwin
+ - jlt63^, stutzbach^
+
+ * - JVM/Java
+ - frank.wierzbicki^
+
+ * - OS2/EMX
+ - aimacintyre^
+
+
+Miscellaneous
+-------------
+
+.. list-table::
+
+ * - Interest Area
+ - Expert
+
+ * - filesystem
+ - giampaolo
+
+ * - io
+ - stutzbach^
+
+ * - mathematics
+ - stutzbach^
+
+ * - networking
+ - giampaolo
+
+ * - packaging
+ - tarekziade, alexis^
+
+ * - pip
+ - Marcus.Smith^
+
+ * - release management
+ - tarekziade, anthonybaxter^, birkenfeld
+
+ * - time and dates
+ - abalkin
+
+
Documentation translations
==========================
Translations are within the charter of
-`Editorial Board `_.
+`Editorial Board `__.
For a list of translations and their coordinators, see
:ref:`this table of translations `.
diff --git a/core-team/join-team.rst b/core-team/join-team.rst
index d7996cd424..20ce9e4c98 100644
--- a/core-team/join-team.rst
+++ b/core-team/join-team.rst
@@ -40,14 +40,14 @@ are granted through these steps:
(as per :pep:`13`), the submitter `emails the steering council
`_ with the candidate's email address
requesting that the council either accept or reject the proposed membership. Technically, the
- council may only `veto a positive vote `_.
+ council may only `veto a positive vote `__.
#. Assuming the steering council does not veto the positive vote, a member of the council or its
delegate (approver, usually in practice a :ref:`Developer-in-Residence `) will
email the candidate:
- A request for account details as required by
- `🔒 python/voters `_.
+ `🔒 python/voters `__.
- A reminder about the `Code of Conduct`_ and guidance on reporting issues
to the PSF Conduct WG.
@@ -55,12 +55,12 @@ are granted through these steps:
- Enable the various new privileges.
- Remove the new committer from the triage team, if applicable.
- - Add their details to `🔒 python/voters `_.
+ - Add their details to `🔒 python/voters `__.
- Once the python/voters update is merged, regenerate the public team membership
list at :ref:`developers`.
See "Public list of members" in the ``voters`` README.
- Post an announcement in the `Committers Discourse category
- `_. The past few announcements
+ `__. The past few announcements
were in the form of a separate post on the already open topic with
the poll.
@@ -69,7 +69,7 @@ Getting a python.org email address
Members of the core team can get an email address on the python.org domain.
For more details refer to the `python.org email policy
-`_.
+`__.
Poll template
diff --git a/core-team/memorialization.rst b/core-team/memorialization.rst
index 7ab0fab02b..3d893a3029 100644
--- a/core-team/memorialization.rst
+++ b/core-team/memorialization.rst
@@ -31,11 +31,11 @@ certain content when the legacy contact or family members request it.
GitHub
------
-* The user is removed from the `python/ `_
+* The user is removed from the `python/ `__
organization on GitHub;
-* The user is removed from the `psf/ `_
+* The user is removed from the `psf/ `__
organization on GitHub;
-* The user is removed from the `pypa/ `_
+* The user is removed from the `pypa/ `__
organization on GitHub.
The PSF staff does not follow up with GitHub with regards to GitHub account
@@ -43,7 +43,7 @@ cancellation as this action is reserved for next-of-kin or designated by
the deceased GitHub user to act as an account successor.
The general policy regarding deceased users on GitHub is described on their
-`Deceased User Policy `_
+`Deceased User Policy `__
page.
Repositories in the organization
@@ -51,9 +51,9 @@ Repositories in the organization
* The user's GitHub handle is removed from ``/.github/CODEOWNERS``.
To see all that need action, perform
- `this query `_.
+ `this query `__.
* The user is marked as deceased in the private
- `voters/python-core.toml `_
+ `voters/python-core.toml `__
file with the ``left=`` field set to the day of passing, if known.
discuss.python.org
@@ -80,7 +80,7 @@ a community member close to the deceased.
The general best practice for deceased community members on
Discourse-powered forums is described on their
-`Best practices for deceased community members `_
+`Best practices for deceased community members `__
page.
python.org email account
@@ -116,8 +116,8 @@ python.org admin
devguide.python.org
-------------------
-* The user is marked as deceased in `core-team.csv `_;
-* The user is removed from the `experts index `_.
+* The user is marked as deceased in `core-team.csv `__;
+* The user is removed from the `experts index `__.
bugs.python.org
---------------
@@ -139,16 +139,16 @@ Other PSF-related infrastructure
Discord server to remove the user from the server. The PSF staff
does not follow up with Discord with regards to Discord account
cancellation. The general policy regarding deceased users on Discord
- is available on their `Deceased or Incapacitated Users `_
+ is available on their `Deceased or Incapacitated Users `__
page.
* The user is removed from Salt configuration for the PSF infrastructure
- in `/pillar/base/users `_
+ in `/pillar/base/users `__
that allows SSH access to PSF-controlled servers.
* The user might have ran a buildbot worker. The PSF staff member will
look for that in the
- `buildmaster-config `_
+ `buildmaster-config `__
repository.
PyPI
diff --git a/core-team/motivations.rst b/core-team/motivations.rst
index 6d539b7c3b..d0e5a0cc18 100644
--- a/core-team/motivations.rst
+++ b/core-team/motivations.rst
@@ -97,13 +97,13 @@ participating in the CPython core development process:
.. topic:: Brett Cannon (Canada)
- * Personal site: `snarky.ca `_
+ * Personal site: `snarky.ca `__
* Microsoft (Software Developer)
* Python Software Foundation (Fellow)
.. topic:: Alyssa Coghlan (Australia)
- * Personal site: `Curious Efficiency `_
+ * Personal site: `Curious Efficiency `__
* `Extended bio `__
* Python Software Foundation (Fellow, Packaging Working Group)
* Westpac (Principal Python Engineer)
@@ -123,9 +123,9 @@ participating in the CPython core development process:
.. topic:: Steve Dower (United States/Australia)
* Microsoft (Software Developer)
- * Personal site: `stevedower.id.au `_
- * Speaking: `stevedower.id.au/speaking `_
- * Work blog: `devblogs.microsoft.com/python/ `_
+ * Personal site: `stevedower.id.au `__
+ * Speaking: `stevedower.id.au/speaking `__
+ * Work blog: `devblogs.microsoft.com/python/ `__
* Email address: steve.dower@python.org
Steve started with Python while automating a test harness for medical
@@ -143,25 +143,25 @@ participating in the CPython core development process:
.. topic:: Mariatta (Canada)
- * Personal site: `mariatta.ca `_
- * Works as a `Software Engineer `_
+ * Personal site: `mariatta.ca `__
+ * Works as a `Software Engineer `__
in Vancouver, helps organize `Vancouver PyLadies
- `_ meetup on the side, and
- sometimes `speaks `_
+ `__ meetup on the side, and
+ sometimes `speaks `__
at conferences.
* Email address: mariatta@python.org
- * `Sponsor Mariatta on GitHub `_
- * `Patreon `_
+ * `Sponsor Mariatta on GitHub `__
+ * `Patreon `__
- Support Mariatta by `becoming a sponsor `_,
- sending her a `happiness packet `_,
- or `paypal `_.
+ Support Mariatta by `becoming a sponsor `__,
+ sending her a `happiness packet `__,
+ or `paypal `__.
.. topic:: R. David Murray (United States)
- * Personal site: `bitdance.com `_
+ * Personal site: `bitdance.com `__
* Available for `Python and Internet Services Consulting
- and Python contract programming `_
+ and Python contract programming `__
David has been involved in the Internet since the days when the old IBM
BITNET and the ARPANet got cross connected, and in Python programming since
@@ -177,7 +177,7 @@ participating in the CPython core development process:
David currently does both proprietary and open source development work,
primarily in Python, through the company in which he is a partner, `Murray &
- Walker, Inc `_. He has done contract work
+ Walker, Inc `__. He has done contract work
focused specifically on CPython development both through the PSF (the
kickstart of the email Unicode API development) and directly funded by
interested corporations (additional development work on email funded by
@@ -187,7 +187,7 @@ participating in the CPython core development process:
.. topic:: Antoine Pitrou (France)
- * LinkedIn: ``_ (Senior Software Engineer)
+ * LinkedIn: ``__ (Senior Software Engineer)
* QuantStack
* Python Software Foundation (Fellow)
* Email address: antoine@python.org
@@ -213,7 +213,7 @@ participating in the CPython core development process:
Victor is paid by Red Hat to maintain Python upstream and downstream (RHEL,
CentOS, Fedora & Software collections). See `Victor's contributions to
- Python `_.
+ Python `__.
.. topic:: Kushal Das (India)
@@ -224,21 +224,21 @@ participating in the CPython core development process:
.. topic:: Barry Warsaw (United States)
* NVIDIA, Principal System Software Engineer, Open Source Python Ecosystem
- * Personal site: `barry.warsaw.us `_
- * Blog: `We Fear Change `_
- * `LinkedIn `_
- * `Bluesky `_
+ * Personal site: `barry.warsaw.us `__
+ * Blog: `We Fear Change `__
+ * `LinkedIn `__
+ * `Bluesky `__
* Email address: barry@python.org
* Python Software Foundation (Fellow)
Barry has been working in, with, and on Python since 1994. He attended the
- first Python workshop at `NIST `_ in Gaithersburg,
+ first Python workshop at `NIST `__ in Gaithersburg,
MD in 1994, where he met Guido and several other early Python adopters.
Barry subsequently worked with Guido for 8 years while at `CNRI
- `_. Barry has served as Python's postmaster,
+ `__. Barry has served as Python's postmaster,
webmaster, release manager, Language Summit co-chair, `Jython
- `_ project leader, `GNU Mailman
- `_ project leader, and Python Steering Council
+ `__ project leader, `GNU Mailman
+ `__ project leader, and Python Steering Council
member in 2019, 2020, 2021, 2024, and 2025.
.. topic:: Eric Snow (United States)
@@ -256,13 +256,13 @@ participating in the CPython core development process:
developers on the project for 6 years. After that he started the Python
Tools for Visual Studio project focusing on providing advanced code completion
and debugging features for Python. Today he works on
- `Cinder `_ improving Python
+ `Cinder `__ improving Python
performance for Instagram.
.. topic:: Carol Willing (United States)
* Noteable (VP Engineering)
- * Personal site: `Willing Consulting `_
+ * Personal site: `Willing Consulting `__
* `Extended bio `__
* Project Jupyter (Software Council, Core Team for JupyterHub/Binder)
* Python Software Foundation (Fellow)
diff --git a/core-team/responsibilities.rst b/core-team/responsibilities.rst
index 3b2137d6b0..9f5c62b728 100644
--- a/core-team/responsibilities.rst
+++ b/core-team/responsibilities.rst
@@ -48,12 +48,12 @@ Communication channels and bug notifications
============================================
Mailing lists have generally been replaced by the
-`Discourse forum `_ (``discuss.python.org``).
+`Discourse forum `__ (``discuss.python.org``).
Refer to the :ref:`mailinglists` and :ref:`communication-discourse` sections
for more information.
If you want notification of new issues, you can use the appropriate GitHub notification
-settings for the `python/cpython `_ repository —
+settings for the `python/cpython `__ repository —
follow the link and click on the :guilabel:`Watch` button to set your notification options.
diff --git a/developer-workflow/c-api.rst b/developer-workflow/c-api.rst
index 90c1d12e4e..427d9fd96a 100644
--- a/developer-workflow/c-api.rst
+++ b/developer-workflow/c-api.rst
@@ -38,7 +38,7 @@ While internal API can be changed at any time, it's still good to keep it
stable: other API or other CPython developers may depend on it.
For users, internal API is sometimes the best workaround for a thorny problem
--- though those use cases should be discussed on the
-`C API Discourse category `_
+`C API Discourse category `__
or an issue so we can try to find a supported way to serve them.
@@ -104,7 +104,7 @@ This helps us ensure *newly added* API is consistent and maintainable.
Also check with the C API WG before requiring a C feature not present in C99.
While the *public* docs only promise compatibility with C11, in practice
-we only intruduce C11 features individually as needed.
+we only introduce C11 features individually as needed.
.. _decisions repo: https://github.com/capi-workgroup/decisions/issues
@@ -218,7 +218,7 @@ use this API reliably:
(:samp:`3.{x}.0`, including Alphas and Betas for :samp:`3.{x}.0`).
* Adding a new unstable API *for an existing feature* is allowed even after
Beta feature freeze, up until the first Release Candidate.
- Consensus on the `Core Development Discourse `_
+ Consensus on the `Core Development Discourse `__
is needed in the Beta period.
* Backwards-incompatible changes should make existing C callers fail to compile.
For example, arguments should be added/removed, or a function should be
@@ -387,7 +387,7 @@ Guidelines for adding to the Limited API
details involve:
- The GIL
- - :ref:`Garbage collection `
+ - Garbage collection
- Memory layout of PyObject, lists/tuples and other structures
If following these guidelines would hurt performance, add a fast function
@@ -395,9 +395,8 @@ If following these guidelines would hurt performance, add a fast function
API.
If anything is unclear, or you have a good reason to break the guidelines,
-consider discussing the change at the `capi-sig`_ mailing list.
-
-.. _capi-sig: https://mail.python.org/mailman3/lists/capi-sig.python.org/
+consider discussing the change in the `C API category
+`__ on Discourse.
Adding a new definition to the Limited API
------------------------------------------
diff --git a/developer-workflow/communication-channels.rst b/developer-workflow/communication-channels.rst
index 9b088b350e..78fbf21dff 100644
--- a/developer-workflow/communication-channels.rst
+++ b/developer-workflow/communication-channels.rst
@@ -51,7 +51,7 @@ Mailing lists
.. _python-committers: https://mail.python.org/mailman3/lists/python-committers.python.org/
.. _python-dev: https://mail.python.org/mailman3/lists/python-dev.python.org/
- .. _python-ideas: https://mail.python.org/mailman3/lists/python-ideas.python.org
+ .. _python-ideas: https://mail.python.org/archives/list/python-ideas@python.org/
General Python questions should go to `python-list`_ or `tutor`_
or similar resources, such as `Stack Overflow`_ or the ``#python`` IRC channel
@@ -62,13 +62,12 @@ issue tracker is the place to discuss and work on improvements to the CPython
core development workflow.
A complete list of Python mailing lists can be found at
-https://mail.python.org/mailman/listinfo (older lists, using Mailman2) or
-https://mail.python.org/mailman3/ (newer lists, using Mailman3). Some lists may also
-be mirrored at `GMANE `_ and can be read and posted to in various
+https://mail.python.org/mailman3/. Some lists may also
+be mirrored at `GMANE `__ and can be read and posted to in various
ways, including via web browsers, NNTP newsreaders, and RSS feed readers.
-.. _python-list: https://mail.python.org/mailman/listinfo/python-list
-.. _tutor: https://mail.python.org/mailman/listinfo/tutor
+.. _python-list: https://mail.python.org/mailman3/lists/python-list.python.org/
+.. _tutor: https://mail.python.org/mailman3/lists/tutor.python.org/
.. _Stack Overflow: https://stackoverflow.com/
.. _Libera.Chat: https://libera.chat/
@@ -84,7 +83,7 @@ take place in the open forum categories for `PEPs`_ and `Core Development`_
(these are the Discourse equivalents to the python-dev mailing list).
All categories are open for users to read and post with the exception of
the `Committers`_ category, where posting is restricted to the `CPython
-`_ core team.
+`__ core team.
The Committers category is often used for announcements and notifications.
It is also the designated venue for the core team promotion votes.
@@ -97,8 +96,8 @@ create an account using an email address or GitHub account. You can do so by
clicking the :guilabel:`Sign Up` button on the top right hand corner of the
`Discourse`_ main page.
-The Python Discourse `Quick Start `_
-compiled by `Carol Willing `_ gives you
+The Python Discourse `Quick Start `__
+compiled by `Carol Willing `__ gives you
a quick overview on how to kick off Python Discourse.
We recommend new users getting familiarised with the forum by going through Discobot tutorials.
@@ -114,13 +113,13 @@ Greetings!" received under Notifications and Messages in your user account.
* Select either Notifications or Messages.
* Open the "Greetings!" message sent by Discobot to start the tutorial.
-Ensure that you read through the `Python Code of Conduct `_.
+Ensure that you read through the `Python Code of Conduct `__.
We are to be open, considerate and respectful to all users in the community.
You can report messages that don't respect the CoC by clicking on the three
dots under the message and then on the :guilabel:`⚐` icon. You can also mention the
-`@staff `_,
-`@moderators `_, or
-`@admins `_ groups in a message.
+`@staff `__,
+`@moderators `__, or
+`@admins `__ groups in a message.
@@ -164,7 +163,7 @@ Customising notifications on user preference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To get a bird's eye view of all your customised notifications, you can
-go to `Preferences of your account `_.
+go to `Preferences of your account `__.
This allows you to make adjustments according to categories, users, and tags.
Enabling mailing list mode
@@ -174,7 +173,7 @@ In mailing list mode, you will receive one email per post, as happens with
traditional mailing lists. This is desirable if you prefer to interact via email,
without visiting the forum website.
To activate the mailing list mode, go to the `email preferences
-`_, check "Enable
+`__, check "Enable
mailing list mode" and save changes.
.. _Discourse: https://discuss.python.org/
@@ -243,7 +242,7 @@ Setting expectations for open source participation
==================================================
Burn-out is common in open source due to a misunderstanding of what users, contributors,
-and maintainers should expect from each other. Brett Cannon gave a `talk `_
+and maintainers should expect from each other. Brett Cannon gave a `talk `__
about this topic that sets out to help everyone set reasonable expectations of each other in
order to make open source pleasant for everyone involved.
diff --git a/developer-workflow/development-cycle.rst b/developer-workflow/development-cycle.rst
index 7f82ea42f0..af198a4007 100644
--- a/developer-workflow/development-cycle.rst
+++ b/developer-workflow/development-cycle.rst
@@ -68,8 +68,8 @@ Maintenance branches
A branch for a previous feature release, currently being maintained for bug
fixes, or for the next feature release in its
:ref:`beta ` or :ref:`release candidate ` stages.
-There is usually either one or two maintenance branches at any given time for
-Python 3.x. After the final release of a new minor version (3.x.0), releases
+There are usually either one or two maintenance branches at any given time.
+After the final release of a new minor version (3.x.0), releases
produced from a maintenance branch are called **bugfix** or **maintenance**
releases; the terms are used interchangeably. These releases have a
**micro version** number greater than zero.
@@ -134,7 +134,7 @@ former branch, for example, ``3.8`` or ``2.7``.
The :ref:`versions` page contains list of active and end-of-life branches.
The latest release for each Python version can be found on the `download page
-`_.
+`__.
.. _stages:
@@ -190,7 +190,7 @@ severe enough (for example, crashes) that they deserve fixing before the final r
All other issues should be deferred to the next development cycle, since
stability is the strongest concern at this point.
-While the goal is to have no code changes between a RC and a final release,
+While the goal is to have no code changes between an RC and a final release,
there may be a need for final documentation or test fixes. Any such proposed
changes should be discussed first with the release manager.
@@ -204,36 +204,38 @@ Final
^^^^^
When a final release is being cut, only the release manager (RM) can make
-changes to the branch. After the final release is published, the full
-:ref:`development cycle ` starts again for the next minor version.
+changes to the branch.
Repository administration
-------------------------
The source code is currently hosted on `GitHub
-`_ in the `Python organization `_.
+`__ in the `Python organization `__.
Organization repository policy
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Within the `GitHub Python organization `_,
+Within the `GitHub Python organization `__,
repositories are expected to relate to the Python language, the CPython
reference implementation, their documentation and their development workflow.
This includes, for example:
-* The reference implementation of Python and related repositories: `CPython `_.
-* Tooling and support around CPython development: `pyperformance `_, `Bedevere `_.
-* Helpers and backports for Python/CPython features: `typing_extensions `_, `typeshed `_, `tzdata `_, `pythoncapi-compat `_.
-* Organization-related repositories: the `Code of Conduct `_, `.github `_.
-* Documentation and websites for all the above: `python.org repository `_, `PEPs `_, `Devguide `_, docs translations.
-* Infrastructure for all the above: `docsbuild-scripts `_, `buildmaster-config `_.
-* Discussions and notes around official development-related processes and events: `steering-council `_, `core-sprint `_.
+* The reference implementation of Python and related repositories: `CPython `__.
+* Tooling and support around CPython development: `pyperformance `__, `Bedevere `__.
+* Helpers and backports for Python/CPython features: `typing_extensions `__, `typeshed `__, `tzdata `__, `pythoncapi-compat `__.
+* Organization-related repositories: the `Code of Conduct `__, `.github `__.
+* Documentation and websites for all the above: `python.org repository `__, `PEPs `__, `Devguide `__, docs translations.
+* Infrastructure for all the above: `docsbuild-scripts `__, `buildmaster-config `__.
+* Discussions and notes around official development-related processes and events: `steering-council `__, `core-sprint `__.
Before adding a new repository to the organization, open a discussion to seek consensus
-in the `Committers Discourse category `_.
-Once people are satisfied with that, ask the `Python steering council `_
-to grant permission.
+in the `Committers Discourse category `__.
+Once people are satisfied with that, ask the `Python steering council `__
+to grant permission. Note that this process is not necessary for
+:ref:`docs translations ` following
+:pep:`PEP 545 <545#repository-for-po-files>`, which can be added at a
+core team member’s discretion.
Note that several repositories remain in the organization for historic reasons,
and would probably not be appropriate to add today.
@@ -241,18 +243,18 @@ and would probably not be appropriate to add today.
Generally, new repositories should start their life under personal GitHub
accounts or other GitHub orgs. It is relatively easy to move a repository to
the organization once it is mature. For example, this would now apply to
-experimental features like `asyncio `_,
-`exceptiongroups `_,
+experimental features like `asyncio `__,
+`exceptiongroups `__,
and drafts of new guides and other documentation (for example, `redistributor-guide
-`_).
+`__).
-General-use tools and libraries (for example, `mypy `_
-or `Black `_) should also be developed outside
+General-use tools and libraries (for example, `mypy `__
+or `Black `__) should also be developed outside
the ``python`` organization, unless core devs (as represented by the SC)
specifically want to “bless” one implementation (as with
-`typeshed `_,
-`tzdata `_, or
-`pythoncapi-compat `_).
+`typeshed `__,
+`tzdata `__, or
+`pythoncapi-compat `__).
Organization owner policy
@@ -264,13 +266,13 @@ at all levels including organization membership, team membership, access
control, and merge privileges on all repositories. For full details of the
permission levels see `GitHub's documentation on Organization permission
levels
-`_.
+`__.
This role is paramount to the security of the Python Language, Community, and
Infrastructure.
The Executive Director of the Python Software Foundation delegates authority on
-GitHub Organization Owner Status to Ee Durbin - Python Software
-Foundation Director of Infrastructure. Common reasons for this role are:
+GitHub Organization Owner Status to Jacob Coffee - Python Software
+Foundation Infrastructure Engineer. Common reasons for this role are:
Infrastructure Staff Membership, Python Software Foundation General Counsel,
and Python Software Foundation Staff as fallback.
@@ -294,7 +296,7 @@ Current owners
+----------------------+--------------------------------+-----------------+
| Donald Stufft | Infrastructure Staff | dstufft |
+----------------------+--------------------------------+-----------------+
-| Ee Durbin | PSF Director of Infrastructure | ewdurbin |
+| Ee Durbin | Infrastructure Staff | ewdurbin |
+----------------------+--------------------------------+-----------------+
| Jacob Coffee | PSF Infrastructure Engineer | JacobCoffee |
+----------------------+--------------------------------+-----------------+
@@ -315,7 +317,7 @@ The Administrator role on the repository allows for managing all aspects
including collaborators, access control, integrations, webhooks, and branch
protection. For full details of the permission levels see `GitHub's
documentation on repository permission levels
-`_.
+`__.
Common reasons for this role are: maintenance of core
workflow tooling, Release Managers for all :ref:`in-development `,
:ref:`maintenance `, and :ref:`security mode `
diff --git a/developer-workflow/extension-modules.rst b/developer-workflow/extension-modules.rst
index 7131cfdf86..4d8c0ffca1 100644
--- a/developer-workflow/extension-modules.rst
+++ b/developer-workflow/extension-modules.rst
@@ -562,7 +562,7 @@ Now that the configuration is in place, it remains to compile the project:
.. tip::
- We recommend installing `Podman `_
+ We recommend installing `Podman `__
instead of Docker since the former does not require a background service
and avoids creating files owned by the ``root`` user in some cases.
@@ -574,7 +574,7 @@ Now that the configuration is in place, it remains to compile the project:
:mod:`!_foo` discoverable and importable via ``import _foo``.
* The final ``make`` step is generally not needed since the previous ``make``
- invokations may completely rebuild the project, but it could be needed in
+ invocations may completely rebuild the project, but it could be needed in
some specific cases.
Troubleshooting
@@ -609,8 +609,8 @@ by executing :cpy-file:`Tools/build/regen-configure.sh`:
If Docker complains about missing permissions, this Stack Overflow post
could be useful in solving the issue: `How to fix docker: permission denied
-`_. Alternatively, you may try
-using `Podman `_.
+`__. Alternatively, you may try
+using `Podman `__.
Missing ``Py_BUILD_CORE`` define when using internal headers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/developer-workflow/grammar.rst b/developer-workflow/grammar.rst
index d574dfed7d..bd314c61e3 100644
--- a/developer-workflow/grammar.rst
+++ b/developer-workflow/grammar.rst
@@ -5,4 +5,4 @@ Changing CPython's grammar
==========================
This document is now part of the
-`CPython Internals Docs `_.
+`CPython Internals Docs `__.
diff --git a/developer-workflow/psrt-emeritus.csv b/developer-workflow/psrt-emeritus.csv
new file mode 100644
index 0000000000..f9d26bfba4
--- /dev/null
+++ b/developer-workflow/psrt-emeritus.csv
@@ -0,0 +1,10 @@
+Anthony Baxter,,Release Manager
+Christian Heimes,tiran,
+Georg Brandl,birkenfeld,
+Huzaifa Sidhpurwala,,
+Jesse Noller,,
+Kushal Das,kushaldas,
+Mark Hammond,mhammond,
+Nam Nguyen,,
+Neal Norwitz,,
+Trent Mick,,
diff --git a/developer-workflow/psrt.csv b/developer-workflow/psrt.csv
new file mode 100644
index 0000000000..81147eb29e
--- /dev/null
+++ b/developer-workflow/psrt.csv
@@ -0,0 +1,25 @@
+Barry Warsaw,warsaw,Admin
+Benjamin Peterson,benjaminp,
+Donald Stufft,dstufft,
+Dustin Ingram,di,
+Ee Durbin,ewdurbin,Admin
+Emma Smith,emmatyping,
+Glyph Lefkowitz,glyph,
+Gregory P. Smith,gpshead,
+Hugo van Kemenade,hugovk,Release Manager
+Jacob Coffee,JacobCoffee,
+Larry Hastings,larryhastings,
+Łukasz Langa,ambv,Release Manager
+Ned Deily,ned-deily,"Admin, Release Manager"
+Pablo Galindo Salgado,pablogsal,Release Manager
+Paul McMillan,paulmcmillan,
+Petr Viktorin,encukou,
+Pradyun Gedam,pradyunsg,
+Savannah Ostrowski,savannahostrowski,Release Manager
+Serhiy Storchaka,serhiy-storchaka,
+Seth Larson,sethmlarson,Admin
+Stan Ulbrych,StanFromIreland,
+Steve Dower,zooba,Release Manager
+Thomas Wouters,Yhg1s,Release Manager
+Tim Peters,tim-one,
+William Woodruff,woodruffw,
diff --git a/developer-workflow/psrt.rst b/developer-workflow/psrt.rst
index cf5acd2b70..dee901726e 100644
--- a/developer-workflow/psrt.rst
+++ b/developer-workflow/psrt.rst
@@ -4,6 +4,84 @@ Python Security Response Team (PSRT)
The Python Security Response Team (PSRT) is responsible for handling
vulnerability reports for CPython and pip.
+Members
+-------
+
+The PSRT publishes a full
+list of members and admins, included in the table below:
+
+.. csv-table::
+ :header: "Name", "GitHub username", "Notes"
+ :file: psrt.csv
+ :encoding: "utf-8"
+
+See also the :ref:`members emeritus list `.
+
+How can I join the PSRT?
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Anyone can join the PSRT following a nomination process
+`similar to core team nominations`_. Nomination for a new member
+is brought to the PSRT by an existing PSRT member and then
+this nomination is voted on by existing PSRT members.
+The nomination succeeds if the nomination receives at least
+two-thirds positive votes from a vote of existing PSRT members
+that is open for one week and not vetoed by the Steering Council.
+
+Once per year the Steering Council will receive a report of inactive members
+of the PSRT with the recommendation to remove the inactive users from the PSRT.
+“Inactive” is defined as a member who hasn’t coordinated or commented on a
+vulnerability report in the past year since the last report was generated.
+The Steering Council may remove members of the PSRT with a simple vote.
+
+Members of the PSRT who are a Release Manager or Steering Council member may
+remain in the PSRT regardless of inactivity in vulnerability reports.
+
+.. _similar to core team nominations: https://devguide.python.org/core-team/join-team/
+
+Responsibilities of PSRT members
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Below are the responsibilities of PSRT members:
+
+* Being knowledgeable about typical software vulnerability report handling
+ processes, such as CVE IDs, patches, coordinated disclosure, embargoes.
+* Not sharing or acting on embargoed information about the reported
+ vulnerability. Examples of disallowed behavior include sharing information
+ with colleagues or publicly deploying unpublished mitigations or patches ahead
+ of the advisory publication date.
+* Acting as a “Coordinator” of vulnerability reports that are submitted to
+ projects. A Coordinator’s responsibility is to move a report through the PSRT
+ process to a “finished” state, either rejected or as a published advisory and
+ mitigation, within the industry standard timeline of 90 days.
+* As a Coordinator, involving relevant core team members or triagers where
+ necessary to make a determination whether a report is a vulnerability and
+ developing a patch. Coordinators are encouraged to involve members of the core
+ team to make the best decision for each report rather than working in isolation.
+* As a Coordinator, calculating the severity using CVSS and authoring advisories
+ to be shared on `security-announce@python.org`_. These advisories are used for
+ CVE records by the `PSF CVE Numbering Authority`_.
+* Coordinators that can no longer move a report forwards for any reason must
+ delegate their Coordinator role to someone else in the PSRT.
+
+.. _security-announce@python.org: https://mail.python.org/archives/list/security-announce@python.org/
+.. _PSF CVE Numbering Authority: https://www.python.org/cve-numbering-authority/
+
+Responsibilities of PSRT admins
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+PSRT members who are designated as admins by the Steering Council have the
+following additional responsibilities:
+
+* Triaging the ``security@python.org`` mailing list.
+* Managing PSRT membership access including the GitHub team, the mailing list,
+ and Discord channel, to ensure they are synchronized with the canonical list
+ of PSRT members.
+* On a yearly basis, providing the Steering Council with a report including a
+ list of inactive PSRT members.
+* Running nomination elections, including counting final votes and giving
+ the Steering Council an opportunity to veto nominations via email.
+
Vulnerability report triage
---------------------------
@@ -192,3 +270,15 @@ please feel free to adapt them as needed for the current context.
* https://www.cve.org/CVERecord?id={CVE-YYYY-XXXX}
* {pull request URL}
+
+.. _psrt-members-emeritus:
+
+Members emeritus
+----------------
+
+Members who have previously served on the PSRT.
+
+.. csv-table::
+ :header: "Name", "GitHub username", "Notes"
+ :file: psrt-emeritus.csv
+ :encoding: "utf-8"
diff --git a/developer-workflow/sbom.rst b/developer-workflow/sbom.rst
index 756c175708..c8a2facd14 100644
--- a/developer-workflow/sbom.rst
+++ b/developer-workflow/sbom.rst
@@ -5,15 +5,15 @@ Software Bill-of-Materials (abbreviated as "SBOM") is a document for sharing
information about software and how it's been composed. This format is used
most often in the security space for checking software and its dependencies
for vulnerabilities using vulnerability databases like
-`CVE `_ and `OSV `_. The SBOM format
-that the CPython project uses is `SPDX `_
+`CVE `__ and `OSV `__. The SBOM format
+that the CPython project uses is `SPDX `__
which can be transformed into other formats if necessary by consumers.
There are multiple sources of third-party dependencies for CPython.
Some are vendored into the source code of CPython itself (like ``mpdecimal``
vendored at :cpy-file:`Modules/_decimal/libmpdec`) or they could be optionally pulled
in during builds like Windows using dependencies from the
-`python/cpython-source-deps `_
+`python/cpython-source-deps `__
repository.
Whenever adding or updating a third-party dependency, an update will likely
@@ -51,10 +51,10 @@ Adding a new dependency
When adding a dependency it's important to have the following information:
* Name, version, and download URL of the project
-* License of the project as an `SPDX License Expression `_
+* License of the project as an `SPDX License Expression `__
* Software identifiers that match values in vulnerability databases
- (`CPE `_ and
- `Package URLs `_
+ (`CPE `__ and
+ `Package URLs `__
or "PURLs")
* Paths to include and exclude in the CPython source tree corresponding to this dependency
diff --git a/development-tools/clang.rst b/development-tools/clang.rst
index b353d82f00..149fb7adcf 100644
--- a/development-tools/clang.rst
+++ b/development-tools/clang.rst
@@ -11,7 +11,7 @@ libraries.
This document does not cover interpreting the findings. For a discussion of
interpreting results, see Marshall Clow's `Testing libc++ with
--fsanitize=undefined `_. The
+-fsanitize=undefined `__. The
blog posting is a detailed examinations of issues uncovered by Clang in
``libc++``.
@@ -45,7 +45,7 @@ flags are passed through ``CFLAGS`` and ``CXXFLAGS``, and sometimes through
``CC`` and ``CXX`` (in addition to the compiler).
A complete list of sanitizers can be found at `Controlling Code Generation
-`_.
+`__.
.. note::
@@ -70,7 +70,7 @@ Pre-built Clang builds are available for most platforms:
includes the "C++ clang tools for windows" feature.
You can also build ``clang`` from source; refer to
-`the clang documentation `_ for details.
+`the clang documentation `__ for details.
The installer does not install all the components needed on occasion. For
example, you might want to run a ``scan-build`` or examine the results with
@@ -284,6 +284,6 @@ Or, you could ignore the entire file with::
Unfortunately, you won't know what to ignorelist until you run the sanitizer.
The documentation is available at `Sanitizer special case list
-`_.
+`__.
.. _Valgrind: https://github.com/python/cpython/blob/main/Misc/README.valgrind
diff --git a/development-tools/gdb.rst b/development-tools/gdb.rst
index 8f89ea1360..835b2dbc70 100644
--- a/development-tools/gdb.rst
+++ b/development-tools/gdb.rst
@@ -29,7 +29,7 @@ this approach is less helpful when debugging the runtime virtual
machine, since the main interpreter loop function,
``_PyEval_EvalFrameDefault``, is well over 4,000 lines long as of Python 3.12.
Fortunately, among the `many ways to set breakpoints
-`_,
+`__,
you can break at C labels, such as those generated for computed gotos.
If you are debugging an interpreter compiled with computed goto support
(generally true, certainly when using GCC), each instruction will be
diff --git a/documentation/devguide.rst b/documentation/devguide.rst
index 7c53d054e1..74f734831b 100644
--- a/documentation/devguide.rst
+++ b/documentation/devguide.rst
@@ -4,13 +4,7 @@
Helping with the Developer's Guide
==================================
-.. raw:: html
-
-
+.. include:: /include/activate-tab.rst
.. highlight:: console
@@ -22,8 +16,8 @@ lives in a `separate repository`_ and bug reports should be submitted to the
Changes to the Developer's Guide are published when pull requests are merged.
Changes to the Python documentation are published regularly,
-ususally within 48 hours of the change being committed.
-The documentation is also `published for each release `_,
+usually within 48 hours of the change being committed.
+The documentation is also `published for each release `__,
which may also be used by redistributors.
diff --git a/documentation/help-documenting.rst b/documentation/help-documenting.rst
index 1c64b4832c..23520375cb 100644
--- a/documentation/help-documenting.rst
+++ b/documentation/help-documenting.rst
@@ -37,8 +37,8 @@ The in-development and recent maintenance branches are rebuilt once per day.
If you would like to be more involved with documentation, consider subscribing
to the `Documentation category on the Python Discourse
-`_ and the
-`docs@python.org `_ mailing list
+`__ and the
+`docs@python.org `__ mailing list
where user issues are raised and documentation toolchain, projects, and standards
are discussed.
diff --git a/documentation/markup.rst b/documentation/markup.rst
index cad0b4d9c3..863fe34443 100644
--- a/documentation/markup.rst
+++ b/documentation/markup.rst
@@ -28,7 +28,7 @@ attribute definitions ``.. attribute: `attr-name``` :ref:`inform
attribute references ``:attr:`attr-name``` :ref:`roles`
reference labels ``.. _label-name:`` :ref:`doc-ref-role`
internal references ``:ref:`label-name``` :ref:`doc-ref-role`
-external links ```Link text `_`` :ref:`hyperlinks`
+external links ```Link text `__`` :ref:`hyperlinks`
roles w/ custom text ``:role:`custom text ``` :ref:`roles`
roles w/ only last part ``:role:`~hidden.hidden.visible``` :ref:`roles`
roles w/o link ``:role:`!target``` :ref:`roles`
@@ -51,7 +51,7 @@ language, this will not take too long.
.. seealso::
The authoritative `reStructuredText User
- Documentation `_.
+ Documentation `__.
Use of whitespace
@@ -185,9 +185,12 @@ Hyperlinks
External links
^^^^^^^^^^^^^^
-Use ```Link text `_`` for inline web links. If the link text
+Use ```Link text `__`` for inline web links. If the link text
should be the web address, you don't need special markup at all, the parser
-finds links and mail addresses in ordinary text.
+finds links and mail addresses in ordinary text. Prefer anonymous hyperlinks
+(with a double underscore) over named hyperlinks (with a single underscore)
+to avoid target name clashes.
+
Internal links
^^^^^^^^^^^^^^
@@ -343,23 +346,7 @@ they are used in the Python documentation.
This is just an overview of Sphinx' extended markup capabilities; full
coverage can be found in `its own documentation
- `_.
-
-
-Meta-information markup
------------------------
-
-.. describe:: sectionauthor
-
- Identifies the author of the current section. The argument should include
- the author's name such that it can be used for presentation (though it isn't)
- and email address. The domain name portion of the address should be lower
- case. Example::
-
- .. sectionauthor:: Guido van Rossum
-
- Currently, this markup isn't reflected in the output in any way, but it helps
- keep track of contributions.
+ `__.
Module-specific markup
@@ -370,17 +357,11 @@ module being documented. Each module should be documented in its own file.
Normally this markup appears after the title heading of that file; a typical
file might start like this::
- :mod:`parrot` -- Dead parrot access
- ===================================
+ :mod:`!parrot` -- Dead parrot access
+ ====================================
.. module:: parrot
- :platform: Unix, Windows
:synopsis: Analyze and reanimate dead parrots.
- .. moduleauthor:: Eric Cleese
- .. moduleauthor:: John Idle
-
-As you can see, the module-specific markup consists of two directives, the
-``module`` directive and the ``moduleauthor`` directive.
.. describe:: module
@@ -388,24 +369,12 @@ As you can see, the module-specific markup consists of two directives, the
or submodule. The name should be fully qualified (that is, including the
package name for submodules).
- The ``platform`` option, if present, is a comma-separated list of the
- platforms on which the module is available (if it is available on all
- platforms, the option should be omitted). The keys are short identifiers;
- examples that are in use include "IRIX", "Mac", "Windows", and "Unix". It is
- important to use a key which has already been used when applicable.
-
The ``synopsis`` option should consist of one sentence describing the
module's purpose -- it is currently only used in the Global Module Index.
The ``deprecated`` option can be given (with no value) to mark a module as
deprecated; it will be designated as such in various locations then.
-.. describe:: moduleauthor
-
- The ``moduleauthor`` directive, which can appear multiple times, names the
- authors of the module code, just like ``sectionauthor`` names the author(s)
- of a piece of documentation. It too does not result in any output currently.
-
.. note::
It is important to make the section title of a module-describing file
@@ -1054,6 +1023,17 @@ Paragraph-level markup
These directives create short paragraphs and can be used inside information
units as well as normal text:
+.. describe:: availability
+
+ This directive documents the platforms on which a module or feature
+ is available. For example::
+
+ .. availability:: Unix, not WASI, not Android.
+
+ ::
+
+ .. availability:: Linux >= 3.0 with glibc >= 2.14.
+
.. describe:: note
An especially important bit of information about an API that a user should be
diff --git a/documentation/start-documenting.rst b/documentation/start-documenting.rst
index 7865f125d6..917cb30bfa 100644
--- a/documentation/start-documenting.rst
+++ b/documentation/start-documenting.rst
@@ -5,13 +5,7 @@
Getting started
===============
-.. raw:: html
-
-
+.. include:: /include/activate-tab.rst
.. highlight:: rest
diff --git a/documentation/style-guide.rst b/documentation/style-guide.rst
index 68350c4017..5ca2960cea 100644
--- a/documentation/style-guide.rst
+++ b/documentation/style-guide.rst
@@ -73,7 +73,7 @@ boolean
abbreviated name with appropriate markup (for example, ``:type:`bool```).
C API
- Python's `API `_ used by C programmers
+ Python's `API `__ used by C programmers
to write extension modules. All caps and unhyphenated.
CPU
@@ -116,13 +116,31 @@ Don't use Latin abbreviations like "e.g." or "i.e." where English words will do,
such as "for example" or "that is."
+Charged terminology to avoid
+============================
+
+Avoid terminology that may be considered insensitive or exclusionary.
+
+.. list-table::
+ :header-rows: 1
+
+ * - Avoid
+ - Instead
+ * - whitelist
+ - allowlist
+ * - blacklist
+ - blocklist, denylist
+ * - master/slave
+ - main, parent/child, server/client, primary/secondary
+
+
.. index:: diataxis
.. _diataxis:
Diátaxis
========
-Python's documentation strives to follow the `Diátaxis `_
+Python's documentation strives to follow the `Diátaxis `__
framework. This means adapting the writing style according to the nature of
the documentation that is being written. The framework splits
documentation into four distinct types: tutorials, how-to guides, reference, and
@@ -135,7 +153,7 @@ explanation.
and abstract concepts should be avoided. Please consult the Diátaxis guide on
:ref:`diataxis:tutorials` for more detail.
-* `Python how-to guides `_ are
+* `Python how-to guides `__ are
designed to guide a user through a problem-field.
Both tutorials and how-to guides are instructional rather than explanatory
and should provide logical steps on how to complete a task. However,
@@ -158,7 +176,7 @@ explanation.
found throughout Python's documentation, for example the
:ref:`python:unicode-howto`.
-Please consult the `Diátaxis `_ guide for more
+Please consult the `Diátaxis `__ guide for more
detail.
@@ -175,18 +193,19 @@ the second mention is more appropriate for a link. Some units are long enough
to have a few repeated links. Use judgement to decide when a link will help
the reader.
-Do not use a link when the link would point to the current unit. It's natural
-to use the name of a function in the documentation for the function, but a link
-on that function name that simply reloads the section the user is already
-reading is useless and distracting.
+We use the :pypi:`linklint Sphinx extension ` to suppress two kinds
+of excessive links: references in a section to itself and duplicate references
+in a paragraph. Previously, editors had to carefully use an exclamation mark
+in a Sphinx reference (``:func:`!map```) to prevent such links.
Do not use links in section headers. They distract from the title of the
section. The term will be mentioned in the paragraph text and can be linked
from there.
-Sphinx provides ways to automatically add links to references, and a way to
+Sphinx automatically adds links to references, and provides a way to
suppress the link. Using roles like ``:func:`map``` will link to the
-documentation for ``map``. You can suppress the link while keeping the
+documentation for ``map``. If automatic link suppression isn't enough,
+you can suppress the link while keeping the
semantic presentation of the function name by adding an exclamation point
prefix: ``:func:`!map```. See :ref:`roles` for more details.
@@ -224,8 +243,8 @@ For new documentation, do not use a byline (naming the author of the document).
Explicit attribution tends to discourage other users from updating community
documentation.
-Existing documentation with bylines will not be changed unless the author
-decides to do so. This is subject to change in the future.
+Existing bylines are for historical interest only. They do not imply ownership
+or necessary approvals, and do not prevent edits or updates by others.
Pronunciation of dunder names
diff --git a/documentation/translations/coordinating.rst b/documentation/translations/coordinating.rst
index 066237e5d9..82cfce74fa 100644
--- a/documentation/translations/coordinating.rst
+++ b/documentation/translations/coordinating.rst
@@ -12,7 +12,7 @@ Communication/help channels
===========================
Discussions about translations occur on the Python Docs Discord
-`#translations channel `_ and the
+`#translations channel `__ and the
`translations category `_ of the Python Discourse.
For administrative issues, ping ``@python/editorial-board``.
@@ -64,6 +64,8 @@ to make your translation easier to find. In the entry you can also include links
to guides or other resources for translators.
+.. _translation-repo:
+
Repository
----------
@@ -72,16 +74,16 @@ account, with the correct Git hierarchy and folder structure. This can be done
in several ways, and depends on what translation process you plan to use.
Each translation is assigned an appropriate lowercase
-`IETF language tag `_.
+`IETF language tag `__.
The tag may have an optional subtag, joined with a dash.
For example, ``pt`` (Portuguese) or ``pt-br`` (Brazilian Portuguese).
The repository name is then: ``python-docs-TAG``
The name of each branch should be the Python version it holds translations
for, for example, ``3.14``. The files should be structured like the source files
-in `CPython/Doc `_.
+in `CPython/Doc `__.
A correctly set up repository looks like this:
-`python-docs-pl `_
+`python-docs-pl `__
Below, the recommended ways for starting your repository are described. You can
choose another way if you like; it’s up to you.
@@ -100,7 +102,7 @@ Translation platform
~~~~~~~~~~~~~~~~~~~~
You can also start your translation using
-`Transifex `_.
+`Transifex `__.
This will allow you to translate via the web interface, and to use shared
automatically updated source files.
@@ -155,7 +157,7 @@ PEP 545 summary
Here are the essential points of :PEP:`545`:
- Each translation is assigned an appropriate lowercase
- `IETF language tag `_.
+ `IETF language tag `__.
The tag may have an optional region subtag, joined with a dash.
For example, ``pt`` (Portuguese) or ``pt-br`` (Brazilian Portuguese).
@@ -210,10 +212,10 @@ Testing should ideally be set up in your repository, and will help catch errors
early and ensure translation quality. Testing generally consists of building, and
linting with :pypi:`sphinx-lint`.
-See `this documentation `_
+See `this documentation `__
for sample workflows with usage guides.
-The `dashboard `_
+The `dashboard `__
also tests translations and uploads error logs.
@@ -289,7 +291,7 @@ Is there a Weblate instance we can translate on?
------------------------------------------------
There is currently no Weblate instance for Python translations.
-See this `Discourse thread `_
+See this `Discourse thread `__
for updates.
diff --git a/documentation/translations/translating.rst b/documentation/translations/translating.rst
index 6252add5af..2e4f6cf91c 100644
--- a/documentation/translations/translating.rst
+++ b/documentation/translations/translating.rst
@@ -32,7 +32,7 @@ For more details about translations and their progress, see
- :github:`GitHub `
* - `French (fr) `__
- Julien Palard (:github-user:`JulienPalard`)
- - `AFPy/python-docs-fr `_,
+ - `AFPy/python-docs-fr `__,
:github:`mirror `
* - `Greek (el) `__
- | Lysandros Nikolaou (:github-user:`lysnikolaou`),
@@ -122,7 +122,7 @@ If there is already a repository for your language team (there may be links to
Telegrams/Discords in the ``README``), join and introduce
yourself. Your fellow translators will be more than happy to help!
General discussions about translations occur on the Python Docs Discord
-`#translations channel `_ and the
+`#translations channel `__ and the
`translations category `_ of the Python Discourse.
.. _translation-style-guide:
@@ -215,7 +215,7 @@ Code examples
Translate values in code examples, that is string literals, and comments.
Don't translate keywords or names, including variable, function, class, argument,
-and attribute names. An example of a translated codeblock from the `tutorial `_
+and attribute names. An example of a translated codeblock from the `tutorial `__
is provided below:
.. code-block:: python
@@ -259,7 +259,7 @@ through the following resources from the Transifex documentation:
Within the organization, a project for translating the
:github:`Python Docs Sphinx Theme ` can also be
found.
-For further information about Transifex see our `documentation `_.
+For further information about Transifex see our `documentation `__.
Resources
@@ -270,10 +270,10 @@ Some useful resources:
- :ref:`git-boot-camp`:
Several translations accept contributions by pull requests. Most have their
own guide for how to do this, but this can provide useful tips.
-- `Translation issues & improvements `_ GitHub project:
+- `Translation issues & improvements `__ GitHub project:
This project contains issues and pull requests that aim to improve
the Python documentation for translations.
-- `Python Pootle archive `_:
+- `Python Pootle archive `__:
Pootle is no longer used for translation. Contains translations for old Python versions.
@@ -322,7 +322,7 @@ How do I translate the Python Docs Sphinx Theme?
The Sphinx theme for the Python documentation supports localization.
You can translate either on
-`Transifex `_
+`Transifex `__
(see :ref:`translating on Transifex ` for more information)
or locally by following the steps outlined below.
@@ -357,7 +357,7 @@ The coordination team for my language is inactive, what do I do?
----------------------------------------------------------------
If you would like to coordinate, open a pull request in the
-`devguide `_ adding yourself to the table
+`devguide `__ adding yourself to the table
at the top of this page, and ping ``@python/editorial-board``.
diff --git a/getting-started/git-boot-camp.rst b/getting-started/git-boot-camp.rst
index 2ecaa62f0e..6808e99b47 100644
--- a/getting-started/git-boot-camp.rst
+++ b/getting-started/git-boot-camp.rst
@@ -4,13 +4,7 @@
Git bootcamp and cheat sheet
============================
-.. raw:: html
-
-
+.. include:: /include/activate-tab.rst
.. highlight:: console
@@ -33,7 +27,7 @@ relevant to CPython's workflow.
.. note::
Setting up Git aliases for common tasks can be useful to you. You can
get more information about that in
- `Git documentation `_
+ `Git documentation `__
.. _fork-cpython:
@@ -280,7 +274,7 @@ Compare to the ``main`` branch::
$ git diff main
Exclude generated files from diff using an ``attr``
-`pathspec `_ (note the
+`pathspec `__ (note the
single quotes)::
$ git diff main ':(attr:!generated)'
@@ -289,7 +283,7 @@ Exclude generated files from diff by default::
$ git config diff.generated.binary true
-The ``generated`` `attribute `_ is
+The ``generated`` `attribute `__ is
defined in :cpy-file:`.gitattributes`, found in the repository root.
.. _push-changes:
@@ -389,8 +383,8 @@ you run ``git merge upstream/main``.
When it happens, you need to resolve conflict. See these articles about resolving conflicts:
-- `About merge conflicts `_
-- `Resolving a merge conflict using the command line `_
+- `About merge conflicts `__
+- `Resolving a merge conflict using the command line `__
.. _git_from_patch:
@@ -443,8 +437,8 @@ Scenario:
- A contributor made a pull request to CPython.
- Before merging it, you want to be able to test their changes locally.
-If you've got `GitHub CLI `_ or
-`hub `_ installed, you can do::
+If you've got `GitHub CLI `__ or
+`hub `__ installed, you can do::
$ gh co # GitHub CLI
$ hub pr checkout # hub
@@ -523,7 +517,7 @@ The bad example contains bullet points that are a direct effect of the
PR life cycle, while being irrelevant to the final change.
.. note::
- `How to Write a Git Commit Message `_
+ `How to Write a Git Commit Message `__
is a nice article describing how to write a good commit message.
Finally, press the :guilabel:`Confirm squash and merge` button.
@@ -557,7 +551,7 @@ after it has been accepted and merged into ``main``. It is usually indicated
by the label ``needs backport to X.Y`` on the pull request itself.
Use the utility script
-`cherry_picker.py `_
+`cherry_picker.py `__
to backport the commit.
The commit hash for backporting is the squashed commit that was merged to
@@ -649,12 +643,12 @@ To edit an open pull request that targets ``main``:
GitHub CLI
----------
-`GitHub CLI `_ is a command-line
+`GitHub CLI `__ is a command-line
interface that allows you to create, update, and check GitHub
issues and pull requests.
You can install GitHub CLI `by following these instructions
-`_. After installing,
+`__. After installing,
you need to authenticate::
$ gh auth login
@@ -740,6 +734,6 @@ Change into a directory to work from that branch. For example::
.. seealso::
- * `Git Reference Manual `_
+ * `Git Reference Manual