| 1 |
Packages, modules, functions, variables, classes and constants follow PEP 8 casing |
Pass |
coffee_machine, CoffeeMaker, is_resource_sufficient, WATER; checked by ruff rule set N. |
| 2 |
Names state purpose in the domain's language; no unexplained abbreviations |
Pass |
Assignment names kept (get_items, find_drink, make_payment, make_coffee); no abbreviations. |
| 3 |
Code is produced by the project's formatter and passes its linter with no unexplained suppressions |
Pass |
ruff format and ruff check clean; no noqa or type: ignore in the code. |
| 4 |
Every function and method signature is type-annotated, including -> None |
Pass |
mypy --strict passes on src and tests. |
| 5 |
No bare except:, no swallowed exceptions |
Pass |
No try/except in the code. Invalid coin counts are handled by validation, not exceptions. |
| 6 |
No mutable default arguments and no shadowed builtins |
Pass |
None found; conftest.py uses _prompt="", an immutable default. |
| 7 |
Files, locks and connections are managed with context managers |
N-A |
The program opens no files, locks or connections. |
| 8 |
Public modules, classes and functions have docstrings that say what, not how |
Pass |
All public items have Doxygen docstrings; Doxygen builds without warnings. |
| 9 |
Logging uses logging, not print; no secrets or personal data in log output |
Pass |
print is the program's user interface (the assignment's required prompts and messages), not logging. No secrets or personal data. The code never reads .env. |
| 10 |
Classes and operations trace to the Design Class Diagram they implement; deviations are recorded |
N-A |
No DCD exists: the course supplies the design (see PP-001 Open Issues). The classes follow the assignment's Menu, MenuItem, CoffeeMaker, MoneyMachine. |
| 11 |
Tests exist for new behaviour, are named for the behaviour, and do not depend on order or the network |
Pass |
25 tests cover each class and the main loop; input is replaced with a fixture; no order or network dependence. |
| 12 |
Type checker runs in strict mode without errors; Any is justified in a comment |
Pass |
mypy --strict clean; no Any. |
| 13 |
Dependencies are declared and pinned in the project's dependency file, none unused |
Pass |
No runtime dependencies. Dev tools have lower bounds only, which suits a learning project. |