| 1 | Build system | hatchling (requires = ["hatchling"] in [build-system]) | grep build-backend pyproject.toml | jfia-catalog (data artifact, no build system required) |
| 2 | Python version | >=3.11 in [project] requires-python | grep requires-python pyproject.toml | kr-beneish: >=3.10 is acceptable |
| 3 | Package manager | uv (never pip) | Check CLAUDE.md mentions uv; no requirements.txt present | — |
| 4 | Test invocation | uv run pytest tests/ -v | Check CLAUDE.md for test command | kr-company-registry: bare pytest tests/ -v is acceptable (no uv wrapper needed) |
| 5 | uv.lock committed | File tracked in git | git -C <repo> ls-files uv.lock | jfia-catalog (no dependencies) |
| 6 | conftest.py present | Required in repos that have a tests/ directory | test -f tests/conftest.py | Repos without tests/ are exempt |
| 7 | constants.py present | Required in repos with magic strings/thresholds in code | Check for src/*/constants.py or src/constants.py | kr-trading-calendar (no magic strings beyond holiday list) |
| 8 | Paths module | _paths.py or paths.py in src | find src/ -name '*paths*' | Repos with no file I/O are exempt |
| 9 | Commit message style | Conventional prefix: feat/fix/docs/refactor/test/chore | git log --oneline -5 | — |
| 10 | .claude/ directory | Present at repo root | test -d .claude | jfia-catalog (minimal repo) |
| 11 | compile-bytecode | compile-bytecode = false in [tool.uv] | grep compile-bytecode pyproject.toml | Repos without pyproject.toml |
| 12 | CLAUDE.md present | Present at repo root | test -f CLAUDE.md | — |
| 13 | Known Gaps section | ## Known Gaps table in CLAUDE.md | grep '## Known Gaps' CLAUDE.md | Hub exempt (coordinator, not code) |
| 14 | No stale repo-name references | Zero matches for kr-forensic-finance in .md, .toml, .conf files | grep -rl "kr-forensic-finance" --include="*.md" --include="*.toml" --include="*.conf" | Files under reports/ (historical session logs) |