Code Ownership

Ownership is measured by how many commits each author made to each file in the current tree. It highlights bus-factor risk (files only one person has ever touched) and where knowledge is concentrated. The bus factor is the smallest number of people who are, between them, primary owner of more than half of the files.

Files Tracked
11,056
in the current tree
Bus Factor
2
2 authors are primary owner of 6,268 of 11,056 files
Single-Owner Files
5,493
49.7% of tracked files
Contributors
894
authors who changed files

Bus factor risk — single-owner files

Files only one author has ever changed. The more a file has changed, the more knowledge is at risk if that person leaves.

FileSole ownerCommits
scripts/codemod_docstrings.shAlex Waygood12
crates/ty_ide/src/docstring/document/syntax.rsLérè12
.agents/skills/summarise-ecosystem-results/SKILL.mdAlex Waygood11
crates/ty_ide/src/docstring/markdown/structured.rsLérè11
.agents/skills/summarise-ecosystem-results/assets/report-template.mdAlex Waygood10
crates/ty_ide/src/docstring/document.rsLérè10
.agents/skills/minimizing-ty-ecosystem-changes/SKILL.mdAlex Waygood9
crates/ruff_annotate_snippets/tests/ruff.rsEd Page9
crates/ruff_annotate_snippets/src/renderer/render.rsEd Page9
crates/ruff_linter/resources/test/fixtures/airflow/AIR311_names.pyWei Lee8
Table: the 100 most-changed of 5,493 single-owner files
FileSole ownerCommits
scripts/codemod_docstrings.shAlex Waygood12
crates/ty_ide/src/docstring/document/syntax.rsLérè12
.agents/skills/summarise-ecosystem-results/SKILL.mdAlex Waygood11
crates/ty_ide/src/docstring/markdown/structured.rsLérè11
.agents/skills/summarise-ecosystem-results/assets/report-template.mdAlex Waygood10
crates/ty_ide/src/docstring/document.rsLérè10
.agents/skills/minimizing-ty-ecosystem-changes/SKILL.mdAlex Waygood9
crates/ruff_annotate_snippets/tests/ruff.rsEd Page9
crates/ruff_annotate_snippets/src/renderer/render.rsEd Page9
crates/ruff_linter/resources/test/fixtures/airflow/AIR311_names.pyWei Lee8
crates/ruff_python_semantic/src/analyze/mod.rsCharlie Marsh7
crates/ty_server/tests/e2e/goto_definition.rsMicha Reiser7
crates/ty_python_semantic/resources/mdtest/decorators/total_ordering.mdCharlie Marsh6
crates/ruff_db/src/diagnostic/render/azure.rsBrent Westbrook6
crates/ruff_db/src/diagnostic/render/rdjson.rsBrent Westbrook6
crates/ty_python_semantic/resources/mdtest/function/return_type_inference.mdDavid Peter6
crates/ty_server/src/server/schedule/task.rsMicha Reiser6
crates/ty_ide/src/docstring/document/rst.rsLérè6
crates/ty_project/src/uv/metadata/dependencies.rsZsolt Dollenstein6
crates/ruff_linter/resources/test/fixtures/pyflakes/F601.pyCharlie Marsh5
crates/ruff_db/src/diagnostic/render/gitlab.rsBrent Westbrook5
crates/ruff_db/src/diagnostic/render/pylint.rsBrent Westbrook5
python/py-fuzzer/README.mdAlex Waygood5
.agents/skills/summarise-ecosystem-results/references/subagent-handoff.mdAlex Waygood5
crates/ruff_linter/resources/test/fixtures/ruff/RUF023.pyAlex Waygood5
playground/ruff/src/Editor/SettingsEditor.tsxMicha Reiser5
crates/ty_ide/src/docstring/markdown/general/inline.rsLérè5
crates/ty_ide/src/docstring/markdown.rsLérè5
crates/ruff_linter/src/rules/flake8_tidy_imports/rules/mod.rsCharlie Marsh4
crates/ruff_unicode_names2/src/lib.rsBrent Westbrook4
crates/ruff_unicode_names2_generator/src/lib.rsBrent Westbrook4
crates/ruff_linter/resources/mdtest/flake8-tidy-imports/lazy-import-immediately-resolved.mdBrent Westbrook4
crates/ruff_mdtest/Cargo.tomlBrent Westbrook4
crates/ruff_db/src/diagnostic/render/snapshots/ruff_db__diagnostic__render__github__tests__output.snapBrent Westbrook4
scripts/publish_pr_report.pyZanie Blue4
crates/ty_python_semantic/resources/mdtest/external/django.mdDavid Peter4
crates/ty_python_semantic/src/types/dedicated/django.rsDavid Peter4
crates/ty_python_semantic/resources/mdtest/external/sqlalchemy.mdDavid Peter4
.agents/skills/minimizing-ty-ecosystem-changes/references/advanced-minimization.mdAlex Waygood4
.agents/skills/summarise-ecosystem-results/references/evidence-acquisition.mdAlex Waygood4
crates/ty_python_semantic/resources/mdtest/assignment/unsound.mdAlex Waygood4
crates/ty_python_semantic/resources/lint_docs/unsound-return-statement.mdAlex Waygood4
crates/ruff_linter/resources/test/fixtures/pyflakes/F821_27.pyAlex Waygood4
crates/ruff_python_parser/src/snapshots/ruff_python_parser__lexer__tests__fstring_newline_format_spec.snapMicha Reiser4
crates/ruff_python_parser/src/snapshots/ruff_python_parser__lexer__tests__tstring_newline_format_spec.snapMicha Reiser4
crates/ty_server/tests/e2e/semantic_tokens.rsMicha Reiser4
crates/ruff_python_formatter/resources/test/fixtures/ruff/.editorconfigMicha Reiser4
crates/ruff_python_formatter/tests/snapshots/black_compatibility@cases__pep_572_remove_parens.py.snapMicha Reiser4
crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/binary_implicit_string.pyMicha Reiser4
crates/ty_ide/src/docstring/document/numpy.rsLérè4
crates/ruff_python_parser/resources/invalid/re_lex_logical_token.pyDhruv Manilawala4
crates/ruff_linter/resources/test/fixtures/flake8_type_checking/TC006.pyDavid Salvisberg4
crates/ty_python_semantic/resources/mdtest/import/workspaces.mdAria Desires4
crates/ruff_db/src/system/os/ignore.rsAndrew Gallant4
crates/ruff_linter/resources/test/fixtures/airflow/AIR312.pyWei Lee4
crates/ruff_linter/resources/test/fixtures/airflow/AIR302_common_sql.pyWei Lee4
crates/ruff_linter/resources/test/fixtures/ruff/RUF100_3.pyCharlie Marsh3
docs/.overrides/main.htmlCharlie Marsh3
crates/ruff_linter/resources/test/fixtures/pycodestyle/W605_0.pyCharlie Marsh3
crates/ruff_linter/resources/test/fixtures/ruff/RUF013_0.pyCharlie Marsh3
.claude/hooks/session-start-web.shCarl Meyer3
crates/ruff_unicode_names2_generator/src/phf.rsBrent Westbrook3
crates/ruff/tests/cli/snapshots/cli__lint__output_format_preview_concise.snapBrent Westbrook3
crates/ruff_linter/resources/mdtest/typing.mdBrent Westbrook3
crates/ruff_linter/src/rules/ruff/rules/rule_codes_in_selectors.rsBrent Westbrook3
crates/mdtest/Cargo.tomlBrent Westbrook3
crates/ruff_db/src/diagnostic/render/snapshots/ruff_db__diagnostic__render__azure__tests__output.snapBrent Westbrook3
crates/ruff_db/src/diagnostic/render/snapshots/ruff_db__diagnostic__render__rdjson__tests__output.snapBrent Westbrook3
crates/ruff_db/src/diagnostic/render/snapshots/ruff_db__diagnostic__render__azure__tests__syntax_errors.snapBrent Westbrook3
crates/ruff_db/src/diagnostic/render/snapshots/ruff_db__diagnostic__render__rdjson__tests__syntax_errors.snapBrent Westbrook3
crates/ruff_python_parser/resources/inline/err/invalid_annotation_class.pyBrent Westbrook3
crates/ruff_python_parser/resources/inline/err/invalid_annotation_function.pyBrent Westbrook3
crates/ruff_python_parser/resources/inline/ok/valid_annotation_class.pyBrent Westbrook3
crates/ty_python_semantic/resources/mdtest/type_compendium/always_truthy_falsy.mdDavid Peter3
crates/ty_python_semantic/resources/mdtest/type_compendium/object.mdDavid Peter3
.github/workflows/sync-ruff-security.ymlzaniebot3
.agents/skills/adding-ty-diagnostics/SKILL.mdAlex Waygood3
crates/ty_python_semantic/resources/lint_docs/unsound-assignment.mdAlex Waygood3
crates/ty_python_semantic/resources/lint_docs/unsound-yield.mdAlex Waygood3
.git-blame-ignore-revsAlex Waygood3
crates/ty_python_semantic/resources/mdtest/scripts.mdMicha Reiser3
crates/ty_module_resolver/src/db.rsMicha Reiser3
crates/ruff_python_formatter/src/db.rsMicha Reiser3
crates/ty_server/src/server/schedule/thread/priority.rsMicha Reiser3
playground/ruff/src/index.cssMicha Reiser3
crates/ruff_python_ast_integration_tests/tests/snapshots/source_order__class_type_parameters.snapMicha Reiser3
crates/ruff_python_ast_integration_tests/tests/snapshots/source_order__decorators.snapMicha Reiser3
crates/ruff_python_ast_integration_tests/tests/snapshots/source_order__function_arguments.snapMicha Reiser3
crates/ruff_python_ast_integration_tests/tests/snapshots/source_order__function_positional_only_with_default.snapMicha Reiser3
crates/ruff_python_ast_integration_tests/tests/snapshots/source_order__function_type_parameters.snapMicha Reiser3
crates/ruff_python_ast_integration_tests/tests/snapshots/source_order__type_aliases.snapMicha Reiser3
playground/ruff/src/Editor/PrimarySideBar.tsxMicha Reiser3
playground/ruff/src/Editor/SecondarySideBar.tsxMicha Reiser3
crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_comments7.options.jsonMicha Reiser3
crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_hug_parens_with_braces_and_square_brackets.options.jsonMicha Reiser3
crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_hug_parens_with_braces_and_square_brackets_no_ll1.options.jsonMicha Reiser3
crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_dict_values.options.jsonMicha Reiser3
crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings.options.jsonMicha Reiser3
crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings__east_asian_width.options.jsonMicha Reiser3
crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_long_strings__edge_case.options.jsonMicha Reiser3

Ownership by author

Primary owner = the author with the most commits to a file. Solely owned = files only that author has touched.

AuthorFiles ownedSolely ownedFiles touched
Micha Reiser3,8601,4965,628
Brent Westbrook2,4081,5773,872
Charlie Marsh1,5018784,054
Dhruv Manilawala5363771,804
Alex Waygood223862,022
Dylan1761091,362
Ed Page171117947
Ibraheem Ahmed16511,024
Andrew Gallant135119828
David Peter11024514
konsti6918558
chiri695160
Tom Kuson6817166
InSync6431370
Jane Lewis626157
Zanie Blue5915734
Carl Meyer5722575
Bhuminjay Soni5241158
David Salvisberg4736173
Wei Lee473655
Shunsuke Shibayama4415192
Jelle Zijlstra4330173
Dan Parizher4223266
qdegraaf391894
Auguste Lalande3617245

Showing top 25 of 894 contributors.

Most shared files

Files touched by the most people — shared code where changes are most likely to need coordination.

FileContributorsPrimary ownerOwner share
ruff.schema.json206Charlie Marsh16.7%
README.md176Charlie Marsh53.2%
crates/ruff_linter/src/codes.rs107Brent Westbrook14.5%
Cargo.lock87Charlie Marsh39.2%
crates/ruff_linter/src/checkers/ast/analyze/expression.rs86Charlie Marsh12.2%
crates/ruff_workspace/src/options.rs72Micha Reiser17.8%
crates/ruff_linter/src/checkers/ast/analyze/statement.rs72Charlie Marsh12.0%
Cargo.toml64Charlie Marsh49.5%
CONTRIBUTING.md54Charlie Marsh25.3%
docs/configuration.md53Charlie Marsh20.5%
crates/ty_python_semantic/src/types.rs52Alex Waygood21.0%
.github/workflows/ci.yaml49Micha Reiser19.7%
crates/ty_python_semantic/src/types/diagnostic.rs45Alex Waygood31.5%
crates/ruff_linter/src/rules/ruff/mod.rs45Brent Westbrook16.2%
crates/ty_python_semantic/src/types/infer/builder.rs44Charlie Marsh26.8%
crates/ruff_linter/src/rules/pylint/mod.rs43Steve C19.4%
ty.schema.json40Charlie Marsh21.5%
crates/ty_python_semantic/src/types/class.rs39Alex Waygood22.5%
crates/ty_python_semantic/src/types/infer.rs39Alex Waygood26.0%
crates/ruff_linter/src/checkers/ast/mod.rs39Brent Westbrook23.1%