MIL-001: Planning baseline #43

Merged
Tirsvad merged 3 commits from mil-001-planning-baseline into main 2026-10-28 07:20:09 +01:00
27 changed files with 1944 additions and 0 deletions
Showing only changes of commit 01e016e15d - Show all commits
+185
View File
@@ -0,0 +1,185 @@
# ---> Python
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# UV
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
#uv.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
.pdm.toml
.pdm-python
.pdm-build/
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# Ruff stuff:
.ruff_cache/
# PyPI configuration file
.pypirc
# Doxygen output
docs/doxygen/
# AI prompt log (public repository)
/docs/ai-prompts/
.venv/
browser.json
html/
+3
View File
@@ -0,0 +1,3 @@
[submodule "framework"]
path = framework
url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git
+61
View File
@@ -0,0 +1,61 @@
# 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/use-cases/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/mil-*.md | 008 |
| GOV | Governance / ARB Workflow | docs/sqa/governance.md | 002 |
| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 012 |
## 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 |
| Wiki languages | en, da, ms (`framework/process/wiki.md`) |
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, TP, AD, 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.
+137
View File
@@ -0,0 +1,137 @@
# Business Case
## Metadata
| Key | Value |
| --- | --- |
| ID | BC-001 |
| CrossReference | [SA-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 | pending |
---
## Executive Summary
Course participants of the Udemy "100 Days of Code" bootcamp (day 46, "Musical Time Machine") need a worked, runnable solution to the assignment: pick a date, scrape the Billboard Hot 100 chart of that date, and build a private YouTube Music playlist from it. This project delivers that solution as a small, readable Python 3.13 command line application with tests, documentation and a trilingual wiki (English, Danish, Bahasa Malaysia), so that fellow participants (S02) and repository viewers (S03) can read, run and learn from it.
## Methodological and Standards Foundation
The project follows the software quality assurance (SQA) and quality control (QC) framework mounted at `framework/` (plan-first gate, review against QC checklists). Design artifacts, where needed, follow Larman's *Applying UML and Patterns*. Quality is stated with the ISO/IEC (International Organization for Standardization and International Electrotechnical Commission) 25010:2023 characteristics. The code follows the `clean-architecture` and `coding-conventions` skills of the framework.
## Problem Statement
- The assignment gives instructions in prose only; participants who get stuck on scraping, on the `ytmusicapi` browser authentication or on the playlist calls have no tested reference.
- The Billboard site can change or add a paywall at any time, so a reference must also work against the course's clone site, Bakeboard.
- Shared solutions are often a single untested script with no instructions to run it.
## Business Opportunity
A documented, tested and screenshot-illustrated solution makes the assignment repeatable for other participants, and shows a clean way to structure a small scraping and API project. It is a portfolio item for S01.
## Objectives
1. O1: Deliver an application that asks for a date (YYYY-MM-DD) and scrapes the 100 song titles and artists of that date from Bakeboard into a Python list.
2. O2: Authenticate to YouTube Music with `ytmusicapi` using a `browser.json` file and verify the connection by counting the library playlists.
3. O3: Create a private playlist named `{date} Billboard 100`, without creating a duplicate when it already exists.
4. O4: Search each song and add the top song result to the playlist, skipping failures without stopping.
5. O5: Provide automated tests, a README with setup, run and test instructions, a Doxygen configuration and a wiki in English, Danish and Bahasa Malaysia, with a screenshot for each lecture step.
6. O6: Publish the repository with a description and topics.
## Scope
### In Scope
- Python application in `src/`, tests in `tests/`, documents in `docs/`.
- Scraping of the Bakeboard clone site (`https://appbrewery.github.io/bakeboard-hot-100/`); the base URL is a constant so the real Billboard URL can be configured.
- YouTube Music authentication, playlist creation and song search through `ytmusicapi`.
- `pyproject.toml`, `.venv` instructions, `constants.py`, pytest tests, Doxygen comments and `Doxyfile`, `README.md` from the framework template.
- Wiki pages in en, da and ms, with a screenshot for each of the four lecture steps.
- Repository description and topics on the git host.
### Out of Scope
- Spotify (the course path chosen is YouTube Music).
- Automating the creation of `browser.json`; it is a manual step of S01 and contains personal session cookies.
- A graphical user interface.
- Using the git host tokens in `.env` inside the application or its tests.
## Expected Benefits
### Tangible Benefits
- A runnable solution with a passing automated test suite.
- A README and a wiki in three languages that another participant can follow without help.
### Intangible Benefits
- Better understanding of HTTP headers, HTML parsing and cookie-based API authentication.
- A clearer repository for viewers (S03).
## Strategic Alignment
The project supports S01's goal of completing the bootcamp with portfolio-quality work, and the course community's habit of sharing and comparing solutions (S02, S03).
## Success Criteria
| # | Criterion | Target | Measure |
| --- | --- | --- | --- |
| 1 | Songs scraped for a valid Bakeboard date | 100 titles with artists | Automated test on a stored copy of the page, plus one run against the live site |
| 2 | Automated tests | All pass; line coverage of `src/` at least 85 % | `python -m pytest` |
| 3 | Duplicate playlist | 0 duplicates after two runs with the same date | Test with a fake YouTube Music client |
| 4 | A failing song | Run continues and reports the skipped count | Test with a fake client that raises for one song |
| 5 | Runtime dependencies | At most 3: `requests`, `beautifulsoup4`, `ytmusicapi` | `pyproject.toml` |
| 6 | Documentation | README with setup, run and test sections; wiki pages in en, da, ms with 4 step screenshots each | File check in the milestone review |
| 7 | Repository metadata | Description and at least 5 topics set | Git host API response |
## Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| The Bakeboard or Billboard page markup changes | Scraper returns no songs | Selectors are constants; the scraper raises a clear error on an empty result; tests use a stored page |
| `browser.json` is missing or its cookies have expired | Steps 2 to 4 cannot be run live | README documents how to renew it; the live steps are marked as needing S01; automated tests use a fake client |
| Personal cookies or tokens are committed | Account takeover | `browser.json` and `.env` are in `.gitignore`; the app and tests never read `.env` |
| `ytmusicapi` changes its interface | Playlist code breaks | The library is behind a port (an interface) and its version is bounded in `pyproject.toml` |
| Screenshots show personal data | Privacy loss | Screenshots are taken of terminal output and public pages, and checked before commit |
## Assumptions
- S01 has a Google account and Firefox, and will create `browser.json` by hand as the lecture describes.
- Python 3.13 or later is installed.
- The git host repository exists under the owner given by the `origin` remote, and the `GITEA_TOKEN` in `.env` may write to it.
- Reviews are done by the AI as stand-in for S01, as the autonomous mode of `AGENTS.md` allows.
## Constraints
- Python 3.13 or later, a `venv` named `.venv`, pytest, constants in `constants.py`, configuration in `pyproject.toml`.
- Folder structure `src/`, `tests/`, `docs/`; Doxygen comments in the source.
- Runtime dependencies only where needed.
- One branch and one pull request per milestone, to keep track of the steps.
- Planned window: 2026-10-28 to 2026-11-30.
- The Product Owner's language is English and the domain is IT; the wiki is written in en, da and ms.
## Cost–Benefit Assessment
| Costs | Benefits |
| --- | --- |
| About 25 hours of S01's and AI time over five weeks; no licence or hosting cost | A reusable reference solution, a portfolio piece and a three-language learning wiki. The assessment is qualitative because the project has no revenue; its value is learning and sharing. |
## Stakeholders
| Stakeholder ID (SA) | Interest in this project |
| --- | --- |
| S01 | Completes the assignment; decides, builds and reviews |
| S02 | Reads and runs the code and compares solutions |
| S03 | Browses the repository for ideas |
## Recommendation
Proceed — the scope is small, the dependencies are few and the result is useful to all three stakeholders.
---
[SA-001]: ./stakeholder-analysis.md
@@ -0,0 +1,69 @@
# Milestone 1: Planning baseline
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-001 |
| CrossReference | [BC-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 | pending |
---
## Purpose
Decide that the planning baseline (Business Case, Stakeholder Analysis, Project Plan, milestones, governance, traceability) is complete and reviewed, so that code may be planned.
## Deliverable
Accepted `BC-001`, `SA-001`, `PP-001`, all `MIL-*`, `GOV-001` and `TM-001`, each with a `Go` review record, and a repository on the git host with description and topics.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `BC-001`, `SA-001` and `MIL-001` to `MIL-007` have a review record and are `Accepted` | All rows `Accepted` | Any row `Proposed` or `Rejected` |
| 2 | `PP-001` is `Accepted` | Row `Accepted` | Row `Proposed` |
| 3 | The repository description and at least 5 topics are set on the git host | API response shows both | Either is empty |
| 4 | `bash framework/scripts/check-plan.sh` and `check-languages.sh` report no finding | Exit code 0 | Exit code not 0 |
## Dependencies
| Depends on | Reason |
| --- | --- |
| none | First milestone |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| [BC-001] O6; success criteria 6 and 7 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (the AI acts as stand-in) |
## Target Date
2026-11-02 — inside the Business Case window 2026-10-28 to 2026-11-30; branch `mil-001-planning-baseline`.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Write governance and traceability matrix | Create `GOV-001` (RACI with S01 as the only approver, AI as recorded stand-in) and `TM-001` linking each stakeholder concern to its milestone, so the review records have an escalation path and a matrix to update. | No | BC-001 |
| 2 | Review baseline artifacts | Review `BC-001`, `SA-001`, `PP-001` and the milestones against their QC checklists and `QC-LANG-001`, write the `RC-*` records and set the rows `Accepted` on a `Go`. Language criteria 3, 5 and 9 need S01 to confirm them. | No | BC-001 |
| 3 | Set repository description and topics | Set the description and topics (python, web-scraping, beautifulsoup, ytmusicapi, youtube-music, billboard, udemy, 100-days-of-code) through the git host API with the token from `.env`. The token is only used from the shell and is never stored in the project. | No | BC-001 O6 |
| 4 | Open the baseline pull request | Commit on branch `mil-001-planning-baseline`, resolve the pending commit links, push and open the pull request that closes this milestone's issues. | No | BC-001 |
---
[BC-001]: ../business-case.md
@@ -0,0 +1,73 @@
# 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 | pending |
---
## 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
@@ -0,0 +1,72 @@
# Milestone 3: Step 1 - Scrape the Billboard Hot 100
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-003 |
| CrossReference | [BC-001], [MIL-002] |
| 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 | pending |
---
## Purpose
Decide that lecture step 1 works: a date goes in and a list of 100 songs comes out.
## Deliverable
A command that asks for a date in YYYY-MM-DD format, fetches the Bakeboard page with a User-Agent header, and prints the song titles and artists, with tests and a step 1 screenshot.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | The scraper test returns 100 songs from a stored copy of the 2026-04-18 page | 100 titles and 100 artists | Any other count |
| 2 | An invalid date format is rejected with a clear message | Test passes | Test fails |
| 3 | A live run for 2026-04-18 prints 100 titles | 100 lines in the screenshot | Fewer lines |
| 4 | The step 1 screenshot is in README and wiki sources | File exists and is referenced | Missing |
## Dependencies
| Depends on | Reason |
| --- | --- |
| [MIL-002] | Its pull request is merged before this milestone starts |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| [BC-001] O1; success criterion 1 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (the AI acts as stand-in) |
## Target Date
2026-11-12 — inside the Business Case window 2026-10-28 to 2026-11-30; branch `mil-003-step-1-scrape-billboard`.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Prompt for and validate the date | Add the date prompt and a validator for YYYY-MM-DD that returns a `datetime.date` or raises a domain error, so the rest of the program only sees valid dates. | No | BC-001 O1 |
| 2 | Implement scrape_titles | Implement `scrape_titles` (and artist extraction) with `requests` and `BeautifulSoup`, with the User-Agent header from `constants.py`, raising a clear error when no song is found. Keep the HTTP fetch behind a port so tests do not use the network. | No | BC-001 O1 |
| 3 | Store a Bakeboard fixture page and test the scraper | Save a copy of the 2026-04-18 chart page under `tests/fixtures/` and write tests for the 100 songs result, the empty-page error and the date validation. | No | BC-001 O1 |
| 4 | Capture the step 1 screenshot | Run the program for 2026-04-18 in a terminal and capture a screenshot of the Bakeboard page and of the printed list; check that it shows no personal data. A GUI is not tested; the screenshot is taken from a terminal run. | No | BC-001 O5 |
| 5 | Document step 1 in README | Add the step 1 section with the screenshot and the command to run it. | No | BC-001 O5 |
| 6 | Open the step 1 pull request | Commit on branch `mil-003-step-1-scrape-billboard`, 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-002]: ./mil-002-project-scaffold.md
@@ -0,0 +1,72 @@
# Milestone 4: Step 2 - YouTube Music authentication
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-004 |
| CrossReference | [BC-001], [MIL-003] |
| 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 | pending |
---
## Purpose
Decide that lecture step 2 works: the program can open a YouTube Music session from `browser.json` and reports the library playlists.
## Deliverable
A client adapter around `ytmusicapi` that reads `browser.json`, lists the library playlists and prints the count, a fake client for tests, instructions to create `browser.json`, and a step 2 screenshot.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | The adapter test with a fake client prints `Found N playlists in your library.` | Message matches | Mismatch |
| 2 | A missing `browser.json` gives a clear message with the setup steps | Test passes | Test fails |
| 3 | A live run with S01's `browser.json` prints the playlist count | Screenshot shows the count | Error or no screenshot |
| 4 | `browser.json` is not tracked by git | `git ls-files` does not list it | Listed |
## Dependencies
| Depends on | Reason |
| --- | --- |
| [MIL-003] | Its pull request is merged before this milestone starts |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| [BC-001] O2 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (the AI acts as stand-in) |
## Target Date
2026-11-17 — inside the Business Case window 2026-10-28 to 2026-11-30; branch `mil-004-step-2-youtube-music-auth`.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Define the music service port and fake | Define the port (an interface) for library playlists, playlist creation, search and add, and a fake implementation for tests, so no test needs the network or an account. | No | BC-001 O2 |
| 2 | Implement the ytmusicapi adapter | Implement the adapter in the infrastructure layer: `YTMusic('browser.json')`, `get_library_playlists()` and the playlist count message from the lecture. | No | BC-001 O2 |
| 3 | Handle a missing or expired browser.json | Detect a missing or rejected `browser.json` and print the steps to renew it (Firefox, Network tab, `ytmusicapi browser`) instead of a stack trace. | No | BC-001 O2 |
| 4 | Document browser.json setup | Write the Firefox header-copy steps for Windows, Linux and macOS (on macOS the `pbpaste` command feeds `ytmusicapi browser`) and the troubleshooting list from the lecture into the README. The file holds personal cookies and is never committed. | No | BC-001 O2 |
| 5 | Capture the step 2 screenshot | Needs S01's `browser.json`. Run the verify command and capture the terminal output; the playlist names must not show. If the file is missing the run stops and reports it. | No | BC-001 O5 |
| 6 | Open the step 2 pull request | Commit on branch `mil-004-step-2-youtube-music-auth`, 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-003]: ./mil-003-step-1-scrape-billboard.md
@@ -0,0 +1,71 @@
# Milestone 5: Step 3 - Create the playlist
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-005 |
| CrossReference | [BC-001], [MIL-004] |
| 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 | pending |
---
## Purpose
Decide that lecture step 3 works: a private playlist named `{date} Billboard 100` is created once and never duplicated.
## Deliverable
A `create_playlist` use case that returns the id of an existing or new private playlist, with tests and a step 3 screenshot.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | A first call creates one private playlist with the name `2026-04-18 Billboard 100` | Fake client holds one playlist | Zero or two |
| 2 | A second call with the same date creates no new playlist | Fake client still holds one | Two playlists |
| 3 | A live run shows the playlist in YouTube Music | Screenshot shows the playlist | Missing |
## Dependencies
| Depends on | Reason |
| --- | --- |
| [MIL-004] | Its pull request is merged before this milestone starts |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| [BC-001] O3; success criterion 3 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (the AI acts as stand-in) |
## Target Date
2026-11-20 — inside the Business Case window 2026-10-28 to 2026-11-30; branch `mil-005-step-3-create-playlist`.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Build the playlist name and description | Build the name from the date with the constant pattern and write a short description that says the playlist was created by this program. | No | BC-001 O3 |
| 2 | Implement create_playlist without duplicates | Implement `create_playlist` with `create_playlist(title, description, privacy_status='PRIVATE')`; it first loops over `get_library_playlists()` and returns the id of a playlist with the same title. | No | BC-001 O3 |
| 3 | Test the duplicate rule | Write tests with the fake client for the first call, the second call and a different date. | No | BC-001 O3 |
| 4 | Capture the step 3 screenshot | Needs S01's `browser.json`. Run the program and capture the new playlist in the YouTube Music library; if the file is missing the run stops and reports it. | No | BC-001 O5 |
| 5 | Document step 3 in README | Add the step 3 section with the screenshot. | No | BC-001 O5 |
| 6 | Open the step 3 pull request | Commit on branch `mil-005-step-3-create-playlist`, 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-004]: ./mil-004-step-2-youtube-music-auth.md
@@ -0,0 +1,72 @@
# Milestone 6: Step 4 - Search and add songs
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-006 |
| CrossReference | [BC-001], [MIL-005] |
| 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 | pending |
---
## Purpose
Decide that lecture step 4 works: every found song is added to the playlist and a failure never stops the run.
## Deliverable
An `add_songs` use case that searches with the song filter and adds the top result, skips failures and reports counts, with tests and a step 4 screenshot.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | The test adds the top result for each of 3 fake songs | 3 items added | Other count |
| 2 | A song whose search raises an error is skipped and the run continues | Remaining songs added; skipped count 1 | Run stops |
| 3 | A live run adds songs to the playlist | Screenshot shows the filled playlist | Missing |
| 4 | The final report shows added and skipped counts | Both counts printed | Not printed |
## Dependencies
| Depends on | Reason |
| --- | --- |
| [MIL-005] | Its pull request is merged before this milestone starts |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| [BC-001] O4; success criterion 4 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (the AI acts as stand-in) |
## Target Date
2026-11-25 — inside the Business Case window 2026-10-28 to 2026-11-30; branch `mil-006-step-4-search-and-add-songs`.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Implement song search | Implement the search with `yt.search(query, filter='songs')` using title and artist, returning the first result's `videoId` or none. | No | BC-001 O4 |
| 2 | Implement add_songs with graceful skipping | Implement `add_songs` that calls `add_playlist_items` for each found song inside a try/except, collects the skipped songs and returns the counts. Add a short pause between calls if the live run needs it. | No | BC-001 O4 |
| 3 | Test search and skipping | Write tests with the fake client for the add path, the not found path and the error path. | No | BC-001 O4 |
| 4 | Wire the full program in the composition root | Connect prompt, scrape, authenticate, create playlist and add songs in the presentation layer's entry point, with `python -m` as the run command. | No | BC-001 O1 |
| 5 | Capture the step 4 screenshot | Needs S01's `browser.json`. Run the whole program and capture the playlist with its songs; if the file is missing the run stops and reports it. | No | BC-001 O5 |
| 6 | Open the step 4 pull request | Commit on branch `mil-006-step-4-search-and-add-songs`, 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-005]: ./mil-005-step-3-create-playlist.md
@@ -0,0 +1,74 @@
# Milestone 7: Wiki and release
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-007 |
| CrossReference | [BC-001], [MIL-006] |
| 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 | pending |
---
## Purpose
Decide that the project is finished: the wiki explains what was learned in each lecture step in three languages and the repository is ready to share.
## Deliverable
Wiki pages in `docs/wiki/` in English, Danish and Bahasa Malaysia with the four step screenshots, the publish workflow, the Doxygen build, and a final run summary.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | Every English wiki page has a `-da` and a `-ms` page | Same page set in all three | Page missing |
| 2 | Each language has the four step screenshots and a what-we-learned section per step | 4 images and 4 sections each | Any missing |
| 3 | `_Sidebar.md` lists all three languages | Present | Absent |
| 4 | `doxygen Doxyfile` runs without warnings | 0 warnings | Warnings |
| 5 | The full test suite passes | Exit code 0 | Failures |
## Dependencies
| Depends on | Reason |
| --- | --- |
| [MIL-006] | Its pull request is merged before this milestone starts |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| [BC-001] O5; success criterion 6 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (the AI acts as stand-in) |
## Target Date
2026-11-30 — inside the Business Case window 2026-10-28 to 2026-11-30; branch `mil-007-wiki-and-release`.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Write the English wiki | Write `Home`, one page per lecture step (what the step teaches: HTTP headers and parsing, cookie authentication, idempotent creation, error tolerant loops) and `_Sidebar` in `docs/wiki/`, in English as the authoritative text. | No | BC-001 O5 |
| 2 | Translate the wiki to Danish | Write every page again as `<Page>-da.md` with the language line and the same page set; code, commands and file names stay in English. | No | BC-001 O5 |
| 3 | Translate the wiki to Bahasa Malaysia | Write every page again as `<Page>-ms.md` with the language line and the same page set; code, commands and file names stay in English. | No | BC-001 O5 |
| 4 | Add step screenshots to the wiki and README | Copy the four step screenshots to `docs/wiki/images/` and reference them from README and from each language of the wiki. | No | BC-001 O5 |
| 5 | Install the wiki publish workflow | Copy `framework/templates/ci/publish-wiki.yml` to the CI folder of the host so the wiki is published on merge. | No | BC-001 O5 |
| 6 | Run Doxygen and the full check | Run `doxygen Doxyfile`, the full pytest suite and the framework check scripts, and fix findings. | No | BC-001 O5 |
| 7 | Open the release pull request and write the run summary | Commit on branch `mil-007-wiki-and-release`, push and open the pull request; give S01 the summary of merged pull requests, review records and stand-in decisions. | No | BC-001 |
---
[BC-001]: ../business-case.md
[MIL-006]: ./mil-006-step-4-search-and-add-songs.md
+104
View File
@@ -0,0 +1,104 @@
# 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 | pending |
---
## 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` | not yet synced |
| Project scaffold | [MIL-002] | 2026-11-03 to 2026-11-06 | 2026-11-06 | S01 | none (technical tasks) | A project skeleton with `pyproject | not yet synced |
| 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 | not yet synced |
| 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 | not yet synced |
| 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 | not yet synced |
| 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 | not yet synced |
| 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 | not yet synced |
```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
+61
View File
@@ -0,0 +1,61 @@
# Governance / ARB Workflow
## Metadata
| Key | Value |
| --- | --- |
| ID | GOV-001 |
| CrossReference | [BC-001], [SA-001], [TM-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 | pending |
---
## Purpose
Defines how this project applies Quality Criteria (QC) checklists to its artifact instances, producing SQA Review Records and Go/No-Go decisions. It serves the Business Case ([BC-001]) objective O5 (documentation) and success criterion 6, and the stakeholder concern CN-002 of [SA-001] that nothing unreviewed or secret reaches the repository.
## ARB Review Workflow
1. **Submission** — the artifact owner (S01) submits an instance for review, identifying its type's QC checklist (`framework/qc/*/qc-*.md`).
2. **QC Checklist Review** — the Responsible reviewer (S01, or the AI as stand-in for S01 in autonomous mode) applies the checklist criterion by criterion.
3. **Review Record** — the Responsible reviewer documents the outcome as an SQA Review Record (`RC-*` under `docs/sqa/reviews/`).
4. **Go/No-Go Decision** — the Accountable role for the artifact category (S01) decides; contested or cross-cutting cases escalate to the ARB Chair (S01).
5. **Sign-off** — S01 signs off. On **Go**, the artifact's `## Version History` gets an `Accepted` row (the previous row becomes `Deprecated`). On **Go-with-conditions**, status stays `Proposed` until the Action Items are closed. On **No-Go**, the artifact returns to its owner (S01). A blocking finding (a `Fail` on a Mandatory criterion, or an open security finding rated High or Critical) always gives **No-Go**, unless a valid risk exception covers it.
6. **Traceability Update** — S01 (or the stand-in) updates the Traceability Matrix ([TM-001]) with the instance and its `RC-*` reference.
A criterion that only a person can confirm stays `Pending` until S01 confirms it by name and date; the author's or a stand-in's own assessment never closes it, and `Pending` allows `Go-with-conditions` at most. A risk exception names the finding, an owner, an approver who is neither the author nor the owner, an expiry date and the compensating controls; an expired exception blocks again. This project has one person, so a risk exception is approved by S01 in chat only, never by the stand-in.
## RACI by Artifact Category
| Artifact Category | Responsible (runs the review) | Accountable (Go/No-Go owner) | Consulted | Informed |
| --- | --- | --- | --- | --- |
| Strategic (Stakeholder Analysis, Business Case) | S01 | S01 | S02 | S03 |
| Process/Business (Project Plan, Milestones/Gateways) | S01 | S01 | S02 | S03 |
| Governance and traceability (Governance, Traceability Matrix) | S01 | S01 | S02 | S03 |
| Source code and tests | S01 | S01 | S02 | S03 |
Cross-cutting escalations and disputed verdicts are Accountable to the ARB Chair (S01), overriding the category-level Accountable role. Requirements and modeling artifacts (use cases, domain model and similar) are not in scope: all tasks are technical tasks (see [BC-001], Scope).
## Escalation Rules
- A **No-Go** verdict, or any disagreement between the Responsible reviewer and the category's Accountable owner, escalates to the ARB Chair (S01).
- A reviewer may not review an instance they authored. The one exception is autonomous mode: the AI may act as stand-in for a reviewer or an Accountable role, recorded as `AI as stand-in for S01` and `Mode: autonomous, not independent`; S01's acceptance of the plan is the authorisation for it. The named alternate for a review that S01 authored is S01 reading it again in the run summary.
- Repeated No-Go verdicts (2 or more) on the same artifact type trigger a review of the corresponding `QC-*` checklist itself.
## Cadence
- Reviews are triggered per artifact instance as it is produced or revised.
- QC checklists are reviewed annually (framework level, outside this project).
Process artifacts relied on: [TM-001] (traceability) and `framework/process/review-checklist-process.md` (review procedure).
---
[BC-001]: ../business-case.md
[SA-001]: ../stakeholder-analysis.md
[TM-001]: ./traceability-matrix.md
+66
View File
@@ -0,0 +1,66 @@
# Review of BC-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-001 |
| CrossReference | [BC-001], [QC-BC-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | 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] (`QC-BC-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | Cost–Benefit table is qualitative and says why: no revenue, value is learning and sharing. |
| 2 | Risks are identified with documented impact and mitigation | Pass | Risks table has 5 risks, each with impact and mitigation. |
| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | Success Criteria table has 7 numeric or checkable targets (100 titles, 0 duplicates, at most 3 dependencies). |
| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | `### In Scope` and `### Out of Scope` are separate. |
| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | Stakeholders table cites S01, S02, S03 only; no roles are re-described. |
| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | Foundation section names the framework, Larman and ISO/IEC 25010:2023. |
| 7 | Assumptions and constraints are explicit and clearly distinguished from one another | Pass | Assumptions and Constraints are separate lists. |
| 8 | Document supports executive decision-making with a clear, unambiguous recommendation | Pass | Recommendation says `Proceed` with one reason. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[BC-001]: ../../business-case.md
[QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md
+67
View File
@@ -0,0 +1,67 @@
# Review of SA-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-002 |
| CrossReference | [SA-001], [QC-SA-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | 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] (`QC-SA-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | Power/Interest grid is filled for every stakeholder, with no gaps or unclassified entries | Pass | All three stakeholders have Power, Interest and 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 stable and used by every other artifact. |
| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | Roles, organization and explicit HIGH/LOW levels given. |
| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | Communication table C1 to C3 tied to milestones. |
| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | Two conflicts with mitigations. |
| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | Business Goal Alignment table traces each concern to BC-001 objectives. |
| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | Concerns CN-001 to CN-006 mapped to FURPS+ attributes. |
| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | Short plain text; each entry readable on its own. |
| 9 | Every concern has a stable ID (`CN-NNN`) in the concern register, with the stakeholder who raised it; IDs are never renumbered or reused | Pass | CN-001 to CN-006 each name the stakeholder who raised it. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[SA-001]: ../../stakeholder-analysis.md
[QC-SA-001]: ../../../framework/qc/artifacts/qc-stakeholder-analysis.md
+73
View File
@@ -0,0 +1,73 @@
# Review of PP-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-003 |
| CrossReference | [PP-001], [QC-PP-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Artifact Under Review
- Instance reviewed: [PP-001]
- Checklist used: [QC-PP-001] (`QC-PP-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The plan states its start date, end date and the constraint it must fit | Pass | Planning Assumptions give start 2026-10-28 and end 2026-11-30, the Business Case window. |
| 2 | Every milestone or gateway is listed once with its document, decision date and owner | Pass | Seven rows, each with its `MIL-*` link, decision date and owner S01. |
| 3 | Every decision date lies inside the plan's window and is consistent with the dates in the linked `MIL-*` document | Pass | Decision dates equal the Target Date of each linked MIL document and lie inside the window. |
| 4 | Every in-scope item of the Business Case is delivered at a named gateway (scope coverage) | Pass | Scope Coverage table maps every In Scope item to a gateway. |
| 5 | Dependencies between gateways are stated, acyclic and consistent with the schedule order | Pass | Chain MIL-001 to MIL-007 is acyclic and matches the dates. |
| 6 | The plan states what happens to later gateways and to the end date when a gateway is No-Go | Pass | Dependencies section states the effect of a No-Go and that S01 moves the end date. |
| 7 | Owners, reviewers and escalation roles use Stakeholder Analysis IDs and match the governance RACI | Pass | Only S01 is named, matching the GOV-001 RACI. |
| 8 | Planning assumptions are listed with their source, and a changed baseline is recorded with its reason | Pass | Planning Assumptions list sources; the `browser.json` assumption is explicit. |
| 9 | Plan risks are listed with impact and a mitigation, and trace to Business Case risks where they come from there | Pass | Plan Risks have impact and mitigation; the first traces to the Business Case browser.json risk. |
| 10 | Open issues are listed, and none contradicts a statement elsewhere in the plan | Pass | Open Issues list the owner name difference and the browser.json dependency; no contradiction. |
| 11 | Each gateway's main deliverable is stated and matches the deliverable of its `MIL-*` document | Pass | Main deliverable column is the first clause of each MIL Deliverable. |
| 12 | Gateways that deliver user stories name them, and those that do not say why | Pass | Stories column says `none (technical tasks)`. |
| 13 | The schedule view (table, Gantt) and the dependency view agree with each other | Pass | Gantt bars use the table dates. |
| 14 | Each gateway is linked to its issue-tracker milestone, or marked as not yet synced | Pass | Milestone column says `not yet synced`. |
| 15 | The plan is a singleton: one Project Plan per project, changes recorded in Version History | Pass | One Project Plan, PP-001. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Language `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[PP-001]: ../../project-plan.md
[QC-PP-001]: ../../../framework/qc/artifacts/qc-project-plan.md
+71
View File
@@ -0,0 +1,71 @@
# Review of GOV-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-004 |
| CrossReference | [GOV-001], [QC-GOV-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Artifact Under Review
- Instance reviewed: [GOV-001]
- Checklist used: [QC-GOV-001] (`QC-GOV-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | Purpose states what is governed and traces to the Business Case's governance and traceability objectives (a framework-level document that cannot cite project artifacts traces to the governance document it supports instead) | Pass | Purpose cites BC-001 O5 and SA-001 CN-002. |
| 2 | Workflow steps are ordered, and every step names the role that performs it | Pass | Six workflow steps, each with a named role. |
| 3 | The RACI covers every in-scope artifact type, with exactly one Accountable per category | Pass | RACI has four categories covering every in-scope type, one Accountable each. |
| 4 | Roles are stakeholder IDs taken exactly from the Stakeholder Analysis; no invented role names | Pass | Only S01, S02, S03 appear. |
| 5 | Each verdict (Go, Go-with-conditions, No-Go) defines the resulting artifact status, using only allowed status values | Pass | Go, Go-with-conditions and No-Go give Accepted, Proposed and returned-to-owner outcomes. |
| 6 | Disputed or No-Go verdicts have an escalation path to a named stakeholder | Pass | Escalation to the ARB Chair S01. |
| 7 | The reviewer-independence rule can be applied: a named alternate exists when the reviewer is the author | Pass | Named alternate: stand-in recorded as `AI as stand-in for S01`, and S01's later reading. |
| 8 | Review cadence is stated for artifact instances and for the checklists themselves | Pass | Cadence section covers instances and checklists. |
| 9 | The document links the process artifacts it relies on (traceability matrix, review process, process model) | Pass | Links TM-001 and the review process. |
| 10 | Written without duplicated words or unexplained abbreviations | Pass | No duplicated words; ARB, RACI, QC spelled out by the framework text. |
| 11 | A blocking finding (a `Fail` on a Mandatory criterion, or an open security finding rated High or Critical) gives `No-Go`; `Go-with-conditions` is allowed only for findings that do not block | Pass | Step 5 states the blocking-finding rule. |
| 12 | A risk exception that lets a blocking finding pass names the finding, the owner, an approver who is neither the author nor the owner, an expiry date and the compensating controls; an expired exception is blocking again | Pass | Risk exception fields and expiry are stated. |
| 13 | A criterion only a person can confirm stays `Pending` until a named reviewer independent of the author confirms it; the author's own assessment, a stand-in's or an AI author's, never closes it | Pass | Pending rule stated; only S01 closes it. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[GOV-001]: ../governance.md
[QC-GOV-001]: ../../../framework/qc/artifacts/qc-governance.md
+64
View File
@@ -0,0 +1,64 @@
# Review of MIL-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-005 |
| CrossReference | [MIL-001], [QC-MIL-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | 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] (`QC-MIL-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows (commands, counts, files). |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies section names the predecessor. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability section cites BC-001 objective and success criterion. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-30 and equals the plan. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-001]: ../../milestones/mil-001-planning-baseline.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
+64
View File
@@ -0,0 +1,64 @@
# Review of MIL-002
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-006 |
| CrossReference | [MIL-002], [QC-MIL-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | 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] (`QC-MIL-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows (commands, counts, files). |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies section names the predecessor. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability section cites BC-001 objective and success criterion. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-30 and equals the plan. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-002]: ../../milestones/mil-002-project-scaffold.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
+64
View File
@@ -0,0 +1,64 @@
# Review of MIL-003
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-007 |
| CrossReference | [MIL-003], [QC-MIL-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | 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] (`QC-MIL-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows (commands, counts, files). |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies section names the predecessor. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability section cites BC-001 objective and success criterion. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-30 and equals the plan. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-003]: ../../milestones/mil-003-step-1-scrape-billboard.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
+64
View File
@@ -0,0 +1,64 @@
# Review of MIL-004
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-008 |
| CrossReference | [MIL-004], [QC-MIL-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | 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] (`QC-MIL-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows (commands, counts, files). |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies section names the predecessor. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability section cites BC-001 objective and success criterion. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-30 and equals the plan. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-004]: ../../milestones/mil-004-step-2-youtube-music-auth.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
+64
View File
@@ -0,0 +1,64 @@
# Review of MIL-005
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-009 |
| CrossReference | [MIL-005], [QC-MIL-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | 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] (`QC-MIL-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows (commands, counts, files). |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies section names the predecessor. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability section cites BC-001 objective and success criterion. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-30 and equals the plan. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-005]: ../../milestones/mil-005-step-3-create-playlist.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
+64
View File
@@ -0,0 +1,64 @@
# Review of MIL-006
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-010 |
| CrossReference | [MIL-006], [QC-MIL-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Artifact Under Review
- Instance reviewed: [MIL-006]
- Checklist used: [QC-MIL-001] (`QC-MIL-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows (commands, counts, files). |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies section names the predecessor. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability section cites BC-001 objective and success criterion. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-30 and equals the plan. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-006]: ../../milestones/mil-006-step-4-search-and-add-songs.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
+64
View File
@@ -0,0 +1,64 @@
# Review of MIL-007
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-011 |
| CrossReference | [MIL-007], [QC-MIL-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Artifact Under Review
- Instance reviewed: [MIL-007]
- Checklist used: [QC-MIL-001] (`QC-MIL-001`)
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (confirmed criteria 3, 5, 9 in chat on 2026-10-28)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows (commands, counts, files). |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies section names the predecessor. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability section cites BC-001 objective and success criterion. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-30 and equals the plan. |
## 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 `en` and Domain `it` are in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 in chat on 2026-10-28 (the document is English prose). |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` or `IT Professional English` per the registry table. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 in chat on 2026-10-28; no dictionary (DICT) exists yet, so the terms are the standard IT terms. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 in chat on 2026-10-28 (S01 is the domain expert and reads English). |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out at first use (PO, ARB, QC, FURPS+). |
## Overall Verdict
Go — every Mandatory criterion passes; no blocking finding. Language criteria 3, 5 and 9 were confirmed by S01 in chat on 2026-10-28, so none stays `Pending`.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-007]: ../../milestones/mil-007-wiki-and-release.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
+82
View File
@@ -0,0 +1,82 @@
# Traceability Matrix
## Metadata
| Key | Value |
| --- | --- |
| ID | TM-001 |
| CrossReference | [BC-001], [SA-001], [PP-001], [GOV-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Purpose
Tracks backward and forward links between artifact instances so that the traceability of concerns to milestones is measurable. A row is added or updated whenever an artifact instance is created or reviewed.
## Traceability Table
| Artifact Instance | Type | Language | Domain | Upstream (Backward Link) | Downstream (Forward Link) | Last Reviewed (RC-ID) |
| --- | --- | --- | --- | --- | --- | --- |
| [SA-001] | SA | en | it | - | [BC-001] | [RC-002] |
| [BC-001] | BC | en | it | [SA-001] | [PP-001], [MIL-001] | [RC-001] |
| [PP-001] | PP | en | it | [BC-001], [SA-001] | [MIL-001] | [RC-003] |
| [GOV-001] | GOV | en | it | [BC-001], [SA-001] | [TM-001] | [RC-004] |
| [MIL-001] | MIL | en | it | [BC-001], [PP-001] | [MIL-002] | [RC-005] |
| [MIL-002] | MIL | en | it | [MIL-001] | [MIL-003] | [RC-006] |
| [MIL-003] | MIL | en | it | [MIL-002] | [MIL-004] | [RC-007] |
| [MIL-004] | MIL | en | it | [MIL-003] | [MIL-005] | [RC-008] |
| [MIL-005] | MIL | en | it | [MIL-004] | [MIL-006] | [RC-009] |
| [MIL-006] | MIL | en | it | [MIL-005] | [MIL-007] | [RC-010] |
| [MIL-007] | MIL | en | it | [MIL-006] | - | [RC-011] |
| [TM-001] | TM | - | - | [BC-001] | - | - |
## Concern Coverage
| Concern (CN-ID) | Views that answer it | Decisions (ADR) | Quality check (TP) | Status |
| --- | --- | --- | --- | --- |
| CN-001 | [MIL-003], [MIL-004], [MIL-005], [MIL-006] | - | - | Covered |
| CN-002 | [MIL-002] (ignore rules), [MIL-004] | - | - | Covered |
| CN-003 | [MIL-003], [MIL-006] | - | - | Covered |
| CN-004 | [MIL-002], [MIL-004] | - | - | Covered |
| CN-005 | [MIL-001] | - | - | Covered |
| CN-006 | [MIL-002] | - | - | Covered |
## Open Inconsistencies
| # | Views | Inconsistency | Found in (RC-ID) | Status | Resolved in |
| --- | --- | --- | --- | --- | --- |
| 1 | [BC-001], [PP-001] | None found | [RC-001] | Closed | - |
## Coverage Notes
- No design artifacts (use cases, domain model, DCD, ERD, test plan) exist: all tasks are technical tasks; `-` in Upstream means foundational, in Downstream that nothing is built on it yet, in Last Reviewed that no `RC-*` exists yet.
- Concern coverage will be rechecked when code exists (MIL-003 to MIL-007).
---
[BC-001]: ../business-case.md
[SA-001]: ../stakeholder-analysis.md
[PP-001]: ../project-plan.md
[GOV-001]: ./governance.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
[RC-001]: ./reviews/rc-001-bc.md
[RC-002]: ./reviews/rc-002-sa.md
[RC-003]: ./reviews/rc-003-pp.md
[RC-004]: ./reviews/rc-004-gov.md
[RC-005]: ./reviews/rc-005-mil-001.md
[RC-006]: ./reviews/rc-006-mil-002.md
[RC-007]: ./reviews/rc-007-mil-003.md
[RC-008]: ./reviews/rc-008-mil-004.md
[RC-009]: ./reviews/rc-009-mil-005.md
[RC-010]: ./reviews/rc-010-mil-006.md
[RC-011]: ./reviews/rc-011-mil-007.md
+82
View File
@@ -0,0 +1,82 @@
# Stakeholder Analysis
## Metadata
| Key | Value |
| --- | --- |
| ID | SA-001 |
| CrossReference | [BC-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 | pending |
---
## Purpose
This analysis names the people who influence or are interested in the project, so later artifacts can cite them by ID for ownership and review. It uses a power/interest grid and the FURPS+ model (Functionality, Usability, Reliability, Performance, Supportability, plus design, implementation, interface and physical constraints) for concerns.
## 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 (PO), developer and reviewer | Tirsvad | HIGH | HIGH | Manage Closely | Complete the assignment with work of portfolio quality |
| S02 | Udemy coursists | Fellow participants who share and compare solutions | Udemy course community | LOW | HIGH | Keep Informed | Readable, runnable code that uses the assignment's function names, and README instructions to run it |
| S03 | GitHub viewers | Visitors who browse the repository for ideas | Public | LOW | LOW | Monitor | A clear repository description, topics and README, and no runtime dependencies they do not need |
## Power/Interest Classification Rationale
- **Manage Closely (S01):** decides scope, builds, reviews and accepts every artifact.
- **Keep Informed (S02):** no decision power, but they are the main readers; their needs set the readability and the instructions.
- **Monitor (S03):** occasional readers; the repository description, topics and README serve them.
## Primary Concerns and FURPS+ Mapping
| Concern ID | Stakeholder | Concern | FURPS+ attribute |
| --- | --- | --- | --- |
| CN-001 | S01 | The program does what the four lecture steps describe | Functionality |
| CN-002 | S01 | Tokens and cookies never reach the repository | Functionality (security) |
| CN-003 | S02 | Code is readable and uses the assignment's function names | Usability |
| CN-004 | S02 | The README tells how to set up the `.venv`, run and test | Usability, Supportability |
| CN-005 | S03 | The repository states clearly what it is, with a description and topics | Usability |
| CN-006 | S03 | No more runtime dependencies than needed | Supportability |
## Communication Requirements
| ID | Channel | Frequency | Deliverable | Phase / Milestone |
| --- | --- | --- | --- | --- |
| C1 | Chat with S01 | At plan acceptance and at the end of the run | Plan, run summary | MIL-001, MIL-007 |
| C2 | Pull request | One per milestone | Changes with closed issues | MIL-001 to MIL-007 |
| C3 | README and wiki | Updated in each milestone | Instructions, screenshots, lessons learned | MIL-002 to MIL-007 |
## Conflicting Interests and Mitigations
| Conflict | Stakeholders | Mitigation |
| --- | --- | --- |
| The assignment uses `requests` and `beautifulsoup4`, while S03 wants no runtime dependencies they do not need | S02, S03 | Keep the runtime to the three libraries the assignment needs (`requests`, `beautifulsoup4`, `ytmusicapi`) and state why in the README; development tools stay optional extras |
| S02 wants the assignment's flat function style, while the framework asks for layered clean architecture | S02, S01 | Keep the assignment's function names (`scrape_titles`, `create_playlist`) in the application layer and keep the layers few |
## Traceability Analysis
### Business Goal Alignment
| Stakeholder | Concern | Business Case objective |
| --- | --- | --- |
| S01 | CN-001 | [BC-001] O1, O2, O3, O4 |
| S01 | CN-002 | [BC-001] O2 and the out-of-scope rule on `.env` |
| S02 | CN-003, CN-004 | [BC-001] O5 |
| S03 | CN-005 | [BC-001] O6 |
| S03 | CN-006 | [BC-001] O5, success criterion 5 |
## Sign-Off
| Stakeholder | Date | Note |
| --- | --- | --- |
| S01 | pending | Accepts the plan in chat; the AI acts as stand-in for the review |
---
[BC-001]: ./business-case.md
Submodule
+1
Submodule framework added at 7c2791939c