Files
2026-10-28 14:19:51 +08:00

106 lines
6.0 KiB
Markdown

# Project Plan
## Metadata
| Key | Value |
| --- | --- |
| ID | PP-001 |
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007] |
| 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
This plan schedules the seven milestones of the Musical Time Machine project inside the Business Case window of 2026-10-28 to 2026-11-30 ([BC-001], Constraints).
## Planning Assumptions
- Week 1 starts 2026-10-28; the plan ends by 2026-11-30, per the Business Case constraint.
- One milestone is one branch and one pull request; a milestone is as long as its tasks need, between 4 and 9 days.
- Reviews are done by the AI as stand-in for S01 ([SA-001], S01); the language criteria of `QC-LANG-001` that need a person stay open until S01 confirms them.
- Live steps 2 to 4 need S01's `browser.json`; the dates of MIL-004 to MIL-006 assume it exists by 2026-11-14.
## Gateway Schedule
| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Planning baseline | [MIL-001] | 2026-10-28 to 2026-11-02 | 2026-11-02 | S01 | none (technical tasks) | Accepted `BC-001` | [Milestone 1](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/264) |
| Project scaffold | [MIL-002] | 2026-11-03 to 2026-11-06 | 2026-11-06 | S01 | none (technical tasks) | A project skeleton with `pyproject | [Milestone 2](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/265) |
| Step 1 - Scrape the Billboard Hot 100 | [MIL-003] | 2026-11-07 to 2026-11-12 | 2026-11-12 | S01 | none (technical tasks) | A command that asks for a date in YYYY-MM-DD format | [Milestone 3](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/266) |
| Step 2 - YouTube Music authentication | [MIL-004] | 2026-11-13 to 2026-11-17 | 2026-11-17 | S01 | none (technical tasks) | A client adapter around `ytmusicapi` that reads `browser | [Milestone 4](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/267) |
| Step 3 - Create the playlist | [MIL-005] | 2026-11-18 to 2026-11-20 | 2026-11-20 | S01 | none (technical tasks) | A `create_playlist` use case that returns the id of an existing or new private playlist | [Milestone 5](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/268) |
| Step 4 - Search and add songs | [MIL-006] | 2026-11-21 to 2026-11-25 | 2026-11-25 | S01 | none (technical tasks) | An `add_songs` use case that searches with the song filter and adds the top result | [Milestone 6](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/269) |
| Wiki and release | [MIL-007] | 2026-11-26 to 2026-11-30 | 2026-11-30 | S01 | none (technical tasks) | Wiki pages in `docs/wiki/` in English | [Milestone 7](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/270) |
```plantuml
@startgantt
Project starts 2026-10-28
[MIL-001] starts 2026-10-28 and ends 2026-11-02
[MIL-001 Go/No-Go] happens 2026-11-02
[MIL-002] starts 2026-11-03 and ends 2026-11-06
[MIL-002 Go/No-Go] happens 2026-11-06
[MIL-003] starts 2026-11-07 and ends 2026-11-12
[MIL-003 Go/No-Go] happens 2026-11-12
[MIL-004] starts 2026-11-13 and ends 2026-11-17
[MIL-004 Go/No-Go] happens 2026-11-17
[MIL-005] starts 2026-11-18 and ends 2026-11-20
[MIL-005 Go/No-Go] happens 2026-11-20
[MIL-006] starts 2026-11-21 and ends 2026-11-25
[MIL-006 Go/No-Go] happens 2026-11-25
[MIL-007] starts 2026-11-26 and ends 2026-11-30
[MIL-007 Go/No-Go] happens 2026-11-30
@endgantt
```
## Scope Coverage
| Business Case scope item | Gateway |
| --- | --- |
| Repository description and topics | [MIL-001] |
| `pyproject.toml`, `.venv` instructions, `constants.py`, Doxygen, README from the template, `.gitignore` | [MIL-002] |
| Scraping of Bakeboard into a list (O1) | [MIL-003] |
| YouTube Music authentication (O2) | [MIL-004] |
| Playlist creation without duplicates (O3) | [MIL-005] |
| Search and add songs (O4) | [MIL-006] |
| Wiki in en, da, ms and the step screenshots (O5) | [MIL-003] to [MIL-007] |
## Dependencies
```
MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005 → MIL-006 → MIL-007
```
A No-Go on a gateway returns it to rework and moves every later date by the rework time; the end date 2026-11-30 moves only if S01 decides so in chat.
## Plan Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| `browser.json` not available by 2026-11-14 | MIL-004 to MIL-006 cannot be closed | The run stops and reports; tests with fakes are finished so only the live screenshots wait |
| Language criteria need a person | Baseline stays `Go-with-conditions` | Ask S01 to confirm criteria 3, 5 and 9 of `QC-LANG-001` when accepting the plan |
| Bakeboard offline during the live run | Step 1 screenshot delayed | The stored fixture proves the code; the screenshot is taken later |
## Open Issues
- The owner of the repository on the git host: the `origin` remote uses `Tirsvad-Udemy-100-days-of-code`, the request names `Tirsvad-Udemy-100_days_of_code`; the remote is used until S01 says otherwise.
- Whether the live steps 2 to 4 can be run depends on `browser.json` from S01.
---
[BC-001]: ./business-case.md
[SA-001]: ./stakeholder-analysis.md
[MIL-001]: ./milestones/mil-001-planning-baseline.md
[MIL-002]: ./milestones/mil-002-project-scaffold.md
[MIL-003]: ./milestones/mil-003-step-1-scrape-billboard.md
[MIL-004]: ./milestones/mil-004-step-2-youtube-music-auth.md
[MIL-005]: ./milestones/mil-005-step-3-create-playlist.md
[MIL-006]: ./milestones/mil-006-step-4-search-and-add-songs.md
[MIL-007]: ./milestones/mil-007-wiki-and-release.md
[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b