EVEMISSTechnology

Repository guide · getting started · v3

psf / black · Getting started

Platform metadata describes an uncompromising Python code formatter under an MIT license, 482 analyzed files, latest release 26.5.1. The analysis lists 18 entrypoint records, 17 with __main__ guards, and bounded paths that stop at unresolved boundaries. Dependency records are empty because only requirements-style manifests are parsed, and no installation or run commands are verified.

Original repository
psf/black
License
MIT · open-source license
Analyzed revision · last verified
20622e1259c29bda81831962ace1348ba1921c84 ·

Newer revision observed; the code this guide cites is unchanged. The default branch moved to 5fe7881e6e40, checked 2026-10-03. A revision diff of 48 changed files found no change in the code regions this guide cites. The guide still describes revision 20622e1259c2; repository-wide counts (files, calls and so on) refer to that revision.

Getting started with psf/black: metadata, entrypoints, manifests

Terms used on this page
Entrypoint record
A file the analyzer marks as a place where execution can start. When it carries a __main__ guard excerpt, the file contains an if __name__ == "__main__": block and the excerpt shows what that block calls; without an excerpt, the file was flagged by its name only.
Bounded static execution path
A call chain reconstructed from the source code without running it, stopped after a fixed number of steps. It shows how far the code can be followed on paper, not what happens at run time.
Unresolved boundary
Where a static path stops because the next call goes into an external library or cannot be resolved without running the code. It marks the edge of this analysis, not a defect in the repository.
Static relations
Calls and imports found in the source. "External or unresolved" relations point outside the analyzed files.
Module role
The analyzer's label for a file, inferred from how many calls go in and out (for example core, entry/orchestration, leaf). It describes a position in the call graph, not the authors' design.
Test-like files
Files whose names or locations look like tests. This analysis counts them; it does not run them.
Observed · inferred · author-claimed · unresolved
How each statement is supported: read directly from the analyzed files; derived by the analyzer from them; stated by the repository's authors (metadata, README); or not established by this analysis.
Verified
Two uses on these pages. In an analyzer record ("verified provenance", "a verified entrypoint") it means the record was read directly from the analyzed files, which these guides call observed; for an entrypoint, the __main__ guard text is present. Since the analyzer fix of 2026-10-04, a file that only has an entrypoint-like name such as cli.py or main.py is recorded as inferred; guides analyzed before that still call such a file verified, and it is still only a guess about how the file is used. It does not mean the code was run or tested. "Last verified" is the date the guide last passed the lab's checks against the analysis record of the stated revision; it is not a review of the repository itself.

What you are looking at

The metadata also records concrete facts: the primary language is Python, and almost all tracked language bytes are Python — 5,440,093 of about 5.46 million — with small Vim Script, Jupyter Notebook and Dockerfile shares. The license is recorded as MIT, with origin given as both the GitHub API and a repository file. The latest release is 26.5.1, published 2026-05-18, and the repository counted 41,844 stargazers on 2026-09-14. The analyzer's maturity signals list 482 analyzed files, 326 test-like files, 7 manifest files, 9,339 static relation edges and 176 bounded execution paths.

What it needs — and what this packet cannot show

If your question is what to install, this packet cannot answer it. It contains no dependency records; dependency records come only from requirements-style manifests parsed by analyzer v0.10, and none were parsed for this repository. pyproject.toml dependency tables are not parsed, so declared dependencies and version constraints are not listed — even though pyproject.toml is present and classified as a project-level important file. The maturity signals count 7 manifest files in the inventory, but with no parsed-manifest records their contents are not reflected here. Because install, run and build inference is partial and installation commands are not verified, the asset also cannot name packages or versions to install.

How it starts

Eighteen entrypoint records are listed: seventeen whose excerpts show a Python __main__ execution guard — the excerpt fields of those records are where you can see what such a guard looks like — plus one filename-heuristic candidate, action/main.py (the analysis labels it a filename-heuristic candidate, based on the filename rather than a guard excerpt). In the src tree, the package inits src/black/__init__.py and src/blackd/__init__.py each guard a call to patched_main(). Under src/blib2to3/pgen2, driver.py ends with sys.exit(int(not main())), while literals.py and tokenize.py carry smaller, test-oriented guards. In scripts/, diff_shades_gha_helper.py, generate_schema.py and make_width_table.py guard a call to main(); release.py ends with sys.exit(main()) and release_tests.py calls unittest.main(). scripts/fuzz.py's guard runs test_idempotent_any_syntactically_valid_python() and, when the Atheris fuzzing library is available, coverage-guided fuzzing. Guard-bearing records also include tests/test_tokenize.py, whose guard reads stdin, tokenizes it and prints an assert_tokenizes assertion, and paths under tests/data/cases/. The reconstruction tallies 18 entrypoints and 176 bounded execution paths; the five bounded paths listed for action/main.py are execution-path records, and their steps show them terminating immediately at unresolved external boundaries such as Path and os.getenv. The analysis's limitations list records the general point behind that last term: dynamic behaviour of several kinds is not resolved by this static analysis. Runtime behaviour beyond these guard and bounded-path records, including how the package is invoked as an installed command, is not established by this analysis.

Where to look first

README.md, pyproject.toml and LICENSE are classified as project-level important files. The analyzer's learning-path claim advises starting from manifests and important symbols, then tracing the bounded execution path and inspecting unresolved boundaries before changing code; this packet cannot show the manifest contents that advice presupposes, so the advice is not actionable from this packet alone. Its modify-guide claim says to begin modification analysis at the detected entrypoint action/main.py, then verify downstream effects manually. By analyzed file count the top-level tree is tests (326), docs (48), src (48), .github (22), scripts (9), profiling (7), 19 files at the root, and action, plugin and autoload with one file each. src holds the guard-bearing package inits src/black/__init__.py and src/blackd/__init__.py and the src/blib2to3/pgen2 modules named in the entrypoint records. The 326 test-like files are roughly two thirds of all 482 analyzed files; the counts alone do not show what those files contain. docs/ spans 48 files, and entrypoint excerpts show two scripts opening CHANGES.md and docs files such as docs/usage_and_configuration/the_basics.md and docs/integrations/source_version_control.md.

What this analysis cannot tell you

This is a static analysis, and the packet documents the boundary itself. Installation, build and run commands are not verified, and install/run/build inference is partial, which is why this asset contains no commands. Only requirements-style manifests feed dependency records and pyproject.toml dependency tables are not parsed, so the dependency picture here is empty. README-derived statements are extracted line-by-line and may capture code lines instead of prose, so any README claim is author_claimed at best. Reflection, runtime dependency injection, dynamic imports, monkey-patching, generated code, framework runtime wiring and dynamic dispatch are not resolved. Of 9,339 static relation edges, the reconstruction counts only 813 resolved call relations, so most edges remain unresolved or external. The packet also contradicts itself: one teaching claim says no bounded static execution path is available, yet five bounded paths are listed for action/main.py and 176 overall, and the summary prose names scripts/check_pre_commit_rev_in_example.py as the main starting place while the teaching claims point to action/main.py. How the project is meant to be invoked day-to-day is not established.

What the project says about itself

The repository metadata describes the project as 'The uncompromising Python code formatter'; treat that as the authors' self-description, not an analysis finding. The homepage field points to a Black documentation site on Read the Docs, stable channel. Attached topics include formatter, codeformatter, python, pre-commit-hook, autopep8, yapf, gofmt, hacktoberfest and code.

What this analysis could not establish

The writing model's own notes on the analysis record. Identifiers such as lim_3, exec_* or claim_… name records of that analysis; the claims table cites the same records.

  • dependency_records and dependency_manifests_parsed are empty; per lim_3 only requirements-style manifests are parsed, so this repository's declared dependencies are unknown to this asset.
  • Teaching claim claim_4d30ade3e21e states no bounded static execution path is available, but the packet lists five bounded paths for action/main.py (exec_*) and counts 176 overall — internal inconsistency.
  • repository_summary's inferred purpose names scripts/check_pre_commit_rev_in_example.py as the main starting place, while claim_227144a415af names action/main.py — internal inconsistency.
  • Teaching claim claim_31723c5d9328 cites architecture_reconstruction, which does not appear as a record in this packet; the 18-entrypoint and 813-relation tallies rest on that claim alone.
  • Three entrypoint records point into tests/data/cases/; whether their __main__ guards are runnable scripts or fixture content is not disambiguated by the records.
Claims and evidence — 38 claims, 38 supported by an independent verifier

Every substantive statement above is a claim bound to grounding IDs of the analyzed revision. Global grounding IDs are namespaced by the analysis run.

Claim Epistemic status Verifier Grounding (global IDs)
c1 The metadata's primary-language field says Python. observed supported analysis_f07f1c5b3429400e:meta_primary_language
c2 Tracked language bytes are almost entirely Python (5,440,093 of about 5.46 million), with small Vim Script, Jupyter Notebook and Dockerfile shares. observed supported analysis_f07f1c5b3429400e:meta_language_bytes
c3 The license is recorded as MIT, with origin given as both the GitHub API and a repository file. observed supported analysis_f07f1c5b3429400e:meta_license
c4 The latest recorded release is 26.5.1, published 2026-05-18. observed supported analysis_f07f1c5b3429400e:meta_latest_release
c5 The repository counted 41,844 stargazers on 2026-09-14. observed supported analysis_f07f1c5b3429400e:meta_stars
c6 Maturity signals list 482 analyzed files, 326 test-like files, 7 manifest files, 9,339 static relation edges and 176 bounded execution paths. inferred supported analysis_f07f1c5b3429400e:summary_repository
c7 This packet contains no dependency records; dependency records come only from requirements-style manifests parsed by analyzer v0.10, and none were parsed for this repository. observed supported analysis_f07f1c5b3429400e:lim_3
c8 pyproject.toml dependency tables are not parsed, so declared dependencies and version constraints cannot be listed from this packet. observed supported analysis_f07f1c5b3429400e:lim_3
c9 pyproject.toml is present and classified as a project-level important file. observed supported analysis_f07f1c5b3429400e:important_3
c10 Maturity signals count 7 manifest files in the inventory, but the analysis lists no parsed manifests, so their contents are not reflected here. inferred supported analysis_f07f1c5b3429400e:summary_repository, analysis_f07f1c5b3429400e:lim_3
c11 Install, run and build inference is partial, and installation commands are not verified by this analysis. observed supported analysis_f07f1c5b3429400e:lim_2
c12 The packet lists 18 entrypoint records: 17 whose excerpts show a Python __main__ execution guard, plus one filename-heuristic candidate, action/main.py. observed supported analysis_f07f1c5b3429400e:py_entry_6375211a42e2, analysis_f07f1c5b3429400e:py_entry_49b6285f03c4, analysis_f07f1c5b3429400e:py_entry_a7be1b170db3, analysis_f07f1c5b3429400e:py_entry_45e63aec2981, analysis_f07f1c5b3429400e:py_entry_2d43f7cb959d, analysis_f07f1c5b3429400e:py_entry_078791731a33, analysis_f07f1c5b3429400e:py_entry_8be0649f8947, analysis_f07f1c5b3429400e:py_entry_f86a7886b9b8, analysis_f07f1c5b3429400e:py_entry_0ad4d7a9c321, analysis_f07f1c5b3429400e:py_entry_fce0ce2b9b79, analysis_f07f1c5b3429400e:py_entry_479e85cc920d, analysis_f07f1c5b3429400e:py_entry_fae1962d2b1e, analysis_f07f1c5b3429400e:py_entry_2525738168fe, analysis_f07f1c5b3429400e:py_entry_bde361c6e00a, analysis_f07f1c5b3429400e:py_entry_b93757a7ff5d, analysis_f07f1c5b3429400e:py_entry_ae3dafb0586c, analysis_f07f1c5b3429400e:py_entry_7a35d8e2430b, analysis_f07f1c5b3429400e:entry_1
c13 The package inits src/black/__init__.py and src/blackd/__init__.py each carry a __main__ guard whose body calls patched_main(). observed supported analysis_f07f1c5b3429400e:py_entry_fce0ce2b9b79, analysis_f07f1c5b3429400e:py_entry_479e85cc920d
c14 src/blib2to3/pgen2/driver.py's guard ends with sys.exit(int(not main())), src/blib2to3/pgen2/literals.py guards a call to test(), and src/blib2to3/pgen2/tokenize.py's guard, marked as testing, tokenizes stdin or a file named in argv. observed supported analysis_f07f1c5b3429400e:py_entry_fae1962d2b1e, analysis_f07f1c5b3429400e:py_entry_2525738168fe, analysis_f07f1c5b3429400e:py_entry_bde361c6e00a
c15 In scripts/, diff_shades_gha_helper.py, generate_schema.py and make_width_table.py guard a call to main(); release.py's guard ends with sys.exit(main()) and release_tests.py's calls unittest.main(). observed supported analysis_f07f1c5b3429400e:py_entry_a7be1b170db3, analysis_f07f1c5b3429400e:py_entry_2d43f7cb959d, analysis_f07f1c5b3429400e:py_entry_078791731a33, analysis_f07f1c5b3429400e:py_entry_8be0649f8947, analysis_f07f1c5b3429400e:py_entry_f86a7886b9b8
c16 scripts/fuzz.py's guard runs test_idempotent_any_syntactically_valid_python() and, when the Atheris fuzzing library is available, coverage-guided fuzzing. observed supported analysis_f07f1c5b3429400e:py_entry_45e63aec2981
c17 Guard-bearing records also include tests/test_tokenize.py, whose guard reads stdin, tokenizes it and prints an assert_tokenizes assertion, and paths under tests/data/cases/. observed supported analysis_f07f1c5b3429400e:py_entry_0ad4d7a9c321, analysis_f07f1c5b3429400e:py_entry_b93757a7ff5d, analysis_f07f1c5b3429400e:py_entry_ae3dafb0586c, analysis_f07f1c5b3429400e:py_entry_7a35d8e2430b
c18 The analyzer's reconstruction tallies 18 entrypoints and 176 bounded execution paths. inferred supported analysis_f07f1c5b3429400e:claim_31723c5d9328, analysis_f07f1c5b3429400e:summary_repository
c19 All five bounded static paths listed for action/main.py terminate immediately at unresolved external boundaries such as Path and os.getenv. inferred supported analysis_f07f1c5b3429400e:exec_bfd58df29904, analysis_f07f1c5b3429400e:exec_5daffbde25d6, analysis_f07f1c5b3429400e:exec_12046e1e9958, analysis_f07f1c5b3429400e:exec_dbb7510ec43e, analysis_f07f1c5b3429400e:exec_73307b610151
c20 Runtime behaviour beyond these guard and bounded-path records, including how the package is invoked as an installed command, is not established by this analysis. unresolved supported analysis_f07f1c5b3429400e:lim_1, analysis_f07f1c5b3429400e:lim_2
c21 README.md, pyproject.toml and LICENSE are classified as project-level important files. observed supported analysis_f07f1c5b3429400e:important_1, analysis_f07f1c5b3429400e:important_3, analysis_f07f1c5b3429400e:important_4
c22 The analyzer's learning-path claim advises starting from manifests and important symbols, then tracing the bounded execution path and inspecting unresolved boundaries before changing code; this packet cannot show the manifest contents that advice presupposes, so the advice is not actionable from this packet alone. inferred supported analysis_f07f1c5b3429400e:claim_e56db45165bf
c23 The modify-guide claim says to begin modification analysis at the detected entrypoint action/main.py, then verify downstream effects manually. inferred supported analysis_f07f1c5b3429400e:claim_c3ece21fa115
c24 Top-level directories by analyzed file count: tests (326), docs (48), src (48), .github (22), scripts (9), profiling (7), 19 at the root, and action, plugin and autoload with one file each. inferred supported analysis_f07f1c5b3429400e:summary_repository
c25 src holds the guard-bearing package inits src/black/__init__.py and src/blackd/__init__.py and the src/blib2to3/pgen2 modules named in the entrypoint records. observed supported analysis_f07f1c5b3429400e:py_entry_fce0ce2b9b79, analysis_f07f1c5b3429400e:py_entry_479e85cc920d, analysis_f07f1c5b3429400e:py_entry_fae1962d2b1e, analysis_f07f1c5b3429400e:py_entry_2525738168fe, analysis_f07f1c5b3429400e:py_entry_bde361c6e00a
c26 The 326 test-like files are roughly two thirds of all 482 analyzed files; the counts alone do not show what those files contain. inferred supported analysis_f07f1c5b3429400e:summary_repository
c27 Entrypoint excerpts show scripts/check_version_in_basics_example.py and scripts/check_pre_commit_rev_in_example.py opening CHANGES.md and docs files such as docs/usage_and_configuration/the_basics.md and docs/integrations/source_version_control.md. observed supported analysis_f07f1c5b3429400e:py_entry_49b6285f03c4, analysis_f07f1c5b3429400e:py_entry_6375211a42e2
c28 Installation, build and run commands are not verified by this analysis; install/run/build inference is partial. observed supported analysis_f07f1c5b3429400e:lim_2
c29 Only requirements-style manifests feed dependency records and pyproject.toml dependency tables are not parsed, so the dependency picture here is empty. observed supported analysis_f07f1c5b3429400e:lim_3
c30 README claim extraction is line-based and may capture code lines instead of prose, so any README claim is author_claimed at best. observed supported analysis_f07f1c5b3429400e:lim_4
c31 The analysis is static only: reflection, runtime dependency injection, dynamic imports, monkey-patching, generated code, framework runtime wiring and dynamic dispatch are not resolved. observed supported analysis_f07f1c5b3429400e:lim_1
c32 The reconstruction counts 813 resolved static call relations against 9,339 static relation edges, so most edges remain unresolved or external. inferred supported analysis_f07f1c5b3429400e:claim_31723c5d9328, analysis_f07f1c5b3429400e:summary_repository
c33 The packet contradicts itself on runtime flow: one teaching claim says no bounded static execution path is available, yet the packet lists five bounded paths for action/main.py and counts 176 overall. inferred supported analysis_f07f1c5b3429400e:claim_4d30ade3e21e, analysis_f07f1c5b3429400e:exec_bfd58df29904, analysis_f07f1c5b3429400e:summary_repository
c34 The summary prose names scripts/check_pre_commit_rev_in_example.py as the main starting place, while the teaching claims and entrypoint candidate point to action/main.py — a second internal inconsistency. inferred supported analysis_f07f1c5b3429400e:claim_227144a415af, analysis_f07f1c5b3429400e:summary_repository
c35 How the project is meant to be invoked day-to-day is not established by this packet. unresolved supported analysis_f07f1c5b3429400e:lim_1, analysis_f07f1c5b3429400e:lim_2
c36 The repository metadata describes the project as 'The uncompromising Python code formatter'. author_claimed supported analysis_f07f1c5b3429400e:meta_description
c37 The metadata homepage points to a Black documentation site on Read the Docs, stable channel. author_claimed supported analysis_f07f1c5b3429400e:meta_homepage
c38 Repository topics include formatter, codeformatter, python, pre-commit-hook, autopep8, yapf, gofmt, hacktoberfest and code. author_claimed supported analysis_f07f1c5b3429400e:meta_topics

Sources, rights and disclosure · attribution-license-templates/v0.1

Rights notice. Original repository hosted on GitHub. Repository source code, documentation, names, media, and related project materials remain subject to the rights of their respective authors, contributors, and other rights holders and to applicable repository license terms.

Platform notice. GitHub is the source hosting platform for the linked repository. GitHub and related marks are trademarks of GitHub, Inc. EVEMISS Technology is not affiliated with or endorsed by GitHub unless explicitly stated otherwise.

How this page is produced. This page was produced using revision-aware repository analysis and AI-assisted editorial tooling. Technical claims are tied to the analyzed repository revision and may be revalidated when the source repository changes.

AI-assisted analysis. Reviewed by EVEMISS Technology through human–AI collaborative review. · Report a rights concern · Back to the overview