Files

75 lines
3.6 KiB
Markdown

# Milestone 2: Project scaffold
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-002 |
| CrossReference | [BC-001], [MIL-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [01e016e] |
---
## Purpose
Decide that the repository can be installed, tested and documented by a participant who has never seen it.
## Deliverable
A project skeleton with `pyproject.toml`, `.gitignore`, `constants.py`, `Doxyfile`, a passing smoke test, and a `README.md` from the framework template with `.venv` instructions.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `python -m venv .venv`, `python -m pip install --upgrade pip` and `python -m pip install -e .[dev]` succeed on Python 3.13 | All three succeed | Any fails |
| 2 | `python -m pytest` passes | Exit code 0 | Failures |
| 3 | `bash framework/scripts/check-readme.sh` reports no finding | Exit code 0 | Findings |
| 4 | `.env` and `browser.json` are ignored by git | `git check-ignore` lists both | Either is tracked |
## Dependencies
| Depends on | Reason |
| --- | --- |
| [MIL-001] | Its pull request is merged before this milestone starts |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| [BC-001] O5; success criteria 2 and 5 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (the AI acts as stand-in) |
## Target Date
2026-11-06 — inside the Business Case window 2026-10-28 to 2026-11-30; branch `mil-002-project-scaffold`.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Create pyproject and package layout | Add `pyproject.toml` (Python 3.13 or later, runtime dependencies `requests`, `beautifulsoup4`, `ytmusicapi`, optional `dev` extra with pytest) and the `src/` layers `domain`, `application`, `infrastructure`, `presentation` and `tests/` folders, following the framework's Python layout. | No | BC-001 O5 |
| 2 | Add constants module | Create `constants.py` holding the Bakeboard base URL, the CSS selectors, the User-Agent header, the playlist name pattern, the `browser.json` file name and the search filter, so no magic value is in the code. | No | BC-001 O1 |
| 3 | Add Python .gitignore and secret rules | Keep the Python `.gitignore` and ensure `.env`, `browser.json`, `.venv/` and Doxygen output are ignored. | No | BC-001 O5 |
| 4 | Add Doxyfile | Add a `Doxyfile` that documents `src/` from the Doxygen comments, with output to an ignored folder. | No | BC-001 O5 |
| 5 | Write README from the framework template | Write `README.md` from `framework/templates/README-template.md`: create and use `.venv`, `python -m pip install --upgrade pip`, run, test, and the reason for each dependency. | No | BC-001 O5 |
| 6 | Add smoke test and pytest configuration | Add the pytest configuration in `pyproject.toml` and one smoke test that imports the package, so the test command is proven before real code arrives. | No | BC-001 O5 |
| 7 | Open the scaffold pull request | Commit on branch `mil-002-project-scaffold`, run the code review against `qc-programming-python`, push and open the pull request that closes this milestone's issues. | No | BC-001 |
---
[BC-001]: ../business-case.md
[MIL-001]: ./mil-001-planning-baseline.md
[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b