From f67335b3f26b53da1b1dabaa02632a3c64240aeb Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Thu, 23 Apr 2026 07:17:46 -0700 Subject: [PATCH 01/16] Minor improvements to the Emscripten instructions (#1795) * Minor improvements to the Emscripten instructions * Remove incorrect statement about ccache * Add note about nvm * link to nvm * Document `--host-runner` argument as alternative to nvm * lint --- getting-started/setup-building.rst | 61 +++++++++++++++++++----------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/getting-started/setup-building.rst b/getting-started/setup-building.rst index 6acc7ee57..f1a309f58 100644 --- a/getting-started/setup-building.rst +++ b/getting-started/setup-building.rst @@ -522,39 +522,52 @@ The simplest way to build Emscripten is to run: .. code-block:: sh - python3 Platforms/emscripten build all --emsdk-cache=./cross-build/emsdk + export EMSDK_CACHE=$PWD/cross-build/emsdk + python3 Platforms/emscripten install-emscripten + python3 Platforms/emscripten build all -This will: +``install-emscripten`` downloads and installs the version of the Emscripten SDK +required, placing it in the ``EMSDK_CACHE`` directory. +``build all`` will: 1. Build a copy of Python that can run on the host machine (the "build" python); -2. Download a copy of the Emscripten SDK matching the version required by the - version of Python being compiled; -3. Ensure that a required version of Node is installed; -4. Download the code for all the binary dependencies of Python (such as - ``libFFI`` and ``xz``), and compile them for Emscripten; and -5. Build a copy of Python that can run on Emscripten (the "host" python). - -If you omit the ``--emsdk-cache`` environment variable, the build script will +2. Use nvm_ to ensure that the needed version of Node is installed; +3. Download the code for all the binary dependencies of Python (such as + ``libffi`` and ``mpdecimal``), and compile them for Emscripten; and +4. Build a copy of Python that can run on Emscripten (the "host" python). + +The built binary dependencies are cached inside the Emscripten cache directory. +Once built for a given Emscripten version, they will not be rebuilt on +subsequent runs unless there is a change in the version or build script for the +dependency. + +It is assumed that nvm_ is installed in ``${HOME}/.nvm``. If you don't have nvm +installed or don't want to use it, you can pass ``--host-runner node`` to the +``build`` command. The argument should either be the name of an executable that +can be found on the ``PATH`` or a relative or absolute path to an executable. + +If you omit the ``EMSDK_CACHE`` environment variable, the build script will assume that the current environment has the Emscripten tools available. You are responsible for downloading and activating those tools in your environment. The version of Emscripten and Node that is required to build Python is defined in the :cpy-file:`Platforms/emscripten/config.toml` configuration file. -There are three environment variables that can be used to control the operation of +There are two environment variables that can be used to control the operation of the ``Platforms/emscripten`` build script: -* ``EMSDK_CACHE`` controls the location of the emscripten SDK. You can use this instead - environment variable instead of passing the ``--emsdk-cache`` flag. -* ``CACHE_DIR`` defines the location where downloaded artefacts, such - as precompiled ``libFFI`` and ``xz`` binaries, will be stored. -* ``CROSS_BUILD_DIR`` defines the name of the ``cross-build`` directory - that will be used for builds. This can be useful if you need to maintain - builds of multiple versions of Python. +* ``EMSDK_CACHE`` (or the ``--emsdk-cache`` flag) controls the location of the + Emscripten SDK cache directory. You can use this environment variable instead + of passing the ``--emsdk-cache`` flag. When set, the build script will + validate that the required Emscripten version is present in the cache and will + exit with an error if it is not; run ``install-emscripten`` to populate the + cache. +* ``CROSS_BUILD_DIR`` (or the ``--cross-build-dir`` flag) defines the location + of the ``cross-build`` directory that will be used for builds. This can be + useful if you need to maintain builds of multiple versions of Python + side by side. It is possible (but not necessary) to enable ``ccache`` for Emscripten builds -by setting the ``EM_COMPILER_WRAPPER`` environment, but this step will only -take effect if it is done **after** ``emsdk_env.sh`` is sourced (otherwise, the -sourced script removes the environment variable): +by setting the ``EM_COMPILER_WRAPPER`` environment variable: .. code-block:: sh @@ -571,8 +584,9 @@ Emscripten build in ``cross-build/build`` and ``cross-build/wasm32-emscripten/build/python/``, respectively. The ``Platforms/emscripten`` script has a number of other entry points that allow for -fine-grained execution of each part of an iOS build; run ``python3 -Platforms/emscripten --help`` for more details. +fine-grained execution of each part of an Emscripten build; run +``python3 Platforms/emscripten --help`` for more details. + Once the build is complete, you can run Python code using: @@ -592,6 +606,7 @@ through web browsers) are available in the CPython repository at .. _Emscripten: https://emscripten.org/ .. _WebAssembly: https://webassembly.org +.. _nvm: https://github.com/nvm-sh/nvm#intro Android ------- From f9c78a9cb84f47d98560325de8be381f9b5f34f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20S=C5=82awecki?= Date: Sat, 25 Apr 2026 20:34:15 +0200 Subject: [PATCH 02/16] Add multicultural communication guidelines (#1788) * gh-1447: Add multicultural communication guidelines Add a new section covering good-faith assumptions, use of translation and language tools, collaborative phrasing, and patience/mentoring for contributors communicating across cultural and linguistic backgrounds. * Apply suggestions from review Co-authored-by: Carol Willing * Fix caps, wrap at ~80 Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Carol Willing Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- developer-workflow/communication-channels.rst | 32 +++++++++++++++++++ triage/issue-tracker.rst | 3 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/developer-workflow/communication-channels.rst b/developer-workflow/communication-channels.rst index 78fbf21df..a45003c78 100644 --- a/developer-workflow/communication-channels.rst +++ b/developer-workflow/communication-channels.rst @@ -22,6 +22,38 @@ in return. .. _Diversity Statement: https://www.python.org/psf/diversity/ +.. _multicultural-communication: + +Communicating across cultures and languages +=========================================== + +Not every contributor writes English as a first language, and phrasing that +feels neutral in one culture can read as blunt or rude in another. + +**Practice active listening.** Try to focus on understanding the message before reacting. + +**Confirm understanding.** Ask open-ended questions and paraphrase to avoid +misunderstandings. If you're unsure what someone meant, ask: "I want to make +sure I understand: are you saying X?" + +**Use translation tools freely.** If English isn't your first language, +translation software or AI tools may help you check that your message has the +tone you intend. Getting the phrasing wrong can make a reasonable point sound +more aggressive than it is. + +**Watch out for rhetorical questions.** They read as hostile in text even when +that's not the intent at all: + +* Instead of "Why do you think it is wrong?!", try "That doesn't sound right + to me. Here's why: …" +* Instead of "Did you even read the docs?", try "The relevant documentation + is at …" + +**Be patient with newcomers.** If someone doesn't know how things work here, +point them to the right docs or give them the context they need. Criticism +without guidance isn't helpful. + + .. _mailinglists: Mailing lists diff --git a/triage/issue-tracker.rst b/triage/issue-tracker.rst index 4dd0815e4..31673d943 100644 --- a/triage/issue-tracker.rst +++ b/triage/issue-tracker.rst @@ -124,7 +124,8 @@ Disagreement with a resolution on the issue tracker As humans, we will have differences of opinions from time to time. First and foremost, please be respectful that care, thought, and volunteer time went into -the resolution. +the resolution. Keep in mind that contributors come from many different cultural +and linguistic backgrounds; see :ref:`multicultural-communication`. With this in mind, take some time to consider any comments made in association with the resolution of the issue. On reflection, the resolution steps may seem From abdd4c6903977f38f3efe94789598344019770ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20S=C5=82awecki?= Date: Sat, 25 Apr 2026 20:36:13 +0200 Subject: [PATCH 03/16] Recommend `--config-cache` for `./configure` (#1794) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gh-1547: Recommend --config-cache for configure Add ``--config-cache`` to all relevant ``./configure`` invocations in the front page and setup-building guide, matching what the WASM commands already do. Add a brief explanation noting that ``config.cache`` should be deleted when switching compilers or significantly changing the build environment. * gh-1547: Also mention --cache-file=config.cache alias * gh-1547: Remove --config-cache from platform-specific configure commands * gh-1547: Restructure --config-cache as optional speedup tip * gh-1547: Use tip admonition for --config-cache * gh-1547: Add --config-cache to macOS platform-specific configure commands * Apply suggestions from review Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Co-authored-by: Bartosz Sławecki --------- Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- getting-started/setup-building.rst | 21 +++++++++++++++++---- index.rst | 4 ++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/getting-started/setup-building.rst b/getting-started/setup-building.rst index f1a309f58..11915e3e5 100644 --- a/getting-started/setup-building.rst +++ b/getting-started/setup-building.rst @@ -191,6 +191,15 @@ Configuration is typically:: More flags are available to ``configure``, but this is the minimum you should do to get a pydebug build of CPython. +.. tip:: + To speed up repeated ``configure`` runs, use ``--config-cache`` (equivalent to ``--cache-file=config.cache``, short: ``-C``):: + + $ ./configure --config-cache --with-pydebug + + This caches results in a :file:`config.cache` file. If you switch compilers or + significantly change your build environment, delete :file:`config.cache` before + re-running ``configure``. + .. note:: You might need to run ``make clean`` before or after re-running ``configure`` in a particular build directory. @@ -856,7 +865,8 @@ some of CPython's modules (for example, ``zlib``). $ GDBM_CFLAGS="-I$(brew --prefix gdbm)/include" \ GDBM_LIBS="-L$(brew --prefix gdbm)/lib -lgdbm" \ - ./configure --with-pydebug \ + ./configure --config-cache \ + --with-pydebug \ --with-openssl="$(brew --prefix openssl@3)" .. tab:: Python 3.10 @@ -865,7 +875,8 @@ some of CPython's modules (for example, ``zlib``). $ CPPFLAGS="-I$(brew --prefix gdbm)/include -I$(brew --prefix xz)/include" \ LDFLAGS="-L$(brew --prefix gdbm)/lib -L$(brew --prefix xz)/lib" \ - ./configure --with-pydebug \ + ./configure --config-cache \ + --with-pydebug \ --with-openssl="$(brew --prefix openssl@3)" \ --with-tcltk-libs="$(pkg-config --libs tcl tk)" \ --with-tcltk-includes="$(pkg-config --cflags tcl tk)" \ @@ -887,7 +898,8 @@ some of CPython's modules (for example, ``zlib``). $ GDBM_CFLAGS="-I$(dirname $(dirname $(which port)))/include" \ GDBM_LIBS="-L$(dirname $(dirname $(which port)))/lib -lgdbm" \ - ./configure --with-pydebug \ + ./configure --config-cache \ + --with-pydebug \ --with-system-libmpdec .. tab:: Python 3.11-3.12 @@ -896,7 +908,8 @@ some of CPython's modules (for example, ``zlib``). $ GDBM_CFLAGS="-I$(dirname $(dirname $(which port)))/include" \ GDBM_LIBS="-L$(dirname $(dirname $(which port)))/lib -lgdbm" \ - ./configure --with-pydebug + ./configure --config-cache \ + --with-pydebug And finally, run ``make``:: diff --git a/index.rst b/index.rst index 18aca244e..4a478e7cc 100644 --- a/index.rst +++ b/index.rst @@ -95,13 +95,13 @@ instructions please see the :ref:`setup guide `. .. code-block:: shell - ./configure --with-pydebug && make -j $(nproc) + ./configure --config-cache --with-pydebug && make -j $(nproc) .. tab:: macOS .. code-block:: shell - ./configure --with-pydebug && make -j8 + ./configure --config-cache --with-pydebug && make -j8 .. tab:: Windows From 4f8cdf35158ee256b7df468051429c9db8a41891 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Wed, 29 Apr 2026 22:53:22 +0300 Subject: [PATCH 04/16] PSRT: Add link to report security issues (#1796) --- developer-workflow/psrt.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/developer-workflow/psrt.rst b/developer-workflow/psrt.rst index c2501e44b..6b53700d8 100644 --- a/developer-workflow/psrt.rst +++ b/developer-workflow/psrt.rst @@ -4,6 +4,8 @@ Python Security Response Team (PSRT) The Python Security Response Team (PSRT) is responsible for handling vulnerability reports for CPython and pip. +To report security issues: https://www.python.org/dev/security/ + Members ------- From d8483e5e416242a7f4cb966ee82ac28e28145770 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 20:57:49 +0800 Subject: [PATCH 05/16] Bump the pip group with 6 updates (#1798) Updates the requirements on [furo](https://github.com/pradyunsg/furo), [sphinx-autobuild](https://github.com/sphinx-doc/sphinx-autobuild), [sphinx-inline-tabs](https://github.com/pradyunsg/sphinx-inline-tabs), [sphinx-notfound-page](https://github.com/readthedocs/sphinx-notfound-page), [sphinx-copybutton](https://github.com/executablebooks/sphinx-copybutton) and [sphinx](https://github.com/sphinx-doc/sphinx) to permit the latest version. Updates `furo` to 2025.12.19 - [Release notes](https://github.com/pradyunsg/furo/releases) - [Changelog](https://github.com/pradyunsg/furo/blob/main/docs/changelog.md) - [Commits](https://github.com/pradyunsg/furo/compare/2022.06.04...2025.12.19) Updates `sphinx-autobuild` to 2025.8.25 - [Release notes](https://github.com/sphinx-doc/sphinx-autobuild/releases) - [Changelog](https://github.com/sphinx-doc/sphinx-autobuild/blob/main/NEWS.rst) - [Commits](https://github.com/sphinx-doc/sphinx-autobuild/compare/2024.09.19...2025.08.25) Updates `sphinx-inline-tabs` to 2025.12.21.14 - [Commits](https://github.com/pradyunsg/sphinx-inline-tabs/compare/2023.04.21...2025.12.21.14) Updates `sphinx-notfound-page` to 1.1.0 - [Changelog](https://github.com/readthedocs/sphinx-notfound-page/blob/main/CHANGELOG.rst) - [Commits](https://github.com/readthedocs/sphinx-notfound-page/compare/1.0.0...1.1.0) Updates `sphinx-copybutton` to 0.5.2 - [Release notes](https://github.com/executablebooks/sphinx-copybutton/releases) - [Changelog](https://github.com/executablebooks/sphinx-copybutton/blob/master/CHANGELOG.md) - [Commits](https://github.com/executablebooks/sphinx-copybutton/compare/v0.3.3...v0.5.2) Updates `sphinx` to 9.1.0 - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES.rst) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v8.2.3...v9.1.0) --- updated-dependencies: - dependency-name: furo dependency-version: 2025.12.19 dependency-type: direct:production dependency-group: pip - dependency-name: sphinx-autobuild dependency-version: 2025.8.25 dependency-type: direct:production dependency-group: pip - dependency-name: sphinx-inline-tabs dependency-version: 2025.12.21.14 dependency-type: direct:production dependency-group: pip - dependency-name: sphinx-notfound-page dependency-version: 1.1.0 dependency-type: direct:production dependency-group: pip - dependency-name: sphinx-copybutton dependency-version: 0.5.2 dependency-type: direct:production dependency-group: pip - dependency-name: sphinx dependency-version: 9.1.0 dependency-type: direct:production dependency-group: pip ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3b40508f6..09d13a3fe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,11 @@ -furo>=2022.6.4 +furo>=2025.12.19 jinja2 linklint -sphinx-autobuild>=2024.9.19 -sphinx-inline-tabs>=2023.4.21 +sphinx-autobuild>=2025.8.25 +sphinx-inline-tabs>=2025.12.21.14 sphinx-lint==1.0.2 -sphinx-notfound-page>=1.0.0 -sphinx_copybutton>=0.3.3 +sphinx-notfound-page>=1.1.0 +sphinx_copybutton>=0.5.2 sphinxext-opengraph>=0.13.0 sphinxext-rediraffe -Sphinx>=8.2.3 +Sphinx>=9.1.0 From 271fc3edb6cbf5eefb8fb20a5183fae38dca4778 Mon Sep 17 00:00:00 2001 From: Krishna Chaitanya <141550576+XChaitanyaX@users.noreply.github.com> Date: Thu, 7 May 2026 22:55:33 +0530 Subject: [PATCH 06/16] Add powershell example for 'git pr' alias (#1666) --- getting-started/git-boot-camp.rst | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/getting-started/git-boot-camp.rst b/getting-started/git-boot-camp.rst index 6376a190c..47f49f3d6 100644 --- a/getting-started/git-boot-camp.rst +++ b/getting-started/git-boot-camp.rst @@ -462,12 +462,19 @@ Or set up a Git alias: git config --global alias.pr '!sh -c "git fetch upstream pull/${1}/head:pr_${1} && git switch pr_${1}" -' -.. tab:: Windows +.. tab:: Windows cmd .. code-block:: dosbatch git config --global alias.pr "!sh -c 'git fetch upstream pull/${1}/head:pr_${1} && git switch pr_${1}' -" +.. tab:: Windows Powershell + + .. code-block:: shell + + git config --global alias.pr '!f() { git fetch upstream pull/$1/head:pr_$1 && git checkout pr_$1; }; f' + + The alias only needs to be done once. After the alias is set up, you can get a local copy of a pull request as follows:: From a0526fd95139cbd8c16c194ae6e1d7cfd8f08bfb Mon Sep 17 00:00:00 2001 From: Chris Eibl <138194463+chris-eibl@users.noreply.github.com> Date: Tue, 12 May 2026 09:05:12 +0200 Subject: [PATCH 07/16] add Chris Eibl to core-team.csv (#1799) --- core-team/core-team.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/core-team/core-team.csv b/core-team/core-team.csv index 46dfd8153..b7f25e161 100644 --- a/core-team/core-team.csv +++ b/core-team/core-team.csv @@ -1,3 +1,4 @@ +Chris Eibl,chris-eibl,2026-05-10,, Stan Ulbrych,StanFromIreland,2026-03-26,, Itamar Oren,itamaro,2026-02-16,, Emma Smith,emmatyping,2025-07-31,, From e8183172bba909c1b4af6e0dbb01d8775b1e7716 Mon Sep 17 00:00:00 2001 From: Seth Larson Date: Wed, 13 May 2026 14:31:23 -0500 Subject: [PATCH 08/16] Add Kirill Podoprigora and Damian Shaw to the PSRT (#1800) --- developer-workflow/psrt.csv | 2 ++ 1 file changed, 2 insertions(+) diff --git a/developer-workflow/psrt.csv b/developer-workflow/psrt.csv index da67432d9..d79402982 100644 --- a/developer-workflow/psrt.csv +++ b/developer-workflow/psrt.csv @@ -2,6 +2,7 @@ Adam Turner,AA-Turner, Barry Warsaw,warsaw,Admin Bénédikt Tran,picnixz, Benjamin Peterson,benjaminp, +Damian Shaw,notatallshaw, Donald Stufft,dstufft, Dustin Ingram,di, Ee Durbin,ewdurbin,Admin @@ -10,6 +11,7 @@ Glyph Lefkowitz,glyph, Gregory P. Smith,gpshead, Hugo van Kemenade,hugovk,Release Manager Jacob Coffee,JacobCoffee, +Kirill Podoprigora,eclips4, Larry Hastings,larryhastings, Łukasz Langa,ambv,Release Manager Ned Deily,ned-deily,"Admin, Release Manager" From 2a14b3a5483b06cba4696ec2eced07ae455b1e00 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Fri, 15 May 2026 18:10:19 +0300 Subject: [PATCH 09/16] Install Homebrew dependencies via Brewfile (#1802) --- getting-started/setup-building.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting-started/setup-building.rst b/getting-started/setup-building.rst index 11915e3e5..04e9a2143 100644 --- a/getting-started/setup-building.rst +++ b/getting-started/setup-building.rst @@ -857,7 +857,7 @@ some of CPython's modules (for example, ``zlib``). For **Homebrew**, install dependencies using ``brew``:: - $ brew install pkg-config openssl@3 xz gdbm tcl-tk mpdecimal zstd + $ brew bundle --file=Misc/Brewfile .. tab:: Python 3.11+ From f890063d279a53b5f51e282e4a51d243193b8798 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sat, 16 May 2026 11:43:28 +0100 Subject: [PATCH 10/16] Add an 'OSS-Fuzz for CPython' overview (#1801) Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- testing/index.rst | 1 + testing/oss-fuzz.rst | 55 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 testing/oss-fuzz.rst diff --git a/testing/index.rst b/testing/index.rst index 55bdd3d08..6e65c5fdf 100644 --- a/testing/index.rst +++ b/testing/index.rst @@ -10,5 +10,6 @@ Testing and buildbots run-write-tests silence-warnings coverage + oss-fuzz buildbots new-buildbot-worker diff --git a/testing/oss-fuzz.rst b/testing/oss-fuzz.rst new file mode 100644 index 000000000..ec2449a4f --- /dev/null +++ b/testing/oss-fuzz.rst @@ -0,0 +1,55 @@ +OSS-Fuzz for CPython +==================== + +CPython uses `OSS-Fuzz `__, Google's +continuous fuzzing service for open-source projects, to find bugs and +security vulnerabilities by feeding semi-random data to various APIs. + +CPython has two OSS-Fuzz projects: + +* `cpython3 `__: + The fuzz targets, seed corpora, and dictionaries can be found in the + :cpy-file:`Modules/_xxtestfuzz/` directory of CPython. This project + is maintained for existing fuzz targets; add new targets to + ``python3-libraries``. + +* `python3-libraries `__: + The fuzz targets, seed corpora, and dictionaries can be found in the + :github:`python/library-fuzzers` repository. Access to the repository is + managed through the `@python/fuzzers + `__ team on GitHub. + +OSS-Fuzz bug reports are private when filed, so access to crash details and +reproducer test cases is limited to those listed in the ``auto_ccs`` fields of +the OSS-Fuzz project configuration files. Those listed can log into +https://oss-fuzz.com/ with their Google account to view crash details, +reproducer test cases, and project statistics. +If you need access, contact the ``@python/fuzzers`` team. +Completed issues, and issues that remain unresolved after 90 days, are publicly +visible in the `OSS-Fuzz issue tracker +`__. + +Coverage and target statistics are available in the OSS-Fuzz Introspector +project profiles for `cpython3 `__ and +`python3-libraries `__. + +In addition, `CIFuzz `__ +runs the fuzz targets on GitHub Actions for PRs to the ``main`` branch changing +relevant files. + +.. seealso:: + + The `libFuzzer `__ documentation for + details about the fuzzing engine used by OSS-Fuzz. + + +Adding new targets +------------------ + +Add new targets to the ``python3-libraries`` project. For more +information, see the documentation in the :github:`python/library-fuzzers` +repository. + +If the new target covers a standard library module, update the relevant CIFuzz +path configuration so pull requests touching that module trigger fuzzing. See +the ``LIBRARY_FUZZER_PATHS`` set in :cpy-file:`Tools/build/compute-changes.py`. From 42d2e0f2f971c467a98ee09f0773538928f8e72d Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Wed, 20 May 2026 18:05:02 +0300 Subject: [PATCH 11/16] Create 'Security' section and move the PSRT and SBOM pages there (#1805) --- .github/CODEOWNERS | 2 +- conf.py | 3 +++ developer-workflow/index.rst | 2 -- index.rst | 1 + security/index.rst | 11 +++++++++++ {developer-workflow => security}/psrt-emeritus.csv | 0 {developer-workflow => security}/psrt.csv | 0 {developer-workflow => security}/psrt.rst | 0 {developer-workflow => security}/sbom.rst | 0 9 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 security/index.rst rename {developer-workflow => security}/psrt-emeritus.csv (100%) rename {developer-workflow => security}/psrt.csv (100%) rename {developer-workflow => security}/psrt.rst (100%) rename {developer-workflow => security}/sbom.rst (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 06213bdf4..9c2d9d9e4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -5,4 +5,4 @@ # https://git-scm.com/docs/gitignore#_pattern_format # PSRT member list owned by PSRT admins. -developer-workflow/psrt*.csv @warsaw @ewdurbin @ned-deily @sethmlarson +security/psrt*.csv @warsaw @ewdurbin @ned-deily @sethmlarson diff --git a/conf.py b/conf.py index 1d8893722..7cf2e98d4 100644 --- a/conf.py +++ b/conf.py @@ -147,6 +147,9 @@ "langchanges.rst": "developer-workflow/lang-changes.rst", "porting.rst": "developer-workflow/porting.rst", "stdlibchanges.rst": "developer-workflow/stdlib.rst", + # Security + "developer-workflow/psrt.rst": "security/psrt.rst", + "developer-workflow/sbom.rst": "security/sbom.rst", # Documentation "docquality.rst": "documentation/help-documenting.rst", "documenting.rst": "documentation/start-documenting.rst", diff --git a/developer-workflow/index.rst b/developer-workflow/index.rst index 9919398e6..e04fc8a8b 100644 --- a/developer-workflow/index.rst +++ b/developer-workflow/index.rst @@ -15,5 +15,3 @@ Development workflow c-api grammar porting - sbom - psrt diff --git a/index.rst b/index.rst index 4a478e7cc..a7f1ff016 100644 --- a/index.rst +++ b/index.rst @@ -288,6 +288,7 @@ Full table of contents testing/index development-tools/index core-team/index + security/index internals versions diff --git a/security/index.rst b/security/index.rst new file mode 100644 index 000000000..cbc1eb4e4 --- /dev/null +++ b/security/index.rst @@ -0,0 +1,11 @@ +.. _security: + +======== +Security +======== + +.. toctree:: + :maxdepth: 5 + + psrt + sbom diff --git a/developer-workflow/psrt-emeritus.csv b/security/psrt-emeritus.csv similarity index 100% rename from developer-workflow/psrt-emeritus.csv rename to security/psrt-emeritus.csv diff --git a/developer-workflow/psrt.csv b/security/psrt.csv similarity index 100% rename from developer-workflow/psrt.csv rename to security/psrt.csv diff --git a/developer-workflow/psrt.rst b/security/psrt.rst similarity index 100% rename from developer-workflow/psrt.rst rename to security/psrt.rst diff --git a/developer-workflow/sbom.rst b/security/sbom.rst similarity index 100% rename from developer-workflow/sbom.rst rename to security/sbom.rst From 0ee1a984f1b0bbe588e103650f6d7b9523ae9ac6 Mon Sep 17 00:00:00 2001 From: Mariatta Date: Wed, 20 May 2026 20:22:02 -0700 Subject: [PATCH 12/16] Update guidelines on using GenAI (#1778) * Update guidelines on using GenAI * Update the title to clarify the purpose of this doc is to provide guidelines. * Add the Guidelines to the contributing table. * Fix the markup in rendering the table * Soften the wording about AI tool disclosure. * Moved the considerations to be earlier in the page. * Apply suggestions from code review * Add more explicit in the beginning that the person submitting issue or pr is responsible for its content. * adjust wording about being disrespectful and about reviewing the output always. * Rename the file to ai-tools.rst * Reformat to 80 chars max Co-authored-by: Gregory P. Smith Co-authored-by: Donghee Na Co-authored-by: devdanzin <74280297+devdanzin@users.noreply.github.com> Co-authored-by: Jacob Coffee Co-authored-by: Savannah Ostrowski Co-authored-by: Carol Willing --- conf.py | 2 +- getting-started/ai-tools.rst | 63 +++++++++++++++++++++++++++++++ getting-started/generative-ai.rst | 40 -------------------- getting-started/index.rst | 2 +- index.rst | 2 + 5 files changed, 67 insertions(+), 42 deletions(-) create mode 100644 getting-started/ai-tools.rst delete mode 100644 getting-started/generative-ai.rst diff --git a/conf.py b/conf.py index 7cf2e98d4..2758938fe 100644 --- a/conf.py +++ b/conf.py @@ -205,7 +205,7 @@ "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/ai-tools.rst": "getting-started/ai-tools.rst", "contrib/project/outreach.rst": "index.rst", "contrib/project/directory-structure.rst": "getting-started/setup-building.rst", "contrib/project/index.rst": "index.rst", diff --git a/getting-started/ai-tools.rst b/getting-started/ai-tools.rst new file mode 100644 index 000000000..ba92ea9e1 --- /dev/null +++ b/getting-started/ai-tools.rst @@ -0,0 +1,63 @@ +.. _ai-tools: + +============================= +Guidelines for using AI tools +============================= + +The person submitting an issue or PR is responsible for its content, +regardless of whether AI tools were used in its creation. Generative AI +tools can produce output quickly, but discretion, good judgment, and +critical thinking are the foundation of all good contributions. We value +good code, concise accurate documentation, and well scoped PRs without +unneeded code churn. + +Considerations for success +========================== + +Authors must review the work done by AI tooling in detail to ensure it +actually makes sense before proposing it as a PR or filing it as an issue. + +We expect PR authors and those filing issues to be able to explain their +proposed changes in their own words. + +Disclosure of the use of AI tools in the PR description is appreciated, +while not required. Be prepared to explain how the tool was used and what +changes it made. + +Whether you are using AI tools or not, keep the following principles in +mind for the quality of your contribution: + +- Consider whether the change is necessary +- Make minimal, focused changes +- Follow existing coding style and patterns +- Write tests that exercise the change +- Keep backwards compatibility with prior releases in mind. Existing + tests may be ensuring specific API behaviors are maintained. + +Pay close attention to AI generated recommendations for testing changes. +Provide input about Python's testing principles when guiding an AI model. +Always review the output before opening a pull request or issue, +including proposed PR or issue titles and descriptions. + +Acceptable uses +=============== + +Some of the acceptable uses of generative AI include: + +- Assistance with writing comments, especially in a non-native language +- Gaining understanding of existing code +- Supplementing contributor knowledge for code, tests, and documentation + +Unacceptable uses +================= + +Maintainers may close issues and PRs that are not useful or productive, +regardless of whether AI tools were used or not. + +If a contributor repeatedly opens unproductive issues or PRs, they may be +blocked from contributing to the project because it is disruptive and +disrespectful of the maintainers time. + +It is not acceptable to alter or bypass existing tests, or remove desired +functionality, in order to make a failing test pass. Such changes are not +a real fix. diff --git a/getting-started/generative-ai.rst b/getting-started/generative-ai.rst deleted file mode 100644 index e4aa3e758..000000000 --- a/getting-started/generative-ai.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. _generative-ai: - -============= -Generative AI -============= - -Generative AI tools have evolved rapidly, and their suggested results can be helpful. As with using any tool, the resulting contribution is -the responsibility of the contributor. We value good code, concise accurate documentation, and avoiding unneeded code -churn. Discretion, good judgment, and critical thinking are the foundation of all good contributions, regardless of the -tools used in their creation. - -Acceptable uses -=============== - -Some of the acceptable uses of generative AI include: - -- Assistance with writing comments, especially in a non-native language -- Gaining understanding of existing code -- Supplementing contributor knowledge for code, tests, and documentation - -Unacceptable uses -================= - -Maintainers may close issues and PRs that are not useful or productive, including -those that are fully generated by AI. If a contributor repeatedly opens unproductive -issues or PRs, they may be blocked. - -Considerations for success -========================== -- While AI assisted tools such as autocompletion can enhance productivity, they sometimes rewrite entire code blocks instead of making small, focused edits. - This can make it more difficult to review changes and to fully understand both the original intent of the code and the rationale behind the new modifications. - Maintaining consistency with the original code helps preserve clarity, traceability, and meaningful reviews and also helps us avoid unnecessary code churn. -- Sometimes AI assisted tools make failing unit tests pass by altering or bypassing the tests rather than addressing the underlying problem in the code. - Such changes do not represent a real fix. Authors must review the work done by AI tooling in detail to ensure it actually makes sense before proposing it as a PR. -- Keep the following principles for the quality of your contributions in mind whether you use generative AI or not: - - - Consider whether the change is necessary - - Make minimal, focused changes - - Follow existing coding style and patterns - - Write tests that exercise the change diff --git a/getting-started/index.rst b/getting-started/index.rst index 05ee67a3b..48037ad38 100644 --- a/getting-started/index.rst +++ b/getting-started/index.rst @@ -12,4 +12,4 @@ Getting started git-boot-camp pull-request-lifecycle getting-help - generative-ai + ai-tools diff --git a/index.rst b/index.rst index a7f1ff016..23ed08e15 100644 --- a/index.rst +++ b/index.rst @@ -40,6 +40,7 @@ Guide for contributing to Python: * :ref:`rst-primer` * :ref:`translating` * :ref:`devguide` + * :ref:`ai-tools` - * :ref:`setup` * :ref:`help` @@ -49,6 +50,7 @@ Guide for contributing to Python: * :ref:`communication` * :ref:`gitbootcamp` * :ref:`devcycle` + * :ref:`ai-tools` - * :ref:`tracker` * :ref:`triaging` From 1a89c098cb8265b265cc5f529cf0920dd4e18756 Mon Sep 17 00:00:00 2001 From: Mariatta Date: Thu, 21 May 2026 08:08:43 -0700 Subject: [PATCH 13/16] Fix the redirect to the new ai usage guidelines. (#1806) * Fix the redirect to the new ai usage guidelines. Co-authored-by: Stan Ulbrych --- conf.py | 3 ++- getting-started/ai-tools.rst | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/conf.py b/conf.py index 2758938fe..dce618448 100644 --- a/conf.py +++ b/conf.py @@ -163,6 +163,7 @@ "gitbootcamp.rst": "getting-started/git-boot-camp.rst", "pullrequest.rst": "getting-started/pull-request-lifecycle.rst", "setup.rst": "getting-started/setup-building.rst", + "getting-started/generative-ai.rst": "getting-started/ai-tools.rst", # CPython Internals "compiler.rst": "internals.rst", "exploring.rst": "internals.rst", @@ -205,7 +206,7 @@ "contrib/project/github.rst": "index.rst", "contrib/project/governance.rst": "index.rst", "contrib/project/roles.rst": "index.rst", - "contrib/project/ai-tools.rst": "getting-started/ai-tools.rst", + "contrib/project/generative-ai": "getting-started/ai-tools.rst", "contrib/project/outreach.rst": "index.rst", "contrib/project/directory-structure.rst": "getting-started/setup-building.rst", "contrib/project/index.rst": "index.rst", diff --git a/getting-started/ai-tools.rst b/getting-started/ai-tools.rst index ba92ea9e1..e7d94d351 100644 --- a/getting-started/ai-tools.rst +++ b/getting-started/ai-tools.rst @@ -1,4 +1,5 @@ .. _ai-tools: +.. _generative-ai: ============================= Guidelines for using AI tools From 109d6d0f644f7927fa6d1c8d25ac8f0e3c7da702 Mon Sep 17 00:00:00 2001 From: Mariatta Date: Fri, 22 May 2026 11:26:53 -0700 Subject: [PATCH 14/16] Add sphinx-last-updated-by-git extenstion. (#1807) * Add sphinx-last-updated-by-git extenstion. Show the last time the page was updated. Useful for docs like AI tools guidelines. Migrate to RTD jobs because we cannot have both command and jobs in rtd. --- .readthedocs.yml | 17 +++++++++++------ conf.py | 3 +++ requirements.txt | 1 + 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 26e5be967..3e1303354 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -13,9 +13,14 @@ build: tools: python: "3" - commands: - - asdf plugin add uv - - asdf install uv latest - - asdf global uv latest - - make dirhtml BUILDDIR=_readthedocs - - mv _readthedocs/dirhtml _readthedocs/html + jobs: + post_checkout: + - git fetch --unshallow || true + build: + html: + - asdf plugin add uv + - asdf install uv latest + - asdf global uv latest + - make dirhtml BUILDDIR=_readthedocs + - mkdir -p $READTHEDOCS_OUTPUT + - mv _readthedocs/dirhtml $READTHEDOCS_OUTPUT/html diff --git a/conf.py b/conf.py index dce618448..fb032b895 100644 --- a/conf.py +++ b/conf.py @@ -10,10 +10,13 @@ 'sphinx.ext.todo', 'sphinx_copybutton', 'sphinx_inline_tabs', + 'sphinx_last_updated_by_git', 'sphinxext.opengraph', 'sphinxext.rediraffe', ] +html_last_updated_fmt = '%b %d, %Y' + # The master toctree document. master_doc = 'index' diff --git a/requirements.txt b/requirements.txt index 09d13a3fe..5dfb12f14 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ jinja2 linklint sphinx-autobuild>=2025.8.25 sphinx-inline-tabs>=2025.12.21.14 +sphinx-last-updated-by-git>=0.3.8 sphinx-lint==1.0.2 sphinx-notfound-page>=1.1.0 sphinx_copybutton>=0.5.2 From 87de3503bd9b1fb94a868181ef28a2169d3a9e7a Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sat, 23 May 2026 12:56:51 -0400 Subject: [PATCH 15/16] Add details about merging pull requests (#1808) --- core-team/committing.rst | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/core-team/committing.rst b/core-team/committing.rst index c606df383..1209d6ae1 100644 --- a/core-team/committing.rst +++ b/core-team/committing.rst @@ -35,7 +35,7 @@ to enter the public source tree. Ask yourself the following questions: Check :ref:`pull-request-lifecycle` and :ref:`helptriage` to review what is expected of a pull request. -* **Does the change break backwards-compatibility without a strong reason?** +* **Does the change break backwards compatibility without a strong reason?** :ref:`Run the entire test suite ` to make sure that everything still passes. If there is a change to the semantics, then there needs to be a strong reason, because it will cause some peoples' code to break. @@ -79,6 +79,31 @@ to enter the public source tree. Ask yourself the following questions: :ref:`what-s-new-and-news-entries` +Merging the pull request +------------------------ + +Once the pull request is ready, you (the core team member) can merge it. +If other people have been substantially involved in the review, it can be good +to wait for their approval even if a core team member has already approved the +pull request. + +The CPython repo is configured to only accept squashes. You will squash the +pull request. + +Commit message +^^^^^^^^^^^^^^ + +GitHub defaults the squashed commit message to a combined list of all of the +individual commit messages in the pull request. Do not leave those. They often +are too noisy and provide little context, especially since devs know their +work will be eventually squashed, so intermediate commit messages while +working on the pull request are not interesting. + +If you think it is important, you can summarize the collaborative work that +went into the pull request, but it is not necessary. The pull request and/or +original issue are still available for detailed investigations of history. + + Working with Git_ ----------------- From 45e3338d511352ef76bb7d5d37d92d3d1570c1bd Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 24 May 2026 10:19:26 -0400 Subject: [PATCH 16/16] Minor grammar fixes and a glossary entry for "open source" (#1809) --- core-team/motivations.rst | 12 ++++++------ core-team/responsibilities.rst | 2 +- developer-workflow/communication-channels.rst | 2 +- developer-workflow/extension-modules.rst | 2 +- developer-workflow/stdlib.rst | 2 +- development-tools/warnings.rst | 4 ++-- documentation/markup.rst | 2 +- documentation/style-guide.rst | 7 ++++++- getting-started/setup-building.rst | 2 +- 9 files changed, 20 insertions(+), 15 deletions(-) diff --git a/core-team/motivations.rst b/core-team/motivations.rst index d0e5a0cc1..7babb5f7d 100644 --- a/core-team/motivations.rst +++ b/core-team/motivations.rst @@ -115,7 +115,7 @@ participating in the CPython core development process: As a core team member, she is primarily interested in helping to ensure Python's continued suitability for educational, testing and data analysis use cases, as well as in encouraging good architectural practices when assembling Python - applications and test harnesses from open source components. + applications and test harnesses from open-source components. Note: prior to August 2023, Alyssa used her birth name (Nick Coghlan). Some records (for example, mailing list archives, version control history) will still reference that name. @@ -175,14 +175,14 @@ participating in the CPython core development process: available, working on the infrastructure that supports CPython development, specifically the Roundup-based bug tracker and the buildbot system. - David currently does both proprietary and open source development work, + 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 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 QNX, and work on CPython ICC support funded by Intel). He would like to - spend more of his (and his company's) time on open source work, and so is + spend more of his (and his company's) time on open-source work, and so is actively seeking additional such contract opportunities. .. topic:: Antoine Pitrou (France) @@ -202,7 +202,7 @@ participating in the CPython core development process: concurrent programming. As a professional, Antoine has been first specializing in network - programming, and more lately in open source data science infrastructure. + programming, and more lately in open-source data science infrastructure. He has made numerous contributions to Numba, Dask and is currently working full time on Apache Arrow as a technical leader at QuantStack. @@ -269,7 +269,7 @@ participating in the CPython core development process: Carol is focused on Python's usage in education and scientific research. She is interested in distributed computing, organizational development, - operational workflows, and sustainability of open source projects. + operational workflows, and sustainability of open-source projects. .. _goals-of-the-motivations-page: @@ -282,7 +282,7 @@ strongly suggest that the current core development process is bottlenecked on core team time. This is most clearly indicated in the first metrics graph, which shows both the number of open issues and the number of pull requests awaiting review growing steadily over time, despite CPython being one of the most -active open source projects in the world. This bottleneck then impacts not only +active open-source projects in the world. This bottleneck then impacts not only resolving open issues and accepting submitted pull requests, but also the process of identifying, nominating and mentoring new core team members. diff --git a/core-team/responsibilities.rst b/core-team/responsibilities.rst index 9f5c62b72..130e763d5 100644 --- a/core-team/responsibilities.rst +++ b/core-team/responsibilities.rst @@ -123,7 +123,7 @@ to better assess the sustainability of current contributions to CPython core development, and also serves as a referral list for organisations seeking commercial Python support from the core development community. -And finally, enjoy yourself! Contributing to open source software should be fun +And finally, enjoy yourself! Contributing to open-source software should be fun (overall). If you find yourself no longer enjoying the work then either take a break or figure out what you need to do to make it enjoyable again. diff --git a/developer-workflow/communication-channels.rst b/developer-workflow/communication-channels.rst index a45003c78..101bb0612 100644 --- a/developer-workflow/communication-channels.rst +++ b/developer-workflow/communication-channels.rst @@ -270,7 +270,7 @@ that way. You can find their blogs (and various other developers who use Python) at `Planet Python `__. -Setting expectations for open source participation +Setting expectations for open-source participation ================================================== Burn-out is common in open source due to a misunderstanding of what users, contributors, diff --git a/developer-workflow/extension-modules.rst b/developer-workflow/extension-modules.rst index 4d8c0ffca..cab46c834 100644 --- a/developer-workflow/extension-modules.rst +++ b/developer-workflow/extension-modules.rst @@ -547,7 +547,7 @@ Now that the configuration is in place, it remains to compile the project: .. tip:: - Use ``make -jN`` to speed-up compilation by utilizing as many CPU cores + Use ``make -jN`` to speed up compilation by utilizing as many CPU cores as possible, where *N* is as many CPU cores you want to spare (and have memory for). Be careful using ``make -j`` with no argument, as this puts no limit on the number of jobs, and compilation can sometimes use up a diff --git a/developer-workflow/stdlib.rst b/developer-workflow/stdlib.rst index b683e55e9..ec1097722 100644 --- a/developer-workflow/stdlib.rst +++ b/developer-workflow/stdlib.rst @@ -126,7 +126,7 @@ If the module you want to propose adding to the stdlib meets the requirements, you may propose its inclusion by following the :abbr:`PEP (Python Enhancement Proposal)` process. See :pep:`1` for details, -and the :pep:`PEP index <0>` for previously-accepted PEPs +and the :pep:`PEP index <0>` for previously accepted PEPs that have proposed a module for inclusion. If the PEP is accepted, then the module will be added to the stdlib diff --git a/development-tools/warnings.rst b/development-tools/warnings.rst index b30d81131..102608252 100644 --- a/development-tools/warnings.rst +++ b/development-tools/warnings.rst @@ -29,7 +29,7 @@ What to do if a warning check fails GitHub CI --------------------------------------------- The :cpy-file:`Tools/build/check_warnings.py` tool will fail if the compiler generates -more or less warnings than expected for a given source file as defined in the +more or fewer warnings than expected for a given source file as defined in the platform-specific warning ignore file. The warning ignore file is either :cpy-file:`Tools/build/.warningignore_ubuntu` or :cpy-file:`Tools/build/.warningignore_macos` depending on the platform. @@ -44,7 +44,7 @@ If a warning check fails with: warning ignore file. If the file exists in the warning ignore file increment the count by the number of newly introduced warnings. -* Unexpected improvements (less warnings) +* Unexpected improvements (fewer warnings) * Document in the PR that the change reduces the number of compiler warnings. Decrement the count in the platform-specific warning diff --git a/documentation/markup.rst b/documentation/markup.rst index 5ba8e4c7a..282b80f91 100644 --- a/documentation/markup.rst +++ b/documentation/markup.rst @@ -225,7 +225,7 @@ Explicit markup --------------- "Explicit markup" is used in reST for most constructs that need special -handling, such as footnotes, specially-highlighted paragraphs, comments, and +handling, such as footnotes, specially highlighted paragraphs, comments, and generic directives. An explicit markup block begins with a line starting with ``..`` followed by diff --git a/documentation/style-guide.rst b/documentation/style-guide.rst index 28e4f2168..73618f9ae 100644 --- a/documentation/style-guide.rst +++ b/documentation/style-guide.rst @@ -84,6 +84,11 @@ free-threaded lock (GIL) optional (per :pep:`703`). Avoid using "No-GIL" to avoid double negatives (for example, "non-no-GIL"). +open source + Follow the usual English rules for compound words. When used as an + adjective, hyphenate: "open-source software". When used as a noun, don't use + a hypen: "open source is a collaboration model.." + POSIX The name assigned to a particular group of standards. This is always uppercase. @@ -92,7 +97,7 @@ Python The name of our favorite programming language is always capitalized. reST - For "reStructuredText," an easy to read, plaintext markup syntax + For "reStructuredText," an easy to read, plain-text markup syntax used to produce Python documentation. When spelled out, it is always one word and both forms start with a lowercase 'r'. diff --git a/getting-started/setup-building.rst b/getting-started/setup-building.rst index 04e9a2143..3590e09c3 100644 --- a/getting-started/setup-building.rst +++ b/getting-started/setup-building.rst @@ -83,7 +83,7 @@ You will only need to execute these steps once per machine: (You can use both SSH-based or HTTPS-based URLs.) -.. Step 6 and 7 are are duplicated in bootcamp as well. +.. Step 6 and 7 are duplicated in bootcamp as well. Please update these steps in both places. 6. Add an ``upstream`` remote, then configure ``git``