Add the planning baseline: business case, stakeholders, plan, dictionary, milestones and their reviews
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
[submodule "framework"]
|
||||
path = framework
|
||||
url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git
|
||||
@@ -0,0 +1,59 @@
|
||||
# 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 | 006 |
|
||||
| DICT | Domain Dictionary | docs/dictionary.md | 002 |
|
||||
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 009 |
|
||||
|
||||
## Languages
|
||||
|
||||
Set the PO language when the project starts; `project-planning` asks for it
|
||||
if it is missing. An artifact of a type marked "Written in the PO language"
|
||||
exists once, in that language, under its normal name (`business-case.md`); the
|
||||
`artifact` skill ("One file per artifact") has the rule.
|
||||
|
||||
| Setting | Value |
|
||||
| --- | --- |
|
||||
| PO language | en |
|
||||
| PO domain | it |
|
||||
| High-level register | IT Executive English |
|
||||
| Technical register | IT Professional English |
|
||||
|
||||
Every artifact of a type marked "Yes" below states its language and domain in
|
||||
its `Language` and `Domain` Metadata rows; `new-artifact.sh` fills them from
|
||||
`PO language` and `PO domain`. `Language` is a BCP 47 code (`da`, `en`).
|
||||
`Domain` is a value from this list; add a row to introduce a domain, so a
|
||||
reviewer can see at once which professional vocabulary a document uses.
|
||||
|
||||
| Domain | Meaning |
|
||||
| --- | --- |
|
||||
| it | Software and IT |
|
||||
| medical | Healthcare and medical devices |
|
||||
| construction | Construction and civil engineering |
|
||||
|
||||
| Artifact types | Register | Written in the PO language |
|
||||
| --- | --- | --- |
|
||||
| BC, KPI, PP, MIL | IT Executive English | Yes |
|
||||
| SA, BMC, BPMN, UCD, US, UC, SSD, DM, RA, GOV, DICT | IT Professional English | Yes |
|
||||
| OC, SD, DCD, ERD, ADR, TM, RC, QC, source code | IT Professional English | No |
|
||||
|
||||
## Notes
|
||||
|
||||
- "Next Available Version" is the zero-padded (3-digit) version to use the
|
||||
*next* time a new document of that type is created. Increment it only when
|
||||
a brand-new document is created, not when an existing document's
|
||||
`## Version History` gets a row.
|
||||
- `ADR` uses 4 digits (`0001`); `RC` is sequential across all artifact types.
|
||||
@@ -0,0 +1,180 @@
|
||||
# Business Case: Weather Data (Day 25)
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | BC-001 |
|
||||
| CrossReference | [SA-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, reviewed in RC-001 (Go) | pending |
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Weather Data (Day 25) is the day-25 assignment of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*: reading comma-separated values (CSV) data in Python with the weather data of one week as the example. The first lecture reads `weather_data.csv` with Python's built-in `csv` library, collects the temperatures as whole numbers, and then shows how the `pandas` library does the same in one line. The second lecture introduces the two data structures of pandas, `DataFrame` (a table) and `Series` (a column), converts them to a dictionary and a list, computes the average and the maximum temperature, selects rows by a condition (the row of Monday, the row of the hottest day, Monday's temperature in Fahrenheit), creates a `DataFrame` from a dictionary, and exports it to a CSV file.
|
||||
|
||||
This repository turns both lectures into one small, tested and documented Python package with a command-line entry point, and gives it the identity of a repository: name, README, description, topics, a wiki in English, Danish and Bahasa Melayu, and a screenshot. The work is planned in five milestones, each delivered by one branch and one pull request.
|
||||
|
||||
## Methodological and Standards Foundation
|
||||
|
||||
- **Process:** the Software Quality Assurance (SQA) and Quality Criteria (QC) framework mounted at `framework/`: Business Case, Stakeholder Analysis, Project Plan, milestones, tasks synced as issues, then code, each step reviewed before the next.
|
||||
- **Quality model:** ISO/IEC 25010:2023; every QC criterion is tagged with a characteristic of it.
|
||||
- **Code:** Python Enhancement Proposals (PEP) 8, 257 and 484, reviewed against `QC-PY-001`; comments in Doxygen style; tests with pytest.
|
||||
- **Domain terms:** the lectures' own terms and names, recorded in the Domain Dictionary [DICT-001]: CSV, row, column, `DataFrame`, `Series`, `read_csv`, `to_dict`, `to_list`, `mean`, `max`, `to_csv`.
|
||||
|
||||
## Problem Statement
|
||||
|
||||
- The lectures work in one script with scratch variables; a participant who wants to compare solutions or re-run a step has to edit the script.
|
||||
- Reading a CSV file with the `csv` library is easy to get subtly wrong: the header row is data to the reader, every value is a string, and the file path depends on the current working directory.
|
||||
- The `pandas` library is a large dependency; a repository that needs it to run any code at all is heavy for a visitor who only wants to see the `csv` part.
|
||||
- A repository without a description, topics, README, wiki or a picture of the result is hard to find and to judge for the people who browse for ideas.
|
||||
|
||||
## Business Opportunity
|
||||
|
||||
A finished, reproducible repository shows the path from the day-25 lectures to documented, tested code and lets the `csv` way and the `pandas` way be compared side by side on the same file. It can be shared with, and compared against, the solutions of other participants.
|
||||
|
||||
## Objectives
|
||||
|
||||
| # | Objective |
|
||||
| --- | --- |
|
||||
| 1 | Provide the weather data of the lecture: `weather_data.csv` with the columns `day`, `temp` and `condition` for Monday to Sunday, kept in the repository |
|
||||
| 2 | Deliver the `csv` part of the lecture: read the file with the built-in `csv` library into a list of rows and extract the temperatures as whole numbers, leaving out the header row |
|
||||
| 3 | Deliver the `pandas` reading of the lecture: read the file with `pandas.read_csv`, and show that the result is a `DataFrame` and that a column of it is a `Series` |
|
||||
| 4 | Deliver the conversions of the lecture: `DataFrame.to_dict()` and `Series.to_list()` |
|
||||
| 5 | Deliver the computations of the lecture: the average temperature by sum and length and by `Series.mean()`, and the maximum temperature by `Series.max()` |
|
||||
| 6 | Deliver the row selection of the lecture: the row of a given day (Monday), the row of the hottest day, and the temperature of a day converted to Fahrenheit (`temp * 9 / 5 + 32`) |
|
||||
| 7 | Deliver the creation and export of the lecture: build a `DataFrame` from a dictionary (`students` and `scores`) and write it to a CSV file with `DataFrame.to_csv` |
|
||||
| 8 | Keep the code simple to read and the names of the lectures (`data`, `temperatures`, `temp_list`, `data_dict`, `average_temp`, `monday`, `to_dict`, `to_list`, `mean`, `max`, `to_csv`), constants in `constants.py` |
|
||||
| 9 | Provide a reproducible environment: Python 3.13 or newer, a local `.venv`, a `pyproject.toml`; the `csv` part runs with zero runtime dependencies and `pandas` is an optional extra |
|
||||
| 10 | Prove the behaviour with pytest tests that use temporary files and never overwrite a file of the user |
|
||||
| 11 | Document the project: Doxygen comments in the source with a `Doxyfile`, and a README with set-up instructions for Windows PowerShell, Linux Debian and macOS |
|
||||
| 12 | Keep every step traceable: one branch and one pull request per milestone, each pull request closing the issues it completes |
|
||||
| 13 | Publish the repository with a description and topics, and a wiki in English, Danish and Bahasa Melayu |
|
||||
| 14 | Show the result in a real screenshot of the program running in a terminal, kept in the repository and shown in the README and on the wiki |
|
||||
|
||||
## Scope
|
||||
|
||||
### In Scope
|
||||
|
||||
- The two day-25 lectures on reading CSV data and on `DataFrame` and `Series`, as listed in the objectives.
|
||||
- The data file `weather_data.csv` that S01 downloaded for the lecture, adopted unchanged.
|
||||
- Constants in `constants.py`; source in `src/`, tests in `tests/`, documents in `docs/`.
|
||||
- `pyproject.toml`, Python `.gitignore`, `Doxyfile`, `README.md` following the Product Owner's template, a continuous integration (CI) workflow.
|
||||
- Repository description and topics on the git host.
|
||||
- A wiki in English, Danish and Bahasa Melayu, in the form of the wiki of `TirSystem/github-action`.
|
||||
- A screenshot of the program running in a terminal, kept in `docs/images/` and shown in the README and on the three wiki pages.
|
||||
|
||||
### Out of Scope
|
||||
|
||||
- The later pandas lessons the lecturer announces (NumPy, Matplotlib, plots, aggregation beyond the lectures).
|
||||
- Reading from the internet, a database or a spreadsheet; creating the Google Sheets document of the lecture.
|
||||
- A graphical user interface.
|
||||
- Packaging for or publishing to the Python Package Index (PyPI).
|
||||
- A tool in the repository that takes the screenshot: the screenshot is taken once with a one-off script outside the repository.
|
||||
- Using or testing the tokens in `.env`; the file is for personal use only and is never imported by the project.
|
||||
|
||||
## Expected Benefits
|
||||
|
||||
### Tangible Benefits
|
||||
|
||||
- A finished day-25 solution that runs with one command after the README steps, and whose `csv` part needs nothing to install.
|
||||
- A test suite that runs in continuous integration and never touches a file of the user.
|
||||
- Generated source documentation.
|
||||
- A repository page with description, topics, README, a three-language wiki and a screenshot.
|
||||
|
||||
### Intangible Benefits
|
||||
|
||||
- Practice with the `csv` library and the basic `pandas` structures, which is the aim of the lectures.
|
||||
- A pattern for the following days of the course.
|
||||
- Confidence from a step-by-step, reviewed delivery.
|
||||
|
||||
## Strategic Alignment
|
||||
|
||||
The project supports the participant's goal of finishing the bootcamp with repositories that other people can read, run and learn from, and it exercises the framework's rule that planning, review and code stay in step.
|
||||
|
||||
## Success Criteria
|
||||
|
||||
| # | Criterion | Target | Measure |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The data file is the lecture's | `weather_data.csv` has the header `day,temp,condition` and 7 data rows, Monday to Sunday | Test of the file; review |
|
||||
| 2 | The `csv` reader is correct | Temperatures read as `[12, 14, 15, 14, 21, 22, 24]`, all `int`, header skipped | Matching tests |
|
||||
| 3 | The `pandas` reader is correct | `read_csv` returns a `DataFrame` with 7 rows; its `temp` column is a `Series`; `to_list` gives the same temperatures as the `csv` reader | Matching tests |
|
||||
| 4 | The computations are correct | Average is 17.428... (the manual and the `mean` way agree), maximum is 24 | Matching tests |
|
||||
| 5 | The row selection is correct | The Monday row has `Sunny` and 12; the hottest day is Sunday; Monday in Fahrenheit is 53.6 | Matching tests |
|
||||
| 6 | Create and export work | A `DataFrame` made from the `students`/`scores` dictionary is written to a CSV file and reads back equal | Matching tests with `tmp_path` |
|
||||
| 7 | Tests are green | 100% of tests pass; 0 tests write outside a temporary directory | `pytest` exit code 0 locally and in CI |
|
||||
| 8 | The set-up steps work | A fresh clone reaches a green `pytest` by following the README alone, on Windows PowerShell (by S01) and on Linux (by CI) | One run per operating system, recorded in the pull request |
|
||||
| 9 | Source documentation builds | `doxygen Doxyfile` ends with 0 warnings | Doxygen output |
|
||||
| 10 | The `csv` part needs no dependency | `[project].dependencies` is empty and the `csv` reader imports without `pandas` installed | `pyproject.toml`; a test of the import |
|
||||
| 11 | Steps are traceable | 5 of 5 milestones merged by pull request, each description with one `Closes #N` line per completed issue | Pull request list and issue states |
|
||||
| 12 | The repository page is complete | Non-empty description, at least 5 topics, and the wiki pages `Home`, `Home.da` and `Home.ms` | Git host |
|
||||
| 13 | The result is shown in a real screenshot | `docs/images/weather-run.png` is a capture of a terminal that runs the program; the README and the three wiki pages show it, and its address on `main` answers HTTP 200 with an image | The file, the README and the wiki, checked against the Go/No-Go list of [MIL-005] |
|
||||
|
||||
## Risks
|
||||
|
||||
| Risk | Impact | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| `pandas` is a heavy dependency and has to support Python 3.13 | Installation fails or is slow | `pandas` is an optional extra, the `csv` part runs without it; the pin is a lower bound only and is checked in CI |
|
||||
| Debian 12 ships Python 3.11, below the required 3.13 | Linux set-up fails | README states Debian 13 or newer, or a separately installed Python 3.13 |
|
||||
| The data file path depends on the working directory | The program finds no file when started elsewhere | The default path is resolved against the package folder, not the working directory; the path is a parameter |
|
||||
| A test overwrites a file of the user | The user loses data | The export takes a path; tests pass a temporary path (pytest `tmp_path`) |
|
||||
| Author and reviewer are the same person (S01) | A defect can pass review unnoticed | Review against the QC checklists, record each review as an `RC-*`, and let the pull request be the second look |
|
||||
| The lectures are available only as the summaries in the request | The code differs from the video | S01 compares the finished program with the video at the [MIL-003] and [MIL-004] Go/No-Go |
|
||||
| Tokens in `.env` leak into the repository | Credentials exposed | `.env` is in `.gitignore`, is never imported, and is not part of any task |
|
||||
| The wiki publish workflow needs a secret of the organization that may be missing | The wiki stays empty | The pages are files in `wiki/` of the pull request; a missing secret is reported, not worked around |
|
||||
| The screenshot is a capture of a real terminal window, which needs a display | It cannot be repeated in CI | It is taken once on S01's machine with a one-off script outside the repository and committed as a file |
|
||||
|
||||
## Assumptions
|
||||
|
||||
- Python 3.13 or newer is available on the machines that run the program.
|
||||
- S01 is the only person who reviews and accepts artifacts.
|
||||
- The git host is the Tirsvad Gitea instance, and its issues and milestones are used for tracking.
|
||||
- The two lecture summaries in the request are the specification of day 25; the video is the tie-breaker when a detail is missing.
|
||||
- `weather_data.csv` from S01's download folder holds the data of the lecture and is adopted unchanged.
|
||||
- The wiki of the repository is enabled and has no page yet.
|
||||
|
||||
## Constraints
|
||||
|
||||
- Python 3.13 or newer, in a virtual environment (`venv`).
|
||||
- pytest for tests; `constants.py` for constants; `pyproject.toml` for project configuration; a Python `.gitignore`; Doxygen comments in the source and a `Doxyfile`.
|
||||
- Folder structure `src/`, `tests/`, `docs/`.
|
||||
- No runtime dependencies unless needed; `pandas` is needed only for the second half of the lectures and is therefore an extra.
|
||||
- Plan window from 2026-10-14 to 2026-10-23 (proposed, see [PP-001]).
|
||||
- S01 switched on autonomous mode in chat on 2026-10-13: S01's acceptance of the plan is the request to commit, push, open and merge the pull requests; the assistant's reviews are then not independent (see `AGENTS.md`, Modes).
|
||||
- The plan gate holds: no file under `src/` or `tests/` before an accepted, reviewed milestone that lists the task.
|
||||
|
||||
## Cost–Benefit Assessment
|
||||
|
||||
The assessment is qualitative on purpose: this is an unpaid learning project with one participant, so money does not measure either side.
|
||||
|
||||
| Costs | Benefits |
|
||||
| --- | --- |
|
||||
| About eight days of S01's spare time, most of it review of the planning documents | A finished and shareable repository (objectives 1 to 14) |
|
||||
| `pandas`, Doxygen and pytest as tools | A comparison of the `csv` and the `pandas` way, source documentation and automatic checks |
|
||||
|
||||
## Stakeholders
|
||||
|
||||
| Stakeholder ID (SA) | Interest in this project |
|
||||
| --- | --- |
|
||||
| S01 | Wants a correct, tested and documented solution of the assignment: objectives 1 to 14 |
|
||||
| S02 | Needs readable, runnable code with the lectures' names and README instructions (objectives 2 to 9 and 11) |
|
||||
| S03 | Needs a clear repository page and as little as possible to install (objectives 9, 11, 13 and 14) |
|
||||
|
||||
## Recommendation
|
||||
|
||||
Proceed — the work is small (two lectures, a handful of functions, tests, documentation and publishing), the cost is about eight days of the Product Owner's spare time, and the result is a reusable, documented repository.
|
||||
|
||||
---
|
||||
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
[DICT-001]: ./dictionary.md
|
||||
[PP-001]: ./project-plan.md
|
||||
[MIL-003]: ./milestones/mil-003-pandas-analysis.md
|
||||
[MIL-004]: ./milestones/mil-004-create-and-export.md
|
||||
[MIL-005]: ./milestones/mil-005-screenshot-wiki-and-finish.md
|
||||
@@ -0,0 +1,56 @@
|
||||
# Domain Dictionary: Weather Data (Day 25)
|
||||
|
||||
## 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 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version, reviewed in RC-003 (Go) | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose and Scope
|
||||
|
||||
Maps each Product Owner (PO) term to its professional information technology (IT) term. PO language: `en` (domain `it`), from the registry's `Languages` section. The PO terms are the words of the day-25 lectures as the planning documents use them; the IT terms are the names in the code. The dictionary exists so that the planning documents use one word for one thing and so that S02 can find the lectures' names in the code.
|
||||
|
||||
## Dictionary
|
||||
|
||||
| PO term | Language | IT term | Definition | Used as PO term in | Used as IT term in |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| CSV file | en | `weather_data.csv` | The text file with one line per day and the values `day`, `temp` and `condition` separated by commas. | BC, SA, PP, MIL | PY |
|
||||
| header row | en | first row of the file | The first line of the CSV file, which names the columns and is not data. | BC, PP, MIL | PY |
|
||||
| row | en | `row` | The values of one day. | BC, SA, PP, MIL | PY |
|
||||
| column | en | `Series` | The values of one name, for example `temp`, from every row. | BC, SA, PP, MIL | PY |
|
||||
| table | en | `DataFrame` | The whole data of the file, as rows and columns, like a sheet in a spreadsheet. | BC, SA, PP, MIL | PY |
|
||||
| temperature | en | `temp` | The temperature of a day in degrees Celsius, a whole number. | BC, SA, PP, MIL | PY |
|
||||
| condition | en | `condition` | The weather of a day as a word, for example `Sunny`. | BC, SA, PP, MIL | PY |
|
||||
| read with csv | en | `csv.reader` | Getting the rows of the CSV file into the program with Python's built-in `csv` library. | BC, SA, PP, MIL | PY |
|
||||
| read with pandas | en | `pandas.read_csv` | Getting the table of the CSV file into the program with one call of the `pandas` library. | BC, SA, PP, MIL | PY |
|
||||
| dictionary | en | `DataFrame.to_dict()` | Names mapped to values; the table is turned into one, and a table can also be made from one. | BC, PP, MIL | PY |
|
||||
| list | en | `Series.to_list()` | The values of a column in order. | BC, PP, MIL | PY |
|
||||
| average | en | `average_temp` | The sum of the temperatures divided by their number. | BC, SA, PP, MIL | PY |
|
||||
| mean | en | `Series.mean()` | The average that `pandas` computes for a column, used to check the average that is computed by hand. | BC, PP, MIL | PY |
|
||||
| maximum | en | `Series.max()` | The largest temperature of the column. | BC, PP, MIL | PY |
|
||||
| select | en | `data[data.day == "Monday"]` | Getting the rows for which a condition holds. | BC, PP, MIL | PY |
|
||||
| Fahrenheit | en | `temp * 9 / 5 + 32` | The temperature converted from Celsius to the Fahrenheit scale. | BC, PP, MIL | PY |
|
||||
| export | en | `DataFrame.to_csv` | Writing a table to a CSV file. | BC, SA, PP, MIL | PY |
|
||||
| screenshot | en | `docs/images/weather-run.png` | The picture of the program running in a terminal that the README and the wiki show. | BC, SA, PP, MIL | none |
|
||||
|
||||
## Rules
|
||||
|
||||
- The Business Case, Stakeholder Analysis, Project Plan and milestones use the PO term; the source code and its tests use the IT term.
|
||||
- One IT term per PO term and one PO term per IT term; no synonyms.
|
||||
- The planning documents use British spelling; identifiers follow the lectures and the libraries.
|
||||
- A code identifier written in backticks in a planning document is an IT term and is allowed there.
|
||||
- "Step" is not a PO term of the program. In the planning documents it means a step of the project (a task, a milestone).
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ./business-case.md
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
@@ -0,0 +1,90 @@
|
||||
# MIL-001: Project foundation
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-001 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version, reviewed in RC-004 (Go) | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This gate decides whether the repository has the files that carry no program logic yet: configuration, ignore rules, constants, README, source documentation settings, the continuous integration workflow, and the repository description and topics. The work is delivered on the branch `mil-001-project-foundation` and one pull request.
|
||||
|
||||
## Deliverable
|
||||
|
||||
`pyproject.toml`, the Python `.gitignore`, the package `src/weather/` with `__init__.py` and `constants.py`, `tests/test_constants.py`, `README.md` following the Product Owner's template, `Doxyfile`, and `.gitea/workflows/ci.yml`. The repository description and topics on the git host are set.
|
||||
|
||||
Proposed repository description and topics, for S01 to confirm by accepting the plan:
|
||||
|
||||
- Description: "Reading CSV weather data in Python with the csv library and pandas, day 25 of Udemy's 100 Days of Code bootcamp: DataFrame and Series, average, maximum, row selection, create and export. pytest tests, Doxygen docs, no runtime dependencies for the csv part."
|
||||
- Topics: `100-days-of-code`, `csv`, `data-analysis`, `doxygen`, `education`, `pandas`, `pytest`, `python`, `python-bootcamp`, `udemy`.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | In a fresh clone, `python -m venv .venv`, `python -m pip install --upgrade pip` and `python -m pip install -e ".[dev]"` succeed in Windows PowerShell | All three commands exit 0 | Any command fails |
|
||||
| 2 | `pytest` runs | Exit code 0, at least one test of `constants.py` | Failing test, or no test of `constants.py` |
|
||||
| 3 | `pyproject.toml` states the Python version and the dependencies | `requires-python = ">=3.13"`, `dependencies = []`, an extra `pandas`, a `dev` extra with pytest, ruff, mypy and pandas, and a repository URL that names this repository | Any of the four is missing or different |
|
||||
| 4 | The `.gitignore` protects local files | `git check-ignore .venv .env __pycache__ build` lists all four | One of them is not ignored |
|
||||
| 5 | `constants.py` holds the file names and the Fahrenheit factors with Doxygen comments | Every value is an `UPPER_SNAKE` constant with a Doxygen comment | A value is missing or has no Doxygen comment |
|
||||
| 6 | `doxygen Doxyfile` builds the source documentation | Ends with 0 warnings and writes HTML for `src/` | Any warning, or no output |
|
||||
| 7 | The README follows the Product Owner's template | Every section title of the template in the given order (Requirements, Set up with Windows powershell, Linux debian and MacOS, Run, Run the tests, Continuous integration, Build the source documentation, Project layout, License), with commands for the three systems | A heading is missing or out of order, or a section has no commands |
|
||||
| 8 | The CI workflow exists | `.gitea/workflows/ci.yml` installs `.[dev]` and runs `pytest`, `ruff` and `mypy` on Python 3.13, and nothing under `.github/workflows` exists | No workflow, or it does not run the tests, or a file exists under `.github/workflows` |
|
||||
| 9 | The repository page is complete | Description is non-empty and there are at least 5 topics on the git host | Description empty or fewer than 5 topics |
|
||||
| 10 | The code is reviewed | `RC-*` against `QC-PY-001` has the verdict `Go` | Verdict `No-Go` or `Go-with-conditions` |
|
||||
| 11 | No secret is in the change | `.env` is not tracked and no token appears in any changed file | A token is found in the diff |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| [PP-001] accepted | The plan schedules this gateway; the plan-first gate needs it before any code |
|
||||
| This milestone accepted with a `Go` review | The plan-first gate allows no file under `src/` or `tests/` before that |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objective 9: reproducible environment, `csv` part without dependencies | [BC-001], criteria 8 and 10 in Success Criteria |
|
||||
| Objective 10: tests with temporary files | [BC-001], criterion 7 in Success Criteria |
|
||||
| Objective 11: Doxygen and README | [BC-001], criteria 8 and 9 in Success Criteria |
|
||||
| Objective 13: repository page | [BC-001], criterion 12 in Success Criteria |
|
||||
| Objective 12: traceable steps | [BC-001], criterion 11 in Success Criteria |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-15 — first of five gateways, inside the plan of [PP-001] that ends 2026-10-23.
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Add pyproject.toml for the Day 25 weather repository | Create `pyproject.toml` for the project `weather`: `requires-python = ">=3.13"`, an empty `dependencies` list, an optional extra `pandas`, a `dev` extra with pytest, ruff, mypy and pandas, the `src` layout for the package `weather`, the pytest settings, and a description and repository URL that name this repository and day 25. Serves objective 9. | No | |
|
||||
| 2 | Add the Python .gitignore for the Day 25 weather repository | Add the Python `.gitignore`: bytecode, `.venv/`, build and packaging output, pytest, ruff, mypy and Doxygen caches. It also ignores `.env`, so the personal tokens can never be committed. | No | |
|
||||
| 3 | Add constants.py and its test | Create `src/weather/__init__.py`, `src/weather/constants.py` and `tests/test_constants.py`. Every value (the data file name, the column names, the Fahrenheit factors, the export file name) is an `UPPER_SNAKE` constant with a Doxygen comment. Serves objective 8. | No | |
|
||||
| 4 | Add the README for the Day 25 weather repository | Write `README.md` in the Product Owner's template. Document creating a local `.venv`, `python -m pip install --upgrade pip` and `python -m pip install -e ".[dev]"`, with Windows PowerShell, Linux Debian (Debian 13 or newer) and macOS. The Run section is finished in MIL-005. Serves S02 and S03. | No | |
|
||||
| 5 | Add the Doxyfile for the Day 25 weather repository | Add a `Doxyfile` that reads `src/`, writes to `build/doxygen`, extracts documentation for Python and treats warnings as failures; the project brief names day 25. | No | |
|
||||
| 6 | Add the continuous integration workflow | Add `.gitea/workflows/ci.yml`: check out, set up Python 3.13, upgrade `pip`, install `.[dev]`, run `pytest`, `ruff` and `mypy`. The file stays in `.gitea/workflows`, not `.github/workflows`. | No | |
|
||||
| 7 | Set the repository description and topics | Set the description and at least 5 topics of this repository on the git host with the Gitea application programming interface (API), using `GITEA_TOKEN` from the personal `.env` file; the file is only read by the command, never imported, tested or tracked. Use the proposed text of the Deliverable section. Serves S03 and objective 13. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[PP-001]: ../project-plan.md
|
||||
@@ -0,0 +1,76 @@
|
||||
# MIL-002: Read with the csv library
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-002 |
|
||||
| CrossReference | [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, reviewed in RC-005 (Go) | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This gate decides whether the first half of the first lecture is delivered: the weather data file is in the repository and its rows and temperatures are read with Python's built-in `csv` library, without any dependency. The work is delivered on the branch `mil-002-read-with-csv` and one pull request.
|
||||
|
||||
## Deliverable
|
||||
|
||||
`src/weather/weather_data.csv` (the lecture's file, adopted unchanged), `src/weather/csv_reader.py` with `read_rows` and `read_temperatures`, and `tests/test_csv_reader.py`.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The data file is the lecture's | Header `day,temp,condition` and 7 data rows, Monday to Sunday, identical to the file S01 downloaded | A different header, row count or content |
|
||||
| 2 | `read_rows` returns the rows as lists of strings | The first element is `["day", "temp", "condition"]`; 8 rows in all | Rows are not lists of strings or the header is lost |
|
||||
| 3 | `read_temperatures` returns whole numbers without the header | `[12, 14, 15, 14, 21, 22, 24]`, every element an `int` | A string in the list, the header word, or a wrong value |
|
||||
| 4 | The default path does not depend on the working directory | Running from another folder finds the file; a `path` argument overrides the default | The call fails when started elsewhere |
|
||||
| 5 | The file is closed and opened with `with` | Review of `src/` finds no `open` outside `with` | A file left open |
|
||||
| 6 | The module needs no dependency | `import weather.csv_reader` works with `pandas` not installed | An import of `pandas` in the module |
|
||||
| 7 | Tests are green and use no file outside `tmp_path` | `pytest` exit code 0 | A failing test, or a write outside a temporary folder |
|
||||
| 8 | The code is reviewed | `RC-*` against `QC-PY-001` has the verdict `Go` | Verdict `No-Go` or `Go-with-conditions` |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| [MIL-001] accepted and merged | The package, `constants.py` and the test set-up come from it |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objective 1: the data file | [BC-001], criterion 1 in Success Criteria |
|
||||
| Objective 2: reading with `csv` | [BC-001], criteria 2 and 10 in Success Criteria |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-17 — second of five gateways, inside the plan of [PP-001] that ends 2026-10-23.
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Add the weather data file | Copy `weather_data.csv` from S01's download folder to `src/weather/weather_data.csv` unchanged (header `day,temp,condition`, 7 rows). Add its name to `constants.py`. Serves objective 1. | No | |
|
||||
| 2 | Read the weather rows with the csv library | Add `read_rows(path)` in `src/weather/csv_reader.py`: open the file with `with`, read it with `csv.reader` and return the rows as a list of lists of strings, header included, as the lecture does. The default path is the data file next to the module. Serves objective 2. | No | |
|
||||
| 3 | Extract the temperatures as integers | Add `read_temperatures(path)`: skip the header row, take the second value of each row and convert it with `int`, as the lecture does, returning the list `temperatures`. Serves objective 2. | No | |
|
||||
| 4 | Add the tests for the csv reader | Add `tests/test_csv_reader.py`: the real file gives `[12, 14, 15, 14, 21, 22, 24]`, a small file in `tmp_path` gives its own values, the header is skipped, and importing the module needs no `pandas`. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[PP-001]: ../project-plan.md
|
||||
[MIL-001]: ./mil-001-project-foundation.md
|
||||
@@ -0,0 +1,83 @@
|
||||
# MIL-003: Read and analyse with pandas
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-003 |
|
||||
| CrossReference | [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, reviewed in RC-006 (Go) | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This gate decides whether the pandas half of both lectures is delivered: the data file is read in one line, the `DataFrame` and `Series` are used, converted to a dictionary and a list, and the average and maximum temperature and the row selections are computed. The work is delivered on the branch `mil-003-pandas-analysis` and one pull request.
|
||||
|
||||
## Deliverable
|
||||
|
||||
`src/weather/analysis.py` with `read_data`, `to_data_dict`, `to_temp_list`, `average_temp`, `average_temp_mean`, `max_temp`, `row_for_day`, `hottest_row` and `day_in_fahrenheit`, the `pandas` extra in `pyproject.toml` used as designed, and `tests/test_analysis.py`.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `read_data` returns a `DataFrame` | `isinstance(data, pandas.DataFrame)`, 7 rows, columns `day`, `temp`, `condition`; the body is one `pandas.read_csv` call | Another type, or a different row or column count |
|
||||
| 2 | A column is a `Series` | `isinstance(data["temp"], pandas.Series)` | Another type |
|
||||
| 3 | The conversions work | `to_data_dict(data)` has the keys `day`, `temp`, `condition`; `to_temp_list(data)` is `[12, 14, 15, 14, 21, 22, 24]` | A wrong key or value |
|
||||
| 4 | The average is right two ways | `average_temp` (sum and length) and `average_temp_mean` (`Series.mean()`) both give 17.428571... | The two ways differ, or a wrong value |
|
||||
| 5 | The maximum is right | `max_temp(data)` is 24 | A different value |
|
||||
| 6 | Row selection is right | `row_for_day(data, "Monday")` is one row with `condition` `Sunny` and `temp` 12; `hottest_row(data)` is the row of Sunday | A wrong row or an empty result |
|
||||
| 7 | Fahrenheit is right | `day_in_fahrenheit(data, "Monday")` is 53.6 | A different value |
|
||||
| 8 | The `csv` part still needs no dependency | `dependencies = []` and `import weather.csv_reader` works without `pandas` | A dependency added, or `csv_reader` imports `pandas` |
|
||||
| 9 | The `csv` and `pandas` readers agree | `to_temp_list(read_data())` equals `read_temperatures()` | The lists differ |
|
||||
| 10 | Tests are green | `pytest` exit code 0 | A failing test |
|
||||
| 11 | The code is reviewed | `RC-*` against `QC-PY-001` has the verdict `Go` | Verdict `No-Go` or `Go-with-conditions` |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| [MIL-002] accepted and merged | The data file and the `csv` reader are the reference for the agreement test |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objective 3: reading with `pandas` | [BC-001], criterion 3 in Success Criteria |
|
||||
| Objective 4: conversions | [BC-001], criterion 3 in Success Criteria |
|
||||
| Objective 5: average and maximum | [BC-001], criterion 4 in Success Criteria |
|
||||
| Objective 6: row selection and Fahrenheit | [BC-001], criterion 5 in Success Criteria |
|
||||
| Objective 9: `pandas` is an extra | [BC-001], criterion 10 in Success Criteria |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-19 — third of five gateways, inside the plan of [PP-001] that ends 2026-10-23.
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Read the weather data with pandas | Add `read_data(path)` in `src/weather/analysis.py`: one `pandas.read_csv` call returning the `DataFrame` `data`; the default path is the data file. `pandas` is imported only in this module. Serves objective 3. | No | |
|
||||
| 2 | Convert the data to a dictionary and a list | Add `to_data_dict(data)` (`DataFrame.to_dict()`) and `to_temp_list(data)` (`data["temp"].to_list()`), as the lecture does. Serves objective 4. | No | |
|
||||
| 3 | Compute the average and maximum temperature | Add `average_temp(data)` that returns the sum of `temp_list` divided by its length, and `average_temp_mean(data)` that uses `Series.mean()`, so the two ways of the lecture can be compared; add `max_temp(data)` with `Series.max()`. Serves objective 5. | No | |
|
||||
| 4 | Select rows by a condition | Add `row_for_day(data, day)` (`data[data.day == day]`), `hottest_row(data)` (`data[data.temp == data.temp.max()]`) and `day_in_fahrenheit(data, day)` (`temp * 9 / 5 + 32`, factors from `constants.py`). Serves objective 6. | No | |
|
||||
| 5 | Add the tests for the pandas analysis | Add `tests/test_analysis.py` for the criteria of this gateway, including that the two readers agree. The test module is skipped with `pytest.importorskip` when `pandas` is missing. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[PP-001]: ../project-plan.md
|
||||
[MIL-002]: ./mil-002-read-with-csv.md
|
||||
@@ -0,0 +1,75 @@
|
||||
# MIL-004: Create and export a DataFrame
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-004 |
|
||||
| CrossReference | [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, reviewed in RC-007 (Go) | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This gate decides whether the end of the second lecture is delivered: a `DataFrame` is created from a dictionary and exported to a CSV file, and the whole lecture can be run with one command that prints each result. The work is delivered on the branch `mil-004-create-and-export` and one pull request.
|
||||
|
||||
## Deliverable
|
||||
|
||||
`src/weather/export.py` with `create_scores_frame` and `export_frame`, `src/weather/__main__.py` so that `python -m weather` prints the results of both lectures, and `tests/test_export.py` and `tests/test_main.py`.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A `DataFrame` is created from a dictionary | `create_scores_frame()` has the columns `students` and `scores` and the lecture's values | Another shape or values |
|
||||
| 2 | The frame is exported to CSV | `export_frame(frame, path)` writes the file; reading it back gives an equal frame | The file is missing or the content differs |
|
||||
| 3 | Export never writes where it is not told to | The default file name is `new_data.csv` from `constants.py`, written to the path given; tests use only `tmp_path` | A test writes in the working directory |
|
||||
| 4 | `python -m weather` prints the lecture's results | Output lists the rows, the temperatures, the average, the maximum, the Monday row, the hottest row and Monday in Fahrenheit; exit code 0 | A result is missing or the exit code is not 0 |
|
||||
| 5 | The program does not write a file by itself | Running `python -m weather` in an empty folder leaves it empty, unless the flag `--export` with a path is given | A file appears without the flag |
|
||||
| 6 | Tests are green | `pytest` exit code 0 | A failing test |
|
||||
| 7 | The code is reviewed | `RC-*` against `QC-PY-001` has the verdict `Go` | Verdict `No-Go` or `Go-with-conditions` |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| [MIL-003] accepted and merged | The program prints what the analysis module computes |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objective 7: create and export | [BC-001], criterion 6 in Success Criteria |
|
||||
| Objective 10: tests with temporary files | [BC-001], criterion 7 in Success Criteria |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-21 — fourth of five gateways, inside the plan of [PP-001] that ends 2026-10-23.
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Create a DataFrame from a dictionary | Add `create_scores_frame()` in `src/weather/export.py`: a dictionary `data_dict` with `students` and `scores` is turned into a `DataFrame` with `pandas.DataFrame`, as the lecture does. The values are constants. Serves objective 7. | No | |
|
||||
| 2 | Export a DataFrame to a CSV file | Add `export_frame(frame, path)` that calls `DataFrame.to_csv(path)`; the default name `new_data.csv` is a constant. Serves objective 7. | No | |
|
||||
| 3 | Add the main flow | Add `src/weather/__main__.py`: print the results of both lectures in the order of the lectures; export only when `--export <path>` is given. Serves objectives 2 to 7. | No | |
|
||||
| 4 | Add the tests for create, export and the main flow | Add `tests/test_export.py` (round trip through `tmp_path`) and `tests/test_main.py` (output of `main` captured with `capsys`, nothing written without the flag). | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[PP-001]: ../project-plan.md
|
||||
[MIL-003]: ./mil-003-pandas-analysis.md
|
||||
@@ -0,0 +1,79 @@
|
||||
# MIL-005: Screenshot, wiki and finish
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-005 |
|
||||
| CrossReference | [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, reviewed in RC-008 (Go) | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This gate decides whether the repository is finished for S02 and S03: a real screenshot of the program running, shown in the README and on a wiki in English, Danish and Bahasa Melayu, and the README checked against the finished program. The work is delivered on the branch `mil-005-screenshot-wiki-and-finish` and one pull request.
|
||||
|
||||
## Deliverable
|
||||
|
||||
`docs/images/weather-run.png`, the README Run section with the screenshot, and the wiki pages `wiki/Home.md`, `wiki/Home.da.md`, `wiki/Home.ms.md` and `wiki/_Sidebar.md`, in the form of the wiki of `TirSystem/github-action`.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The screenshot is real | `docs/images/weather-run.png` is a capture of a terminal window in which `python -m weather` has run, and shows the average and the maximum temperature | A drawn or edited picture, or one that does not show the output |
|
||||
| 2 | The README shows it | The Run section contains the image with alternative text | The image is missing or its path is broken |
|
||||
| 3 | The wiki exists in three languages | `Home.md` (English), `Home.da.md` (Danish) and `Home.ms.md` (Bahasa Melayu) exist, each with description, functions, how to run it and the screenshot, and `_Sidebar.md` links all three | A page or a language is missing |
|
||||
| 4 | The wiki refers to the screenshot on `main` | The address of the image on `main` answers HTTP 200 with an image content type | Any other status |
|
||||
| 5 | The README steps work from a fresh clone | The commands of Set up, Run and Run the tests for Windows PowerShell end with a green `pytest` and the printed results | A command fails |
|
||||
| 6 | Doxygen still builds | `doxygen Doxyfile` ends with 0 warnings | Any warning |
|
||||
| 7 | The repository page is still complete | Non-empty description and at least 5 topics on the git host | Description empty or fewer than 5 topics |
|
||||
| 8 | Every milestone is merged and its issues are closed | MIL-001 to MIL-004 pull requests merged; every issue of them closed | An open issue of an earlier milestone |
|
||||
| 9 | The code and documents are reviewed | `RC-*` records have the verdict `Go` | Verdict `No-Go` or `Go-with-conditions` |
|
||||
| 10 | No secret is in the change | `.env` is not tracked and no token appears in any changed file | A token is found in the diff |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| [MIL-004] accepted and merged | The screenshot shows the finished program |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objective 11: README with set-up instructions | [BC-001], criterion 8 in Success Criteria |
|
||||
| Objective 13: repository page and wiki | [BC-001], criterion 12 in Success Criteria |
|
||||
| Objective 14: screenshot | [BC-001], criterion 13 in Success Criteria |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-23 — last of five gateways, the end of the plan of [PP-001].
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Take the screenshot of the program running | Run `python -m weather` in a terminal window and capture that window once, with a one-off script outside the repository, into `docs/images/weather-run.png`. Say in the pull request how it was taken. Serves objective 14. | No | |
|
||||
| 2 | Show the screenshot in the README | Add the image to the Run section of `README.md` and finish the Run section against the finished program (all commands, with the `--export` flag). Serves S02 and S03. | No | |
|
||||
| 3 | Write the wiki in English, Danish and Bahasa Melayu | Write `wiki/Home.md`, `wiki/Home.da.md`, `wiki/Home.ms.md` and `wiki/_Sidebar.md` in the form of the wiki of `TirSystem/github-action`, each page with the description, the functions of the lectures, how to run it and the screenshot by its address on `main`. Serves objective 13. | No | |
|
||||
| 4 | Verify the finished repository end to end | In a fresh clone follow the README on Windows PowerShell: set-up, run, tests, Doxygen. Check the repository description and topics and that every earlier pull request is merged. Record the result in the pull request. Serves S01. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[PP-001]: ../project-plan.md
|
||||
[MIL-004]: ./mil-004-create-and-export.md
|
||||
@@ -0,0 +1,122 @@
|
||||
# Project Plan: Weather Data (Day 25)
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | PP-001 |
|
||||
| CrossReference | [BC-001], [SA-001], [DICT-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version; accepted by S01 (Product Owner) in chat on 2026-10-13 | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This plan schedules the five milestones that deliver the Weather Data (Day 25) repository of [BC-001]. The milestones set up the repository, read the weather file with the `csv` library, read and analyse it with `pandas`, create and export a `DataFrame` with a main flow that prints the results, and finish the repository with a screenshot, a wiki in three languages and an end-to-end check. Each milestone is one gateway document, one branch and one pull request, so that every step is kept track of and reviewed before the next one starts.
|
||||
|
||||
## Planning Assumptions
|
||||
|
||||
- The phase starts 2026-10-14 and ends by 2026-10-23. All dates are proposed and need the Product Owner's confirmation (see Open Issues).
|
||||
- Phase length: two days per milestone, sized for the spare time of S01, who owns every phase ([SA-001]).
|
||||
- One branch per milestone, named after it (`mil-001-project-foundation` and so on), and one pull request that closes the issues of that milestone with one `Closes #N` line each. The planning documents themselves are delivered on the branch `plan-baseline`.
|
||||
- S01 switched on autonomous mode in chat on 2026-10-13 (see `AGENTS.md`, Modes): S01's acceptance of this plan is the request, and the commit, the push, the pull request and its merge follow without further asking. The reviews are done by the assistant as stand-in for S01 and are not independent; each record says `Mode: autonomous, not independent`.
|
||||
- The plan gate is enabled for commits in this clone: a commit that changes `src/` or `tests/` needs a `Task: MIL-NNN#N` trailer for an accepted, reviewed milestone.
|
||||
- The tokens in `.env` are used only by commands that the assistant runs (repository description and topics, sync of issues); the project never imports, tests or tracks the file.
|
||||
- The lecture summaries in the request (reading CSV data, then `DataFrame` and `Series`) are the specification; the two lectures are planned together because the second continues the first.
|
||||
|
||||
## Gateway Schedule
|
||||
|
||||
| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| Project foundation | [MIL-001] | 2026-10-14 to 2026-10-15 | 2026-10-15 | S01 | None (see Open Issues) | `pyproject.toml`, `.gitignore`, `constants.py`, README, `Doxyfile`, CI workflow, repository description and topics | |
|
||||
| Read with the csv library | [MIL-002] | 2026-10-16 to 2026-10-17 | 2026-10-17 | S01 | None (see Open Issues) | `weather_data.csv`, `read_rows` and `read_temperatures`, with tests | |
|
||||
| Read and analyse with pandas | [MIL-003] | 2026-10-18 to 2026-10-19 | 2026-10-19 | S01 | None (see Open Issues) | `read_data`, conversions, average, maximum, row selection, Fahrenheit, with tests | |
|
||||
| Create and export a DataFrame | [MIL-004] | 2026-10-20 to 2026-10-21 | 2026-10-21 | S01 | None (see Open Issues) | `create_scores_frame`, `export_frame`, `python -m weather`, with tests | |
|
||||
| Screenshot, wiki and finish | [MIL-005] | 2026-10-22 to 2026-10-23 | 2026-10-23 | S01 | None (see Open Issues) | Screenshot in README and wiki; wiki in English, Danish and Bahasa Melayu; end-to-end verification | |
|
||||
|
||||
```plantuml
|
||||
@startgantt
|
||||
Project starts 2026-10-14
|
||||
[MIL-001 Project foundation] starts 2026-10-14 and ends 2026-10-15
|
||||
[MIL-002 Read with the csv library] starts 2026-10-16 and ends 2026-10-17
|
||||
[MIL-003 Read and analyse with pandas] starts 2026-10-18 and ends 2026-10-19
|
||||
[MIL-004 Create and export a DataFrame] starts 2026-10-20 and ends 2026-10-21
|
||||
[MIL-005 Screenshot, wiki and finish] starts 2026-10-22 and ends 2026-10-23
|
||||
[MIL-001 Go/No-Go] happens 2026-10-15
|
||||
[MIL-002 Go/No-Go] happens 2026-10-17
|
||||
[MIL-003 Go/No-Go] happens 2026-10-19
|
||||
[MIL-004 Go/No-Go] happens 2026-10-21
|
||||
[MIL-005 Go/No-Go] happens 2026-10-23
|
||||
@endgantt
|
||||
```
|
||||
|
||||
## Scope Coverage
|
||||
|
||||
| Business Case scope item | Gateway |
|
||||
| --- | --- |
|
||||
| Constants in `constants.py`; `src/`, `tests/`, `docs/` layout | [MIL-001], extended in [MIL-002] to [MIL-004] |
|
||||
| `pyproject.toml`, Python `.gitignore`, `Doxyfile`, README, continuous integration workflow | [MIL-001], README finished in [MIL-005] |
|
||||
| Repository description and topics | [MIL-001] (task 7), checked again in [MIL-005] |
|
||||
| The data file `weather_data.csv` | [MIL-002] |
|
||||
| Lecture "Reading CSV data": reading with the `csv` library, temperatures as integers | [MIL-002] |
|
||||
| Lecture "Reading CSV data": reading with `pandas` in one line | [MIL-003] |
|
||||
| Lecture "DataFrame and Series": types, `to_dict`, `to_list`, average, maximum, row selection, Fahrenheit | [MIL-003] |
|
||||
| Lecture "DataFrame and Series": creating a `DataFrame` from a dictionary and exporting it with `to_csv` | [MIL-004] |
|
||||
| A main flow that prints the results | [MIL-004] |
|
||||
| Screenshot in the README and on the wiki | [MIL-005] |
|
||||
| Wiki in English, Danish and Bahasa Melayu | [MIL-005] |
|
||||
|
||||
## Dependencies
|
||||
|
||||
```
|
||||
MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005
|
||||
```
|
||||
|
||||
A No-Go on a gateway returns it to S01 for rework and moves every later date by the same number of days; no buffer day is planned.
|
||||
|
||||
## Plan Risks
|
||||
|
||||
| Risk | Impact | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| The planning documents take longer to review than the work left on the code | The first gateway slips | Review [BC-001], [SA-001] and this plan together in one sitting; keep the milestones small |
|
||||
| Author and reviewer are the same person (S01) | A review can miss a defect | Use the QC checklists and the pull request as the second look; recorded in [BC-001] |
|
||||
| The git host has no Actions runner | The CI workflow is never executed | Run the same commands locally before each pull request |
|
||||
| Lecture details are only available as the summaries in the request | The code differs from the video | S01 compares the finished program with the video at the [MIL-003] and [MIL-004] Go/No-Go |
|
||||
| The sync matches issues by title, so a title used twice overwrites an issue | A task disappears from the board | Every task title is unique across all milestones; check before each `--apply` |
|
||||
| `pandas` does not install on Python 3.13 on a platform | The `pandas` milestones cannot be tested there | `pandas` is an extra, the `csv` part stays testable; reported, not worked around |
|
||||
| The screenshot is a capture of a real terminal window, which needs a display | It cannot be repeated in CI | Taken once on S01's machine with a one-off script outside the repository and committed as a file |
|
||||
| The wiki publish workflow needs a secret of the organization | The wiki stays empty | Reported to S01, never worked around; the pages are files in `wiki/` and are not lost |
|
||||
|
||||
## Open Issues
|
||||
|
||||
- **Dates:** the start date, milestone lengths and the end date 2026-10-23 are proposed and not given by the Product Owner; confirm or replace them.
|
||||
- **Product Owner (PO) language:** English, recorded as `en` in `docs/artifact-registry.md` (the request and the other repositories of the course are in English); confirm.
|
||||
- **Stakeholder levels:** the Power and Interest levels of S02 and S03 in [SA-001] are proposals.
|
||||
- **Repository:** the request names the organization page `https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code` (underscores). The repository of `origin` is `Tirsvad-Udemy-100-days-of-code/025-weather`, already created and empty; the description and topics are set there.
|
||||
- **Working folder:** the session started in `024-snake` (a finished project); the work is done in the `025-weather` clone, which S01 selected in chat.
|
||||
- **`pandas` and "no runtime dependencies":** the lectures need `pandas`. The plan keeps `[project].dependencies` empty and makes `pandas` an optional extra (also in `dev`), so S03 gets a `csv` part with nothing to install. The alternative is `pandas` as a normal dependency. Confirm.
|
||||
- **Place of the data file:** `weather_data.csv` is kept next to the code in `src/weather/`, so the default path works from any folder and the layout stays `src/`, `tests/`, `docs/`. Confirm, or ask for a `data/` folder.
|
||||
- **Names:** the lectures use script variables, not functions. The functions of the plan (`read_rows`, `read_temperatures`, `read_data`, `to_data_dict`, `to_temp_list`, `average_temp`, `average_temp_mean`, `max_temp`, `row_for_day`, `hottest_row`, `day_in_fahrenheit`, `create_scores_frame`, `export_frame`) are proposals that wrap the lectures' expressions; the lectures' variable names are used inside them. Confirm.
|
||||
- **"Python greater than 3.13":** read as Python 3.13 or newer (`requires-python = ">=3.13"`). Confirm.
|
||||
- **README template:** the Product Owner's README template is used. It differs from `framework/templates/README-template.md`, so `framework/scripts/check-readme.sh` stays off.
|
||||
- **Screenshot:** the program is a command-line program, so the screenshot is of a terminal window running `python -m weather`, not of a graphical window. Confirm.
|
||||
- **No user story or use case:** the tasks are written as build and check steps, so they are plain technical tasks.
|
||||
- **Governance and traceability matrix:** `GOV` and `TM` do not exist in this project; the plan proceeds without them and records each review as an `RC-*`.
|
||||
- **Diagram check:** the Gantt chart above was not rendered because no PlantUML server is configured (`PLANTUML_URL`); render it before the review.
|
||||
- **Sync:** `sync-project.sh --apply` is run with `GITEA_TOKEN` from the personal `.env` after the plan is accepted; the sync matches issues by title.
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ./business-case.md
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
[DICT-001]: ./dictionary.md
|
||||
[MIL-001]: ./milestones/mil-001-project-foundation.md
|
||||
[MIL-002]: ./milestones/mil-002-read-with-csv.md
|
||||
[MIL-003]: ./milestones/mil-003-pandas-analysis.md
|
||||
[MIL-004]: ./milestones/mil-004-create-and-export.md
|
||||
[MIL-005]: ./milestones/mil-005-screenshot-wiki-and-finish.md
|
||||
@@ -0,0 +1,68 @@
|
||||
# RC-001: Review of BC-001
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-001 |
|
||||
| CrossReference | [BC-001], [QC-BC-001], [QC-LANG-001], [DICT-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Proposed | 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, for the language and domain, [QC-LANG-001]
|
||||
- Scope: full review
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: none (the reviewer reads English and knows the IT domain)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also drafted the document)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | The Cost-Benefit section states that the assessment is qualitative on purpose (unpaid learning project, one participant), which is the explicit justification. |
|
||||
| 2 | Risks are identified with documented impact and mitigation | Pass | The Risks table has 9 risks, each with an impact and a mitigation. |
|
||||
| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | 13 success criteria, each with a target and a measure (values such as `[12, 14, 15, 14, 21, 22, 24]`, 17.428..., 24, 53.6; exit codes; 0 warnings). |
|
||||
| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | `### In Scope` and `### Out of Scope` are separate sections. |
|
||||
| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | The Stakeholders table cites S01, S02 and S03 of [SA-001] and describes only their interest in the project. |
|
||||
| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | The Methodological and Standards Foundation names the SQA/QC framework, ISO/IEC 25010:2023, PEP 8, 257 and 484, and the dictionary. |
|
||||
| 7 | Assumptions and constraints are explicit and clearly distinguished from one another | Pass | Assumptions and Constraints are separate sections. |
|
||||
| 8 | Document supports executive decision-making with a clear, unambiguous recommendation | Pass | The Recommendation reads `Proceed` with a one-sentence rationale. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry's domain list. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells of BC-001 are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The register is the one the registry gives for the type; code names appear in backticks only where a check needs them. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms are those of [DICT-001] (CSV file, row, column, table, temperature, average, select, export); no synonym row exists. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | `docs/` holds one file per artifact; there is no `<name>.<language>.md`. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version of the document: there is no earlier accepted version. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The assistant, as stand-in for S01, reads English and knows the IT domain and checked the terms against [DICT-001]. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (CSV, SQA, QC, PEP, CI, API, PyPI, FURPS+, RACI, ISO/IEC) are spelled out or defined on first use, or are standard names. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all Mandatory criteria pass or are not applicable. The rows above were assessed on 2026-10-13 by the assistant that drafted the document, as stand-in for S01 in autonomous mode (chosen by S01 in chat on 2026-10-13). Mode: autonomous, not independent. This review is **not independent**: the drafter and the reviewer are the same assistant, and author and approver (S01) are one person in a single-participant project. S01 accepted the plan in chat on 2026-10-13; the verdict can be challenged in the run summary or on the pull request.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-15 |
|
||||
|
||||
---
|
||||
|
||||
[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
|
||||
[DICT-001]: ../../dictionary.md
|
||||
@@ -0,0 +1,68 @@
|
||||
# RC-002: Review of SA-001
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-002 |
|
||||
| CrossReference | [SA-001], [QC-SA-001], [QC-LANG-001], [DICT-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [SA-001]
|
||||
- Checklist used: [QC-SA-001] and, for the language and domain, [QC-LANG-001]
|
||||
- Scope: full review
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: none (the reviewer reads English and knows the IT domain)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also drafted the document)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Power/Interest grid is filled for every stakeholder, with no gaps or unclassified entries | Pass | S01, S02 and S03 each have a Power level, an Interest level and a quadrant. |
|
||||
| 2 | Each stakeholder is assigned a unique, stable ID (e.g. S01-S11 style) reusable for RACI assignments in other artifacts | Pass | IDs S01 to S03 are unique and are the IDs used in [BC-001], [PP-001] and the milestones. |
|
||||
| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | The summary table gives role, organization and the levels, with a rationale for each quadrant. |
|
||||
| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | The Communication Requirements table maps channel, frequency and deliverable to [MIL-001] and [MIL-005]. |
|
||||
| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | The conflict table has 3 conflicts (plain code against structure; nothing to install against `pandas`; author is reviewer), each with a mitigation. |
|
||||
| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | The Business Goal Alignment table traces every concern to a numbered objective of [BC-001]. |
|
||||
| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | Primary concerns are in business language and mapped to FURPS+ attributes. |
|
||||
| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | The rationale section explains each classification in plain language, per stakeholder. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry's domain list. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells of SA-001 are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The register is the one the registry gives for the type; code names appear in backticks only where a check needs them. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms are those of [DICT-001] (CSV file, row, column, table, temperature, average, select, export); no synonym row exists. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | `docs/` holds one file per artifact; there is no `<name>.<language>.md`. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version of the document: there is no earlier accepted version. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The assistant, as stand-in for S01, reads English and knows the IT domain and checked the terms against [DICT-001]. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (CSV, SQA, QC, PEP, CI, API, PyPI, FURPS+, RACI, ISO/IEC) are spelled out or defined on first use, or are standard names. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all Mandatory criteria pass or are not applicable. The rows above were assessed on 2026-10-13 by the assistant that drafted the document, as stand-in for S01 in autonomous mode (chosen by S01 in chat on 2026-10-13). Mode: autonomous, not independent. This review is **not independent**: the drafter and the reviewer are the same assistant, and author and approver (S01) are one person in a single-participant project. S01 accepted the plan in chat on 2026-10-13; the verdict can be challenged in the run summary or on the pull request.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-15 |
|
||||
|
||||
---
|
||||
|
||||
[SA-001]: ../../stakeholder-analysis.md
|
||||
[QC-SA-001]: ../../../framework/qc/artifacts/qc-stakeholder-analysis.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
@@ -0,0 +1,67 @@
|
||||
# RC-003: Review of DICT-001
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-003 |
|
||||
| CrossReference | [DICT-001], [QC-DICT-001], [QC-LANG-001], [DICT-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Proposed | 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, for the language and domain, [QC-LANG-001]
|
||||
- Scope: full review
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: none (the reviewer reads English and knows the IT domain)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also drafted the document)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Every row has a PO term, its language, an IT term and a definition | Pass | All 18 rows have a PO term, `en`, an IT term and a definition. |
|
||||
| 2 | Each PO term maps to exactly one IT term and the reverse (no synonyms) | Pass | Each PO term has one IT term and the reverse; the library's two ways to read, and the hand-made average and `mean`, are separate PO terms (`read with csv`, `read with pandas`, `average`, `mean`). |
|
||||
| 3 | Every Domain Model concept has a row, and the Domain Model uses its PO term | N-A | No Domain Model exists in this project. |
|
||||
| 4 | The Operation Contracts, Sequence Diagrams, Design Class Diagrams and ERD use the IT term, not the PO term | N-A | No Operation Contract, Sequence Diagram, Design Class Diagram or ERD exists in this project. |
|
||||
| 5 | Definitions are written in the PO language and are one sentence | Pass | Every definition is one sentence in English. |
|
||||
| 6 | "Used as PO term in" and "Used as IT term in" name artifact types that exist in the project | Pass | BC, SA, PP and MIL exist; PY is the source code that the milestones add. |
|
||||
| 7 | The dictionary's `Language` and `Domain` rows, and the language of every row, match the PO language and domain in the project registry | Pass | `Language` is `en` and `Domain` is `it`, as the registry states; every row is `en`. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry's domain list. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells of DICT-001 are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The register is the one the registry gives for the type; code names appear in backticks only where a check needs them. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms are those of [DICT-001] (CSV file, row, column, table, temperature, average, select, export); no synonym row exists. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | `docs/` holds one file per artifact; there is no `<name>.<language>.md`. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version of the document: there is no earlier accepted version. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The assistant, as stand-in for S01, reads English and knows the IT domain and checked the terms against [DICT-001]. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (CSV, SQA, QC, PEP, CI, API, PyPI, FURPS+, RACI, ISO/IEC) are spelled out or defined on first use, or are standard names. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all Mandatory criteria pass or are not applicable. The rows above were assessed on 2026-10-13 by the assistant that drafted the document, as stand-in for S01 in autonomous mode (chosen by S01 in chat on 2026-10-13). Mode: autonomous, not independent. This review is **not independent**: the drafter and the reviewer are the same assistant, and author and approver (S01) are one person in a single-participant project. S01 accepted the plan in chat on 2026-10-13; the verdict can be challenged in the run summary or on the pull request.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-15 |
|
||||
|
||||
---
|
||||
|
||||
[DICT-001]: ../../dictionary.md
|
||||
[QC-DICT-001]: ../../../framework/qc/artifacts/qc-dictionary.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
@@ -0,0 +1,66 @@
|
||||
# RC-004: Review of MIL-001
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-004 |
|
||||
| CrossReference | [MIL-001], [QC-MIL-001], [QC-LANG-001], [DICT-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Proposed | 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, for the language and domain, [QC-LANG-001]
|
||||
- Scope: full review
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: none (the reviewer reads English and knows the IT domain)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also drafted the document)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section names the files and results evaluated; the tasks are rows in `## Tasks`. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | The Go / No-Go table has observable Go and No-Go cells (values, exit codes, warnings, HTTP status). |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | The Dependencies table names the milestone or plan that must be accepted and merged first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | The Traceability table cites the objectives and Success Criteria numbers of [BC-001]. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership table: Owner S01, Approving reviewer S01 (a stakeholder ID of [SA-001]). |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date 2026-10-15 is inside the plan window of [PP-001] (ends 2026-10-23) and the Business Case constraint. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry's domain list. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells of MIL-001 are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The register is the one the registry gives for the type; code names appear in backticks only where a check needs them. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms are those of [DICT-001] (CSV file, row, column, table, temperature, average, select, export); no synonym row exists. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | `docs/` holds one file per artifact; there is no `<name>.<language>.md`. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version of the document: there is no earlier accepted version. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The assistant, as stand-in for S01, reads English and knows the IT domain and checked the terms against [DICT-001]. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (CSV, SQA, QC, PEP, CI, API, PyPI, FURPS+, RACI, ISO/IEC) are spelled out or defined on first use, or are standard names. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all Mandatory criteria pass or are not applicable. The rows above were assessed on 2026-10-13 by the assistant that drafted the document, as stand-in for S01 in autonomous mode (chosen by S01 in chat on 2026-10-13). Mode: autonomous, not independent. This review is **not independent**: the drafter and the reviewer are the same assistant, and author and approver (S01) are one person in a single-participant project. S01 accepted the plan in chat on 2026-10-13; the verdict can be challenged in the run summary or on the pull request.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-15 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-001]: ../../milestones/mil-001-project-foundation.md
|
||||
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
@@ -0,0 +1,66 @@
|
||||
# RC-005: Review of MIL-002
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-005 |
|
||||
| CrossReference | [MIL-002], [QC-MIL-001], [QC-LANG-001], [DICT-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Proposed | 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, for the language and domain, [QC-LANG-001]
|
||||
- Scope: full review
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: none (the reviewer reads English and knows the IT domain)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also drafted the document)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section names the files and results evaluated; the tasks are rows in `## Tasks`. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | The Go / No-Go table has observable Go and No-Go cells (values, exit codes, warnings, HTTP status). |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | The Dependencies table names the milestone or plan that must be accepted and merged first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | The Traceability table cites the objectives and Success Criteria numbers of [BC-001]. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership table: Owner S01, Approving reviewer S01 (a stakeholder ID of [SA-001]). |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date 2026-10-17 is inside the plan window of [PP-001] (ends 2026-10-23) and the Business Case constraint. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry's domain list. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells of MIL-002 are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The register is the one the registry gives for the type; code names appear in backticks only where a check needs them. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms are those of [DICT-001] (CSV file, row, column, table, temperature, average, select, export); no synonym row exists. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | `docs/` holds one file per artifact; there is no `<name>.<language>.md`. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version of the document: there is no earlier accepted version. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The assistant, as stand-in for S01, reads English and knows the IT domain and checked the terms against [DICT-001]. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (CSV, SQA, QC, PEP, CI, API, PyPI, FURPS+, RACI, ISO/IEC) are spelled out or defined on first use, or are standard names. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all Mandatory criteria pass or are not applicable. The rows above were assessed on 2026-10-13 by the assistant that drafted the document, as stand-in for S01 in autonomous mode (chosen by S01 in chat on 2026-10-13). Mode: autonomous, not independent. This review is **not independent**: the drafter and the reviewer are the same assistant, and author and approver (S01) are one person in a single-participant project. S01 accepted the plan in chat on 2026-10-13; the verdict can be challenged in the run summary or on the pull request.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-15 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-002]: ../../milestones/mil-002-read-with-csv.md
|
||||
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
@@ -0,0 +1,66 @@
|
||||
# RC-006: Review of MIL-003
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-006 |
|
||||
| CrossReference | [MIL-003], [QC-MIL-001], [QC-LANG-001], [DICT-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Proposed | 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, for the language and domain, [QC-LANG-001]
|
||||
- Scope: full review
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: none (the reviewer reads English and knows the IT domain)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also drafted the document)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section names the files and results evaluated; the tasks are rows in `## Tasks`. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | The Go / No-Go table has observable Go and No-Go cells (values, exit codes, warnings, HTTP status). |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | The Dependencies table names the milestone or plan that must be accepted and merged first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | The Traceability table cites the objectives and Success Criteria numbers of [BC-001]. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership table: Owner S01, Approving reviewer S01 (a stakeholder ID of [SA-001]). |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date 2026-10-19 is inside the plan window of [PP-001] (ends 2026-10-23) and the Business Case constraint. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry's domain list. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells of MIL-003 are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The register is the one the registry gives for the type; code names appear in backticks only where a check needs them. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms are those of [DICT-001] (CSV file, row, column, table, temperature, average, select, export); no synonym row exists. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | `docs/` holds one file per artifact; there is no `<name>.<language>.md`. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version of the document: there is no earlier accepted version. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The assistant, as stand-in for S01, reads English and knows the IT domain and checked the terms against [DICT-001]. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (CSV, SQA, QC, PEP, CI, API, PyPI, FURPS+, RACI, ISO/IEC) are spelled out or defined on first use, or are standard names. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all Mandatory criteria pass or are not applicable. The rows above were assessed on 2026-10-13 by the assistant that drafted the document, as stand-in for S01 in autonomous mode (chosen by S01 in chat on 2026-10-13). Mode: autonomous, not independent. This review is **not independent**: the drafter and the reviewer are the same assistant, and author and approver (S01) are one person in a single-participant project. S01 accepted the plan in chat on 2026-10-13; the verdict can be challenged in the run summary or on the pull request.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-15 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-003]: ../../milestones/mil-003-pandas-analysis.md
|
||||
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
@@ -0,0 +1,66 @@
|
||||
# RC-007: Review of MIL-004
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-007 |
|
||||
| CrossReference | [MIL-004], [QC-MIL-001], [QC-LANG-001], [DICT-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Proposed | 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, for the language and domain, [QC-LANG-001]
|
||||
- Scope: full review
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: none (the reviewer reads English and knows the IT domain)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also drafted the document)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section names the files and results evaluated; the tasks are rows in `## Tasks`. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | The Go / No-Go table has observable Go and No-Go cells (values, exit codes, warnings, HTTP status). |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | The Dependencies table names the milestone or plan that must be accepted and merged first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | The Traceability table cites the objectives and Success Criteria numbers of [BC-001]. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership table: Owner S01, Approving reviewer S01 (a stakeholder ID of [SA-001]). |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date 2026-10-21 is inside the plan window of [PP-001] (ends 2026-10-23) and the Business Case constraint. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry's domain list. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells of MIL-004 are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The register is the one the registry gives for the type; code names appear in backticks only where a check needs them. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms are those of [DICT-001] (CSV file, row, column, table, temperature, average, select, export); no synonym row exists. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | `docs/` holds one file per artifact; there is no `<name>.<language>.md`. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version of the document: there is no earlier accepted version. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The assistant, as stand-in for S01, reads English and knows the IT domain and checked the terms against [DICT-001]. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (CSV, SQA, QC, PEP, CI, API, PyPI, FURPS+, RACI, ISO/IEC) are spelled out or defined on first use, or are standard names. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all Mandatory criteria pass or are not applicable. The rows above were assessed on 2026-10-13 by the assistant that drafted the document, as stand-in for S01 in autonomous mode (chosen by S01 in chat on 2026-10-13). Mode: autonomous, not independent. This review is **not independent**: the drafter and the reviewer are the same assistant, and author and approver (S01) are one person in a single-participant project. S01 accepted the plan in chat on 2026-10-13; the verdict can be challenged in the run summary or on the pull request.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-15 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-004]: ../../milestones/mil-004-create-and-export.md
|
||||
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
@@ -0,0 +1,66 @@
|
||||
# RC-008: Review of MIL-005
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-008 |
|
||||
| CrossReference | [MIL-005], [QC-MIL-001], [QC-LANG-001], [DICT-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-13 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-005]
|
||||
- Checklist used: [QC-MIL-001] and, for the language and domain, [QC-LANG-001]
|
||||
- Scope: full review
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: none (the reviewer reads English and knows the IT domain)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; the assistant also drafted the document)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | The Deliverable section names the files and results evaluated; the tasks are rows in `## Tasks`. |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | The Go / No-Go table has observable Go and No-Go cells (values, exit codes, warnings, HTTP status). |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | The Dependencies table names the milestone or plan that must be accepted and merged first. |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | The Traceability table cites the objectives and Success Criteria numbers of [BC-001]. |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership table: Owner S01, Approving reviewer S01 (a stakeholder ID of [SA-001]). |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date 2026-10-23 is inside the plan window of [PP-001] (ends 2026-10-23) and the Business Case constraint. |
|
||||
|
||||
## Language and Domain Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
|
||||
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry's domain list. |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells of MIL-005 are English. |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | The register is the one the registry gives for the type; code names appear in backticks only where a check needs them. |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms are those of [DICT-001] (CSV file, row, column, table, temperature, average, select, export); no synonym row exists. |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | `docs/` holds one file per artifact; there is no `<name>.<language>.md`. |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version of the document: there is no earlier accepted version. |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The assistant, as stand-in for S01, reads English and knows the IT domain and checked the terms against [DICT-001]. |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (CSV, SQA, QC, PEP, CI, API, PyPI, FURPS+, RACI, ISO/IEC) are spelled out or defined on first use, or are standard names. |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go — all Mandatory criteria pass or are not applicable. The rows above were assessed on 2026-10-13 by the assistant that drafted the document, as stand-in for S01 in autonomous mode (chosen by S01 in chat on 2026-10-13). Mode: autonomous, not independent. This review is **not independent**: the drafter and the reviewer are the same assistant, and author and approver (S01) are one person in a single-participant project. S01 accepted the plan in chat on 2026-10-13; the verdict can be challenged in the run summary or on the pull request.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Challenge this `Go` in the run summary or on the pull request if the stand-in decision is not wanted | S01 | 2026-10-15 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-005]: ../../milestones/mil-005-screenshot-wiki-and-finish.md
|
||||
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
[DICT-001]: ../../dictionary.md
|
||||
@@ -0,0 +1,98 @@
|
||||
# Stakeholder Analysis: Weather Data (Day 25)
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | SA-001 |
|
||||
| CrossReference | [BC-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, reviewed in RC-002 (Go) | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This analysis names the people and groups who have a stake in the Weather Data (Day 25) project, a solution to the day-25 assignment of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*, and classifies each one on a power/interest grid so the project knows how closely to involve them. The stakeholder IDs (`S01` to `S03`) are the IDs every other artifact uses for owners, reviewers and RACI (Responsible, Accountable, Consulted, Informed) assignments. The terms follow the Domain Dictionary [DICT-001]. The method is the power/interest grid: the quadrant decides how often and with what deliverable a stakeholder is addressed.
|
||||
|
||||
The Product Owner stated S01, S02 and S03, the Power and Interest levels of S01, the quadrant of S01, and the deliverables of S02 and S03. The Power and Interest levels of S02 and S03 were not stated; they are proposed here and are open for confirmation by the reviewer.
|
||||
|
||||
## Stakeholder Summary Table
|
||||
|
||||
| ID | Name | Role/Title | Organization | Power Level | Interest Level | Quadrant | Primary Concern (Business Language) |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| S01 | Jens Tirsvad Nielsen | Course participant; Product Owner, developer and reviewer | Tirsvad (personal learning project) | HIGH | HIGH | Manage Closely | A correct, tested and documented solution of the assignment that is worth keeping and showing |
|
||||
| S02 | Udemy coursists | Fellow course participants who share code and compare solutions | Udemy course community (external) | LOW | HIGH | Keep Informed | Readable, runnable code that uses the lectures' names, with README instructions to run it |
|
||||
| S03 | GitHub viewers | Visitors who browse the repository for ideas | Public (external) | LOW | LOW | Monitor | A clear repository description, topics and README, and no runtime dependencies to install |
|
||||
|
||||
## Power/Interest Classification Rationale
|
||||
|
||||
- **Manage Closely (S01):** S01 decides scope, writes and checks the code, and reviews every artifact, so power and interest are both high. S01 is author and reviewer of the same documents; no independent reviewer exists in this project (see the conflict table).
|
||||
- **Keep Informed (S02):** S02 cannot change the scope or accept a deliverable, so power is low. They compare solutions with their own, so interest in the code's readability and in the way to run it is high. They need the code and the README, not a say in the plan.
|
||||
- **Monitor (S03):** S03 arrive by chance, do not take part and cannot influence the project, so power and interest are low. Their first impression is the repository page, which is why description, topics, README, wiki and screenshot are checked once.
|
||||
|
||||
## Primary Concerns and FURPS+ Mapping
|
||||
|
||||
FURPS+ stands for Functionality, Usability, Reliability, Performance, Supportability and the added constraints (design, implementation, interface, physical).
|
||||
|
||||
| ID | Concern | FURPS+ attribute |
|
||||
| --- | --- | --- |
|
||||
| S01 | The program behaves as the day-25 lectures describe: reading with `csv` and with `pandas`, conversion, average, maximum, row selection, creation and export | Functionality |
|
||||
| S01 | Behaviour is proven by tests that use temporary files and never touch a file of the user | Reliability |
|
||||
| S01 | Every step is a branch and a pull request, reviewed before the next | Supportability |
|
||||
| S02 | The code is readable and keeps the lectures' names (`data`, `temperatures`, `temp_list`, `data_dict`, `average_temp`, `monday`) | Usability |
|
||||
| S02 | The README tells how to create the `.venv`, run the program and run the tests on their operating system | Usability |
|
||||
| S03 | The repository page says what the project is, with description, topics, README and a wiki in English, Danish and Bahasa Melayu | Usability |
|
||||
| S03 | The README and the wiki show what the program prints, in a real screenshot | Usability |
|
||||
| S03 | Nothing must be installed to run the `csv` part apart from Python itself | Implementation (constraint) |
|
||||
|
||||
## Communication Requirements
|
||||
|
||||
| ID | Channel | Frequency | Deliverable | Phase / Milestone |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| S01 | Pull request review in the git host | Once per milestone | Pull request with `Closes #N` lines and the review record | Every milestone ([PP-001]) |
|
||||
| S02 | README in the repository | Once, updated when the program changes | Set-up, run and test instructions per operating system | [MIL-001], completed in [MIL-005] |
|
||||
| S03 | Repository description, topics and README | Once, updated when the program changes | Description, topics and README overview | [MIL-001], checked in [MIL-005] |
|
||||
| S03 | Wiki of the repository | Once | Pages `Home`, `Home.da` and `Home.ms` with a short description, the functions and how to run it | [MIL-005] |
|
||||
| S03 | README and wiki | Once | The screenshot of the program running | [MIL-005] |
|
||||
|
||||
## Conflicting Interests and Mitigations
|
||||
|
||||
| Conflict | Stakeholders | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| S02 wants plain code in the style of the lecture; S01 wants constants, tests, Doxygen comments and packaging, which add structure | S01, S02 | Keep the lectures' identifiers and flow; put the extra structure in separate places (`constants.py`, a path parameter) so the functions stay readable |
|
||||
| S03 wants nothing to install; the second half of the lectures cannot run without `pandas` | S01, S03 | `[project].dependencies` stays empty; `pandas` is the optional extra `pandas` (and part of `dev`), and the `csv` part imports without it |
|
||||
| S01 is author and reviewer, so a review is not independent | S01 | Use the QC checklists as the objective measure, record every review as an `RC-*` (marked `Mode: autonomous, not independent`), and treat the pull request as the second look; recorded as a plan risk in [PP-001] |
|
||||
|
||||
## Traceability Analysis
|
||||
|
||||
### Business Goal Alignment
|
||||
|
||||
| Stakeholder | Concern | Business Case objective |
|
||||
| --- | --- | --- |
|
||||
| S01 | Program behaves as the day-25 lectures describe | [BC-001] objectives 1 to 7 |
|
||||
| S01 | Tests use temporary files only | [BC-001] objective 10 |
|
||||
| S01 | Every step is a branch and a pull request | [BC-001] objective 12 |
|
||||
| S02 | Readable code with the lectures' names | [BC-001] objective 8 |
|
||||
| S02 | README with run and test instructions | [BC-001] objectives 9 and 11 |
|
||||
| S03 | Description, topics, README and wiki on the repository page | [BC-001] objective 13 |
|
||||
| S03 | A real screenshot in the README and on the wiki | [BC-001] objective 14 |
|
||||
| S03 | Nothing to install for the `csv` part | [BC-001] objective 9 |
|
||||
|
||||
## Sign-Off
|
||||
|
||||
| Stakeholder | Decision | Date |
|
||||
| --- | --- | --- |
|
||||
| S01 | Go in RC-002 (not independent; S01 can overrule) | 2026-10-13 |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ./business-case.md
|
||||
[DICT-001]: ./dictionary.md
|
||||
[PP-001]: ./project-plan.md
|
||||
[MIL-001]: ./milestones/mil-001-project-foundation.md
|
||||
[MIL-005]: ./milestones/mil-005-screenshot-wiki-and-finish.md
|
||||
Submodule
+1
Submodule framework added at 6baeadd3c1
Reference in New Issue
Block a user