Add the project baseline (BC, SA, PP, MIL-001 to MIL-006) #1

Merged
Tirsvad merged 2 commits from baseline-plan into main 2026-10-28 07:31:53 +01:00
21 changed files with 1390 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
[submodule "framework"]
path = framework
url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git
+59
View File
@@ -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 | 007 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 010 |
## 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 and the PO language, at least (`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.
+130
View File
@@ -0,0 +1,130 @@
# Business Case
## Metadata
| Key | Value |
| --- | --- |
| ID | BC-001 |
| CrossReference | |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-001 Go) | [f9765fd] |
---
## Executive Summary
Online prices on Amazon change often. This project builds a small Python bot that reads a product page, extracts the title and the price, and sends an e-mail through the Simple Mail Transfer Protocol (SMTP) when the price drops below a target. It is the Day 47 assignment of the Udemy course "100 Days of Code: The Complete Python Pro Bootcamp", built step by step: scrape a static practice page, send the alert, add request headers, then try the live Amazon page.
## Methodological and Standards Foundation
Planning follows the SQA and QC framework mounted at `framework/` (plan first, review each artifact against its quality control (QC) checklist). Quality is described with the International Organization for Standardization and International Electrotechnical Commission standard ISO/IEC 25010:2023 characteristics. Code follows the `coding-conventions` and `clean-architecture` skills.
## Problem Statement
Checking a product price by hand every day costs time, and a short price drop is easy to miss. The course participant also needs a worked, runnable solution to compare with the course material.
## Business Opportunity
A bot that checks the price on its own and sends an alert lets the participant buy at the right moment. As a public repository it also gives other course participants and visitors a readable example.
## Objectives
1. Extract the product title and price as a `float` from the practice page with BeautifulSoup.
2. Send an e-mail with the title, the price and the buy link when the price is below the target.
3. Keep the SMTP address, e-mail address and password in a `.env` file, outside the source code.
4. Send browser-like request headers (`User-Agent`, `Accept-Language`, and the rest of the course set).
5. Try the same code on the live Amazon page and document what happens.
6. Publish the repository with description, topics, README and a wiki in English, Danish and Bahasa Malaysia, with a screenshot for each lecture step.
## Scope
### In Scope
- Python 3.13 or newer, `venv`, `pyproject.toml`, `pytest`, `constants.py`, Doxygen comments and `Doxyfile`.
- The four lecture steps, each delivered by its own branch and pull request.
- README from the framework template and a three-language wiki explaining what each step teaches.
### Out of Scope
- Scheduling the bot to run daily.
- Solving Amazon CAPTCHAs (Completely Automated Public Turing tests, the robot-check pages) or evading bot detection.
- A user interface or a database.
- Importing, testing or committing the personal `.env` of the repository owner.
## Expected Benefits
### Tangible Benefits
- A runnable solution for the four lecture steps with tests.
- A documented repository (README, wiki, screenshots) that others can follow.
### Intangible Benefits
- Practice with scraping, SMTP, environment variables and request headers.
- A clear example of plan-first work for course participants.
## Strategic Alignment
The project supports the participant's learning goal in the 100 Days of Code course and the public portfolio of the `Tirsvad-Udemy-100_days_of_code` organisation.
## Success Criteria
| # | Criterion | Target | Measure |
| --- | --- | --- | --- |
| 1 | Price extracted from the practice page | `99.99` as a `float` | Unit test with a saved copy of the page |
| 2 | Alert decision | E-mail text built only when price is below target | Unit tests for below, equal and above |
| 3 | Secrets outside the code | No credential in any tracked file | `.env` is ignored; search of the repository finds none |
| 4 | Test suite | All tests pass without network access | `python -m pytest` exits 0 |
| 5 | Documentation | README, wiki in `en`, `da`, `ms`, one screenshot per step | Files exist and are linked |
| 6 | Repository metadata | Description and at least five topics set on the host | Read back from the host API |
## Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| Amazon returns a robot-check page (CAPTCHA) or changes its HTML | The live step does not return a price | The live step is documented as best effort; the static page is the tested baseline |
| A token or password is committed | Credential leak | `.env` in `.gitignore`; tokens are read from `.env` only for repository set-up and never copied into the project |
| The practice page changes | A test breaks | Tests use a saved copy of the page |
| Sending real e-mail by accident | Unwanted mail | Tests mock SMTP; the sender is called only from `main` |
## Assumptions
- The Product Owner is S01 and reviews every step; S01 can be reached in chat.
- Gitea (the git host) at `git.tirsystem.com` hosts the repository; a Gitea token is in `.env`.
- The practice page `https://appbrewery.github.io/instant_pot/` stays available.
## Constraints
- Python 3.13 or newer; virtual environment `.venv`.
- Runtime dependencies are only the ones needed: `requests`, `beautifulsoup4`, `python-dotenv`.
- Layout `src/`, `tests/`, `docs/`; constants in `constants.py`.
- One branch and pull request per milestone.
- No GUI is involved, so no GUI test environment is needed.
## Cost–Benefit Assessment
| Costs | Benefits |
| --- | --- |
| A few hours of the participant's time; no licence or hosting cost | A working, tested, documented example and a reusable price alert |
The assessment is qualitative on purpose: this is a learning project with no revenue and no budget, so a monetary return on investment (ROI) would be invented; the only cost is the participant's time, and the benefit is the learning and the reusable repository.
## Stakeholders
| Stakeholder ID (SA) | Interest in this project |
| --- | --- |
| S01 | Product Owner, developer and reviewer; wants a working solution and a clean repository |
| S02 | Readable, runnable code with the assignment's function names, and README run instructions |
| S03 | A clear description, topics and README, and no runtime dependencies beyond the necessary |
## Recommendation
Proceed — the scope is small, the cost is low and every objective is testable.
---
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
+72
View File
@@ -0,0 +1,72 @@
# MIL-001 foundation
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-001 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-004 Go) | [f9765fd] |
---
## Purpose
Decide whether the repository is ready for feature work: project configuration, environment instructions, documentation skeleton and host metadata are in place.
## Deliverable
Branch `mil-001-foundation` merged: `pyproject.toml`, `.gitignore`, `.env.example`, `constants.py`, `Doxyfile`, README from the framework template, a passing smoke test, and the repository description and topics on the host (set through its application programming interface, API).
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `python -m pip install -e .[dev]` works in a fresh `.venv` on Python 3.13 or newer | `python -m pytest` exits 0 | Install or tests fail |
| 2 | `.env` is ignored and no secret is tracked | `git ls-files` lists no `.env` | A secret is tracked |
| 3 | README follows the template and explains venv, `python -m pip install --upgrade pip`, run and test | `framework/scripts/check-readme.sh` passes | Check fails |
| 4 | Repository description and at least five topics are set | Read back from the Gitea API | Missing |
## Dependencies
| Depends on | Reason |
| --- | --- |
| None | First gateway; it has no predecessor |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 6 (repository set-up, README, metadata) and the Constraints section of [BC-001] | Tasks of this gateway |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-10-28 — within the Business Case constraints (one branch and pull request per milestone).
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Set repository description and topics | Set a one-sentence description and topics (python, web-scraping, beautifulsoup, smtp, udemy, 100-days-of-code) on the Gitea repository through its API. The token is read from the personal `.env` at call time; it is never copied into the project, imported or tested. | No | |
| 2 | Create pyproject.toml and package layout | Python `>=3.13`, setuptools `src` layout with package `amazon_price_tracker`, runtime dependencies `requests`, `beautifulsoup4`, `python-dotenv` only, a `dev` extra with `pytest`, and pytest config (`pythonpath`, `testpaths`). | No | |
| 3 | Add constants.py and .env.example | `constants.py` holds the practice URL, target price, default headers and environment variable names. `.env.example` lists `SMTP_ADDRESS`, `EMAIL_ADDRESS`, `EMAIL_PASSWORD` with placeholders so S02 knows what to create. | No | |
| 4 | Add Python .gitignore and Doxyfile | Standard Python `.gitignore` plus `.env`, `.venv`, `docs/doxygen`. A `Doxyfile` that reads `src/` and writes HTML to `docs/doxygen`; source comments use the Doxygen style (`@brief`, `@param`, `@return`). | No | |
| 5 | Write README from the framework template | Fill `framework/templates/README-template.md`: overview, requirements, setup with `python -m venv .venv`, activation on Windows and Linux, `python -m pip install --upgrade pip`, run, tests, license, links, appendix. | No | |
| 6 | Add smoke test | A first test that imports the package and checks `constants` so the test run and CI path work before features arrive. | No | |
---
[BC-001]: ../business-case.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
+71
View File
@@ -0,0 +1,71 @@
# MIL-002 scrape-price
## 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 | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-005 Go) | [f9765fd] |
---
## Purpose
Decide whether Step 1 of the lecture (BeautifulSoup scrapes the price from the practice page) is complete.
## Deliverable
Branch `mil-002-scrape-price` merged: a scraper that returns the title and the price as a `float`, a saved copy of the practice page used by tests, a screenshot of the step, and the README section for it.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | Price from the saved practice page is `99.99` as a `float` | `pytest` asserts it | Wrong value or type |
| 2 | Tests need no network access | Run with the network off passes | A test calls the network |
| 3 | Function names follow the assignment (`get_price`, `get_title`) | Names exist in the module | Different names |
| 4 | Step screenshot is in the README | File exists and is linked | Missing |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-001: project set-up must be accepted first | Each step builds on the one before it |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 1 (price as a float) of [BC-001] | Tasks of this gateway |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-10-29 — within the Business Case constraints (one branch and pull request per milestone).
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Save the practice page as a test fixture | Store a copy of https://appbrewery.github.io/instant_pot/ under `tests/fixtures/` so the parser is tested without the network. | No | |
| 2 | Implement price and title parsing | `get_price(html)` finds the price element, strips the currency sign (`split` or `lstrip`) and returns a `float`; `get_title(html)` returns the product title. Both use BeautifulSoup (`lxml` is not needed; `html.parser`). | No | |
| 3 | Fetch the page and print the price in main | `main.py` requests the URL from `constants.py`, parses it and prints the title and price. | No | |
| 4 | Unit tests for the parser | Tests for price as float, title text and a page without a price (clear error). | No | |
| 5 | Screenshot and README for Step 1 | Capture the run output and the practice page; save under `docs/images/step-1-*.png`; add the Step 1 section to the README. | No | |
---
[BC-001]: ../business-case.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
+72
View File
@@ -0,0 +1,72 @@
# MIL-003 email-alert
## 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 | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-006 Go) | [f9765fd] |
---
## Purpose
Decide whether Step 2 (e-mail alert below the target, secrets in `.env`) is complete.
## Deliverable
Branch `mil-003-email-alert` merged: an alert that builds and sends an e-mail with title, price and buy link when the price is below target, with credentials from `.env`, tests with a mocked Simple Mail Transfer Protocol (SMTP) server, a screenshot, and the README section.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | Message contains title, current price and link | Unit test asserts all three | Any is missing |
| 2 | E-mail is sent only when price is below target | Tests for below, equal, above | Sent at or above target |
| 3 | Credentials come from environment variables loaded by `python-dotenv` | No literal credential in source | A literal exists |
| 4 | No real mail or network in tests | SMTP is mocked | Real connection opened |
| 5 | Port 587 with STARTTLS is used | Test asserts the calls | Different |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-002 | Each step builds on the one before it |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objectives 2 and 3 (alert e-mail, secrets in `.env`) of [BC-001] | Tasks of this gateway |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-10-30 — within the Business Case constraints (one branch and pull request per milestone).
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Load settings from .env | A small settings function reads `SMTP_ADDRESS`, `EMAIL_ADDRESS`, `EMAIL_PASSWORD` with `os.environ` after `load_dotenv()` and fails with a clear message when one is missing. | No | |
| 2 | Build the alert message | `build_message(title, price, url)` returns the subject and body with title, price and buy link, encoded as UTF-8. | No | |
| 3 | Send the alert through SMTP | `send_email(...)` uses `smtplib.SMTP(host, port=587)`, `starttls()`, `login()` and `sendmail()`; the target comparison lives in a pure function `is_below_target(price, target)`. | No | |
| 4 | Tests with a mocked SMTP server | Cover below, equal and above target, the message content and the missing-setting error. Never open a real connection. | No | |
| 5 | Screenshot and README for Step 2 | Capture the alert as rendered from the message the code builds (the owner's mailbox is not touched) and the console output; add the Step 2 section including the Gmail App Password and port notes. | No | |
---
[BC-001]: ../business-case.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,69 @@
# MIL-004 request-headers
## 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 | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-007 Go) | [f9765fd] |
---
## Purpose
Decide whether Step 3 (browser-like request headers) is complete.
## Deliverable
Branch `mil-004-request-headers` merged: requests carry the headers from `constants.py`, tests prove it, a screenshot and a README section.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | Request sends at least `User-Agent` and `Accept-Language` | Test inspects the prepared request | Headers missing |
| 2 | Headers live in `constants.py`, not in the logic | Search finds one definition | Duplicated |
| 3 | Host and X-Amzn-Trace-Id are not copied | Test asserts absence | Present |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-003 | Each step builds on the one before it |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 4 (request headers) of [BC-001] | Tasks of this gateway |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-10-31 — within the Business Case constraints (one branch and pull request per milestone).
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Define the request headers in constants | Add `User-Agent`, `Accept-Language`, `Accept`, `Accept-Encoding`, `Sec-Fetch-*` and `Priority` as in the lecture, leaving out `Host` and `X-Amzn-Trace-Id`. | No | |
| 2 | Send the headers with the request | The fetch function passes `headers=` to `requests.get` and sets a timeout. | No | |
| 3 | Tests for the headers | Use a mocked `requests.get` or a prepared request to assert the headers and the timeout. | No | |
| 4 | Screenshot and README for Step 3 | Capture the headers the browser sends (myhttpheader.com / httpbin.org/headers) next to the ones the bot sends; add the Step 3 section. | No | |
---
[BC-001]: ../business-case.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
+71
View File
@@ -0,0 +1,71 @@
# MIL-005 live-amazon
## 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 | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-008 Go) | [f9765fd] |
---
## Purpose
Decide whether Step 4 (the live Amazon page) is complete, and document honestly what Amazon returns.
## Deliverable
Branch `mil-005-live-amazon` merged: URL and selectors configurable for the live page, a detection of a robot-check (CAPTCHA) page with a clear message, tests, a screenshot of the result, and the README section including the limits.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | Product URL is a constant and can be overridden by an environment variable | Test | Hard-coded in logic |
| 2 | A CAPTCHA or missing price gives a clear error, not a traceback | Unit test with a CAPTCHA fixture | Crash |
| 3 | The live run result (price or CAPTCHA) is documented | README section and screenshot | Missing |
| 4 | No attempt is made to solve or bypass a CAPTCHA | Code review | Bypass present |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-004 | Each step builds on the one before it |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 5 (live Amazon page) of [BC-001] | Tasks of this gateway |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-11-01 — within the Business Case constraints (one branch and pull request per milestone).
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Make the product URL and selectors configurable | Default URL is the lecture's Amazon product; the price selector supports the live markup (`a-offscreen`) and the practice markup. | No | |
| 2 | Detect a CAPTCHA or robot-check page | Return a clear error when the response is a bot check or no price element exists; never try to bypass it. | No | |
| 3 | Tests for live-page parsing | Use saved small HTML fixtures for the live markup and the CAPTCHA page; no network in tests. | No | |
| 4 | Run once against the live page and record the result | One manual request with the project headers; keep the outcome (price or CAPTCHA) as the screenshot. No retries or loops. | No | |
| 5 | Screenshot and README for Step 4 | Add the Step 4 section with the screenshot and the known limits. | No | |
---
[BC-001]: ../business-case.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,71 @@
# MIL-006 wiki-screenshots
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-006 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-009 Go) | [f9765fd] |
---
## Purpose
Decide whether the wiki in English, Danish and Bahasa Malaysia is complete and the screenshots are in place.
## Deliverable
Wiki pages in `en`, `da` and `ms`, one per language per lecture step plus a home page, each explaining what was gained and showing the step screenshot; the wiki is published on the host.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | Home page and four step pages exist in en, da and ms | File listing | A page is missing |
| 2 | Each step page has its screenshot and a 'What we gained' section | Review | Missing |
| 3 | Wiki follows `framework/process/wiki.md` | Review against the process | Deviates |
| 4 | Wiki is published and reachable | URL returns the page | Not published |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-005 | Each step builds on the one before it |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 6 (wiki in three languages, screenshots) of [BC-001] | Tasks of this gateway |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-11-04 — within the Business Case constraints (one branch and pull request per milestone).
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Read the wiki process and plan the page set | Read `framework/process/wiki.md`; fix page names, language switch links and the screenshot folder. | No | |
| 2 | Write the English wiki | Home plus Step 1 to 4 pages: what we did, the code idea, the screenshot, what we gained. | No | |
| 3 | Write the Danish wiki | Same page set in Danish, same screenshots. | No | |
| 4 | Write the Bahasa Malaysia wiki | Same page set in Bahasa Malaysia, same screenshots. | No | |
| 5 | Publish the wiki and link it from the README | Push the pages to the repository's wiki on the host (stop and report if the wiki is disabled or the push is refused) and link the wiki from the README. | No | |
---
[BC-001]: ../business-case.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
+86
View File
@@ -0,0 +1,86 @@
# Project Plan
## Metadata
| Key | Value |
| --- | --- |
| ID | PP-001 |
| CrossReference | [BC-001], [SA-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-003 Go) | [f9765fd] |
---
## Purpose
Schedule the six gateways (Go/No-Go decision points) that deliver the Day 47 Amazon price tracker, one branch and pull request per gateway, from 2026-10-28 to 2026-11-04.
## Planning Assumptions
- Week 1 starts 2026-10-28; the plan ends by 2026-11-04, a soft target for a learning project ([BC-001] has no hard deadline).
- One gateway per day or two; the author is S01 and the AI works as stand-in reviewer in autonomous mode, recorded in each `RC-*`.
- The cadence follows [SA-001]: S01 reviews at each pull request.
- Source of the dates: the author's estimate on 2026-10-28; there is no external deadline. The baseline is first set here, so there is no earlier baseline to record a change against.
- No governance document exists in this project; S01 is Responsible and Accountable for every artifact, and the AI is a recorded stand-in reviewer.
## Gateway Schedule
| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone |
| --- | --- | --- | --- | --- | --- | --- | --- |
| MIL-001 | `docs/milestones/mil-001-foundation.md` | 2026-10-28 | 2026-10-28 | S01 | none (technical tasks) | Branch `mil-001-foundation` merged: `pyproject.toml`, `.gitignore`, `.env.example`, `constants.py`, `Doxyfile`, README from the framework template, a passing smoke test, and the repository description and topics on the host. | not yet synced |
| MIL-002 | `docs/milestones/mil-002-scrape-price.md` | 2026-10-29 | 2026-10-29 | S01 | none (technical tasks) | Branch `mil-002-scrape-price` merged: a scraper that returns the title and the price as a `float`, a saved copy of the practice page used by tests, a screenshot of the step, and the README section for it. | not yet synced |
| MIL-003 | `docs/milestones/mil-003-email-alert.md` | 2026-10-30 | 2026-10-30 | S01 | none (technical tasks) | Branch `mil-003-email-alert` merged: an alert that builds and sends an e-mail with title, price and buy link when the price is below target, with credentials from `.env`, tests with a mocked SMTP server, a screenshot, and the README section. | not yet synced |
| MIL-004 | `docs/milestones/mil-004-request-headers.md` | 2026-10-31 | 2026-10-31 | S01 | none (technical tasks) | Branch `mil-004-request-headers` merged: requests carry the headers from `constants.py`, tests prove it, a screenshot and a README section. | not yet synced |
| MIL-005 | `docs/milestones/mil-005-live-amazon.md` | 2026-11-01 | 2026-11-01 | S01 | none (technical tasks) | Branch `mil-005-live-amazon` merged: URL and selectors configurable for the live page, a detection of a CAPTCHA page with a clear message, tests, a screenshot of the result, and the README section including the limits. | not yet synced |
| MIL-006 | `docs/milestones/mil-006-wiki-screenshots.md` | 2026-11-02 to 2026-11-04 | 2026-11-04 | S01 | none (technical tasks) | Wiki pages in `en`, `da` and `ms`, one per language per lecture step plus a home page, each explaining what was gained and showing the step screenshot; the wiki is published on the host. | not yet synced |
## Timeline diagram
```plantuml
@startgantt
Project starts 2026-10-28
[MIL-001 foundation] starts 2026-10-28 and lasts 1 day
[MIL-002 scrape price] starts 2026-10-29 and lasts 1 day
[MIL-003 email alert] starts 2026-10-30 and lasts 1 day
[MIL-004 request headers] starts 2026-10-31 and lasts 1 day
[MIL-005 live amazon] starts 2026-11-01 and lasts 1 day
[MIL-006 wiki and screenshots] starts 2026-11-02 and lasts 3 days
@endgantt
```
## Scope Coverage
| Business Case scope item | Gateway |
| --- | --- |
| Python 3.13, venv, pyproject, pytest, constants, Doxygen | MIL-001 |
| Step 1: scrape the price | MIL-002 |
| Step 2: e-mail alert and `.env` | MIL-003 |
| Step 3: request headers | MIL-004 |
| Step 4: live Amazon page | MIL-005 |
| README (MIL-001 and each step) and the three-language wiki | MIL-001 to MIL-006 |
## Dependencies
MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005 → MIL-006. A No-Go stops the chain: later windows move by the rework time. S01 decides whether the end date 2026-11-04 moves.
## Plan Risks
| Risk | Mitigation |
| --- | --- |
| Gitea wiki disabled or not pushable | MIL-006 stops and reports; pages stay in `docs/wiki/` |
| Amazon blocks the live request (from [BC-001] risk 1) | MIL-005 documents the outcome; it does not bypass the block |
## Open Issues
- Wiki publishing path depends on the host (checked in MIL-006).
- The e-mail screenshot is rendered from the message the code builds, not from a delivered mail.
---
[BC-001]: ./business-case.md
[SA-001]: ./stakeholder-analysis.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
+67
View File
@@ -0,0 +1,67 @@
# SQA Review Record
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-001 |
| CrossReference | [BC-001], [QC-BC-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [BC-001]
- Checklist used: [QC-BC-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working for S01
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | The Cost-Benefit section is qualitative and states why: a learning project with no revenue or budget |
| 2 | Risks are identified with documented impact and mitigation | Pass | Risks table: four risks, each with impact and mitigation |
| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | Six success criteria with explicit targets and a measure (e.g. `99.99` as a float, `pytest` exits 0) |
| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | Scope has In Scope and Out of Scope subsections |
| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | Stakeholders table cites S01, S02 and S03 from SA-001 |
| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | Methodological and Standards Foundation names the framework, ISO/IEC 25010:2023 and the coding skills |
| 7 | Assumptions and constraints are explicit and clearly distinguished from one another | Pass | Assumptions and Constraints are separate sections |
| 8 | Document supports executive decision-making with a clear, unambiguous recommendation | Pass | Recommendation is a single 'Proceed' with a rationale |
## 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all Mandatory criteria pass; the Cost-Benefit assessment is qualitative with a stated reason.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | S01 | 2026-10-28 |
---
[BC-001]: ../../business-case.md
[QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,69 @@
# RC-002 Stakeholder Analysis review
## 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 | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [SA-001]
- Checklist used: [QC-SA-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working 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, S02 and 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 are unique and stable |
| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | Role, organisation, power and interest are given for each |
| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | Communication table lists channel, frequency, deliverable and phase |
| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | Two conflicts, each with a mitigation |
| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | Traceability Analysis maps each stakeholder to BC-001 objectives |
| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | Each concern has a business statement and a FURPS+ attribute |
| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | Short plain-language entries; each stakeholder can find their row |
| 9 | Every concern has a stable ID (`CN-NNN`) in the concern register, with the stakeholder who raised it; IDs are never renumbered or reused | Pass | CN-001 to CN-006 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | 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
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
+75
View File
@@ -0,0 +1,75 @@
# RC-003 Project Plan review
## 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 | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [PP-001]
- Checklist used: [QC-PP-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working 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-04, constraint: soft target, one pull request per gateway (BC-001 Constraints) |
| 2 | Every milestone or gateway is listed once with its document, decision date and owner | Pass | Six rows, each 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 match the Target Date of each MIL document and lie in the window |
| 4 | Every in-scope item of the Business Case is delivered at a named gateway (scope coverage) | Pass | Scope Coverage table maps every in-scope item to a gateway |
| 5 | Dependencies between gateways are stated, acyclic and consistent with the schedule order | Pass | Chain MIL-001 to MIL-006; windows follow the order and do not overlap |
| 6 | The plan states what happens to later gateways and to the end date when a gateway is No-Go | Pass | Dependencies section says a No-Go moves later windows and that S01 decides about the end date |
| 7 | Owners, reviewers and escalation roles use Stakeholder Analysis IDs and match the governance RACI | Pass | Owner and reviewer use S01; no governance document exists, which the plan states |
| 8 | Planning assumptions are listed with their source, and a changed baseline is recorded with its reason | Pass | Planning Assumptions give the source of the dates and say no earlier baseline exists |
| 9 | Plan risks are listed with impact and a mitigation, and trace to Business Case risks where they come from there | Pass | Plan Risks have mitigations and one traces to the Business Case risk 1 |
| 10 | Open issues are listed, and none contradicts a statement elsewhere in the plan | Pass | Open Issues list two items; neither contradicts the plan |
| 11 | Each gateway's main deliverable is stated and matches the deliverable of its `MIL-*` document | Pass | Main deliverable text is taken from each MIL Deliverable section |
| 12 | Gateways that deliver user stories name them, and those that do not say why | Pass | Stories column says 'none (technical tasks)' |
| 13 | The schedule view (table, Gantt) and the dependency view agree with each other | Pass | Gantt bars match the table windows; the chain matches the dependency list |
| 14 | Each gateway is linked to its issue-tracker milestone, or marked as not yet synced | Pass | Milestone column says 'not yet synced' |
| 15 | The plan is a singleton: one Project Plan per project, changes recorded in Version History | Pass | One Project Plan; Version History holds the change |
## 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all criteria pass; acceptance by the Product Owner is made by the stand-in.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | 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
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,66 @@
# RC-004 MIL-001 review
## 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 | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [MIL-001]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working for S01
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete output (merged branch with listed files or pages) |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable criteria |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor or says it has none |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability names the Business Case objective(s) |
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer are S01 |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-04, the Project Plan window |
## 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | S01 | 2026-10-28 |
---
[MIL-001]: ../../milestones/mil-001-foundation.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,66 @@
# RC-005 MIL-002 review
## 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 | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [MIL-002]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working for S01
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete output (merged branch with listed files or pages) |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable criteria |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor or says it has none |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability names the Business Case objective(s) |
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer are S01 |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-04, the Project Plan window |
## 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | S01 | 2026-10-28 |
---
[MIL-002]: ../../milestones/mil-002-scrape-price.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,66 @@
# RC-006 MIL-003 review
## 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 | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [MIL-003]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working for S01
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete output (merged branch with listed files or pages) |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable criteria |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor or says it has none |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability names the Business Case objective(s) |
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer are S01 |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-04, the Project Plan window |
## 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | S01 | 2026-10-28 |
---
[MIL-003]: ../../milestones/mil-003-email-alert.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,66 @@
# RC-007 MIL-004 review
## 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 | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [MIL-004]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working for S01
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete output (merged branch with listed files or pages) |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable criteria |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor or says it has none |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability names the Business Case objective(s) |
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer are S01 |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-04, the Project Plan window |
## 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | S01 | 2026-10-28 |
---
[MIL-004]: ../../milestones/mil-004-request-headers.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,66 @@
# RC-008 MIL-005 review
## 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 | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [MIL-005]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working for S01
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete output (merged branch with listed files or pages) |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable criteria |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor or says it has none |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability names the Business Case objective(s) |
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer are S01 |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-04, the Project Plan window |
## 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | S01 | 2026-10-28 |
---
[MIL-005]: ../../milestones/mil-005-live-amazon.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
@@ -0,0 +1,66 @@
# RC-009 MIL-006 review
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-009 |
| CrossReference | [MIL-006], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [f9765fd] |
---
## Artifact Under Review
- Instance reviewed: [MIL-006]
- Checklist used: [QC-MIL-001] and [QC-LANG-001]
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none (the reviewer reads English and knows the domain IT; mode: AI as stand-in for S01)
- Mode: autonomous, not independent (AI as stand-in for S01); the author and the stand-in are both the AI working for S01
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete output (merged branch with listed files or pages) |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable criteria |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the predecessor or says it has none |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability names the Business Case objective(s) |
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer are S01 |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is inside 2026-10-28 to 2026-11-04, the Project Plan window |
## 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 | Metadata has `Language | en` and `Domain | it` |
| 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 | All prose and table cells are English; the stand-in reads English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Executive types use IT Executive English, technical types IT Professional English, as the registry says; plain sentences, no jargon beyond IT terms |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | No dictionary (DICT) exists in this project; terms are used consistently (price, target price, alert, gateway) and no synonyms for them were found |
| 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 `<name>.<language>.md` twin exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no language change since an earlier accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reads English and knows the IT domain; not independent of the author (recorded in Mode) |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (SMTP, CAPTCHA, ROI, API, QC, ISO/IEC) are spelled out on first use |
## Overall Verdict
Go — all criteria pass.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None: no Fail and no Pending criterion | S01 | 2026-10-28 |
---
[MIL-006]: ../../milestones/mil-006-wiki-screenshots.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
+78
View File
@@ -0,0 +1,78 @@
# Stakeholder Analysis
## Metadata
| Key | Value |
| --- | --- |
| ID | SA-001 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version<br>Accepted after review (RC-002 Go) | [f9765fd] |
---
## Purpose
Identify who is involved in the Amazon price tracker, how much they influence it and what each needs. The method is the power/interest grid (Mendelow); concerns are mapped to FURPS+ (Functionality, Usability, Reliability, Performance, Supportability, plus constraints).
## 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, reviewer | Tirsvad | High | High | Manage Closely | A working, tested solution and a clean repository |
| S02 | Udemy coursists | Course participants who share and compare solutions | Udemy community | Low | High | Keep Informed | Readable, runnable code with the assignment's function names, and run instructions |
| S03 | GitHub viewers | Visitors who browse the repository for ideas | Public | Low | Low | Monitor | A clear description, topics, README and no unnecessary runtime dependencies |
## Power/Interest Classification Rationale
- **Manage Closely (S01):** decides scope, reviews and accepts every artifact.
- **Keep Informed (S02):** cannot change the project but uses it directly, so the code and README must be easy to follow.
- **Monitor (S03):** casual readers; the repository page is their only contact.
## Primary Concerns and FURPS+ Mapping
| Concern ID | Stakeholder | Concern | FURPS+ attribute |
| --- | --- | --- | --- |
| CN-001 | S01 | The bot finds the price and alerts when it is below target | Functionality |
| CN-002 | S01 | Passwords and tokens never reach the repository | Functionality (security) |
| CN-003 | S02 | Function names match the assignment and the code is readable | Usability |
| CN-004 | S02 | The README explains how to set up the venv, run and test | Usability |
| CN-005 | S03 | Description, topics and README explain the repository | Usability |
| CN-006 | S03 | No runtime dependencies beyond the necessary | Supportability |
## Communication Requirements
| Channel | Frequency | Deliverable type | Phase |
| --- | --- | --- | --- |
| Chat with S01 | Per milestone | Pull request for review | MIL-001 to MIL-006 |
| README and wiki | Once, then per change | Documentation for S02 and S03 | MIL-001, MIL-006 |
## Conflicting Interests and Mitigations
| Conflict | Mitigation |
| --- | --- |
| S02 wants the code to follow the course (single script) while S01 wants layered, tested code | Keep the assignment's function names and a short `main.py`; the layers stay thin |
| S03 wants no dependencies while the scraper needs three | Only `requests`, `beautifulsoup4` and `python-dotenv`; dev tools stay in a `dev` extra |
## Traceability Analysis
| Stakeholder | Actor / use case | Business Case objective |
| --- | --- | --- |
| S01 | Runs the tracker, reviews every step | [BC-001] objectives 1 to 5 |
| S02 | Reads and runs the code | [BC-001] objectives 1 to 4 and 6 |
| S03 | Reads the repository page | [BC-001] objective 6 |
## Sign-Off
| Stakeholder | Decision | Date |
| --- | --- | --- |
| S01 | [f9765fd] | |
---
[BC-001]: ./business-case.md
[f9765fd]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/047-amazon-price-tracker/commit/f9765fd3743f46c189359e713fd050c8e1a598b6
Submodule
+1
Submodule framework added at 7c2791939c