# See https://help.github.com/articles/about-codeowners/
-# for more info about CODEOWNERS file
+# for further details about the .github/CODEOWNERS file.
# It uses the same pattern rule for gitignore file
# https://git-scm.com/docs/gitignore#_pattern_format
+# Notably, a later match overrides earlier matches, so order matters.
+# If using a wildcard pattern, try to be as specific as possible to avoid
+# matching unintended files or overriding previous entries.
+# To exclude a file from ownership, add a line with only the file.
+# See the exclusions section at the end of the file for examples.
+
+# =======
+# Purpose
+# =======
+#
+# An entry in this file does not imply 'ownership', despite the name of the
+# file, but instead that those listed take an interest in that part of the
+# project and will automatically be added as reviewers to PRs that affect
+# the matching files.
+# See also the Experts Index in the Python Developer's Guide:
+# https://devguide.python.org/core-developers/experts/
+#
+# =========
+# Structure
+# =========
+#
+# The CODEOWNERS file is organised by topic area.
+# Please add new entries in alphabetical order within the relevant section.
+# Where possible, keep related files together. For example, documentation,
+# code, and tests for a given item should all be listed in the same place.
+#
+# GitHub usernames should be aligned to column 31, or the next multiple
+# of three if the relevant paths are too long to fit.
+#
+# Top-level sections are:
+#
+# * Buildbots, Continuous Integration, and Testing
+# project-wide configuration files, internal tools for use in CI,
+# linting.
+# * Build System
+# the Makefile, autoconf, and other autotools files.
+# * Documentation
+# broader sections of documentation, documentation tools
+# * Internal Tools & Data
+# internal tools, integration with external systems,
+# entries that don't fit elsewhere
+# * Platform Support
+# relating to support for specific platforms
+# * Interpreter Core
+# the grammar, parser, compiler, interpreter, etc.
+# * Standard Library
+# standard library modules (from both Lib and Modules)
+# and related files (such as their tests and docs)
+# * Exclusions
+# exclusions from .github/CODEOWNERS should go at the very end
+# because the final matching pattern will take precedence.
+
+# ----------------------------------------------------------------------------
+# Buildbots, Continuous Integration, and Testing
+# ----------------------------------------------------------------------------
# Azure Pipelines
.azure-pipelines/ @AA-Turner
# GitHub & related scripts
-.github/** @ezio-melotti @hugovk @AA-Turner
-Tools/build/compute-changes.py @AA-Turner
-Tools/build/verify_ensurepip_wheels.py @AA-Turner
+.github/ @ezio-melotti @hugovk @AA-Turner
+Tools/build/compute-changes.py @AA-Turner
+Tools/build/verify_ensurepip_wheels.py @AA-Turner @pfmoore @pradyunsg
-# pre-commit
+# Pre-commit
.pre-commit-config.yaml @hugovk
.ruff.toml @hugovk @AlexWaygood @AA-Turner
-# Build system (autotools)
-configure* @erlend-aasland @corona10 @AA-Turner
-Makefile.pre.in @erlend-aasland @AA-Turner
-Modules/Setup* @erlend-aasland @AA-Turner
-Tools/build/regen-configure.sh @AA-Turner
+# Patchcheck
+Tools/patchcheck/ @AA-Turner
+
+
+# ----------------------------------------------------------------------------
+# Build System
+# ----------------------------------------------------------------------------
+
+# Autotools
+configure* @erlend-aasland @corona10 @AA-Turner
+Makefile.pre.in @erlend-aasland @AA-Turner
+Modules/Setup* @erlend-aasland @AA-Turner
+Tools/build/regen-configure.sh @AA-Turner
+
+
+# ----------------------------------------------------------------------------
+# Documentation
+# ----------------------------------------------------------------------------
+
+# Internal Docs
+InternalDocs/ @AA-Turner
+
+# Tools, Configuration, etc
+Doc/Makefile @AA-Turner @hugovk
+Doc/_static/ @AA-Turner @hugovk
+Doc/conf.py @AA-Turner @hugovk
+Doc/make.bat @AA-Turner @hugovk
+Doc/requirements.txt @AA-Turner @hugovk
+Doc/tools/ @AA-Turner @hugovk
-# argparse
-**/*argparse* @savannahostrowski
+# PR Previews
+.readthedocs.yml @AA-Turner
+
+# Sections
+Doc/reference/ @willingc @AA-Turner
+Doc/whatsnew/ @AA-Turner
-# asyncio
-**/*asyncio* @1st1 @asvetlov @kumaraditya303 @willingc
-# Core
-**/*context* @1st1
+# ----------------------------------------------------------------------------
+# Internal Tools and Data
+# ----------------------------------------------------------------------------
+
+# Argument Clinic
+Tools/clinic/ @erlend-aasland @AA-Turner
+Lib/test/test_clinic.py @erlend-aasland @AA-Turner
+Doc/howto/clinic.rst @erlend-aasland @AA-Turner
+
+# C Analyser
+Tools/c-analyzer/ @ericsnowcurrently
+
+# Fuzzing
+Modules/_xxtestfuzz/ @ammaraskar
+
+# Limited C API & Stable ABI
+Doc/c-api/stable.rst @encukou
+Doc/data/*.abi @encukou
+Misc/stable_abi.toml @encukou
+Tools/build/stable_abi.py @encukou
+
+# SBOM
+Misc/externals.spdx.json @sethmlarson
+Misc/sbom.spdx.json @sethmlarson
+Tools/build/generate_sbom.py @sethmlarson
+
+
+# ----------------------------------------------------------------------------
+# Platform Support
+# ----------------------------------------------------------------------------
+
+# Android
+Android/ @mhsmith @freakboy3742
+Doc/using/android.rst @mhsmith @freakboy3742
+Lib/_android_support.py @mhsmith @freakboy3742
+Lib/test/test_android.py @mhsmith @freakboy3742
+
+# iOS
+Doc/using/ios.rst @freakboy3742
+Lib/_ios_support.py @freakboy3742
+iOS/ @freakboy3742
+
+# macOS
+Mac/ @python/macos-team
+Lib/_osx_support.py @python/macos-team
+Lib/test/test__osx_support.py @python/macos-team
+
+# WebAssembly
+Tools/wasm/README.md @brettcannon @freakboy3742
+
+# WebAssembly (Emscripten)
+Tools/wasm/config.site-wasm32-emscripten @freakboy3742
+Tools/wasm/emscripten @freakboy3742
+
+# WebAssembly (WASI)
+Tools/wasm/wasi-env @brettcannon
+Tools/wasm/wasi.py @brettcannon
+Tools/wasm/wasi @brettcannon
+
+# Windows
+PC/ @python/windows-team
+PCbuild/ @python/windows-team
+
+# Windows installer packages
+Tools/msi/ @python/windows-team
+Tools/nuget/ @python/windows-team
+
+# Windows Launcher
+PC/launcher.c @python/windows-team @vsajip
+
+
+# ----------------------------------------------------------------------------
+# Interpreter Core
+# ----------------------------------------------------------------------------
+
+# AST
+Lib/_ast_unparse.py @isidentical @JelleZijlstra @eclips4 @tomasr8
+Lib/ast.py @isidentical @JelleZijlstra @eclips4 @tomasr8
+Lib/test/test_ast/ @eclips4 @tomasr8
+Parser/asdl.py @isidentical @JelleZijlstra @eclips4 @tomasr8
+Parser/asdl_c.py @isidentical @JelleZijlstra @eclips4 @tomasr8
+Python/ast.c @isidentical @JelleZijlstra @eclips4 @tomasr8
+Python/ast_preprocess.c @isidentical @eclips4 @tomasr8
+
+# Built-in types
+Objects/call.c @markshannon
+Objects/codeobject.c @markshannon
+Objects/dict* @methane @markshannon
+Objects/frameobject.c @markshannon
**/*genobject* @markshannon
-**/*hamt* @1st1
-**/*jit* @brandtbucher @savannahostrowski @diegorusso
-Python/perf_jit_trampoline.c # Exclude the owners of "**/*jit*", above.
+Objects/object.c @ZeroIntensity
Objects/set* @rhettinger
-Objects/dict* @methane @markshannon
+Objects/type* @markshannon
Objects/typevarobject.c @JelleZijlstra
Objects/unionobject.c @JelleZijlstra
-Objects/type* @markshannon
-Objects/codeobject.c @markshannon
-Objects/frameobject.c @markshannon
-Objects/call.c @markshannon
-Objects/object.c @ZeroIntensity
-Python/ceval*.c @markshannon
-Python/ceval*.h @markshannon
+
+# Byte code interpreter ('the eval loop')
+Python/bytecodes.c @markshannon
+Python/ceval* @markshannon
+Tools/cases_generator/ @markshannon
+
+# Compiler (AST to byte code)
+Python/assemble.c @markshannon @iritkatriel
Python/codegen.c @markshannon @iritkatriel
Python/compile.c @markshannon @iritkatriel
-Python/assemble.c @markshannon @iritkatriel
Python/flowgraph.c @markshannon @iritkatriel
Python/instruction_sequence.c @iritkatriel
-Python/bytecodes.c @markshannon
-Python/optimizer*.c @markshannon
-Python/optimizer_analysis.c @Fidget-Spinner @tomasr8
-Python/optimizer_bytecodes.c @Fidget-Spinner @tomasr8
-Python/optimizer_symbols.c @tomasr8
Python/symtable.c @JelleZijlstra @carljm
-Lib/_pyrepl/* @pablogsal @lysnikolaou @ambv
-Lib/test/test_patma.py @brandtbucher
-Lib/test/test_type_*.py @JelleZijlstra
-Lib/test/test_capi/test_misc.py @markshannon
-Lib/test/test_pyrepl/* @pablogsal @lysnikolaou @ambv
-Tools/c-analyzer/ @ericsnowcurrently
-# dbm
-**/*dbm* @corona10 @erlend-aasland @serhiy-storchaka
-
-# Doc/ tools
-Doc/conf.py @AA-Turner @hugovk
-Doc/Makefile @AA-Turner @hugovk
-Doc/make.bat @AA-Turner @hugovk
-Doc/requirements.txt @AA-Turner @hugovk
-Doc/_static/** @AA-Turner @hugovk
-Doc/tools/** @AA-Turner @hugovk
-.readthedocs.yml @AA-Turner
+# Context variables & HAMT
+**/contextvars* @1st1
+**/*hamt* @1st1
+Include/cpython/context.h @1st1
+Include/internal/pycore_context.h @1st1
+Lib/test/test_context.py @1st1
+Python/context.c @1st1
-# runtime state/lifecycle
-**/*pylifecycle* @ericsnowcurrently @ZeroIntensity
-**/*pystate* @ericsnowcurrently @ZeroIntensity
-**/*preconfig* @ericsnowcurrently
-**/*initconfig* @ericsnowcurrently
-**/*pathconfig* @ericsnowcurrently
-**/*sysmodule* @ericsnowcurrently
+# Core Modules
**/*bltinmodule* @ericsnowcurrently
-**/*gil* @ericsnowcurrently
-Include/internal/pycore_runtime.h @ericsnowcurrently
-Include/internal/pycore_interp.h @ericsnowcurrently
-Include/internal/pycore_tstate.h @ericsnowcurrently
-Include/internal/pycore_*_state.h @ericsnowcurrently
-Include/internal/pycore_*_init.h @ericsnowcurrently
-Include/internal/pycore_atexit.h @ericsnowcurrently
-Include/internal/pycore_freelist.h @ericsnowcurrently
-Include/internal/pycore_global_objects.h @ericsnowcurrently
-Include/internal/pycore_obmalloc.h @ericsnowcurrently
-Include/internal/pycore_pymem.h @ericsnowcurrently
-Include/internal/pycore_stackref.h @Fidget-Spinner
-Modules/main.c @ericsnowcurrently
-Programs/_bootstrap_python.c @ericsnowcurrently
-Programs/python.c @ericsnowcurrently
-Tools/build/generate_global_objects.py @ericsnowcurrently
-
-# Initialization
-Doc/library/sys_path_init.rst @FFY00
-Doc/c-api/init_config.rst @FFY00
-
-# getpath
-**/*getpath* @FFY00
-
-# site
-**/*site.py @FFY00
-Doc/library/site.rst @FFY00
+**/*sysmodule* @ericsnowcurrently
# Exceptions
Lib/test/test_except*.py @iritkatriel
Objects/exceptions.c @iritkatriel
-# Hashing & cryptographic primitives
-**/*hashlib* @gpshead @tiran @picnixz
-**/*hashopenssl* @gpshead @tiran @picnixz
-**/*pyhash* @gpshead @tiran @picnixz
-Modules/*blake* @gpshead @tiran @picnixz
-Modules/*md5* @gpshead @tiran @picnixz
-Modules/*sha* @gpshead @tiran @picnixz
-Modules/_hacl/** @gpshead @picnixz
-**/*hmac* @gpshead @picnixz
-
-# libssl
-**/*ssl* @gpshead @picnixz
-
-# logging
-**/*logging* @vsajip
-
-# venv
-**/*venv* @vsajip @FFY00
+# Getpath
+Lib/test/test_getpath.py @FFY00
+Modules/getpath* @FFY00
-# Launcher
-/PC/launcher.c @vsajip
+# Hashing / ``hash()`` and related
+Include/cpython/pyhash.h @gpshead @picnixz @tiran
+Include/internal/pycore_pyhash.h @gpshead @picnixz @tiran
+Include/pyhash.h @gpshead @picnixz @tiran
+Python/pyhash.c @gpshead @picnixz @tiran
-# HTML
-/Lib/html/ @ezio-melotti
-/Lib/_markupbase.py @ezio-melotti
-/Lib/test/test_html*.py @ezio-melotti
-/Tools/build/parse_html5_entities.py @ezio-melotti
-
-# Import (including importlib).
+# The import system (including importlib)
**/*import* @brettcannon @ericsnowcurrently @ncoghlan @warsaw
-/Python/import.c @kumaraditya303
-Python/dynload_*.c @ericsnowcurrently
+Python/import.c @brettcannon @ericsnowcurrently @ncoghlan @warsaw @kumaraditya303
**/*freeze* @ericsnowcurrently
**/*frozen* @ericsnowcurrently
**/*modsupport* @ericsnowcurrently
**/*pythonrun* @ericsnowcurrently
**/*runpy* @ericsnowcurrently
**/*singlephase* @ericsnowcurrently
-Lib/test/test_module/ @ericsnowcurrently
Doc/c-api/module.rst @ericsnowcurrently
-**/*importlib/resources/* @jaraco @warsaw @FFY00
-**/*importlib/metadata/* @jaraco @warsaw
+Lib/test/test_module/ @ericsnowcurrently
+Python/dynload_*.c @ericsnowcurrently
+
+# Initialisation
+**/*initconfig* @ericsnowcurrently
+**/*pathconfig* @ericsnowcurrently
+**/*preconfig* @ericsnowcurrently
+Doc/library/sys_path_init.rst @FFY00
+Doc/c-api/init_config.rst @FFY00
+
+# Interpreter main program
+Modules/main.c @ericsnowcurrently
+Programs/_bootstrap_python.c @ericsnowcurrently
+Programs/python.c @ericsnowcurrently
+
+# JIT
+Include/internal/pycore_jit.h @brandtbucher @savannahostrowski @diegorusso
+Python/jit.c @brandtbucher @savannahostrowski @diegorusso
+Tools/jit/ @brandtbucher @savannahostrowski @diegorusso
+InternalDocs/jit.md @brandtbucher @savannahostrowski @diegorusso @AA-Turner
+
+# Micro-op / μop / Tier 2 Optimiser
+Python/optimizer.c @markshannon
+Python/optimizer_analysis.c @markshannon @tomasr8 @Fidget-Spinner
+Python/optimizer_bytecodes.c @markshannon @tomasr8 @Fidget-Spinner
+Python/optimizer_symbols.c @markshannon @tomasr8
+
+# Parser, Lexer, and Grammar
+Grammar/python.gram @pablogsal @lysnikolaou
+Lib/test/test_peg_generator/ @pablogsal @lysnikolaou
+Lib/test/test_tokenize.py @pablogsal @lysnikolaou
+Lib/tokenize.py @pablogsal @lysnikolaou
+Parser/ @pablogsal @lysnikolaou
+Tools/peg_generator/ @pablogsal @lysnikolaou
+
+# Runtime state/lifecycle
+**/*gil* @ericsnowcurrently
+**/*pylifecycle* @ericsnowcurrently @ZeroIntensity
+**/*pystate* @ericsnowcurrently @ZeroIntensity
+Include/internal/pycore_*_init.h @ericsnowcurrently
+Include/internal/pycore_*_state.h @ericsnowcurrently
+Include/internal/pycore_atexit.h @ericsnowcurrently
+Include/internal/pycore_freelist.h @ericsnowcurrently
+Include/internal/pycore_global_objects.h @ericsnowcurrently
+Include/internal/pycore_interp.h @ericsnowcurrently
+Include/internal/pycore_obmalloc.h @ericsnowcurrently
+Include/internal/pycore_pymem.h @ericsnowcurrently
+Include/internal/pycore_runtime.h @ericsnowcurrently
+Include/internal/pycore_stackref.h @Fidget-Spinner
+Include/internal/pycore_tstate.h @ericsnowcurrently
+Tools/build/generate_global_objects.py @ericsnowcurrently
+
+# Remote Debugging
+Python/remote_debug.h @pablogsal
+Python/remote_debugging.c @pablogsal
+Modules/_remote_debugging_module.c @pablogsal @ambv @1st1
+
+# Sub-Interpreters
+**/*crossinterp* @ericsnowcurrently
+**/*interpreteridobject.* @ericsnowcurrently
+Doc/library/concurrent.interpreters.rst @ericsnowcurrently
+Lib/concurrent/futures/interpreter.py @ericsnowcurrently
+Lib/concurrent/interpreters/ @ericsnowcurrently
+Lib/test/support/channels.py @ericsnowcurrently
+Lib/test/test__interp*.py @ericsnowcurrently
+Lib/test/test_interpreters/ @ericsnowcurrently
+Modules/_interp*module.c @ericsnowcurrently
+
+# Template string literals (t-strings)
+Lib/test/test_tstring.py @lysnikolaou
+Objects/interpolationobject.c @lysnikolaou
+Objects/templateobject.c @lysnikolaou
+
+# Tests
+Lib/test/test_patma.py @brandtbucher
+Lib/test/test_type_*.py @JelleZijlstra
+Lib/test/test_capi/test_misc.py @markshannon
+
+
+# ----------------------------------------------------------------------------
+# Standard Library
+# ----------------------------------------------------------------------------
+
+# Annotationlib
+Doc/library/annotationlib.rst @JelleZijlstra
+Lib/annotationlib.py @JelleZijlstra
+Lib/test/test_annotationlib.py @JelleZijlstra
+
+# Argparse
+Doc/**/argparse*.rst @savannahostrowski
+Lib/argparse.py @savannahostrowski
+Lib/test/test_argparse.py @savannahostrowski
+
+# Asyncio
+Doc/library/asyncio*.rst @1st1 @asvetlov @kumaraditya303 @willingc
+InternalDocs/asyncio.md @1st1 @asvetlov @kumaraditya303 @willingc @AA-Turner
+Lib/asyncio/ @1st1 @asvetlov @kumaraditya303 @willingc
+Lib/test/test_asyncio/ @1st1 @asvetlov @kumaraditya303 @willingc
+Modules/_asynciomodule.c @1st1 @asvetlov @kumaraditya303 @willingc
+
+# Bisect
+Doc/library/bisect.rst @rhettinger
+Lib/bisect.py @rhettinger
+Lib/test/test_bisect.py @rhettinger
+Modules/_bisectmodule.c @rhettinger
# Calendar
Lib/calendar.py @AA-Turner
Lib/test/test_calendar.py @AA-Turner
+# Cryptographic Primitives and Applications
+**/*hashlib* @gpshead @picnixz @tiran
+**/*hashopenssl* @gpshead @picnixz @tiran
+**/*hmac* @gpshead @picnixz
+**/*ssl* @gpshead @picnixz
+Modules/_hacl/ @gpshead @picnixz
+Modules/*blake* @gpshead @picnixz @tiran
+Modules/*md5* @gpshead @picnixz @tiran
+Modules/*sha* @gpshead @picnixz @tiran
+
+# Codecs
+Modules/cjkcodecs/ @corona10
+Tools/unicode/gencjkcodecs.py @corona10
+
+# Collections
+Doc/library/collections.abc.rst @rhettinger
+Doc/library/collections.rst @rhettinger
+Lib/_collections_abc.py @rhettinger
+Lib/collections/ @rhettinger
+Lib/test/test_collections.py @rhettinger
+Modules/_collectionsmodule.c @rhettinger
+
+# Colorize
+Lib/_colorize.py @hugovk
+Lib/test/test__colorize.py @hugovk
+
+# Config Parser
+Lib/configparser.py @jaraco
+Lib/test/test_configparser.py @jaraco
+
+# Dataclasses
+Doc/library/dataclasses.rst @ericvsmith
+Lib/dataclasses.py @ericvsmith
+Lib/test/test_dataclasses/ @ericvsmith
+
# Dates and times
-**/*datetime* @pganssle @abalkin
-**/*str*time* @pganssle @abalkin
-Doc/library/time.rst @pganssle @abalkin
-Lib/test/test_time.py @pganssle @abalkin
-Modules/timemodule.c @pganssle @abalkin
-Python/pytime.c @pganssle @abalkin
-Include/internal/pycore_time.h @pganssle @abalkin
+Doc/**/*time.rst @pganssle @abalkin
+Include/datetime.h @pganssle @abalkin
+Include/internal/pycore_time.h @pganssle @abalkin
+Lib/*time.py @pganssle @abalkin
+Lib/test/datetimetester.py @pganssle @abalkin
+Lib/test/test_*time.py @pganssle @abalkin
+Modules/*time* @pganssle @abalkin
+Python/pytime.c @pganssle @abalkin
+
+# Dbm
+Doc/library/dbm.rst @corona10 @erlend-aasland @serhiy-storchaka
+Lib/dbm/ @corona10 @erlend-aasland @serhiy-storchaka
+Lib/test/test_dbm*.py @corona10 @erlend-aasland @serhiy-storchaka
+Modules/*dbm* @corona10 @erlend-aasland @serhiy-storchaka
# Email and related
**/*mail* @python/email-team
**/*imap* @python/email-team
**/*poplib* @python/email-team
-# Exclude .mailmap from being owned by @python/email-team
-/.mailmap
+# Ensurepip
+Doc/library/ensurepip.rst @pfmoore @pradyunsg
+Lib/ensurepip/ @pfmoore @pradyunsg
+Lib/test/test_ensurepip.py @pfmoore @pradyunsg
+
+# Enum
+Doc/howto/enum.rst @ethanfurman
+Doc/library/enum.rst @ethanfurman
+Lib/enum.py @ethanfurman
+Lib/test/test_enum.py @ethanfurman
+Lib/test/test_json/test_enum.py @ethanfurman
+
+# FTP
+Doc/library/ftplib.rst @giampaolo
+Lib/ftplib.py @giampaolo
+Lib/test/test_ftplib.py @giampaolo
+
+# Functools
+Doc/library/functools.rst @rhettinger
+Lib/functools.py @rhettinger
+Lib/test/test_functools.py @rhettinger
+Modules/_functoolsmodule.c @rhettinger
# Garbage collector
-/Modules/gcmodule.c @pablogsal
-/Doc/library/gc.rst @pablogsal
+Modules/gcmodule.c @pablogsal
+Doc/library/gc.rst @pablogsal
-# Parser
-/Parser/ @pablogsal @lysnikolaou
-/Tools/peg_generator/ @pablogsal @lysnikolaou
-/Lib/test/test_peg_generator/ @pablogsal @lysnikolaou
-/Grammar/python.gram @pablogsal @lysnikolaou
-/Lib/tokenize.py @pablogsal @lysnikolaou
-/Lib/test/test_tokenize.py @pablogsal @lysnikolaou
+# Gettext
+Doc/library/gettext.rst @tomasr8
+Lib/gettext.py @tomasr8
+Lib/test/test_gettext.py @tomasr8
+Tools/i18n/pygettext.py @tomasr8
-# Code generator
-/Tools/cases_generator/ @markshannon
+# Heapq
+Doc/library/heapq* @rhettinger
+Lib/heapq.py @rhettinger
+Lib/test/test_heapq.py @rhettinger
+Modules/_heapqmodule.c @rhettinger
-# AST
-Python/ast.c @isidentical @JelleZijlstra @eclips4 @tomasr8
-Python/ast_preprocess.c @isidentical @eclips4 @tomasr8
-Parser/asdl.py @isidentical @JelleZijlstra @eclips4 @tomasr8
-Parser/asdl_c.py @isidentical @JelleZijlstra @eclips4 @tomasr8
-Lib/ast.py @isidentical @JelleZijlstra @eclips4 @tomasr8
-Lib/_ast_unparse.py @isidentical @JelleZijlstra @eclips4 @tomasr8
-Lib/test/test_ast/ @eclips4 @tomasr8
-
-# Mock
-/Lib/unittest/mock.py @cjw296
-/Lib/test/test_unittest/testmock/* @cjw296
-
-# multiprocessing
-**/*multiprocessing* @gpshead
-
-# pydoc
+# HTML
+Doc/library/html* @ezio-melotti
+Lib/html/ @ezio-melotti
+Lib/_markupbase.py @ezio-melotti
+Lib/test/test_html*.py @ezio-melotti
+Tools/build/parse_html5_entities.py @ezio-melotti
+
+# IDLE
+Doc/library/idle.rst @terryjreedy
+Lib/idlelib/ @terryjreedy
+Lib/turtledemo/ @terryjreedy
+
+# importlib.metadata
+Doc/library/importlib.metadata.rst @jaraco @warsaw
+Lib/importlib/metadata/ @jaraco @warsaw
+Lib/test/test_importlib/metadata/ @jaraco @warsaw
+
+# importlib.resources
+Doc/library/importlib.resources.abc.rst @jaraco @warsaw
+Doc/library/importlib.resources.rst @jaraco @warsaw
+Lib/importlib/resources/ @jaraco @warsaw @FFY00
+Lib/test/test_importlib/resources/ @jaraco @warsaw @FFY00
+
+# Itertools
+Doc/library/itertools.rst @rhettinger
+Lib/test/test_itertools.py @rhettinger
+Modules/itertoolsmodule.c @rhettinger
+
+# Logging
+Doc/**/logging* @vsajip
+Lib/logging/ @vsajip
+Lib/test/test_logging.py @vsajip
+
+# Multiprocessing
+Doc/library/multiprocessing*.rst @gpshead
+Lib/multiprocessing/ @gpshead
+Lib/test/*multiprocessing.py @gpshead
+Lib/test/test_multiprocessing*/ @gpshead
+Modules/_multiprocessing/ @gpshead
+
+# Pathlib
+Doc/library/pathlib.rst @barneygale
+Lib/pathlib/ @barneygale
+Lib/test/test_pathlib/ @barneygale
+
+# Pdb & Bdb
+Doc/library/bdb.rst @gaogaotiantian
+Doc/library/pdb.rst @gaogaotiantian
+Lib/bdb.py @gaogaotiantian
+Lib/pdb.py @gaogaotiantian
+Lib/test/test_bdb.py @gaogaotiantian
+Lib/test/test_pdb.py @gaogaotiantian
+Lib/test/test_remote_pdb.py @gaogaotiantian
+
+# Pydoc
Lib/pydoc.py @AA-Turner
Lib/pydoc_data/ @AA-Turner
Lib/test/test_pydoc/ @AA-Turner
-# SQLite 3
-**/*sqlite* @berkerpeksag @erlend-aasland
+# PyREPL
+Lib/_pyrepl/ @pablogsal @lysnikolaou @ambv
+Lib/test/test_pyrepl/ @pablogsal @lysnikolaou @ambv
+
+# Random
+Doc/library/random.rst @rhettinger
+Lib/random.py @rhettinger
+Lib/test/test_random.py @rhettinger
+Modules/_randommodule.c @rhettinger
-# subprocess
-/Lib/subprocess.py @gpshead
-/Lib/test/test_subprocess.py @gpshead
-/Modules/*subprocess* @gpshead
+# Shutil
+Doc/library/shutil.rst @giampaolo
+Lib/shutil.py @giampaolo
+Lib/test/test_shutil.py @giampaolo
-# debugger
-**/*pdb* @gaogaotiantian
-**/*bdb* @gaogaotiantian
+# Site
+Lib/site.py @FFY00
+Lib/test/test_site.py @FFY00
+Doc/library/site.rst @FFY00
+
+# string.templatelib
+Doc/library/string.templatelib.rst @lysnikolaou @AA-Turner
+Lib/string/templatelib.py @lysnikolaou @AA-Turner
+Lib/test/test_string/test_templatelib.py @lysnikolaou @AA-Turner
+
+# Sysconfig
+**/*sysconfig* @FFY00
-# types
+# SQLite 3
+Doc/library/sqlite3.rst @berkerpeksag @erlend-aasland
+Lib/sqlite3/ @berkerpeksag @erlend-aasland
+Lib/test/test_sqlite3/ @berkerpeksag @erlend-aasland
+Modules/_sqlite/ @berkerpeksag @erlend-aasland
+
+# Subprocess
+Lib/subprocess.py @gpshead
+Lib/test/test_subprocess.py @gpshead
+Modules/*subprocess* @gpshead
+
+# Tarfile
+Doc/library/tarfile.rst @ethanfurman
+Lib/tarfile.py @ethanfurman
+Lib/test/test_tarfile.py @ethanfurman
+
+# TOML
+Doc/library/tomllib.rst @encukou @hauntsaninja
+Lib/test/test_tomllib/ @encukou @hauntsaninja
+Lib/tomllib/ @encukou @hauntsaninja
+
+# Typing
+Doc/library/typing.rst @JelleZijlstra @AlexWaygood
+Lib/test/test_typing.py @JelleZijlstra @AlexWaygood
+Lib/test/typinganndata/ @JelleZijlstra @AlexWaygood
+Lib/typing.py @JelleZijlstra @AlexWaygood
+Modules/_typingmodule.c @JelleZijlstra @AlexWaygood
+
+# Types
Lib/test/test_types.py @AA-Turner
Lib/types.py @AA-Turner
Modules/_typesmodule.c @AA-Turner
-# Limited C API & stable ABI
-Tools/build/stable_abi.py @encukou
-Misc/stable_abi.toml @encukou
-Doc/data/*.abi @encukou
-Doc/c-api/stable.rst @encukou
-
-# Windows
-/PC/ @python/windows-team
-/PCbuild/ @python/windows-team
+# Unittest
+Lib/unittest/mock.py @cjw296
+Lib/test/test_unittest/testmock/ @cjw296
# Urllib
**/*robotparser* @berkerpeksag
-# Windows installer packages
-/Tools/msi/ @python/windows-team
-/Tools/nuget/ @python/windows-team
+# Venv
+**/*venv* @vsajip @FFY00
+
+# Weakref
+**/*weakref* @kumaraditya303
+
+# Zipfile.Path
+Lib/test/test_zipfile/_path/ @jaraco
+Lib/zipfile/_path/ @jaraco
# Zstandard
Lib/compression/zstd/ @AA-Turner
Lib/test/test_zstd.py @AA-Turner
Modules/_zstd/ @AA-Turner
-# Misc
-**/*itertools* @rhettinger
-**/*collections* @rhettinger
-**/*random* @rhettinger
-**/*bisect* @rhettinger
-**/*heapq* @rhettinger
-**/*functools* @rhettinger
-
-**/*dataclasses* @ericvsmith
-
-**/*ensurepip* @pfmoore @pradyunsg
-
-/Doc/library/idle.rst @terryjreedy
-**/*idlelib* @terryjreedy
-**/*turtledemo* @terryjreedy
-
-**/*annotationlib* @JelleZijlstra
-**/*typing* @JelleZijlstra @AlexWaygood
-
-**/*ftplib @giampaolo
-**/*shutil @giampaolo
-
-**/*enum* @ethanfurman
-**/*cgi* @ethanfurman
-**/*tarfile* @ethanfurman
-
-**/*tomllib* @encukou @hauntsaninja
-
-**/*sysconfig* @FFY00
-
-**/*cjkcodecs* @corona10
-
-# Patchcheck
-Tools/patchcheck/ @AA-Turner
-
-# macOS
-/Mac/ @python/macos-team
-**/*osx_support* @python/macos-team
-
-# pathlib
-**/*pathlib* @barneygale
-
-# zipfile.Path
-**/*zipfile/_path/* @jaraco
-
-# Argument Clinic
-/Tools/clinic/** @erlend-aasland @AA-Turner
-/Lib/test/test_clinic.py @erlend-aasland @AA-Turner
-Doc/howto/clinic.rst @erlend-aasland @AA-Turner
-
-# Subinterpreters
-**/*interpreteridobject.* @ericsnowcurrently
-**/*crossinterp* @ericsnowcurrently
-Modules/_interp*module.c @ericsnowcurrently
-Lib/test/test__interp*.py @ericsnowcurrently
-Lib/concurrent/interpreters/ @ericsnowcurrently
-Lib/test/support/channels.py @ericsnowcurrently
-Doc/library/concurrent.interpreters.rst @ericsnowcurrently
-Lib/test/test_interpreters/ @ericsnowcurrently
-Lib/concurrent/futures/interpreter.py @ericsnowcurrently
-
-# Android
-**/*Android* @mhsmith @freakboy3742
-**/*android* @mhsmith @freakboy3742
-
-# iOS (but not termios)
-**/iOS* @freakboy3742
-**/ios* @freakboy3742
-**/*_iOS* @freakboy3742
-**/*_ios* @freakboy3742
-**/*-iOS* @freakboy3742
-**/*-ios* @freakboy3742
+# ----------------------------------------------------------------------------
-# WebAssembly
-Tools/wasm/config.site-wasm32-emscripten @freakboy3742
-/Tools/wasm/README.md @brettcannon @freakboy3742
-/Tools/wasm/wasi-env @brettcannon
-/Tools/wasm/wasi.py @brettcannon
-/Tools/wasm/emscripten @freakboy3742
-/Tools/wasm/wasi @brettcannon
-
-# SBOM
-/Misc/externals.spdx.json @sethmlarson
-/Misc/sbom.spdx.json @sethmlarson
-/Tools/build/generate_sbom.py @sethmlarson
-
-# Config Parser
-Lib/configparser.py @jaraco
-Lib/test/test_configparser.py @jaraco
-
-# Doc sections
-Doc/reference/ @willingc @AA-Turner
-Doc/whatsnew/ @AA-Turner
+# Exclusions from .github/CODEOWNERS should go at the very end
+# because the final matching pattern will take precedence.
-**/*weakref* @kumaraditya303
-
-# Colorize
-Lib/_colorize.py @hugovk
-Lib/test/test__colorize.py @hugovk
-
-# Fuzzing
-Modules/_xxtestfuzz/ @ammaraskar
-
-# t-strings
-**/*interpolationobject* @lysnikolaou
-**/*templateobject* @lysnikolaou
-**/*templatelib* @lysnikolaou @AA-Turner
-**/*tstring* @lysnikolaou
-
-# Remote debugging
-Python/remote_debug.h @pablogsal
-Python/remote_debugging.c @pablogsal
-Modules/_remote_debugging_module.c @pablogsal @ambv @1st1
-
-# gettext
-**/*gettext* @tomasr8
+# Exclude .mailmap from being owned by @python/email-team
+.mailmap
-# Internal Docs
-InternalDocs/ @AA-Turner
+# Exclude Argument Clinic directories
+Modules/**/clinic/
+Objects/**/clinic/
+PC/**/clinic/
+Python/**/clinic/