diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..751d794 --- /dev/null +++ b/.gitignore @@ -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/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..a759dc9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "framework"] + path = framework + url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git diff --git a/docs/artifact-registry.md b/docs/artifact-registry.md new file mode 100644 index 0000000..77caa97 --- /dev/null +++ b/docs/artifact-registry.md @@ -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. diff --git a/docs/business-case.md b/docs/business-case.md new file mode 100644 index 0000000..56f0bc6 --- /dev/null +++ b/docs/business-case.md @@ -0,0 +1,138 @@ +# 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 | [01e016e] | + +--- + +## 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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/milestones/mil-001-planning-baseline.md b/docs/milestones/mil-001-planning-baseline.md new file mode 100644 index 0000000..de6e66c --- /dev/null +++ b/docs/milestones/mil-001-planning-baseline.md @@ -0,0 +1,70 @@ +# 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 | [01e016e] | + +--- + +## 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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/milestones/mil-002-project-scaffold.md b/docs/milestones/mil-002-project-scaffold.md new file mode 100644 index 0000000..fbf70cc --- /dev/null +++ b/docs/milestones/mil-002-project-scaffold.md @@ -0,0 +1,74 @@ +# Milestone 2: Project scaffold + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-002 | +| CrossReference | [BC-001], [MIL-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [01e016e] | + +--- + +## Purpose + +Decide that the repository can be installed, tested and documented by a participant who has never seen it. + +## Deliverable + +A project skeleton with `pyproject.toml`, `.gitignore`, `constants.py`, `Doxyfile`, a passing smoke test, and a `README.md` from the framework template with `.venv` instructions. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `python -m venv .venv`, `python -m pip install --upgrade pip` and `python -m pip install -e .[dev]` succeed on Python 3.13 | All three succeed | Any fails | +| 2 | `python -m pytest` passes | Exit code 0 | Failures | +| 3 | `bash framework/scripts/check-readme.sh` reports no finding | Exit code 0 | Findings | +| 4 | `.env` and `browser.json` are ignored by git | `git check-ignore` lists both | Either is tracked | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| [MIL-001] | Its pull request is merged before this milestone starts | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| [BC-001] O5; success criteria 2 and 5 | [BC-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 (the AI acts as stand-in) | + +## Target Date + +2026-11-06 — inside the Business Case window 2026-10-28 to 2026-11-30; branch `mil-002-project-scaffold`. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Create pyproject and package layout | Add `pyproject.toml` (Python 3.13 or later, runtime dependencies `requests`, `beautifulsoup4`, `ytmusicapi`, optional `dev` extra with pytest) and the `src/` layers `domain`, `application`, `infrastructure`, `presentation` and `tests/` folders, following the framework's Python layout. | No | BC-001 O5 | +| 2 | Add constants module | Create `constants.py` holding the Bakeboard base URL, the CSS selectors, the User-Agent header, the playlist name pattern, the `browser.json` file name and the search filter, so no magic value is in the code. | No | BC-001 O1 | +| 3 | Add Python .gitignore and secret rules | Keep the Python `.gitignore` and ensure `.env`, `browser.json`, `.venv/` and Doxygen output are ignored. | No | BC-001 O5 | +| 4 | Add Doxyfile | Add a `Doxyfile` that documents `src/` from the Doxygen comments, with output to an ignored folder. | No | BC-001 O5 | +| 5 | Write README from the framework template | Write `README.md` from `framework/templates/README-template.md`: create and use `.venv`, `python -m pip install --upgrade pip`, run, test, and the reason for each dependency. | No | BC-001 O5 | +| 6 | Add smoke test and pytest configuration | Add the pytest configuration in `pyproject.toml` and one smoke test that imports the package, so the test command is proven before real code arrives. | No | BC-001 O5 | +| 7 | Open the scaffold pull request | Commit on branch `mil-002-project-scaffold`, run the code review against `qc-programming-python`, push and open the pull request that closes this milestone's issues. | No | BC-001 | + +--- + +[BC-001]: ../business-case.md +[MIL-001]: ./mil-001-planning-baseline.md +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/milestones/mil-003-step-1-scrape-billboard.md b/docs/milestones/mil-003-step-1-scrape-billboard.md new file mode 100644 index 0000000..34f4994 --- /dev/null +++ b/docs/milestones/mil-003-step-1-scrape-billboard.md @@ -0,0 +1,73 @@ +# 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 | [01e016e] | + +--- + +## 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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/milestones/mil-004-step-2-youtube-music-auth.md b/docs/milestones/mil-004-step-2-youtube-music-auth.md new file mode 100644 index 0000000..ab5f8dc --- /dev/null +++ b/docs/milestones/mil-004-step-2-youtube-music-auth.md @@ -0,0 +1,73 @@ +# 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 | [01e016e] | + +--- + +## 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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/milestones/mil-005-step-3-create-playlist.md b/docs/milestones/mil-005-step-3-create-playlist.md new file mode 100644 index 0000000..e929fe6 --- /dev/null +++ b/docs/milestones/mil-005-step-3-create-playlist.md @@ -0,0 +1,72 @@ +# 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 | [01e016e] | + +--- + +## 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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/milestones/mil-006-step-4-search-and-add-songs.md b/docs/milestones/mil-006-step-4-search-and-add-songs.md new file mode 100644 index 0000000..dbfb943 --- /dev/null +++ b/docs/milestones/mil-006-step-4-search-and-add-songs.md @@ -0,0 +1,73 @@ +# 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 | [01e016e] | + +--- + +## 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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/milestones/mil-007-wiki-and-release.md b/docs/milestones/mil-007-wiki-and-release.md new file mode 100644 index 0000000..d01c727 --- /dev/null +++ b/docs/milestones/mil-007-wiki-and-release.md @@ -0,0 +1,75 @@ +# 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 | [01e016e] | + +--- + +## 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 `-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 `-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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/project-plan.md b/docs/project-plan.md new file mode 100644 index 0000000..5351be9 --- /dev/null +++ b/docs/project-plan.md @@ -0,0 +1,105 @@ +# Project Plan + +## Metadata +| Key | Value | +| --- | --- | +| ID | PP-001 | +| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [01e016e] | + +--- + +## Purpose + +This plan schedules the seven milestones of the Musical Time Machine project inside the Business Case window of 2026-10-28 to 2026-11-30 ([BC-001], Constraints). + +## Planning Assumptions + +- Week 1 starts 2026-10-28; the plan ends by 2026-11-30, per the Business Case constraint. +- One milestone is one branch and one pull request; a milestone is as long as its tasks need, between 4 and 9 days. +- Reviews are done by the AI as stand-in for S01 ([SA-001], S01); the language criteria of `QC-LANG-001` that need a person stay open until S01 confirms them. +- Live steps 2 to 4 need S01's `browser.json`; the dates of MIL-004 to MIL-006 assume it exists by 2026-11-14. + +## Gateway Schedule + +| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Planning baseline | [MIL-001] | 2026-10-28 to 2026-11-02 | 2026-11-02 | S01 | none (technical tasks) | Accepted `BC-001` | [Milestone 1](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/264) | +| Project scaffold | [MIL-002] | 2026-11-03 to 2026-11-06 | 2026-11-06 | S01 | none (technical tasks) | A project skeleton with `pyproject | [Milestone 2](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/265) | +| Step 1 - Scrape the Billboard Hot 100 | [MIL-003] | 2026-11-07 to 2026-11-12 | 2026-11-12 | S01 | none (technical tasks) | A command that asks for a date in YYYY-MM-DD format | [Milestone 3](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/266) | +| Step 2 - YouTube Music authentication | [MIL-004] | 2026-11-13 to 2026-11-17 | 2026-11-17 | S01 | none (technical tasks) | A client adapter around `ytmusicapi` that reads `browser | [Milestone 4](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/267) | +| Step 3 - Create the playlist | [MIL-005] | 2026-11-18 to 2026-11-20 | 2026-11-20 | S01 | none (technical tasks) | A `create_playlist` use case that returns the id of an existing or new private playlist | [Milestone 5](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/268) | +| Step 4 - Search and add songs | [MIL-006] | 2026-11-21 to 2026-11-25 | 2026-11-25 | S01 | none (technical tasks) | An `add_songs` use case that searches with the song filter and adds the top result | [Milestone 6](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/269) | +| Wiki and release | [MIL-007] | 2026-11-26 to 2026-11-30 | 2026-11-30 | S01 | none (technical tasks) | Wiki pages in `docs/wiki/` in English | [Milestone 7](https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/milestones/270) | + +```plantuml +@startgantt +Project starts 2026-10-28 +[MIL-001] starts 2026-10-28 and ends 2026-11-02 +[MIL-001 Go/No-Go] happens 2026-11-02 +[MIL-002] starts 2026-11-03 and ends 2026-11-06 +[MIL-002 Go/No-Go] happens 2026-11-06 +[MIL-003] starts 2026-11-07 and ends 2026-11-12 +[MIL-003 Go/No-Go] happens 2026-11-12 +[MIL-004] starts 2026-11-13 and ends 2026-11-17 +[MIL-004 Go/No-Go] happens 2026-11-17 +[MIL-005] starts 2026-11-18 and ends 2026-11-20 +[MIL-005 Go/No-Go] happens 2026-11-20 +[MIL-006] starts 2026-11-21 and ends 2026-11-25 +[MIL-006 Go/No-Go] happens 2026-11-25 +[MIL-007] starts 2026-11-26 and ends 2026-11-30 +[MIL-007 Go/No-Go] happens 2026-11-30 +@endgantt +``` + +## Scope Coverage + +| Business Case scope item | Gateway | +| --- | --- | +| Repository description and topics | [MIL-001] | +| `pyproject.toml`, `.venv` instructions, `constants.py`, Doxygen, README from the template, `.gitignore` | [MIL-002] | +| Scraping of Bakeboard into a list (O1) | [MIL-003] | +| YouTube Music authentication (O2) | [MIL-004] | +| Playlist creation without duplicates (O3) | [MIL-005] | +| Search and add songs (O4) | [MIL-006] | +| Wiki in en, da, ms and the step screenshots (O5) | [MIL-003] to [MIL-007] | + +## Dependencies + +``` +MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005 → MIL-006 → MIL-007 +``` + +A No-Go on a gateway returns it to rework and moves every later date by the rework time; the end date 2026-11-30 moves only if S01 decides so in chat. + +## Plan Risks + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| `browser.json` not available by 2026-11-14 | MIL-004 to MIL-006 cannot be closed | The run stops and reports; tests with fakes are finished so only the live screenshots wait | +| Language criteria need a person | Baseline stays `Go-with-conditions` | Ask S01 to confirm criteria 3, 5 and 9 of `QC-LANG-001` when accepting the plan | +| Bakeboard offline during the live run | Step 1 screenshot delayed | The stored fixture proves the code; the screenshot is taken later | + +## Open Issues + +- The owner of the repository on the git host: the `origin` remote uses `Tirsvad-Udemy-100-days-of-code`, the request names `Tirsvad-Udemy-100_days_of_code`; the remote is used until S01 says otherwise. +- Whether the live steps 2 to 4 can be run depends on `browser.json` from S01. + +--- + +[BC-001]: ./business-case.md +[SA-001]: ./stakeholder-analysis.md +[MIL-001]: ./milestones/mil-001-planning-baseline.md +[MIL-002]: ./milestones/mil-002-project-scaffold.md +[MIL-003]: ./milestones/mil-003-step-1-scrape-billboard.md +[MIL-004]: ./milestones/mil-004-step-2-youtube-music-auth.md +[MIL-005]: ./milestones/mil-005-step-3-create-playlist.md +[MIL-006]: ./milestones/mil-006-step-4-search-and-add-songs.md +[MIL-007]: ./milestones/mil-007-wiki-and-release.md +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/governance.md b/docs/sqa/governance.md new file mode 100644 index 0000000..d7be348 --- /dev/null +++ b/docs/sqa/governance.md @@ -0,0 +1,62 @@ +# 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 | [01e016e] | + +--- + +## 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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-001-bc.md b/docs/sqa/reviews/rc-001-bc.md new file mode 100644 index 0000000..7deea85 --- /dev/null +++ b/docs/sqa/reviews/rc-001-bc.md @@ -0,0 +1,67 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-002-sa.md b/docs/sqa/reviews/rc-002-sa.md new file mode 100644 index 0000000..713ff4a --- /dev/null +++ b/docs/sqa/reviews/rc-002-sa.md @@ -0,0 +1,68 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-003-pp.md b/docs/sqa/reviews/rc-003-pp.md new file mode 100644 index 0000000..2fa9efa --- /dev/null +++ b/docs/sqa/reviews/rc-003-pp.md @@ -0,0 +1,74 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-004-gov.md b/docs/sqa/reviews/rc-004-gov.md new file mode 100644 index 0000000..b37809f --- /dev/null +++ b/docs/sqa/reviews/rc-004-gov.md @@ -0,0 +1,72 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-005-mil-001.md b/docs/sqa/reviews/rc-005-mil-001.md new file mode 100644 index 0000000..f8c86ae --- /dev/null +++ b/docs/sqa/reviews/rc-005-mil-001.md @@ -0,0 +1,65 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-006-mil-002.md b/docs/sqa/reviews/rc-006-mil-002.md new file mode 100644 index 0000000..cc293d3 --- /dev/null +++ b/docs/sqa/reviews/rc-006-mil-002.md @@ -0,0 +1,65 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-007-mil-003.md b/docs/sqa/reviews/rc-007-mil-003.md new file mode 100644 index 0000000..1a65a36 --- /dev/null +++ b/docs/sqa/reviews/rc-007-mil-003.md @@ -0,0 +1,65 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-008-mil-004.md b/docs/sqa/reviews/rc-008-mil-004.md new file mode 100644 index 0000000..b78bcfc --- /dev/null +++ b/docs/sqa/reviews/rc-008-mil-004.md @@ -0,0 +1,65 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-009-mil-005.md b/docs/sqa/reviews/rc-009-mil-005.md new file mode 100644 index 0000000..a848e4b --- /dev/null +++ b/docs/sqa/reviews/rc-009-mil-005.md @@ -0,0 +1,65 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-010-mil-006.md b/docs/sqa/reviews/rc-010-mil-006.md new file mode 100644 index 0000000..dccd7c2 --- /dev/null +++ b/docs/sqa/reviews/rc-010-mil-006.md @@ -0,0 +1,65 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/reviews/rc-011-mil-007.md b/docs/sqa/reviews/rc-011-mil-007.md new file mode 100644 index 0000000..c6bca1a --- /dev/null +++ b/docs/sqa/reviews/rc-011-mil-007.md @@ -0,0 +1,65 @@ +# 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 | [01e016e] | + +--- + +## 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 (`..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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/sqa/traceability-matrix.md b/docs/sqa/traceability-matrix.md new file mode 100644 index 0000000..7b442cf --- /dev/null +++ b/docs/sqa/traceability-matrix.md @@ -0,0 +1,83 @@ +# 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 | [01e016e] | + +--- + +## 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 +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/docs/stakeholder-analysis.md b/docs/stakeholder-analysis.md new file mode 100644 index 0000000..74abeca --- /dev/null +++ b/docs/stakeholder-analysis.md @@ -0,0 +1,83 @@ +# 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 | [01e016e] | + +--- + +## 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 | [01e016e] | Accepts the plan in chat; the AI acts as stand-in for the review | + +--- + +[BC-001]: ./business-case.md +[01e016e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/046-scraping-the-billboard/commit/01e016e15dd93cface4f4ae9e9e99919e0aace2b diff --git a/framework b/framework new file mode 160000 index 0000000..7c27919 --- /dev/null +++ b/framework @@ -0,0 +1 @@ +Subproject commit 7c2791939c42c18ec444bce245e9a3958b242cae