| 1 |
PEP 8 casing |
Pass |
Modules constants.py, main.py; functions create_table, main; constants COLUMN_NAME, POKEMON |
| 2 |
Names state purpose; no abbreviations |
Pass |
Minor: the comprehension variable type_ in main.py could be pokemon_type, which avoids the trailing underscore. Not a defect |
| 3 |
Formatter and linter pass, no suppressions |
Pass |
ruff format --check . reports 17 files already formatted; ruff check . passes; no noqa comments |
| 4 |
Every signature annotated |
Pass |
create_table() -> PrettyTable, main() -> None, all test functions annotated |
| 5 |
No bare except or swallowed exceptions |
N-A |
The code has no exception handling |
| 6 |
No mutable defaults, no shadowed builtins |
Pass |
No default arguments; no builtin names shadowed |
| 7 |
Context managers for files, locks and connections |
N-A |
The code opens no files, locks or connections |
| 8 |
Docstrings say what, not how |
Pass |
Every module and function has a Doxygen docstring |
| 9 |
logging instead of print; no secrets in output |
Pass |
main() uses print to produce the program's required output, not diagnostics; no secrets or personal data are printed |
| 10 |
Classes and operations trace to a DCD |
N-A |
The task is a plain technical task (MIL-001 task 3, no use case or DCD); there is no DCD in the project |
| 11 |
Tests for new behaviour, named for the behaviour, order- and network-independent |
Pass |
8 tests in tests/test_main.py and tests/test_constants.py; python -m pytest passes |
| 12 |
Type checker strict, Any justified |
Pass |
mypy (strict, set in pyproject.toml) reports no issues in 7 source files; no Any |
| 13 |
Dependencies declared and pinned, none unused |
Pass |
prettytable>=3.10 is declared and used; dev tools are in the dev extra. The pin is a lower bound, not an exact version |