Compare commits

..
Author SHA1 Message Date
Tirsvad d2f36bfde3 Record RC-025: CI workflow verified on the instance
Tests / Run the tests (pull_request) Successful in 42s
No issue closed: the workflow task #6 was closed by an earlier pull request.
2026-10-13 15:52:36 +08:00
Tirsvad c4e88c6da6 Merge pull request 'Move wiki sources to wiki/' (#31) from fix-wiki-location into main
Tests / Run the tests (push) Successful in 42s
TirSystem/github-action: Publish wiki / publish-wiki (push) Successful in 5s
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Successful in 5s
2026-10-13 09:44:06 +02:00
Tirsvad 632fa61b89 Move the wiki sources to wiki/ and tidy version history statuses
Tests / Run the tests (pull_request) Successful in 42s
No issue closed: all issues of MIL-001 to MIL-004 are closed.
2026-10-13 15:43:56 +08:00
Tirsvad d825bef0f1 Merge pull request 'MIL-004 Wiki in English, Danish and Bahasa Malaysia' (#30) from mil-004-wiki-publication into main
Tests / Run the tests (push) Canceled after 0s
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Successful in 5s
2026-10-13 09:42:38 +02:00
19 changed files with 193 additions and 147 deletions
+142 -141
View File
@@ -1,141 +1,142 @@
# Squirrel Census # Squirrel Census
Day 25 of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*: count the Day 25 of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*: count the
squirrels of the 2018 Central Park Squirrel Census by primary fur colour (gray, squirrels of the 2018 Central Park Squirrel Census by primary fur colour (gray,
cinnamon, black) and export the counts to `squirrel_count.csv`. Python 3.13 or cinnamon, black) and export the counts to `squirrel_count.csv`. Python 3.13 or
later, no runtime dependencies, with tests and source documentation. later, no runtime dependencies, with tests and source documentation.
![Program run][img-run] ![Program run][img-run]
## Requirements ## Requirements
- Python 3.13 or later (`python --version` on Windows, `python3 --version` on Linux and macOS). - Python 3.13 or later (`python --version` on Windows, `python3 --version` on Linux and macOS).
- `venv`, which ships with Python (on Debian: the `python3-venv` package). - `venv`, which ships with Python (on Debian: the `python3-venv` package).
- The 2018 census file. It is already in the repository under `data/`. - The 2018 census file. It is already in the repository under `data/`.
- Optional: [Doxygen][doxygen] 1.9 or later, only to build the source documentation. - Optional: [Doxygen][doxygen] 1.9 or later, only to build the source documentation.
There are no runtime dependencies: the program uses only the Python standard library There are no runtime dependencies: the program uses only the Python standard library
([ADR-0001][adr-0001]). `pytest` is needed only to run the tests. ([ADR-0001][adr-0001]). `pytest` is needed only to run the tests.
## Set up ## Set up
Create a local virtual environment named `.venv` in the project folder, upgrade `pip` Create a local virtual environment named `.venv` in the project folder, upgrade `pip`
and install the project with its development tools (pytest, ruff, mypy). and install the project with its development tools (pytest, ruff, mypy).
### Windows powershell ### Windows powershell
```powershell ```powershell
python -m venv .venv python -m venv .venv
.\.venv\Scripts\Activate.ps1 .\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip python -m pip install --upgrade pip
python -m pip install -e ".[dev]" python -m pip install -e ".[dev]"
``` ```
If PowerShell refuses to run the activation script, allow it for the current session: If PowerShell refuses to run the activation script, allow it for the current session:
`Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned`. `Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned`.
### Linux debian ### Linux debian
```bash ```bash
sudo apt install python3 python3-venv sudo apt install python3 python3-venv
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
python -m pip install --upgrade pip python -m pip install --upgrade pip
python -m pip install -e ".[dev]" python -m pip install -e ".[dev]"
``` ```
### MacOS ### MacOS
```bash ```bash
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
python -m pip install --upgrade pip python -m pip install --upgrade pip
python -m pip install -e ".[dev]" python -m pip install -e ".[dev]"
``` ```
On macOS, Python 3.13 can be installed with `brew install python@3.13`. On macOS, Python 3.13 can be installed with `brew install python@3.13`.
## Run ## Run
With the virtual environment active, run from the project folder: With the virtual environment active, run from the project folder:
```bash ```bash
python -m squirrel python -m squirrel
``` ```
The program reads `data/2018_Central_Park_Squirrel_Census_-_Squirrel_Data.csv`, prints The program reads `data/2018_Central_Park_Squirrel_Census_-_Squirrel_Data.csv`, prints
the colour counts and writes `squirrel_count.csv`: the colour counts and writes `squirrel_count.csv`:
```text ```text
Gray: 2473 Gray: 2473
Cinnamon: 392 Cinnamon: 392
Black: 103 Black: 103
``` ```
Use other files by passing them as arguments, `python -m squirrel <census file> <summary file>`. Use other files by passing them as arguments, `python -m squirrel <census file> <summary file>`.
If the census file does not exist the program prints a message and exits with status 2. If the census file does not exist the program prints a message and exits with status 2.
## Run the tests ## Run the tests
```bash ```bash
python -m pytest python -m pytest
``` ```
![Test run][img-tests] ![Test run][img-tests]
The tests use small fixture rows; one test also checks the real 2018 census file when The tests use small fixture rows; one test also checks the real 2018 census file when
it is present. it is present.
## Continuous integration ## Continuous integration
The workflow [`.gitea/workflows/ci.yml`][ci] runs for every push to `main` and for every The workflow [`.gitea/workflows/ci.yml`][ci] runs for every push to `main` and for every
pull request. It sets up Python 3.13, creates a `.venv`, upgrades `pip`, installs the pull request. It sets up Python 3.13, creates a `.venv`, upgrades `pip`, installs the
project with `.[dev]` and runs `python -m pytest`. It uses `github.*` contexts only, so project with `.[dev]` and runs `python -m pytest`. It uses `github.*` contexts only, so
it also runs on GitHub Actions. it also runs on GitHub Actions.
## Build the source documentation ## Build the source documentation
The source is documented with Doxygen comments and configured by [`Doxyfile`][doxyfile]. The source is documented with Doxygen comments and configured by [`Doxyfile`][doxyfile].
```bash ```bash
doxygen Doxyfile doxygen Doxyfile
``` ```
Open `docs/doxygen/html/index.html` in a browser. The output folder is ignored by git. Open `docs/doxygen/html/index.html` in a browser. The output folder is ignored by git.
## Project layout ## Project layout
```text ```text
.gitea/workflows/ci.yml continuous integration workflow .gitea/workflows/ci.yml continuous integration workflow
data/ the 2018 census file data/ the 2018 census file
docs/ business case, plan, milestones, models, reviews, ADRs docs/ business case, plan, milestones, models, reviews, ADRs
docs/images/ screenshots used by this README and the wiki docs/images/ screenshots used by this README and the wiki
src/squirrel/ the package: census.py, cli.py, constants.py src/squirrel/ the package: census.py, cli.py, constants.py
tests/ pytest tests tests/ pytest tests
Doxyfile Doxygen configuration wiki/ wiki pages in English, Danish (.da) and Bahasa Malaysia (.ms)
pyproject.toml project configuration (Python >=3.13, no runtime dependencies) Doxyfile Doxygen configuration
squirrel_count.csv the result of the assignment pyproject.toml project configuration (Python >=3.13, no runtime dependencies)
``` squirrel_count.csv the result of the assignment
```
The project documents, in reading order: [Business Case][bc], [Stakeholder
Analysis][sa], [Project Plan][pp], [Use Case][uc], [Domain Model][dm], [ADR-0001][adr-0001]. The project documents, in reading order: [Business Case][bc], [Stakeholder
The repository also has a wiki in English, Danish and Bahasa Malaysia. Analysis][sa], [Project Plan][pp], [Use Case][uc], [Domain Model][dm], [ADR-0001][adr-0001].
The repository also has a wiki in English, Danish and Bahasa Malaysia.
## License
## License
GNU Affero General Public License v3.0 or later. See [LICENSE][license].
GNU Affero General Public License v3.0 or later. See [LICENSE][license].
---
---
[img-run]: docs/images/run.png
[img-tests]: docs/images/tests.png [img-run]: docs/images/run.png
[doxygen]: https://www.doxygen.nl/ [img-tests]: docs/images/tests.png
[adr-0001]: docs/adr/adr-0001-standard-library-instead-of-pandas.md [doxygen]: https://www.doxygen.nl/
[ci]: .gitea/workflows/ci.yml [adr-0001]: docs/adr/adr-0001-standard-library-instead-of-pandas.md
[doxyfile]: Doxyfile [ci]: .gitea/workflows/ci.yml
[bc]: docs/business-case.md [doxyfile]: Doxyfile
[sa]: docs/stakeholder-analysis.md [bc]: docs/business-case.md
[pp]: docs/project-plan.md [sa]: docs/stakeholder-analysis.md
[uc]: docs/uc-001/uc.md [pp]: docs/project-plan.md
[dm]: docs/domain-model.md [uc]: docs/uc-001/uc.md
[license]: LICENSE [dm]: docs/domain-model.md
[license]: LICENSE
+1 -1
View File
@@ -16,7 +16,7 @@ document of a type. `Primary File` may contain a glob (e.g.
| PP | Project Plan | docs/project-plan.md | 002 | | PP | Project Plan | docs/project-plan.md | 002 |
| MIL | Milestone / Gateway | docs/milestones/*.md | 005 | | MIL | Milestone / Gateway | docs/milestones/*.md | 005 |
| ADR | Architecture Decision Record | docs/adr/adr-NNNN-*.md | 0002 | | ADR | Architecture Decision Record | docs/adr/adr-NNNN-*.md | 0002 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 025 | | RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 026 |
| DICT | Domain Dictionary | docs/dictionary.md | 002 | | DICT | Domain Dictionary | docs/dictionary.md | 002 |
| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 | | TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 |
| UCD | Use Case Diagram | docs/use-case-diagram.md | 002 | | UCD | Use Case Diagram | docs/use-case-diagram.md | 002 |
+1 -1
View File
@@ -11,7 +11,7 @@
## Version History ## Version History
| Date | Status | Author | Reviewer | Change | Commit | | Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [f1b3c03] | | 2026-10-13 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [f1b3c03] |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | CrossReference: added [DM-002] | [259d017] | | 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | CrossReference: added [DM-002] | [259d017] |
--- ---
+2 -2
View File
@@ -11,8 +11,8 @@
## Version History ## Version History
| Date | Status | Author | Reviewer | Change | Commit | | Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [f1b3c03] | | 2026-10-13 | Deprecated | Jens Tirsvad Nielsen | S01 | Initial version | [f1b3c03] |
| 2026-10-13 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | CrossReference: added [US-001] | [259d017] | | 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | CrossReference: added [US-001] | [259d017] |
--- ---
## Purpose ## Purpose
@@ -0,0 +1,44 @@
# RC Review of ci.yml, delta re-review of criterion 22
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-025 |
| CrossReference | [WF-MIL-001], [QC-WF-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Artifact Under Review
- Instance reviewed: [WF-MIL-001]
- Checklist used: [QC-WF-001]
- Scope: delta re-review of criterion 22 of QC-WF-001; reason: the condition of RC-010 (run 1012 queued); earlier record RC-010
- Language and domain: n/a
- Language reviewer: none (the stand-in reviewer reads English and the `it` domain)
- Mode: autonomous, not independent (reviewer: AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 22 | Every workflow feature used is verified on the instance that runs it, and the host and version are recorded; a feature the target hosts differ on is noted in the header (Mandatory) | Pass | Gitea 1.27.3, runner labels ubuntu-latest. `ci.yml` completed with success on the instance: pull_request runs 1037, 1040 and 1043, and the push run 1044 on main (commit c4e88c6). Header states the host and that only github.* contexts are used. |
## Overall Verdict
Go — criterion 22, the only open Mandatory criterion of RC-010, now passes; the other rows of RC-010 still hold, so the workflow is Go. Closes the condition of RC-010.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[WF-MIL-001]: ../../../.gitea/workflows/ci.yml
[QC-WF-001]: ../../../framework/qc/code/qc-workflow.md
+2 -1
View File
@@ -40,7 +40,7 @@ updated whenever an artifact instance is created or reviewed.
| [ADR-0001] | Architecture Decision Record | - | - | [BC-001], [SA-001], [MIL-002] | `src/squirrel/census.py` | [RC-017] | | [ADR-0001] | Architecture Decision Record | - | - | [BC-001], [SA-001], [MIL-002] | `src/squirrel/census.py` | [RC-017] |
| `src/squirrel/census.py`, `cli.py`, `__main__.py`, `tests/` | Python Source Code | - | - | [UC-001], [SSD-001], [ADR-0001] | - | [RC-024] | | `src/squirrel/census.py`, `cli.py`, `__main__.py`, `tests/` | Python Source Code | - | - | [UC-001], [SSD-001], [ADR-0001] | - | [RC-024] |
| `src/squirrel/constants.py`, `tests/test_constants.py` | Python Source Code | - | - | [MIL-001] | - | [RC-008] | | `src/squirrel/constants.py`, `tests/test_constants.py` | Python Source Code | - | - | [MIL-001] | - | [RC-008] |
| `.gitea/workflows/ci.yml` | CI Workflow | - | - | [MIL-001] | - | [RC-009], [RC-010] | | `.gitea/workflows/ci.yml` | CI Workflow | - | - | [MIL-001] | - | [RC-009], [RC-010], [RC-025] |
## Coverage Notes ## Coverage Notes
@@ -89,3 +89,4 @@ updated whenever an artifact instance is created or reviewed.
[RC-022]: ./reviews/rc-022-mil-003-delta.md [RC-022]: ./reviews/rc-022-mil-003-delta.md
[RC-023]: ./reviews/rc-023-mil-004-delta.md [RC-023]: ./reviews/rc-023-mil-004-delta.md
[RC-024]: ./reviews/rc-024-python-census.md [RC-024]: ./reviews/rc-024-python-census.md
[RC-025]: ./reviews/rc-025-ci-workflow-delta.md
View File
+1 -1
View File
@@ -1,4 +1,4 @@
<!-- Generated from docs/wiki; edit the source pages, not the published wiki. --> <!-- Generated from wiki; edit the source pages, not the published wiki. -->
**Squirrel Census** **Squirrel Census**