Add planning baseline: BC, SA, PP and MIL-001 to MIL-003
Draft and accept the Business Case, Stakeholder Analysis (S01-S03) and Project Plan for the Day 15 coffee machine assignment. Add three milestones with 17 tasks, synced to the git host as Milestones 40-42 and Issues #1-#17. Register PP and MIL in the artifact registry and set the PO language to en. No issue closed: planning only, no code changed.
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# MIL-001 Project Setup
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-001 |
|
||||
| CrossReference | [BC-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-05 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Decide whether the project skeleton and tooling are ready for feature work.
|
||||
|
||||
## Deliverable
|
||||
|
||||
Repository skeleton: `src/`, `tests/`, `docs/`, `pyproject.toml`, `.gitignore`, `Doxyfile`, README with venv instructions.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `pip install -e .[dev]` succeeds in a fresh `.venv` on Python 3.13+ | Succeeds | Fails |
|
||||
| 2 | `python -m pytest` runs without configuration errors | Runs | Errors |
|
||||
| 3 | README documents `.venv` creation and `python -m pip install --upgrade pip` | Present | Missing |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| None | First phase |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objective 4 (documented setup) | [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-07 — within the short course-assignment timeline in [BC-001].
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Create pyproject.toml | Declare the package with `requires-python >=3.13`, an empty runtime dependency list, a `dev` extra with pytest, and pytest config (`testpaths`, `pythonpath = ["src"]`). | No | Objective 4 |
|
||||
| 2 | Verify Python .gitignore | Confirm the existing `.gitignore` ignores `.venv/`, `.env`, `__pycache__/`, `.pytest_cache/` and Doxygen output (`docs/doxygen/`); add what is missing. | No | Objective 4 |
|
||||
| 3 | Add Doxyfile | Create a Doxyfile that scans `src/`, writes HTML to `docs/doxygen/`, and is configured for Python (`OPTIMIZE_OUTPUT_JAVA`, `EXTRACT_ALL`). Source comments use Doxygen style. | No | Objective 4 |
|
||||
| 4 | Create src and tests skeleton | Create `src/coffee_machine/` with `__init__.py`, `constants.py` and `main.py` stubs, and `tests/` with a smoke test, following the `coding-conventions` skill. | No | Objective 1 |
|
||||
| 5 | Write README with setup instructions | Write README.md: project description, how to create and use a local `.venv`, `python -m pip install --upgrade pip`, install, run, test and Doxygen. The README template from the request was not supplied; ask for it before writing. | No | Objective 4 |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
@@ -0,0 +1,71 @@
|
||||
# MIL-002 Coffee Machine Core
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-002 |
|
||||
| CrossReference | [BC-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-05 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Decide whether the machine behaves as the assignment specification requires.
|
||||
|
||||
## Deliverable
|
||||
|
||||
Working console program in `src/coffee_machine/` implementing report, off, drink selection, resource check, coin processing, change and profit.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Typing `report` prints water, milk, coffee and money | Matches spec format | Differs |
|
||||
| 2 | A drink is refused when a resource is insufficient, naming the resource | Refused with message | Served or no message |
|
||||
| 3 | Insufficient coins refund everything with the spec's refund message | Refunded | Drink served |
|
||||
| 4 | Excess coins return correct change and add only the price to profit | Correct | Wrong amount |
|
||||
| 5 | Typing `off` ends the program | Exits | Keeps running |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| MIL-001 | Skeleton and tooling must exist |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objectives 1, 2 | [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-10 — within the short course-assignment timeline in [BC-001].
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Define constants | Put `MENU`, `COIN_VALUES` and `INITIAL_RESOURCES` in `constants.py`, from the assignment's starting data. | No | Objective 1 |
|
||||
| 2 | Implement report | Print water (ml), milk (ml), coffee (g) and money ($) in the assignment's format. | No | Objective 1 |
|
||||
| 3 | Implement is_resource_sufficient | Check an order against current resources; print the not-enough-resource message and return False when short. Keep the assignment's function name. | No | Objective 2 |
|
||||
| 4 | Implement process_coins | Ask for quarters, dimes, nickels and pennies and return the total, using integer cents internally to avoid float errors. | No | Objective 1 |
|
||||
| 5 | Implement is_transaction_successful | Compare payment with cost; refund if short, otherwise return change rounded to 2 decimals and add the cost to profit. | No | Objective 1 |
|
||||
| 6 | Implement make_coffee | Deduct the drink's ingredients from resources and print the enjoy message. | No | Objective 1 |
|
||||
| 7 | Implement main loop | Prompt for espresso/latte/cappuccino, handle `report`, `off` and invalid input, and wire the functions together. | No | Objective 1 |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
@@ -0,0 +1,68 @@
|
||||
# MIL-003 Quality and Publication
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-003 |
|
||||
| CrossReference | [BC-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-10-05 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Decide whether the project is tested, documented and ready to share.
|
||||
|
||||
## Deliverable
|
||||
|
||||
pytest suite, Doxygen output, finished README, and repository description and topics on the git host.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `python -m pytest` passes with all tests green | All pass | Any failure |
|
||||
| 2 | `doxygen Doxyfile` runs without warnings on `src/` | No warnings | Warnings |
|
||||
| 3 | Repository has a description and at least 3 topics | Set | Missing |
|
||||
| 4 | `pyproject.toml` lists no runtime dependencies and `.env` is not imported or tested | Confirmed | Violated |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| MIL-002 | Behaviour must exist before it is tested and published |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objectives 3, 4, 5 | [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-10-12 — within the short course-assignment timeline in [BC-001].
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Write tests for resources and report | pytest tests for `report` output and `is_resource_sufficient` with sufficient and insufficient resources. | No | Objective 3 |
|
||||
| 2 | Write tests for coins and transactions | pytest tests for `process_coins` (mocked input), refund, exact payment, change and profit updates. | No | Objective 3 |
|
||||
| 3 | Write tests for make_coffee and main loop | pytest tests for resource deduction and for `off`, `report` and invalid input handling through mocked `input`. | No | Objective 3 |
|
||||
| 4 | Generate and check Doxygen output | Run `doxygen Doxyfile`; fix undocumented or malformed comments. | No | Objective 4 |
|
||||
| 5 | Set repository description and topics | Use the git host API with the token in `.env` (personal use only, never imported by the project) to set the description and topics, after the user confirms the exact text. | No | Objective 5 |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
Reference in New Issue
Block a user