Plan baseline: business case, stakeholders, project plan and five milestones #1
@@ -0,0 +1,3 @@
|
||||
[submodule "framework"]
|
||||
path = framework
|
||||
url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git
|
||||
@@ -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.
|
||||
@@ -0,0 +1,141 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,75 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,73 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,75 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,75 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,73 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,98 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,68 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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 (`<name>.<language>.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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,69 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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 (`<name>.<language>.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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,75 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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 (`<name>.<language>.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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,66 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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 (`<name>.<language>.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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,66 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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 (`<name>.<language>.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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,66 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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 (`<name>.<language>.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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,66 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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 (`<name>.<language>.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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,66 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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 (`<name>.<language>.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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
@@ -0,0 +1,86 @@
|
||||
# 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 | [dcef5e6] |
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
[dcef5e6]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/045-scrape-movies/commit/dcef5e6e6e7ec16162817d3ec0ce1b303e0a3a63
|
||||
Submodule
+1
Submodule framework added at 7c2791939c
Reference in New Issue
Block a user