From dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Wed, 28 Oct 2026 13:56:44 +0800 Subject: [PATCH 1/2] Add baseline, project plan and five milestones with reviews --- .gitmodules | 3 + docs/artifact-registry.md | 59 ++++++++ docs/business-case.md | 140 ++++++++++++++++++ docs/milestones/mil-001-repository-setup.md | 74 +++++++++ docs/milestones/mil-002-parse-html.md | 72 +++++++++ docs/milestones/mil-003-hacker-news.md | 74 +++++++++ docs/milestones/mil-004-top-100-movies.md | 74 +++++++++ docs/milestones/mil-005-wiki.md | 72 +++++++++ docs/project-plan.md | 97 ++++++++++++ docs/sqa/reviews/rc-001-business-case.md | 67 +++++++++ .../reviews/rc-002-stakeholder-analysis.md | 68 +++++++++ docs/sqa/reviews/rc-003-project-plan.md | 74 +++++++++ .../rc-004-mil-001-repository-setup.md | 65 ++++++++ docs/sqa/reviews/rc-005-mil-002-parse-html.md | 65 ++++++++ .../sqa/reviews/rc-006-mil-003-hacker-news.md | 65 ++++++++ .../reviews/rc-007-mil-004-top-100-movies.md | 65 ++++++++ docs/sqa/reviews/rc-008-mil-005-wiki.md | 65 ++++++++ docs/stakeholder-analysis.md | 85 +++++++++++ framework | 1 + 19 files changed, 1285 insertions(+) create mode 100644 .gitmodules create mode 100644 docs/artifact-registry.md create mode 100644 docs/business-case.md create mode 100644 docs/milestones/mil-001-repository-setup.md create mode 100644 docs/milestones/mil-002-parse-html.md create mode 100644 docs/milestones/mil-003-hacker-news.md create mode 100644 docs/milestones/mil-004-top-100-movies.md create mode 100644 docs/milestones/mil-005-wiki.md create mode 100644 docs/project-plan.md create mode 100644 docs/sqa/reviews/rc-001-business-case.md create mode 100644 docs/sqa/reviews/rc-002-stakeholder-analysis.md create mode 100644 docs/sqa/reviews/rc-003-project-plan.md create mode 100644 docs/sqa/reviews/rc-004-mil-001-repository-setup.md create mode 100644 docs/sqa/reviews/rc-005-mil-002-parse-html.md create mode 100644 docs/sqa/reviews/rc-006-mil-003-hacker-news.md create mode 100644 docs/sqa/reviews/rc-007-mil-004-top-100-movies.md create mode 100644 docs/sqa/reviews/rc-008-mil-005-wiki.md create mode 100644 docs/stakeholder-analysis.md create mode 160000 framework 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..40740dd --- /dev/null +++ b/docs/artifact-registry.md @@ -0,0 +1,59 @@ +# 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/*.md | 006 | +| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 009 | + +## 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..fa54726 --- /dev/null +++ b/docs/business-case.md @@ -0,0 +1,140 @@ +# 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 | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Executive Summary + +Day 45 of the Udemy course "100 Days of Code: The Complete Python Pro Bootcamp" teaches web scraping with Requests and BeautifulSoup. This project turns the day's assignment into a small, readable and tested Python repository: parsing a local HTML file, scraping the Hacker News front page, and scraping Empire's "100 Greatest Movies" list into a numbered `movies.txt`. The repository is documented with a README and a three-language wiki (English, Danish, Bahasa Malaysia) that shows a screenshot per lecture step and explains what each step taught. + +## Methodological and Standards Foundation + +The project follows the SQA and QC framework mounted at `framework/` (plan-first gate, one reviewed artifact per step) and Larman's *Applying UML and Patterns* where a model is needed. Product quality is described with ISO/IEC 25010:2023 characteristics. Source code follows the `coding-conventions` (Python) and `clean-architecture` skills, with Doxygen comments in the source. + +## Problem Statement + +- The course assignment ships only a stub (`main.py`) and a sample HTML file, so every participant ends with a throw-away script that is hard to run, test or compare. +- A solution that only works against a live site breaks when the site changes; the assignment therefore pins an Internet Archive snapshot. +- Course lessons give no written record of what each step taught, which makes later review difficult. + +## Business Opportunity + +A clean reference repository lets the course participant revisit the lessons, lets other coursists compare solutions, and lets GitHub visitors find a small, dependency-light scraping example with tests and multi-language documentation. + +## Objectives + +1. O1: Deliver the three lecture exercises (parse HTML, Hacker News, 100 movies) as importable Python functions that keep the assignment's names. +2. O2: Generate `movies.txt` with the movies numbered `1) Title` in ascending order from the Wayback Machine snapshot (alternative: the live Empire URL). +3. O3: Provide tests with pytest that run offline against saved fixtures. +4. O4: Provide a README with set-up of a local `.venv`, how to run the project and the tests. +5. O5: Provide a wiki in English, Danish and Bahasa Malaysia with one screenshot and one "what we gained" explanation per lecture step. +6. O6: Set the repository description and topics, and install the shared CI workflows of `TirSystem/github-action`. + +## Scope + +### In Scope + +- Python package under `src/`, tests under `tests/`, documents under `docs/`. +- `pyproject.toml`, `constants.py`, Python `.gitignore`, `Doxyfile`, Doxygen comments. +- Lecture steps: parsing HTML and making soup, finding and selecting elements, scraping Hacker News, scraping ethics note, 100 movies. +- README from the framework template; wiki pages in en, da and ms; screenshots per step. +- Repository description and topics on the git host; workflows for quality checks, English comments, code metrics, wiki publishing and milestone publishing. + +### Out of Scope + +- Scraping behind authentication or of copyrighted content beyond the course list titles. +- A graphical or web interface. +- Any use of the credentials in `.env` inside the project (personal use only, never imported, tested or committed). +- Runtime dependencies other than those the assignment needs (`requests`, `beautifulsoup4`). + +## Expected Benefits + +### Tangible Benefits + +- A runnable, tested repository with a generated `movies.txt`. +- A wiki in three languages that documents every lecture step with screenshots. +- CI evidence (lint, type check, tests) on every pull request. + +### Intangible Benefits + +- Faster revision of the Day 45 material. +- A reusable pattern for later "100 Days" projects. + +## Strategic Alignment + +The project supports the participant's goal of completing the bootcamp with documented, reviewable work, and the framework's goal of exercising the SQA and QC process on a real, small project. + +## Success Criteria + +| # | Criterion | Target | Measure | +| --- | --- | --- | --- | +| 1 | Tests pass offline | 100 % of pytest tests green | `python -m pytest` in CI and locally | +| 2 | `movies.txt` complete | 100 numbered lines, ascending | test on the generated file | +| 3 | Wiki completeness | every page exists in en, da and ms | `check-languages` style page-set comparison | +| 4 | Screenshot coverage | one screenshot per lecture step in README and each wiki language | review count | +| 5 | Runtime dependencies | only `requests` and `beautifulsoup4` | `pyproject.toml` review | +| 6 | Repository metadata | description and at least 5 topics set | host API read-back | + +## Risks + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| Live sites change markup (Hacker News, Empire) | Scrapers return nothing | Parse functions take HTML text; tests use saved fixtures; Wayback URL pinned | +| Wayback Machine unavailable | Cannot fetch the list | Fall back to the live Empire URL named in the request | +| Scraping too often loads a server | Unethical use | One request per run, a `User-Agent`, respect `robots.txt`, no loops | +| Token in `.env` leaks | Account compromise | `.env` is git-ignored, never imported; tokens are only read by shell commands for the git host API | +| Translations drift from English | Inconsistent wiki | English is authoritative; same page set checked per pull request | +| Git host repository name differs from the remote (`Tirsvad-Udemy-100_days_of_code` vs `Tirsvad-Udemy-100-days-of-code/045-scrape-movies`) | Metadata set on the wrong repository | Confirm the target before the API call (see Open Issues in the Project Plan) | + +## Assumptions + +- Python 3.13 or newer is installed; `venv` is available. +- The git host `git.tirsystem.com` is reachable and the token in `.env` is valid. +- S01 is Product Owner, developer and reviewer; in autonomous mode the AI acts as the stand-in reviewer and records it. +- The runners of `git.tirsystem.com` are available for the workflows. + +## Constraints + +- Python greater than 3.13 (3.13 or newer), `venv`, `pytest`, `pyproject.toml`, constants in `constants.py`. +- Folder structure `src/`, `tests/`, `docs/`. +- One branch and one pull request per milestone. +- No attribution lines in commit messages or pull request descriptions. +- Do not edit `framework/`. + +## Cost–Benefit Assessment + +| Costs | Benefits | +| --- | --- | +| Author time of S01 for plan acceptance and review of the summary | Reusable, tested reference repository | +| Runner minutes for CI | Automatic quality evidence | +| Translation effort for da and ms | Documentation readable by more coursists | + +The assessment is qualitative: the project is a learning exercise with no revenue. + +## Stakeholders + +| Stakeholder ID (SA) | Interest in this project | +| --- | --- | +| S01 | Completes and reviews the assignment; owns the product | +| S02 | Reads, runs and compares the code | +| S03 | Finds the repository by description and topics and judges it by README | + +## Recommendation + +Proceed — the scope is small, the inputs are known, and the process is exercised end to end. + +--- + +[SA-001]: ./stakeholder-analysis.md diff --git a/docs/milestones/mil-001-repository-setup.md b/docs/milestones/mil-001-repository-setup.md new file mode 100644 index 0000000..4bbb29e --- /dev/null +++ b/docs/milestones/mil-001-repository-setup.md @@ -0,0 +1,74 @@ +# Repository Setup and Tooling + +## 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 | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Purpose + +Decide whether the repository is ready to hold code: metadata, project configuration, documentation entry points and CI are in place so the lecture milestones can build on them. + +## Deliverable + +Repository with description and topics, `pyproject.toml`, `.gitignore`, `Doxyfile`, README, `src/` and `tests/` skeleton with `constants.py` and a passing smoke test, and installed workflows. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `python -m pytest` passes in a fresh `.venv` created as the README says | Met | Not met | +| 2 | `pyproject.toml` requires Python 3.13 or newer and lists only `requests` and `beautifulsoup4` as runtime dependencies | Met | Not met | +| 3 | Repository description and at least five topics are read back from the host | Met | Not met | +| 4 | README follows the framework template and passes `check-readme.sh` | Met | Not met | +| 5 | Workflows from `TirSystem/github-action` are installed and parse | Met | Not met | +| 6 | `.env` is git-ignored and nothing in the project reads it | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| None (first milestone) | Builds on it | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O3, O4, O6; criteria 1, 5, 6 | [BC-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-10-30 — no hard deadline in the Business Case; dates follow the order of the milestones. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Set repository description and topics | Set a description and topics (python, web-scraping, beautifulsoup, requests, 100-days-of-code, udemy, pytest) through the Gitea API using the token from `.env` read by the shell only. Confirm the target repository first because the requested name differs from the origin remote. | No | | +| 2 | Add pyproject.toml, .gitignore and constants.py | Create `pyproject.toml` (Python >=3.13, `requests`, `beautifulsoup4`, optional `dev` group with pytest, ruff, mypy), a Python `.gitignore` that also ignores `.env`, and `src/scrape_movies/constants.py` for all constants. | No | | +| 3 | Add Doxyfile and Doxygen comment convention | Add a `Doxyfile` that reads `src/` and a short note on the Doxygen comment style used in the source so S02 can generate the API pages. | No | | +| 4 | Write README from the framework template | Start `README.md` from `framework/templates/README-template.md` with the `.venv` creation, `python -m pip install --upgrade pip`, install, run and test instructions. Lecture sections and screenshots are added by later milestones. | No | | +| 5 | Install workflows from TirSystem/github-action | Install quality checks, English comments, code metrics and milestone publishing as thin callers under `.gitea/workflows/`. Wiki publishing is scoped and needs no file; verify against the adoption rules and record the decision. | No | | +| 6 | Add test scaffold and smoke test | Add `tests/` with a pytest configuration in `pyproject.toml` and one smoke test that imports the package, so CI has a green baseline. | No | | +| 7 | Install git hooks and plan gate | Run `install-git-hooks.sh --enable-plan-gate` and record the AI prompts of the session in `docs/ai-prompts/session-001/` as the prompt-log process says. | No | | + +--- + +[BC-001]: ../business-case.md diff --git a/docs/milestones/mil-002-parse-html.md b/docs/milestones/mil-002-parse-html.md new file mode 100644 index 0000000..d498783 --- /dev/null +++ b/docs/milestones/mil-002-parse-html.md @@ -0,0 +1,72 @@ +# Parsing HTML and Making Soup + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-002 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Purpose + +Decide whether the first lecture steps (parsing HTML and making soup, finding and selecting elements) are reproduced, tested and documented. + +## Deliverable + +Module `soup_basics` with functions that parse `website.html` (title, prettify, find_all, find, select_one, select), the sample page as a fixture, tests, and screenshots of each step. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | Every lecture operation (title, string, prettify, find_all, getText, get, find by id and class, select_one, select) has a function and a test | Met | Not met | +| 2 | Tests run offline against `tests/fixtures/website.html` | Met | Not met | +| 3 | All public functions carry Doxygen comments | Met | Not met | +| 4 | One screenshot per lecture step exists under `docs/images/` | Met | Not met | +| 5 | README has a section for this step with its screenshots | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-001 (project configuration and test scaffold) | Builds on it | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O1, O3, O5; criteria 1, 4 | [BC-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-03 — no hard deadline in the Business Case; dates follow the order of the milestones. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Add website.html fixture | Copy the sample page from the course archive to `tests/fixtures/website.html` and expose its path in `constants.py`. | No | | +| 2 | Implement soup creation and tag access | Functions `make_soup`, `get_title`, `prettify_html` using `html.parser`, matching the lecture on creating a soup object, `soup.title` and `prettify`. | No | | +| 3 | Implement find and select helpers | Functions for `find_all` over anchors with text and `href`, `find` by id and by class (using `class_`), and CSS selectors with `select_one` and `select`. | No | | +| 4 | Write tests for the parsing steps | pytest tests for each function against the fixture, covering text, attributes and nested selectors. | No | | +| 5 | Capture screenshots of the parsing steps | Run each step and save a terminal-output screenshot per lecture step in `docs/images/` for README and wiki. GUI-free: images are rendered from the command output, no desktop capture. | No | | +| 6 | Document the parsing steps in README | Add a README section per step with code, expected output and its screenshot. | No | | + +--- + +[BC-001]: ../business-case.md diff --git a/docs/milestones/mil-003-hacker-news.md b/docs/milestones/mil-003-hacker-news.md new file mode 100644 index 0000000..582cee0 --- /dev/null +++ b/docs/milestones/mil-003-hacker-news.md @@ -0,0 +1,74 @@ +# Scraping Hacker News + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-003 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Purpose + +Decide whether scraping a live site is reproduced safely: Hacker News titles, links and upvotes are extracted, the top story found, and the ethics of scraping documented. + +## Deliverable + +Module `hacker_news` with fetch and parse functions, the saved front page as a fixture, tests, ethics note and screenshots of each step. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | Parsing returns titles, links and integer upvotes from the fixture | Met | Not met | +| 2 | The article with the most upvotes is found with `max` | Met | Not met | +| 3 | Fetching sends one request with a `User-Agent` and a timeout; no loops of requests | Met | Not met | +| 4 | Tests run offline | Met | Not met | +| 5 | Ethics and legality notes from the lecture are in README and wiki source text | Met | Not met | +| 6 | One screenshot per lecture step exists under `docs/images/` | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-002 (soup helpers) | Builds on it | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O1, O3, O5; criteria 1, 4 | [BC-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-06 — no hard deadline in the Business Case; dates follow the order of the milestones. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Add fetch function for Hacker News | `fetch_html(url)` using `requests` with a timeout, `User-Agent` and status check; URLs live in `constants.py`. The course mirror and the live site are both named. | No | | +| 2 | Add Hacker News fixture | Save the course mirror page `appbrewery.github.io/news.ycombinator.com` as `tests/fixtures/hacker_news.html` so tests never touch the network. | No | | +| 3 | Extract titles, links and upvotes | Functions returning lists of titles, links and integer scores from the title links and score spans, as in the lecture. | No | | +| 4 | Find the top story by upvotes | `top_story()` using `max` over the scraped rows and a test for ties and an empty page. | No | | +| 5 | Write tests for Hacker News parsing | pytest tests against the fixture, with `requests` patched for fetch tests. | No | | +| 6 | Document ethics and legality of scraping | Summarise the lecture: robots.txt, copyrighted and authenticated data, commercial risk, request frequency. Written in the README in our own words. | No | | +| 7 | Capture screenshots of the Hacker News steps | Save a screenshot per lecture step (page, inspected markup, extracted output, top story) in `docs/images/`. The live pages are opened in the built-in browser pane, not the host desktop. | No | | + +--- + +[BC-001]: ../business-case.md diff --git a/docs/milestones/mil-004-top-100-movies.md b/docs/milestones/mil-004-top-100-movies.md new file mode 100644 index 0000000..85fab64 --- /dev/null +++ b/docs/milestones/mil-004-top-100-movies.md @@ -0,0 +1,74 @@ +# Top 100 Movies Scraper + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-004 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Purpose + +Decide whether the main assignment is met: the Empire list is scraped, reversed to ascending order and written to `movies.txt` as numbered lines. + +## Deliverable + +Module `movies` with `fetch`, `parse_titles`, `format_titles`, `write_movies`, a command-line entry `python -m scrape_movies`, a fixture of the Wayback page, tests, generated `movies.txt` and screenshots. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `movies.txt` has exactly 100 lines in the form `1) Title`, ascending | Met | Not met | +| 2 | The Wayback Machine snapshot is the default URL and the live Empire URL is the documented alternative | Met | Not met | +| 3 | Titles come from `h3` elements with class `title` | Met | Not met | +| 4 | Tests run offline against the fixture | Met | Not met | +| 5 | Running the module twice produces identical output | Met | Not met | +| 6 | One screenshot per lecture step exists under `docs/images/` | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-003 (fetch helper) | Builds on it | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O1, O2, O3, O5; criteria 1, 2, 4 | [BC-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-10 — no hard deadline in the Business Case; dates follow the order of the milestones. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Fetch the Empire page | Use the shared `fetch_html` with the Wayback URL from the assignment as default and the live Empire URL as a selectable alternative, both in `constants.py`. | No | | +| 2 | Parse movie titles | `parse_titles(html)` selecting `h3.title` and returning the names in page order. | No | | +| 3 | Reverse and number the titles | `format_titles(titles)` reverses the descending page order and prefixes `1) ` to `100) ` as the assignment shows. | No | | +| 4 | Write movies.txt | `write_movies(lines, path)` writing UTF-8 with a trailing newline; a `__main__` entry runs fetch, parse, format, write. | No | | +| 5 | Add Wayback fixture and tests | Save the snapshot as `tests/fixtures/empire_best_movies.html` and test parse, format and write offline, including that 100 titles are found. | No | | +| 6 | Generate and commit movies.txt | Run the program once against the pinned snapshot and keep the produced `movies.txt` as the example result. | No | | +| 7 | Capture screenshots of the movie steps | Save screenshots of the source page, the inspected `h3.title`, the printed list and `movies.txt` in `docs/images/`. | No | | + +--- + +[BC-001]: ../business-case.md diff --git a/docs/milestones/mil-005-wiki.md b/docs/milestones/mil-005-wiki.md new file mode 100644 index 0000000..c57eda0 --- /dev/null +++ b/docs/milestones/mil-005-wiki.md @@ -0,0 +1,72 @@ +# Wiki in Three Languages + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-005 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Purpose + +Decide whether the wiki is complete: every page exists in English, Danish and Bahasa Malaysia with a screenshot and a "what we gained" explanation for each lecture step. + +## Deliverable + +Pages under `docs/wiki/` in `en`, `da` and `ms`, a sidebar listing the three languages, README screenshot sections, and the wiki publication setup. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | Every English page has a `-da` and a `-ms` page (same page set) | Met | Not met | +| 2 | Each lecture step page has a screenshot and a "What we gained" section in all three languages | Met | Not met | +| 3 | Each page starts with the language switch line and `_Sidebar.md` lists all languages | Met | Not met | +| 4 | README shows a screenshot for every lecture step | Met | Not met | +| 5 | Code blocks, commands, file names and IDs stay in English | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-004 (all screenshots exist) | Builds on it | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O4, O5; criteria 3, 4 | [BC-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-14 — no hard deadline in the Business Case; dates follow the order of the milestones. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Write English wiki pages | Home, Setup, one page per lecture step (parse HTML, find and select, Hacker News, ethics, 100 movies) and Gains, each with its screenshot and a "What we gained" section. English is authoritative. | No | | +| 2 | Translate the wiki to Danish | Page for page `-da` versions of every English page, following `framework/process/wiki.md`. | No | | +| 3 | Translate the wiki to Bahasa Malaysia | Page for page `-ms` versions of every English page. The wiki process names BCP 47 codes, so `ms` is used. | No | | +| 4 | Add wiki sidebar and footer | `_Sidebar.md` and `_Footer.md` listing English, Dansk and Bahasa Melayu pages. | No | | +| 5 | Complete README screenshots and wiki links | Make sure every lecture step in README has its screenshot and a link to its wiki page in all three languages. | No | | +| 6 | Check wiki page set and publication | Add a test that compares the page sets of the three languages, and confirm the wiki publishes through the scoped workflow after merge. | No | | + +--- + +[BC-001]: ../business-case.md diff --git a/docs/project-plan.md b/docs/project-plan.md new file mode 100644 index 0000000..4a20d66 --- /dev/null +++ b/docs/project-plan.md @@ -0,0 +1,97 @@ +# Project Plan + +## Metadata +| Key | Value | +| --- | --- | +| ID | PP-001 | +| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Purpose + +Schedule the five gateways that deliver the Day 45 scraping repository. The Business Case sets no deadline, so the plan only fixes the order and a working window per gateway. + +## Planning Assumptions + +- Week 1 starts 2026-10-28; the plan ends by 2026-11-14 (no hard deadline in [BC-001]). +- Phase length: two to four days; each phase is one branch and one pull request. +- Communication follows [SA-001]: plan acceptance in chat, one pull request per milestone, run summary at the end. +- Autonomous mode: S01 accepts this plan once; the AI then runs every gateway and acts as stand-in reviewer, recorded in each RC record. + +## Gateway Schedule + +| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Repository Setup | [MIL-001] | 2026-10-28 to 2026-10-30 | 2026-10-30 | S01 | none (technical tasks) | Repository metadata, configuration, README, CI | not yet synced | +| Parsing HTML | [MIL-002] | 2026-10-31 to 2026-11-03 | 2026-11-03 | S01 | none (technical tasks) | `soup_basics` module, tests, screenshots | not yet synced | +| Hacker News | [MIL-003] | 2026-11-04 to 2026-11-06 | 2026-11-06 | S01 | none (technical tasks) | `hacker_news` module, ethics note, screenshots | not yet synced | +| Top 100 Movies | [MIL-004] | 2026-11-07 to 2026-11-10 | 2026-11-10 | S01 | none (technical tasks) | `movies` module and `movies.txt`, screenshots | not yet synced | +| Wiki | [MIL-005] | 2026-11-11 to 2026-11-14 | 2026-11-14 | S01 | none (technical tasks) | Wiki in en, da, ms | not yet synced | + +```plantuml +@startgantt +Project starts 2026-10-28 +[Repository Setup] starts 2026-10-28 and ends 2026-10-30 +[Parsing HTML] starts 2026-10-31 and ends 2026-11-03 +[Hacker News] starts 2026-11-04 and ends 2026-11-06 +[Top 100 Movies] starts 2026-11-07 and ends 2026-11-10 +[Wiki] starts 2026-11-11 and ends 2026-11-14 +[MIL-001 Go/No-Go] happens 2026-10-30 +[MIL-002 Go/No-Go] happens 2026-11-03 +[MIL-003 Go/No-Go] happens 2026-11-06 +[MIL-004 Go/No-Go] happens 2026-11-10 +[MIL-005 Go/No-Go] happens 2026-11-14 +@endgantt +``` + +## Scope Coverage + +| Business Case scope item | Gateway | +| --- | --- | +| `pyproject.toml`, `.gitignore`, `Doxyfile`, `constants.py`, README skeleton | [MIL-001] | +| Repository description and topics, workflows | [MIL-001] | +| Parsing HTML, finding and selecting elements | [MIL-002] | +| Hacker News scraping and the ethics note | [MIL-003] | +| 100 movies and `movies.txt` | [MIL-004] | +| Wiki in en, da, ms and screenshots per step | [MIL-005] (screenshots are taken in MIL-002 to MIL-004) | + +## Dependencies + +``` +MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005 +``` + +A No-Go on a gateway is fixed and re-reviewed; after three failed rounds the run stops and reports (AGENTS.md). Later dates move by the same amount; S01 decides a move of the end date. + +## Plan Risks + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| Target repository name differs from the one named in the request | Metadata set on the wrong repository | Resolved: S01 chose the origin remote at plan acceptance | +| Reusable workflow path differs (`TirSystem/git-workflows` in the template, `TirSystem/github-action` named in the request) | Workflow calls fail | Verify the path on the host in MIL-001 before installing | +| Danish and Malay translation quality | Review finds errors | Keep sentences short; English is authoritative | +| Network access to Wayback during the run | Fixture cannot be saved | Retry once; alternative live Empire URL | + +## Open Issues + +- Target repository: S01 chose the origin remote (`Tirsvad-Udemy-100-days-of-code/045-scrape-movies`) when accepting the plan; the named `Tirsvad-Udemy-100_days_of_code` is not used. +- Wiki publication is a scoped workflow in `TirSystem/github-action` (no file needed) while the framework template `publish-wiki.yml` also exists; MIL-001 records which one applies. +- "Screenshot per lecture step" is planned as rendered terminal output and browser-pane captures, never host desktop capture. + +--- + +[BC-001]: ./business-case.md +[SA-001]: ./stakeholder-analysis.md +[MIL-001]: ./milestones/mil-001-repository-setup.md +[MIL-002]: ./milestones/mil-002-parse-html.md +[MIL-003]: ./milestones/mil-003-hacker-news.md +[MIL-004]: ./milestones/mil-004-top-100-movies.md +[MIL-005]: ./milestones/mil-005-wiki.md diff --git a/docs/sqa/reviews/rc-001-business-case.md b/docs/sqa/reviews/rc-001-business-case.md new file mode 100644 index 0000000..9203be3 --- /dev/null +++ b/docs/sqa/reviews/rc-001-business-case.md @@ -0,0 +1,67 @@ +# Review of BC-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-001 | +| CrossReference | [BC-001], [QC-BC-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [BC-001] +- Checklist used: [QC-BC-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (stand-in S01 reads the language and knows the domain) +- 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 states why (learning project, no revenue). | +| 2 | Risks are identified with documented impact and mitigation | Pass | six risks, each with impact and mitigation. | +| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | six success criteria with numeric or checkable targets and a measure. | +| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | In Scope and Out of Scope subsections exist. | +| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | Stakeholders table cites S01, S02, S03 only. | +| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | foundation names the framework, Larman, 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 is "Proceed" with one sentence. | + +## 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` 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 | Whole content is English. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English for BC and PP, IT Professional English for SA and MIL, per the registry; MIL/BC/PP keep short, decision-oriented sentences. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No `DICT` exists; terms are standard IT terms (scraping, fixture, workflow). No synonyms found for them. | +| 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 `*.en.md` or other twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version in this language; no change since an accepted version. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Stand-in for S01 (Product Owner, developer) confirms the IT terms; not independent (autonomous mode). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, SA, MIL, CI, BC) are defined in the framework and used consistently; PO is spelled out in the SA. | + +## Overall Verdict + +Go — no Mandatory criterion fails and none is Pending. The review is a stand-in review by the author's tool for S01 in autonomous mode and is not independent; S01 challenges it in the run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | 2026-10-28 | + +--- + +[BC-001]: ../../business-case.md +[QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-002-stakeholder-analysis.md b/docs/sqa/reviews/rc-002-stakeholder-analysis.md new file mode 100644 index 0000000..6980bd9 --- /dev/null +++ b/docs/sqa/reviews/rc-002-stakeholder-analysis.md @@ -0,0 +1,68 @@ +# Review of SA-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-002 | +| CrossReference | [SA-001], [QC-SA-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [SA-001] +- Checklist used: [QC-SA-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (stand-in S01 reads the language and knows the domain) +- 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 | S01 to S03 each 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, stable, used by BC, PP and MIL documents. | +| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | role, organization, power and interest given as levels. | +| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | four communication rows tied to milestones. | +| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | three conflicts, each with a mitigation. | +| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | traceability table maps each concern to BC-001 objectives O1 to O6. | +| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | CN-001 to CN-009 each mapped to a FURPS+ attribute. | +| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | short tables, plain wording. | +| 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-009 stable and name the stakeholder who raised them. | + +## 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` 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 | Whole content is English. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English for BC and PP, IT Professional English for SA and MIL, per the registry; MIL/BC/PP keep short, decision-oriented sentences. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No `DICT` exists; terms are standard IT terms (scraping, fixture, workflow). No synonyms found for them. | +| 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 `*.en.md` or other twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version in this language; no change since an accepted version. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Stand-in for S01 (Product Owner, developer) confirms the IT terms; not independent (autonomous mode). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, SA, MIL, CI, BC) are defined in the framework and used consistently; PO is spelled out in the SA. | + +## Overall Verdict + +Go — no Mandatory criterion fails and none is Pending. The review is a stand-in review by the author's tool for S01 in autonomous mode and is not independent; S01 challenges it in the run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | 2026-10-28 | + +--- + +[SA-001]: ../../stakeholder-analysis.md +[QC-SA-001]: ../../../framework/qc/artifacts/qc-stakeholder-analysis.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-003-project-plan.md b/docs/sqa/reviews/rc-003-project-plan.md new file mode 100644 index 0000000..4194015 --- /dev/null +++ b/docs/sqa/reviews/rc-003-project-plan.md @@ -0,0 +1,74 @@ +# Review of PP-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-003 | +| CrossReference | [PP-001], [QC-PP-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [PP-001] +- Checklist used: [QC-PP-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (stand-in S01 reads the language and knows the domain) +- 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 | start 2026-10-28, end 2026-11-14; the Business Case constraint is no hard deadline plus the technical constraints, quoted in Assumptions. | +| 2 | Every milestone or gateway is listed once with its document, decision date and owner | Pass | five gateways, each once, with document, 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 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 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-005 is acyclic and matches the order. | +| 6 | The plan states what happens to later gateways and to the end date when a gateway is No-Go | Pass | Dependencies says later dates move and S01 decides the end date. | +| 7 | Owners, reviewers and escalation roles use Stakeholder Analysis IDs and match the governance RACI | N-A | owners are S01; no `GOV` document exists yet, so there is no RACI to cross-check. | +| 8 | Planning assumptions are listed with their source, and a changed baseline is recorded with its reason | Pass | assumptions listed with source; no re-baseline yet. | +| 9 | Plan risks are listed with impact and a mitigation, and trace to Business Case risks where they come from there | Pass | four plan risks with mitigation; the Wayback risk traces to the BC live-site risk. | +| 10 | Open issues are listed, and none contradicts a statement elsewhere in the plan | Pass | open issues listed; the repository question was answered by S01 in chat and is recorded in the milestone tasks. | +| 11 | Each gateway's main deliverable is stated and matches the deliverable of its `MIL-*` document | Pass | deliverables match the MIL Deliverable sections in substance. | +| 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 | table, Gantt and dependency chain agree. | +| 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 | single `project-plan.md`; Version History kept. | + +## 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` 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 | Whole content is English. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English for BC and PP, IT Professional English for SA and MIL, per the registry; MIL/BC/PP keep short, decision-oriented sentences. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No `DICT` exists; terms are standard IT terms (scraping, fixture, workflow). No synonyms found for them. | +| 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 `*.en.md` or other twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version in this language; no change since an accepted version. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Stand-in for S01 (Product Owner, developer) confirms the IT terms; not independent (autonomous mode). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, SA, MIL, CI, BC) are defined in the framework and used consistently; PO is spelled out in the SA. | + +## Overall Verdict + +Go — no Mandatory criterion fails and none is Pending. The review is a stand-in review by the author's tool for S01 in autonomous mode and is not independent; S01 challenges it in the run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | 2026-10-28 | + +--- + +[PP-001]: ../../project-plan.md +[QC-PP-001]: ../../../framework/qc/artifacts/qc-project-plan.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-004-mil-001-repository-setup.md b/docs/sqa/reviews/rc-004-mil-001-repository-setup.md new file mode 100644 index 0000000..083dd1f --- /dev/null +++ b/docs/sqa/reviews/rc-004-mil-001-repository-setup.md @@ -0,0 +1,65 @@ +# Review of MIL-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-004 | +| CrossReference | [MIL-001], [QC-MIL-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-001] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (stand-in S01 reads the language and knows the domain) +- 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 the concrete output. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | criteria are checkable by a command, a file or a read-back. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor (or none for MIL-001). | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to BC-001 objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and Approving reviewer are S01; the approver is the same person, so the review is a stand-in and recorded as not independent. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside the plan window and BC-001 has no earlier deadline. | + +## 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` 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 | Whole content is English. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English for BC and PP, IT Professional English for SA and MIL, per the registry; MIL/BC/PP keep short, decision-oriented sentences. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No `DICT` exists; terms are standard IT terms (scraping, fixture, workflow). No synonyms found for them. | +| 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 `*.en.md` or other twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version in this language; no change since an accepted version. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Stand-in for S01 (Product Owner, developer) confirms the IT terms; not independent (autonomous mode). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, SA, MIL, CI, BC) are defined in the framework and used consistently; PO is spelled out in the SA. | + +## Overall Verdict + +Go — no Mandatory criterion fails and none is Pending. The review is a stand-in review by the author's tool for S01 in autonomous mode and is not independent; S01 challenges it in the run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | 2026-10-28 | + +--- + +[MIL-001]: ../../milestones/mil-001-repository-setup.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-005-mil-002-parse-html.md b/docs/sqa/reviews/rc-005-mil-002-parse-html.md new file mode 100644 index 0000000..532274d --- /dev/null +++ b/docs/sqa/reviews/rc-005-mil-002-parse-html.md @@ -0,0 +1,65 @@ +# Review of MIL-002 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-005 | +| CrossReference | [MIL-002], [QC-MIL-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-002] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (stand-in S01 reads the language and knows the domain) +- 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 the concrete output. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | criteria are checkable by a command, a file or a read-back. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor (or none for MIL-001). | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to BC-001 objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and Approving reviewer are S01; the approver is the same person, so the review is a stand-in and recorded as not independent. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside the plan window and BC-001 has no earlier deadline. | + +## 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` 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 | Whole content is English. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English for BC and PP, IT Professional English for SA and MIL, per the registry; MIL/BC/PP keep short, decision-oriented sentences. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No `DICT` exists; terms are standard IT terms (scraping, fixture, workflow). No synonyms found for them. | +| 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 `*.en.md` or other twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version in this language; no change since an accepted version. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Stand-in for S01 (Product Owner, developer) confirms the IT terms; not independent (autonomous mode). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, SA, MIL, CI, BC) are defined in the framework and used consistently; PO is spelled out in the SA. | + +## Overall Verdict + +Go — no Mandatory criterion fails and none is Pending. The review is a stand-in review by the author's tool for S01 in autonomous mode and is not independent; S01 challenges it in the run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | 2026-10-28 | + +--- + +[MIL-002]: ../../milestones/mil-002-parse-html.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-006-mil-003-hacker-news.md b/docs/sqa/reviews/rc-006-mil-003-hacker-news.md new file mode 100644 index 0000000..7bb4b3d --- /dev/null +++ b/docs/sqa/reviews/rc-006-mil-003-hacker-news.md @@ -0,0 +1,65 @@ +# Review of MIL-003 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-006 | +| CrossReference | [MIL-003], [QC-MIL-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-003] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (stand-in S01 reads the language and knows the domain) +- 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 the concrete output. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | criteria are checkable by a command, a file or a read-back. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor (or none for MIL-001). | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to BC-001 objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and Approving reviewer are S01; the approver is the same person, so the review is a stand-in and recorded as not independent. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside the plan window and BC-001 has no earlier deadline. | + +## 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` 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 | Whole content is English. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English for BC and PP, IT Professional English for SA and MIL, per the registry; MIL/BC/PP keep short, decision-oriented sentences. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No `DICT` exists; terms are standard IT terms (scraping, fixture, workflow). No synonyms found for them. | +| 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 `*.en.md` or other twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version in this language; no change since an accepted version. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Stand-in for S01 (Product Owner, developer) confirms the IT terms; not independent (autonomous mode). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, SA, MIL, CI, BC) are defined in the framework and used consistently; PO is spelled out in the SA. | + +## Overall Verdict + +Go — no Mandatory criterion fails and none is Pending. The review is a stand-in review by the author's tool for S01 in autonomous mode and is not independent; S01 challenges it in the run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | 2026-10-28 | + +--- + +[MIL-003]: ../../milestones/mil-003-hacker-news.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-007-mil-004-top-100-movies.md b/docs/sqa/reviews/rc-007-mil-004-top-100-movies.md new file mode 100644 index 0000000..369acf6 --- /dev/null +++ b/docs/sqa/reviews/rc-007-mil-004-top-100-movies.md @@ -0,0 +1,65 @@ +# Review of MIL-004 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-007 | +| CrossReference | [MIL-004], [QC-MIL-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-004] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (stand-in S01 reads the language and knows the domain) +- 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 the concrete output. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | criteria are checkable by a command, a file or a read-back. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor (or none for MIL-001). | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to BC-001 objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and Approving reviewer are S01; the approver is the same person, so the review is a stand-in and recorded as not independent. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside the plan window and BC-001 has no earlier deadline. | + +## 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` 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 | Whole content is English. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English for BC and PP, IT Professional English for SA and MIL, per the registry; MIL/BC/PP keep short, decision-oriented sentences. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No `DICT` exists; terms are standard IT terms (scraping, fixture, workflow). No synonyms found for them. | +| 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 `*.en.md` or other twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version in this language; no change since an accepted version. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Stand-in for S01 (Product Owner, developer) confirms the IT terms; not independent (autonomous mode). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, SA, MIL, CI, BC) are defined in the framework and used consistently; PO is spelled out in the SA. | + +## Overall Verdict + +Go — no Mandatory criterion fails and none is Pending. The review is a stand-in review by the author's tool for S01 in autonomous mode and is not independent; S01 challenges it in the run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | 2026-10-28 | + +--- + +[MIL-004]: ../../milestones/mil-004-top-100-movies.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-008-mil-005-wiki.md b/docs/sqa/reviews/rc-008-mil-005-wiki.md new file mode 100644 index 0000000..2133c15 --- /dev/null +++ b/docs/sqa/reviews/rc-008-mil-005-wiki.md @@ -0,0 +1,65 @@ +# Review of MIL-005 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-008 | +| CrossReference | [MIL-005], [QC-MIL-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-005] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (stand-in S01 reads the language and knows the domain) +- 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 the concrete output. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | criteria are checkable by a command, a file or a read-back. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor (or none for MIL-001). | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to BC-001 objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and Approving reviewer are S01; the approver is the same person, so the review is a stand-in and recorded as not independent. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside the plan window and BC-001 has no earlier deadline. | + +## 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` 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 | Whole content is English. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English for BC and PP, IT Professional English for SA and MIL, per the registry; MIL/BC/PP keep short, decision-oriented sentences. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No `DICT` exists; terms are standard IT terms (scraping, fixture, workflow). No synonyms found for them. | +| 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 `*.en.md` or other twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version in this language; no change since an accepted version. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Stand-in for S01 (Product Owner, developer) confirms the IT terms; not independent (autonomous mode). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, SA, MIL, CI, BC) are defined in the framework and used consistently; PO is spelled out in the SA. | + +## Overall Verdict + +Go — no Mandatory criterion fails and none is Pending. The review is a stand-in review by the author's tool for S01 in autonomous mode and is not independent; S01 challenges it in the run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | 2026-10-28 | + +--- + +[MIL-005]: ../../milestones/mil-005-wiki.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/stakeholder-analysis.md b/docs/stakeholder-analysis.md new file mode 100644 index 0000000..8f94b8d --- /dev/null +++ b/docs/stakeholder-analysis.md @@ -0,0 +1,85 @@ +# 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 | S01 (AI as stand-in, autonomous mode) | Initial version | pending | + +--- + +## Purpose + +Identify the people the repository serves and what each needs, so that the Business Case objectives, milestones and documents can name an owner, reviewer and audience. Method: power/interest grid with a FURPS+ mapping of each concern. + +## 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, developer and reviewer | Tirsvad | HIGH | HIGH | Manage Closely | Finish the Day 45 assignment with clean, documented and reviewed work | +| S02 | Udemy coursists | Fellow participants of the course | Udemy community | LOW | HIGH | Keep Informed | Readable, runnable code with the assignment's function names and README instructions to run it | +| S03 | GitHub viewers | Visitors browsing for ideas | Public | LOW | LOW | Monitor | A clear repository description, topics and README, and no runtime dependencies beyond the need | + +## Power/Interest Classification Rationale + +- **Manage Closely (S01):** decides scope, accepts the plan, reviews the summary and owns every artifact. +- **Keep Informed (S02):** cannot change the project but depends on the quality of the code and README. +- **Monitor (S03):** casual audience; served by the repository front page only. + +## Primary Concerns and FURPS+ Mapping + +| Concern ID | Stakeholder | Concern | FURPS+ attribute | +| --- | --- | --- | --- | +| CN-001 | S01 | Every lecture step is reproduced and its learning documented | Functionality | +| CN-002 | S01 | Work is traceable: plan, branch and pull request per milestone | Supportability | +| CN-003 | S01 | Personal tokens never enter the project | Functionality (security) | +| CN-004 | S02 | Code is readable and keeps the assignment's function names | Usability | +| CN-005 | S02 | Instructions to create the `.venv`, install and run the tests work as written | Usability | +| CN-006 | S02 | Tests run offline and are deterministic | Reliability | +| CN-007 | S03 | Repository description, topics and README explain the purpose at a glance | Usability | +| CN-008 | S03 | No runtime dependencies beyond what scraping needs | Implementation | +| CN-009 | S01, S02 | Wiki in English, Danish and Bahasa Malaysia with a screenshot per lecture step | Usability | + +## Communication Requirements + +| ID | Channel | Frequency | Deliverable | Phase / Milestone | +| --- | --- | --- | --- | --- | +| C1 | Chat with S01 | At plan acceptance and at the end of the autonomous run | Plan dry run, then run summary with RC verdicts | All | +| C2 | Pull request per milestone | Once per milestone | PR description with `Closes #N` lines | All | +| C3 | README and wiki | On each merge | Instructions, screenshots, lecture learnings | MIL-001 to MIL-005 | +| C4 | Repository description and topics | Once | Metadata on the git host | MIL-001 | + +## Conflicting Interests and Mitigations + +| Conflict | Stakeholders | Mitigation | +| --- | --- | --- | +| S03 wants no dependencies; the assignment needs `requests` and `beautifulsoup4` | S03, S01 | Keep exactly those two runtime dependencies; development tools stay in an optional `dev` group | +| S02 wants assignment names; clean code wants descriptive names | S02, S01 | Keep the assignment names as public functions and add thin, documented helpers | +| Live scraping vs deterministic tests | S02, S01 | Parsing functions take HTML text; tests use saved fixtures | + +## Traceability Analysis + +### Business Goal Alignment + +| Stakeholder | Concern | Business Case objective | +| --- | --- | --- | +| S01 | CN-001 | O1, O2 [BC-001] | +| S01 | CN-002, CN-003 | O6 [BC-001] | +| S02 | CN-004, CN-005, CN-006 | O1, O3, O4 [BC-001] | +| S03 | CN-007, CN-008 | O4, O6 [BC-001] | +| S01, S02 | CN-009 | O5 [BC-001] | + +## Sign-Off + +Reviewer: S01 (decision recorded in the RC record of this document). + +--- + +[BC-001]: ./business-case.md diff --git a/framework b/framework new file mode 160000 index 0000000..7c27919 --- /dev/null +++ b/framework @@ -0,0 +1 @@ +Subproject commit 7c2791939c42c18ec444bce245e9a3958b242cae -- 2.54.0 From b395b572c6c75b0b1bd101a34e253551937b1003 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Wed, 28 Oct 2026 13:56:55 +0800 Subject: [PATCH 2/2] Resolve pending commit links --- docs/business-case.md | 3 ++- docs/milestones/mil-001-repository-setup.md | 3 ++- docs/milestones/mil-002-parse-html.md | 3 ++- docs/milestones/mil-003-hacker-news.md | 3 ++- docs/milestones/mil-004-top-100-movies.md | 3 ++- docs/milestones/mil-005-wiki.md | 3 ++- docs/project-plan.md | 3 ++- docs/sqa/reviews/rc-001-business-case.md | 3 ++- docs/sqa/reviews/rc-002-stakeholder-analysis.md | 3 ++- docs/sqa/reviews/rc-003-project-plan.md | 3 ++- docs/sqa/reviews/rc-004-mil-001-repository-setup.md | 3 ++- docs/sqa/reviews/rc-005-mil-002-parse-html.md | 3 ++- docs/sqa/reviews/rc-006-mil-003-hacker-news.md | 3 ++- docs/sqa/reviews/rc-007-mil-004-top-100-movies.md | 3 ++- docs/sqa/reviews/rc-008-mil-005-wiki.md | 3 ++- docs/stakeholder-analysis.md | 3 ++- 16 files changed, 32 insertions(+), 16 deletions(-) diff --git a/docs/business-case.md b/docs/business-case.md index fa54726..4a28a29 100644 --- a/docs/business-case.md +++ b/docs/business-case.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -138,3 +138,4 @@ Proceed — the scope is small, the inputs are known, and the process is exercis --- [SA-001]: ./stakeholder-analysis.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/milestones/mil-001-repository-setup.md b/docs/milestones/mil-001-repository-setup.md index 4bbb29e..4d27188 100644 --- a/docs/milestones/mil-001-repository-setup.md +++ b/docs/milestones/mil-001-repository-setup.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -72,3 +72,4 @@ Repository with description and topics, `pyproject.toml`, `.gitignore`, `Doxyfil --- [BC-001]: ../business-case.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/milestones/mil-002-parse-html.md b/docs/milestones/mil-002-parse-html.md index d498783..2081646 100644 --- a/docs/milestones/mil-002-parse-html.md +++ b/docs/milestones/mil-002-parse-html.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -70,3 +70,4 @@ Module `soup_basics` with functions that parse `website.html` (title, prettify, --- [BC-001]: ../business-case.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/milestones/mil-003-hacker-news.md b/docs/milestones/mil-003-hacker-news.md index 582cee0..bbab8c8 100644 --- a/docs/milestones/mil-003-hacker-news.md +++ b/docs/milestones/mil-003-hacker-news.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -72,3 +72,4 @@ Module `hacker_news` with fetch and parse functions, the saved front page as a f --- [BC-001]: ../business-case.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/milestones/mil-004-top-100-movies.md b/docs/milestones/mil-004-top-100-movies.md index 85fab64..d8e4c1b 100644 --- a/docs/milestones/mil-004-top-100-movies.md +++ b/docs/milestones/mil-004-top-100-movies.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -72,3 +72,4 @@ Module `movies` with `fetch`, `parse_titles`, `format_titles`, `write_movies`, a --- [BC-001]: ../business-case.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/milestones/mil-005-wiki.md b/docs/milestones/mil-005-wiki.md index c57eda0..8b4aed5 100644 --- a/docs/milestones/mil-005-wiki.md +++ b/docs/milestones/mil-005-wiki.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -70,3 +70,4 @@ Pages under `docs/wiki/` in `en`, `da` and `ms`, a sidebar listing the three lan --- [BC-001]: ../business-case.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/project-plan.md b/docs/project-plan.md index 4a20d66..c508925 100644 --- a/docs/project-plan.md +++ b/docs/project-plan.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -95,3 +95,4 @@ A No-Go on a gateway is fixed and re-reviewed; after three failed rounds the run [MIL-003]: ./milestones/mil-003-hacker-news.md [MIL-004]: ./milestones/mil-004-top-100-movies.md [MIL-005]: ./milestones/mil-005-wiki.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/sqa/reviews/rc-001-business-case.md b/docs/sqa/reviews/rc-001-business-case.md index 9203be3..2375769 100644 --- a/docs/sqa/reviews/rc-001-business-case.md +++ b/docs/sqa/reviews/rc-001-business-case.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -65,3 +65,4 @@ Go — no Mandatory criterion fails and none is Pending. The review is a stand-i [BC-001]: ../../business-case.md [QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/sqa/reviews/rc-002-stakeholder-analysis.md b/docs/sqa/reviews/rc-002-stakeholder-analysis.md index 6980bd9..35a4d48 100644 --- a/docs/sqa/reviews/rc-002-stakeholder-analysis.md +++ b/docs/sqa/reviews/rc-002-stakeholder-analysis.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -66,3 +66,4 @@ Go — no Mandatory criterion fails and none is Pending. The review is a stand-i [SA-001]: ../../stakeholder-analysis.md [QC-SA-001]: ../../../framework/qc/artifacts/qc-stakeholder-analysis.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/sqa/reviews/rc-003-project-plan.md b/docs/sqa/reviews/rc-003-project-plan.md index 4194015..bda5215 100644 --- a/docs/sqa/reviews/rc-003-project-plan.md +++ b/docs/sqa/reviews/rc-003-project-plan.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -72,3 +72,4 @@ Go — no Mandatory criterion fails and none is Pending. The review is a stand-i [PP-001]: ../../project-plan.md [QC-PP-001]: ../../../framework/qc/artifacts/qc-project-plan.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/sqa/reviews/rc-004-mil-001-repository-setup.md b/docs/sqa/reviews/rc-004-mil-001-repository-setup.md index 083dd1f..ac13e61 100644 --- a/docs/sqa/reviews/rc-004-mil-001-repository-setup.md +++ b/docs/sqa/reviews/rc-004-mil-001-repository-setup.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -63,3 +63,4 @@ Go — no Mandatory criterion fails and none is Pending. The review is a stand-i [MIL-001]: ../../milestones/mil-001-repository-setup.md [QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/sqa/reviews/rc-005-mil-002-parse-html.md b/docs/sqa/reviews/rc-005-mil-002-parse-html.md index 532274d..bed0f0e 100644 --- a/docs/sqa/reviews/rc-005-mil-002-parse-html.md +++ b/docs/sqa/reviews/rc-005-mil-002-parse-html.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -63,3 +63,4 @@ Go — no Mandatory criterion fails and none is Pending. The review is a stand-i [MIL-002]: ../../milestones/mil-002-parse-html.md [QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/sqa/reviews/rc-006-mil-003-hacker-news.md b/docs/sqa/reviews/rc-006-mil-003-hacker-news.md index 7bb4b3d..4357b19 100644 --- a/docs/sqa/reviews/rc-006-mil-003-hacker-news.md +++ b/docs/sqa/reviews/rc-006-mil-003-hacker-news.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -63,3 +63,4 @@ Go — no Mandatory criterion fails and none is Pending. The review is a stand-i [MIL-003]: ../../milestones/mil-003-hacker-news.md [QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/sqa/reviews/rc-007-mil-004-top-100-movies.md b/docs/sqa/reviews/rc-007-mil-004-top-100-movies.md index 369acf6..034229c 100644 --- a/docs/sqa/reviews/rc-007-mil-004-top-100-movies.md +++ b/docs/sqa/reviews/rc-007-mil-004-top-100-movies.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -63,3 +63,4 @@ Go — no Mandatory criterion fails and none is Pending. The review is a stand-i [MIL-004]: ../../milestones/mil-004-top-100-movies.md [QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/sqa/reviews/rc-008-mil-005-wiki.md b/docs/sqa/reviews/rc-008-mil-005-wiki.md index 2133c15..da00efe 100644 --- a/docs/sqa/reviews/rc-008-mil-005-wiki.md +++ b/docs/sqa/reviews/rc-008-mil-005-wiki.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -63,3 +63,4 @@ Go — no Mandatory criterion fails and none is Pending. The review is a stand-i [MIL-005]: ../../milestones/mil-005-wiki.md [QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 diff --git a/docs/stakeholder-analysis.md b/docs/stakeholder-analysis.md index 8f94b8d..c70d86f 100644 --- a/docs/stakeholder-analysis.md +++ b/docs/stakeholder-analysis.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | pending | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in, autonomous mode) | Initial version | [dcef5e6] | --- @@ -83,3 +83,4 @@ Reviewer: S01 (decision recorded in the RC record of this document). --- [BC-001]: ./business-case.md +[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63 -- 2.54.0