Author SHA1 Message Date
Tirsvad 382d799dfe Correct the README Continuous integration section
CI / checks (push) Successful in 46s
CI / checks (pull_request) Successful in 49s
The section and the project layout still named .github/workflows/ci.yml and said CI
builds the documentation. The workflow is .gitea/workflows/ci.yml, runs on Gitea
Actions, and runs pytest, ruff and mypy; it has no Doxygen step, so the README now
points to doxygen Doxyfile and says why the file is not under .github/workflows.
2026-10-08 01:34:30 +08:00
Tirsvad ca6c9d9f3c Merge pull request 'Record the verdict Go on RC-019' (#38) from record-go-on-rc-019 into main
CI / checks (push) Successful in 47s
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Successful in 4s
Reviewed-on: #38
2026-10-07 19:29:56 +02:00
Tirsvad 0fe106d2f0 Resolve pending commit links
CI / checks (push) Successful in 44s
CI / checks (pull_request) Successful in 48s
Replace pending in the Version History of RC-019 and of the traceability matrix with
the link to the commit that recorded the verdict.
2026-10-08 01:28:07 +08:00
Tirsvad 6dac0d6762 Record the verdict Go on RC-019
S01 accepted the assistant's runs as the measure for success criteria 1 and 5 and
recorded Go on the re-check of the Business Case success criteria on main. All seven
criteria are met, and the conditions of RC-018 are closed. The traceability matrix
row follows the verdict.

Refs #28
2026-10-08 01:28:05 +08:00
Tirsvad 1b3d2d2db1 Merge pull request 'Record the re-check of the Business Case success criteria on main' (#37) from rc-019-success-criteria-recheck into main
CI / checks (push) Successful in 45s
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Successful in 4s
Reviewed-on: #37
2026-10-07 19:24:14 +02:00
Tirsvad cca1499de5 Resolve pending commit links
CI / checks (push) Successful in 46s
CI / checks (pull_request) Successful in 44s
Replace pending in the Version History of RC-019 with the link to the commit that
added it.
2026-10-08 01:22:27 +08:00
Tirsvad 03700b8de2 Record the re-check of the Business Case success criteria on main
RC-019 repeats the check of RC-018 against main (7d2c9e3), using a fresh clone from
the README's own GitHub URL, the README steps under PowerShell, the real command,
the host's CI runs, settings and pull requests. All seven criteria are met. It
closes the conditions of RC-018 on criterion 5 and on how main reaches GitHub;
S01's own run of the five commands (criterion 1) is the one left. The proposed
verdict is Go and S01 decides.

Refs #28
2026-10-08 01:22:25 +08:00
Tirsvad 7d2c9e3d08 Merge pull request 'Fix the install step of the Gitea workflow' (#36) from fix-ci-install-step into main
CI / checks (push) Successful in 56s
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Successful in 4s
Reviewed-on: #36
2026-10-07 19:17:00 +02:00
Tirsvad 99c721003e Fix the install step of the Gitea workflow
CI / checks (push) Successful in 45s
CI / checks (pull_request) Successful in 48s
The step ran pip install --group dev, which needs a dependency-groups table in
pyproject.toml. This project declares the development tools as the dev extra, so the
step failed with "[dependency-groups] table was missing". It now installs with
pip install -e ".[dev]", the command the README documents.
2026-10-08 01:13:28 +08:00
Tirsvad 8d9c1a0a09 Merge pull request 'Fix workflow for gitea' (#35) from mil-004-random-walk-and-spirograph into main
CI / checks (push) Failing after 28s
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Failing after 5s
Reviewed-on: #35
2026-10-07 18:55:16 +02:00
Tirsvad daee0f5c98 Merge pull request 'Land milestones 002 to 004 on main' (#34) from mil-004-random-walk-and-spirograph into main
CI / checks (push) Successful in 1m2s
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Successful in 4s
Reviewed-on: #34
2026-10-07 18:47:25 +02:00
Tirsvad 79d008fb70 Merge pull request 'Milestone 001: Project Foundation' (#30) from mil-001-project-foundation into main
CI / checks (push) Successful in 1m3s
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Successful in 5s
Reviewed-on: #30
2026-10-07 18:42:07 +02:00
5 changed files with 86 additions and 35 deletions
+11 -28
View File
@@ -1,43 +1,26 @@
# Continuous integration for the Quiz Game.
#
# Run by Gitea Actions. The file lives in .gitea/workflows, not .github/workflows:
# GitHub refuses pushes that touch .github/workflows from a token without the
# workflow scope, and that stopped the push mirror to GitHub. Runs the same
# checks as the README, "Run the tests".
name: CI
on:
push:
pull_request:
permissions:
contents: read
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
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install the development tools
- name: Install
run: |
python -m pip install --upgrade pip
python -m pip install --group dev
- name: Lint
run: ruff check src tests
- name: Check formatting
run: ruff format --check src tests
- name: Check types
run: mypy --strict src tests
- name: Run the tests
python -m pip install -e ".[dev]"
- name: Tests
run: python -m pytest
- name: Lint
run: python -m ruff check src tests
- name: Format check
run: python -m ruff format --check src tests
- name: Types
run: python -m mypy src tests
+4 -2
View File
@@ -117,7 +117,9 @@ 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.
`.gitea/workflows/ci.yml` runs on Gitea Actions on every push and on every pull request. It sets up Python 3.13, upgrades `pip`, installs the project with its development tools, then runs pytest, ruff (lint and format check) and mypy. It does not build the source documentation: run `doxygen Doxyfile` yourself, as the next section shows. No step opens a turtle window.
The workflow lives in `.gitea/workflows` and not in `.github/workflows`, so GitHub does not run it and pushing to the GitHub mirror needs no workflow permission.
## Build the source documentation
@@ -133,7 +135,7 @@ Open `build/html/index.html` in a browser. Any Doxygen warning fails the build,
```text
.
├── .github/workflows/ci.yml continuous integration
├── .gitea/workflows/ci.yml continuous integration
├── docs/ project documents: business case, plan, milestones
├── src/turtle_challenges/ the package
│ ├── constants.py every constant of the project
+1 -1
View File
@@ -15,7 +15,7 @@ document of a type. `Primary File` may contain a glob (e.g.
| 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 | 019 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 020 |
| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 |
| DICT | Domain Dictionary | docs/dictionary.md | 002 |
@@ -0,0 +1,65 @@
# Review Record: Business Case success criteria, re-check on main
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-019 |
| CrossReference | [BC-001], [RC-018], [MIL-004] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [03700b8] |
| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S01 | Verdict recorded: Go | [6dac0d6] |
---
## Artifact Under Review
- Instance reviewed: the delivered project on `main` at commit 7d2c9e3 (Gitea and GitHub), against the Success Criteria of [BC-001]
- Checklist used: the seven rows of the `## Success Criteria` table of [BC-001]; no `QC-*` checklist covers this check, the table is the checklist
- Scope: all seven success criteria, as a new record that names [RC-018] and re-checks its conditions; the evidence for the gate of [MIL-004]
- Language and domain: n/a (technical record)
- Language reviewer: none (n/a)
- Method: a fresh clone of `main` from the README's own GitHub URL into an empty folder, then the README's Windows PowerShell steps, run on the author's Windows machine; the real command started from that clone; read-only calls to the Gitea and GitHub APIs for continuous integration, settings, pull requests and issues.
- Reviewer eligibility: S01 is the author and the reviewer; S01 accepted that deviation in chat on 2026-10-07 (see the traceability matrix).
- Status of this record: decided on 2026-10-08 by S01, the reviewer, who recorded the verdict Go and accepted the assistant's runs as the measure for criteria 1 and 5. The statuses and evidence are the assistant's, from the runs described above.
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | Challenges are runnable. Target: 5 of 5 challenges start from the command line and draw to completion. Measure: S01 runs each on Windows PowerShell and records the result in the review of the milestone. | Pass | From a fresh clone of `main` (`7d2c9e3`), in PowerShell: (a) the real command `turtle-challenges <name>` was started five times and each time a window titled "Turtle Challenges" opened (square, dashed-line, shapes, random-walk, spirograph). (b) Each challenge was run through `cli.main` with real Tk, closing the window where the command would wait for a click, and each reached that point with exit 0: square 1.4 s, dashed-line 3.3 s, shapes 14.0 s, random-walk 9.6 s, spirograph 3.6 s (1.8 s with `--gap 10`). Not covered: the click that closes the window, and S01's own run, which the measure names. The code is unchanged since the run in [RC-018]. S01 accepted this run as the measure on 2026-10-08. |
| 2 | Automated tests pass. Target: 0 failures; at least one test for every public function. Measure: `python -m pytest` exits 0 locally and in continuous integration. | Pass | In the clone of `main`: `python -m pytest` printed `95 passed`, exit 0; `ruff check .`, `ruff format --check .` and `mypy` exit 0; the steps of the current workflow as written (`python -m ruff check src tests`, `python -m ruff format --check src tests`, `python -m mypy src tests`) pass too. Every public function and class still has a test (the code is unchanged since [RC-018]). Continuous integration on `main` at `7d2c9e3`: run 252 is `success` with the steps Install, Tests, Lint, Format check and Types. History: after #35 introduced `pip install --group dev` the workflow failed (six runs, 241 to 246); #36 fixed the install step and CI has been green since (runs 247, 249 and 252). The workflow no longer builds the documentation. |
| 3 | Runtime dependencies. Target: 0. Measure: `dependencies = []` in `pyproject.toml`. | Pass | `dependencies = []` in `pyproject.toml` (read with `tomllib`), and `python -m pip show turtle-challenges` in the clone of `main` prints an empty `Requires:`. |
| 4 | Source documentation builds. Target: 0 Doxygen warnings. Measure: `doxygen Doxyfile` output. | Pass | `doxygen Doxyfile` (Doxygen 1.15.0) in the clone of `main`: exit 0, no output, `build/html/index.html` generated. Continuous integration no longer runs this build, because the current workflow has no Doxygen step, so the evidence is the local run only; the README's "Continuous integration" section still says CI builds the documentation. |
| 5 | Set-up is reproducible. Target: A fresh clone runs the challenges and the tests following only the README on Windows PowerShell. Measure: S01 follows the README from an empty folder. | Pass | Met. The README's own clone URL, `https://github.com/Tirsvad-Udemy-100-days-of-code/018-turtle.git`, now gives the project: `main` at `7d2c9e3` with 60 tracked files and 12 package files (GitHub receives `main` from Gitea). In an empty folder under PowerShell every README step worked: `git clone`, `py -3.13 -m venv .venv` (Python 3.13.14), `Activate.ps1`, `python -m pip install --upgrade pip` (26.2.1), `python -m pip install -e ".[dev]"` (exit 0), `python -m pytest` (95 passed), `ruff check .`, `ruff format --check .` and `mypy` (all exit 0), `turtle-challenges --help` (exit 0) and `doxygen Doxyfile` (0 warnings). This closes the condition on criterion 5 of [RC-018]. The measure names S01 following the README, which has not happened. S01 accepted this run as the measure on 2026-10-08. |
| 6 | Repository is presented. Target: Non-empty description and at least 5 topics on each host. Measure: Repository settings page of each host. | Pass | Read from the host APIs today: Gitea and GitHub both have the description "Turtle graphics exercises from Udemy's 100 Days of Code Python bootcamp (day 18): square, dashed line, polygons, random walk and spirograph." and 11 topics each; the GitHub repository is public and its default branch is `main`. |
| 7 | Work is traceable. Target: 100 % of pull requests carry one `Closes #N` line per completed issue. Measure: Pull request descriptions. | Pass | Pull requests #30 to #33 each carry their `Closes #N` lines one per line and no comma form (#30: 1 to 6; #31: 9 to 14; #32: 16 to 21; #33: 23 to 26 and 8, 15, 22, 29). #34, #35 and #36 complete no issue and carry no `Closes` line. Only #34 says so explicitly; #35 and #36 do not, and the project-planning rule asks a pull request that finishes no issue to say so. 28 of the 29 issues are closed (#7 and #27 by hand, the others through the `Closes` lines); #28 is open. |
## Overall Verdict
Go — all seven success criteria of [BC-001] are met on `main` (`7d2c9e3`). The Business Case names S01 for the runs behind criteria 1 and 5; S01 accepted the assistant's runs in this record as that measure on 2026-10-08.
This closes the conditions of [RC-018]: criterion 5 is met by the README run from its own GitHub clone URL, GitHub receives `main` and the branches from Gitea, and the run of the five commands (criterion 1) is accepted. Go / No-Go criterion 6 of [MIL-004] ("every criterion met") is therefore met. No date moved, so the Project Plan needs no schedule change.
Reviewer eligibility: S01 is the author and the reviewer, which the review process does not allow; S01 accepted that deviation in chat on 2026-10-07 and it is recorded in the traceability matrix.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| Condition (criteria 1 and 5): accept the runs in this record as the measure, or run the five commands yourself on Windows PowerShell (click the window to close it) and follow the README from an empty folder, and record the result. Closed 2026-10-08: S01 accepted the runs in this record as the measure. | S01 | 2026-10-21 |
| After the verdict `Go`: close issue #28. | S01 | 2026-10-21 |
| The README's "Continuous integration" section and its project layout still name `.github/workflows/ci.yml` and say CI builds the documentation; the workflow is now `.gitea/workflows/ci.yml` and has no Doxygen step. Correct the README, or restore the step. | S01 | 2026-10-21 |
| Decide whether continuous integration should build the documentation again; today criterion 4 rests on a local run only. | S01 | 2026-10-21 |
| Optional: add "No issue closed: <reason>" to the descriptions of #35 and #36. | S01 | 2026-10-21 |
| Optional: the Project Plan's open issues about the continuous integration host and the GitHub mirror are answered (a runner exists, CI is green on `main`, GitHub receives `main`); updating them needs a new Version History row on `PP-001`. | S01 | 2026-10-21 |
---
[BC-001]: ../../business-case.md
[RC-018]: ./rc-018-business-case-success-criteria.md
[MIL-004]: ../../milestones/mil-004-random-walk-and-spirograph.md
[03700b8]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/03700b8de2568c3f50baf99422c3b47bb68975b3
[6dac0d6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/6dac0d6762b49bf52c2c0aeebbf29ec4e56efbe1
+5 -4
View File
@@ -9,8 +9,8 @@
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S01 | Added the row for the check of the success criteria of [BC-001], with [RC-018] | [88aee40] |
| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S01 | Recorded the verdict Go-with-conditions of [RC-018] | [54f60a9] |
| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S01 | Recorded the verdict Go of [RC-019], the re-check of [RC-018] | [6dac0d6] |
---
@@ -36,14 +36,14 @@ updated whenever an artifact instance is created or reviewed.
| Python source code of milestone 002 (`src/`, `tests/`, branch `mil-002-square-and-dashed-line`) | PY | - | - | [MIL-002] | - | [RC-015] (Go) |
| Python source code of milestone 003 (`src/`, `tests/`, branch `mil-003-shapes-and-random-color`) | PY | - | - | [MIL-003] | - | [RC-016] (Go) |
| Python source code of milestone 004 (`src/`, `tests/`, branch `mil-004-random-walk-and-spirograph`) | PY | - | - | [MIL-004] | - | [RC-017] (Go) |
| Success criteria of [BC-001], checked against the delivered repository for the gate of [MIL-004] | BC | en | it | [BC-001], [MIL-004] | - | [RC-018] (Go-with-conditions) |
| Success criteria of [BC-001], checked against the delivered repository for the gate of [MIL-004] | BC | en | it | [BC-001], [MIL-004] | - | [RC-019] (Go), the re-check of [RC-018] (Go-with-conditions) |
## 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 is listed per milestone in the `PY` rows); in Last Reviewed it means no `RC-*` exists.
- [PP-001] has no `RC-*` because the Project Plan has no QC checklist; the Product Owner accepted it directly on 2026-10-08.
- The `PY` rows list the Python code each milestone added or changed, reviewed against `QC-PY-001`. Their records, [RC-014] to [RC-017], ended in `Go` on 2026-10-08; a `-` in Language and Domain is right for source code, a technical type.
- [RC-018] checks the seven success criteria of [BC-001] against the delivered repository, as the evidence for the gate of [MIL-004]. It ended in Go-with-conditions on 2026-10-08: criterion 5 is not met until the code is on `main` and on GitHub, and its first three action items are the conditions. A later record that names it re-checks them.
- [RC-018] checks the seven success criteria of [BC-001] against the delivered repository, as the evidence for the gate of [MIL-004]. It ended in Go-with-conditions on 2026-10-08: criterion 5 is not met until the code is on `main` and on GitHub, and its first three action items are the conditions. A later record that names it re-checks them. Its conditions were re-checked in [RC-019], which ended in Go on 2026-10-08, so the row lists [RC-019] as the latest record.
- 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).
@@ -76,5 +76,6 @@ updated whenever an artifact instance is created or reviewed.
[RC-016]: ./reviews/rc-016-code-mil-003.md
[RC-017]: ./reviews/rc-017-code-mil-004.md
[RC-018]: ./reviews/rc-018-business-case-success-criteria.md
[88aee40]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/88aee4051d3fd7a915bc793c157e421f607e3034
[RC-019]: ./reviews/rc-019-business-case-success-criteria-recheck.md
[54f60a9]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/54f60a951a3a6d3c6c78de373e3b76720e48639c
[6dac0d6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-turtle/commit/6dac0d6762b49bf52c2c0aeebbf29ec4e56efbe1