From c26319080402a5f8ce37b573590f9471bf77f569 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Tue, 13 Oct 2026 15:01:41 +0800 Subject: [PATCH 1/5] Take the screenshot of the running game Refs #41 Task: MIL-006#1 --- docs/images/snake-score-5.png | Bin 0 -> 6486 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/snake-score-5.png diff --git a/docs/images/snake-score-5.png b/docs/images/snake-score-5.png new file mode 100644 index 0000000000000000000000000000000000000000..4306ff297dd6b65a0258a6c64a930a27a8f9ff81 GIT binary patch literal 6486 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 Date: Tue, 13 Oct 2026 15:01:42 +0800 Subject: [PATCH 2/5] Show the screenshot in the README Refs #42 Task: MIL-006#2 --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 8f5bb1a..0b8619a 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,11 @@ The game has no runtime dependencies. The code keeps the names of the lectures `increase_score`, `update_scoreboard`, `high_score`) so that you can compare it with your own solution. +![The game at a score of 5 with a high score of 12: a light green snake with a dark green head and a mouth, blue food and the scores at the top](docs/images/snake-score-5.png) + +*The running game at a score of 5 with a high score of 12: a light green body, a dark +green head with a mouth, the blue food and the white scoreboard.* + This repository continues [021-snake-game](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/021-snake-game) and starts from its finished game; `docs/project-plan.md` tells how the work is From a13350d68a8f7e58ae9b67009aa89567107b8406 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Tue, 13 Oct 2026 15:01:42 +0800 Subject: [PATCH 3/5] Show the screenshot on the wiki pages Refs #43 Task: MIL-006#3 --- wiki/Home.da.md | 4 ++++ wiki/Home.md | 4 ++++ wiki/Home.ms.md | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/wiki/Home.da.md b/wiki/Home.da.md index e5be6c2..7a26d53 100644 --- a/wiki/Home.da.md +++ b/wiki/Home.da.md @@ -8,6 +8,10 @@ Det klassiske Snake-spil, bygget med Pythons `turtle`-modul. Det er opgaven fra dag 24 i Udemys *100 Days of Code: The Complete Python Pro Bootcamp*, som handler om det lokale filsystem og om at læse og skrive filer. En slange bevæger sig af sig selv hen over en sort skærm på 600 gange 600 og styres med piletasterne; den spiser mad og vokser, og tavlen øverst viser scoren og highscoren. Spillet slutter ikke: når hovedet passerer væggen eller rører sin egen hale, starter slangen og scoren forfra, og den bedste score gemmes i filen `data.txt`, så den stadig er der, næste gang du spiller. +![Spillet ved en score på 5 og en highscore på 12: en lysegrøn slange med et mørkegrønt hoved og en mund, blå mad og tallene øverst](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/024-snake/raw/branch/main/docs/images/snake-score-5.png) + +*Det kørende spil ved en score på 5 og en highscore på 12: en lysegrøn krop, et mørkegrønt hoved med en mund, den blå mad og den hvide tavle.* + ## Styring | Tast | Virkning | diff --git a/wiki/Home.md b/wiki/Home.md index b6ec8ef..7bc17cf 100644 --- a/wiki/Home.md +++ b/wiki/Home.md @@ -6,6 +6,10 @@ English | [Dansk](Home.da) | [Bahasa Melayu](Home.ms) The classic Snake game, built with Python's `turtle` module. It is the day-24 assignment of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*, which teaches the local file system and reading and writing files. A snake moves across a black 600 by 600 screen by itself and is steered with the arrow keys; it eats food, grows, and the scoreboard at the top shows the score and the high score. The game does not end: when the head passes the wall or touches its own tail, the snake and the score start again, and the best score is kept in the file `data.txt`, so it is still there the next time you play. +![The game at a score of 5 with a high score of 12: a light green snake with a dark green head and a mouth, blue food and the scores at the top](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/024-snake/raw/branch/main/docs/images/snake-score-5.png) + +*The running game at a score of 5 with a high score of 12: a light green body, a dark green head with a mouth, the blue food and the white scoreboard.* + ## Controls | Key | Effect | diff --git a/wiki/Home.ms.md b/wiki/Home.ms.md index 99e4485..1249f4c 100644 --- a/wiki/Home.ms.md +++ b/wiki/Home.ms.md @@ -8,6 +8,10 @@ Permainan Ular (Snake) klasik, dibina dengan modul `turtle` Python. Ia ialah tugasan hari ke-24 dalam *100 Days of Code: The Complete Python Pro Bootcamp* di Udemy, yang mengajar sistem fail setempat serta cara membaca dan menulis fail. Seekor ular bergerak sendiri merentasi skrin hitam 600 kali 600 dan dikawal dengan kekunci anak panah; ia makan makanan dan membesar, dan papan skor di bahagian atas memaparkan skor serta skor tertinggi. Permainan tidak tamat: apabila kepala melepasi dinding atau menyentuh ekornya sendiri, ular dan skor bermula semula, dan skor terbaik disimpan dalam fail `data.txt`, jadi ia masih ada apabila anda bermain lagi. +![Permainan pada skor 5 dengan skor tertinggi 12: seekor ular hijau muda dengan kepala hijau tua dan mulut, makanan biru dan skor di bahagian atas](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/024-snake/raw/branch/main/docs/images/snake-score-5.png) + +*Permainan yang sedang berjalan pada skor 5 dengan skor tertinggi 12: badan hijau muda, kepala hijau tua dengan mulut, makanan biru dan papan skor putih.* + ## Kawalan | Kekunci | Kesan | From 4a84314ab4dc5365a16a1ef844a1421eee429d0f Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Tue, 13 Oct 2026 15:01:43 +0800 Subject: [PATCH 4/5] Record the review of the MIL-006 code (RC-018) --- docs/artifact-registry.md | 2 +- docs/sqa/reviews/rc-018-mil-006-code.md | 59 +++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 docs/sqa/reviews/rc-018-mil-006-code.md diff --git a/docs/artifact-registry.md b/docs/artifact-registry.md index 1f62f99..0758f2a 100644 --- a/docs/artifact-registry.md +++ b/docs/artifact-registry.md @@ -16,7 +16,7 @@ document of a type. `Primary File` may contain a glob (e.g. | PP | Project Plan | docs/project-plan.md | 002 | | MIL | Milestone / Gateway | docs/milestones/*.md | 007 | | DICT | Domain Dictionary | docs/dictionary.md | 002 | -| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 018 | +| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 019 | ## Languages diff --git a/docs/sqa/reviews/rc-018-mil-006-code.md b/docs/sqa/reviews/rc-018-mil-006-code.md new file mode 100644 index 0000000..dd175b1 --- /dev/null +++ b/docs/sqa/reviews/rc-018-mil-006-code.md @@ -0,0 +1,59 @@ +# RC-018: Code review of MIL-006 (screenshot: no Python change) + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-018 | +| CrossReference | [MIL-006], [QC-PY-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-13 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: the source and tests that [MIL-006] delivers (screenshot: no Python change) +- Checklist used: [QC-PY-001] +- Scope: full review of the files changed on the branch of the milestone: no Python file is among them +- Language and domain: n/a +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also wrote the code) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | Packages, modules, functions, variables, classes and constants follow PEP 8 casing (`snake_case`, `PascalCase`, `UPPER_SNAKE`) | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 2 | Names state purpose in the domain's language; no unexplained abbreviations, no single-letter names outside tiny scopes | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 3 | Code is produced by the project's formatter and passes its linter with no unexplained suppressions | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 4 | Every function and method signature is type-annotated, including `-> None` | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 5 | No bare `except:`, no swallowed exceptions; specific exceptions are raised and the cause is kept (`raise ... from`) | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 6 | No mutable default arguments and no shadowed builtins | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 7 | Files, locks and connections are managed with context managers | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 8 | Public modules, classes and functions have docstrings that say what, not how | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 9 | Logging uses `logging`, not `print`; no secrets or personal data in log output | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 10 | Classes and operations trace to the Design Class Diagram they implement; deviations are recorded | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 11 | Tests exist for new behaviour, are named for the behaviour, and do not depend on order or the network | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 12 | Type checker runs in strict mode without errors; `Any` is justified in a comment | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 13 | Dependencies are declared and pinned in the project's dependency file, none unused | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 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 | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 15 | Imports point inward: business-rule modules import no framework, database, UI or delivery-mechanism code, and there are no import cycles | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | +| 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 | N-A | No Python file changed on this branch (`git diff main --stat` shows the PNG, README.md and wiki/ only); the code of the repository was reviewed in RC-009 to RC-012. | + +## Overall Verdict + +Go — no Python file changed in this milestone, so every criterion is not applicable; the repository's code stands on RC-009 to RC-012. Assessed on 2026-10-13 by the assistant that wrote the code, as stand-in for S01 in autonomous mode. Mode: autonomous, not independent. The pull request is the second look. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-20 | + +--- + +[MIL-006]: ../../milestones/mil-006-screenshot.md +[QC-PY-001]: ../../../framework/qc/code/qc-programming-python.md From be4b6570beba1304be07b063c8c8d5bb2b9ceeda Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Tue, 13 Oct 2026 15:01:44 +0800 Subject: [PATCH 5/5] Resolve pending commit links --- docs/sqa/reviews/rc-018-mil-006-code.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/sqa/reviews/rc-018-mil-006-code.md b/docs/sqa/reviews/rc-018-mil-006-code.md index dd175b1..7b251da 100644 --- a/docs/sqa/reviews/rc-018-mil-006-code.md +++ b/docs/sqa/reviews/rc-018-mil-006-code.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-13 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-13 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [4a84314] | --- @@ -57,3 +57,4 @@ Go — no Python file changed in this milestone, so every criterion is not appli [MIL-006]: ../../milestones/mil-006-screenshot.md [QC-PY-001]: ../../../framework/qc/code/qc-programming-python.md +[4a84314]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/024-snake/commit/4a84314ab4dc5365a16a1ef844a1421eee429d0f