zero-config-claim-audit
Audit documented “zero-config” and “requires configuration” claims against Python source, offline, without importing or executing audited code. Uses only the standard library at runtime. Version 0.1.0; Python 3.9 or newer.
python3 -m pip install .
zero-config-claim-audit ./project
zero-config-claim-audit ./project --json
zero-config-claim-audit ./project --verbose --fail-on HIGH
zero-config-claim-audit --version
The default path is .. Exit codes: 0 PASS, 2 FAIL, 1 usage/input error.
--fail-on MEDIUM (default) fails on HIGH or MEDIUM; --fail-on HIGH still
prints MEDIUM findings but exits 0 for those alone. --ignore RULE,... removes
named rules. JSON includes findings, verified_claims,
verified_optional_reads, and summary. Verbose text lists optional reads.
Verified means supported by these static rules, not a semantic guarantee.
Claims and evidence
Reads root README.md and docs/**/*.md, excluding fenced code; inline code
counts as prose. Case-insensitive, sentence-level zero-config phrases include
zero config, no config, no configuration, no setup, works out of the box,
no config file, no configuration file, configuration-free, setup-free,
no config needed, and no configuration needed. Hyphen/space variants collapse.
Reverse phrases: requires a config file, requires configuration, configuration
required, config file required, you must configure, must be configured.
Sentence negations such as “not”, “isn't”, and “never” suppress claims.
Strong reads include ConfigParser read_file/readfp, tomllib.load and
tomli.load of statically identified opened files, and built-in open,
io.open, or Path open/read_text/read_bytes on config-like paths.
JSON load and YAML load/safe_load count for config-like file objects.
Config-like paths contain config/settings, end in .conf/.ini/.cfg/.toml/.yaml/
.yml, or have a dotfile rc basename, including home-directory joins.
pyproject.toml is excluded as packaging metadata. ConfigParser read()
is deliberately excluded because it silently ignores missing files;
read_dict() is in-memory and excluded.
A positive existence check (os.path.exists, os.path.isfile, Path exists
or is_file) enclosing the read on the same statically resolved path, or an
enclosing try with except FileNotFoundError/OSError, makes a read optional.
Optional reads appear as verified-optional and never falsify a claim.
Rules
| Rule | Severity | Trigger |
|---|---|---|
| documented-zero-config-claim-false | HIGH | Claim plus unguarded production read |
| documented-zero-config-claim-false-test-only | MEDIUM | Claim plus unguarded reads only in tests/fixtures |
| documented-config-required-unused | MEDIUM | Requirement claim without production strong evidence |
One finding per claim family groups all its evidence. No claims passes.
With no Python source, each claimed family gets one HIGH finding.
Production excludes tests/ and fixtures/ trees, test_*.py and *_test.py.
Symlinks are skipped. .env contents are never opened or used as evidence.
Limitations
Static pattern matching is not semantics. Guard detection is syntactic,
same-function, and based on matching statically resolved path literals;
negative guards, indirect control flow, arbitrary wrappers and complex aliases
may be missed. Dynamic paths with no literal are unknown and skipped.
Non-Python source, environment variables alone and a --config flag alone are
out of scope. No reverse HIGH rule exists for undocumented config reads.
Malformed Python and unreadable input produce input errors.
Differentiation
| Tool | Focus compared with this tool |
|---|---|
| config-claim-audit | Default VALUES, rather than whether config is required at all |
| env-drift | Environment PRESENCE, rather than config files |
| auth-claim-audit | CREDENTIAL requirements, rather than general config |
| dotenv-linter | .env syntax, rather than documentation versus code |
| readme-claim-audit | Install/flag/link/version claims, rather than config requirements |
Development
PYTHONPATH=src python3 -m unittest discover -s tests -v
python3 -m build
# Offline fallback if isolated dependencies are unavailable:
python3 -m build --no-isolation
The source distribution includes the fixture corpus and tests. The marker-only
fixture .env contains no credentials and tests enforce that it is never read.
MIT licensed.
Metadata
Release files for zero-config-claim-audit 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| zero_config_claim_audit-0.1.0.tar.gz | 13.8 kB | Without provenance | Details for zero_config_claim_audit-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| zero_config_claim_audit-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for zero_config_claim_audit-0.1.0-py3-none-any.whl |
Total release size: 23.1 kB
Release files / zero_config_claim_audit-0.1.0.tar.gz
| Download URL | zero_config_claim_audit-0.1.0.tar.gz |
|---|---|
| Size | 13.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
12635c42d7d8ef301ddf0bb6eac204b176c82e53cccd4514f2fff5a327e6e2f8
|
|
BLAKE2b-256 checksum How to use checksums |
4954977149d3556fa011b5126e80454d370316b1d8d857544b50e2f461d7799a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / zero_config_claim_audit-0.1.0-py3-none-any.whl
| Download URL | zero_config_claim_audit-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e70c6014d70baddf19adf186d2cce8dc277f9386aabb669c5a324695c945240c
|
|
BLAKE2b-256 checksum How to use checksums |
e1582d016ec6258e95d29dab02d9b4d37312b7306f447c82bfb3f66b80e787f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for zero-config-claim-audit 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.