diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..a759dc9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "framework"] + path = framework + url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git diff --git a/docs/artifact-registry.md b/docs/artifact-registry.md new file mode 100644 index 0000000..0d753eb --- /dev/null +++ b/docs/artifact-registry.md @@ -0,0 +1,61 @@ +# Artifact Registry + +This project's artifact state. Types, short names and `CrossReference +Candidates` come from the framework catalog +(`framework/registry/artifact-catalog.md`); this file only records where +each document lives in *this* project and the next version to use. + +Delete rows for types you don't use. Add a row the first time you create a +document of a type. `Primary File` may contain a glob (e.g. +`docs/use-cases/uc-*/uc.md`); `framework/scripts/find-crossreferences.sh` reads it. + +| Short Name | Artifact Type | Primary File | Next Available Version | +| --- | --- | --- | --- | +| BC | Business Case | docs/business-case.md | 002 | +| SA | Stakeholder Analysis | docs/stakeholder-analysis.md | 002 | +| PP | Project Plan | docs/project-plan.md | 002 | +| MIL | Milestone / Gateway | docs/milestones/mil-*.md | 006 | +| DICT | Domain Dictionary | docs/dictionary.md | 002 | +| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 | +| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 010 | + +## Languages + +Set the PO language when the project starts; `project-planning` asks for it +if it is missing. An artifact of a type marked "Written in the PO language" +exists once, in that language, under its normal name (`business-case.md`); the +`artifact` skill ("One file per artifact") has the rule. + +| Setting | Value | +| --- | --- | +| PO language | en | +| PO domain | it | +| High-level register | IT Executive English | +| Technical register | IT Professional English | +| Wiki languages | en, 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..588eb7e --- /dev/null +++ b/docs/business-case.md @@ -0,0 +1,133 @@ +# Business Case: Flask Backend Basics (100 Days of Code, Day 54) + +## Metadata +| Key | Value | +| --- | --- | +| ID | BC-001 | +| CrossReference | [SA-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Executive Summary + +This project turns the Day 54 lectures of Udemy's "100 Days of Code: The Complete Python Pro Bootcamp" (Flask basics, command line, `__name__`/`__main__`, first-class functions, decorators) into a small, readable and runnable Python repository. It gives the course participant a reviewed record of the assignment, gives fellow course participants code with the assignment's function names, and gives repository visitors a documented example in English, Danish and Bahasa Malaysia. + +## Methodological and Standards Foundation + +The project follows the SQA and QC framework mounted at `framework/` (plan first, review every artifact against its QC checklist, one pull request per milestone). Quality is stated with ISO/IEC 25010:2023 characteristics. Source code follows the `coding-conventions` skill for Python and the layering of the `clean-architecture` skill, scaled to a learning project. + +## Problem Statement + +A course lecture is watched once and is hard to revisit. Solutions shared between course participants differ in structure, miss run instructions and lack tests, so they are difficult to compare. The lecture content (what a backend is, how a Flask server starts, why `__name__ == "__main__"` is used, how functions are passed and decorated) has no durable, searchable summary with evidence that the code runs. + +## Business Opportunity + +A single repository can serve as a personal study record, a reference for other participants and a portfolio piece, at very low cost. Wiki pages in three languages widen the audience beyond English readers. + +## Objectives + +1. Deliver runnable Python code for each Day 54 lecture, using the function names of the assignment (`calculate`, `add`, `subtract`, nested and returned functions, a decorator). +2. Deliver a minimal Flask application that serves "Hello, World!" and starts either with `flask run` or with `python src/hello.py`. +3. Deliver automated tests (pytest) for all behaviour that can be tested without a user interface. +4. Deliver a README and a three-language wiki (en, da, ms) with one screenshot per lecture step and a short explanation of what the lecture taught. +5. Publish the repository with a description and topics. + +## Scope + +### In Scope + +- Python source under `src/`, tests under `tests/`, documents under `docs/`. +- Project configuration in `pyproject.toml`, constants in `constants.py`, a Python `.gitignore`, a Doxyfile and Doxygen comments in the source. +- README from the framework template, including how to create and use a local `.venv`, upgrade pip, run the project and run the tests. +- Wiki in English, Danish and Bahasa Malaysia with screenshots for each lecture step. +- Repository description and topics on the Gitea host. + +### Out of Scope + +- Features beyond the lectures (database, authentication, templates, deployment). +- Django or any other framework. +- Importing, testing or documenting the personal `.env` file; it is for the author's own tooling only. +- Hosting the Flask application publicly. + +## Expected Benefits + +### Tangible Benefits + +- A repository whose tests pass and whose run instructions work on a clean checkout. +- Screenshots and wiki pages that replace re-watching the lectures. + +### Intangible Benefits + +- Practice of a plan-first, reviewed workflow on a small project. +- A clearer shared reference for course participants and visitors. + +## Strategic Alignment + +The project supports the author's learning goal of completing the 100 Days of Code bootcamp with professional habits (tests, documentation, version control) and the open sharing of the results. + +## Success Criteria + +| # | Criterion | Target | Measure | +| --- | --- | --- | --- | +| 1 | Lectures covered by code | 6 of 6 lecture topics | Each topic has a module or section in `src/` | +| 2 | Tests pass | 100 % of pytest tests pass on Python 3.13 | `python -m pytest` exit code 0 | +| 3 | Runtime dependencies | Only Flask, as an optional extra; none for the pure-Python lectures | `pyproject.toml` | +| 4 | Screenshots | 1 per lecture step in README and in each wiki language | Count of images in README and wiki pages | +| 5 | Wiki languages | 3 (en, da, ms) with the same pages | Page list per language | +| 6 | Repository metadata | Description and at least 5 topics set | Gitea repository settings | + +## Risks + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| Screenshots of a terminal or browser need a GUI | A GUI test on the host desktop would take the user's mouse and keyboard | Use a headless browser or a container, never the host desktop (`framework/process/gui-testing.md`) | +| Danish or Bahasa Malaysia text contains errors | Reduced trust in the wiki | Keep sentences short and technical; the author reviews the text | +| The token in `.env` leaks into the repository | Credential exposure | `.env` is in `.gitignore`; no code reads it; tokens are only read by the author's tooling from the environment | +| Python 3.13 is the only interpreter available | Wording "greater than 3.13" cannot be tested on a newer version | State `requires-python = ">=3.13"` and test on the installed 3.13 | + +## Assumptions + +- The Product Owner is S01 and also develops and reviews; S02 and S03 are reached through the published repository only. +- Python 3.13 and Doxygen are installed on the author's machine. +- The Gitea host offers a repository wiki and a REST API for description and topics. +- The lectures contain no code beyond what the summaries describe; the assignment function names follow the lecture text. + +## Constraints + +- Python 3.13 or newer, `venv`, `pytest`, `pyproject.toml`, `constants.py` for constants. +- Folder structure `src/`, `tests/`, `docs/`. +- One branch and pull request per milestone; no direct commits on `main`. +- Doxygen comments in the source and a Doxyfile. +- Product Owner language: English, domain IT. + +## Cost–Benefit Assessment + +| Costs | Benefits | +| --- | --- | +| About two working days of the author's time, no licence or hosting cost | A reviewed study record, a shareable reference and a portfolio entry | + +The assessment is qualitative on purpose: the project earns no revenue and has no cash cost, so a monetary return on investment would be invented. The only measurable cost is the author's time, stated above. + +## Stakeholders + +| Stakeholder ID (SA) | Interest in this project | +| --- | --- | +| S01 | Owns the assignment, builds and reviews it | +| S02 | Reads and compares runnable solutions | +| S03 | Browses for ideas; needs clear description, topics and README | + +## Recommendation + +Proceed — the scope is small, the cost is low and every objective is verifiable by tests, screenshots or repository settings. + +--- + +[SA-001]: ./stakeholder-analysis.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/dictionary.md b/docs/dictionary.md new file mode 100644 index 0000000..6812070 --- /dev/null +++ b/docs/dictionary.md @@ -0,0 +1,46 @@ +# 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-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Purpose and Scope + +Maps each Product Owner (PO) term to its professional IT term. PO language: +English (`en`), domain `it`. The dictionary covers the terms of the lecture assignment that a visitor (S02, S03) might read differently in plain speech and in code.. + +## Dictionary + +| PO term | Language | IT term | Definition | Used as PO term in | Used as IT term in | +| --- | --- | --- | --- | --- | --- | +| Assignment function | en | Public function | A function whose name is given by the course assignment and that code of the course participants calls. | none yet | none yet | +| Greeting | en | Response body | The text the home page shows to a visitor. | none yet | none yet | +| Home page | en | Route `/` | The page a visitor sees when opening the address of the application without a path. | none yet | none yet | +| Lecture step | en | Module | One part of the course whose code and screenshot are kept together. | none yet | none yet | +| Local environment | en | Virtual environment | The private folder in which the project's Python packages are installed. | none yet | none yet | +| Wrapper | en | Decorator | A function that adds behaviour around another function without changing it. | none yet | none yet | + +## 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 +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/milestones/mil-001-foundation.md b/docs/milestones/mil-001-foundation.md new file mode 100644 index 0000000..a01415e --- /dev/null +++ b/docs/milestones/mil-001-foundation.md @@ -0,0 +1,76 @@ +# MIL-001 Project foundation + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-001 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Purpose + +Decide whether the project skeleton (configuration, tooling, documentation baseline and repository metadata) is ready for the lecture code. + +## Deliverable + +A repository with `pyproject.toml`, `.gitignore`, `src/constants.py`, a Doxyfile, a README with `.venv` instructions, the repository description and topics, and a passing (empty-but-collecting) pytest run. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `python -m pytest` runs and exits 0 on a fresh `.venv` | Met | Not met | +| 2 | `pyproject.toml` declares Python 3.13 or newer, the optional extras `web` and `dev`, and no mandatory runtime dependency | Met | Not met | +| 3 | `.gitignore` excludes `.venv/` and `.env` | Met | Not met | +| 4 | `doxygen Doxyfile` finishes without errors | Met | Not met | +| 5 | The repository has a description and at least 5 topics on the git host | Met | Not met | +| 6 | README follows the framework template and passes `check-readme.sh` | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| None | First gateway after the accepted baseline (BC-001, SA-001, PP-001) | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| Objective 3 and 5; constraints on tooling | BC-001 | +| CN-004, CN-005, CN-006 | SA-001 | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-06 - same day as the plan; fits the Business Case effort estimate. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Add pyproject.toml | Configure the project with requires-python >=3.13, the optional extras `web` (Flask) and `dev` (pytest), and pytest settings so tests import modules from `src/`. Keeps the pure-Python lectures free of runtime dependencies (SA-001 CN-006). | No | | +| 2 | Add Python .gitignore | Ignore virtual environments, caches, build output, Doxygen output and the personal `.env` file so no token can be committed. | No | | +| 3 | Add constants.py and package layout | Create `src/constants.py` for all constants (greeting, host, port, command names) and the empty `tests/` folder, as the constraints require constants in one place. | No | | +| 4 | Add Doxyfile | Generate a Doxyfile that reads `src/`, writes to `docs/doxygen/` (ignored by git) and extracts documentation from Doxygen comments. | No | | +| 5 | Write README from the framework template | Use the framework README template; describe creating and activating a local `.venv`, running `python -m pip install --upgrade pip`, installing extras, running the app and running pytest. | No | | +| 6 | Set repository description and topics | Use the Gitea REST API with the token from the author's environment (never stored in the repository) to set a description and topics so visitors (S03) can find and understand the repository. | No | | +| 7 | Record the AI prompt log | Add `docs/ai-prompts/session-001/` as `framework/process/ai-prompt-log.md` requires. | No | | + +--- + +[BC-001]: ../business-case.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/milestones/mil-002-hello-flask.md b/docs/milestones/mil-002-hello-flask.md new file mode 100644 index 0000000..5be5b2d --- /dev/null +++ b/docs/milestones/mil-002-hello-flask.md @@ -0,0 +1,72 @@ +# MIL-002 Backend basics and Hello Flask + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-002 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Purpose + +Decide whether lectures 1 and 2 (frontend versus backend, and the first Flask server) are implemented, tested and illustrated. + +## Deliverable + +`src/hello.py` with a Flask `app` and a home route returning the greeting, tests of that route, a screenshot for lecture 1 (client, server, database and the request-response cycle) and for lecture 2 (the browser showing the greeting), and README text for both. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `flask --app hello run` serves the greeting on the configured port | Met | Not met | +| 2 | A pytest test requests `/` with the Flask test client and gets status 200 and the greeting | Met | Not met | +| 3 | Screenshots `lecture-01.png` and `lecture-02.png` exist in `docs/images/` and are shown in the README | Met | Not met | +| 4 | Doxygen comments exist on every public name in `hello.py` | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-001 | Needs the project configuration and test tooling | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| Objectives 1, 2 and 3 | BC-001 | +| CN-002, CN-003 | SA-001 | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-07 - within the Business Case constraints. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Implement hello.py | Create the minimal Flask application with a home route that returns the greeting from `constants.py`. The file is named `hello.py`, as the lecture does, so it cannot clash with the Flask library. | No | | +| 2 | Test the home route | Add a pytest test that uses the Flask test client; it is skipped with a clear message when the `web` extra is not installed. | No | | +| 3 | Screenshot lecture 1: backend overview | Render a diagram of client, server and database with the request-response cycle (restaurant analogy) and capture it with a headless browser, never on the host desktop. | No | | +| 4 | Screenshot lecture 2: Hello World in the browser | Start the application and capture the page in a headless browser to show the greeting served from the local server. | No | | +| 5 | README section for lectures 1 and 2 | Add the two screenshots and short run instructions, including the `FLASK_APP` variable for macOS/Linux and Windows. | No | | + +--- + +[BC-001]: ../business-case.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/milestones/mil-003-cli-and-main.md b/docs/milestones/mil-003-cli-and-main.md new file mode 100644 index 0000000..a4c008e --- /dev/null +++ b/docs/milestones/mil-003-cli-and-main.md @@ -0,0 +1,73 @@ +# MIL-003 Command line and __main__ + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-003 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Purpose + +Decide whether lectures 3 and 4 (the command line and the `__name__` / `__main__` idiom) are implemented, tested and illustrated. + +## Deliverable + +`hello.py` starts through `python src/hello.py` guarded by `if __name__ == "__main__"`, `src/cli_basics.py` and `src/name_demo.py` with tests, and screenshots for lectures 3 and 4. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `python src/hello.py` starts the server; importing `hello` does not start it (tested) | Met | Not met | +| 2 | `name_demo` reports the main program versus an imported module (tested) | Met | Not met | +| 3 | `cli_basics` lists the lecture's commands with their Windows and macOS/Linux forms (tested) | Met | Not met | +| 4 | Screenshots `lecture-03.png` and `lecture-04.png` exist in `docs/images/` and are shown in the README | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-002 | Extends hello.py | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| Objectives 1 to 3 | BC-001 | +| CN-002, CN-003 | SA-001 | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-08 - within the Business Case constraints. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Guard app.run with __main__ | Add a `main()` function that calls `app.run` with the host, port and debug flag from `constants.py`, called only under `if __name__ == "__main__"`. Tests use a stub so no server is started. | No | | +| 2 | Add name_demo module | Add a function that explains whether a module name means the file is the main program or an import, mirroring lecture 4, with tests. | No | | +| 3 | Add cli_basics module | Add the lecture's commands (pwd, ls, cd, mkdir, touch, rm) with Windows and macOS/Linux equivalents and a warning for destructive ones, with tests. | No | | +| 4 | Screenshot lecture 3: command line | Run the lecture's commands in a temporary folder, render the real transcript and capture it headlessly. | No | | +| 5 | Screenshot lecture 4: __main__ and app.run | Capture the real output of `python src/name_demo.py` and of the server start from `python src/hello.py`. | No | | +| 6 | README section for lectures 3 and 4 | Add the two screenshots and the two ways to start the server (`flask run` versus `python src/hello.py`). | No | | + +--- + +[BC-001]: ../business-case.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/milestones/mil-004-functions-decorators.md b/docs/milestones/mil-004-functions-decorators.md new file mode 100644 index 0000000..18d613c --- /dev/null +++ b/docs/milestones/mil-004-functions-decorators.md @@ -0,0 +1,73 @@ +# MIL-004 First-class functions and decorators + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-004 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Purpose + +Decide whether lectures 5 and 6 (functions as first-class objects, nested and returned functions, decorators) are implemented, tested and illustrated. + +## Deliverable + +`src/first_class_functions.py` (`add`, `subtract`, `calculate`, nested and returned functions) and `src/decorators.py` (the @ syntax) with tests, and screenshots for lectures 5 and 6. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `calculate(add, 2, 3)` returns 5 and `calculate(subtract, 5, 3)` returns 2 (tested) | Met | Not met | +| 2 | A nested function is returned and called independently of its parent (tested) | Met | Not met | +| 3 | A decorator applied with the @ syntax wraps the home greeting without changing the wrapped function's name (tested) | Met | Not met | +| 4 | Screenshots `lecture-05.png` and `lecture-06.png` exist in `docs/images/` and are shown in the README | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-003 | Builds on the finished application and test setup | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| Objectives 1 and 3 | BC-001 | +| CN-002, CN-003 | SA-001 | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-09 - within the Business Case constraints. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Implement first_class_functions | Create `add`, `subtract` and `calculate` that takes a function as argument, plus an outer function with a nested function and one that returns it, exactly as lecture 5 describes. | No | | +| 2 | Implement decorators | Create a decorator with the @ syntax that adds behaviour before and after a function, using functools.wraps, as lecture 6 recaps. | No | | +| 3 | Test both modules | Add pytest tests for the lecture examples, including that nested functions are not reachable from outside the parent. | No | | +| 4 | Screenshot lecture 5: functions as arguments | Capture the real output of running the module (calculate, nested and returned functions) in a rendered terminal transcript. | No | | +| 5 | Screenshot lecture 6: decorators | Capture the real output of the decorator demo. | No | | +| 6 | README section for lectures 5 and 6 | Add the two screenshots and a short explanation with the function names. | No | | + +--- + +[BC-001]: ../business-case.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/milestones/mil-005-docs-wiki.md b/docs/milestones/mil-005-docs-wiki.md new file mode 100644 index 0000000..5d43124 --- /dev/null +++ b/docs/milestones/mil-005-docs-wiki.md @@ -0,0 +1,75 @@ +# MIL-005 Documentation, wiki and release check + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-005 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Purpose + +Decide whether the repository is ready to be shared: three-language wiki, final README, generated API docs and a code review. + +## Deliverable + +Wiki pages in English, Danish and Bahasa Malaysia in `docs/wiki/` with a screenshot and a what-we-gained text per lecture, a final README with all screenshots, Doxygen output without warnings and a recorded code review. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `docs/wiki/` holds the same page set in en, da and ms (`Home`, `Home-da`, `Home-ms` and the lecture pages) | Met | Not met | +| 2 | Every lecture page shows its screenshot and a section on what was gained | Met | Not met | +| 3 | `_Sidebar.md` follows `framework/process/wiki.md` | Met | Not met | +| 4 | `doxygen Doxyfile` finishes without warnings | Met | Not met | +| 5 | `python -m pytest` passes and the code review against `qc-programming-python` is `Go` | Met | Not met | +| 6 | `check-readme.sh` and `check-plan.sh` pass | Met | Not met | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-004 | Needs all lectures implemented and illustrated | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| Objectives 4 and 5 | BC-001 | +| CN-005, CN-007 | SA-001 | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 | + +## Target Date + +2026-11-10 - within the Business Case constraints. + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Write English wiki | Create `Home.md`, six lecture pages, `_Sidebar.md` and `_Footer.md` in `docs/wiki/`; each lecture page has the screenshot and a section explaining what was gained. | No | | +| 2 | Write Danish wiki | Translate every English page to Danish (`-da` suffix) with the same page set and the language line. | No | | +| 3 | Write Bahasa Malaysia wiki | Translate every English page to Bahasa Malaysia (`-ms` suffix) with the same page set and the language line. | No | | +| 4 | Check wiki structure and links | Verify page set parity, relative image paths and sidebar rules against `QC-WIKI-001`. | No | | +| 5 | Generate and check Doxygen | Run `doxygen Doxyfile` and fix every warning in the source comments. | No | | +| 6 | Review code against qc-programming-python | Review `src/` and `tests/` against the Python checklist and record an RC. | No | | + +--- + +[BC-001]: ../business-case.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/project-plan.md b/docs/project-plan.md new file mode 100644 index 0000000..3d7e4d7 --- /dev/null +++ b/docs/project-plan.md @@ -0,0 +1,98 @@ +# Project Plan: Flask Backend Basics + +## Metadata +| Key | Value | +| --- | --- | +| ID | PP-001 | +| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Purpose + +Schedule the five gateways that turn the Day 54 lectures into a tested, documented repository, within the Business Case constraint of one branch and pull request per milestone. + +## Planning Assumptions + +- Work starts 2026-11-06 and ends by 2026-11-10; one gateway per day or less. +- Each gateway is one branch and one pull request that closes its issues (SA-001 CM-001). +- The reviewer for every gateway is S01; in autonomous mode the AI acts as stand-in for S01 and records `Mode: autonomous, not independent`. +- PO language is English, domain IT; the wiki exists in English, Danish and Bahasa Malaysia. +- Sources: the dates and the one-pull-request-per-milestone rule come from the Product Owner's brief and [BC-001] Constraints; the review cadence follows [SA-001] CM-001. + +## Gateway Schedule + +| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Foundation | [MIL-001] | 2026-11-06 | 2026-11-06 | S01 | none (technical tasks) | pyproject, gitignore, constants, Doxyfile, README, repo metadata | not yet synced | +| Backend and Hello Flask | [MIL-002] | 2026-11-06 to 2026-11-07 | 2026-11-07 | S01 | none (technical tasks) | hello.py, tests, screenshots 1 and 2 | not yet synced | +| Command line and __main__ | [MIL-003] | 2026-11-07 to 2026-11-08 | 2026-11-08 | S01 | none (technical tasks) | main guard, name_demo, cli_basics, screenshots 3 and 4 | not yet synced | +| Functions and decorators | [MIL-004] | 2026-11-08 to 2026-11-09 | 2026-11-09 | S01 | none (technical tasks) | first_class_functions, decorators, screenshots 5 and 6 | not yet synced | +| Docs and wiki | [MIL-005] | 2026-11-09 to 2026-11-10 | 2026-11-10 | S01 | none (technical tasks) | three-language wiki, Doxygen, code review | not yet synced | + +```plantuml +@startgantt +Project starts 2026-11-06 +[Foundation] starts 2026-11-06 and ends 2026-11-06 +[Foundation Go/No-Go] happens 2026-11-06 +[Backend and Hello Flask] starts 2026-11-06 and ends 2026-11-07 +[Backend Go/No-Go] happens 2026-11-07 +[Command line and main] starts 2026-11-07 and ends 2026-11-08 +[CLI Go/No-Go] happens 2026-11-08 +[Functions and decorators] starts 2026-11-08 and ends 2026-11-09 +[Functions Go/No-Go] happens 2026-11-09 +[Docs and wiki] starts 2026-11-09 and ends 2026-11-10 +[Docs Go/No-Go] happens 2026-11-10 +@endgantt +``` + +## Scope Coverage + +| Business Case scope item | Gateway | +| --- | --- | +| Python source under `src/`, tests under `tests/`, documents under `docs/` | MIL-001 to MIL-004 | +| `pyproject.toml`, `constants.py`, `.gitignore`, Doxyfile, Doxygen comments | MIL-001, MIL-005 | +| README with `.venv`, run and test instructions | MIL-001 to MIL-004 | +| Wiki in en, da, ms with screenshots | MIL-005 | +| Repository description and topics | MIL-001 | + +## Dependencies + +``` +MIL-001 -> MIL-002 -> MIL-003 -> MIL-004 -> MIL-005 +``` + +A No-Go on a gateway moves every later gateway by the time needed to fix and re-review it. S01 decides whether the end date 2026-11-10 moves; the Business Case sets no fixed deadline, so a move needs only a new Version History row of this plan. + +## Plan Risks + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| Headless screenshot tooling is not available (BC-001 risk 1) | Screenshots delayed | Use Edge or Chrome headless on the host (no user input is taken); otherwise a container | +| Gitea API token lacks scope for topics or wiki (BC-001 risk 3 context) | Metadata or wiki not published | Stop and report; the author sets it by hand | +| Repository URL in the brief differs from `origin` | Work lands in the wrong repository | Work against `origin`; record the difference under Open Issues | + +## Open Issues + +- The brief names `https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code`; `origin` is `Tirsvad-Udemy-100-days-of-code/054-flask`. The plan uses `origin`. Confirm if the other is meant. +- "Python greater than 3.13" is read as `>=3.13` (the installed interpreter is 3.13). +- S03 asks for no runtime dependencies while Flask is required by the assignment; resolved by making Flask the optional extra `web` (SA-001 conflict table). +- The lecture text mentions the `calculate` function and a greeting decorator only in prose; names and exact behaviour follow that prose. + +--- + +[BC-001]: ./business-case.md +[SA-001]: ./stakeholder-analysis.md +[MIL-001]: ./milestones/mil-001-foundation.md +[MIL-002]: ./milestones/mil-002-hello-flask.md +[MIL-003]: ./milestones/mil-003-cli-and-main.md +[MIL-004]: ./milestones/mil-004-functions-decorators.md +[MIL-005]: ./milestones/mil-005-docs-wiki.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 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..c17e095 --- /dev/null +++ b/docs/sqa/reviews/rc-001-business-case.md @@ -0,0 +1,68 @@ +# Review of BC-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-001 | +| CrossReference | [BC-001], [QC-BC-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [BC-001] +- Checklist used: [QC-BC-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | Cost-Benefit Assessment is qualitative and says why (no revenue, no cash cost; only the author's time). | +| 2 | Risks are identified with documented impact and mitigation | Pass | Four risks, each with impact and mitigation. | +| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | Success Criteria table: six criteria with numeric or countable 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, S03 from SA-001; roles are not re-described. | +| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | Methodology section names the framework, ISO/IEC 25010:2023 and the coding skills. | +| 7 | Assumptions and constraints are explicit and clearly distinguished from one another | Pass | Assumptions and Constraints are separate bullet lists. | +| 8 | Document supports executive decision-making with a clear, unambiguous recommendation | Pass | Recommendation: Proceed, one sentence. | + +## Language and Domain Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All mandatory criteria pass; the document is accepted as the baseline. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[BC-001]: ../../business-case.md +[QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 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..9edb7b7 --- /dev/null +++ b/docs/sqa/reviews/rc-002-stakeholder-analysis.md @@ -0,0 +1,69 @@ +# Review of SA-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-002 | +| CrossReference | [SA-001], [QC-SA-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [SA-001] +- Checklist used: [QC-SA-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | Power/Interest grid is filled for every stakeholder, with no gaps or unclassified entries | Pass | S01, S02, S03 each have Power, Interest and Quadrant. | +| 2 | Each stakeholder is assigned a unique, stable ID (e.g. S01-S11 style) reusable for RACI assignments in other artifacts | Pass | Stable IDs S01-S03. | +| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | Role, organisation, power and interest are explicit. | +| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | CM-001 to CM-004 tie channels to milestones. | +| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | Two conflicts with mitigations. | +| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | Business Goal Alignment table cites BC-001 objectives. | +| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | Concerns are in business language with a FURPS+ attribute. | +| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | Short, plain tables. | +| 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-007, each names its stakeholder. | + +## 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 | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All criteria pass. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[SA-001]: ../../stakeholder-analysis.md +[QC-SA-001]: ../../../framework/qc/artifacts/qc-stakeholder-analysis.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/sqa/reviews/rc-003-project-plan.md b/docs/sqa/reviews/rc-003-project-plan.md new file mode 100644 index 0000000..2f76a1f --- /dev/null +++ b/docs/sqa/reviews/rc-003-project-plan.md @@ -0,0 +1,75 @@ +# Review of PP-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-003 | +| CrossReference | [PP-001], [QC-PP-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [PP-001] +- Checklist used: [QC-PP-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | The plan states its start date, end date and the constraint it must fit | Pass | Start 2026-11-06, end 2026-11-10, constraint: one PR per milestone (BC-001 Constraints). | +| 2 | Every milestone or gateway is listed once with its document, decision date and owner | Pass | Five gateways, each with document, decision date and owner S01. | +| 3 | Every decision date lies inside the plan's window and is consistent with the dates in the linked `MIL-*` document | Pass | Decision dates equal the Target Date of each MIL document and lie inside the window. | +| 4 | Every in-scope item of the Business Case is delivered at a named gateway (scope coverage) | Pass | Scope Coverage table maps every In Scope item to a gateway. | +| 5 | Dependencies between gateways are stated, acyclic and consistent with the schedule order | Pass | Chain MIL-001 to MIL-005 is acyclic and matches the dates. | +| 6 | The plan states what happens to later gateways and to the end date when a gateway is No-Go | Pass | Dependencies section: later gateways shift; S01 decides the end date. | +| 7 | Owners, reviewers and escalation roles use Stakeholder Analysis IDs and match the governance RACI | N-A | Owners and reviewers use S01; no governance document (GOV) exists in this small project, so no RACI to match. | +| 8 | Planning assumptions are listed with their source, and a changed baseline is recorded with its reason | Pass | Planning Assumptions lists sources; changes will be recorded in Version History. | +| 9 | Plan risks are listed with impact and a mitigation, and trace to Business Case risks where they come from there | Pass | Three plan risks with mitigation; two trace to BC-001 risks. | +| 10 | Open issues are listed, and none contradicts a statement elsewhere in the plan | Pass | Open Issues are current and do not contradict the plan. | +| 11 | Each gateway's main deliverable is stated and matches the deliverable of its `MIL-*` document | Pass | Main deliverables match the Deliverable sections of the MIL documents. | +| 12 | Gateways that deliver user stories name them, and those that do not say why | Pass | Stories column says `none (technical tasks)`. | +| 13 | The schedule view (table, Gantt) and the dependency view agree with each other | Pass | Gantt bars match the table; chain matches Dependencies. | +| 14 | Each gateway is linked to its issue-tracker milestone, or marked as not yet synced | Pass | Milestone column says `not yet synced`. | +| 15 | The plan is a singleton: one Project Plan per project, changes recorded in Version History | Pass | Single plan; Version History present. | + +## 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 | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All mandatory criteria pass (7 is not applicable). + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[PP-001]: ../../project-plan.md +[QC-PP-001]: ../../../framework/qc/artifacts/qc-project-plan.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/sqa/reviews/rc-004-dictionary.md b/docs/sqa/reviews/rc-004-dictionary.md new file mode 100644 index 0000000..5ed8852 --- /dev/null +++ b/docs/sqa/reviews/rc-004-dictionary.md @@ -0,0 +1,68 @@ +# Review of DICT-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-004 | +| CrossReference | [DICT-001], [QC-DICT-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [DICT-001] +- Checklist used: [QC-DICT-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | Every row has a PO term, its language, an IT term and a definition | Pass | Six rows, all columns 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. | +| 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. | +| 4 | The Operation Contracts, Sequence Diagrams, Design Class Diagrams and ERD use the IT term, not the PO term | N-A | No OC, SD, DCD or ERD exists in this project. | +| 5 | Definitions are written in the PO language and are one sentence | Pass | One-sentence English definitions. | +| 6 | "Used as PO term in" and "Used as IT term in" name artifact types that exist in the project | Pass | Artifact types in the last two columns say `none yet` rather than naming types that do not exist. | +| 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, 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 | Rows ascend: Assignment function, Greeting, Home page, Lecture step, Local environment, Wrapper. | + +## 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 | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All applicable criteria pass. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[DICT-001]: ../../dictionary.md +[QC-DICT-001]: ../../../framework/qc/artifacts/qc-dictionary.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/sqa/reviews/rc-005-mil-001-foundation.md b/docs/sqa/reviews/rc-005-mil-001-foundation.md new file mode 100644 index 0000000..a348b12 --- /dev/null +++ b/docs/sqa/reviews/rc-005-mil-001-foundation.md @@ -0,0 +1,66 @@ +# Review of MIL-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-005 | +| CrossReference | [MIL-001], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-001] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and outputs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table lists objectively checkable criteria (commands, files, counts). | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding milestone or `None` for the first. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability cites BC-001 objectives and SA-001 concerns. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer: S01. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target date lies inside the plan window 2026-11-06 to 2026-11-10 and equals the PP-001 decision date. | + +## 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 | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All criteria pass; the milestone is accepted and may be implemented. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-001]: ../../milestones/mil-001-foundation.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/sqa/reviews/rc-006-mil-002-hello-flask.md b/docs/sqa/reviews/rc-006-mil-002-hello-flask.md new file mode 100644 index 0000000..fa78b89 --- /dev/null +++ b/docs/sqa/reviews/rc-006-mil-002-hello-flask.md @@ -0,0 +1,66 @@ +# Review of MIL-002 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-006 | +| CrossReference | [MIL-002], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-002] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and outputs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table lists objectively checkable criteria (commands, files, counts). | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding milestone or `None` for the first. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability cites BC-001 objectives and SA-001 concerns. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer: S01. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target date lies inside the plan window 2026-11-06 to 2026-11-10 and equals the PP-001 decision date. | + +## 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 | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All criteria pass; the milestone is accepted and may be implemented. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-002]: ../../milestones/mil-002-hello-flask.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/sqa/reviews/rc-007-mil-003-cli-and-main.md b/docs/sqa/reviews/rc-007-mil-003-cli-and-main.md new file mode 100644 index 0000000..6906b35 --- /dev/null +++ b/docs/sqa/reviews/rc-007-mil-003-cli-and-main.md @@ -0,0 +1,66 @@ +# Review of MIL-003 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-007 | +| CrossReference | [MIL-003], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-003] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and outputs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table lists objectively checkable criteria (commands, files, counts). | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding milestone or `None` for the first. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability cites BC-001 objectives and SA-001 concerns. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer: S01. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target date lies inside the plan window 2026-11-06 to 2026-11-10 and equals the PP-001 decision date. | + +## 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 | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All criteria pass; the milestone is accepted and may be implemented. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-003]: ../../milestones/mil-003-cli-and-main.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/sqa/reviews/rc-008-mil-004-functions-decorators.md b/docs/sqa/reviews/rc-008-mil-004-functions-decorators.md new file mode 100644 index 0000000..4796f1e --- /dev/null +++ b/docs/sqa/reviews/rc-008-mil-004-functions-decorators.md @@ -0,0 +1,66 @@ +# Review of MIL-004 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-008 | +| CrossReference | [MIL-004], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-004] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and outputs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table lists objectively checkable criteria (commands, files, counts). | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding milestone or `None` for the first. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability cites BC-001 objectives and SA-001 concerns. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer: S01. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target date lies inside the plan window 2026-11-06 to 2026-11-10 and equals the PP-001 decision date. | + +## 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 | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All criteria pass; the milestone is accepted and may be implemented. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-004]: ../../milestones/mil-004-functions-decorators.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/sqa/reviews/rc-009-mil-005-docs-wiki.md b/docs/sqa/reviews/rc-009-mil-005-docs-wiki.md new file mode 100644 index 0000000..5e22b40 --- /dev/null +++ b/docs/sqa/reviews/rc-009-mil-005-docs-wiki.md @@ -0,0 +1,66 @@ +# Review of MIL-005 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-009 | +| CrossReference | [MIL-005], [QC-MIL-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [73a5a95] | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-005] +- Checklist used: [QC-MIL-001] +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the reviewer reads English and knows the IT domain) +- Mode: autonomous, not independent (AI as stand-in for S01) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and outputs. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go/No-Go table lists objectively checkable criteria (commands, files, counts). | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding milestone or `None` for the first. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability cites BC-001 objectives and SA-001 concerns. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner and approving reviewer: S01. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target date lies inside the plan window 2026-11-06 to 2026-11-10 and equals the PP-001 decision date. | + +## 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 | Checked against the document and the registry. | +| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | Checked against the document and the registry. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English, the PO language (registry `PO language` = en). | +| 4 | The register matches the one the registry gives for the artifact type | Pass | Register: IT Executive English for BC/PP/MIL, IT Professional English for SA/DICT; no implementation detail in the executive documents beyond file names. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Terms follow `docs/dictionary.md` (DICT-001): greeting, home page, lecture step, local environment, wrapper. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Checked against the document and the registry. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists. | +| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version; no earlier language to compare. | +| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Reviewer S01 reads English and works in the IT domain (stand-in, not independent). | +| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | FURPS+, BC, SA etc. are defined by the framework; ISO/IEC 25010 named in full. | + +## Overall Verdict + +Go — All criteria pass; the milestone is accepted and may be implemented. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None | S01 | - | + +--- + +[MIL-005]: ../../milestones/mil-005-docs-wiki.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/sqa/traceability-matrix.md b/docs/sqa/traceability-matrix.md new file mode 100644 index 0000000..2515a64 --- /dev/null +++ b/docs/sqa/traceability-matrix.md @@ -0,0 +1,74 @@ +# Traceability Matrix + +## Metadata +| Key | Value | +| --- | --- | +| ID | TM-001 | +| CrossReference | [BC-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## 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. + +## Traceability Table + +| Artifact Instance | Type | Language | Domain | Upstream (Backward Link) | Downstream (Forward Link) | Last Reviewed (RC-ID) | +| --- | --- | --- | --- | --- | --- | --- | +| [BC-001] | BC | en | it | - | [SA-001], [PP-001] | [RC-001] | +| [SA-001] | SA | en | it | [BC-001] | [BC-001] | [RC-002] | +| [PP-001] | PP | en | it | [BC-001], [SA-001] | [MIL-001] to [MIL-005] | [RC-003] | +| [DICT-001] | DICT | en | it | [BC-001], [SA-001] | - | [RC-004] | +| [MIL-001] | MIL | en | it | [BC-001], [PP-001] | - | [RC-005] | +| [MIL-002] | MIL | en | it | [BC-001], [PP-001] | - | [RC-006] | +| [MIL-003] | MIL | en | it | [BC-001], [PP-001] | - | [RC-007] | +| [MIL-004] | MIL | en | it | [BC-001], [PP-001] | - | [RC-008] | +| [MIL-005] | MIL | en | it | [BC-001], [PP-001] | - | [RC-009] | + +## Concern Coverage + +| Concern (CN-ID) | Views that answer it | Decisions (ADR) | Quality check (TP) | Status | +| --- | --- | --- | --- | --- | +| CN-001 | [PP-001], [MIL-001] | - | - | Covered | +| CN-002 | [MIL-002] to [MIL-004] | - | - | Covered | +| CN-003 | [MIL-004] | - | - | Covered | +| CN-004 | [MIL-001] | - | - | Covered | +| CN-005 | [MIL-001], [MIL-005] | - | - | Covered | +| CN-006 | [MIL-001] | - | - | Covered | +| CN-007 | [MIL-005] | - | - | Covered | + +## Open Inconsistencies + +| # | Views | Inconsistency | Found in (RC-ID) | Status | Resolved in | +| --- | --- | --- | --- | --- | --- | +| - | - | None found | - | Closed | - | + +--- + +[BC-001]: ../business-case.md +[SA-001]: ../stakeholder-analysis.md +[PP-001]: ../project-plan.md +[DICT-001]: ../dictionary.md +[MIL-001]: ../milestones/mil-001-foundation.md +[MIL-002]: ../milestones/mil-002-hello-flask.md +[MIL-003]: ../milestones/mil-003-cli-and-main.md +[MIL-004]: ../milestones/mil-004-functions-decorators.md +[MIL-005]: ../milestones/mil-005-docs-wiki.md +[RC-001]: ./reviews/rc-001-business-case.md +[RC-002]: ./reviews/rc-002-stakeholder-analysis.md +[RC-003]: ./reviews/rc-003-project-plan.md +[RC-004]: ./reviews/rc-004-dictionary.md +[RC-005]: ./reviews/rc-005-mil-001-foundation.md +[RC-006]: ./reviews/rc-006-mil-002-hello-flask.md +[RC-007]: ./reviews/rc-007-mil-003-cli-and-main.md +[RC-008]: ./reviews/rc-008-mil-004-functions-decorators.md +[RC-009]: ./reviews/rc-009-mil-005-docs-wiki.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/docs/stakeholder-analysis.md b/docs/stakeholder-analysis.md new file mode 100644 index 0000000..f94ee33 --- /dev/null +++ b/docs/stakeholder-analysis.md @@ -0,0 +1,82 @@ +# Stakeholder Analysis: Flask Backend Basics + +## Metadata +| Key | Value | +| --- | --- | +| ID | SA-001 | +| CrossReference | [BC-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [73a5a95] | + +--- + +## Purpose + +Identify who is affected by the Flask Day 54 repository and what each needs from it. The method is a power/interest grid; concerns are mapped to FURPS+. + +## Stakeholder Summary Table + +| ID | Name | Role/Title | Organization | Power Level | Interest Level | Quadrant | Primary Concern (Business Language) | +| --- | --- | --- | --- | --- | --- | --- | --- | +| S01 | Jens Tirsvad Nielsen | Course participant, Product Owner, developer, reviewer | Tirsvad | HIGH | HIGH | Manage Closely | A correct, reviewed record of the assignment that he can reuse | +| S02 | Udemy coursists | Fellow course participants | Udemy course community | LOW | HIGH | Keep Informed | Readable, runnable code with the assignment's function names and run instructions | +| S03 | GitHub viewers | Repository visitors | Public | LOW | LOW | Monitor | A clear description, topics and README, and no runtime dependencies | + +## Power/Interest Classification Rationale + +- **Manage Closely (S01):** decides scope, writes, reviews and accepts every artifact. +- **Keep Informed (S02):** cannot change the project but depends on the quality of the shared code; served by README and wiki. +- **Monitor (S03):** casual visitors served by the repository description, topics and README. The brief names S03's power and interest as given by the Product Owner; both are classed LOW because visitors have no stake beyond browsing. + +## Primary Concerns and FURPS+ Mapping + +| Concern ID | Stakeholder | Concern | FURPS+ attribute | +| --- | --- | --- | --- | +| CN-001 | S01 | Work is planned and reviewed before code is written | Functionality | +| CN-002 | S01 | Tests prove the lecture examples behave as described | Reliability | +| CN-003 | S02 | Code is readable and uses the assignment's function names | Usability | +| CN-004 | S02 | Instructions to create a `.venv`, run the app and run the tests work first time | Usability | +| CN-005 | S03 | The repository explains itself in its description, topics and README | Usability | +| CN-006 | S03 | Nothing heavy has to be installed to read or run the pure-Python parts | Supportability | +| CN-007 | S01 | Wiki exists in English, Danish and Bahasa Malaysia | Functionality | + +## Communication Requirements + +| ID | Channel | Frequency | Deliverable | Phase / Milestone | +| --- | --- | --- | --- | --- | +| CM-001 | Pull request on the git host | One per milestone | Reviewed change and run summary | All milestones | +| CM-002 | README | Updated per milestone | Run and test instructions, screenshots | MIL-002 to MIL-005 | +| CM-003 | Wiki (en, da, ms) | Once, at the documentation milestone | What each lecture taught, with screenshots | MIL-005 | +| CM-004 | Repository description and topics | Once | Short description, topics | MIL-001 | + +## Conflicting Interests and Mitigations + +| Conflict | Stakeholders | Mitigation | +| --- | --- | --- | +| S03 wants no runtime dependencies, but the assignment is a Flask application | S01, S03 | Flask is declared only as the optional extra `web`; the pure-Python lecture modules and their tests need nothing installed | +| S02 wants the assignment's function names, the coding conventions prefer other names for some | S01, S02 | Keep the assignment names for public functions; document them in Doxygen comments | + +## Traceability Analysis + +### Business Goal Alignment + +| Stakeholder | Concern | Business Case objective | +| --- | --- | --- | +| S01 | CN-001, CN-002 | [BC-001] objectives 1 to 3 | +| S02 | CN-003, CN-004 | [BC-001] objectives 1, 2 and 4 | +| S03 | CN-005, CN-006 | [BC-001] objectives 4 and 5 | +| S01 | CN-007 | [BC-001] objective 4 | + +## Sign-Off + +Product Owner and reviewer: S01. + +--- + +[BC-001]: ./business-case.md +[73a5a95]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-flask/commit/73a5a95d28db041e4f27342cc552e18f7d386410 diff --git a/framework b/framework new file mode 160000 index 0000000..be602df --- /dev/null +++ b/framework @@ -0,0 +1 @@ +Subproject commit be602df82f39e02ecba8d8b4665730e71d0a79a0