Files
025-squirrel/docs/sqa/reviews/rc-008-python-constants.md
T

4.4 KiB

RC Review of the MIL-001 Python files

Metadata

Key Value
ID RC-008
CrossReference PY-MIL-001, QC-PY-001

Version History

Date Status Author Reviewer Change Commit
2026-10-13 Accepted Jens Tirsvad Nielsen AI as stand-in for S01 Initial version pending

Artifact Under Review

  • Instance reviewed: PY-MIL-001
  • Checklist used: QC-PY-001
  • Scope: full review of src/squirrel/__init__.py, src/squirrel/constants.py, tests/test_constants.py
  • Language and domain: n/a
  • Language reviewer: none (the stand-in reviewer reads English and the it domain)
  • Mode: autonomous, not independent (reviewer: AI as stand-in for S01)

Checklist Results

# Criterion Status Evidence/Notes
1 Packages, modules, functions, variables, classes and constants follow PEP 8 casing (snake_case, PascalCase, UPPER_SNAKE) (Mandatory) Pass Module constants are UPPER_SNAKE; test functions snake_case; package squirrel.
2 Names state purpose in the domain's language; no unexplained abbreviations, no single-letter names outside tiny scopes (Mandatory) Pass Names state purpose (FUR_COLOR_COLUMN, DEFAULT_OUTPUT_PATH).
3 Code is produced by the project's formatter and passes its linter with no unexplained suppressions (Mandatory) Pass ruff format --check and ruff check (0.17.0, rules E, F, I, UP, B, D) pass with no suppressions.
4 Every function and method signature is type-annotated, including -> None (Mandatory) Pass Every test function is annotated -> None; constants carry annotations; mypy --strict passes.
5 No bare except:, no swallowed exceptions; specific exceptions are raised and the cause is kept (raise ... from) (Mandatory) Pass No exception handling in this module.
6 No mutable default arguments and no shadowed builtins (Mandatory) Pass No functions with defaults; no builtins shadowed.
7 Files, locks and connections are managed with context managers (Mandatory) Pass Test reads the source with pathlib.Path.read_text, which closes the file.
8 Public modules, classes and functions have docstrings that say what, not how (Optional) Pass Module and constants have Doxygen ## blocks and a module docstring.
9 Logging uses logging, not print; no secrets or personal data in log output (Mandatory) Pass No print and no logging; no secrets.
10 Classes and operations trace to the Design Class Diagram they implement; deviations are recorded (Mandatory) N-A No classes or operations exist; no DCD yet.
11 Tests exist for new behaviour, are named for the behaviour, and do not depend on order or the network (Mandatory) Pass 6 tests in tests/test_constants.py named for behaviour; no order or network dependence.
12 Type checker runs in strict mode without errors; Any is justified in a comment (Optional) Pass mypy 2.4.0 --strict: success, no issues in 3 source files.
13 Dependencies are declared and pinned in the project's dependency file, none unused (Optional) Pass No runtime dependencies; dev tools pinned exactly in pyproject.toml.
14 Each piece of knowledge (a business rule, constant, format, validation or query) is defined in one place; code is merged only where it expresses the same knowledge, not where it merely looks alike (Mandatory) Pass Each literal is defined once in constants.py.
15 Imports point inward: business-rule modules import no framework, database, UI or delivery-mechanism code, and there are no import cycles (Mandatory) Pass Only pathlib is imported; no framework code.
16 SOLID holds: a class or module has one reason to change; new behaviour is added by extension, not by editing a type test in several places; subclasses honour the contract of their base; protocols are narrow; high-level code depends on protocols or abstract types and receives its implementations (Mandatory) Pass A data module with no types or branching; nothing to violate.

Overall Verdict

Go — all Mandatory criteria pass; criterion 10 is not applicable because no class exists.

Action Items

Action Owner Due
None S01 -