Milestone 001: Project Foundation #30
@@ -0,0 +1,44 @@
|
||||
name: CI
|
||||
|
||||
# Read by GitHub Actions and by Gitea Actions. No step opens a turtle window:
|
||||
# the tests use a recording fake pen.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out the repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python 3.13
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.13"
|
||||
|
||||
- name: Install Doxygen
|
||||
run: sudo apt-get update && sudo apt-get install --yes doxygen
|
||||
|
||||
- name: Install the project and its development tools
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install -e ".[dev]"
|
||||
|
||||
- name: Lint
|
||||
run: ruff check .
|
||||
|
||||
- name: Check formatting
|
||||
run: ruff format --check .
|
||||
|
||||
- name: Check types
|
||||
run: mypy
|
||||
|
||||
- name: Run the tests
|
||||
run: python -m pytest
|
||||
|
||||
- name: Build the source documentation
|
||||
run: doxygen Doxyfile
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Documentation builds (Doxygen writes to build/doxygen, see Doxyfile)
|
||||
docs/_build/
|
||||
doxygen_warnings.log
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.envrc
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Type checkers and linters
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
.pyre/
|
||||
.pytype/
|
||||
.ruff_cache/
|
||||
|
||||
# IDEs and editors
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*.swo
|
||||
.spyderproject
|
||||
.spyproject
|
||||
.ropeproject
|
||||
|
||||
# Operating system files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
desktop.ini
|
||||
@@ -0,0 +1,3 @@
|
||||
[submodule "framework"]
|
||||
path = framework
|
||||
url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git
|
||||
@@ -0,0 +1,38 @@
|
||||
# Doxygen configuration for the Turtle Challenges source documentation.
|
||||
#
|
||||
# Build: doxygen Doxyfile
|
||||
# Output: build/html/index.html
|
||||
#
|
||||
# Only the settings that differ from Doxygen's defaults are listed. The full
|
||||
# list with explanations is produced by `doxygen -g`.
|
||||
|
||||
PROJECT_NAME = "Turtle Challenges"
|
||||
PROJECT_BRIEF = "Turtle graphics exercises from day 18 of Udemy's 100 Days of Code"
|
||||
OUTPUT_DIRECTORY = build
|
||||
HTML_OUTPUT = html
|
||||
|
||||
# Python source: a docstring that starts with """! carries Doxygen commands
|
||||
# (@brief, @param, ...); without the "!" Doxygen prints them as plain text.
|
||||
# The README is the main page.
|
||||
INPUT = src README.md
|
||||
FILE_PATTERNS = *.py *.md
|
||||
RECURSIVE = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = YES
|
||||
EXTRACT_ALL = NO
|
||||
USE_MDFILE_AS_MAINPAGE = README.md
|
||||
AUTOLINK_SUPPORT = YES
|
||||
|
||||
# Show every module, class, function and constant: nothing may stay
|
||||
# undocumented, a partly documented parameter list is an error, and any warning
|
||||
# fails the build. WARN_NO_PARAMDOC stays off because Doxygen would demand an
|
||||
# @return for every function annotated `-> None`.
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_IF_INCOMPLETE_DOC = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_AS_ERROR = FAIL_ON_WARNINGS
|
||||
|
||||
GENERATE_HTML = YES
|
||||
GENERATE_LATEX = NO
|
||||
HAVE_DOT = NO
|
||||
QUIET = YES
|
||||
@@ -1,2 +1,117 @@
|
||||
# 018-turtle
|
||||
# Turtle Challenges
|
||||
|
||||
Solutions to the five turtle graphics challenges of day 18 of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*: draw a square, draw a dashed line, draw different shapes, generate a random walk and draw a spirograph. The code is small, readable and tested, keeps the function names of the assignment, and needs nothing beyond the Python standard library to run.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Python 3.13 or later, with Tk (`tkinter`), which the `turtle` module draws with. The Windows and macOS installers include it; on Debian it is the `python3-tk` package.
|
||||
- `git`, to clone the repository.
|
||||
- No runtime dependencies. The development tools (pytest, ruff, mypy) are installed by the `dev` extra in the steps below.
|
||||
- Doxygen, only to build the source documentation.
|
||||
|
||||
## Set up
|
||||
|
||||
The same four steps on every system: clone, create a local virtual environment named `.venv`, upgrade `pip` inside it, and install the project in editable mode with its development tools. The virtual environment keeps the project's packages apart from every other Python project on the machine; do not install them system-wide.
|
||||
|
||||
The Windows PowerShell steps are the ones the author has run. The Debian and macOS steps use the same Python commands but have not been verified.
|
||||
|
||||
### Windows PowerShell
|
||||
|
||||
```powershell
|
||||
git clone https://github.com/Tirsvad-Udemy-100-days-of-code/018-turtle.git
|
||||
cd 018-turtle
|
||||
py -3.13 -m venv .venv
|
||||
.\.venv\Scripts\Activate.ps1
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
If PowerShell refuses to run `Activate.ps1` because scripts are disabled, allow scripts for this window only and activate again:
|
||||
|
||||
```powershell
|
||||
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
|
||||
.\.venv\Scripts\Activate.ps1
|
||||
```
|
||||
|
||||
The prompt starts with `(.venv)` while the environment is active. Type `deactivate` to leave it. Activate it again in every new terminal before you run the project.
|
||||
|
||||
### Linux Debian
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install --yes git python3 python3-venv python3-tk
|
||||
git clone https://github.com/Tirsvad-Udemy-100-days-of-code/018-turtle.git
|
||||
cd 018-turtle
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
Check that `python3 --version` prints 3.13 or later. If the package manager offers an older Python, install 3.13 another way (for example with `pyenv`) before creating the environment.
|
||||
|
||||
### MacOS
|
||||
|
||||
```bash
|
||||
brew install git python@3.13 python-tk@3.13
|
||||
git clone https://github.com/Tirsvad-Udemy-100-days-of-code/018-turtle.git
|
||||
cd 018-turtle
|
||||
python3.13 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
## Run
|
||||
|
||||
There is no challenge to run yet: the challenges arrive with milestones 002 to 004. To check the set-up, run the tests described in the next section.
|
||||
|
||||
## Run the tests
|
||||
|
||||
The tests never open a window. With the virtual environment active:
|
||||
|
||||
```bash
|
||||
python -m pytest
|
||||
```
|
||||
|
||||
The same checks as in continuous integration:
|
||||
|
||||
```bash
|
||||
ruff check .
|
||||
ruff format --check .
|
||||
mypy
|
||||
```
|
||||
|
||||
## Continuous integration
|
||||
|
||||
`.github/workflows/ci.yml` runs on every push to `main` and on every pull request. It is read by both GitHub Actions and Gitea Actions. It sets up Python 3.13, upgrades `pip`, installs the project with its development tools, then runs ruff (lint and format check), mypy, pytest and the Doxygen build. No step opens a turtle window.
|
||||
|
||||
## Build the source documentation
|
||||
|
||||
The source carries Doxygen comments, and the `Doxyfile` builds them, with this README as the main page. Install Doxygen first (`winget install DimitriVanHeesch.Doxygen` on Windows, `sudo apt install doxygen` on Debian, `brew install doxygen` on macOS), then run from the repository root:
|
||||
|
||||
```bash
|
||||
doxygen Doxyfile
|
||||
```
|
||||
|
||||
Open `build/html/index.html` in a browser. Any Doxygen warning fails the build, so every module, function and constant has to stay documented.
|
||||
|
||||
## Project layout
|
||||
|
||||
```text
|
||||
.
|
||||
├── .github/workflows/ci.yml continuous integration
|
||||
├── docs/ project documents: business case, plan, milestones
|
||||
├── src/turtle_challenges/ the package
|
||||
│ └── constants.py every constant of the project
|
||||
├── tests/ pytest tests
|
||||
├── Doxyfile Doxygen configuration
|
||||
├── pyproject.toml project, tool and dependency configuration
|
||||
└── LICENSE
|
||||
```
|
||||
|
||||
The `framework/` folder is a git submodule with the quality framework that the documents in `docs/` follow. The project does not need it to run, test or build.
|
||||
|
||||
## License
|
||||
|
||||
GNU Affero General Public License version 3. See the [LICENSE](LICENSE) file.
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
# Artifact Registry
|
||||
|
||||
This project's artifact state. Types, short names and `CrossReference
|
||||
Candidates` come from the framework catalog
|
||||
(`framework/registry/artifact-catalog.md`); this file only records where
|
||||
each document lives in *this* project and the next version to use.
|
||||
|
||||
Delete rows for types you don't use. Add a row the first time you create a
|
||||
document of a type. `Primary File` may contain a glob (e.g.
|
||||
`docs/uc-*/uc.md`); `framework/scripts/find-crossreferences.sh` reads it.
|
||||
|
||||
| Short Name | Artifact Type | Primary File | Next Available Version |
|
||||
| --- | --- | --- | --- |
|
||||
| BC | Business Case | docs/business-case.md | 002 |
|
||||
| SA | Stakeholder Analysis | docs/stakeholder-analysis.md | 002 |
|
||||
| PP | Project Plan | docs/project-plan.md | 002 |
|
||||
| MIL | Milestone / Gateway | docs/milestones/*.md | 005 |
|
||||
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 014 |
|
||||
| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 |
|
||||
| DICT | Domain Dictionary | docs/dictionary.md | 002 |
|
||||
|
||||
## Languages
|
||||
|
||||
Set the PO language when the project starts; `project-planning` asks for it
|
||||
if it is missing. An artifact of a type marked "Written in the PO language"
|
||||
exists once, in that language, under its normal name (`business-case.md`); the
|
||||
`artifact` skill ("One file per artifact") has the rule.
|
||||
|
||||
| Setting | Value |
|
||||
| --- | --- |
|
||||
| PO language | en |
|
||||
| PO domain | it |
|
||||
| High-level register | IT Executive English |
|
||||
| Technical register | IT Professional English |
|
||||
|
||||
Every artifact of a type marked "Yes" below states its language and domain in
|
||||
its `Language` and `Domain` Metadata rows; `new-artifact.sh` fills them from
|
||||
`PO language` and `PO domain`. `Language` is a BCP 47 code (`da`, `en`).
|
||||
`Domain` is a value from this list; add a row to introduce a domain, so a
|
||||
reviewer can see at once which professional vocabulary a document uses.
|
||||
|
||||
| Domain | Meaning |
|
||||
| --- | --- |
|
||||
| it | Software and IT |
|
||||
| medical | Healthcare and medical devices |
|
||||
| construction | Construction and civil engineering |
|
||||
|
||||
| Artifact types | Register | Written in the PO language |
|
||||
| --- | --- | --- |
|
||||
| BC, KPI, PP, MIL | IT Executive English | Yes |
|
||||
| SA, BMC, BPMN, UCD, US, UC, SSD, DM, RA, GOV, DICT | IT Professional English | Yes |
|
||||
| OC, SD, DCD, ERD, ADR, TM, RC, QC, source code | IT Professional English | No |
|
||||
|
||||
## Notes
|
||||
|
||||
- "Next Available Version" is the zero-padded (3-digit) version to use the
|
||||
*next* time a new document of that type is created. Increment it only when
|
||||
a brand-new document is created, not when an existing document's
|
||||
`## Version History` gets a row.
|
||||
- `ADR` uses 4 digits (`0001`); `RC` is sequential across all artifact types.
|
||||
@@ -0,0 +1,158 @@
|
||||
# Business Case: Turtle Challenges
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | BC-001 |
|
||||
| CrossReference | [SA-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Day 18 of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp* teaches Python through turtle graphics. This project turns its five challenges (draw a square, draw a dashed line, draw different shapes, generate a random walk, draw a spirograph) into one small, readable and tested Python repository. The repository has no runtime dependencies, installs into a local virtual environment, documents its source with Doxygen and runs its tests in continuous integration. It serves S01, S02 and S03 (see [SA-001]). The investment is a few days of S01's time; the return is a reference repository and practice of a complete engineering workflow. The recommendation is to proceed.
|
||||
|
||||
## Methodological and Standards Foundation
|
||||
|
||||
- **Methodology:** the software quality assurance (SQA) and quality control (QC) framework mounted at `framework/`: Business Case, Stakeholder Analysis, Project Plan, milestones, tasks as issues, then code, each step reviewed before the next.
|
||||
- **Quality standard:** characteristics of the standard of the International Organization for Standardization and the International Electrotechnical Commission (ISO/IEC), number 25010:2023, tag every quality control criterion.
|
||||
- **Code conventions:** Python Enhancement Proposals (PEP) 8, 257 and 484 for Python, reviewed against `QC-PY-001` before each pull request.
|
||||
- **Source documentation:** Doxygen comments in the source, built from a `Doxyfile`.
|
||||
|
||||
## Problem Statement
|
||||
|
||||
- Course exercises written in a single script are hard to read, hard to run on another machine and impossible to test, because drawing code is mixed with window setup.
|
||||
- Without a stated environment, a participant who clones a solution does not know which Python version, which packages or which operating-system tools (for example Tk) it needs.
|
||||
- A repository without a description, topics and README is not found, and gives a viewer no reason to open it.
|
||||
- Work that is not planned in steps leaves no record of what was done and when.
|
||||
|
||||
## Business Opportunity
|
||||
|
||||
A compact, well-presented solution repository lets S02 compare solutions against runnable code that keeps the assignment's function names, and lets S03 judge the repository from its description, topics and README alone. It also gives S01 a template repository for the later days of the course: the same layout, tooling and workflow can be reused for each day.
|
||||
|
||||
## Objectives
|
||||
|
||||
| ID | Objective |
|
||||
| --- | --- |
|
||||
| O1 | Deliver the five challenges as runnable code: `draw_square`, `draw_dashed_line`, `draw_shape`, `random_walk` and `draw_spirograph`, with the lecture's `random_color` helper. |
|
||||
| O2 | Separate drawing logic from window creation so that every function can be tested without a display. |
|
||||
| O3 | Give a reproducible set-up and run guide for Windows PowerShell, Linux Debian and macOS, using a local `.venv` and an upgraded `pip`. |
|
||||
| O4 | Keep the runtime dependency list empty; only the Python standard library is used at run time. |
|
||||
| O5 | Document the source with Doxygen comments and provide a `Doxyfile` that builds without warnings. |
|
||||
| O6 | Present the repository: description, topics, README with the agreed template, Python `.gitignore` and licence. |
|
||||
| O7 | Keep a trail of the work: one branch and one pull request per milestone, each pull request closing the issues it completes. |
|
||||
|
||||
## Scope
|
||||
|
||||
### In Scope
|
||||
|
||||
- The five turtle challenges named in O1 and the `random_color` helper (tuples of red, green and blue (RGB) values, color mode 255).
|
||||
- A `src/`, `tests/`, `docs/` folder structure, `constants.py` for constants, `pyproject.toml` for configuration.
|
||||
- Tests with pytest; formatting and linting with ruff; type checking with mypy (development tools only).
|
||||
- A continuous integration workflow that installs the project, runs the tests, linter and type checker, and builds the source documentation.
|
||||
- A `Doxyfile` and a documented command to build the source documentation.
|
||||
- A README that follows the agreed template, including set-up for Windows PowerShell, Linux Debian and macOS.
|
||||
- Description and topics on the repository on the Gitea host and on its GitHub mirror.
|
||||
|
||||
### Out of Scope
|
||||
|
||||
- Other days of the course and any exercise that is not one of the five challenges.
|
||||
- Packaging for or publishing to PyPI.
|
||||
- Hosting the generated Doxygen output.
|
||||
- A graphical menu or any interface other than a command line.
|
||||
- Automated tests that open a turtle window (the window needs a display and cannot run in continuous integration).
|
||||
- Committing, pushing or merging by the assistant; S01 does these steps.
|
||||
|
||||
## Expected Benefits
|
||||
|
||||
### Tangible Benefits
|
||||
|
||||
- A runnable repository with five challenges, a test suite and generated source documentation.
|
||||
- A continuous integration workflow that shows at once whether the repository is healthy.
|
||||
- A repository page that states what the project is and how to run it.
|
||||
|
||||
### Intangible Benefits
|
||||
|
||||
- Practice of a full workflow (plan, branch, review, pull request) on a small safe project.
|
||||
- A reusable template for later course days.
|
||||
- A reference that other participants can read and compare with their own solutions.
|
||||
|
||||
## Strategic Alignment
|
||||
|
||||
The project supports S01's goal of completing the 100 Days of Code course with professional habits, not only working scripts. It also supports sharing: S02 and S03 are the audience of the course's community, and the repository is written for them.
|
||||
|
||||
## Success Criteria
|
||||
|
||||
| # | Criterion | Target | Measure |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Challenges are runnable | 5 of 5 challenges start from the command line and draw to completion | S01 runs each on Windows PowerShell and records the result in the review of the milestone |
|
||||
| 2 | Automated tests pass | 0 failures; at least one test for every public function | `python -m pytest` exits 0 locally and in continuous integration |
|
||||
| 3 | Runtime dependencies | 0 | `dependencies = []` in `pyproject.toml` |
|
||||
| 4 | Source documentation builds | 0 Doxygen warnings | `doxygen Doxyfile` output |
|
||||
| 5 | Set-up is reproducible | A fresh clone runs the challenges and the tests following only the README on Windows PowerShell | S01 follows the README from an empty folder |
|
||||
| 6 | Repository is presented | Non-empty description and at least 5 topics on each host | Repository settings page of each host |
|
||||
| 7 | Work is traceable | 100 % of pull requests carry one `Closes #N` line per completed issue | Pull request descriptions |
|
||||
|
||||
## Risks
|
||||
|
||||
| Risk | Impact | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| Tk is missing on Linux Debian, so turtle cannot open a window | A reader cannot run any challenge | The README names the `python3-tk` package in the Debian section and shows how to check that `tkinter` imports |
|
||||
| Continuous integration has no display | Tests that draw would fail there | Drawing functions take the turtle as an argument; tests use a recording fake turtle; no test opens a window |
|
||||
| The reader's Python is older than 3.13 | Install or run fails with an unclear error | `requires-python` is declared; the README shows how to check the version first |
|
||||
| The access tokens in `.env` end up in the repository | Credentials are exposed publicly | `.env` is listed in `.gitignore`; no code imports or tests it; it is used only by S01's own tooling |
|
||||
| Scope grows beyond the five challenges | The deadline is missed and the template loses focus | The Out of Scope list and the plan-first gate: no code without a milestone task |
|
||||
| Function names drift from the assignment | S02 cannot compare solutions | The names in O1 are fixed in the milestone tasks and checked in review |
|
||||
|
||||
## Assumptions
|
||||
|
||||
- Python 3.13 with Tk is available on S01's machine (3.13.14 is installed).
|
||||
- The five lecture summaries supplied by S01 are the specification of the challenges.
|
||||
- S01 is the only contributor and is the reviewer of every document and pull request.
|
||||
- The repositories on the Gitea host and on GitHub already exist and S01 holds a token for each.
|
||||
|
||||
## Constraints
|
||||
|
||||
- Python 3.13 or later, with a `venv` virtual environment.
|
||||
- pytest for tests; `constants.py` for constants; `pyproject.toml` for configuration; a Python `.gitignore`.
|
||||
- Doxygen comments in the source and a `Doxyfile`.
|
||||
- Folder structure `src/`, `tests/`, `docs/`.
|
||||
- The README follows the agreed template and documents the local `.venv` and `python -m pip install --upgrade pip`.
|
||||
- No runtime dependency unless it is needed.
|
||||
- The assistant does not commit, push or open a pull request unless S01 asks.
|
||||
- The token file `.env` is for S01's personal use: it is not imported, not tested and not committed.
|
||||
- The work is complete by 2026-10-21.
|
||||
|
||||
## Cost–Benefit Assessment
|
||||
|
||||
The assessment is qualitative: the project has no revenue, no licence cost and no hosting cost, so a monetary return on investment cannot be calculated and would be invented. The only cost is S01's time.
|
||||
|
||||
| Costs | Benefits |
|
||||
| --- | --- |
|
||||
| S01's time across four milestones | A reviewed, runnable solution repository |
|
||||
| Time to maintain the planning documents | A reusable template for later course days |
|
||||
| No licence, hosting or tooling cost (Python, pytest, ruff, mypy, Doxygen and both git hosts are free) | A visible repository for S02 and S03 |
|
||||
|
||||
## Stakeholders
|
||||
|
||||
| Stakeholder ID (SA) | Interest in this project |
|
||||
| --- | --- |
|
||||
| S01 | Wants the five challenges solved and a complete workflow practised, with every step reviewed |
|
||||
| S02 | Wants readable, runnable code with the assignment's function names, and README instructions to run it |
|
||||
| S03 | Wants a clear repository description, topics and README, and no runtime dependencies |
|
||||
|
||||
## Recommendation
|
||||
|
||||
Proceed — the scope is small, the cost is only S01's time and every success criterion can be measured.
|
||||
|
||||
---
|
||||
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,48 @@
|
||||
# Domain Dictionary: Turtle Challenges
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | DICT-001 |
|
||||
| CrossReference | [BC-001], [SA-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Purpose and Scope
|
||||
|
||||
This dictionary maps each term the Product Owner (PO) uses in the project documents to the professional IT term used in the source code. The PO language is English (`en`) and the domain is software and IT (`it`), as the `Languages` section of `docs/artifact-registry.md` says. It covers the terms of [BC-001], [SA-001], the Project Plan, the milestones and the review records, and the names in `src/` and `tests/`. It lists only the terms that have a different word on each side, plus the central term "challenge", whose word is the same on both sides because the code uses it as a name.
|
||||
|
||||
## Dictionary
|
||||
|
||||
| PO term | Language | IT term | Definition | Used as PO term in | Used as IT term in |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| challenge | en | `challenge` | One of the five exercises of the course, started by name from the command line. | BC, SA, PP, MIL | PY |
|
||||
| turtle | en | `Pen` | The thing that draws on the screen: it moves, turns and leaves a line behind it. | BC, SA, PP, MIL | PY |
|
||||
| window | en | `Window` | The window on the screen in which the turtle draws. | BC, SA, MIL | PY |
|
||||
| shape | en | regular polygon | A closed figure with equal sides, such as a triangle or a decagon, that the turtle draws in challenge 3. | BC, MIL | PY |
|
||||
| random color | en | RGB (red, green, blue) tuple | A color picked at random and kept as three whole numbers from 0 to 255 for red, green and blue. | BC, MIL | PY |
|
||||
| milestone | en | gateway | A reviewed step of the plan that ends with a Go or No-Go decision, kept in one `MIL-*` document. | BC, SA, PP, MIL | PP, MIL |
|
||||
| task | en | issue | One row of the task table of a milestone, which becomes one issue on the git host. | BC, PP, MIL | PP |
|
||||
| source documentation | en | Doxygen output | The web pages that Doxygen builds from the comments in the source code. | BC, MIL | PY |
|
||||
|
||||
## Rules
|
||||
|
||||
- The PO term is used in the prose of the documents that are written in the PO language (BC, SA, PP, MIL, DICT). The IT term is used in names inside the source code and the tests, and in the text of those documents only where it is written as a code name between backticks (for example `Pen`).
|
||||
- One IT term per PO term and one PO term per IT term; no synonyms. In prose, say "turtle", not "pen"; say "milestone", not "gate", "gateway" or "phase".
|
||||
- The headings and table headers that come from the framework templates keep the framework's words (`Gateway Schedule`, `Phase / Milestone`, `Open Issues`). Structural vocabulary stays English and unchanged, because the scripts read it.
|
||||
- The names of the assignment's functions (`draw_square`, `draw_dashed_line`, `draw_shape`, `draw_shapes`, `random_color`, `random_walk`, `draw_spirograph`) stay exactly as the course gives them, even where the name uses the PO term (for example `draw_shape` for a regular polygon), because the people who compare solutions look for these names.
|
||||
- The turtle library's own words "pen up", "pen down" and "pen size" name the line state of the turtle. They stay in prose and do not mean the turtle. The code's `Pen` is the turtle itself; this homonym is recorded here on purpose.
|
||||
- Names of tools and of git host objects (pull request, branch, Doxygen, pytest, ruff, mypy, Gitea, GitHub) and the framework's rule "plan-first gate" are proper names, not terms of this dictionary.
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ./business-case.md
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,84 @@
|
||||
# Milestone 001: Project Foundation
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-001 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This milestone decides whether the repository has a working, documented and presentable base on which the five challenges can be built: project configuration, ignore rules, package and test skeleton, source documentation, continuous integration, README and repository description with topics.
|
||||
|
||||
## Deliverable
|
||||
|
||||
The `mil-001-project-foundation` branch, opened as one pull request, containing `pyproject.toml`, a Python `.gitignore`, `src/turtle_challenges/` with `constants.py`, a `tests/` folder with a passing smoke test, a `Doxyfile`, a continuous integration workflow, and a `README.md` that follows the agreed template. The repository description and topics are set on the Gitea host and on its GitHub mirror.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | In a fresh `.venv` on Python 3.13, `python -m pip install --upgrade pip` and `python -m pip install -e ".[dev]"` succeed | Both exit 0 | Either fails |
|
||||
| 2 | `dependencies = []` in `pyproject.toml`; `requires-python` is `>=3.13` | Both hold | A runtime dependency is declared, or the Python bound is missing |
|
||||
| 3 | `python -m pytest` runs | Exit 0 with at least one test | Exit not 0, or no test collected |
|
||||
| 4 | `ruff check .`, `ruff format --check .` and `mypy` | All exit 0 | Any exit not 0 |
|
||||
| 5 | `doxygen Doxyfile` | 0 warnings | Any warning or error |
|
||||
| 6 | `README.md` has the template sections in order, with no placeholder text | All sections present and filled | A section is missing or a `<placeholder>` remains |
|
||||
| 7 | `.env` is not tracked and is listed in `.gitignore` | `git ls-files .env` prints nothing and `git check-ignore .env` prints `.env` | `.env` is tracked, or not ignored |
|
||||
| 8 | Repository description and at least 5 topics | Set on the Gitea host and on GitHub | Missing on either host |
|
||||
| 9 | The continuous integration workflow file exists and runs the install, lint, type check, test and Doxygen steps | All steps present | A step is missing |
|
||||
| 10 | Review record against `QC-PY-001` | Verdict Go | Go-with-conditions or No-Go |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| BC-001, SA-001 and PP-001 accepted | The plan-first gate: no file goes under `src/` or `tests/` before the plan is accepted |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Reproducible set-up guide | O3 in [BC-001] |
|
||||
| No runtime dependencies | O4 in [BC-001] |
|
||||
| Source documentation | O5 in [BC-001] |
|
||||
| Repository presentation | O6 in [BC-001] |
|
||||
| One branch and pull request per milestone | O7 in [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-10 — the first of four milestones, leaving eleven days of the plan that ends 2026-10-21 (Constraints in [BC-001]).
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Create pyproject.toml | Declare the project in one file: name, version, `requires-python = ">=3.13"`, an empty runtime `dependencies` list, a `dev` extra with pytest, ruff and mypy, the `src` layout, and the pytest (`pythonpath`, `testpaths`), ruff and mypy settings. Keeping runtime dependencies at zero is objective O4 of the Business Case. | No | |
|
||||
| 2 | Add Python .gitignore | Add the standard Python ignore rules plus `.env`, `.venv/` and the Doxygen output folder `build/`, so virtual environments, caches, generated documentation and the personal token file are never committed. | No | |
|
||||
| 3 | Create package and test skeleton | Create `src/turtle_challenges/__init__.py` and `constants.py` (color mode 255, window title) and a `tests/` folder with a smoke test that imports the package, so the test run is green from the first pull request. Constants live only in `constants.py`. | No | |
|
||||
| 4 | Add Doxyfile | Add a `Doxyfile` for the Python source (`INPUT = src`, README as main page, Hypertext Markup Language (HTML) output to `build/doxygen`, warnings treated as errors) and check that `doxygen Doxyfile` reports 0 warnings. Source files use Doxygen commands in their docstrings (`@brief`, `@param`, `@return`). | No | |
|
||||
| 5 | Add continuous integration workflow | Add `.github/workflows/ci.yml` (read by GitHub Actions and by Gitea Actions): set up Python 3.13, upgrade pip, install `.[dev]`, then run ruff, mypy, pytest and the Doxygen build. The workflow never opens a turtle window. | No | |
|
||||
| 6 | Write README from the agreed template | Write `README.md` with the sections Requirements, Set up (Windows PowerShell, Linux Debian, MacOS), Run, Run the tests, Continuous integration, Build the source documentation, Project layout and License. The set-up shows how to create and use a local `.venv` and how to run `python -m pip install --upgrade pip`. The Run section is completed in milestone 004. | No | |
|
||||
| 7 | Set repository description and topics | Set a one-sentence description and at least 5 topics on the Gitea repository and on its GitHub mirror, using the tokens in `.env`. That file is for S01's personal use: it is never imported, tested, printed or committed. | No | |
|
||||
| 8 | Review milestone 001 against QC-PY-001 | Review the configuration and skeleton against `QC-PY-001`, record the result as an `RC-*` and add the instance to the traceability matrix. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,78 @@
|
||||
# Milestone 002: Square and Dashed Line
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-002 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This milestone decides whether the first two challenges (Turtle Challenge 1, draw a square, and Turtle Challenge 2, draw a dashed line) work, are tested without a display and can be started from the command line, and whether the turtle abstraction that every later challenge relies on is sound.
|
||||
|
||||
## Deliverable
|
||||
|
||||
The `mil-002-square-and-dashed-line` branch, opened as one pull request, containing the `Pen` protocol and window helpers, `draw_square`, `draw_dashed_line`, a recording fake turtle for tests, tests for both functions, and the `turtle-challenges` command with the `square` and `dashed-line` challenges.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `draw_square` draws four sides of 100 units, turning 90 degrees after each, as shown by the recording fake turtle | The recorded moves match | Any recorded move differs |
|
||||
| 2 | `draw_dashed_line` draws the configured number of dashes of 10 units, each followed by a gap of 10 units, with the pen down for each dash and up for each gap, and leaves the pen down when it returns | The recorded moves match | Any recorded move differs |
|
||||
| 3 | Every number and name used by the two functions comes from `constants.py` | No magic number in the function bodies | A literal constant is found in a function body |
|
||||
| 4 | `python -m turtle_challenges square` and `python -m turtle_challenges dashed-line` each open a window and draw to completion on Windows PowerShell | S01 confirms both in the review record | Either fails |
|
||||
| 5 | No test opens a window | The test run passes with no display available | A test needs a display |
|
||||
| 6 | `python -m pytest`, `ruff check .`, `ruff format --check .`, `mypy` and `doxygen Doxyfile` | All exit 0 with 0 Doxygen warnings | Any fails or warns |
|
||||
| 7 | Review record against `QC-PY-001` | Verdict Go | Go-with-conditions or No-Go |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| MIL-001 accepted | Needs the project configuration, package skeleton, test setup and continuous integration |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Challenges 1 and 2 run | O1 in [BC-001] |
|
||||
| Drawing logic separate from the window | O2 in [BC-001] |
|
||||
| Source documented with Doxygen | O5 in [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-14 — the second milestone, after the foundation milestone of 2026-10-10 and before the plan ends on 2026-10-21 (Constraints in [BC-001]).
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Define the `Pen` protocol and window helpers | Add `pen.py` with a `Pen` protocol listing the turtle methods the challenges use, and helpers that create the `Screen` (color mode 255) and the `Turtle` named `tim`. The drawing functions take a `Pen`, so tests can pass a fake. The Doxygen comments also explain the import styles of the lecture (`import turtle`, `from turtle import Turtle`, `import turtle as t`) and why the wildcard import is avoided. | No | |
|
||||
| 2 | Add a recording fake turtle for tests | Add a fake in `tests/` that implements the `Pen` protocol and records every call (move, turn, pen up, pen down, color), so tests assert on the drawing without a window. | No | |
|
||||
| 3 | Implement draw_square | Implement `draw_square(pen, side_length)`: four times move forward by the side length (100) and turn right 90 degrees, using a `for` loop. The default side length is a constant in `constants.py`. | No | |
|
||||
| 4 | Implement draw_dashed_line | Implement `draw_dashed_line(pen, dash_count, dash_length)`: for each dash put the pen down and move forward 10, then put the pen up and move forward 10 for the gap. The number of dashes (50) and the lengths are constants; see the open issue on 50 versus 15 in the Project Plan. | No | |
|
||||
| 5 | Add tests for square and dashed line | Test both functions against the recording fake turtle: number of moves, lengths, turn angles, pen up and pen down order, and rejection of a non-positive length. | No | |
|
||||
| 6 | Add the command line entry point | Add `cli.py` with `main(argv)` and `__main__.py` so that `python -m turtle_challenges <challenge>` creates the window, runs the named challenge and waits for a click. Register `square` and `dashed-line`; the choices are listed by `--help`. Declare the `turtle-challenges` command in `pyproject.toml`, since it points at `cli.py`. | No | |
|
||||
| 7 | Review milestone 002 against QC-PY-001 | Review the code and tests against `QC-PY-001`, record the result as an `RC-*` and update the instance in the traceability matrix. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,78 @@
|
||||
# Milestone 003: Shapes and Random Color
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-003 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This milestone decides whether Turtle Challenge 3 (draw different shapes, triangle to decagon, in random colors) works and whether the `random_color` helper from the tuple lecture is correct, because the random walk and the spirograph of the last milestone both depend on it.
|
||||
|
||||
## Deliverable
|
||||
|
||||
The `mil-003-shapes-and-random-color` branch, opened as one pull request, containing `random_color` (an red, green and blue (RGB) tuple), the color palette constant, `draw_shape`, `draw_shapes`, their tests, and the `shapes` challenge in the command line.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `random_color` returns a tuple of three integers, each from 0 to 255 inclusive, and is repeatable with a seeded random generator | All three properties hold in tests | Any property fails |
|
||||
| 2 | `draw_shape(pen, num_sides)` turns 360 / `num_sides` degrees after each of `num_sides` sides of 100 units | Recorded moves match for 3 to 10 sides | Any recorded move differs |
|
||||
| 3 | `draw_shape` rejects fewer than 3 sides with `ValueError` | The error is raised | No error, or another exception type |
|
||||
| 4 | `draw_shapes` draws the shapes with 3 to 10 sides, each in a color chosen from the palette in `constants.py` | Eight shapes, each with a palette color | Any shape missing or off palette |
|
||||
| 5 | `python -m turtle_challenges shapes` opens a window and draws to completion on Windows PowerShell | S01 confirms in the review record | It fails |
|
||||
| 6 | `python -m pytest`, `ruff check .`, `ruff format --check .`, `mypy` and `doxygen Doxyfile` | All exit 0 with 0 Doxygen warnings | Any fails or warns |
|
||||
| 7 | Review record against `QC-PY-001` | Verdict Go | Go-with-conditions or No-Go |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| MIL-002 accepted | Needs the `Pen` protocol, the fake turtle and the command line entry point |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Challenge 3 and the `random_color` helper run | O1 in [BC-001] |
|
||||
| Drawing logic separate from the window | O2 in [BC-001] |
|
||||
| Source documented with Doxygen | O5 in [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-17 — the third milestone, leaving four days for the last milestone before the plan ends on 2026-10-21 (Constraints in [BC-001]).
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Implement random_color | Implement `random_color(rng)` in `colors.py`: three random integers from 0 to 255 returned as a tuple (immutable, so it is safe as a constant-like value). It accepts an optional `random.Random` so tests can seed it. The upper bound comes from `constants.py`. | No | |
|
||||
| 2 | Add the color palette constant | Add the lecture's list of named colors to `constants.py` as a tuple (for example CornflowerBlue, DarkOrchid, IndianRed, DeepSkyBlue, LightSeaGreen, wheat, SlateGray, SeaGreen) and a helper that picks one with `random.choice`. | No | |
|
||||
| 3 | Implement draw_shape | Implement `draw_shape(pen, num_sides, side_length)`: the turn angle is 360 divided by the number of sides, repeated for each side with a `for` loop. Fewer than 3 sides raises `ValueError`. | No | |
|
||||
| 4 | Implement draw_shapes | Implement `draw_shapes(pen, rng)`: loop over 3 to 10 sides, choose a palette color for each shape and call `draw_shape`. The range bounds are constants. | No | |
|
||||
| 5 | Add tests for random_color, draw_shape and draw_shapes | Test the tuple type and range of `random_color`, repeatability with a seed, the turn angle and side count for every shape from 3 to 10 sides, the `ValueError` for fewer than 3 sides, and the palette use of `draw_shapes`. | No | |
|
||||
| 6 | Register the shapes challenge in the command line | Add `shapes` to the choices of `python -m turtle_challenges` and to the `--help` text, with a test of the argument parsing. | No | |
|
||||
| 7 | Review milestone 003 against QC-PY-001 | Review the code and tests against `QC-PY-001`, record the result as an `RC-*` and update the instance in the traceability matrix. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,81 @@
|
||||
# Milestone 004: Random Walk and Spirograph
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-004 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This milestone decides whether the last two challenges (Turtle Challenge 4, generate a random walk, and Turtle Challenge 5, draw a spirograph) work and whether the whole repository is ready to be shared: all five challenges run, the README is complete and checked from a fresh clone, and every success criterion of the Business Case is met.
|
||||
|
||||
## Deliverable
|
||||
|
||||
The `mil-004-random-walk-and-spirograph` branch, opened as one pull request, containing `random_walk`, `draw_spirograph`, their tests, the `random-walk` and `spirograph` challenges in the command line, and the final `README.md` with the Run section for all five challenges.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `random_walk` takes the configured number of steps (200), each of the same distance, each in a heading from the north, east, south and west list, and each in an red, green and blue (RGB) color from `random_color` | Recorded moves match with a seeded generator | Any recorded move differs |
|
||||
| 2 | `random_walk` sets the pen size and the speed from constants | Both are recorded before the first move | Either is missing |
|
||||
| 3 | `draw_spirograph(pen, size_of_gap)` draws `int(360 / size_of_gap)` circles, each in an RGB color, turning the heading by the gap after each circle | Circle count, color and heading changes match | Any differs |
|
||||
| 4 | `draw_spirograph` rejects a gap that is zero or negative with `ValueError` and never passes a float to `range` | The error is raised; a gap of 7 does not raise `TypeError` | A float reaches `range` |
|
||||
| 5 | `python -m turtle_challenges random-walk` and `python -m turtle_challenges spirograph` open a window and draw to completion on Windows PowerShell | S01 confirms both in the review record | Either fails |
|
||||
| 6 | Business Case success criteria 1 to 7 | Every criterion met, evidence in the review record | Any criterion not met |
|
||||
| 7 | A fresh clone follows only the README (set-up, run, test, build the documentation) on Windows PowerShell | Every step works as written | A step fails or is missing |
|
||||
| 8 | `python -m pytest`, `ruff check .`, `ruff format --check .`, `mypy` and `doxygen Doxyfile` | All exit 0 with 0 Doxygen warnings | Any fails or warns |
|
||||
| 9 | Review record against `QC-PY-001` | Verdict Go | Go-with-conditions or No-Go |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| MIL-003 accepted | Needs `random_color` and the command line entry point |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Challenges 4 and 5 run | O1 in [BC-001] |
|
||||
| Set-up and run guide complete | O3 in [BC-001] |
|
||||
| Repository ready to share | O6 in [BC-001] |
|
||||
| Every pull request closes its issues | O7 in [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-21 — the last milestone, on the day the plan ends (Constraints in [BC-001]).
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Implement random_walk | Implement `random_walk(pen, steps, distance, rng)`: set the pen size and speed, then for each of 200 steps choose a heading from the list of 0, 90, 180 and 270 degrees, give the line a `random_color` RGB value and move forward by a fixed distance. The directions are a tuple constant. | No | |
|
||||
| 2 | Implement draw_spirograph | Implement `draw_spirograph(pen, size_of_gap, radius, rng)`: draw `int(360 / size_of_gap)` circles, each in a `random_color` RGB value, and after each circle set the heading to the current heading plus the gap. A zero or negative gap raises `ValueError`; the `int` conversion avoids the float error that `range` raises. | No | |
|
||||
| 3 | Add tests for random_walk and draw_spirograph | Test the recorded moves of both functions with a seeded generator and the recording fake turtle: step count, distance, headings drawn from the list, RGB values in range, circle count, heading change and the `ValueError` for an invalid gap. | No | |
|
||||
| 4 | Register random-walk and spirograph in the command line | Add `random-walk` and `spirograph` to the choices of `python -m turtle_challenges`, with a `--gap` option for the spirograph, and test the argument parsing. | No | |
|
||||
| 5 | Complete the README Run section and verify it from a fresh clone | Document the command for each of the five challenges and the `--gap` option, then follow the README from an empty folder on Windows PowerShell and record the result. Debian and macOS steps are documented but not verified by S01; the README says so. | No | |
|
||||
| 6 | Verify the Business Case success criteria | Check each of the seven success criteria of the Business Case, record the evidence (command output, repository page) in the review record, and update the Project Plan if a date moved. | No | |
|
||||
| 7 | Review milestone 004 against QC-PY-001 | Review the code and tests against `QC-PY-001`, record the result as an `RC-*` and update the instance in the traceability matrix. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,107 @@
|
||||
# Project Plan: Turtle Challenges
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | PP-001 |
|
||||
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This plan schedules the four milestones that deliver the Turtle Challenges repository, one milestone per pull request, so that the work is complete by 2026-10-21, the end date in the constraints of [BC-001]. Each milestone is one `MIL-*` document with its own tasks; the tasks become issues on the git host.
|
||||
|
||||
## Planning Assumptions
|
||||
|
||||
- Week 1 starts 2026-10-07; the plan ends by 2026-10-21, per the Business Case constraint.
|
||||
- Milestone length: three to four days, the length of one small pull request.
|
||||
- S01 is the owner and the approving reviewer of every milestone (see [SA-001]); communication with S01 follows the cadence of the Stakeholder Analysis: at every milestone.
|
||||
- The milestone dates are proposals; S01 confirms or moves them when reviewing this plan.
|
||||
- One branch per milestone, named after it (`mil-001-project-foundation` and so on), opened as one pull request that closes its issues.
|
||||
|
||||
## Gateway Schedule
|
||||
|
||||
| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| Project Foundation | [MIL-001] | 2026-10-07 to 2026-10-10 | 2026-10-10 | S01 | none | `pyproject.toml`, `.gitignore`, package and test skeleton, `Doxyfile`, continuous integration, README, repository description and topics | |
|
||||
| Square and Dashed Line | [MIL-002] | 2026-10-11 to 2026-10-14 | 2026-10-14 | S01 | none | `Pen` protocol, `draw_square`, `draw_dashed_line`, fake turtle, tests, command line entry | |
|
||||
| Shapes and Random Color | [MIL-003] | 2026-10-15 to 2026-10-17 | 2026-10-17 | S01 | none | `random_color`, color palette, `draw_shape`, `draw_shapes`, tests | |
|
||||
| Random Walk and Spirograph | [MIL-004] | 2026-10-18 to 2026-10-21 | 2026-10-21 | S01 | none | `random_walk`, `draw_spirograph`, tests, final README | |
|
||||
|
||||
```plantuml
|
||||
@startgantt
|
||||
Project starts 2026-10-07
|
||||
[Project Foundation] starts 2026-10-07 and ends 2026-10-10
|
||||
[Square and Dashed Line] starts 2026-10-11 and ends 2026-10-14
|
||||
[Shapes and Random Color] starts 2026-10-15 and ends 2026-10-17
|
||||
[Random Walk and Spirograph] starts 2026-10-18 and ends 2026-10-21
|
||||
[Project Foundation Go/No-Go] happens 2026-10-10
|
||||
[Square and Dashed Line Go/No-Go] happens 2026-10-14
|
||||
[Shapes and Random Color Go/No-Go] happens 2026-10-17
|
||||
[Random Walk and Spirograph Go/No-Go] happens 2026-10-21
|
||||
@endgantt
|
||||
```
|
||||
|
||||
## Scope Coverage
|
||||
|
||||
| Business Case scope item | Gateway |
|
||||
| --- | --- |
|
||||
| `src/`, `tests/`, `docs/` structure, `constants.py`, `pyproject.toml` | [MIL-001] |
|
||||
| Python `.gitignore` | [MIL-001] |
|
||||
| pytest, ruff and mypy set-up | [MIL-001]; each later milestone adds its tests |
|
||||
| Continuous integration workflow | [MIL-001] |
|
||||
| `Doxyfile` and the command to build the documentation | [MIL-001]; each later milestone keeps 0 warnings |
|
||||
| README with set-up for Windows PowerShell, Linux Debian and macOS | [MIL-001] (first version), [MIL-004] (final) |
|
||||
| Description and topics on the Gitea host and on GitHub | [MIL-001] |
|
||||
| Challenge 1, draw a square | [MIL-002] |
|
||||
| Challenge 2, draw a dashed line | [MIL-002] |
|
||||
| Challenge 3, draw different shapes, and the `random_color` helper | [MIL-003] |
|
||||
| Challenge 4, generate a random walk | [MIL-004] |
|
||||
| Challenge 5, draw a spirograph | [MIL-004] |
|
||||
|
||||
## Dependencies
|
||||
|
||||
```
|
||||
MIL-001 → MIL-002 → MIL-003 → MIL-004
|
||||
```
|
||||
|
||||
Each milestone needs the previous one `Accepted` with a Go review. A No-Go returns the milestone for rework and every later window moves by the rework time; the end date 2026-10-21 has no slack beyond the windows, so a No-Go on any milestone means S01 re-plans the remaining dates instead of letting them slide unrecorded.
|
||||
|
||||
## Plan Risks
|
||||
|
||||
| Risk | Impact | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| A milestone slips and the end date 2026-10-21 is missed | The deadline in [BC-001] is missed | Milestones are small; a No-Go triggers a re-plan with S01 and a new row in this document's Version History |
|
||||
| The `Pen` protocol of [MIL-002] is wrong, and [MIL-003] and [MIL-004] build on it | Rework spreads over three milestones | Criteria 1, 2 and 5 of [MIL-002] test the protocol with the fake turtle before anything depends on it |
|
||||
| The Gitea host has no Actions runner | Continuous integration cannot confirm the checks | Every milestone records the local results of pytest, ruff, mypy and Doxygen in its review; see the open issue below |
|
||||
| A token in `.env` expires or lacks a scope | Issues or repository metadata cannot be created | S01 renews the token; the dry run of `sync-project.sh` shows the plan without a token |
|
||||
|
||||
## Open Issues
|
||||
|
||||
- **Python bound:** "Python greater than 3.13" is read as `>=3.13` (3.13.14 is installed on S01's machine). If a version newer than 3.13 is meant, `requires-python` and the continuous integration version change to 3.14 or later, which is not installed.
|
||||
- **Dashed line length:** Turtle Challenge 2 says "a total of 50 segments", while the lecture's loop runs 15 times. The plan uses 50 dashes as a constant (`DASH_COUNT`) in `constants.py`; S01 confirms or sets 15.
|
||||
- **README template:** the agreed README template (Requirements, Set up, Run, Run the tests, Continuous integration, Build the source documentation, Project layout, License) differs from `framework/templates/README-template.md`. `framework/scripts/check-readme.sh` would flag the difference if its opt-in check were enabled; the agreed template is followed. S01 decides whether the framework check stays off.
|
||||
- **Use cases and user stories:** every task is a plain technical task. The program has one actor and one action (run a challenge), so no `UC` or `US` is written. S01 confirms.
|
||||
- **Development tools:** ruff and mypy are added as development dependencies, beyond the pytest the brief names, because `QC-PY-001` requires a formatter, a linter and (optionally) a strict type check. They are not runtime dependencies.
|
||||
- **Continuous integration host:** the workflow lives in `.github/workflows/ci.yml`, which GitHub Actions and Gitea Actions both read. Whether the Gitea host has a runner is not known.
|
||||
- **Diagram:** the PlantUML Gantt chart is not rendered yet because no PlantUML server is configured (`render-diagrams.sh --server <url>`).
|
||||
- **Reviews:** [BC-001], [SA-001], `DICT-001` and the four milestones were reviewed and ended in `Go` on 2026-10-07 (`RC-007` to `RC-013`, which re-review `RC-001` to `RC-006`); their Version History rows are `Accepted`. S01 accepted, in chat, that the author is also the reviewer, because the project has one person and no governance document exists. This plan has no checklist, so S01 accepts it directly: its row is still `Proposed`. S01 waived the plan-first gate in chat on 2026-10-07 for the first build, so the code of all four milestones was written before any document was reviewed; the waiver does not carry over to the next request. The code has not been reviewed against `QC-PY-001` yet.
|
||||
- **GitHub:** issues are synced to the `origin` remote (the Gitea host) only; the GitHub mirror gets the description and topics but no milestones or issues.
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ./business-case.md
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
[MIL-001]: ./milestones/mil-001-project-foundation.md
|
||||
[MIL-002]: ./milestones/mil-002-square-and-dashed-line.md
|
||||
[MIL-003]: ./milestones/mil-003-shapes-and-random-color.md
|
||||
[MIL-004]: ./milestones/mil-004-random-walk-and-spirograph.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,73 @@
|
||||
# Review Record: Business Case
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-001 |
|
||||
| CrossReference | [BC-001], [QC-BC-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [BC-001]
|
||||
- Checklist used: [QC-BC-001] (`QC-BC-001`, Business Case), together with [QC-LANG-001] because the type is written in the PO language
|
||||
- Scope: full review
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (not confirmed at the time of this review; S01 confirmed it in [RC-008])
|
||||
- Status of this record: closed on 2026-10-07. The statuses and evidence are the assistant's assessment of the first version of the document; the criteria that failed were re-reviewed in [RC-008], which ends in `Go`.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | The Cost–Benefit Assessment states that it is qualitative and why: no revenue, licence or hosting cost, so a monetary return would be invented. The only cost is S01's time, which is not estimated in hours. |
|
||||
| 2 | Risks are identified with documented impact and mitigation | Pass | Six risks, each with an Impact and a Mitigation; none without a mitigation. Impact is described, not rated. |
|
||||
| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | Seven success criteria, each with a Target and a Measure that is a number or a command (for example criterion 2: 0 failures, `python -m pytest` exits 0). |
|
||||
| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | `### In Scope` and `### Out of Scope` under `## Scope`. |
|
||||
| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | The Stakeholders table cites S01, S02 and S03 and states interests, not roles; the Executive Summary cites [SA-001]. The Assumptions line "S01 is the only contributor and is the reviewer" states a project fact by ID, which is acceptable. |
|
||||
| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | Optional. Methodological and Standards Foundation names the framework, ISO/IEC 25010:2023, PEP 8, PEP 257, PEP 484 and Doxygen. |
|
||||
| 7 | Assumptions and constraints are explicit and clearly distinguished from one another | Pass | Assumptions (four items) and Constraints (nine items) are separate lists. The deadline 2026-10-21 is a constraint, which the milestones trace to. |
|
||||
| 8 | Document supports executive decision-making with a clear, unambiguous recommendation | Pass | `## Recommendation`: "Proceed", with a one-sentence rationale. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Metadata has a `Language` row (`en`) and a `Domain` row (`it`); neither is a placeholder. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the domain list of `docs/artifact-registry.md`. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English. The author wrote it in English; the reviewer confirms by reading it. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives this type `IT Executive English`. Plain sentences for a decision maker. Tool names (pytest, ruff, mypy, Doxygen) appear in Scope and Constraints because the brief fixes them; this is a judgement call for the reviewer. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Fail | No Domain Dictionary exists (`docs/dictionary.md` is absent), so the domain terms cannot be checked against one. `N-A` is not allowed for this criterion. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, section headings, IDs and statuses are English and unchanged from the template. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | One file per artifact: `find docs -name '*.*.md'` finds no translated twin. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | Initial version: there is no earlier accepted version whose language could have changed. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Fail | Not yet confirmed. No record shows that the reviewer reads English and knows the IT domain (there is no reviewer training record, `TRR`). S01 confirms on this record or names a language reviewer. `N-A` is not allowed for this criterion. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | Optional. Not spelled out on first use: API, ISO/IEC, PEP, README, RGB, SQA. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go-with-conditions — the criteria of the type's checklist pass, and the language checklist fails criteria 5 and 9 (and 10 where listed), which the review process turns into conditions. The conditions were closed and re-reviewed in [RC-008], which ends in `Go` and covers the whole artifact.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Either record the deviation as accepted (this is a single-person project) or name another reviewer. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): decide how the domain terms are checked: draft `DICT-001` (`docs/dictionary.md`) with the terms the documents use and review it against `QC-DICT-001`, or record an accepted deviation. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, or name a language reviewer. | S01 | 2026-10-09 |
|
||||
| Optional (language criterion 10): spell out on first use: API, ISO/IEC, PEP, README, RGB, SQA. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../../business-case.md
|
||||
[QC-BC-001]: ../../../framework/qc/qc-business-case.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[SA-001]: ../../stakeholder-analysis.md
|
||||
[RC-008]: ./rc-008-business-case-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,74 @@
|
||||
# Review Record: Stakeholder Analysis
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-002 |
|
||||
| CrossReference | [SA-001], [QC-SA-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [SA-001]
|
||||
- Checklist used: [QC-SA-001] (`QC-SA-001`, Stakeholder Analysis), together with [QC-LANG-001] because the type is written in the PO language
|
||||
- Scope: full review
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (not confirmed at the time of this review; S01 confirmed it in [RC-009])
|
||||
- Status of this record: closed on 2026-10-07. The statuses and evidence are the assistant's assessment of the first version of the document; the criteria that failed were re-reviewed in [RC-009], which ends in `Go`.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Power/Interest grid is filled for every stakeholder, with no gaps or unclassified entries | Pass | Three stakeholders, each with Power, Interest and Quadrant. The levels of S02 and S03 are the author's classification, as the Purpose states; S01 confirms them (see the action items). |
|
||||
| 2 | Each stakeholder is assigned a unique, stable ID (e.g. S01-S11 style) reusable for RACI assignments in other artifacts | Pass | S01, S02 and S03 are unique and are the IDs used in [BC-001] and in the milestones. |
|
||||
| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | Each row has Role/Title, Organization and explicit HIGH or LOW levels, and the Rationale section is consistent with the table. |
|
||||
| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | Optional. The Communication Requirements table gives channel, frequency, deliverable and the milestone (MIL-001 to MIL-004) for each stakeholder. |
|
||||
| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | Three conflicts, each with stakeholders and a mitigation (function names against testability, no runtime dependencies against development tools, tokens against a public repository). |
|
||||
| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | The Business Goal Alignment table traces eight concerns to objectives O1 to O7 of [BC-001]. The concern "tokens in `.env` stay private" has no objective of its own; it is traced to O6 and to the Risks table, a weak but honest link. |
|
||||
| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | Optional. The concerns table gives each concern in business language and a FURPS+ attribute. |
|
||||
| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | Optional. Short sections and tables in plain language; the abbreviations FURPS+ and RACI are not explained (see language criterion 10). |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Metadata has a `Language` row (`en`) and a `Domain` row (`it`); neither is a placeholder. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the domain list of `docs/artifact-registry.md`. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English. The author wrote it in English; the reviewer confirms by reading it. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives this type `IT Professional English`. Technical wording for a professional reader, as the registry intends. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Fail | No Domain Dictionary exists (`docs/dictionary.md` is absent), so the domain terms cannot be checked against one. `N-A` is not allowed for this criterion. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, section headings, IDs and statuses are English and unchanged from the template. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | One file per artifact: `find docs -name '*.*.md'` finds no translated twin. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | Initial version: there is no earlier accepted version whose language could have changed. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Fail | Not yet confirmed. No record shows that the reviewer reads English and knows the IT domain (there is no reviewer training record, `TRR`). S01 confirms on this record or names a language reviewer. `N-A` is not allowed for this criterion. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | Optional. Not spelled out on first use: FURPS+, RACI, README. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go-with-conditions — the criteria of the type's checklist pass, and the language checklist fails criteria 5 and 9 (and 10 where listed), which the review process turns into conditions. The conditions were closed and re-reviewed in [RC-009], which ends in `Go` and covers the whole artifact.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Either record the deviation as accepted (this is a single-person project) or name another reviewer. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): decide how the domain terms are checked: draft `DICT-001` (`docs/dictionary.md`) with the terms the documents use and review it against `QC-DICT-001`, or record an accepted deviation. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, or name a language reviewer. | S01 | 2026-10-09 |
|
||||
| Condition: confirm the Power and Interest levels of S02 (LOW, HIGH) and S03 (LOW, LOW), and replace the `Pending` text under `## Sign-Off` with the sign-off once the verdict is `Go`. | S01 | 2026-10-09 |
|
||||
| Optional (language criterion 10): spell out on first use: FURPS+, RACI, README. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[SA-001]: ../../stakeholder-analysis.md
|
||||
[QC-SA-001]: ../../../framework/qc/qc-stakeholder-analysis.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[BC-001]: ../../business-case.md
|
||||
[RC-009]: ./rc-009-stakeholder-analysis-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,71 @@
|
||||
# Review Record: Milestone 001
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-003 |
|
||||
| CrossReference | [MIL-001], [QC-MIL-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-001]
|
||||
- Checklist used: [QC-MIL-001] (`QC-MIL-001`, Milestones / Gateways), together with [QC-LANG-001] because the type is written in the PO language
|
||||
- Scope: full review
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (not confirmed at the time of this review; S01 confirmed it in [RC-010])
|
||||
- Status of this record: closed on 2026-10-07. The statuses and evidence are the assistant's assessment of the first version of the document; the criteria that failed were re-reviewed in [RC-010], which ends in `Go`.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section lists concrete outputs: `pyproject.toml`, `.gitignore`, package and test skeleton, `Doxyfile`, a continuous integration workflow, `README.md`, and the repository description and topics. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Ten criteria, each with a Go and a No-Go condition and a command or a file check (for example criterion 5: `doxygen Doxyfile` with 0 warnings). Criterion 10 needs a code review record against `QC-PY-001` that does not exist yet, which is a legitimate open gate item. Checked on the finished working tree on 2026-10-07, not yet on the milestone's own branch: criteria 1 to 9 hold (92 tests pass, ruff and mypy are clean, 0 Doxygen warnings, `.env` is ignored, the description and 11 topics are set on both hosts, the workflow file has all the steps), but the workflow has never run. |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Optional. The Dependencies table names what must be accepted first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | The Traceability table maps the milestone to O3, O4, O5, O6 and O7 of [BC-001]; all five exist. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner S01 and approving reviewer S01 are identified. They are the same person, which the first action item covers. |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-10-10 is before the Business Case deadline 2026-10-21 and leaves eleven days. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Metadata has a `Language` row (`en`) and a `Domain` row (`it`); neither is a placeholder. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the domain list of `docs/artifact-registry.md`. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English. The author wrote it in English; the reviewer confirms by reading it. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives this type `IT Executive English`. Judgement call for the reviewer: the Tasks table and the Go / No-Go criteria carry developer-level detail (function names, commands) although the registry gives milestones the executive register; the only reader is S01, who is also the developer. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Fail | No Domain Dictionary exists (`docs/dictionary.md` is absent), so the domain terms cannot be checked against one. `N-A` is not allowed for this criterion. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, section headings, IDs and statuses are English and unchanged from the template. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | One file per artifact: `find docs -name '*.*.md'` finds no translated twin. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | Initial version: there is no earlier accepted version whose language could have changed. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Fail | Not yet confirmed. No record shows that the reviewer reads English and knows the IT domain (there is no reviewer training record, `TRR`). S01 confirms on this record or names a language reviewer. `N-A` is not allowed for this criterion. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | Optional. Not spelled out on first use: HTML, README. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go-with-conditions — the criteria of the type's checklist pass, and the language checklist fails criteria 5 and 9 (and 10 where listed), which the review process turns into conditions. The conditions were closed and re-reviewed in [RC-010], which ends in `Go` and covers the whole artifact.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Either record the deviation as accepted (this is a single-person project) or name another reviewer. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): decide how the domain terms are checked: draft `DICT-001` (`docs/dictionary.md`) with the terms the documents use and review it against `QC-DICT-001`, or record an accepted deviation. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, or name a language reviewer. | S01 | 2026-10-09 |
|
||||
| Optional (language criterion 10): spell out on first use: HTML, README. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-001]: ../../milestones/mil-001-project-foundation.md
|
||||
[QC-MIL-001]: ../../../framework/qc/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[BC-001]: ../../business-case.md
|
||||
[RC-010]: ./rc-010-mil-001-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,70 @@
|
||||
# Review Record: Milestone 002
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-004 |
|
||||
| CrossReference | [MIL-002], [QC-MIL-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-002]
|
||||
- Checklist used: [QC-MIL-001] (`QC-MIL-001`, Milestones / Gateways), together with [QC-LANG-001] because the type is written in the PO language
|
||||
- Scope: full review
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (not confirmed at the time of this review; S01 confirmed it in [RC-011])
|
||||
- Status of this record: closed on 2026-10-07. The statuses and evidence are the assistant's assessment of the first version of the document; the criteria that failed were re-reviewed in [RC-011], which ends in `Go`.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section lists the `Pen` protocol and window helpers, `draw_square`, `draw_dashed_line`, a recording fake pen, tests and the command line entry. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Seven criteria with a Go and a No-Go condition. Checked on the finished working tree on 2026-10-07: criteria 1, 2, 3, 5 and 6 hold (the zero in the length checks is a guard, not a drawing constant). Criterion 4 (S01 runs both challenges from the command line) has not been done; a script has run all five challenges against the real `turtle` library without error. Criterion 7 needs a code review record that does not exist yet. |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Optional. The Dependencies table names what must be accepted first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Maps to O1, O2 and O5 of [BC-001]; all three exist. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner S01 and approving reviewer S01 are identified. They are the same person, which the first action item covers. |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-10-14 follows MIL-001 (2026-10-10) and is before 2026-10-21. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Metadata has a `Language` row (`en`) and a `Domain` row (`it`); neither is a placeholder. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the domain list of `docs/artifact-registry.md`. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English. The author wrote it in English; the reviewer confirms by reading it. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives this type `IT Executive English`. Judgement call for the reviewer: the Tasks table and the Go / No-Go criteria carry developer-level detail (function names, commands) although the registry gives milestones the executive register; the only reader is S01, who is also the developer. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Fail | No Domain Dictionary exists (`docs/dictionary.md` is absent), so the domain terms cannot be checked against one. `N-A` is not allowed for this criterion. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, section headings, IDs and statuses are English and unchanged from the template. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | One file per artifact: `find docs -name '*.*.md'` finds no translated twin. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | Initial version: there is no earlier accepted version whose language could have changed. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Fail | Not yet confirmed. No record shows that the reviewer reads English and knows the IT domain (there is no reviewer training record, `TRR`). S01 confirms on this record or names a language reviewer. `N-A` is not allowed for this criterion. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Optional. No abbreviation needs spelling out (KPI appears only in the template's table heading). |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go-with-conditions — the criteria of the type's checklist pass, and the language checklist fails criteria 5 and 9 (and 10 where listed), which the review process turns into conditions. The conditions were closed and re-reviewed in [RC-011], which ends in `Go` and covers the whole artifact.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Either record the deviation as accepted (this is a single-person project) or name another reviewer. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): decide how the domain terms are checked: draft `DICT-001` (`docs/dictionary.md`) with the terms the documents use and review it against `QC-DICT-001`, or record an accepted deviation. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, or name a language reviewer. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-002]: ../../milestones/mil-002-square-and-dashed-line.md
|
||||
[QC-MIL-001]: ../../../framework/qc/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[BC-001]: ../../business-case.md
|
||||
[RC-011]: ./rc-011-mil-002-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,71 @@
|
||||
# Review Record: Milestone 003
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-005 |
|
||||
| CrossReference | [MIL-003], [QC-MIL-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-003]
|
||||
- Checklist used: [QC-MIL-001] (`QC-MIL-001`, Milestones / Gateways), together with [QC-LANG-001] because the type is written in the PO language
|
||||
- Scope: full review
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (not confirmed at the time of this review; S01 confirmed it in [RC-012])
|
||||
- Status of this record: closed on 2026-10-07. The statuses and evidence are the assistant's assessment of the first version of the document; the criteria that failed were re-reviewed in [RC-012], which ends in `Go`.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section lists `random_color`, the color palette, `draw_shape`, `draw_shapes`, their tests and the `shapes` command. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Seven criteria with a Go and a No-Go condition. Checked on the finished working tree on 2026-10-07: criteria 1 to 4 and 6 hold. Criterion 5 (S01 runs `shapes` from the command line) has not been done; criterion 7 needs a code review record that does not exist yet. |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Optional. The Dependencies table names what must be accepted first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Maps to O1, O2 and O5 of [BC-001]; all three exist. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner S01 and approving reviewer S01 are identified. They are the same person, which the first action item covers. |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-10-17 follows MIL-002 (2026-10-14) and leaves four days before 2026-10-21. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Metadata has a `Language` row (`en`) and a `Domain` row (`it`); neither is a placeholder. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the domain list of `docs/artifact-registry.md`. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English. The author wrote it in English; the reviewer confirms by reading it. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives this type `IT Executive English`. Judgement call for the reviewer: the Tasks table and the Go / No-Go criteria carry developer-level detail (function names, commands) although the registry gives milestones the executive register; the only reader is S01, who is also the developer. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Fail | No Domain Dictionary exists (`docs/dictionary.md` is absent), so the domain terms cannot be checked against one. `N-A` is not allowed for this criterion. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, section headings, IDs and statuses are English and unchanged from the template. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | One file per artifact: `find docs -name '*.*.md'` finds no translated twin. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | Initial version: there is no earlier accepted version whose language could have changed. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Fail | Not yet confirmed. No record shows that the reviewer reads English and knows the IT domain (there is no reviewer training record, `TRR`). S01 confirms on this record or names a language reviewer. `N-A` is not allowed for this criterion. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | Optional. Not spelled out on first use: RGB. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go-with-conditions — the criteria of the type's checklist pass, and the language checklist fails criteria 5 and 9 (and 10 where listed), which the review process turns into conditions. The conditions were closed and re-reviewed in [RC-012], which ends in `Go` and covers the whole artifact.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Either record the deviation as accepted (this is a single-person project) or name another reviewer. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): decide how the domain terms are checked: draft `DICT-001` (`docs/dictionary.md`) with the terms the documents use and review it against `QC-DICT-001`, or record an accepted deviation. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, or name a language reviewer. | S01 | 2026-10-09 |
|
||||
| Optional (language criterion 10): spell out on first use: RGB. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-003]: ../../milestones/mil-003-shapes-and-random-color.md
|
||||
[QC-MIL-001]: ../../../framework/qc/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[BC-001]: ../../business-case.md
|
||||
[RC-012]: ./rc-012-mil-003-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,71 @@
|
||||
# Review Record: Milestone 004
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-006 |
|
||||
| CrossReference | [MIL-004], [QC-MIL-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-004]
|
||||
- Checklist used: [QC-MIL-001] (`QC-MIL-001`, Milestones / Gateways), together with [QC-LANG-001] because the type is written in the PO language
|
||||
- Scope: full review
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (not confirmed at the time of this review; S01 confirmed it in [RC-013])
|
||||
- Status of this record: closed on 2026-10-07. The statuses and evidence are the assistant's assessment of the first version of the document; the criteria that failed were re-reviewed in [RC-013], which ends in `Go`.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section lists `random_walk`, `draw_spirograph`, their tests, the two commands and the final README. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Nine criteria with a Go and a No-Go condition. Checked on the finished working tree on 2026-10-07: criteria 1 to 4 and 8 hold. Criterion 5 (S01 runs both commands), 6 (all seven Business Case success criteria, of which 5 and 7 need S01's fresh-clone run), 7 (fresh clone from the README) and 9 (code review record) are not done yet. |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Optional. The Dependencies table names what must be accepted first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Maps to O1, O3, O6 and O7 of [BC-001]; all four exist. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner S01 and approving reviewer S01 are identified. They are the same person, which the first action item covers. |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-10-21 equals the Business Case deadline: consistent, with no slack. The Project Plan says what a No-Go does to this date. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Metadata has a `Language` row (`en`) and a `Domain` row (`it`); neither is a placeholder. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the domain list of `docs/artifact-registry.md`. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English. The author wrote it in English; the reviewer confirms by reading it. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives this type `IT Executive English`. Judgement call for the reviewer: the Tasks table and the Go / No-Go criteria carry developer-level detail (function names, commands) although the registry gives milestones the executive register; the only reader is S01, who is also the developer. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Fail | No Domain Dictionary exists (`docs/dictionary.md` is absent), so the domain terms cannot be checked against one. `N-A` is not allowed for this criterion. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, section headings, IDs and statuses are English and unchanged from the template. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | One file per artifact: `find docs -name '*.*.md'` finds no translated twin. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | Initial version: there is no earlier accepted version whose language could have changed. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Fail | Not yet confirmed. No record shows that the reviewer reads English and knows the IT domain (there is no reviewer training record, `TRR`). S01 confirms on this record or names a language reviewer. `N-A` is not allowed for this criterion. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | Optional. Not spelled out on first use: README, RGB. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go-with-conditions — the criteria of the type's checklist pass, and the language checklist fails criteria 5 and 9 (and 10 where listed), which the review process turns into conditions. The conditions were closed and re-reviewed in [RC-013], which ends in `Go` and covers the whole artifact.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Either record the deviation as accepted (this is a single-person project) or name another reviewer. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): decide how the domain terms are checked: draft `DICT-001` (`docs/dictionary.md`) with the terms the documents use and review it against `QC-DICT-001`, or record an accepted deviation. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, or name a language reviewer. | S01 | 2026-10-09 |
|
||||
| Optional (language criterion 10): spell out on first use: README, RGB. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-004]: ../../milestones/mil-004-random-walk-and-spirograph.md
|
||||
[QC-MIL-001]: ../../../framework/qc/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[BC-001]: ../../business-case.md
|
||||
[RC-013]: ./rc-013-mil-004-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,79 @@
|
||||
# Review Record: Domain Dictionary
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-007 |
|
||||
| CrossReference | [DICT-001], [QC-DICT-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [DICT-001]
|
||||
- Checklist used: [QC-DICT-001] (`QC-DICT-001`, Domain Dictionary), together with [QC-LANG-001] because the type is written in the PO language
|
||||
- Scope: full review
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (S01 confirmed on 2026-10-07 that S01 reads English and knows the IT domain)
|
||||
- Status of this record: decided on 2026-10-07 by S01, the reviewer. The statuses and evidence are the assistant's assessment, confirmed by S01.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Every row has a PO term, its language, an IT term and a definition | Pass | All eight rows have a PO term, a language, an IT term and a definition. |
|
||||
| 2 | Each PO term maps to exactly one IT term and the reverse (no synonyms) | Pass | Eight pairs, checked row by row: each PO term has one IT term and each IT term one PO term. For `challenge` the word is the same on both sides on purpose (the code uses it as a name). |
|
||||
| 3 | Every Domain Model concept has a row, and the Domain Model uses its PO term | N-A | No Domain Model exists: no use case was written (see the open issues of the Project Plan). |
|
||||
| 4 | The Operation Contracts, Sequence Diagrams, Design Class Diagrams and ERD use the IT term, not the PO term | N-A | No Operation Contract, Sequence Diagram, Design Class Diagram or ERD exists. The source code uses the IT terms and keeps the assignment's function names, as the Rules say. |
|
||||
| 5 | Definitions are written in the PO language and are one sentence | Pass | Optional. Every definition is English and one sentence. |
|
||||
| 6 | "Used as PO term in" and "Used as IT term in" name artifact types that exist in the project | Pass | Optional. The artifact types named (BC, SA, PP, MIL, PY) all exist in the project. |
|
||||
| 7 | The dictionary's `Language` and `Domain` rows, and the language of every row, match the PO language and domain in the project registry | Pass | `Language` is `en` and `Domain` is `it`, as in the registry; every row's language is `en`. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Metadata has a `Language` row (`en`) and a `Domain` row (`it`); neither is a placeholder. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the domain list of `docs/artifact-registry.md`. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives this type `IT Professional English`; the Rules and definitions are short technical sentences. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | This document is the dictionary: the other documents are checked against it in the delta re-reviews [RC-008] to [RC-013]. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, section headings, IDs and statuses are English and unchanged from the template. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | One file per artifact: `find docs -name '*.*.md'` finds no translated twin. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | Initial version: there is no earlier accepted version whose language could have changed. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-07: S01 reads English and knows the IT domain. S01 is also the author (see the verdict). |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Optional. PO is spelled out in the Purpose, and RGB in the table row where it first appears. The other short forms are artifact type names (BC, SA, PP, MIL, PY, DICT), which the artifact catalog defines. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all 5 applicable criteria of `QC-DICT-001` pass (criteria 3 and 4 are `N-A` because no Domain Model or design artifact exists), and the language criteria pass, criterion 9 on S01's confirmation.
|
||||
|
||||
Reviewer eligibility: S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. S01 accepted this deviation in chat on 2026-10-07: the project has one person, and no governance document (`GOV`) exists to say otherwise.
|
||||
|
||||
Because this is a `Go`, criterion 5 of the six delta re-reviews, [RC-008] to [RC-013], stands. The latest Version History row of `DICT-001` is set to `Accepted`.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, then change the status of row 9 to `Pass` (or name a language reviewer). Closed: S01 confirmed on 2026-10-07 and row 9 is `Pass`. | S01 | 2026-10-09 |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Record the deviation as accepted (single-person project) or name another reviewer. Closed: S01 accepted the deviation on 2026-10-07. | S01 | 2026-10-09 |
|
||||
| After the verdict `Go`: set the latest Version History row of `DICT-001` to `Accepted` and update the traceability matrix. Done on 2026-10-07. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[DICT-001]: ../../dictionary.md
|
||||
[QC-DICT-001]: ../../../framework/qc/qc-dictionary.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[RC-008]: ./rc-008-business-case-re-review.md
|
||||
[RC-009]: ./rc-009-stakeholder-analysis-re-review.md
|
||||
[RC-010]: ./rc-010-mil-001-re-review.md
|
||||
[RC-011]: ./rc-011-mil-002-re-review.md
|
||||
[RC-012]: ./rc-012-mil-003-re-review.md
|
||||
[RC-013]: ./rc-013-mil-004-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,63 @@
|
||||
# Review Record: Business Case, delta re-review
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-008 |
|
||||
| CrossReference | [BC-001], [RC-001], [DICT-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [BC-001]
|
||||
- Checklist used: [QC-LANG-001] (`QC-LANG-001`, Language and Domain); the checklist of the type, `QC-BC-001`, is not repeated
|
||||
- Scope: delta re-review of criteria 5, 9 and 10 of `QC-LANG-001`. Reason: the first review, [RC-001], failed these criteria; [DICT-001] now exists, the abbreviations are spelled out on first use, and the prose of the document follows the dictionary. Earlier record: [RC-001]. The verdict covers the whole artifact only if the other rows of [RC-001] still hold: they do, because the changes since then are wording only (terms and abbreviations); the content, scope, criteria and conclusions of the document are unchanged.
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (S01 confirmed on 2026-10-07 that S01 reads English and knows the IT domain)
|
||||
- Status of this record: decided on 2026-10-07 by S01, the reviewer. The statuses and evidence are the assistant's assessment, confirmed by S01.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
Not repeated in this delta re-review: the 8 criteria of `QC-BC-001` hold as recorded in [RC-001].
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
Only the criteria of the delta (5, 9 and 10); the other rows of [RC-001] hold.
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | [DICT-001] exists with eight terms. A scan of the prose of this document (outside code spans, fenced blocks and the template's own headings) finds none of the words the dictionary forbids: "pen" for the turtle, "gate", "gateway" or "phase". The turtle library's "pen up", "pen down" and "pen size" and the proper name "plan-first gate" remain, as the dictionary Rules allow. Holds only if [DICT-001] is accepted (see [RC-007]). |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-07: S01 reads English and knows the IT domain. S01 is also the author (see the verdict). |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Optional. Spelled out on first use, checked by a scan of the document: SQA, QC, ISO/IEC, PEP, RGB. No other abbreviation remains except file names (README) and artifact IDs. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — criteria 5, 9 and 10 of `QC-LANG-001` pass (criterion 9 on S01's confirmation, criterion 5 because [DICT-001] is accepted in [RC-007]). The other rows of [RC-001] still hold, since the changes since then are wording only, so the verdict covers the whole artifact.
|
||||
|
||||
Reviewer eligibility: S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. S01 accepted this deviation in chat on 2026-10-07: the project has one person, and no governance document (`GOV`) exists to say otherwise.
|
||||
|
||||
The latest Version History row of the artifact is set to `Accepted` and the traceability matrix is updated.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, then change the status of row 9 to `Pass` (or name a language reviewer). Closed: S01 confirmed on 2026-10-07 and row 9 is `Pass`. | S01 | 2026-10-09 |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Record the deviation as accepted (single-person project) or name another reviewer. Closed: S01 accepted the deviation on 2026-10-07. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): `DICT-001` must be `Accepted`; this `Pass` stands only if its own review, [RC-007], ends in `Go`. Closed: [RC-007] ends in `Go`. | S01 | 2026-10-09 |
|
||||
| After the verdict `Go`: set the latest Version History row of the artifact to `Accepted` and update its row in the traceability matrix. Done on 2026-10-07. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../../business-case.md
|
||||
[RC-001]: ./rc-001-business-case.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[RC-007]: ./rc-007-dictionary.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,63 @@
|
||||
# Review Record: Stakeholder Analysis, delta re-review
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-009 |
|
||||
| CrossReference | [SA-001], [RC-002], [DICT-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [SA-001]
|
||||
- Checklist used: [QC-LANG-001] (`QC-LANG-001`, Language and Domain); the checklist of the type, `QC-SA-001`, is not repeated
|
||||
- Scope: delta re-review of criteria 5, 9 and 10 of `QC-LANG-001`. Reason: the first review, [RC-002], failed these criteria; [DICT-001] now exists, the abbreviations are spelled out on first use, and the prose of the document follows the dictionary. Earlier record: [RC-002]. The verdict covers the whole artifact only if the other rows of [RC-002] still hold: they do, because the changes since then are wording only (terms and abbreviations); the content, scope, criteria and conclusions of the document are unchanged.
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (S01 confirmed on 2026-10-07 that S01 reads English and knows the IT domain)
|
||||
- Status of this record: decided on 2026-10-07 by S01, the reviewer. The statuses and evidence are the assistant's assessment, confirmed by S01.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
Not repeated in this delta re-review: the 8 criteria of `QC-SA-001` hold as recorded in [RC-002].
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
Only the criteria of the delta (5, 9 and 10); the other rows of [RC-002] hold.
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | [DICT-001] exists with eight terms. A scan of the prose of this document (outside code spans, fenced blocks and the template's own headings) finds none of the words the dictionary forbids: "pen" for the turtle, "gate", "gateway" or "phase". The turtle library's "pen up", "pen down" and "pen size" and the proper name "plan-first gate" remain, as the dictionary Rules allow. Holds only if [DICT-001] is accepted (see [RC-007]). |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-07: S01 reads English and knows the IT domain. S01 is also the author (see the verdict). |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Optional. Spelled out on first use, checked by a scan of the document: FURPS+, RACI. No other abbreviation remains except file names (README) and artifact IDs. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — criteria 5, 9 and 10 of `QC-LANG-001` pass (criterion 9 on S01's confirmation, criterion 5 because [DICT-001] is accepted in [RC-007]). The other rows of [RC-002] still hold, since the changes since then are wording only, so the verdict covers the whole artifact.
|
||||
|
||||
Reviewer eligibility: S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. S01 accepted this deviation in chat on 2026-10-07: the project has one person, and no governance document (`GOV`) exists to say otherwise.
|
||||
|
||||
The latest Version History row of the artifact is set to `Accepted` and the traceability matrix is updated.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, then change the status of row 9 to `Pass` (or name a language reviewer). Closed: S01 confirmed on 2026-10-07 and row 9 is `Pass`. | S01 | 2026-10-09 |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Record the deviation as accepted (single-person project) or name another reviewer. Closed: S01 accepted the deviation on 2026-10-07. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): `DICT-001` must be `Accepted`; this `Pass` stands only if its own review, [RC-007], ends in `Go`. Closed: [RC-007] ends in `Go`. | S01 | 2026-10-09 |
|
||||
| After the verdict `Go`: set the latest Version History row of the artifact to `Accepted` and update its row in the traceability matrix. Done on 2026-10-07. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[SA-001]: ../../stakeholder-analysis.md
|
||||
[RC-002]: ./rc-002-stakeholder-analysis.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[RC-007]: ./rc-007-dictionary.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,63 @@
|
||||
# Review Record: Milestone 001, delta re-review
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-010 |
|
||||
| CrossReference | [MIL-001], [RC-003], [DICT-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-001]
|
||||
- Checklist used: [QC-LANG-001] (`QC-LANG-001`, Language and Domain); the checklist of the type, `QC-MIL-001`, is not repeated
|
||||
- Scope: delta re-review of criteria 5, 9 and 10 of `QC-LANG-001`. Reason: the first review, [RC-003], failed these criteria; [DICT-001] now exists, the abbreviations are spelled out on first use, and the prose of the document follows the dictionary. Earlier record: [RC-003]. The verdict covers the whole artifact only if the other rows of [RC-003] still hold: they do, because the changes since then are wording only (terms and abbreviations); the content, scope, criteria and conclusions of the document are unchanged.
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (S01 confirmed on 2026-10-07 that S01 reads English and knows the IT domain)
|
||||
- Status of this record: decided on 2026-10-07 by S01, the reviewer. The statuses and evidence are the assistant's assessment, confirmed by S01.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
Not repeated in this delta re-review: the 6 criteria of `QC-MIL-001` hold as recorded in [RC-003].
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
Only the criteria of the delta (5, 9 and 10); the other rows of [RC-003] hold.
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | [DICT-001] exists with eight terms. A scan of the prose of this document (outside code spans, fenced blocks and the template's own headings) finds none of the words the dictionary forbids: "pen" for the turtle, "gate", "gateway" or "phase". The turtle library's "pen up", "pen down" and "pen size" and the proper name "plan-first gate" remain, as the dictionary Rules allow. Holds only if [DICT-001] is accepted (see [RC-007]). |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-07: S01 reads English and knows the IT domain. S01 is also the author (see the verdict). |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Optional. Spelled out on first use, checked by a scan of the document: HTML. No other abbreviation remains except file names (README) and artifact IDs. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — criteria 5, 9 and 10 of `QC-LANG-001` pass (criterion 9 on S01's confirmation, criterion 5 because [DICT-001] is accepted in [RC-007]). The other rows of [RC-003] still hold, since the changes since then are wording only, so the verdict covers the whole artifact.
|
||||
|
||||
Reviewer eligibility: S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. S01 accepted this deviation in chat on 2026-10-07: the project has one person, and no governance document (`GOV`) exists to say otherwise.
|
||||
|
||||
The latest Version History row of the artifact is set to `Accepted` and the traceability matrix is updated.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, then change the status of row 9 to `Pass` (or name a language reviewer). Closed: S01 confirmed on 2026-10-07 and row 9 is `Pass`. | S01 | 2026-10-09 |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Record the deviation as accepted (single-person project) or name another reviewer. Closed: S01 accepted the deviation on 2026-10-07. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): `DICT-001` must be `Accepted`; this `Pass` stands only if its own review, [RC-007], ends in `Go`. Closed: [RC-007] ends in `Go`. | S01 | 2026-10-09 |
|
||||
| After the verdict `Go`: set the latest Version History row of the artifact to `Accepted` and update its row in the traceability matrix. Done on 2026-10-07. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-001]: ../../milestones/mil-001-project-foundation.md
|
||||
[RC-003]: ./rc-003-mil-001-project-foundation.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[RC-007]: ./rc-007-dictionary.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,62 @@
|
||||
# Review Record: Milestone 002, delta re-review
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-011 |
|
||||
| CrossReference | [MIL-002], [RC-004], [DICT-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-002]
|
||||
- Checklist used: [QC-LANG-001] (`QC-LANG-001`, Language and Domain); the checklist of the type, `QC-MIL-001`, is not repeated
|
||||
- Scope: delta re-review of criteria 5 and 9 of `QC-LANG-001`. Reason: the first review, [RC-004], failed these criteria; [DICT-001] now exists, and the prose of the document follows the dictionary. Earlier record: [RC-004]. The verdict covers the whole artifact only if the other rows of [RC-004] still hold: they do, because the changes since then are wording only (terms); the content, scope, criteria and conclusions of the document are unchanged.
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (S01 confirmed on 2026-10-07 that S01 reads English and knows the IT domain)
|
||||
- Status of this record: decided on 2026-10-07 by S01, the reviewer. The statuses and evidence are the assistant's assessment, confirmed by S01.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
Not repeated in this delta re-review: the 6 criteria of `QC-MIL-001` hold as recorded in [RC-004].
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
Only the criteria of the delta (5 and 9); the other rows of [RC-004] hold.
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | [DICT-001] exists with eight terms. A scan of the prose of this document (outside code spans, fenced blocks and the template's own headings) finds none of the words the dictionary forbids: "pen" for the turtle, "gate", "gateway" or "phase". The turtle library's "pen up", "pen down" and "pen size" and the proper name "plan-first gate" remain, as the dictionary Rules allow. Holds only if [DICT-001] is accepted (see [RC-007]). |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-07: S01 reads English and knows the IT domain. S01 is also the author (see the verdict). |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — criteria 5 and 9 of `QC-LANG-001` pass (criterion 9 on S01's confirmation, criterion 5 because [DICT-001] is accepted in [RC-007]). The other rows of [RC-004] still hold, since the changes since then are wording only, so the verdict covers the whole artifact.
|
||||
|
||||
Reviewer eligibility: S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. S01 accepted this deviation in chat on 2026-10-07: the project has one person, and no governance document (`GOV`) exists to say otherwise.
|
||||
|
||||
The latest Version History row of the artifact is set to `Accepted` and the traceability matrix is updated.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, then change the status of row 9 to `Pass` (or name a language reviewer). Closed: S01 confirmed on 2026-10-07 and row 9 is `Pass`. | S01 | 2026-10-09 |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Record the deviation as accepted (single-person project) or name another reviewer. Closed: S01 accepted the deviation on 2026-10-07. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): `DICT-001` must be `Accepted`; this `Pass` stands only if its own review, [RC-007], ends in `Go`. Closed: [RC-007] ends in `Go`. | S01 | 2026-10-09 |
|
||||
| After the verdict `Go`: set the latest Version History row of the artifact to `Accepted` and update its row in the traceability matrix. Done on 2026-10-07. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-002]: ../../milestones/mil-002-square-and-dashed-line.md
|
||||
[RC-004]: ./rc-004-mil-002-square-and-dashed-line.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[RC-007]: ./rc-007-dictionary.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,63 @@
|
||||
# Review Record: Milestone 003, delta re-review
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-012 |
|
||||
| CrossReference | [MIL-003], [RC-005], [DICT-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-003]
|
||||
- Checklist used: [QC-LANG-001] (`QC-LANG-001`, Language and Domain); the checklist of the type, `QC-MIL-001`, is not repeated
|
||||
- Scope: delta re-review of criteria 5, 9 and 10 of `QC-LANG-001`. Reason: the first review, [RC-005], failed these criteria; [DICT-001] now exists, the abbreviations are spelled out on first use, and the prose of the document follows the dictionary. Earlier record: [RC-005]. The verdict covers the whole artifact only if the other rows of [RC-005] still hold: they do, because the changes since then are wording only (terms and abbreviations); the content, scope, criteria and conclusions of the document are unchanged.
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (S01 confirmed on 2026-10-07 that S01 reads English and knows the IT domain)
|
||||
- Status of this record: decided on 2026-10-07 by S01, the reviewer. The statuses and evidence are the assistant's assessment, confirmed by S01.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
Not repeated in this delta re-review: the 6 criteria of `QC-MIL-001` hold as recorded in [RC-005].
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
Only the criteria of the delta (5, 9 and 10); the other rows of [RC-005] hold.
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | [DICT-001] exists with eight terms. A scan of the prose of this document (outside code spans, fenced blocks and the template's own headings) finds none of the words the dictionary forbids: "pen" for the turtle, "gate", "gateway" or "phase". The turtle library's "pen up", "pen down" and "pen size" and the proper name "plan-first gate" remain, as the dictionary Rules allow. Holds only if [DICT-001] is accepted (see [RC-007]). |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-07: S01 reads English and knows the IT domain. S01 is also the author (see the verdict). |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Optional. Spelled out on first use, checked by a scan of the document: RGB. No other abbreviation remains except file names (README) and artifact IDs. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — criteria 5, 9 and 10 of `QC-LANG-001` pass (criterion 9 on S01's confirmation, criterion 5 because [DICT-001] is accepted in [RC-007]). The other rows of [RC-005] still hold, since the changes since then are wording only, so the verdict covers the whole artifact.
|
||||
|
||||
Reviewer eligibility: S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. S01 accepted this deviation in chat on 2026-10-07: the project has one person, and no governance document (`GOV`) exists to say otherwise.
|
||||
|
||||
The latest Version History row of the artifact is set to `Accepted` and the traceability matrix is updated.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, then change the status of row 9 to `Pass` (or name a language reviewer). Closed: S01 confirmed on 2026-10-07 and row 9 is `Pass`. | S01 | 2026-10-09 |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Record the deviation as accepted (single-person project) or name another reviewer. Closed: S01 accepted the deviation on 2026-10-07. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): `DICT-001` must be `Accepted`; this `Pass` stands only if its own review, [RC-007], ends in `Go`. Closed: [RC-007] ends in `Go`. | S01 | 2026-10-09 |
|
||||
| After the verdict `Go`: set the latest Version History row of the artifact to `Accepted` and update its row in the traceability matrix. Done on 2026-10-07. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-003]: ../../milestones/mil-003-shapes-and-random-color.md
|
||||
[RC-005]: ./rc-005-mil-003-shapes-and-random-color.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[RC-007]: ./rc-007-dictionary.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,63 @@
|
||||
# Review Record: Milestone 004, delta re-review
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-013 |
|
||||
| CrossReference | [MIL-004], [RC-006], [DICT-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-004]
|
||||
- Checklist used: [QC-LANG-001] (`QC-LANG-001`, Language and Domain); the checklist of the type, `QC-MIL-001`, is not repeated
|
||||
- Scope: delta re-review of criteria 5, 9 and 10 of `QC-LANG-001`. Reason: the first review, [RC-006], failed these criteria; [DICT-001] now exists, the abbreviations are spelled out on first use, and the prose of the document follows the dictionary. Earlier record: [RC-006]. The verdict covers the whole artifact only if the other rows of [RC-006] still hold: they do, because the changes since then are wording only (terms and abbreviations); the content, scope, criteria and conclusions of the document are unchanged.
|
||||
- Language and domain: en / it (the artifact's Metadata rows)
|
||||
- Language reviewer: none (S01 confirmed on 2026-10-07 that S01 reads English and knows the IT domain)
|
||||
- Status of this record: decided on 2026-10-07 by S01, the reviewer. The statuses and evidence are the assistant's assessment, confirmed by S01.
|
||||
|
||||
## Checklist Results
|
||||
|
||||
Not repeated in this delta re-review: the 6 criteria of `QC-MIL-001` hold as recorded in [RC-006].
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
Only the criteria of the delta (5, 9 and 10); the other rows of [RC-006] hold.
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | [DICT-001] exists with eight terms. A scan of the prose of this document (outside code spans, fenced blocks and the template's own headings) finds none of the words the dictionary forbids: "pen" for the turtle, "gate", "gateway" or "phase". The turtle library's "pen up", "pen down" and "pen size" and the proper name "plan-first gate" remain, as the dictionary Rules allow. Holds only if [DICT-001] is accepted (see [RC-007]). |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-07: S01 reads English and knows the IT domain. S01 is also the author (see the verdict). |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Optional. Spelled out on first use, checked by a scan of the document: RGB. No other abbreviation remains except file names (README) and artifact IDs. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — criteria 5, 9 and 10 of `QC-LANG-001` pass (criterion 9 on S01's confirmation, criterion 5 because [DICT-001] is accepted in [RC-007]). The other rows of [RC-006] still hold, since the changes since then are wording only, so the verdict covers the whole artifact.
|
||||
|
||||
Reviewer eligibility: S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. S01 accepted this deviation in chat on 2026-10-07: the project has one person, and no governance document (`GOV`) exists to say otherwise.
|
||||
|
||||
The latest Version History row of the artifact is set to `Accepted` and the traceability matrix is updated.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Condition (language criterion 9): confirm on this record that the reviewer reads English and knows the IT domain, then change the status of row 9 to `Pass` (or name a language reviewer). Closed: S01 confirmed on 2026-10-07 and row 9 is `Pass`. | S01 | 2026-10-09 |
|
||||
| Condition: accept or change the reviewer assignment. S01 is the author of this artifact and also its reviewer, which `framework/process/review-checklist-process.md` does not allow. Record the deviation as accepted (single-person project) or name another reviewer. Closed: S01 accepted the deviation on 2026-10-07. | S01 | 2026-10-09 |
|
||||
| Condition (language criterion 5): `DICT-001` must be `Accepted`; this `Pass` stands only if its own review, [RC-007], ends in `Go`. Closed: [RC-007] ends in `Go`. | S01 | 2026-10-09 |
|
||||
| After the verdict `Go`: set the latest Version History row of the artifact to `Accepted` and update its row in the traceability matrix. Done on 2026-10-07. | S01 | 2026-10-09 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-004]: ../../milestones/mil-004-random-walk-and-spirograph.md
|
||||
[RC-006]: ./rc-006-mil-004-random-walk-and-spirograph.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
|
||||
[RC-007]: ./rc-007-dictionary.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,66 @@
|
||||
# Traceability Matrix: Turtle Challenges
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | TM-001 |
|
||||
| CrossReference | [BC-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Tracks backward/forward links between artifact instances so that the Business Case's
|
||||
cross-artifact traceability success criterion is measurable. A row is added or
|
||||
updated whenever an artifact instance is created or reviewed.
|
||||
|
||||
## Traceability Table
|
||||
|
||||
| Artifact Instance | Type | Language | Domain | Upstream (Backward Link) | Downstream (Forward Link) | Last Reviewed (RC-ID) |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| [BC-001] | BC | en | it | [SA-001] | [PP-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [DICT-001] | [RC-008] (draft re-review of [RC-001], Go) |
|
||||
| [SA-001] | SA | en | it | - | [BC-001], [DICT-001] | [RC-009] (draft re-review of [RC-002], Go) |
|
||||
| [PP-001] | PP | en | it | [BC-001], [SA-001] | [MIL-001], [MIL-002], [MIL-003], [MIL-004] | - |
|
||||
| [DICT-001] | DICT | en | it | [BC-001], [SA-001] | - | [RC-007] (Go) |
|
||||
| [MIL-001] | MIL | en | it | [BC-001], [PP-001] | [MIL-002] | [RC-010] (draft re-review of [RC-003], Go) |
|
||||
| [MIL-002] | MIL | en | it | [BC-001], [MIL-001] | [MIL-003] | [RC-011] (draft re-review of [RC-004], Go) |
|
||||
| [MIL-003] | MIL | en | it | [BC-001], [MIL-002] | [MIL-004] | [RC-012] (draft re-review of [RC-005], Go) |
|
||||
| [MIL-004] | MIL | en | it | [BC-001], [MIL-003] | - | [RC-013] (draft re-review of [RC-006], Go) |
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- `-` in Upstream means foundational ([SA-001] is the foundation of the stakeholder IDs); in Downstream it means nothing is built on it yet ([MIL-004] is the last gateway; the source code under `src/` is not an instance of this matrix); in Last Reviewed it means no `RC-*` exists.
|
||||
- [PP-001] has no `RC-*` because the Project Plan has no QC checklist; the Product Owner accepts it directly.
|
||||
- Each artifact lists its latest review record: the delta re-review ([RC-008] to [RC-013]) of the first review ([RC-001] to [RC-006]), or [RC-007] for [DICT-001]. All of them ended in `Go` on 2026-10-07.
|
||||
- S01 is the author and also the reviewer of every artifact. The review process does not allow this; S01 accepted the deviation in chat on 2026-10-07 because the project has one person and no governance document (`GOV`) exists.
|
||||
- No instance exists yet for the types KPI, RA, BMC, BPMN, UCD, US, UC, DM, SSD, OC, SD, DCD, ERD, ADR, GOV or TRR. One of them matters for the open reviews: GOV (the rule that the reviewer is not the author).
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[SA-001]: ../stakeholder-analysis.md
|
||||
[PP-001]: ../project-plan.md
|
||||
[MIL-001]: ../milestones/mil-001-project-foundation.md
|
||||
[MIL-002]: ../milestones/mil-002-square-and-dashed-line.md
|
||||
[MIL-003]: ../milestones/mil-003-shapes-and-random-color.md
|
||||
[MIL-004]: ../milestones/mil-004-random-walk-and-spirograph.md
|
||||
[DICT-001]: ../dictionary.md
|
||||
[RC-001]: ./reviews/rc-001-business-case.md
|
||||
[RC-002]: ./reviews/rc-002-stakeholder-analysis.md
|
||||
[RC-003]: ./reviews/rc-003-mil-001-project-foundation.md
|
||||
[RC-004]: ./reviews/rc-004-mil-002-square-and-dashed-line.md
|
||||
[RC-005]: ./reviews/rc-005-mil-003-shapes-and-random-color.md
|
||||
[RC-006]: ./reviews/rc-006-mil-004-random-walk-and-spirograph.md
|
||||
[RC-007]: ./reviews/rc-007-dictionary.md
|
||||
[RC-008]: ./reviews/rc-008-business-case-re-review.md
|
||||
[RC-009]: ./reviews/rc-009-stakeholder-analysis-re-review.md
|
||||
[RC-010]: ./reviews/rc-010-mil-001-re-review.md
|
||||
[RC-011]: ./reviews/rc-011-mil-002-re-review.md
|
||||
[RC-012]: ./reviews/rc-012-mil-003-re-review.md
|
||||
[RC-013]: ./reviews/rc-013-mil-004-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
@@ -0,0 +1,91 @@
|
||||
# Stakeholder Analysis: Turtle Challenges
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | SA-001 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [4b3391b] |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This analysis identifies who has influence over, or interest in, the Turtle Challenges project, and fixes the stakeholder IDs (`S01` to `S03`) that every other artifact cites for ownership, review and RACI (responsible, accountable, consulted and informed) assignments. It uses a power/interest grid (Mendelow) to choose how closely each stakeholder is managed, and FURPS+ (functionality, usability, reliability, performance and supportability, plus constraints) to express each concern as a quality attribute.
|
||||
|
||||
The power and interest levels of S01 are given by S01. The levels of S02 and S03 are the author's classification from their stated deliverables; S01 confirms or corrects them in the sign-off.
|
||||
|
||||
## Stakeholder Summary Table
|
||||
|
||||
| ID | Name | Role/Title | Organization | Power Level | Interest Level | Quadrant | Primary Concern (Business Language) |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| S01 | Jens Tirsvad Nielsen | Course participant; Product Owner, developer and reviewer | Tirsvad (personal project) | HIGH | HIGH | Manage Closely | Solve the five challenges and practise a complete, reviewed workflow |
|
||||
| S02 | Udemy coursists | Course participants who share code and compare solutions | Udemy, *100 Days of Code* community | LOW | HIGH | Keep Informed | Readable, runnable code that keeps the assignment's function names, and README instructions to run it |
|
||||
| S03 | GitHub viewers | Visitors who browse the repository for ideas | GitHub | LOW | LOW | Monitor | A clear repository description, topics and README, and no runtime dependencies |
|
||||
|
||||
## Power/Interest Classification Rationale
|
||||
|
||||
- **Manage Closely (S01):** S01 decides scope, writes the code, reviews every artifact and pull request, and is the only person who can accept a milestone. Power and interest are both high.
|
||||
- **Keep Informed (S02):** S02 cannot change the project, but they use its result directly and compare it with their own. Their interest is high, so the README and the function names must serve them. Their power is low because no decision depends on them.
|
||||
- **Monitor (S03):** S03 arrives from a search or a topic page and may never return. Their interest in any one repository is low and they have no influence on it. The repository description, topics and README are the only contact, so these must be correct without further attention.
|
||||
- **Keep Satisfied:** no stakeholder is classified here; no one has high power and low interest.
|
||||
|
||||
## Primary Concerns and FURPS+ Mapping
|
||||
|
||||
| ID | Concern | FURPS+ attribute |
|
||||
| --- | --- | --- |
|
||||
| S01 | Every step is planned, reviewed and traceable to a pull request | Supportability |
|
||||
| S01 | The agreed constraints are met (Python 3.13 or later, venv, pytest, `constants.py`, `pyproject.toml`, Doxygen) | Design constraint |
|
||||
| S01 | The tokens in `.env` stay private | Security (Functionality) |
|
||||
| S02 | The five challenges run and draw what the lecture describes | Functionality |
|
||||
| S02 | The code is readable and keeps the assignment's function names | Usability |
|
||||
| S02 | The README shows how to set up and run on their operating system | Usability, Supportability |
|
||||
| S03 | The repository states what it is through its description and topics | Usability |
|
||||
| S03 | Cloning it needs nothing beyond the Python standard library | Implementation constraint |
|
||||
|
||||
## Communication Requirements
|
||||
|
||||
| ID | Channel | Frequency | Deliverable | Phase / Milestone |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| S01 | Chat with the assistant and pull request review on the git host | At every milestone | Milestone document, review record, pull request | MIL-001, MIL-002, MIL-003, MIL-004 |
|
||||
| S02 | `README.md` on the repository page | Updated when run instructions change; final at the last milestone | Set-up, run and test instructions | MIL-001, MIL-004 |
|
||||
| S03 | Repository description, topics and `README.md` | Set once at the first milestone; checked at the last | Description, topics, overview | MIL-001, MIL-004 |
|
||||
|
||||
## Conflicting Interests and Mitigations
|
||||
|
||||
| Conflict | Stakeholders | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| S02 expects the course's function names and call style; S01 needs the functions testable without a window, which requires passing the turtle as an argument | S01, S02 | Keep every assignment function name; add the turtle as an explicit parameter and document the difference in the README and in the Doxygen comments |
|
||||
| S03 wants no runtime dependencies; S01 wants a formatter, linter, type checker and test runner | S01, S03 | Declare the tools only as development dependencies; `dependencies` stays empty |
|
||||
| S01 holds tokens in `.env` for the git hosts; S03 can read everything that is committed | S01, S03 | `.env` is listed in `.gitignore`; no code imports or tests it; it is never committed |
|
||||
|
||||
## Traceability Analysis
|
||||
|
||||
### Business Goal Alignment
|
||||
|
||||
| Stakeholder | Concern | Business Case objective |
|
||||
| --- | --- | --- |
|
||||
| S01 | Every step is planned, reviewed and traceable | O7 in [BC-001] |
|
||||
| S01 | The agreed constraints are met | O3, O4 and O5 in [BC-001] |
|
||||
| S01 | The tokens in `.env` stay private | O6 in [BC-001] and the Risks table |
|
||||
| S02 | The challenges run and draw what the lecture describes | O1 in [BC-001] |
|
||||
| S02 | Readable code with the assignment's function names | O1 and O2 in [BC-001] |
|
||||
| S02 | The README shows how to set up and run | O3 in [BC-001] |
|
||||
| S03 | Description, topics and README | O6 in [BC-001] |
|
||||
| S03 | No runtime dependencies | O4 in [BC-001] |
|
||||
|
||||
## Sign-Off
|
||||
|
||||
Signed off by S01 on 2026-10-07, with the `Go` verdict of [RC-009].
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ./business-case.md
|
||||
[RC-009]: ./sqa/reviews/rc-009-stakeholder-analysis-re-review.md
|
||||
[4b3391b]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/4b3391b22626b49aca06a7c265c1d0be93d1155d
|
||||
Submodule
+1
Submodule framework added at ce1f9ddd3c
@@ -0,0 +1,48 @@
|
||||
[build-system]
|
||||
requires = ["setuptools>=77"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "turtle-challenges"
|
||||
version = "0.1.0"
|
||||
description = "Turtle graphics exercises from Udemy's 100 Days of Code Python bootcamp (day 18)."
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
license = "AGPL-3.0-only"
|
||||
license-files = ["LICENSE"]
|
||||
# Only the standard library is used at run time (turtle needs Tk, see README).
|
||||
dependencies = []
|
||||
classifiers = [
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Topic :: Education",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"mypy>=1.13",
|
||||
"pytest>=8.3",
|
||||
"ruff>=0.8",
|
||||
]
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["src"]
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
pythonpath = ["src", "."]
|
||||
testpaths = ["tests"]
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 88
|
||||
target-version = "py313"
|
||||
src = ["src", "tests"]
|
||||
# Only the project's own code: the framework submodule and agent skills are not ours.
|
||||
include = ["src/**/*.py", "tests/**/*.py"]
|
||||
|
||||
[tool.ruff.lint]
|
||||
select = ["ANN", "B", "E", "F", "I", "N", "SIM", "UP", "W"]
|
||||
|
||||
[tool.mypy]
|
||||
strict = true
|
||||
files = ["src", "tests"]
|
||||
mypy_path = "src"
|
||||
@@ -0,0 +1,7 @@
|
||||
"""!
|
||||
@file __init__.py
|
||||
@brief Solutions to the turtle graphics challenges of day 18 of Udemy's
|
||||
100 Days of Code.
|
||||
|
||||
The challenges are added one milestone at a time; see the README.
|
||||
"""
|
||||
@@ -0,0 +1,15 @@
|
||||
"""!
|
||||
@file constants.py
|
||||
@brief Every constant of the project, in one place.
|
||||
|
||||
Numbers and names used by the challenges live here and nowhere else, so a
|
||||
challenge can be tuned (for example the number of dashes) without touching its
|
||||
drawing code.
|
||||
"""
|
||||
|
||||
## Title of the turtle window.
|
||||
WINDOW_TITLE = "Turtle Challenges"
|
||||
|
||||
## Largest value of one color channel; also the turtle color mode, so that
|
||||
## colors can be given as RGB tuples from 0 to 255.
|
||||
COLOR_MODE = 255
|
||||
@@ -0,0 +1,14 @@
|
||||
import turtle_challenges
|
||||
from turtle_challenges import constants
|
||||
|
||||
|
||||
def test_package_can_be_imported_and_is_documented() -> None:
|
||||
assert turtle_challenges.__doc__
|
||||
|
||||
|
||||
def test_color_mode_is_the_rgb_range_of_the_course() -> None:
|
||||
assert constants.COLOR_MODE == 255
|
||||
|
||||
|
||||
def test_window_title_is_not_empty() -> None:
|
||||
assert constants.WINDOW_TITLE
|
||||
Reference in New Issue
Block a user