MIL-002 Squirrel census analysis #27

Merged
Tirsvad merged 4 commits from mil-002-census-analysis into main 2026-10-13 09:38:25 +02:00
30 changed files with 1481 additions and 128 deletions
Showing only changes of commit 259d017ad2 - Show all commits
@@ -0,0 +1,55 @@
# ADR-0001 Use the standard library instead of Pandas
## Metadata
| Key | Value |
| --- | --- |
| ID | ADR-0001 |
| CrossReference | [BC-001], [SA-001], [MIL-002] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
Allowed Status values: `Proposed`, `Accepted`, `Rejected`, `Deprecated`, `Superseded by ADR-NNNN`.
---
## Context
The day 25 lecture reads the census with `pandas.read_csv`, filters rows by fur colour and builds a DataFrame for the export. The Business Case sets a success criterion of zero third-party runtime packages ([BC-001], criterion 3), and stakeholder S03 wants a repository with no runtime dependencies ([SA-001]). Stakeholder S02 wants the function names of the assignment.
Options evaluated:
1. **Pandas** — closest to the lecture; adds a large runtime dependency (with NumPy) that every visitor must install.
2. **Standard library** — the `csv` module to read and write and `collections.Counter` to count; no runtime dependency, a few more lines than Pandas.
3. **Pandas as an optional extra** — two code paths for one result; more code to test and explain.
## Decision
Use the standard library (`csv` and `collections.Counter`) for reading, counting and writing, and keep the lecture's step names (`read_csv`, `count_by_fur_color`, `build_summary`, `write_csv`) as public function names.
## Consequences
**Positive:**
- The project has no runtime dependency; `pip install .` installs only the package ([BC-001] criterion 3).
- Setup is the same on Windows PowerShell, Linux Debian and macOS, with no compiled wheels.
- The code is short enough to read in one sitting (S02).
**Negative:**
- The code differs from the lecture's Pandas calls, so a participant comparing line by line sees different statements.
- A later assignment that needs DataFrame features must introduce Pandas then.
## Affected Artifacts
- [BC-001] — meets success criterion 3 and mitigates the Pandas risk.
- [SA-001] — resolves the conflict between S01's lecture and S03's expectation.
- [MIL-002] — the tasks "Read the census file" to "Add the command line entry point" implement it.
---
[BC-001]: ../business-case.md
[SA-001]: ../stakeholder-analysis.md
[MIL-002]: ../milestones/mil-002-census-analysis.md
+66 -61
View File
@@ -1,61 +1,66 @@
# 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 |
| ADR | Architecture Decision Record | docs/adr/adr-NNNN-*.md | 0001 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 011 |
| DICT | Domain Dictionary | docs/dictionary.md | 002 |
| TM | Traceability Matrix | docs/sqa/traceability-matrix.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.
# 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 |
| ADR | Architecture Decision Record | docs/adr/adr-NNNN-*.md | 0002 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 025 |
| 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 |
| US | User Story | docs/user-stories.md | 002 |
| UC | Use Case | docs/uc-*/uc.md | 002 |
| DM | Domain Model | docs/domain-model.md | 003 |
| SSD | System Sequence Diagram | docs/uc-*/ssd.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.
+3 -2
View File
@@ -11,8 +11,8 @@
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | 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 [UCD-001] | pending |
---
## Executive Summary
@@ -134,3 +134,4 @@ Proceed — the scope is small, the risks are mitigated and the result is direct
---
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
[UCD-001]: ./use-case-diagram.md
+46 -44
View File
@@ -1,44 +1,46 @@
# Domain Dictionary (PO and IT terms)
## 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-13 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [f1b3c03] |
---
## Purpose and Scope
Maps each Product Owner (PO) term of the squirrel census project to its professional IT term. PO language: English (`en`), domain `it`. It covers the terms of the Business Case, Stakeholder Analysis, milestones, user story, use case and Domain Model.
## Dictionary
| PO term | Language | IT term | Definition | Used as PO term in | Used as IT term in |
| --- | --- | --- | --- | --- | --- |
| Census file | en | source file | The file with the 2018 squirrel census that the participant supplies to the program. | BC, SA, MIL, user story (US), use case (UC), domain model (DM) | system sequence diagram (SSD), source code |
| Squirrel sighting | en | sighting row | One recorded observation of one squirrel in the census file. | BC, MIL, US, UC, DM | SSD, source code |
| Fur colour | en | fur_color | The primary fur colour of a squirrel: Gray, Cinnamon or Black. | BC, SA, MIL, US, UC, DM | SSD, source code |
| Colour count | en | color_count | The number of squirrel sightings with one fur colour. | BC, MIL, US, UC, DM | SSD, source code |
| Summary | en | summary table | The table of fur colours and their counts that is exported as `squirrel_count.csv`. | BC, MIL, US, UC, DM | SSD, source code |
| Participant | en | command line user | The course participant who runs the program on the census file. | BC, SA, US, UC | SSD |
## Rules
- The Domain Model, use cases and user stories use the PO term; the Operation
Contract, Sequence Diagram, Design Class Diagram, ERD and source code use the IT term.
- One IT term per PO term and one PO term per IT term; no synonyms.
- A new concept in the Domain Model gets a row in the same change.
---
[BC-001]: ./business-case.md
[SA-001]: ./stakeholder-analysis.md
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
# Domain Dictionary (PO and IT terms)
## Metadata
| Key | Value |
| --- | --- |
| ID | DICT-001 |
| CrossReference | [BC-001], [SA-001], [DM-002] |
| Language | en |
| Domain | it |
## 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 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | CrossReference: added [DM-002] | pending |
---
## Purpose and Scope
Maps each Product Owner (PO) term of the squirrel census project to its professional IT term. PO language: English (`en`), domain `it`. It covers the terms of the Business Case, Stakeholder Analysis, milestones, user story, use case and Domain Model.
## Dictionary
| PO term | Language | IT term | Definition | Used as PO term in | Used as IT term in |
| --- | --- | --- | --- | --- | --- |
| Census file | en | source file | The file with the 2018 squirrel census that the participant supplies to the program. | BC, SA, MIL, user story (US), use case (UC), domain model (DM) | system sequence diagram (SSD), source code |
| Squirrel sighting | en | sighting row | One recorded observation of one squirrel in the census file. | BC, MIL, US, UC, DM | SSD, source code |
| Fur colour | en | fur_color | The primary fur colour of a squirrel: Gray, Cinnamon or Black. | BC, SA, MIL, US, UC, DM | SSD, source code |
| Colour count | en | color_count | The number of squirrel sightings with one fur colour. | BC, MIL, US, UC, DM | SSD, source code |
| Summary | en | summary table | The table of fur colours and their counts. | BC, MIL, US, UC, DM | SSD, source code |
| Summary file | en | output file | The file the summary is written to. | BC, MIL, US, UC, DM | SSD, source code |
| Participant | en | command line user | The course participant who runs the program on the census file. | BC, SA, US, UC | SSD |
## Rules
- The Domain Model, use cases and user stories use the PO term; the Operation
Contract, Sequence Diagram, Design Class Diagram, ERD and source code use the IT term.
- One IT term per PO term and one PO term per IT term; no synonyms.
- A new concept in the Domain Model gets a row in the same change.
---
[BC-001]: ./business-case.md
[SA-001]: ./stakeholder-analysis.md
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
[DM-002]: ./domain-model.md
+86
View File
@@ -0,0 +1,86 @@
# Domain Model
## Metadata
| Key | Value |
| --- | --- |
| ID | DM-002 |
| CrossReference | [UC-001], [UCD-001], [SSD-001], [DICT-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Purpose and Scope
Covers: [UC-001] Count squirrels by fur colour.
## Diagram
Concepts, attributes and associations only — no operations.
```plantuml
@startuml
class Participant
class "Census file" as CF {
name
}
class "Squirrel sighting" as SS
class "Fur colour" as FC {
name
}
class "Colour count" as CC {
number of sightings
}
class Summary
class "Summary file" as SF {
name
}
Participant "1" --> "1" CF : supplies
CF "1" --> "0..*" SS : contains
SS "0..*" --> "0..1" FC : has
CC "0..*" --> "1" FC : counts sightings of
Summary "1" --> "3" CC : consists of
Summary "1" --> "1" SF : is written to
Participant "1" --> "0..*" Summary : receives
@enduml
```
## Concept Table
| Concept | Definition | Attributes | Source (use case / glossary) |
| --- | --- | --- | --- |
| Participant | The course participant who runs the program | - | [UC-001] primary actor |
| Census file | The file with the 2018 squirrel census | name | [UC-001] step 1, [DICT-001] |
| Squirrel sighting | One recorded observation of one squirrel | - | [UC-001] step 2, [DICT-001] |
| Fur colour | The primary fur colour of a squirrel: Gray, Cinnamon or Black | name | [UC-001] step 2, [DICT-001] |
| Colour count | The number of sightings with one fur colour | number of sightings | [UC-001] step 4, [DICT-001] |
| Summary | The table of colour counts | - | [UC-001] step 3, [DICT-001] |
| Summary file | The file the summary is written to | name | [UC-001] step 1, [DICT-001] |
## Association Table
| From | Association (reading direction) | To | Multiplicity |
| --- | --- | --- | --- |
| Participant | supplies | Census file | 1 to 1 |
| Census file | contains | Squirrel sighting | 1 to 0..* |
| Squirrel sighting | has | Fur colour | 0..* to 0..1 |
| Colour count | counts sightings of | Fur colour | 0..* to 1 |
| Summary | consists of | Colour count | 1 to 3 |
| Summary | is written to | Summary file | 1 to 1 |
| Participant | receives | Summary | 1 to 0..* |
## Generalizations
None.
---
[UC-001]: ./uc-001/uc.md
[UCD-001]: ./use-case-diagram.md
[SSD-001]: ./uc-001/ssd.md
[DICT-001]: ./dictionary.md
+4 -3
View File
@@ -4,15 +4,15 @@
| Key | Value |
| --- | --- |
| ID | MIL-001 |
| CrossReference | [BC-001] |
| CrossReference | [BC-001], [US-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | 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 [US-001] | pending |
---
## Purpose
@@ -72,3 +72,4 @@ A branch merged to `main` containing `.gitignore`, `pyproject.toml`, `src/squirr
[BC-001]: ../business-case.md
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
[US-001]: ../user-stories.md
+4 -3
View File
@@ -4,15 +4,15 @@
| Key | Value |
| --- | --- |
| ID | MIL-002 |
| CrossReference | [BC-001] |
| CrossReference | [BC-001], [US-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | 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 [US-001] | pending |
---
## Purpose
@@ -74,3 +74,4 @@ A branch merged to `main` containing the user story, use case, system sequence d
[BC-001]: ../business-case.md
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
[US-001]: ../user-stories.md
+4 -3
View File
@@ -4,15 +4,15 @@
| Key | Value |
| --- | --- |
| ID | MIL-003 |
| CrossReference | [BC-001] |
| CrossReference | [BC-001], [US-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | 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 [US-001] | pending |
---
## Purpose
@@ -70,3 +70,4 @@ A branch merged to `main` containing `README.md` with the requested sections, Do
[BC-001]: ../business-case.md
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
[US-001]: ../user-stories.md
+4 -3
View File
@@ -4,15 +4,15 @@
| Key | Value |
| --- | --- |
| ID | MIL-004 |
| CrossReference | [BC-001] |
| CrossReference | [BC-001], [US-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | 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 [US-001] | pending |
---
## Purpose
@@ -70,3 +70,4 @@ Wiki pages `Home`, `Install`, `Usage` and `Description` in English plus `-da` an
[BC-001]: ../business-case.md
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
[US-001]: ../user-stories.md
+3 -2
View File
@@ -4,7 +4,7 @@
| Key | Value |
| --- | --- |
| ID | PP-001 |
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004] |
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [US-001] |
| Language | en |
| Domain | it |
@@ -12,7 +12,7 @@
| 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] | pending |
---
## Purpose
@@ -97,3 +97,4 @@ A No-Go at a gateway stops the later gateways; their dates move by the days the
[MS-125]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/milestone/125
[MS-126]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/milestone/126
[MS-127]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/milestone/127
[US-001]: ./user-stories.md
@@ -0,0 +1,68 @@
# RC-011 Review of UCD-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-011 |
| CrossReference | [UCD-001], [QC-UCD-001], [QC-LANG-001], [DICT-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: [UCD-001]
- Checklist used: [QC-UCD-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 1 | Actors are defined with correct UML stereotypes (e.g. `<<System>>`, `<<Actor>>`) (Mandatory) | Pass | Participant is <<Actor>> and Squirrel Census Program is <<System>> in the Actor Table. |
| 2 | System boundary is clearly drawn and labeled (Mandatory) | Pass | The diagram draws the labelled rectangle "Squirrel Census Program". |
| 3 | Include/extend relationships are used correctly per UML 2.5.1, not as generic "uses" arrows (Mandatory) | Pass | No include or extend relationship is used; the Relationships table says why. |
| 4 | Every actor participates in at least one use case (no orphan actors) (Mandatory) | Pass | The Participant takes part in the only use case. |
| 5 | Diagram is traceable to a documented stakeholder need (Mandatory) | Pass | The actor table traces the Participant to S01 and S02 of [SA-001]. |
| 6 | Use case names are verb phrases describing actor goals, not internal system operations (Mandatory) | Pass | The use case "Count squirrels by fur colour" is a verb phrase of the actor goal. |
| 7 | Diagram is free of implementation detail (e.g. UI widgets, database tables) (Optional) | Pass | No UI or storage detail. |
| 8 | Actor and use case naming is consistent with corresponding Use Case and User Story documents (Optional) | Pass | Names match [UC-001] and [US-001]. |
## 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 (Mandatory) | Pass | Metadata has `Language | en` and `Domain | it`. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language (Mandatory) | Pass | The use case diagram is written in English throughout. |
| 4 | The register matches the one the registry gives for the artifact type (Mandatory) | Pass | Professional register: actors, stereotypes and goals. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms (Mandatory) | Pass | Terms Participant, Census file, Squirrel sighting, Fur colour, Colour count, Summary and Summary file match [DICT-001]. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | First version; no earlier accepted language. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly (Mandatory) | Pass | Reviewer reads English and knows the software domain; no second reviewer needed. |
| 10 | Abbreviations are spelled out on first use, in the stated language (Optional) | Pass | Abbreviations are expanded on first use in the body (S-IDs and artifact IDs are framework labels). |
## Overall Verdict
Go — all Mandatory criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[UCD-001]: ../../use-case-diagram.md
[QC-UCD-001]: ../../../framework/qc/artifacts/qc-use-case-diagram.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[DICT-001]: ../../dictionary.md
+67
View File
@@ -0,0 +1,67 @@
# RC-012 Review of US-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-012 |
| CrossReference | [US-001], [QC-US-001], [QC-LANG-001], [DICT-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: [US-001]
- Checklist used: [QC-US-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 1 | Follows INVEST criteria (Independent, Negotiable, Valuable, Estimable, Small, Testable) (Mandatory) | Pass | INVEST check line states each property; one story, no exceptions. |
| 2 | Written in "As a / I want / So that" form (Mandatory) | Pass | US-001.01 uses "As a / I want / so that". |
| 3 | Clear, testable acceptance criteria are included (Mandatory) | Pass | Four Given/When/Then criteria, including the figures 2473, 392 and 103. |
| 4 | Traceable to a use case or epic (Mandatory) | Pass | Traces to [UC-001] and [MIL-002]. |
| 5 | Story is sized to fit within a single iteration (Optional) | Pass | Fits one iteration. |
| 6 | Story statement avoids technical implementation detail (Optional) | Pass | The story names no technology. |
| 7 | Role named in the story matches an actor defined in the Use Case Diagram (Mandatory) | Pass | Role "Participant" is the actor of [UCD-001]. |
## 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 (Mandatory) | Pass | Metadata has `Language | en` and `Domain | it`. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language (Mandatory) | Pass | The user story is written in English throughout. |
| 4 | The register matches the one the registry gives for the artifact type (Mandatory) | Pass | Professional register: story form and acceptance criteria. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms (Mandatory) | Pass | Terms Participant, Census file, Squirrel sighting, Fur colour, Colour count, Summary and Summary file match [DICT-001]. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | First version; no earlier accepted language. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly (Mandatory) | Pass | Reviewer reads English and knows the software domain; no second reviewer needed. |
| 10 | Abbreviations are spelled out on first use, in the stated language (Optional) | Pass | Abbreviations are expanded on first use in the body (S-IDs and artifact IDs are framework labels). |
## Overall Verdict
Go — all Mandatory criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[US-001]: ../../user-stories.md
[QC-US-001]: ../../../framework/qc/artifacts/qc-user-story.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[DICT-001]: ../../dictionary.md
+72
View File
@@ -0,0 +1,72 @@
# RC-013 Review of UC-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-013 |
| CrossReference | [UC-001], [QC-UC-001], [QC-LANG-001], [DICT-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: [UC-001]
- Checklist used: [QC-UC-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 1 | Consists of a single, concise paragraph summarizing only the primary success scenario (Mandatory) | N-A | The format is Fully Dressed, not Brief. |
| 2 | Written as an informal multi-paragraph narrative; may mention some alternate flows without formal structure (Mandatory) | N-A | The format is Fully Dressed, not Casual. |
| 3 | All standard sections are present: actors, preconditions, postconditions, main success scenario, alternative/exception flows (Mandatory) | Pass | Scope, level, primary actor, stakeholders, pre- and postconditions, main scenario, extensions, business rules and open issues are present. |
| 4 | Preconditions and postconditions are explicitly defined (Mandatory) | Pass | Preconditions and postconditions are stated. |
| 5 | Primary actor is explicitly stated (Mandatory) | Pass | Primary actor is Participant. |
| 6 | Stakeholders and their interests are stated (Mandatory) | Pass | S01, S02 and S03 with their interests. |
| 7 | Main success scenario is written as clear, numbered steps (Mandatory) | Pass | Main success scenario has four numbered steps. |
| 8 | Alternative/exception flows correctly reference `<<include>>`/`<<extend>>` use cases where relevant, per UML 2.5.1 (Mandatory) | Pass | Extensions 1a and 2a need no include or extend use case. |
| 9 | Explicit business rules are captured per step where applicable, rather than embedded loosely in narrative text (Optional) | Pass | Business rules are listed per step. |
| 10 | Naming of actors and use case title is consistent with the corresponding Use Case Diagram and User Stories (Mandatory) | Pass | Title and actor match [UCD-001] and [US-001]. |
| 11 | Scope/level (e.g. summary, user-goal, subfunction) is explicitly stated (Optional) | Pass | Level is user-goal. |
| 12 | Use case is written from the actor's goal perspective, free of UI or implementation detail (Mandatory) | Pass | Written from the goal of the participant; no UI detail. |
## 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 (Mandatory) | Pass | Metadata has `Language | en` and `Domain | it`. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language (Mandatory) | Pass | The use case is written in English throughout. |
| 4 | The register matches the one the registry gives for the artifact type (Mandatory) | Pass | Professional register: numbered scenario and business rules. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms (Mandatory) | Pass | Terms Participant, Census file, Squirrel sighting, Fur colour, Colour count, Summary and Summary file match [DICT-001]. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | First version; no earlier accepted language. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly (Mandatory) | Pass | Reviewer reads English and knows the software domain; no second reviewer needed. |
| 10 | Abbreviations are spelled out on first use, in the stated language (Optional) | Pass | Abbreviations are expanded on first use in the body (S-IDs and artifact IDs are framework labels). |
## Overall Verdict
Go — all Mandatory criteria pass; criteria 1 and 2 apply to other formats.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[UC-001]: ../../uc-001/uc.md
[QC-UC-001]: ../../../framework/qc/artifacts/qc-use-case.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[DICT-001]: ../../dictionary.md
+67
View File
@@ -0,0 +1,67 @@
# RC-014 Review of SSD-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-014 |
| CrossReference | [SSD-001], [QC-SSD-001], [QC-LANG-001], [DICT-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: [SSD-001]
- Checklist used: [QC-SSD-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 1 | Input/output messages match the corresponding Use Case's main success scenario step-for-step (Mandatory) | Pass | One message `countByFurColor` covers use case steps 1 to 4; the table justifies it. |
| 2 | Actor and System are treated strictly as black boxes (system shown as `:System`) (Mandatory) | Pass | Only Participant and :System appear. |
| 3 | Object creation/destruction of the System instance handled explicitly where relevant (Optional) | Pass | Lifecycle Notes: the instance lives for one run. |
| 4 | Return values are shown for operations that produce one, using dashed return arrows (Mandatory) | Pass | Dashed return arrows `summary` and `censusFileMissing`. |
| 5 | Alternate/exceptional flows are represented separately (or explicitly out of scope noted) (Mandatory) | Pass | The alternate flow 1a is the second diagram; 2a is stated to have no message. |
| 6 | Message names are verb phrases consistent with the use case's system responsibilities (Optional) | Pass | `countByFurColor` is a verb phrase. |
| 7 | Diagram references the specific Use Case (name and ID) it depicts (Mandatory) | Pass | Source Use Case names Count squirrels by fur colour ([UC-001]). |
## 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 (Mandatory) | Pass | Metadata has `Language | en` and `Domain | it`. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language (Mandatory) | Pass | The system sequence diagram is written in English throughout. |
| 4 | The register matches the one the registry gives for the artifact type (Mandatory) | Pass | Professional register: messages, parameters and returns. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms (Mandatory) | Pass | Terms Participant, Census file, Squirrel sighting, Fur colour, Colour count, Summary and Summary file match [DICT-001]. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | First version; no earlier accepted language. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly (Mandatory) | Pass | Reviewer reads English and knows the software domain; no second reviewer needed. |
| 10 | Abbreviations are spelled out on first use, in the stated language (Optional) | Pass | Abbreviations are expanded on first use in the body (S-IDs and artifact IDs are framework labels). |
## Overall Verdict
Go — all Mandatory criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[SSD-001]: ../../uc-001/ssd.md
[QC-SSD-001]: ../../../framework/qc/artifacts/qc-ssd.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[DICT-001]: ../../dictionary.md
+67
View File
@@ -0,0 +1,67 @@
# RC-015 Review of DM-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-015 |
| CrossReference | [DM-001], [QC-DM-001], [QC-LANG-001], [DICT-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: [DM-001]
- Checklist used: [QC-DM-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 1 | Uses ubiquitous/business language throughout; no technical or implementation jargon (e.g. no "table", "class", "pointer") (Mandatory) | Pass | Concepts are business terms from [DICT-001]; no table or class names. |
| 2 | Multiplicities on associations are correct and complete (e.g. `1..*`, `0..1`) (Mandatory) | Pass | All six associations have multiplicities at both ends. |
| 3 | No operation/method signatures shown — attributes and associations only (Mandatory) | Pass | Concepts show attributes and associations only. |
| 4 | Associations are named with an unambiguous reading direction (Optional) | Pass | Association names have a reading direction (supplies, contains, has, counts sightings of, consists of, is written to, receives). |
| 5 | Generalization/specialization used correctly, reflecting true "is-a" relationships, not misused for code reuse (Optional) | Pass | No generalization is used. |
| 6 | Every concept traces to a noun phrase found in the use cases or glossary (Mandatory) | Pass | Every concept traces to a noun in [UC-001] or [DICT-001]. |
| 7 | Attributes are simple domain data (no foreign-key-like references or object pointers modeled as attributes) (Mandatory) | Pass | Attributes are name and number of sightings; relations are associations. |
## 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 (Mandatory) | Pass | Metadata has `Language | en` and `Domain | it`. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language (Mandatory) | Pass | The domain model is written in English throughout. |
| 4 | The register matches the one the registry gives for the artifact type (Mandatory) | Pass | Professional register: concepts and associations. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms (Mandatory) | Pass | Terms Participant, Census file, Squirrel sighting, Fur colour, Colour count, Summary and Summary file match [DICT-001]. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | First version; no earlier accepted language. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly (Mandatory) | Pass | Reviewer reads English and knows the software domain; no second reviewer needed. |
| 10 | Abbreviations are spelled out on first use, in the stated language (Optional) | Pass | Abbreviations are expanded on first use in the body (S-IDs and artifact IDs are framework labels). |
## Overall Verdict
Go — all Mandatory criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[DM-001]: ../../uc-001/dm.md
[QC-DM-001]: ../../../framework/qc/artifacts/qc-domain-model.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[DICT-001]: ../../dictionary.md
+67
View File
@@ -0,0 +1,67 @@
# RC-016 Review of DM-002
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-016 |
| CrossReference | [DM-002], [QC-DM-001], [QC-LANG-001], [DICT-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: [DM-002]
- Checklist used: [QC-DM-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 1 | Uses ubiquitous/business language throughout; no technical or implementation jargon (e.g. no "table", "class", "pointer") (Mandatory) | Pass | Concepts are business terms from [DICT-001]; no table or class names. |
| 2 | Multiplicities on associations are correct and complete (e.g. `1..*`, `0..1`) (Mandatory) | Pass | All six associations have multiplicities at both ends. |
| 3 | No operation/method signatures shown — attributes and associations only (Mandatory) | Pass | Concepts show attributes and associations only. |
| 4 | Associations are named with an unambiguous reading direction (Optional) | Pass | Association names have a reading direction (supplies, contains, has, counts sightings of, consists of, is written to, receives). |
| 5 | Generalization/specialization used correctly, reflecting true "is-a" relationships, not misused for code reuse (Optional) | Pass | No generalization is used. |
| 6 | Every concept traces to a noun phrase found in the use cases or glossary (Mandatory) | Pass | Every concept traces to a noun in [UC-001] or [DICT-001]. |
| 7 | Attributes are simple domain data (no foreign-key-like references or object pointers modeled as attributes) (Mandatory) | Pass | Attributes are name and number of sightings; relations are associations. |
## 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 (Mandatory) | Pass | Metadata has `Language | en` and `Domain | it`. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language (Mandatory) | Pass | The domain model is written in English throughout. |
| 4 | The register matches the one the registry gives for the artifact type (Mandatory) | Pass | Professional register: concepts and associations. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms (Mandatory) | Pass | Terms Participant, Census file, Squirrel sighting, Fur colour, Colour count, Summary and Summary file match [DICT-001]. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | First version; no earlier accepted language. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly (Mandatory) | Pass | Reviewer reads English and knows the software domain; no second reviewer needed. |
| 10 | Abbreviations are spelled out on first use, in the stated language (Optional) | Pass | Abbreviations are expanded on first use in the body (S-IDs and artifact IDs are framework labels). |
## Overall Verdict
Go — all Mandatory criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[DM-002]: ../../domain-model.md
[QC-DM-001]: ../../../framework/qc/artifacts/qc-domain-model.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[DICT-001]: ../../dictionary.md
+54
View File
@@ -0,0 +1,54 @@
# RC-017 Review of ADR-0001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-017 |
| CrossReference | [ADR-0001], [QC-ADR-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: [ADR-0001]
- Checklist used: [QC-ADR-001]
- Scope: full review
- 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 |
| --- | --- | --- | --- |
| 1 | The ID (`ADR-NNNN`, 4-digit) matches the filename number and is unique and sequential (Mandatory) | Pass | ID ADR-0001 matches `adr-0001-...` and is the first ADR. |
| 2 | Context states the problem, the forces (cost, risk, constraints) and the options evaluated (Mandatory) | Pass | Context states the criterion, the stakeholders S02 and S03 and three options. |
| 3 | At least two options were considered, or the absence of alternatives is justified (Mandatory) | Pass | Three options were evaluated. |
| 4 | Decision is stated in one or two unhedged sentences and matches one of the evaluated options (Mandatory) | Pass | The decision is one sentence and equals option 2. |
| 5 | Consequences list both Positive and Negative outcomes (Mandatory) | Pass | Positive and Negative lists are present. |
| 6 | Quality-attribute impacts (performance, security, portability, etc.) are named where the decision affects them (Optional) | Pass | Portability across Windows, Debian and macOS is named. |
| 7 | Affected Artifacts are listed as links, and each is also in CrossReference (Mandatory) | Pass | Affected Artifacts BC-001, SA-001 and MIL-002 are also in CrossReference. |
| 8 | Status changes are recorded as new Version History rows with a Change summary and Commit link; retained rows are never rewritten (Mandatory) | Pass | First version; row is Proposed then Accepted by this review. |
| 9 | A superseded or deprecated ADR names its successor, and the successor links back (Optional) | N-A | No superseded ADR. |
| 10 | Written in business or technical language of the domain, with no unexplained abbreviations (Optional) | Pass | Abbreviations are used as in the Business Case; CSV is spelled by the module name. |
| 11 | Status is one of `Proposed`, `Accepted`, `Rejected`, `Deprecated` or `Superseded by ADR-NNNN`, and every Version History row uses only these (Mandatory) | Pass | Status values are Proposed and Accepted. |
## Overall Verdict
Go — all Mandatory criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[ADR-0001]: ../../adr/adr-0001-standard-library-instead-of-pandas.md
[QC-ADR-001]: ../../../framework/qc/artifacts/qc-adr.md
+67
View File
@@ -0,0 +1,67 @@
# RC-018 Review of DICT-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-018 |
| CrossReference | [DICT-001], [QC-DICT-001], [QC-LANG-001], [DM-002] |
## 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: [DICT-001]
- Checklist used: [QC-DICT-001] and [QC-LANG-001]
- Scope: full review (second review; conditions of RC-007 closed)
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 1 | Every row has a PO term, its language, an IT term and a definition (Mandatory) | Pass | All seven rows have PO term, language, IT term and definition. |
| 2 | Each PO term maps to exactly one IT term and the reverse (no synonyms) (Mandatory) | Pass | One IT term per PO term and the reverse; no synonyms. |
| 3 | Every Domain Model concept has a row, and the Domain Model uses its PO term (Mandatory) | Pass | Every concept of [DM-001] and [DM-002] has a row (Participant, Census file, Squirrel sighting, Fur colour, Colour count, Summary, Summary file) and the model uses the PO terms. |
| 4 | The Operation Contracts, Sequence Diagrams, Design Class Diagrams and ERD use the IT term, not the PO term (Mandatory) | N-A | The project creates no Operation Contract, Sequence Diagram, Design Class Diagram or ERD; design is the system sequence diagram and source code. |
| 5 | Definitions are written in the PO language and are one sentence (Optional) | Pass | Definitions are single English sentences. |
| 6 | "Used as PO term in" and "Used as IT term in" name artifact types that exist in the project (Optional) | Pass | Used-in columns name existing types. |
| 7 | The dictionary's `Language` and `Domain` rows, and the language of every row, match the PO language and domain in the project registry (Mandatory) | Pass | Language en and Domain it match the registry. |
## 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 (Mandatory) | Pass | Metadata has `Language | en` and `Domain | it`. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language (Mandatory) | Pass | The dictionary is written in English throughout. |
| 4 | The register matches the one the registry gives for the artifact type (Mandatory) | Pass | Professional register: term pairs. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms (Mandatory) | Pass | This document is the dictionary. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | First version; no earlier accepted language. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly (Mandatory) | Pass | Reviewer reads English and knows the software domain; no second reviewer needed. |
| 10 | Abbreviations are spelled out on first use, in the stated language (Optional) | Pass | Abbreviations are expanded on first use in the body (S-IDs and artifact IDs are framework labels). |
## Overall Verdict
Go — all Mandatory criteria that can apply pass; criterion 4 has no object in this project. Supersedes the conditions of RC-007.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[DICT-001]: ../../dictionary.md
[QC-DICT-001]: ../../../framework/qc/artifacts/qc-dictionary.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[DM-002]: ../../domain-model.md
@@ -0,0 +1,55 @@
# RC-019 Review of BC-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-019 |
| CrossReference | [BC-001], [QC-BC-001], [QC-LANG-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: [BC-001]
- Checklist used: [QC-BC-001] and [QC-LANG-001]
- Scope: delta re-review of the criterion that cites the changed row and criteria 1, 2, 6, 7, 8 of QC-LANG-001: only the CrossReference row changed (first instance of a candidate type was created); earlier record applies to the rest
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline (Mandatory) | Pass | Stakeholders table is unchanged; CrossReference now also lists [UCD-001]. |
## 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 (Mandatory) | Pass | Language and Domain rows unchanged. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | Unchanged. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Keys, headings and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | Language unchanged since the accepted version. |
## Overall Verdict
Go — only Metadata (CrossReference) and the Version History changed; the earlier review of the content still holds.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[BC-001]: ../../business-case.md
[QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
+55
View File
@@ -0,0 +1,55 @@
# RC-020 Review of MIL-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-020 |
| CrossReference | [MIL-001], [QC-MIL-001], [QC-LANG-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: [MIL-001]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: delta re-review of the criterion that cites the changed row and criteria 1, 2, 6, 7, 8 of QC-LANG-001: only the CrossReference row changed (first instance of a candidate type was created); earlier record applies to the rest
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 4 | Each milestone is traceable to a Business Case objective or KPI (Mandatory) | Pass | Traceability table is unchanged; the CrossReference row now also lists [US-001]. |
## 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 (Mandatory) | Pass | Language and Domain rows unchanged. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | Unchanged. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Keys, headings and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | Language unchanged since the accepted version. |
## Overall Verdict
Go — only Metadata (CrossReference) and the Version History changed; the earlier review of the content still holds.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-001]: ../../milestones/mil-001-project-scaffold.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
+55
View File
@@ -0,0 +1,55 @@
# RC-021 Review of MIL-002
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-021 |
| CrossReference | [MIL-002], [QC-MIL-001], [QC-LANG-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: [MIL-002]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: delta re-review of the criterion that cites the changed row and criteria 1, 2, 6, 7, 8 of QC-LANG-001: only the CrossReference row changed (first instance of a candidate type was created); earlier record applies to the rest
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 4 | Each milestone is traceable to a Business Case objective or KPI (Mandatory) | Pass | Traceability table is unchanged; the CrossReference row now also lists [US-001]. |
## 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 (Mandatory) | Pass | Language and Domain rows unchanged. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | Unchanged. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Keys, headings and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | Language unchanged since the accepted version. |
## Overall Verdict
Go — only Metadata (CrossReference) and the Version History changed; the earlier review of the content still holds.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-002]: ../../milestones/mil-002-census-analysis.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
+55
View File
@@ -0,0 +1,55 @@
# RC-022 Review of MIL-003
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-022 |
| CrossReference | [MIL-003], [QC-MIL-001], [QC-LANG-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: [MIL-003]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: delta re-review of the criterion that cites the changed row and criteria 1, 2, 6, 7, 8 of QC-LANG-001: only the CrossReference row changed (first instance of a candidate type was created); earlier record applies to the rest
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 4 | Each milestone is traceable to a Business Case objective or KPI (Mandatory) | Pass | Traceability table is unchanged; the CrossReference row now also lists [US-001]. |
## 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 (Mandatory) | Pass | Language and Domain rows unchanged. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | Unchanged. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Keys, headings and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | Language unchanged since the accepted version. |
## Overall Verdict
Go — only Metadata (CrossReference) and the Version History changed; the earlier review of the content still holds.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-003]: ../../milestones/mil-003-documentation.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
+55
View File
@@ -0,0 +1,55 @@
# RC-023 Review of MIL-004
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-023 |
| CrossReference | [MIL-004], [QC-MIL-001], [QC-LANG-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: [MIL-004]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: delta re-review of the criterion that cites the changed row and criteria 1, 2, 6, 7, 8 of QC-LANG-001: only the CrossReference row changed (first instance of a candidate type was created); earlier record applies to the rest
- Language and domain: en / it
- 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 |
| --- | --- | --- | --- |
| 4 | Each milestone is traceable to a Business Case objective or KPI (Mandatory) | Pass | Traceability table is unchanged; the CrossReference row now also lists [US-001]. |
## 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 (Mandatory) | Pass | Language and Domain rows unchanged. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list (Mandatory) | Pass | Unchanged. |
| 6 | Metadata keys, section headings, IDs and statuses are in English (Mandatory) | Pass | Keys, headings and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document (Mandatory) | Pass | No translated twin. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again (Mandatory) | Pass | Language unchanged since the accepted version. |
## Overall Verdict
Go — only Metadata (CrossReference) and the Version History changed; the earlier review of the content still holds.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-004]: ../../milestones/mil-004-wiki-publication.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
+60
View File
@@ -0,0 +1,60 @@
# RC Review of the MIL-002 Python files
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-024 |
| CrossReference | [PY-MIL-002], [QC-PY-001], [ADR-0001] |
## 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: [PY-MIL-002]
- Checklist used: [QC-PY-001]
- Scope: full review of src/squirrel/census.py, cli.py, __main__.py, constants.py and tests/
- 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 |
| --- | --- | --- | --- |
| 1 | Packages, modules, functions, variables, classes and constants follow PEP 8 casing (`snake_case`, `PascalCase`, `UPPER_SNAKE`) (Mandatory) | Pass | Modules, functions and constants use snake_case and UPPER_SNAKE; helper `_build_parser` has one leading underscore. |
| 2 | Names state purpose in the domain's language; no unexplained abbreviations, no single-letter names outside tiny scopes (Mandatory) | Pass | Names state purpose (`count_by_fur_color`, `write_csv`); the lecture step names are kept (ADR-0001). |
| 3 | Code is produced by the project's formatter and passes its linter with no unexplained suppressions (Mandatory) | Pass | `ruff check` and `ruff format --check` (0.17.0) pass with no suppressions. |
| 4 | Every function and method signature is type-annotated, including `-> None` (Mandatory) | Pass | Every function is annotated including `-> None`; `mypy --strict` passes on 10 files. |
| 5 | No bare `except:`, no swallowed exceptions; specific exceptions are raised and the cause is kept (`raise ... from`) (Mandatory) | Pass | No exception handling; a missing file is checked with `is_file()` and reported with exit status 2. |
| 6 | No mutable default arguments and no shadowed builtins (Mandatory) | Pass | The only default argument is the immutable tuple `FUR_COLORS`; no builtin is shadowed. |
| 7 | Files, locks and connections are managed with context managers (Mandatory) | Pass | Files are opened with `with path.open(...)`. |
| 8 | Public modules, classes and functions have docstrings that say what, not how (Optional) | Pass | Public modules and functions have Doxygen blocks and docstrings. |
| 9 | Logging uses `logging`, not `print`; no secrets or personal data in log output (Mandatory) | Pass | `print` is used only for the CLI output to the participant and the stderr error line, not for logging; no secrets. |
| 10 | Classes and operations trace to the Design Class Diagram they implement; deviations are recorded (Mandatory) | N-A | No class is defined and no Design Class Diagram exists; operations trace to [SSD-001] (`countByFurColor`). |
| 11 | Tests exist for new behaviour, are named for the behaviour, and do not depend on order or the network (Mandatory) | Pass | 20 tests: unit tests per function, CLI tests, a real-census test and an imports test; none depends on order or network. |
| 12 | Type checker runs in strict mode without errors; `Any` is justified in a comment (Optional) | Pass | `mypy 2.4.0 --strict` reports no issues. |
| 13 | Dependencies are declared and pinned in the project's dependency file, none unused (Optional) | Pass | No runtime dependency; dev tools pinned in `pyproject.toml`. |
| 14 | Each piece of knowledge (a business rule, constant, format, validation or query) is defined in one place; code is merged only where it expresses the same knowledge, not where it merely looks alike (Mandatory) | Pass | All literals live in `constants.py`; each step is defined once. |
| 15 | Imports point inward: business-rule modules import no framework, database, UI or delivery-mechanism code, and there are no import cycles (Mandatory) | Pass | `census.py` imports only the standard library and constants; `cli.py` imports `census`; no cycle. |
| 16 | SOLID holds: a class or module has one reason to change; new behaviour is added by extension, not by editing a type test in several places; subclasses honour the contract of their base; protocols are narrow; high-level code depends on protocols or abstract types and receives its implementations (Mandatory) | Pass | `census.py` holds four single-purpose functions; the CLI only wires them. |
## Overall Verdict
Go — all Mandatory criteria pass; criterion 10 is not applicable because no class exists.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[PY-MIL-002]: ../../../src/squirrel/census.py
[QC-PY-001]: ../../../framework/qc/code/qc-programming-python.md
[ADR-0001]: ../../adr/adr-0001-standard-library-instead-of-pandas.md
+36 -7
View File
@@ -23,21 +23,29 @@ updated whenever an artifact instance is created or reviewed.
| Artifact Instance | Type | Language | Domain | Upstream (Backward Link) | Downstream (Forward Link) | Last Reviewed (RC-ID) |
| --- | --- | --- | --- | --- | --- | --- |
| [BC-001] | Business Case | en | it | - | [SA-001], [PP-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004] | [RC-001] |
| [BC-001] | Business Case | en | it | - | [SA-001], [PP-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004] | [RC-001], [RC-019] |
| [SA-001] | Stakeholder Analysis | en | it | [BC-001] | [PP-001] | [RC-002] |
| [PP-001] | Project Plan | en | it | [BC-001], [SA-001] | [MIL-001], [MIL-002], [MIL-003], [MIL-004] | - (no checklist; accepted by S01 in chat) |
| [MIL-001] | Milestone | en | it | [BC-001], [PP-001] | - | [RC-003] |
| [MIL-002] | Milestone | en | it | [BC-001], [PP-001], [MIL-001] | - | [RC-004] |
| [MIL-003] | Milestone | en | it | [BC-001], [PP-001], [MIL-002] | - | [RC-005] |
| [MIL-004] | Milestone | en | it | [BC-001], [PP-001], [MIL-003] | - | [RC-006] |
| [DICT-001] | Domain Dictionary | en | it | [BC-001], [SA-001] | - | [RC-007] |
| [MIL-001] | Milestone | en | it | [BC-001], [PP-001] | - | [RC-003], [RC-020] |
| [MIL-002] | Milestone | en | it | [BC-001], [PP-001], [MIL-001] | - | [RC-004], [RC-021] |
| [MIL-003] | Milestone | en | it | [BC-001], [PP-001], [MIL-002] | - | [RC-005], [RC-022] |
| [MIL-004] | Milestone | en | it | [BC-001], [PP-001], [MIL-003] | - | [RC-006], [RC-023] |
| [DICT-001] | Domain Dictionary | en | it | [BC-001], [SA-001] | - | [RC-007], [RC-018] |
| [UCD-001] | Use Case Diagram | en | it | [SA-001], [BC-001] | [US-001], [UC-001] | [RC-011] |
| [US-001] | User Story | en | it | [UCD-001], [BC-001], [MIL-002] | [UC-001] | [RC-012] |
| [UC-001] | Use Case | en | it | [UCD-001], [US-001], [SA-001] | [SSD-001], [DM-001] | [RC-013] |
| [SSD-001] | System Sequence Diagram | en | it | [UC-001] | - | [RC-014] |
| [DM-001] | Domain Model | en | it | [UC-001], [DICT-001] | [DM-002] | [RC-015] |
| [DM-002] | Domain Model | en | it | [DM-001], [DICT-001] | - | [RC-016] |
| [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] |
## Coverage Notes
- `-` in Upstream means foundational; in Downstream, nothing is built on it yet; in Last Reviewed, no `RC-*` exists yet.
- No instance yet of US, UC, SSD, DM or ADR; they are added in MIL-002.
- No instance of OC, SD, DCD, ERD or KPI; the project creates none (see RC-018).
---
@@ -60,3 +68,24 @@ updated whenever an artifact instance is created or reviewed.
[RC-009]: ./reviews/rc-009-ci-workflow-yaml.md
[RC-010]: ./reviews/rc-010-ci-workflow.md
[f1b3c03]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/025-squirrel/commit/f1b3c034dc3880b7884646b4a4ed28e5f98fbcd3
[UCD-001]: ../use-case-diagram.md
[US-001]: ../user-stories.md
[UC-001]: ../uc-001/uc.md
[SSD-001]: ../uc-001/ssd.md
[DM-001]: ../uc-001/dm.md
[DM-002]: ../domain-model.md
[ADR-0001]: ../adr/adr-0001-standard-library-instead-of-pandas.md
[RC-011]: ./reviews/rc-011-use-case-diagram.md
[RC-012]: ./reviews/rc-012-user-stories.md
[RC-013]: ./reviews/rc-013-use-case.md
[RC-014]: ./reviews/rc-014-ssd.md
[RC-015]: ./reviews/rc-015-dm-use-case.md
[RC-016]: ./reviews/rc-016-dm-project.md
[RC-017]: ./reviews/rc-017-adr-0001.md
[RC-018]: ./reviews/rc-018-dictionary-2.md
[RC-019]: ./reviews/rc-019-business-case-delta.md
[RC-020]: ./reviews/rc-020-mil-001-delta.md
[RC-021]: ./reviews/rc-021-mil-002-delta.md
[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
+86
View File
@@ -0,0 +1,86 @@
# Domain Model
## Metadata
| Key | Value |
| --- | --- |
| ID | DM-001 |
| CrossReference | [UC-001], [UCD-001], [SSD-001], [DICT-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Purpose and Scope
Covers: [UC-001] Count squirrels by fur colour.
## Diagram
Concepts, attributes and associations only — no operations.
```plantuml
@startuml
class Participant
class "Census file" as CF {
name
}
class "Squirrel sighting" as SS
class "Fur colour" as FC {
name
}
class "Colour count" as CC {
number of sightings
}
class Summary
class "Summary file" as SF {
name
}
Participant "1" --> "1" CF : supplies
CF "1" --> "0..*" SS : contains
SS "0..*" --> "0..1" FC : has
CC "0..*" --> "1" FC : counts sightings of
Summary "1" --> "3" CC : consists of
Summary "1" --> "1" SF : is written to
Participant "1" --> "0..*" Summary : receives
@enduml
```
## Concept Table
| Concept | Definition | Attributes | Source (use case / glossary) |
| --- | --- | --- | --- |
| Participant | The course participant who runs the program | - | [UC-001] primary actor |
| Census file | The file with the 2018 squirrel census | name | [UC-001] step 1, [DICT-001] |
| Squirrel sighting | One recorded observation of one squirrel | - | [UC-001] step 2, [DICT-001] |
| Fur colour | The primary fur colour of a squirrel: Gray, Cinnamon or Black | name | [UC-001] step 2, [DICT-001] |
| Colour count | The number of sightings with one fur colour | number of sightings | [UC-001] step 4, [DICT-001] |
| Summary | The table of colour counts | - | [UC-001] step 3, [DICT-001] |
| Summary file | The file the summary is written to | name | [UC-001] step 1, [DICT-001] |
## Association Table
| From | Association (reading direction) | To | Multiplicity |
| --- | --- | --- | --- |
| Participant | supplies | Census file | 1 to 1 |
| Census file | contains | Squirrel sighting | 1 to 0..* |
| Squirrel sighting | has | Fur colour | 0..* to 0..1 |
| Colour count | counts sightings of | Fur colour | 0..* to 1 |
| Summary | consists of | Colour count | 1 to 3 |
| Summary | is written to | Summary file | 1 to 1 |
| Participant | receives | Summary | 1 to 0..* |
## Generalizations
None.
---
[UC-001]: ./uc.md
[UCD-001]: ../use-case-diagram.md
[SSD-001]: ./ssd.md
[DICT-001]: ../dictionary.md
+57
View File
@@ -0,0 +1,57 @@
# System Sequence Diagram
## Metadata
| Key | Value |
| --- | --- |
| ID | SSD-001 |
| CrossReference | [UC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Source Use Case
Count squirrels by fur colour ([UC-001]) — scenario: main success scenario. The alternate flow 1a (census file missing) is the second diagram; flow 2a has no system message of its own.
## Diagram
```plantuml
@startuml
actor Participant as A
participant ":System" as S
A -> S : countByFurColor(censusFile, summaryFile)
S --> A : summary
@enduml
```
```plantuml
@startuml
actor Participant as A
participant ":System" as S
A -> S : countByFurColor(censusFile, summaryFile)
S --> A : censusFileMissing
@enduml
```
## System Operations
| Step | Message | Parameters | Return | Use case step |
| --- | --- | --- | --- | --- |
| 1 | countByFurColor | censusFile, summaryFile | summary (colour count of each fur colour) | 1 (input), 2 (count), 3 (write), 4 (shown to the participant) |
| 1a | countByFurColor | censusFile, summaryFile | censusFileMissing | 1a |
Steps 2 to 4 of the use case are the work of the system inside one operation: the system receives one message and returns one result, so one message covers steps 1 to 4.
## Lifecycle Notes
The system instance lives for one run of the program; nothing is kept between runs.
---
[UC-001]: ./uc.md
+55
View File
@@ -0,0 +1,55 @@
# Use Case (Brief/Casual/Fully Dressed)
## Metadata
| Key | Value |
| --- | --- |
| ID | UC-001 |
| CrossReference | [UCD-001], [US-001], [SA-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
**Format:** Fully Dressed
- **Scope:** Squirrel census program
- **Level:** user-goal
- **Primary Actor:** Participant (as named in [UCD-001])
- **Stakeholders and Interests:**
- S01 — a correct summary that matches the dataset and the assignment
- S02 — a result that is easy to reproduce from the README
- S03 — a program with no runtime dependencies
- **Preconditions:** The participant has the census file.
- **Postconditions (success guarantee):** The summary file exists and holds the colour count of Gray, Cinnamon and Black; the participant has seen the counts.
### Main Success Scenario
1. The participant supplies the census file and the name of the summary file.
2. The system counts the squirrel sightings of each fur colour.
3. The system writes the summary to the summary file.
4. The system shows the participant the colour count of each fur colour.
### Extensions / Alternative Flows
- 1a. The census file does not exist: the system tells the participant that the file is missing and ends without writing a summary.
- 2a. A squirrel sighting has no fur colour: the system leaves it out of every colour count.
### Special Requirements / Business Rules
- Step 2: only the fur colours Gray, Cinnamon and Black are counted; a colour count is the number of sightings with that exact fur colour.
- Step 3: the summary has one row per counted fur colour, in the order Gray, Cinnamon, Black.
### Open Issues
None.
---
[UCD-001]: ../use-case-diagram.md
[US-001]: ../user-stories.md
[SA-001]: ../stakeholder-analysis.md
+57
View File
@@ -0,0 +1,57 @@
# Use Case Diagram
## Metadata
| Key | Value |
| --- | --- |
| ID | UCD-001 |
| CrossReference | [SA-001], [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Purpose and Scope
The system is the squirrel census program. The boundary contains the one goal of the assignment: counting squirrels by fur colour from the census file and writing the summary. The participant is the only actor.
## Diagram
```plantuml
@startuml
left to right direction
actor "Participant" as A1
rectangle "Squirrel Census Program" {
usecase "Count squirrels by fur colour" as UC1
}
A1 --> UC1
@enduml
```
## Actor Table
| Actor | Stereotype | Stakeholder ID (SA) | Goals (use cases) |
| --- | --- | --- | --- |
| Participant | <<Actor>> | S01, S02 | Count squirrels by fur colour |
| Squirrel Census Program | <<System>> | S01 | - |
## Use Case Table
| Use Case | Actor(s) | Goal |
| --- | --- | --- |
| Count squirrels by fur colour | Participant | Get the number of squirrels of each fur colour as a summary file |
## Relationships
| From | Relationship (`<<include>>` / `<<extend>>`) | To | Justification |
| --- | --- | --- | --- |
| - | - | - | There is only one use case, so there is no include or extend relationship |
---
[SA-001]: ./stakeholder-analysis.md
[BC-001]: ./business-case.md
+51
View File
@@ -0,0 +1,51 @@
# User Story
## Metadata
| Key | Value |
| --- | --- |
| ID | US-001 |
| CrossReference | [UCD-001], [BC-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Purpose and Scope
Covers the epic delivered by [MIL-002]: the participant counts squirrels by fur colour. Objective 1 of [BC-001].
## Story List
### US-001.01 — Count squirrels by fur colour
**As a** Participant, **I want** to count the squirrels of each fur colour in the census file, **so that** I get a summary file with the number of gray, cinnamon and black squirrels.
**Acceptance Criteria**
- Given a census file with squirrel sightings, when the participant counts by fur colour, then the summary lists Gray, Cinnamon and Black with the number of sightings of each.
- Given the 2018 census file, when the participant counts by fur colour, then the summary shows Gray 2473, Cinnamon 392 and Black 103.
- Given a census file with a sighting that has no fur colour, when the participant counts, then that sighting is in no colour count.
- Given a census file that does not exist, when the participant counts, then the participant is told that the file is missing and no summary is written.
| Traces to | Size | INVEST exceptions |
| --- | --- | --- |
| [UC-001], [MIL-002] | fits one iteration | none |
## INVEST Check
Independent (the only story), Negotiable (file names are defaults), Valuable (delivers the assignment result), Estimable, Small (one iteration), Testable (the criteria are checkable with fixture rows and the 2018 census file). No exceptions.
---
[UCD-001]: ./use-case-diagram.md
[BC-001]: ./business-case.md
[MIL-001]: ./milestones/mil-001-project-scaffold.md
[MIL-002]: ./milestones/mil-002-census-analysis.md
[MIL-003]: ./milestones/mil-003-documentation.md
[MIL-004]: ./milestones/mil-004-wiki-publication.md
[UC-001]: ./uc-001/uc.md