diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7dddeb2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Secrets and personal files +.env + +# AI prompt log (the repository is public) +/docs/ai-prompts/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..a759dc9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "framework"] + path = framework + url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git diff --git a/docs/adr/adr-0001-skip-stories-use-cases.md b/docs/adr/adr-0001-skip-stories-use-cases.md new file mode 100644 index 0000000..d2ffed4 --- /dev/null +++ b/docs/adr/adr-0001-skip-stories-use-cases.md @@ -0,0 +1,50 @@ +# ADR-0001 Skip user stories and use cases + +## Metadata +| Key | Value | +| --- | --- | +| ID | ADR-0001 | +| CrossReference | [BC-001], [PP-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Initial version | [cadc5ef] | + +Allowed Status values: `Proposed`, `Accepted`, `Rejected`, `Deprecated`, `Superseded by ADR-NNNN`. + +--- + +## Context + +The create-project journey proposes user stories, use cases, priorities and a role matrix before the milestones. This project is one course assignment with one primary actor (S01 runs the bot) and one linear flow: open the game, click, buy upgrades every few seconds, stop after five minutes and print the result. Options: + +1. Write `US` and `UCD` documents with one story and one use case, plus the design artifacts of that use case (`SSD`, `DM`, `OC`, `SD`, `DCD`). +2. Skip the step: the Business Case objectives O1 to O6 are the requirements, and each task cites its objective. + +## Decision + +Option 2: skip step 4a. Every task in the milestones is a plain technical task that cites a Business Case objective. If a second actor or a branching flow appears, a use case is added before that work. + +## Consequences + +**Positive:** + +- The plan stays small and each task maps to a Business Case objective. +- No design artifacts to keep in sync for a script of a few hundred lines. + +**Negative:** + +- No use case or sequence diagram for readers who expect them. +- Traceability stops at the Business Case objectives. + +## Affected Artifacts + +- [BC-001] — objectives O1 to O6 serve as the requirements +- [PP-001] — the gateways list no stories + +--- + +[BC-001]: ../business-case.md +[PP-001]: ../project-plan.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/adr/adr-0002-light-clean-architecture.md b/docs/adr/adr-0002-light-clean-architecture.md new file mode 100644 index 0000000..fd41b79 --- /dev/null +++ b/docs/adr/adr-0002-light-clean-architecture.md @@ -0,0 +1,52 @@ +# ADR-0002 Light Clean Architecture without a presentation layer + +## Metadata +| Key | Value | +| --- | --- | +| ID | ADR-0002 | +| CrossReference | [BC-001], [SA-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Initial version | [cadc5ef] | + +Allowed Status values: `Proposed`, `Accepted`, `Rejected`, `Deprecated`, `Superseded by ADR-NNNN`. + +--- + +## Context + +The bot is a command-line program. The Clean Architecture skill asks for layers whose dependencies point inward, and for MVVM (user interface) or MVC (API) as the presentation pattern. This program has neither a user interface nor an API. Options: + +1. A single script, as the course shows it. +2. Two layers: pure logic (parsing, choosing the upgrade, timing, results) with no Selenium import, and an adapter that drives the browser. A thin `main` joins them. +3. Full layers with ports and a composition root. + +## Decision + +Option 2. The pure logic is unit tested without a browser; the Selenium adapter is tested with a fake driver. The functions keep the assignment's names. All constants are in `constants.py`. No presentation pattern is used because there is no UI or API. + +## Consequences + +**Positive:** + +- The selection rule, the parsing and the timing are tested quickly and reliably. +- Readable for S02: the assignment's function names stay. +- Selenium stays the only runtime dependency (S03). + +**Negative:** + +- More files than a single script. +- A fake driver must be kept in step with the Selenium API that the adapter uses. + +## Affected Artifacts + +- [BC-001] — constraints on folder structure, constants and dependencies +- [SA-001] — S02 readability and S03 dependency concerns + +--- + +[BC-001]: ../business-case.md +[SA-001]: ../stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/adr/adr-0003-docker-headless-browser.md b/docs/adr/adr-0003-docker-headless-browser.md new file mode 100644 index 0000000..735d9c4 --- /dev/null +++ b/docs/adr/adr-0003-docker-headless-browser.md @@ -0,0 +1,53 @@ +# ADR-0003 Browser runs and screenshots in a Docker container + +## Metadata +| Key | Value | +| --- | --- | +| ID | ADR-0003 | +| CrossReference | [BC-001], [MIL-002], [MIL-003] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Initial version | [cadc5ef] | + +Allowed Status values: `Proposed`, `Accepted`, `Rejected`, `Deprecated`, `Superseded by ADR-NNNN`. + +--- + +## Context + +The bot drives a real browser and every lecture step needs a screenshot. The framework forbids testing a GUI on the host desktop because it takes the user's mouse and keyboard (`framework/process/gui-testing.md`). Options: + +1. Run Chrome on the host desktop. +2. Run headless Chromium in a Docker container (Linux). +3. Run in Windows Sandbox. + +## Decision + +Option 2. A Dockerfile builds an image with Python, Chromium and its driver; a helper script runs the bot or a screenshot job in it. The bot takes a headless option so the same code runs on the host for users who want it. + +## Consequences + +**Positive:** + +- No interference with the user's desktop; reproducible runs for S02. +- Screenshots are made the same way each time. + +**Negative:** + +- Docker is needed for the real-browser runs and screenshots (unit tests need no Docker). +- The image download is large. + +## Affected Artifacts + +- [BC-001] — risk of non-reproducible runs +- [MIL-002] — builds the image +- [MIL-003] — first container run + +--- + +[BC-001]: ../business-case.md +[MIL-002]: ../milestones/mil-002-scaffold.md +[MIL-003]: ../milestones/mil-003-click-bot.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/artifact-registry.md b/docs/artifact-registry.md new file mode 100644 index 0000000..0d7cb57 --- /dev/null +++ b/docs/artifact-registry.md @@ -0,0 +1,62 @@ +# 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 | 008 | +| ADR | Architecture Decision Record | docs/adr/adr-NNNN-*.md | 0004 | +| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 014 | +| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 | +| DICT | Domain Dictionary (PO and IT terms) | docs/dictionary.md | 002 | + +## Languages + +Set the PO language when the project starts; `project-planning` asks for it +if it is missing. An artifact of a type marked "Written in the PO language" +exists once, in that language, under its normal name (`business-case.md`); the +`artifact` skill ("One file per artifact") has the rule. + +| Setting | Value | +| --- | --- | +| PO language | en | +| PO domain | it | +| High-level register | IT Executive English | +| Technical register | IT Professional English | +| Wiki languages | en, da, ms (`framework/process/wiki.md`) | + +Every artifact of a type marked "Yes" below states its language and domain in +its `Language` and `Domain` Metadata rows; `new-artifact.sh` fills them from +`PO language` and `PO domain`. `Language` is a BCP 47 code (`da`, `en`). +`Domain` is a value from this list; add a row to introduce a domain, so a +reviewer can see at once which professional vocabulary a document uses. + +| Domain | Meaning | +| --- | --- | +| it | Software and IT | +| medical | Healthcare and medical devices | +| construction | Construction and civil engineering | + +| Artifact types | Register | Written in the PO language | +| --- | --- | --- | +| BC, KPI, PP, MIL | IT Executive English | Yes | +| SA, BMC, BPMN, UCD, US, UC, SSD, DM, RA, GOV, DICT | IT Professional English | Yes | +| OC, SD, DCD, ERD, TP, AD, ADR, TM, RC, QC, source code | IT Professional English | No | + +## Notes + +- "Next Available Version" is the zero-padded (3-digit) version to use the + *next* time a new document of that type is created. Increment it only when + a brand-new document is created, not when an existing document's + `## Version History` gets a row. +- `ADR` uses 4 digits (`0001`); `RC` is sequential across all artifact types. diff --git a/docs/business-case.md b/docs/business-case.md new file mode 100644 index 0000000..47f0564 --- /dev/null +++ b/docs/business-case.md @@ -0,0 +1,153 @@ +# Business Case: Cookie Clicker Bot + +## Metadata +| Key | Value | +| --- | --- | +| ID | BC-001 | +| CrossReference | [SA-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Initial version: Cookie Clicker bot (Udemy day 48) | [cadc5ef] | + +--- + +## Executive Summary + +Course participant S01 needs a Python bot that plays the browser game Cookie Clicker (the "new version" published on GitHub Pages by ozh) without a human. The bot opens the game with Selenium, dismisses the language selection, clicks the big cookie as fast as it can, every 5 seconds buys the most expensive affordable upgrade, and after 5 minutes stops and prints the cookies per second it reached. The result is a small, readable, runnable repository that other Udemy course participants (S02) can compare with their own solutions and that GitHub visitors (S03) can browse for ideas, with the assignment's function names, English, Danish and Bahasa Malaysia wiki pages and a screenshot for every lecture step. + +## Methodological and Standards Foundation + +- Process: the SQA and QC framework mounted at `framework/` (plan-first gate, review records, one pull request per milestone). +- Quality model: ISO/IEC 25010:2023 characteristics tag every QC criterion. +- Design: Clean Architecture in a light form (game rules separated from the Selenium adapter), as described by the `clean-architecture` skill; the program is a command-line bot, so it has no MVVM or MVC presentation layer. +- Code: Python 3.13 or newer, Doxygen comments, `pytest` for tests, constants in `constants.py`, project configuration in `pyproject.toml`. + +## Problem Statement + +The Udemy lecture "Create an Automated Game Playing Bot" (100 Days of Code, day 48) asks the participant to build a Selenium bot for Cookie Clicker. Solutions shared in the course Q&A are often single untested scripts without instructions, which makes them hard to run, compare and learn from. This participant also wants to keep the work as a documented, reviewed repository. + +## Business Opportunity + +A documented and tested solution that runs from a README gives participants a reference to compare their cookies per second, their upgrade strategy and their code with. The wiki explains what each lecture step teaches, in three languages, so Danish and Malay speaking learners can follow too. + +## Objectives + +1. O1: Deliver a bot that opens Cookie Clicker, dismisses the language selection and clicks the cookie continuously. +2. O2: Every 5 seconds the bot buys the most expensive upgrade it can afford, using the price and cookie count read from the page. +3. O3: After 5 minutes the bot stops and prints the cookies per second. +4. O4: Offer a tweakable strategy (check interval, buy one or buy all affordable) so the participant can try to beat the first result (lecture step 5). +5. O5: Provide the repository hygiene for S02 and S03: README from the framework template, run and test instructions, `.venv` instructions, Doxygen configuration, repository description and topics. +6. O6: Provide wiki pages in English, Danish and Bahasa Malaysia that explain what each lecture step teaches, each with a screenshot. + +## Scope + +### In Scope + +- Selenium bot for the game at the GitHub Pages address of ozh/cookieclicker, with the assignment's function names. +- Lecture steps 1 to 5: get familiar with the game, click bot, upgrade purchase every 5 seconds, 5 minute stop with cookies per second, strategy tweaks. +- Python project: `src/`, `tests/`, `docs/`, `pyproject.toml`, `constants.py`, `.gitignore`, Doxyfile, README. +- Unit tests with `pytest`; the parsing and decision logic is tested without a browser. +- One screenshot per lecture step, taken from a headless browser in a Docker container and used in the README and the wiki. +- Wiki in en, da and ms, published to the git host. +- Repository description and topics on `git.tirsystem.com`. + +### Out of Scope + +- Playing the game beyond the assignment (golden cookies, achievements, saving or loading games). +- Support for other games or for the old Cookie Clicker version. +- A graphical user interface or a web API. +- Distribution as a package on PyPI. +- Running GUI tests on the host desktop (framework rule: container or sandbox only). + +## Expected Benefits + +### Tangible Benefits + +- A runnable bot that prints a measured cookies per second after 5 minutes. +- A test suite that protects the price parsing and upgrade selection logic. +- Documentation (README, wiki in three languages) that a newcomer can follow without help. + +### Intangible Benefits + +- Learning value for S01 and S02: Selenium, waiting for elements, string parsing and timed loops. +- A worked example of the framework's plan, review and pull request flow on a small project. + +## Strategic Alignment + +The project is a learning exercise inside the 100 Days of Code bootcamp. It supports S01's goal of finishing the course with reviewed, shareable work and the S02 and S03 goal of finding clear, runnable examples. + +## Success Criteria + +| # | Criterion | Target | Measure | +| --- | --- | --- | --- | +| 1 | The bot plays unattended for the full duration | A run lasts 300 s, with a deviation of at most 10 s | Elapsed time printed at the end of the run | +| 2 | Cookies per second is reported | Exactly one line "cookies/second: N" is printed when the run ends | Output of the run | +| 3 | Upgrade rule is correct | The most expensive affordable upgrade is chosen in 100% of the unit test cases | `pytest` result | +| 4 | Tests pass | 0 failing tests; at least 80% line coverage of the logic modules | `pytest` with coverage | +| 5 | A newcomer can run the project | README setup, run and test commands work on a clean clone | Walk-through on a clean clone by S01 | +| 6 | Documentation is complete | Screenshots for 5 of 5 lecture steps in README and in the 3 wiki languages | Count of images per page | +| 7 | Repository metadata is set | Description and at least 5 topics present | Repository API response | +| 8 | No runtime dependency beyond Selenium | `pyproject.toml` lists Selenium as the only runtime dependency | `pyproject.toml` | + +## Risks + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| The game page changes its element IDs or language dialog | The bot fails to start or buy | Keep all selectors in `constants.py`; document the page version used; fail with a clear message | +| The game is slow or blocked in the headless container | Screenshots or the 5 minute run are not reproducible | Run in Docker with a pinned Chromium; allow a shorter duration constant for test runs | +| Web content or network is unavailable during review | A milestone cannot be verified | Unit tests do not need a browser; browser runs are a separate, labelled task | +| The token for the git host is exposed | Account misuse | Tokens are read from the personal `.env` outside the repository; never imported, tested or committed | +| Autonomous mode review is not independent | A defect passes review | Stand-in decisions are marked in each `RC-*` and open to challenge in the final summary by S01 | +| Translations contain errors | Misleading wiki pages | English is authoritative; da and ms follow it page by page and S01 can correct them | + +## Assumptions + +- S01 is the Product Owner, the developer and the reviewer; in autonomous mode the AI acts as stand-in reviewer and records it. +- The people the project is for (S02, S03) cannot be reached for interviews; their needs come from the assignment text and S01. +- Cookie Clicker (ozh version) remains available at its GitHub Pages address during the project. +- Docker is available for the headless browser runs. +- The target repository is the one named by `origin` unless S01 states otherwise (see the Project Plan, Open Issues). +- The idea is validated by the course assignment itself, so no riskiest-assumption test (`RA`) is planned. + +## Constraints + +- Python 3.13 or newer, a local `.venv`, `pyproject.toml`, `pytest`, constants in `constants.py`. +- Folder structure `src/`, `tests/`, `docs/`. +- No runtime dependency unless it is needed. +- Doxygen comments in source and a Doxyfile. +- The wiki exists in English, Danish and Bahasa Malaysia. +- Each pull request is a branch that tracks one step; the framework cannot be edited from this project. +- The PO language is English, the domain is IT. +- Credentials come from a personal `.env`, which is not part of the project. +- The Business Case sets no deadline; the Project Plan assumes 2026-10-28 to 2026-11-04. + +## Cost–Benefit Assessment + +The assessment is qualitative: this is an unpaid learning project, and no revenue exists to quantify. + +| Costs | Benefits | +| --- | --- | +| Effort of S01 for reviewing the plan and the final summary | A reusable, tested bot and a three language learning wiki | +| AI work and compute for planning, code, screenshots and translation | A repository that S02 and S03 can read and run | +| Maintenance if the game page changes | Practice of the framework flow on a small scope | + +## Stakeholders + +| Stakeholder ID (SA) | Interest in this project | +| --- | --- | +| S01 | Product Owner, developer and reviewer; wants a finished, reviewed course assignment | +| S02 | Udemy course participants; want readable, runnable code with the assignment's function names and README instructions | +| S03 | GitHub viewers; want a clear description, topics and README, and no runtime dependencies | + +## Recommendation + +Proceed: the scope is small, the risks have mitigations, and the narrowest first release meets all objectives. + +--- + +[SA-001]: ./stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/dictionary.md b/docs/dictionary.md new file mode 100644 index 0000000..ba2b0bc --- /dev/null +++ b/docs/dictionary.md @@ -0,0 +1,44 @@ +# Domain Dictionary + +## Metadata +| Key | Value | +| --- | --- | +| ID | DICT-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 S02 | Initial version: five game terms | [cadc5ef] | + +--- + +## Purpose and Scope + +Maps each Product Owner (PO) term to its professional IT term. PO language: English (`en`), domain `it`. It covers the game and course terms used by the Business Case and the milestones. + +## Dictionary + +| PO term | Language | IT term | Definition | Used as PO term in | Used as IT term in | +| --- | --- | --- | --- | --- | --- | +| Bot | en | Automation script | A program that plays the game without a human. | BC, SA, MIL | - | +| Cookie | en | Currency unit | The game's currency, earned by clicking the big cookie and spent on upgrades. | BC, SA, MIL | - | +| Cookies per second | en | Production rate | The number of cookies the bot gains per second, printed when the run ends. | BC, MIL | - | +| Lecture step | en | Assignment step | One of the five numbered steps of the Udemy challenge. | BC, SA, MIL | - | +| Upgrade | en | Product | An item in the right-hand pane that the bot buys with cookies. | BC, MIL | - | + +## Rules + +- The Domain Model, use cases and user stories use the PO term; the Operation + Contract, Sequence Diagram, Design Class Diagram and ERD use the IT term. +- One IT term per PO term and one PO term per IT term; no synonyms. +- Rows are in ascending order of the PO term (case-insensitive, by the + alphabet of the PO language), so a term is found without searching. + +--- + +[BC-001]: ./business-case.md +[SA-001]: ./stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/milestones/mil-001-baseline.md b/docs/milestones/mil-001-baseline.md new file mode 100644 index 0000000..c17d06e --- /dev/null +++ b/docs/milestones/mil-001-baseline.md @@ -0,0 +1,76 @@ +# MIL-001 Baseline and repository set-up + +## 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 S02 | Initial version | [cadc5ef] | + +--- + +## Purpose + +Decide whether the planning baseline is complete and accepted, so that code may be planned and written. The gate checks the documents, the recorded decisions and the repository metadata. + +## Deliverable + +Accepted Business Case, Stakeholder Analysis, Project Plan and milestones with `Go` review records; ADRs for the decisions; the Traceability Matrix; repository description and topics on the git host. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | Business Case, Stakeholder Analysis, Project Plan and all milestones have an `RC-*` with `Go` and an `Accepted` row (the Project Plan is accepted by S01 through the plan acceptance) | All rows `Accepted` | Any row `Proposed` or `No-Go` | +| 2 | `bash framework/scripts/check-plan.sh` reports no finding | Exit code 0 | Exit code 1 | +| 3 | The repository shows a description and at least 5 topics | API response contains both | Either is missing | +| 4 | ADR-0001 to ADR-0003 are `Accepted` | Three accepted ADRs | A decision is unrecorded | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| none | First gateway | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O5, success criterion 7 | [BC-001] | +| CN-002, CN-009 | [SA-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S02 (AI as stand-in, autonomous mode, not independent) | + +## Target Date + +2026-10-28 — inside the planned window 2026-10-28 to 2026-11-04 of [PP-001]; the Business Case sets no deadline. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Review and accept the baseline documents | Review BC-001, SA-001, PP-001 and MIL-001 to MIL-007 against their QC checklists, write the `RC-*` records and set the rows to `Accepted`. In autonomous mode the AI is stand-in reviewer and says so in each record. | No | | +| 2 | Record the planning decisions as ADRs | Write ADR-0001 (skip user stories and use cases: one actor, one linear flow), ADR-0002 (light Clean Architecture: game rules separate from the Selenium adapter, no presentation layer) and ADR-0003 (browser runs and screenshots in a Docker container with headless Chromium). | No | ADR-0001, ADR-0002, ADR-0003 | +| 3 | Create the domain dictionary | Create `docs/dictionary.md` with the PO and IT terms of the game and course (bot, cookie, cookies per second, lecture step, upgrade), because the language review of the PO-language documents checks their terms against it. | No | DICT-001 | +| 4 | Create the Traceability Matrix | Create `docs/sqa/traceability-matrix.md` and add a row for each artifact and its review, so coverage of the stakeholder concerns can be read in one place. | No | TM-001 | +| 5 | Set repository description and topics | Set the description and topics (python, selenium, cookie-clicker, bot, udemy, 100-days-of-code) on the git host with the API. The token comes from the personal `.env` outside the repository; it is never printed, imported or committed. Confirm the target repository with S01 first if it differs from `origin`. | No | O5 | +| 6 | Check repository visibility and the AI prompt log | Ask the host API whether the repository is private. If it is public, put `/docs/ai-prompts/` in `.gitignore`; record each session's prompts in `docs/ai-prompts/session-NNN/prompts.md` as the framework requires. | No | | +| 7 | Enable the plan gate commit hook | Run `bash framework/scripts/install-git-hooks.sh --enable-plan-gate` so a commit under `src/` or `tests/` needs a `Task: MIL-NNN#N` trailer. | No | | + +--- + +[BC-001]: ../business-case.md +[PP-001]: ../project-plan.md +[SA-001]: ../stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/milestones/mil-002-scaffold.md b/docs/milestones/mil-002-scaffold.md new file mode 100644 index 0000000..eaa7c46 --- /dev/null +++ b/docs/milestones/mil-002-scaffold.md @@ -0,0 +1,76 @@ +# MIL-002 Project scaffold and tooling + +## 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 S02 | Initial version | [cadc5ef] | + +--- + +## Purpose + +Decide whether the Python project skeleton, tooling and container set-up are ready for feature work. The gate checks that a clean clone can install, test and run a smoke test. + +## Deliverable + +`pyproject.toml`, `src/` and `tests/` layout, `constants.py`, Python `.gitignore`, Doxyfile, README from the framework template with `.venv` instructions, a Dockerfile for headless browser runs, and a passing smoke test. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `python -m venv .venv`, `python -m pip install --upgrade pip` and `python -m pip install -e .[dev]` succeed on a clean clone | All commands exit 0 | Any command fails | +| 2 | `python -m pytest` passes | 0 failures | A test fails | +| 3 | `pyproject.toml` requires Python 3.13 or newer and lists Selenium as the only runtime dependency | Both true | Either false | +| 4 | `bash framework/scripts/check-readme.sh` reports no finding | Exit code 0 | Exit code 1 | +| 5 | The `qc-programming-python.md` review of the new code is `Go` | `RC-*` is `Go` | `No-Go` | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-001 | Baseline must be accepted before code | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O5, success criteria 4, 5 and 8 | [BC-001] | +| CN-004, CN-005, CN-008 | [SA-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S02 (AI as stand-in, autonomous mode, not independent) | + +## Target Date + +2026-10-29 — inside the planned window 2026-10-28 to 2026-11-04 of [PP-001]; the Business Case sets no deadline. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Create pyproject.toml | Configure the project for Python 3.13 or newer with the `src` layout, Selenium as the only runtime dependency, and pytest (with coverage) as a development extra. This keeps S03's wish for no extra runtime dependencies. | No | O5 | +| 2 | Create src and tests layout with constants.py | Create the package under `src/`, a `constants.py` for the URL, selectors, timings and messages, and `tests/` with a first smoke test. Constants live only in `constants.py`. | No | O5 | +| 3 | Add Python .gitignore | Add a standard Python `.gitignore` that also ignores `.venv`, `.env`, caches, coverage output, Doxygen output and browser run artefacts. | No | | +| 4 | Add Doxyfile and Doxygen comment style | Add a `Doxyfile` for `src/` and write all source comments in Doxygen style (`@brief`, `@param`, `@return`). | No | | +| 5 | Create README from the framework template | Create `README.md` from `framework/templates/README-template.md` with overview, requirements, `.venv` creation, `python -m pip install --upgrade pip`, install, run and test commands. | No | O5 | +| 6 | Add Docker image for headless browser runs | Add a Dockerfile and a helper that run the bot and take screenshots in a Linux container with headless Chromium, so no GUI test uses the host desktop (`framework/process/gui-testing.md`). | No | ADR-0003 | + +--- + +[BC-001]: ../business-case.md +[PP-001]: ../project-plan.md +[SA-001]: ../stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/milestones/mil-003-click-bot.md b/docs/milestones/mil-003-click-bot.md new file mode 100644 index 0000000..dfec571 --- /dev/null +++ b/docs/milestones/mil-003-click-bot.md @@ -0,0 +1,73 @@ +# MIL-003 Lecture steps 1 and 2: open the game and click the cookie + +## 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 S02 | Initial version | [cadc5ef] | + +--- + +## Purpose + +Decide whether the bot can open Cookie Clicker, dismiss the language selection and click the cookie, which completes lecture steps 1 and 2. + +## Deliverable + +Functions that open the game, dismiss the language dialog and click the big cookie; unit tests with a fake driver; screenshots for lecture steps 1 and 2. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | A containerised run opens the game, dismisses the language selection and the cookie count rises | Count after the run is greater than 0 | Count stays 0 or the run fails | +| 2 | Unit tests for the click logic pass without a browser | 0 failures | A test fails | +| 3 | `docs/images/step-1.png` and `docs/images/step-2.png` exist | Both files exist and show the game | A file is missing | +| 4 | The code review against `qc-programming-python.md` is `Go` | `RC-*` is `Go` | `No-Go` | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-002 | Needs the scaffold and the container image | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O1 | [BC-001] | +| CN-001, CN-004 | [SA-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S02 (AI as stand-in, autonomous mode, not independent) | + +## Target Date + +2026-10-30 — inside the planned window 2026-10-28 to 2026-11-04 of [PP-001]; the Business Case sets no deadline. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Study the game and capture lecture step 1 | Open the game in the container, write down the element IDs and classes needed (language list, big cookie, cookie counter, product list) as constants, and save the screenshot `step-1.png`. | No | O1 | +| 2 | Create the driver and open the game | Implement the browser set-up and `open_game` with Selenium, using waits instead of sleeps, so the page is ready before the next action. | No | O1 | +| 3 | Dismiss the language selection | Implement `dismiss_language` which waits for the language dialog and chooses English, as the assignment says it must be dismissed automatically before play. | No | O1 | +| 4 | Click the cookie as fast as possible | Implement `click_cookie` and the loop that clicks the big cookie repeatedly. Unit tests use a fake driver; a container run saves `step-2.png`. | No | O1 | + +--- + +[BC-001]: ../business-case.md +[PP-001]: ../project-plan.md +[SA-001]: ../stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/milestones/mil-004-buy-upgrades.md b/docs/milestones/mil-004-buy-upgrades.md new file mode 100644 index 0000000..cc577be --- /dev/null +++ b/docs/milestones/mil-004-buy-upgrades.md @@ -0,0 +1,74 @@ +# MIL-004 Lecture step 3: buy the most expensive affordable upgrade + +## 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 S02 | Initial version | [cadc5ef] | + +--- + +## Purpose + +Decide whether the bot reads the cookie count and prices correctly and buys the most expensive upgrade it can afford every 5 seconds (lecture step 3). + +## Deliverable + +Parsing helpers (strip, split and replace on the page text), the selection rule, the purchase action on a 5 second timer, unit tests for the rule, and the screenshot for lecture step 3. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | Parsing handles values such as `1,234 cookies`, `105` and prices with thousands separators | All parametrised tests pass | A case fails | +| 2 | With 105 cookies, Grandma costing more than Cursor, the rule picks Grandma | Test passes | Test fails | +| 3 | A containerised run buys at least one upgrade | Purchase visible in the log and screenshot | No purchase | +| 4 | `docs/images/step-3.png` exists | File exists | File missing | +| 5 | The code review against `qc-programming-python.md` is `Go` | `RC-*` is `Go` | `No-Go` | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-003 | Needs the open and click functions | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O2, success criterion 3 | [BC-001] | +| CN-001, CN-004 | [SA-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S02 (AI as stand-in, autonomous mode, not independent) | + +## Target Date + +2026-10-31 — inside the planned window 2026-10-28 to 2026-11-04 of [PP-001]; the Business Case sets no deadline. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Read the cookie count from the page | Implement `get_cookie_count`, turning the page text into an integer with strip, split and replace (the assignment's hints) and covering thousands separators and the plural word. | No | O2 | +| 2 | Read the product prices and availability | Implement the function that returns each product with its price and whether it is affordable, reading the right-hand pane. | No | O2 | +| 3 | Choose the most expensive affordable upgrade | Implement the pure selection function. It is separate from Selenium so it is fully unit tested, including the 105 cookie Grandma versus Cursor example. | No | O2 | +| 4 | Buy on a 5 second timer | Implement the timer that checks every 5 seconds while the clicking continues and buys the selected upgrade. Save `step-3.png` from a container run. | No | O2 | + +--- + +[BC-001]: ../business-case.md +[PP-001]: ../project-plan.md +[SA-001]: ../stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/milestones/mil-005-timed-run.md b/docs/milestones/mil-005-timed-run.md new file mode 100644 index 0000000..38434d1 --- /dev/null +++ b/docs/milestones/mil-005-timed-run.md @@ -0,0 +1,74 @@ +# MIL-005 Lecture step 4: five minute run and cookies per second + +## 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 S02 | Initial version | [cadc5ef] | + +--- + +## Purpose + +Decide whether the bot stops after 5 minutes and prints the cookies per second, which completes the assignment's required behaviour (lecture step 4). + +## Deliverable + +A time-limited main loop, the cookies per second calculation and output, a command-line entry point, a recorded 5 minute container run and the screenshot for lecture step 4. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | A full containerised run lasts 300 seconds with a deviation of at most 10 seconds | Elapsed time within 290 to 310 s | Outside the range | +| 2 | The run prints exactly one line `cookies/second: N` | One line printed | None or several | +| 3 | The calculation is unit tested with a fake clock and fake driver | 0 failures | A test fails | +| 4 | `docs/images/step-4.png` exists and the run result is recorded in the wiki source | Both exist | Either missing | +| 5 | The code review against `qc-programming-python.md` is `Go` | `RC-*` is `Go` | `No-Go` | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-004 | Needs the purchase logic | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O3, success criteria 1 and 2 | [BC-001] | +| CN-001 | [SA-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S02 (AI as stand-in, autonomous mode, not independent) | + +## Target Date + +2026-11-01 — inside the planned window 2026-10-28 to 2026-11-04 of [PP-001]; the Business Case sets no deadline. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Stop after five minutes | Implement the main loop that runs for the duration in `constants.py` (300 seconds) using a monotonic clock, so a test can use a short duration and a fake clock. | No | O3 | +| 2 | Calculate and print cookies per second | Read the game's own cookies-per-second figure and the total cookies baked, and print `cookies/second: N` when the run ends. Tests cover the formatting and the calculation. | No | O3 | +| 3 | Add the command-line entry point | Add a `main` function and a console script so `python -m` or the installed command starts the bot. Options come later in lecture step 5. | No | O3 | +| 4 | Do and record the five minute run | Run the bot for a full 5 minutes in the container, keep the printed result and save `step-4.png`. The result is the baseline for step 5. | No | O3 | + +--- + +[BC-001]: ../business-case.md +[PP-001]: ../project-plan.md +[SA-001]: ../stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/milestones/mil-006-strategy.md b/docs/milestones/mil-006-strategy.md new file mode 100644 index 0000000..4b81a98 --- /dev/null +++ b/docs/milestones/mil-006-strategy.md @@ -0,0 +1,73 @@ +# MIL-006 Lecture step 5: tweak the strategy + +## 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 S02 | Initial version | [cadc5ef] | + +--- + +## Purpose + +Decide whether the bot offers alternative strategies and whether the participant can compare their cookies per second, which completes lecture step 5. + +## Deliverable + +Strategy options (check interval and buy one or buy all affordable), tests for each option, a recorded comparison of runs and the screenshot for lecture step 5. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | The check interval and the buy-all option are selectable from the command line and default to the assignment's behaviour (5 seconds, buy one) | Defaults unchanged | Defaults changed | +| 2 | Unit tests cover each option | 0 failures | A test fails | +| 3 | At least three container runs are compared and the table is recorded | Table with 3 or more rows | Fewer rows | +| 4 | `docs/images/step-5.png` exists | File exists | File missing | +| 5 | The code review against `qc-programming-python.md` is `Go` | `RC-*` is `Go` | `No-Go` | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-005 | Needs the working 5 minute baseline | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O4 | [BC-001] | +| CN-003 | [SA-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S02 (AI as stand-in, autonomous mode, not independent) | + +## Target Date + +2026-11-02 — inside the planned window 2026-10-28 to 2026-11-04 of [PP-001]; the Business Case sets no deadline. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Make the check interval selectable | Add an option for the interval between upgrade checks (for example 1, 5 or 10 seconds), with the assignment's 5 seconds as the default. | No | O4 | +| 2 | Add the buy all affordable strategy | Add a strategy that buys every affordable upgrade, most expensive first, next to the default buy-one strategy. Both stay unit tested. | No | O4 | +| 3 | Compare strategies with container runs | Run the combinations and record cookies per second for each in a table, then name the best strategy. Save `step-5.png` from the best run. | No | O4 | + +--- + +[BC-001]: ../business-case.md +[PP-001]: ../project-plan.md +[SA-001]: ../stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/milestones/mil-007-documentation.md b/docs/milestones/mil-007-documentation.md new file mode 100644 index 0000000..a712570 --- /dev/null +++ b/docs/milestones/mil-007-documentation.md @@ -0,0 +1,78 @@ +# MIL-007 Documentation, wiki and release + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-007 | +| 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 S02 | Initial version | [cadc5ef] | + +--- + +## Purpose + +Decide whether the project is ready for S02 and S03: complete README, Doxygen output, a three language wiki with a screenshot per lecture step, and a final quality check. + +## Deliverable + +Final README with screenshots, Doxygen configuration that builds, wiki pages in English, Danish and Bahasa Malaysia, published wiki, passing framework checks and the end-of-run summary for S01. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | README contains the template sections, run and test instructions and the 5 screenshots | `check-readme.sh` exit 0 and 5 images | Finding or image missing | +| 2 | Every English wiki page exists in `-da` and `-ms` form with the language line and the same set of pages | Page sets identical | A page is missing | +| 3 | Each lecture step page has its screenshot and explains what was gained | 5 pages in 3 languages checked | Any missing | +| 4 | `bash framework/scripts/check-plan.sh`, `check-languages.sh` and `check-readme.sh` report no finding | All exit 0 | Any finding | +| 5 | `doxygen Doxyfile` builds without warnings | 0 warnings | Warnings | +| 6 | The wiki is published on the git host | Pages visible | Not published | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-006 | Documents the final behaviour | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| O5, O6, success criteria 5, 6 and 7 | [BC-001] | +| CN-005, CN-006, CN-007 | [SA-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S02 (AI as stand-in, autonomous mode, not independent) | + +## Target Date + +2026-11-04 — inside the planned window 2026-10-28 to 2026-11-04 of [PP-001]; the Business Case sets no deadline. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Finish the README with screenshots | Complete the README: the five screenshots in lecture order, usage with options, test instructions and links. It follows the framework template. | No | O5 | +| 2 | Build the Doxygen documentation | Run Doxygen with the project's Doxyfile, fix every warning and keep the generated output out of git. | No | O5 | +| 3 | Write the English wiki | Write `Home`, the five lecture step pages, `_Sidebar` and `_Footer` in `docs/wiki/`. Each step page says what was gained in that step and shows its screenshot. | No | O6 | +| 4 | Write the Danish wiki | Translate every English wiki page to Danish as `-da.md`, with the language line and the same page set. | No | O6 | +| 5 | Write the Bahasa Malaysia wiki | Translate every English wiki page to Bahasa Malaysia as `-ms.md`, with the language line and the same page set. | No | O6 | +| 6 | Publish the wiki | Publish `docs/wiki/` to the git host wiki, with the publish workflow template or the wiki token from the personal `.env`; the token is never printed or committed. | No | O6 | +| 7 | Run the final checks and write the summary | Run the framework check scripts, the full test suite and the clean-clone walk-through, then give S01 the summary: pull requests merged, each `RC-*` verdict, stand-in decisions and stops. | No | | + +--- + +[BC-001]: ../business-case.md +[PP-001]: ../project-plan.md +[SA-001]: ../stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/project-plan.md b/docs/project-plan.md new file mode 100644 index 0000000..afe9148 --- /dev/null +++ b/docs/project-plan.md @@ -0,0 +1,108 @@ +# Project Plan: Cookie Clicker Bot + +## 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 | S01 | Initial version: seven gateways; accepted by S01 in chat | [cadc5ef] | + +--- + +## Purpose + +This plan schedules seven gateways (`MIL-001` to `MIL-007`) that take the Cookie Clicker bot from an accepted baseline to a documented, tested and published repository. The Business Case sets no deadline, so the window 2026-10-28 to 2026-11-04 is a planning assumption of this plan. Each gateway ends in a decision and a deliverable and is delivered by one pull request on its own branch. + +## Planning Assumptions + +- Week 1 starts 2026-10-28; the plan ends by 2026-11-04 (a planning assumption, see Open Issues). +- Phase length: one day per gateway, except the baseline and documentation, which are longer. Gateways 003 to 006 follow the Udemy lecture steps 1 to 5. +- One branch and one pull request per gateway, each closing the issues of its tasks. +- The user stories and use case steps of the journey are skipped for this project (ADR-0001), so no gateway lists stories. +- Autonomous mode: S01 accepts this plan in chat; the AI acts as stand-in reviewer and records it in each `RC-*`. + +## Gateway Schedule + +| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Baseline and repository set-up | [MIL-001] | 2026-10-28 | 2026-10-28 | S01 | none (documents) | Accepted baseline, ADRs, repository description and topics | | +| Project scaffold and tooling | [MIL-002] | 2026-10-28 to 2026-10-29 | 2026-10-29 | S01 | none (technical tasks) | `pyproject.toml`, layout, `.gitignore`, Doxyfile, README, Docker image | | +| Lecture steps 1 and 2 | [MIL-003] | 2026-10-29 to 2026-10-30 | 2026-10-30 | S01 | none (technical tasks) | Open game, dismiss language, click cookie, screenshots 1 and 2 | | +| Lecture step 3 | [MIL-004] | 2026-10-30 to 2026-10-31 | 2026-10-31 | S01 | none (technical tasks) | Parsing, selection rule, purchase every 5 s, screenshot 3 | | +| Lecture step 4 | [MIL-005] | 2026-10-31 to 2026-11-01 | 2026-11-01 | S01 | none (technical tasks) | 5 minute run, cookies per second, screenshot 4 | | +| Lecture step 5 | [MIL-006] | 2026-11-01 to 2026-11-02 | 2026-11-02 | S01 | none (technical tasks) | Strategy options, comparison, screenshot 5 | | +| Documentation, wiki and release | [MIL-007] | 2026-11-02 to 2026-11-04 | 2026-11-04 | S01 | none (documentation) | README, Doxygen, wiki in en, da and ms, final checks | | + +```plantuml +@startgantt +Project starts 2026-10-28 +[Baseline] starts 2026-10-28 and ends 2026-10-28 +[Scaffold] starts 2026-10-28 and ends 2026-10-29 +[Steps 1 and 2] starts 2026-10-29 and ends 2026-10-30 +[Step 3] starts 2026-10-30 and ends 2026-10-31 +[Step 4] starts 2026-10-31 and ends 2026-11-01 +[Step 5] starts 2026-11-01 and ends 2026-11-02 +[Documentation] starts 2026-11-02 and ends 2026-11-04 +[Baseline Go/No-Go] happens 2026-10-28 +[Scaffold Go/No-Go] happens 2026-10-29 +[Steps 1 and 2 Go/No-Go] happens 2026-10-30 +[Step 3 Go/No-Go] happens 2026-10-31 +[Step 4 Go/No-Go] happens 2026-11-01 +[Step 5 Go/No-Go] happens 2026-11-02 +[Release Go/No-Go] happens 2026-11-04 +@endgantt +``` + +## Scope Coverage + +| Business Case scope item | Gateway | +| --- | --- | +| Selenium bot for the game, with the assignment's function names | MIL-003, MIL-004, MIL-005 | +| Lecture steps 1 to 5 | MIL-003 (1 and 2), MIL-004 (3), MIL-005 (4), MIL-006 (5) | +| Python project files: `src/`, `tests/`, `docs/`, `pyproject.toml`, `constants.py`, `.gitignore`, Doxyfile, README | MIL-002, MIL-007 | +| Unit tests with `pytest` | MIL-002 to MIL-006 | +| One screenshot per lecture step in README and wiki | MIL-003 to MIL-006 (capture), MIL-007 (use) | +| Wiki in en, da and ms | MIL-007 | +| Repository description and topics | MIL-001 | + +## Dependencies + +``` +MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005 → MIL-006 → MIL-007 +``` + +A No-Go on a gateway stops all later gateways until it is fixed and re-reviewed. The end date then moves by the days spent on the rework; S01 decides a move of the end date. + +## Plan Risks + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| The game changes its page structure (Business Case risk: page changes) | Steps 1 to 4 need rework | Selectors only in `constants.py`; the first task records the page as seen | +| The headless container cannot run the game well | Screenshots and the 5 minute run are late | Try the container in MIL-002; pin Chromium; fall back to a shorter duration constant for tests only | +| Stand-in review misses a defect | Defect reaches `main` | `RC-*` marks the review as not independent; S01 reviews the final summary | +| Translations take longer than planned | MIL-007 slips | Write English first; da and ms follow page by page; no extra pages | + +## Open Issues + +- Target repository: the user names `https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code`, but `origin` is `Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new`. The plan uses `origin` until S01 states otherwise in chat. +- The Business Case sets no deadline; the window 2026-10-28 to 2026-11-04 is this plan's own assumption. +- No QC checklist exists for the Project Plan acceptance beyond `QC-PP-001`; S01's acceptance of the plan in chat accepts the row. + +--- + +[BC-001]: ./business-case.md +[SA-001]: ./stakeholder-analysis.md +[MIL-001]: ./milestones/mil-001-baseline.md +[MIL-002]: ./milestones/mil-002-scaffold.md +[MIL-003]: ./milestones/mil-003-click-bot.md +[MIL-004]: ./milestones/mil-004-buy-upgrades.md +[MIL-005]: ./milestones/mil-005-timed-run.md +[MIL-006]: ./milestones/mil-006-strategy.md +[MIL-007]: ./milestones/mil-007-documentation.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-001-business-case.md b/docs/sqa/reviews/rc-001-business-case.md new file mode 100644 index 0000000..661686d --- /dev/null +++ b/docs/sqa/reviews/rc-001-business-case.md @@ -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 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [BC-001] +- Checklist used: [QC-BC-001] (`QC-BC-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | Cost-Benefit Assessment is qualitative and states why: unpaid learning project, no revenue. | +| 2 | Risks are identified with documented impact and mitigation | Pass | Risks table: six risks, each with impact and mitigation. | +| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | Success Criteria: eight rows with numeric targets and a measure. | +| 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, Clean Architecture. | +| 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: Proceed. | + +## 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Executive English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — BC-001 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[BC-001]: ../../business-case.md +[QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-002-stakeholder-analysis.md b/docs/sqa/reviews/rc-002-stakeholder-analysis.md new file mode 100644 index 0000000..c36e320 --- /dev/null +++ b/docs/sqa/reviews/rc-002-stakeholder-analysis.md @@ -0,0 +1,68 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-002 | +| CrossReference | [SA-001], [QC-SA-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [SA-001] +- Checklist used: [QC-SA-001] (`QC-SA-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | Power/Interest grid is filled for every stakeholder, with no gaps or unclassified entries | Pass | Three stakeholders, each with 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 | S01 to S03, stable; none renumbered. | +| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | Role, organization, power and interest levels are in the summary table. | +| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | CM-001 to CM-003 give 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 | Business Goal Alignment table maps concerns to O1 to O6. | +| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | Concern register maps each concern to a FURPS+ attribute. | +| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | Short entries in plain language. | +| 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, each with the stakeholder who raised it. | + +## Language and Domain Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Professional English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — SA-001 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[SA-001]: ../../stakeholder-analysis.md +[QC-SA-001]: ../../../framework/qc/artifacts/qc-stakeholder-analysis.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-003-dictionary.md b/docs/sqa/reviews/rc-003-dictionary.md new file mode 100644 index 0000000..465a8e7 --- /dev/null +++ b/docs/sqa/reviews/rc-003-dictionary.md @@ -0,0 +1,67 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-003 | +| CrossReference | [DICT-001], [QC-DICT-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [DICT-001] +- Checklist used: [QC-DICT-001] (`QC-DICT-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | Every row has a PO term, its language, an IT term and a definition | Pass | Five rows, all cells filled. | +| 2 | Each PO term maps to exactly one IT term and the reverse (no synonyms) | Pass | One IT term per PO term and the reverse; no synonyms. | +| 3 | Every Domain Model concept has a row, and the Domain Model uses its PO term | N-A | No Domain Model exists in this project (ADR-0001 skips use case design). | +| 4 | The Operation Contracts, Sequence Diagrams, Design Class Diagrams and ERD use the IT term, not the PO term | N-A | No Operation Contract, Sequence Diagram, DCD or ERD exists. | +| 5 | Definitions are written in the PO language and are one sentence | Pass | One sentence per definition, in English. | +| 6 | "Used as PO term in" and "Used as IT term in" name artifact types that exist in the project | Pass | Only BC, SA and MIL, which exist, are named. | +| 7 | The dictionary's `Language` and `Domain` rows, and the language of every row, match the PO language and domain in the project registry | Pass | Language en and domain it match the registry. | +| 8 | The dictionary rows are in ascending order of the PO term (case-insensitive, by the alphabet of the PO language) | Pass | Bot, Cookie, Cookies per second, Lecture step, Upgrade: ascending. | + +## 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Professional English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — DICT-001 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[DICT-001]: ../../dictionary.md +[QC-DICT-001]: ../../../framework/qc/artifacts/qc-dictionary.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-004-adr-0001.md b/docs/sqa/reviews/rc-004-adr-0001.md new file mode 100644 index 0000000..481ff8e --- /dev/null +++ b/docs/sqa/reviews/rc-004-adr-0001.md @@ -0,0 +1,55 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-004 | +| CrossReference | [ADR-0001], [QC-ADR-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [ADR-0001] +- Checklist used: [QC-ADR-001] (`QC-ADR-001`) +- Scope: full review +- Language and domain: n/a +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | The ID (`ADR-NNNN`, 4-digit) matches the filename number and is unique and sequential | Pass | | +| 2 | Context states the problem, the forces (cost, risk, constraints) and the options evaluated | Pass | Context lists the problem and the options. | +| 3 | At least two options were considered, or the absence of alternatives is justified | Pass | Two or three options are listed. | +| 4 | Decision is stated in one or two unhedged sentences and matches one of the evaluated options | Pass | Decision names the chosen option in plain sentences. | +| 5 | Consequences list both Positive and Negative outcomes | Pass | Positive and Negative lists present. | +| 6 | Quality-attribute impacts (performance, security, portability, etc.) are named where the decision affects them | N-A | No quality attribute is affected. | +| 7 | Affected Artifacts are listed as links, and each is also in CrossReference | Pass | Affected Artifacts match CrossReference. | +| 8 | Status changes are recorded as new Version History rows with a Change summary and Commit link; retained rows are never rewritten | Pass | | +| 9 | A superseded or deprecated ADR names its successor, and the successor links back | Pass | | +| 10 | Written in business or technical language of the domain, with no unexplained abbreviations | Pass | | +| 11 | Status is one of `Proposed`, `Accepted`, `Rejected`, `Deprecated` or `Superseded by ADR-NNNN`, and every Version History row uses only these | Pass | Status `Proposed` before this review. | + +## Overall Verdict + +Go — ADR-0001 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[ADR-0001]: ../../adr/adr-0001-skip-stories-use-cases.md +[QC-ADR-001]: ../../../framework/qc/artifacts/qc-adr.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-005-adr-0002.md b/docs/sqa/reviews/rc-005-adr-0002.md new file mode 100644 index 0000000..d42ebab --- /dev/null +++ b/docs/sqa/reviews/rc-005-adr-0002.md @@ -0,0 +1,55 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-005 | +| CrossReference | [ADR-0002], [QC-ADR-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [ADR-0002] +- Checklist used: [QC-ADR-001] (`QC-ADR-001`) +- Scope: full review +- Language and domain: n/a +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | The ID (`ADR-NNNN`, 4-digit) matches the filename number and is unique and sequential | Pass | | +| 2 | Context states the problem, the forces (cost, risk, constraints) and the options evaluated | Pass | Context lists the problem and the options. | +| 3 | At least two options were considered, or the absence of alternatives is justified | Pass | Two or three options are listed. | +| 4 | Decision is stated in one or two unhedged sentences and matches one of the evaluated options | Pass | Decision names the chosen option in plain sentences. | +| 5 | Consequences list both Positive and Negative outcomes | Pass | Positive and Negative lists present. | +| 6 | Quality-attribute impacts (performance, security, portability, etc.) are named where the decision affects them | Pass | | +| 7 | Affected Artifacts are listed as links, and each is also in CrossReference | Pass | Affected Artifacts match CrossReference. | +| 8 | Status changes are recorded as new Version History rows with a Change summary and Commit link; retained rows are never rewritten | Pass | | +| 9 | A superseded or deprecated ADR names its successor, and the successor links back | Pass | | +| 10 | Written in business or technical language of the domain, with no unexplained abbreviations | Pass | | +| 11 | Status is one of `Proposed`, `Accepted`, `Rejected`, `Deprecated` or `Superseded by ADR-NNNN`, and every Version History row uses only these | Pass | Status `Proposed` before this review. | + +## Overall Verdict + +Go — ADR-0002 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[ADR-0002]: ../../adr/adr-0002-light-clean-architecture.md +[QC-ADR-001]: ../../../framework/qc/artifacts/qc-adr.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-006-adr-0003.md b/docs/sqa/reviews/rc-006-adr-0003.md new file mode 100644 index 0000000..097322d --- /dev/null +++ b/docs/sqa/reviews/rc-006-adr-0003.md @@ -0,0 +1,55 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-006 | +| CrossReference | [ADR-0003], [QC-ADR-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [ADR-0003] +- Checklist used: [QC-ADR-001] (`QC-ADR-001`) +- Scope: full review +- Language and domain: n/a +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | The ID (`ADR-NNNN`, 4-digit) matches the filename number and is unique and sequential | Pass | | +| 2 | Context states the problem, the forces (cost, risk, constraints) and the options evaluated | Pass | Context lists the problem and the options. | +| 3 | At least two options were considered, or the absence of alternatives is justified | Pass | Two or three options are listed. | +| 4 | Decision is stated in one or two unhedged sentences and matches one of the evaluated options | Pass | Decision names the chosen option in plain sentences. | +| 5 | Consequences list both Positive and Negative outcomes | Pass | Positive and Negative lists present. | +| 6 | Quality-attribute impacts (performance, security, portability, etc.) are named where the decision affects them | Pass | | +| 7 | Affected Artifacts are listed as links, and each is also in CrossReference | Pass | Affected Artifacts match CrossReference. | +| 8 | Status changes are recorded as new Version History rows with a Change summary and Commit link; retained rows are never rewritten | Pass | | +| 9 | A superseded or deprecated ADR names its successor, and the successor links back | Pass | | +| 10 | Written in business or technical language of the domain, with no unexplained abbreviations | Pass | | +| 11 | Status is one of `Proposed`, `Accepted`, `Rejected`, `Deprecated` or `Superseded by ADR-NNNN`, and every Version History row uses only these | Pass | Status `Proposed` before this review. | + +## Overall Verdict + +Go — ADR-0003 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[ADR-0003]: ../../adr/adr-0003-docker-headless-browser.md +[QC-ADR-001]: ../../../framework/qc/artifacts/qc-adr.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-007-mil-001-baseline.md b/docs/sqa/reviews/rc-007-mil-001-baseline.md new file mode 100644 index 0000000..ff3b6d7 --- /dev/null +++ b/docs/sqa/reviews/rc-007-mil-001-baseline.md @@ -0,0 +1,65 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-007 | +| CrossReference | [MIL-001], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-001] +- Checklist used: [QC-MIL-001] (`QC-MIL-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and runs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table has objectively checkable criteria with Go and No-Go columns. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding gateway. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to Business Case objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership: owner S01, approving reviewer S02 (AI stand-in). | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date lies inside the plan window in PP-001; the Business Case sets no 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 | 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Executive English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — MIL-001 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-001]: ../../milestones/mil-001-baseline.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-008-mil-002-scaffold.md b/docs/sqa/reviews/rc-008-mil-002-scaffold.md new file mode 100644 index 0000000..4f295e9 --- /dev/null +++ b/docs/sqa/reviews/rc-008-mil-002-scaffold.md @@ -0,0 +1,65 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-008 | +| CrossReference | [MIL-002], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-002] +- Checklist used: [QC-MIL-001] (`QC-MIL-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and runs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table has objectively checkable criteria with Go and No-Go columns. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding gateway. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to Business Case objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership: owner S01, approving reviewer S02 (AI stand-in). | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date lies inside the plan window in PP-001; the Business Case sets no 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 | 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Executive English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — MIL-002 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-002]: ../../milestones/mil-002-scaffold.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-009-mil-003-click-bot.md b/docs/sqa/reviews/rc-009-mil-003-click-bot.md new file mode 100644 index 0000000..12146b3 --- /dev/null +++ b/docs/sqa/reviews/rc-009-mil-003-click-bot.md @@ -0,0 +1,65 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-009 | +| CrossReference | [MIL-003], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-003] +- Checklist used: [QC-MIL-001] (`QC-MIL-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and runs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table has objectively checkable criteria with Go and No-Go columns. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding gateway. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to Business Case objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership: owner S01, approving reviewer S02 (AI stand-in). | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date lies inside the plan window in PP-001; the Business Case sets no 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 | 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Executive English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — MIL-003 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-003]: ../../milestones/mil-003-click-bot.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-010-mil-004-buy-upgrades.md b/docs/sqa/reviews/rc-010-mil-004-buy-upgrades.md new file mode 100644 index 0000000..573fb72 --- /dev/null +++ b/docs/sqa/reviews/rc-010-mil-004-buy-upgrades.md @@ -0,0 +1,65 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-010 | +| CrossReference | [MIL-004], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-004] +- Checklist used: [QC-MIL-001] (`QC-MIL-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and runs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table has objectively checkable criteria with Go and No-Go columns. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding gateway. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to Business Case objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership: owner S01, approving reviewer S02 (AI stand-in). | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date lies inside the plan window in PP-001; the Business Case sets no 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 | 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Executive English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — MIL-004 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-004]: ../../milestones/mil-004-buy-upgrades.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-011-mil-005-timed-run.md b/docs/sqa/reviews/rc-011-mil-005-timed-run.md new file mode 100644 index 0000000..2c9c79a --- /dev/null +++ b/docs/sqa/reviews/rc-011-mil-005-timed-run.md @@ -0,0 +1,65 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-011 | +| CrossReference | [MIL-005], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-005] +- Checklist used: [QC-MIL-001] (`QC-MIL-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and runs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table has objectively checkable criteria with Go and No-Go columns. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding gateway. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to Business Case objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership: owner S01, approving reviewer S02 (AI stand-in). | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date lies inside the plan window in PP-001; the Business Case sets no 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 | 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Executive English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — MIL-005 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-005]: ../../milestones/mil-005-timed-run.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-012-mil-006-strategy.md b/docs/sqa/reviews/rc-012-mil-006-strategy.md new file mode 100644 index 0000000..e620325 --- /dev/null +++ b/docs/sqa/reviews/rc-012-mil-006-strategy.md @@ -0,0 +1,65 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-012 | +| CrossReference | [MIL-006], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-006] +- Checklist used: [QC-MIL-001] (`QC-MIL-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and runs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table has objectively checkable criteria with Go and No-Go columns. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding gateway. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to Business Case objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership: owner S01, approving reviewer S02 (AI stand-in). | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date lies inside the plan window in PP-001; the Business Case sets no 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 | 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Executive English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — MIL-006 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-006]: ../../milestones/mil-006-strategy.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/reviews/rc-013-mil-007-documentation.md b/docs/sqa/reviews/rc-013-mil-007-documentation.md new file mode 100644 index 0000000..880324c --- /dev/null +++ b/docs/sqa/reviews/rc-013-mil-007-documentation.md @@ -0,0 +1,65 @@ +# SQA Review Record + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-013 | +| CrossReference | [MIL-007], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Review record, full review | [cadc5ef] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-007] +- Checklist used: [QC-MIL-001] (`QC-MIL-001`) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none +- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S02`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and runs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table has objectively checkable criteria with Go and No-Go columns. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding gateway. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability maps to Business Case objectives and success criteria. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership: owner S01, approving reviewer S02 (AI stand-in). | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date lies inside the plan window in PP-001; the Business Case sets no 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 | 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. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register of the type is IT Executive English (registry, Languages). | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow DICT-001: bot, cookie, cookies per second, lecture step, upgrade. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists in `docs/`. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; no language change. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in reviewer reads English and checked the IT terms in context. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (ADR, QC, ISO/IEC, S-IDs) are spelled out or defined where first used, or are the framework's own IDs. | + +## Overall Verdict + +Go — MIL-007 meets every Mandatory criterion. No blocking finding. The review is not independent: the AI authored and reviewed it as stand-in for S02, and S01 can challenge it in the end-of-run summary. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-007]: ../../milestones/mil-007-documentation.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/sqa/traceability-matrix.md b/docs/sqa/traceability-matrix.md new file mode 100644 index 0000000..390be58 --- /dev/null +++ b/docs/sqa/traceability-matrix.md @@ -0,0 +1,87 @@ +# Traceability Matrix + +## Metadata +| Key | Value | +| --- | --- | +| ID | TM-001 | +| CrossReference | [BC-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-28 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S02 | Initial version: baseline artifacts | [cadc5ef] | + +--- + +## Purpose + +Tracks backward/forward links between artifact instances so that the Business Case's +cross-artifact traceability success criterion is measurable. A row is added or +updated whenever an artifact instance is created or reviewed. + +## Purpose + +Tracks backward and forward links between artifact instances so that the Business Case's traceability can be read in one place. A row is added or updated whenever an artifact is created or reviewed. Rows for code and tests are added by the milestones that create them. + +## Traceability Table + +| Artifact Instance | Type | Language | Domain | Upstream (Backward Link) | Downstream (Forward Link) | Last Reviewed (RC-ID) | +| --- | --- | --- | --- | --- | --- | --- | +| [BC-001] | Business Case | en | it | - | [SA-001], [PP-001] | RC-001 | +| [SA-001] | Stakeholder Analysis | en | it | [BC-001] | [PP-001] | RC-002 | +| [PP-001] | Project Plan | en | it | [BC-001], [SA-001] | [MIL-001] to [MIL-007] | - (accepted by S01 in chat; no checklist) | +| [DICT-001] | Domain Dictionary | en | it | [BC-001], [SA-001] | - | RC-003 | +| [ADR-0001] | ADR | - | - | [BC-001] | [PP-001] | RC-004 | +| [ADR-0002] | ADR | - | - | [BC-001], [SA-001] | code in MIL-002 onward | RC-005 | +| [ADR-0003] | ADR | - | - | [BC-001] | [MIL-002], [MIL-003] | RC-006 | +| [MIL-001] | Milestone | en | it | [BC-001], [PP-001] | [MIL-002] | RC-007 | +| [MIL-002] | Milestone | en | it | [BC-001], [PP-001] | [MIL-003] | RC-008 | +| [MIL-003] | Milestone | en | it | [BC-001], [PP-001] | [MIL-004] | RC-009 | +| [MIL-004] | Milestone | en | it | [BC-001], [PP-001] | [MIL-005] | RC-010 | +| [MIL-005] | Milestone | en | it | [BC-001], [PP-001] | [MIL-006] | RC-011 | +| [MIL-006] | Milestone | en | it | [BC-001], [PP-001] | [MIL-007] | RC-012 | +| [MIL-007] | Milestone | en | it | [BC-001], [PP-001] | - | RC-013 | + +## Concern Coverage + +| Concern (CN-ID) | Views that answer it | Decisions (ADR) | Quality check (TP) | Status | +| --- | --- | --- | --- | --- | +| CN-001 | [BC-001], [MIL-003], [MIL-004], [MIL-005] | [ADR-0002] | Unit tests per gateway | Planned | +| CN-002 | [PP-001], [MIL-001] | [ADR-0001] | Review records | Covered | +| CN-003 | [MIL-006] | - | Unit tests per gateway | Planned | +| CN-004 | [MIL-002], [MIL-003] | [ADR-0002] | Code review | Planned | +| CN-005 | [MIL-002], [MIL-007] | - | Clean clone walk-through | Planned | +| CN-006 | [MIL-007] | - | Wiki check | Planned | +| CN-007 | [MIL-001], [MIL-007] | - | Repository API check | Planned | +| CN-008 | [MIL-002] | [ADR-0002] | pyproject check | Planned | +| CN-009 | [MIL-001] | - | Review of .gitignore and history | Planned | + +## Open Inconsistencies + +| # | Views | Inconsistency | Found in (RC-ID) | Status | Resolved in | +| --- | --- | --- | --- | --- | --- | +| - | - | None found | - | Closed | - | + +## Coverage Notes + +- No test plan (`TP`), architecture description (`AD`) or design artifacts exist: ADR-0001 skips stories and use cases, and the code is small. Quality checks in Concern Coverage name the check used instead. +- `-` in Upstream means foundational, in Downstream that nothing is built on it yet, and in Last Reviewed that no `RC-*` exists. +- Status `Planned` means a milestone will answer the concern; it is not a gap. + +--- + +[BC-001]: ../business-case.md +[SA-001]: ../stakeholder-analysis.md +[PP-001]: ../project-plan.md +[DICT-001]: ../dictionary.md +[ADR-0001]: ../adr/adr-0001-skip-stories-use-cases.md +[ADR-0002]: ../adr/adr-0002-light-clean-architecture.md +[ADR-0003]: ../adr/adr-0003-docker-headless-browser.md +[MIL-001]: ../milestones/mil-001-baseline.md +[MIL-002]: ../milestones/mil-002-scaffold.md +[MIL-003]: ../milestones/mil-003-click-bot.md +[MIL-004]: ../milestones/mil-004-buy-upgrades.md +[MIL-005]: ../milestones/mil-005-timed-run.md +[MIL-006]: ../milestones/mil-006-strategy.md +[MIL-007]: ../milestones/mil-007-documentation.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/docs/stakeholder-analysis.md b/docs/stakeholder-analysis.md new file mode 100644 index 0000000..344fcc7 --- /dev/null +++ b/docs/stakeholder-analysis.md @@ -0,0 +1,89 @@ +# 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 S02 | Initial version: S01 to S03 | [cadc5ef] | + +--- + +## Purpose + +This analysis names the people the Cookie Clicker bot project affects, how much power and interest each has, what each needs, and who reviews and accepts the work. It follows the power/interest grid (Manage Closely, Keep Satisfied, Keep Informed, Monitor) and maps each concern to a FURPS+ attribute. The business context is in [BC-001]. + +## 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 (personal) | HIGH | HIGH | Manage Closely | Finish the assignment as a reviewed, documented repository | +| S02 | Udemy course participants | Users who share code and compare solutions | Udemy 100 Days of Code community | LOW | HIGH | Keep Informed | Readable, runnable code with the assignment's function names, and README instructions to run it | +| S03 | GitHub viewers | Visitors who browse the repository for ideas | Public | LOW | MEDIUM | Keep Informed | A clear repository description, topics and README, and no runtime dependencies beyond what is needed | + +## Power/Interest Classification Rationale + +- **Manage Closely (S01):** S01 sets scope, accepts the plan and reviews the result. Every decision outside the accepted plan returns to S01. +- **Keep Informed (S02):** S02 cannot change the project but depends on its clarity. They are informed through the README, the code and the wiki. +- **Keep Informed (S03):** S03 has even less stake: they browse. The description, topics and README are their whole contact with the project. +- No stakeholder is in Keep Satisfied or Monitor. + +## Primary Concerns and FURPS+ Mapping + +| Concern ID | Stakeholder | Concern | FURPS+ attribute | +| --- | --- | --- | --- | +| CN-001 | S01 | The bot completes the five lecture steps and prints cookies per second | Functionality | +| CN-002 | S01 | Work is planned, reviewed and traceable by branch and pull request | Supportability | +| CN-003 | S01 | The bot can be tweaked (interval, buy-all) to beat the first score | Functionality | +| CN-004 | S02 | Code is readable and uses the assignment's function names | Usability | +| CN-005 | S02 | The README explains how to create a `.venv`, run the bot and run the tests | Usability | +| CN-006 | S02 | The wiki explains what each lecture step teaches, with a screenshot, in English, Danish and Bahasa Malaysia | Usability | +| CN-007 | S03 | The repository has a clear description, topics and README | Usability | +| CN-008 | S03 | No runtime dependency beyond Selenium | Implementation | +| CN-009 | S01 | A token stays outside the repository | Supportability | + +## Communication Requirements + +| ID | Channel | Frequency | Deliverable | Phase / Milestone | +| --- | --- | --- | --- | --- | +| CM-001 | Chat with S01 | Once per plan, and on every stop condition | Plan acceptance, questions, final summary | All milestones | +| CM-002 | Pull request on the git host | One per milestone | Changes, review records, closed issues | All milestones | +| CM-003 | README and wiki | On each release | Run instructions, lecture step explanations | Documentation milestone | + +## Conflicting Interests and Mitigations + +| Conflict | Stakeholders | Mitigation | +| --- | --- | --- | +| S01 wants a tweakable, higher-scoring bot, while S02 wants code that stays simple and close to the assignment | S01, S02 | Keep the assignment's functions as they are; put the strategy tweaks behind constants and a separate strategy option | +| S01 wants thorough tests and framework artifacts, while S03 wants no extra runtime dependencies | S01, S03 | Test tools are development-only extras in `pyproject.toml`; Selenium is the only runtime dependency | + +## Traceability Analysis + +### Business Goal Alignment + +| Stakeholder | Concern | Business Case objective | +| --- | --- | --- | +| S01 | CN-001 | O1, O2, O3 in [BC-001] | +| S01 | CN-003 | O4 in [BC-001] | +| S01 | CN-002, CN-009 | O5 in [BC-001] | +| S02 | CN-004, CN-005 | O5 in [BC-001] | +| S02 | CN-006 | O6 in [BC-001] | +| S03 | CN-007, CN-008 | O5 in [BC-001] | + +## Sign-Off + +| Role | Stakeholder | Status | +| --- | --- | --- | +| Product Owner | S01 | Accepted the plan in chat on 2026-10-28 | +| Reviewer | AI as stand-in for S02 | Go in RC-002, autonomous mode, not independent | + +--- + +[BC-001]: ./business-case.md +[cadc5ef]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/048-the-coockie-factory-new/commit/cadc5eff21d9afc09799d4bc2e3f6ac17ab2612a diff --git a/framework b/framework new file mode 160000 index 0000000..7c27919 --- /dev/null +++ b/framework @@ -0,0 +1 @@ +Subproject commit 7c2791939c42c18ec444bce245e9a3958b242cae