Files
031-flash-card/docs/sqa/reviews/rc-026-py-mil-004.md
T

5.6 KiB

RC-026: Review of PY-MIL-004

Metadata

Key Value
ID RC-026
CrossReference PY-MIL-004, QC-PY-001

Version History

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

Artifact Under Review

  • Instance reviewed: PY-MIL-004
  • Checklist used: QC-PY-001
  • Scope: full review
  • Language and domain: n/a (technical type)
  • Language reviewer: none
  • Mode: autonomous, not independent (reviewer is 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) Pass PEP 8 casing holds; ruff rule set N passes.
2 Names state purpose in the domain's language; no unexplained abbreviations, no single-letter names outside tiny scopes Pass Names are the assignment's (flip_card, flip_timer, next_card) and the IT terms of the dictionary; Side states its purpose.
3 Code is produced by the project's formatter and passes its linter with no unexplained suppressions Pass ruff check and ruff format --check pass with no suppressions.
4 Every function and method signature is type-annotated, including -> None Pass Every signature is annotated; mypy --strict passes on 31 source files.
5 No bare except:, no swallowed exceptions; specific exceptions are raised and the cause is kept (raise ... from) Pass No exception handling was added; none is bare.
6 No mutable default arguments and no shadowed builtins Pass No mutable defaults, no builtin shadowed.
7 Files, locks and connections are managed with context managers Pass No file or connection is opened in this change.
8 Public modules, classes and functions have docstrings that say what, not how Pass New and changed members have Doxygen docstrings; doxygen Doxyfile ends with 0 warnings.
9 Logging uses logging, not print; no secrets or personal data in log output Pass No print; no logging needed.
10 Classes and operations trace to the Design Class Diagram they implement; deviations are recorded Pass Side, flip_card, flip_timer and the view's timer follow DCD-001 and SD-001 (flip_card row of Method Traceability, timer step of SSD-001).
11 Tests exist for new behaviour, are named for the behaviour, and do not depend on order or the network Pass 76 tests: view model sides, finished state, flip rules; e2e front and back state, recording scheduler, real 50 ms timer; no network, no order dependency (state reset in each test).
12 Type checker runs in strict mode without errors; Any is justified in a comment Pass mypy --strict reports no issue; no Any.
13 Dependencies are declared and pinned in the project's dependency file, none unused Pass dependencies stays empty.
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 Pass The side rule exists once in the view model; image and colour names come from constants.py; _show_card is the only place that draws a card.
15 Imports point inward: business-rule modules import no framework, database, UI or delivery-mechanism code, and there are no import cycles Pass lint-imports reports Layers point inward kept; the view model imports no Tkinter.
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 Pass The view model holds the side rule and the view only draws; a new side would extend Side and _show_card.
17 Source is laid out in the layers and folders of the clean architecture folder structure (domain, application, infrastructure, presentation packages under src/, and unit, integration and e2e under tests/), in snake_case, and imports between the layers point inward Pass Files stay in presentation/features/flash_card/; tests in unit and e2e.
18 File and folder names are English, contain no space and no character outside letters, digits, -, _ and ., and follow the casing of the language for files Pass Names follow the rule; no new file contains a space.

Overall Verdict

Go — every Mandatory criterion passes. Reviewed by AI as stand-in for S01; not independent of the author.

Milestone MIL-004 Go criteria: 1 flip_card changes side, language name and text (unit test); 2 next_card returns to the front (unit test); 3 after(3000, flip_card) is scheduled and the earlier id is cancelled first (recording scheduler e2e test); 4 back image and white text, front image and black text (e2e); 5 PhotoImage objects are attributes created in __init__, none in a callback (grep); 6 this record, pytest 76 passed. A manual run with a 100 ms delay showed Danish and white text. All Go.

Action Items

Action Owner Due
none - -