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
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,
cinnamon, black) and export the counts to `squirrel_count.csv`. Python 3.13 or
later, no runtime dependencies, with tests and source documentation.
![Program run][img-run]
## Requirements
- 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).
- 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.
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.
## Set up
Create a local virtual environment named `.venv` in the project folder, upgrade `pip`
and install the project with its development tools (pytest, ruff, mypy).
### Windows powershell
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
If PowerShell refuses to run the activation script, allow it for the current session:
`Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned`.
### Linux debian
```bash
sudo apt install python3 python3-venv
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
### MacOS
```bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
On macOS, Python 3.13 can be installed with `brew install python@3.13`.
## Run
With the virtual environment active, run from the project folder:
```bash
python -m squirrel
```
The program reads `data/2018_Central_Park_Squirrel_Census_-_Squirrel_Data.csv`, prints
the colour counts and writes `squirrel_count.csv`:
```text
Gray: 2473
Cinnamon: 392
Black: 103
```
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.
## Run the tests
```bash
python -m pytest
```
![Test run][img-tests]
The tests use small fixture rows; one test also checks the real 2018 census file when
it is present.
## Continuous integration
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
project with `.[dev]` and runs `python -m pytest`. It uses `github.*` contexts only, so
it also runs on GitHub Actions.
## Build the source documentation
The source is documented with Doxygen comments and configured by [`Doxyfile`][doxyfile].
```bash
doxygen Doxyfile
```
Open `docs/doxygen/html/index.html` in a browser. The output folder is ignored by git.
## Project layout
```text
.gitea/workflows/ci.yml continuous integration workflow
data/ the 2018 census file
docs/ business case, plan, milestones, models, reviews, ADRs
docs/images/ screenshots used by this README and the wiki
src/squirrel/ the package: census.py, cli.py, constants.py
tests/ pytest tests
Doxyfile Doxygen configuration
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 repository also has a wiki in English, Danish and Bahasa Malaysia.
## 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
[doxygen]: https://www.doxygen.nl/
[adr-0001]: docs/adr/adr-0001-standard-library-instead-of-pandas.md
[ci]: .gitea/workflows/ci.yml
[doxyfile]: Doxyfile
[bc]: docs/business-case.md
[sa]: docs/stakeholder-analysis.md
[pp]: docs/project-plan.md
[uc]: docs/uc-001/uc.md
[dm]: docs/domain-model.md
[license]: LICENSE
# Squirrel Census
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,
cinnamon, black) and export the counts to `squirrel_count.csv`. Python 3.13 or
later, no runtime dependencies, with tests and source documentation.
![Program run][img-run]
## Requirements
- 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).
- 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.
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.
## Set up
Create a local virtual environment named `.venv` in the project folder, upgrade `pip`
and install the project with its development tools (pytest, ruff, mypy).
### Windows powershell
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
If PowerShell refuses to run the activation script, allow it for the current session:
`Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned`.
### Linux debian
```bash
sudo apt install python3 python3-venv
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
### MacOS
```bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
On macOS, Python 3.13 can be installed with `brew install python@3.13`.
## Run
With the virtual environment active, run from the project folder:
```bash
python -m squirrel
```
The program reads `data/2018_Central_Park_Squirrel_Census_-_Squirrel_Data.csv`, prints
the colour counts and writes `squirrel_count.csv`:
```text
Gray: 2473
Cinnamon: 392
Black: 103
```
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.
## Run the tests
```bash
python -m pytest
```
![Test run][img-tests]
The tests use small fixture rows; one test also checks the real 2018 census file when
it is present.
## Continuous integration
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
project with `.[dev]` and runs `python -m pytest`. It uses `github.*` contexts only, so
it also runs on GitHub Actions.
## Build the source documentation
The source is documented with Doxygen comments and configured by [`Doxyfile`][doxyfile].
```bash
doxygen Doxyfile
```
Open `docs/doxygen/html/index.html` in a browser. The output folder is ignored by git.
## Project layout
```text
.gitea/workflows/ci.yml continuous integration workflow
data/ the 2018 census file
docs/ business case, plan, milestones, models, reviews, ADRs
docs/images/ screenshots used by this README and the wiki
src/squirrel/ the package: census.py, cli.py, constants.py
tests/ pytest tests
wiki/ wiki pages in English, Danish (.da) and Bahasa Malaysia (.ms)
Doxyfile Doxygen configuration
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 repository also has a wiki in English, Danish and Bahasa Malaysia.
## 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
[doxygen]: https://www.doxygen.nl/
[adr-0001]: docs/adr/adr-0001-standard-library-instead-of-pandas.md
[ci]: .gitea/workflows/ci.yml
[doxyfile]: Doxyfile
[bc]: docs/business-case.md
[sa]: docs/stakeholder-analysis.md
[pp]: docs/project-plan.md
[uc]: docs/uc-001/uc.md
[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 |
| MIL | Milestone / Gateway | docs/milestones/*.md | 005 |
| 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 |
| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 |
| UCD | Use Case Diagram | docs/use-case-diagram.md | 002 |
+1 -1
View File
@@ -11,7 +11,7 @@
## Version History
| 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] |
---
+2 -2
View File
@@ -11,8 +11,8 @@
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | 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 | Deprecated | Jens Tirsvad Nielsen | S01 | Initial version | [f1b3c03] |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | CrossReference: added [US-001] | [259d017] |
---
## 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] |
| `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] |
| `.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
@@ -89,3 +89,4 @@ updated whenever an artifact instance is created or reviewed.
[RC-022]: ./reviews/rc-022-mil-003-delta.md
[RC-023]: ./reviews/rc-023-mil-004-delta.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**