MIL-001: project baseline and repository #19
No files matched your search
+36
@@ -0,0 +1,36 @@
|
||||
# Personal tokens: never commit
|
||||
.env
|
||||
.env.*
|
||||
|
||||
# Python
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
|
||||
# Virtual environments
|
||||
.venv/
|
||||
venv/
|
||||
env/
|
||||
|
||||
# Packaging and build
|
||||
build/
|
||||
dist/
|
||||
*.egg-info/
|
||||
.eggs/
|
||||
|
||||
# Test and tool caches
|
||||
.pytest_cache/
|
||||
.mypy_cache/
|
||||
.ruff_cache/
|
||||
.coverage
|
||||
htmlcov/
|
||||
|
||||
# Doxygen output
|
||||
docs/doxygen/
|
||||
|
||||
# IDE and OS
|
||||
.idea/
|
||||
.vscode/
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
@@ -0,0 +1,3 @@
|
||||
[submodule "framework"]
|
||||
path = framework
|
||||
url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git
|
||||
@@ -0,0 +1,15 @@
|
||||
# Doxygen configuration. Everything not listed here keeps the Doxygen default.
|
||||
# Generate the HTML documentation with: doxygen Doxyfile
|
||||
PROJECT_NAME = "Speed Calc Decorator"
|
||||
PROJECT_BRIEF = "Decorator that measures how long a function takes to run"
|
||||
OUTPUT_DIRECTORY = docs/doxygen
|
||||
INPUT = src
|
||||
FILE_PATTERNS = *.py
|
||||
RECURSIVE = YES
|
||||
EXTRACT_ALL = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = YES
|
||||
MARKDOWN_SUPPORT = YES
|
||||
GENERATE_HTML = YES
|
||||
GENERATE_LATEX = NO
|
||||
QUIET = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
@@ -1,2 +1,134 @@
|
||||
# 054-speed-calc-decorator
|
||||
# ⏱️ Speed Calc Decorator
|
||||
|
||||
A Python decorator that measures how many seconds a function takes to run. It is
|
||||
my solution to a lecture exercise from Udemy's *100 Days of Code: The Complete
|
||||
Python Pro Bootcamp*, written for fellow course participants and for anyone
|
||||
browsing for ideas. It has no runtime dependencies.
|
||||
|
||||
## 📚 Table of Contents
|
||||
|
||||
- [Overview](#-overview)
|
||||
- [Requirements](#-requirements)
|
||||
- [Setup](#-setup)
|
||||
- [Run](#-run)
|
||||
- [Tests](#-tests)
|
||||
- [Documentation](#-documentation)
|
||||
- [License](#-license)
|
||||
- [Links](#-links)
|
||||
- [Appendix: Project documents](#-appendix-project-documents)
|
||||
|
||||
## 🧭 Overview
|
||||
|
||||
The assignment: write `speed_calc_decorator` and use it to print how long
|
||||
`fast_function` and `slow_function` take. Expected output has this shape:
|
||||
|
||||
```text
|
||||
1695050908.1985211
|
||||
fast_function run speed: 0.33974480628967285s
|
||||
slow_function run speed: 2.9590742588043213s
|
||||
```
|
||||
|
||||
The numbers differ on every machine. The repository is laid out as:
|
||||
|
||||
| Folder | Purpose |
|
||||
| --- | --- |
|
||||
| `src/speed_calc/` | The package: the decorator, the two demo functions, `constants.py` |
|
||||
| `tests/` | pytest tests; they use a fake clock, so they never depend on real time |
|
||||
| `docs/` | Project documents (Business Case, plan, milestones), screenshots and the wiki |
|
||||
|
||||
## 📋 Requirements
|
||||
|
||||
- Python 3.13 or newer (`python --version`).
|
||||
- `git`, to clone the repository.
|
||||
- Optional: [Doxygen](https://www.doxygen.nl/) to build the API documentation.
|
||||
|
||||
There are no runtime dependencies. `pytest` is needed only to run the tests.
|
||||
|
||||
## 🛠️ Setup
|
||||
|
||||
Create a local virtual environment named `.venv` in the project folder and
|
||||
activate it. Windows (PowerShell):
|
||||
|
||||
```powershell
|
||||
python -m venv .venv
|
||||
.venv\Scripts\Activate.ps1
|
||||
```
|
||||
|
||||
Linux and macOS:
|
||||
|
||||
```bash
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
```
|
||||
|
||||
Upgrade pip, then install the project with the test tools:
|
||||
|
||||
```bash
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
Leave the environment with `deactivate`. Delete the `.venv` folder to start over.
|
||||
The `.venv` folder is ignored by git.
|
||||
|
||||
## ▶️ Run
|
||||
|
||||
With the environment active:
|
||||
|
||||
```bash
|
||||
python -m speed_calc
|
||||
```
|
||||
|
||||
## 🧪 Tests
|
||||
|
||||
```bash
|
||||
python -m pytest
|
||||
```
|
||||
|
||||
## 📖 Documentation
|
||||
|
||||
The source uses Doxygen comments. Build the HTML documentation into
|
||||
`docs/doxygen/`:
|
||||
|
||||
```bash
|
||||
doxygen Doxyfile
|
||||
```
|
||||
|
||||
## 📄 License
|
||||
|
||||
GNU Affero General Public License v3.0, see [LICENSE](./LICENSE).
|
||||
|
||||
## 🔗 Links
|
||||
|
||||
- [Repository][repository]
|
||||
- [Wiki][documentation]
|
||||
- [Issue tracker][issues]
|
||||
|
||||
## 📎 Appendix: Project documents
|
||||
|
||||
| Document | What it tells you |
|
||||
| --- | --- |
|
||||
| [AGENTS.md][agents] | The rules AI agents follow in this repository |
|
||||
| [Business Case][BC-001] | Why the project exists, its scope and success criteria |
|
||||
| [Stakeholder Analysis][SA-001] | Who is involved; the stakeholder IDs used for owners and reviewers |
|
||||
| [Project Plan][PP-001] | The gateways and their schedule |
|
||||
| [Milestones][milestones] | One document per gateway: Go/No-Go criteria and tasks |
|
||||
| [Artifact registry][registry] | Where each artifact type lives, the next version, the PO language and domain |
|
||||
| [Traceability matrix][TM-001] | How the artifacts link and when each was last reviewed |
|
||||
| [Framework README][framework-readme] | The framework this project uses |
|
||||
| [Framework changelog][framework-changelog] | What changed in each framework release |
|
||||
|
||||
---
|
||||
|
||||
[repository]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-speed-calc-decorator
|
||||
[documentation]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-speed-calc-decorator/wiki
|
||||
[issues]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/054-speed-calc-decorator/issues
|
||||
[agents]: ./AGENTS.md
|
||||
[BC-001]: ./docs/business-case.md
|
||||
[SA-001]: ./docs/stakeholder-analysis.md
|
||||
[PP-001]: ./docs/project-plan.md
|
||||
[milestones]: ./docs/milestones/
|
||||
[registry]: ./docs/artifact-registry.md
|
||||
[TM-001]: ./docs/sqa/traceability-matrix.md
|
||||
[framework-readme]: ./framework/README.md
|
||||
[framework-changelog]: ./framework/CHANGELOG.md
|
||||
@@ -0,0 +1,67 @@
|
||||
# Skip user stories and use cases; plain package layout
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | ADR-0001 |
|
||||
| CrossReference | [BC-001], [PP-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
|
||||
| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Review RC-006 fixed 2 defects (stakeholder IDs S01 to S03 now explained; shared rationale for the two decisions stated in Context); accepted as stand-in for S01 in autonomous mode, not independent | pending |
|
||||
|
||||
Allowed Status values: `Proposed`, `Accepted`, `Rejected`, `Deprecated`, `Superseded by ADR-NNNN`.
|
||||
|
||||
---
|
||||
|
||||
## Context
|
||||
|
||||
The project solves one course exercise: a decorator that prints how long a
|
||||
function takes. Two decisions shape the plan and the code; both follow from one force: the
|
||||
documentation and structure should stay in proportion to a one-function exercise.
|
||||
|
||||
1. **User stories and use cases.** The framework asks for candidate stories and
|
||||
use cases before milestones. The exercise has one actor (S01, the author and Product Owner)
|
||||
running one command, with no input and no state. Options: (a) write a story and use case
|
||||
for "run the timing demo"; (b) skip them and plan plain technical tasks.
|
||||
2. **Code layout.** The `clean-architecture` skill describes layers (domain,
|
||||
application, infrastructure, presentation). Options: (a) the full layers;
|
||||
(b) one small package, `src/speed_calc/`, with a module per concern.
|
||||
|
||||
Forces: the target is a prototype to finish by 2026-11-09; stakeholders S02 (Udemy
|
||||
coursists) and S03 (GitHub viewers) want readable code with the assignment's function names and no runtime
|
||||
dependencies; layers would hide the three functions the course asks for.
|
||||
|
||||
## Decision
|
||||
|
||||
Skip user stories and use cases, and plan every task as a plain technical task
|
||||
(`Needs its own Use Case/User Story?` is `No`). Use one flat package
|
||||
`src/speed_calc/` with `constants.py`, the decorator, the two demo functions and
|
||||
a `__main__` entry point; apply the dependency rule by keeping the decorator
|
||||
free of any import from the demo or entry modules.
|
||||
|
||||
## Consequences
|
||||
|
||||
**Positive:**
|
||||
|
||||
- Less documentation than the code it describes; readers (S02, S03) find the
|
||||
three assignment functions at once.
|
||||
- No runtime dependencies and nothing to configure.
|
||||
|
||||
**Negative:**
|
||||
|
||||
- The layout does not scale to a larger program; a later lecture project with
|
||||
real use cases needs its own decision.
|
||||
- No story-level traceability; traceability stops at the milestone task.
|
||||
|
||||
## Affected Artifacts
|
||||
|
||||
- [BC-001] — scope stays as written; no story-level scope items exist.
|
||||
- [PP-001] — the Stories column says "none" and points here.
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[PP-001]: ../project-plan.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 | 004 |
|
||||
| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 |
|
||||
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 007 |
|
||||
| ADR | Architecture Decision Record | docs/adr/adr-*.md | 0002 |
|
||||
|
||||
## Languages
|
||||
|
||||
Set the PO language when the project starts; `project-planning` asks for it
|
||||
if it is missing. An artifact of a type marked "Written in the PO language"
|
||||
exists once, in that language, under its normal name (`business-case.md`); the
|
||||
`artifact` skill ("One file per artifact") has the rule.
|
||||
|
||||
| Setting | Value |
|
||||
| --- | --- |
|
||||
| PO language | en |
|
||||
| PO domain | it |
|
||||
| High-level register | IT Executive English |
|
||||
| Technical register | IT Professional English |
|
||||
| Wiki languages | en, da, ms (`framework/process/wiki.md`) |
|
||||
|
||||
Every artifact of a type marked "Yes" below states its language and domain in
|
||||
its `Language` and `Domain` Metadata rows; `new-artifact.sh` fills them from
|
||||
`PO language` and `PO domain`. `Language` is a BCP 47 code (`da`, `en`).
|
||||
`Domain` is a value from this list; add a row to introduce a domain, so a
|
||||
reviewer can see at once which professional vocabulary a document uses.
|
||||
|
||||
| Domain | Meaning |
|
||||
| --- | --- |
|
||||
| it | Software and IT |
|
||||
| medical | Healthcare and medical devices |
|
||||
| construction | Construction and civil engineering |
|
||||
|
||||
| Artifact types | Register | Written in the PO language |
|
||||
| --- | --- | --- |
|
||||
| BC, KPI, PP, MIL | IT Executive English | Yes |
|
||||
| SA, BMC, BPMN, UCD, US, UC, SSD, DM, RA, GOV, DICT | IT Professional English | Yes |
|
||||
| OC, SD, DCD, ERD, TP, AD, ADR, TM, RC, QC, source code | IT Professional English | No |
|
||||
|
||||
## Notes
|
||||
|
||||
- "Next Available Version" is the zero-padded (3-digit) version to use the
|
||||
*next* time a new document of that type is created. Increment it only when
|
||||
a brand-new document is created, not when an existing document's
|
||||
`## Version History` gets a row.
|
||||
- `ADR` uses 4 digits (`0001`); `RC` is sequential across all artifact types.
|
||||
@@ -0,0 +1,158 @@
|
||||
# Business Case
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | BC-001 |
|
||||
| CrossReference | [SA-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Deprecated | Jens Tirsvad Nielsen | S01 | Review findings fixed: constraint wording, abbreviations spelled out (RC-001) | pending |
|
||||
| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Go per RC-001; language checks confirmed by S01 | pending |
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
Lecture 054 of Udemy's "100 Days of Code: The Complete Python Pro Bootcamp"
|
||||
asks the participant to write a decorator, `speed_calc_decorator`, that prints
|
||||
how many seconds a function takes to run, and to apply it to `fast_function`
|
||||
and `slow_function`. This project turns that exercise into a small, tested,
|
||||
documented repository that other course participants can read and run, and that
|
||||
GitHub visitors can browse. It is a prototype: one Python package, a test suite,
|
||||
a README and a three-language wiki that explains what each lecture step taught.
|
||||
|
||||
## Methodological and Standards Foundation
|
||||
|
||||
The documents follow the SQA and QC framework mounted at `framework/`
|
||||
(Business Case, Stakeholder Analysis, Project Plan, milestones, then code).
|
||||
Quality criteria are tagged with ISO/IEC 25010:2023 characteristics. Source
|
||||
code follows the `coding-conventions` skill (Python) and is documented with
|
||||
Doxygen comments.
|
||||
|
||||
## Problem Statement
|
||||
|
||||
- The assignment gives only a stub (`def speed_calc_decorator(): pass`) and an
|
||||
expected output; there is no shared, runnable, tested solution layout.
|
||||
- Participants who compare solutions find loose scripts without setup
|
||||
instructions, tests or an explanation of the decorator concepts involved.
|
||||
- The author has no record of what each lecture step taught.
|
||||
|
||||
## Business Opportunity
|
||||
|
||||
A clean solution repository lets participants run the exercise in two commands,
|
||||
lets visitors reuse the layout (`src/`, `tests/`, `docs/`) for other lectures of
|
||||
the course, and gives the author a written record of the learning.
|
||||
|
||||
## Objectives
|
||||
|
||||
1. Deliver `speed_calc_decorator`, `fast_function` and `slow_function` with the
|
||||
assignment's names, printing output in the shape of the expected output.
|
||||
2. Cover the behaviour with pytest tests that do not depend on real elapsed time.
|
||||
3. Document how to create and use a local `.venv` and run the project and tests.
|
||||
4. Provide a README and a wiki in English, Danish and Bahasa Malaysia that
|
||||
explain what each lecture step gained, with one screenshot per step.
|
||||
5. Publish a repository description and topics on the git host.
|
||||
|
||||
## Scope
|
||||
|
||||
### In Scope
|
||||
|
||||
- Python package under `src/`, tests under `tests/`, documents under `docs/`.
|
||||
- `pyproject.toml`, Python `.gitignore`, `constants.py`, a `Doxyfile`.
|
||||
- README from the framework template, with venv and test instructions.
|
||||
- Wiki pages (en, da, ms) and one screenshot per lecture step.
|
||||
- Repository description and topics on the git host.
|
||||
|
||||
### Out of Scope
|
||||
|
||||
- Other lectures of the course.
|
||||
- Runtime dependencies, packaging to the Python Package Index (PyPI), a graphical user interface (GUI).
|
||||
- Reading or importing the `.env` file in the project (personal use only).
|
||||
|
||||
## Expected Benefits
|
||||
|
||||
### Tangible Benefits
|
||||
|
||||
- A runnable solution: `python -m speed_calc` prints the expected output shape.
|
||||
- A passing test suite and a documented setup.
|
||||
- README and wiki in three languages with screenshots.
|
||||
|
||||
### Intangible Benefits
|
||||
|
||||
- Understanding of decorators, closures, `functools.wraps` and `time.time()`.
|
||||
- A reusable layout for later lectures.
|
||||
|
||||
## Strategic Alignment
|
||||
|
||||
The project supports the author's goal of completing the 100 Days of Code course
|
||||
with a documented portfolio on the author's git host, and supports the sharing
|
||||
of solutions among course participants.
|
||||
|
||||
## Success Criteria
|
||||
|
||||
| # | Criterion | Target | Measure |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Tests pass | 100 % of tests green | `python -m pytest` exits 0 |
|
||||
| 2 | Program output | 3 lines in the shape of the assignment's expected output | `python -m speed_calc` run captured in the lecture-step screenshots |
|
||||
| 3 | Runtime dependencies | 0 | `pyproject.toml` has an empty `dependencies` list |
|
||||
| 4 | Wiki languages | 3 languages, same page set | file listing of `docs/wiki/` |
|
||||
| 5 | Screenshots | 1 per lecture step in README and wiki | image files in `docs/screenshots/` |
|
||||
| 6 | Repository metadata | Description and at least 5 topics set | git host application programming interface (API) response |
|
||||
|
||||
## Risks
|
||||
|
||||
| Risk | Impact | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| Timing tests are flaky on slow machines | Red continuous integration (CI) runs, false failures | Tests inject a fake clock and never assert real durations |
|
||||
| Token in `.env` leaks | Account compromise | `.env` is git-ignored, never read by project code, never printed |
|
||||
| Repository URL in the request differs from the configured `origin` | Metadata set on the wrong repository | Use the `origin` repository; the difference is recorded in Open Issues of [PP-001] |
|
||||
| Translations contain mistakes | Misleading wiki text | Keep wording simple, English is authoritative, review by S01 |
|
||||
| Screenshot capture on the host desktop disturbs the user | Interrupted work | Screenshots are rendered from captured program output, never from the desktop |
|
||||
|
||||
## Assumptions
|
||||
|
||||
- Python 3.13 or newer is installed on the author's machine.
|
||||
- The git host accepts the token in `.env` for repository settings and pull requests.
|
||||
- The wiki is enabled in the repository settings.
|
||||
- The Product Owner is S01; S01 is the reviewer. The people for whom the work is
|
||||
intended (S02, S03) are not contacted for this prototype.
|
||||
|
||||
## Constraints
|
||||
|
||||
- Python 3.13 or newer, venv, pytest, `pyproject.toml`.
|
||||
- No runtime dependencies.
|
||||
- `constants.py` holds the constants.
|
||||
- Folder structure `src/`, `tests/`, `docs/`.
|
||||
- One pull request (branch) per milestone.
|
||||
- Target: finished by 2026-11-09.
|
||||
|
||||
## Cost–Benefit Assessment
|
||||
|
||||
| Costs | Benefits |
|
||||
| --- | --- |
|
||||
| About one working day of effort | Complete, shareable solution and learning record |
|
||||
| No licence or infrastructure cost | Reusable layout for later lectures |
|
||||
|
||||
The assessment is qualitative: this is a personal learning project with no
|
||||
revenue, so numbers would add no information.
|
||||
|
||||
## Stakeholders
|
||||
|
||||
| Stakeholder ID (SA) | Interest in this project |
|
||||
| --- | --- |
|
||||
| S01 | Owner, developer and reviewer; wants a correct exercise and a learning record |
|
||||
| S02 | Reads and runs the code; wants the assignment's function names and clear run instructions |
|
||||
| S03 | Browses for ideas; wants a clear description, topics and README with no dependencies |
|
||||
|
||||
## Recommendation
|
||||
|
||||
Proceed — the scope is small, the dependencies are none, and the outcome serves all three stakeholders.
|
||||
|
||||
---
|
||||
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
@@ -0,0 +1,79 @@
|
||||
# Project baseline and repository
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-001 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Deprecated | Jens Tirsvad Nielsen | S01 | Review findings fixed: Go criterion 6 for ADR-0001, traceability to success criteria (RC-003) | pending |
|
||||
| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Go per RC-003; language checks confirmed by S01 | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Decide whether the repository is ready for code: configuration, documentation
|
||||
skeleton and repository metadata exist and follow the Business Case constraints.
|
||||
|
||||
## Deliverable
|
||||
|
||||
`pyproject.toml`, Python `.gitignore`, `Doxyfile`, README from the framework
|
||||
template with venv instructions, ADR-0001, and the repository description and
|
||||
topics set on the git host.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `pyproject.toml` requires Python 3.13 or newer, has no runtime dependencies and a pytest dev extra | Yes | No |
|
||||
| 2 | `.env` is git-ignored and `git ls-files` does not list it | Yes | No |
|
||||
| 3 | README follows the template and documents `.venv`, `python -m pip install --upgrade pip` and pytest | Yes | No |
|
||||
| 4 | `Doxyfile` exists with `INPUT = src` | Yes | No |
|
||||
| 5 | The git host application programming interface (API) returns a non-empty description and at least 5 topics | Yes | No |
|
||||
| 6 | ADR-0001 exists, records why user stories and use cases are skipped, and its review is a Go | Yes | No |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| none | First gateway |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objective 3 (venv and run instructions) | [BC-001] |
|
||||
| Objective 5 (description and topics) | [BC-001] |
|
||||
| Success criteria 3 and 6 (0 runtime dependencies; repository metadata) | [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-11-06 — within the Business Case target of 2026-11-09.
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Record ADR-0001: skip user stories and use cases | The exercise is a single function with no user interaction, so stories and use cases add no information. Record the reason and the plain package layout (no clean-architecture layers) in an architecture decision record (ADR). | No | |
|
||||
| 2 | Add pyproject.toml and venv setup | Configure the project for Python 3.13 or newer with the `src/` layout, no runtime dependencies, pytest as a dev extra, and pytest settings for `tests/`. | No | |
|
||||
| 3 | Add Python .gitignore | Ignore `.venv`, caches, build output and `.env` so the personal token file is never committed. | No | |
|
||||
| 4 | Add Doxyfile | Configure Doxygen to read `src/` and write `docs/doxygen/`, so the Doxygen comments in the source can be rendered. | No | |
|
||||
| 5 | Write README from the framework template | Fill the template: overview, requirements, creating and using a local `.venv`, `python -m pip install --upgrade pip`, run and test commands, links. Screenshots are added in MIL-002. | No | |
|
||||
| 6 | Set repository description and topics | Use the git host API with the token from `.env` (read by the shell only, never by the project or printed) to set a description and topics on the `origin` repository. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
@@ -0,0 +1,81 @@
|
||||
# Speed calc decorator
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-002 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Deprecated | Jens Tirsvad Nielsen | S01 | Review findings fixed: traceability to success criteria and constraints (RC-004) | pending |
|
||||
| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Go per RC-004; language checks confirmed by S01 | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Decide whether the exercise is solved: the decorator works, is tested, and each
|
||||
lecture step has a screenshot in the README.
|
||||
|
||||
## Deliverable
|
||||
|
||||
Package `speed_calc` under `src/` (`constants.py`, the decorator, `fast_function`,
|
||||
`slow_function`, a `__main__` entry point), tests under `tests/`, and one
|
||||
screenshot per lecture step in `docs/screenshots/`, shown in the README.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `python -m pytest` exits 0 in a fresh `.venv` | Yes | No |
|
||||
| 2 | `python -m speed_calc` prints the current time and two lines of the form `<name> run speed: <seconds>s` | Yes | No |
|
||||
| 3 | Function names are `speed_calc_decorator`, `fast_function`, `slow_function` | Yes | No |
|
||||
| 4 | Constants are only in `constants.py`; source has Doxygen comments | Yes | No |
|
||||
| 5 | `docs/screenshots/` has 4 images, one per lecture step, referenced in the README | Yes | No |
|
||||
| 6 | `pyproject.toml` lists no runtime dependencies | Yes | No |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| MIL-001 | Needs the project configuration and README skeleton |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objectives 1 and 2 (function names, tests) | [BC-001] |
|
||||
| Objective 4 (one screenshot per step, README part) | [BC-001] |
|
||||
| Success criteria 1, 2, 3 and 5 (tests, output, 0 runtime dependencies, screenshots) | [BC-001] |
|
||||
| Constraint: `constants.py` holds the constants; Doxygen comments (Methodological and Standards Foundation) | [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-11-07 — within the Business Case target of 2026-11-09.
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Lecture step 1: print the current time | Create the package and `constants.py`, and print `time.time()` as in the starting code. Test with a fake clock. | No | |
|
||||
| 2 | Lecture step 2: decorator skeleton | Write `speed_calc_decorator(function)` that returns a wrapper calling the function and preserving its metadata with `functools.wraps`. Test that the result and name are preserved. | No | |
|
||||
| 3 | Lecture step 3: time the call | Make the wrapper read the clock before and after the call and print `<name> run speed: <seconds>s`. The clock is injectable so the test asserts exact values. | No | |
|
||||
| 4 | Lecture step 4: fast vs slow | Add `fast_function` (range 1,000,000) and `slow_function` (range 10,000,000) with the decorator, and the `__main__` entry point that prints the expected output shape. Constants live in `constants.py`. | No | |
|
||||
| 5 | Doxygen comments on all source | Document modules, functions and constants with Doxygen-style comments, and check that `doxygen Doxyfile` runs without warnings if Doxygen is installed. | No | |
|
||||
| 6 | Screenshots per lecture step | Render each step's real program output to a Portable Network Graphics (PNG) image in `docs/screenshots/` with a dev-only script (no host desktop capture), and add them to the README. | No | |
|
||||
| 7 | Update README with run and test output | Add the four screenshots, the run command and the test command with expected results. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
@@ -0,0 +1,76 @@
|
||||
# Wiki in three languages
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | MIL-003 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Deprecated | Jens Tirsvad Nielsen | S01 | Review findings fixed: traceability to success criteria 4 and 5 (RC-005) | pending |
|
||||
| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Go per RC-005; language checks confirmed by S01 | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Decide whether the wiki explains what each lecture step gained, in English,
|
||||
Danish and Bahasa Malaysia, with a screenshot per step.
|
||||
|
||||
## Deliverable
|
||||
|
||||
`docs/wiki/` with the same page set in three languages (`Home`, `Setup`,
|
||||
`Step-1-Current-Time`, `Step-2-Decorator-Skeleton`, `Step-3-Timing-Wrapper`,
|
||||
`Step-4-Fast-vs-Slow`) and `_Sidebar.md`, reviewed against `QC-WIKI-001`.
|
||||
|
||||
## Go / No-Go Criteria
|
||||
|
||||
| # | Criterion (objectively checkable) | Go | No-Go |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `docs/wiki/` is flat; every English page has a `-da` and a `-ms` page | Yes | No |
|
||||
| 2 | Each page starts with the language switch line | Yes | No |
|
||||
| 3 | Each step page shows its screenshot and a "What we gained" section | Yes | No |
|
||||
| 4 | `_Sidebar.md` follows the framework's shape (English list, Languages last) | Yes | No |
|
||||
| 5 | The wiki review against `QC-WIKI-001` is a Go | Yes | No |
|
||||
|
||||
## Dependencies
|
||||
|
||||
| Depends on | Reason |
|
||||
| --- | --- |
|
||||
| MIL-002 | Needs the screenshots and the finished lecture steps |
|
||||
|
||||
## Traceability
|
||||
|
||||
| Business Case objective / KPI / user story | Reference |
|
||||
| --- | --- |
|
||||
| Objective 4 (wiki in three languages) | [BC-001] |
|
||||
| Success criteria 4 and 5 (wiki languages, screenshots) | [BC-001] |
|
||||
|
||||
## Ownership
|
||||
|
||||
| Role | Stakeholder ID (SA) |
|
||||
| --- | --- |
|
||||
| Owner | S01 |
|
||||
| Approving reviewer | S01 |
|
||||
|
||||
## Target Date
|
||||
|
||||
2026-11-09 — the Business Case target date.
|
||||
|
||||
## Tasks
|
||||
|
||||
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | Write English wiki pages | Home, Setup and one page per lecture step. Each step page shows the screenshot and explains what was gained (time.time, closures, functools.wraps, decorators). English is the authoritative text. | No | |
|
||||
| 2 | Translate wiki to Danish | Same page set as English with `-da` suffix, language line, code and commands unchanged. | No | |
|
||||
| 3 | Translate wiki to Bahasa Malaysia | Same page set as English with `-ms` suffix, language line, code and commands unchanged. | No | |
|
||||
| 4 | Add _Sidebar.md | One English page list, then a Languages section with Home links for en, da, ms. | No | |
|
||||
| 5 | Check the wiki is enabled on the host | The publish workflow copies `docs/wiki/` to the host wiki after merge only if the wiki is enabled. Check the setting and report if it is off. | No | |
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
@@ -0,0 +1,99 @@
|
||||
# Project Plan
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | PP-001 |
|
||||
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Deprecated | Jens Tirsvad Nielsen | S01 | Initial version | pending |
|
||||
| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | S01 | Informal review against QC-PP-001 fixed 7 defects (constants.py gateway, No-Go rule, sources, risk trace, stories, sync mark); accepted by S01 as Product Owner through the accepted plan in chat on 2026-11-06 | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This plan schedules three gateways that take the lecture-054 exercise from an
|
||||
empty repository to a tested, documented solution with a three-language wiki,
|
||||
within the Business Case constraint of finishing by 2026-11-09.
|
||||
|
||||
## Planning Assumptions
|
||||
|
||||
- The plan starts 2026-11-06 and ends by 2026-11-09 (source: [BC-001] Constraints, target 2026-11-09).
|
||||
- Phase length: one working session per gateway (source: the author, from the scope of [BC-001]).
|
||||
- One branch and one pull request per gateway, so that the steps stay traceable.
|
||||
- Stakeholder S01 owns and reviews every gateway ([SA-001]).
|
||||
|
||||
## Gateway Schedule
|
||||
|
||||
| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| Project baseline and repository | [MIL-001] | 2026-11-06 | 2026-11-06 | S01 | none (technical tasks, see ADR-0001) | Project configuration, README, Doxyfile, ADR-0001, repository metadata | not yet synced |
|
||||
| Speed calc decorator | [MIL-002] | 2026-11-06 to 2026-11-07 | 2026-11-07 | S01 | none (technical tasks, see ADR-0001) | Working package, tests, one screenshot per lecture step | not yet synced |
|
||||
| Wiki in three languages | [MIL-003] | 2026-11-07 to 2026-11-09 | 2026-11-09 | S01 | none (technical tasks, see ADR-0001) | Wiki pages in en, da, ms explaining each lecture step | not yet synced |
|
||||
|
||||
```plantuml
|
||||
@startgantt
|
||||
Project starts 2026-11-06
|
||||
[Project baseline] starts 2026-11-06 and ends 2026-11-06
|
||||
[Project baseline Go/No-Go] happens 2026-11-06
|
||||
[Speed calc decorator] starts 2026-11-06 and ends 2026-11-07
|
||||
[Speed calc decorator Go/No-Go] happens 2026-11-07
|
||||
[Wiki] starts 2026-11-07 and ends 2026-11-09
|
||||
[Wiki Go/No-Go] happens 2026-11-09
|
||||
@endgantt
|
||||
```
|
||||
|
||||
## Scope Coverage
|
||||
|
||||
| Business Case scope item | Gateway |
|
||||
| --- | --- |
|
||||
| `pyproject.toml`, `.gitignore`, `Doxyfile` | [MIL-001] |
|
||||
| `constants.py` | [MIL-002] |
|
||||
| README with venv and test instructions | [MIL-001], updated in [MIL-002] |
|
||||
| Repository description and topics | [MIL-001] |
|
||||
| Python package under `src/`, tests under `tests/` | [MIL-002] |
|
||||
| One screenshot per lecture step | [MIL-002] |
|
||||
| Wiki in en, da, ms | [MIL-003] |
|
||||
|
||||
## Dependencies
|
||||
|
||||
```
|
||||
MIL-001 → MIL-002 → MIL-003
|
||||
```
|
||||
|
||||
A No-Go stops the later gateways; their dates move by the same number of days.
|
||||
S01, as Product Owner, decides whether the end date of 2026-11-09 moves; a move
|
||||
beyond it changes the constraint in [BC-001] and needs a new version of it.
|
||||
|
||||
## Plan Risks
|
||||
|
||||
| Risk | Impact | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| The wiki is not enabled on the git host (assumption of [BC-001]) | MIL-003 cannot be published | Task checks the setting early; stop and report if disabled |
|
||||
| Screenshots need a rendering tool (relates to the screenshot risk of [BC-001]) | Delay in MIL-002 | Render from captured output with a dev-only tool, no host desktop |
|
||||
| Timing tests are flaky (risk of [BC-001]) | False failures in MIL-002 | Tests inject a fake clock; checked by Go criterion 1 of [MIL-002] |
|
||||
| The token in `.env` leaks (risk of [BC-001]) | Account compromise during MIL-001 | `.env` is git-ignored; checked by Go criterion 2 of [MIL-001] |
|
||||
|
||||
## Open Issues
|
||||
|
||||
- The request names the repository `Tirsvad-Udemy-100_days_of_code`, but `origin`
|
||||
is `Tirsvad-Udemy-100-days-of-code/054-speed-calc-decorator`. The plan uses
|
||||
`origin`.
|
||||
- User stories and use cases are skipped: the exercise is one function with no
|
||||
user interaction. The reason is recorded in ADR-0001 (task in [MIL-001]).
|
||||
- Under autonomous mode the reviews of S01's documents are performed by the AI
|
||||
as stand-in for S01 and are recorded as not independent.
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ./business-case.md
|
||||
[SA-001]: ./stakeholder-analysis.md
|
||||
[MIL-001]: ./milestones/mil-001-project-baseline.md
|
||||
[MIL-002]: ./milestones/mil-002-speed-calc-decorator.md
|
||||
[MIL-003]: ./milestones/mil-003-wiki-and-screenshots.md
|
||||
@@ -0,0 +1,67 @@
|
||||
# RC-001 Review of BC-001 Business Case
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-001 |
|
||||
| CrossReference | [BC-001], [QC-BC-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [BC-001]
|
||||
- Checklist used: [QC-BC-001] and [QC-LANG-001] (the type is written in the PO language)
|
||||
- Scope: full review. Round 1 found the defects named under Overall Verdict; they were fixed in the document and the criteria re-checked in round 2, which this record shows.
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: S01 (a person; confirmed criteria 3, 5 and 9 of QC-LANG-001 in chat on 2026-11-06)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; S01 is also the author, the Product Owner and the named reviewer)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | Section "Cost–Benefit Assessment" is qualitative and says why: "this is a personal learning project with no revenue, so numbers would add no information" |
|
||||
| 2 | Risks are identified with documented impact and mitigation | Pass | Five risks, each row has Impact and Mitigation (flaky timing tests, token leak, wrong repository, translations, screenshot capture) |
|
||||
| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | Six criteria with Target and Measure (e.g. 100 % tests green via `python -m pytest`, 0 runtime dependencies, at least 5 topics). The measure of criterion 2 ("captured in the lecture-step screenshots") is checked by MIL-002 Go criterion 2 |
|
||||
| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | Subsections "In Scope" and "Out of Scope" |
|
||||
| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | The "Stakeholders" table keys on S01, S02, S03 and gives only the interest in this project; roles and power are not re-described. [SA-001] is in CrossReference |
|
||||
| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | "Methodological and Standards Foundation" names the framework, the ISO/IEC 25010:2023 tags and the coding-conventions skill |
|
||||
| 7 | Assumptions and constraints are explicit and clearly distinguished from one another | Pass | Separate sections. Round 1 defect (fixed): the constraint read "greater than 3.13 (3.13 or newer)" (ambiguous) and "No runtime dependencies unless needed" contradicted success criterion 3 (0 runtime dependencies). Now "Python 3.13 or newer" and "No runtime dependencies" |
|
||||
| 8 | Document supports executive decision-making with a clear, unambiguous recommendation | Pass | "Recommendation": "Proceed", with the reason |
|
||||
|
||||
## 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 a BCP 47 code; `it` is in the domain table of `docs/artifact-registry.md` |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. The English wording is correct |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English: short, outcome-oriented prose; technical detail (file names, commands) is limited to Scope and the Success Criteria measures, where it makes them checkable |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. No DICT exists; the PO confirmed the terms are correct |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | All keys, headings and statuses are the framework's English ones |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | The `docs/` listing has no twin file |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | No earlier accepted version exists and the language has been `en` since the first row |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. S01 reads English and knows software and IT; the IT domain terms are used correctly |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Round 1: GUI, PyPI, API and CI were used unexpanded; expanded on first use in round 2. README and ISO/IEC are names, not abbreviations to expand |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go. No Fail on QC-BC-001 in round 2. Round 1 found two defects (criterion 7: ambiguous Python version wording and a contradiction between the dependency constraint and success criterion 3; QC-LANG-001 criterion 10: unexpanded abbreviations), fixed in the document. Criteria 3, 5 and 9 of QC-LANG-001 were Pending and are now Pass: S01 (a person) confirmed the English wording and the IT domain terms in chat on 2026-11-06. All Mandatory rows pass, so the verdict is Go and the Version History row of the document is Accepted. The review remains `Mode: autonomous, not independent` for the rest. Finding: no Domain Dictionary exists, so criterion 5 has no reference; it is not in the plan and is not added here.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Confirm criteria 3, 5 and 9 of QC-LANG-001 as a person (Closed: confirmed by S01 in chat, 2026-11-06; criteria set to Pass, verdict Go, document row Accepted) | S01 | 2026-11-06 |
|
||||
|
||||
---
|
||||
|
||||
[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
|
||||
@@ -0,0 +1,68 @@
|
||||
# RC-002 Review of SA-001 Stakeholder Analysis
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-002 |
|
||||
| CrossReference | [SA-001], [QC-SA-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [SA-001]
|
||||
- Checklist used: [QC-SA-001] and [QC-LANG-001] (the type is written in the PO language)
|
||||
- Scope: full review. Round 1 found the defects named under Overall Verdict; they were fixed in the document and the criteria re-checked in round 2, which this record shows.
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: S01 (a person; confirmed criteria 3, 5 and 9 of QC-LANG-001 in chat on 2026-11-06)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; S01 is also the author, the Product Owner and the named reviewer)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Power/Interest grid is filled for every stakeholder, with no gaps or unclassified entries | Pass | S01 HIGH/HIGH, S02 LOW/HIGH, S03 LOW/LOW, each with a Quadrant (Manage Closely, Keep Informed, Monitor); consistent with the grid |
|
||||
| 2 | Each stakeholder is assigned a unique, stable ID reusable for RACI assignments in other artifacts | Pass | S01, S02, S03; used by BC-001 and the MIL-* Ownership tables |
|
||||
| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | Role/Title, Organization, Power Level and Interest Level columns are filled; a rationale section follows |
|
||||
| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | CR-001 to CR-003 give channel, frequency, deliverable and MIL-* |
|
||||
| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | Two conflicts (S01/S02 structure vs exact shape; S01/S03 thorough wiki vs short entry), each with a mitigation |
|
||||
| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | "Business Goal Alignment" maps every CN-ID. Round 1 defect (fixed): CN-007 (no runtime dependencies) was traced to objective 3 (venv and run instructions), which does not cover it; it now cites BC-001 success criterion 3 and the constraint "No runtime dependencies" |
|
||||
| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | The concern table has a FURPS+ attribute per concern |
|
||||
| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | Plain sentences, one table row per stakeholder, a rationale per quadrant |
|
||||
| 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 with its stakeholder. First version, so no renumbering can have happened yet |
|
||||
|
||||
## 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 a BCP 47 code; `it` is in the domain table of `docs/artifact-registry.md` |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. The English wording is correct |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Professional English: precise technical terms (decorator, venv, README) used without explanation, which suits the reader the registry assumes |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. No DICT exists; the PO confirmed the terms are correct |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | All keys, headings and statuses are the framework's English ones |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | The `docs/` listing has no twin file |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | No earlier accepted version exists and the language has been `en` since the first row |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. S01 reads English and knows software and IT; the IT domain terms are used correctly |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Round 1: FURPS+ was not spelled out; Purpose now lists its attributes. Other abbreviations are IDs or names |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go. No Fail on QC-SA-001 in round 2. Round 1 found one defect (criterion 6: CN-007 traced to a Business Case objective that does not cover it) and QC-LANG-001 criterion 10 (FURPS+ not spelled out), both fixed in the document. Criteria 3, 5 and 9 of QC-LANG-001 were Pending and are now Pass: S01 (a person) confirmed the English wording and the IT domain terms in chat on 2026-11-06. All Mandatory rows pass, so the verdict is Go and the Version History row of the document is Accepted. The review remains `Mode: autonomous, not independent` for the rest.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Confirm criteria 3, 5 and 9 of QC-LANG-001 as a person (Closed: confirmed by S01 in chat, 2026-11-06; criteria set to Pass, verdict Go, document row Accepted) | S01 | 2026-11-06 |
|
||||
|
||||
---
|
||||
|
||||
[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
|
||||
@@ -0,0 +1,65 @@
|
||||
# RC-003 Review of MIL-001 Project baseline and repository
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-003 |
|
||||
| CrossReference | [MIL-001], [QC-MIL-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-001]
|
||||
- Checklist used: [QC-MIL-001] and [QC-LANG-001] (the type is written in the PO language)
|
||||
- Scope: full review. Round 1 found the defects named under Overall Verdict; they were fixed in the document and the criteria re-checked in round 2, which this record shows.
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: S01 (a person; confirmed criteria 3, 5 and 9 of QC-LANG-001 in chat on 2026-11-06)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; S01 is also the author, the Product Owner and the named reviewer)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | "Deliverable": pyproject.toml, Python .gitignore, Doxyfile, README, ADR-0001, repository description and topics |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Six criteria, each checkable by a command or an API call. Round 1 defect (fixed): the deliverable ADR-0001 had no criterion; criterion 6 added |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | "Dependencies": none, first gateway; matches PP-001 |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Objectives 3 and 5; round 1 added success criteria 3 and 6, which Go criteria 1 and 5 verify |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner S01, approving reviewer S01. Note: the same person, so not independent; the project has no governance document that requires otherwise |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-11-06, before the BC-001 target 2026-11-09; equals the decision date in PP-001 |
|
||||
|
||||
## 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 a BCP 47 code; `it` is in the domain table of `docs/artifact-registry.md` |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. The English wording is correct |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English: purpose and target date read at a glance; Go/No-Go criteria are necessarily concrete (files, commands) so that they are checkable |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. No DICT exists; the PO confirmed the terms are correct |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | All keys, headings and statuses are the framework's English ones |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | The `docs/` listing has no twin file |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | No earlier accepted version exists and the language has been `en` since the first row |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. S01 reads English and knows software and IT; the IT domain terms are used correctly |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Round 1: API and ADR were not expanded; expanded on first use in the Go criteria and the task |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go. No Fail on QC-MIL-001 in round 2. Round 1 found one defect (criterion 2: deliverable ADR-0001 without a Go criterion; plus thin traceability for criterion 4) and QC-LANG-001 criterion 10 (API and ADR unexpanded), all fixed. ADR-0001 is a task of this milestone; it is now written and accepted (RC-006). Criteria 3, 5 and 9 of QC-LANG-001 were Pending and are now Pass: S01 (a person) confirmed the English wording and the IT domain terms in chat on 2026-11-06. All Mandatory rows pass, so the verdict is Go and the Version History row of the document is Accepted. The review remains `Mode: autonomous, not independent` for the rest. Finding: no governance document defines escalation; S01 is owner and reviewer.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Confirm criteria 3, 5 and 9 of QC-LANG-001 as a person (Closed: confirmed by S01 in chat, 2026-11-06; criteria set to Pass, verdict Go, document row Accepted) | S01 | 2026-11-06 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-001]: ../../milestones/mil-001-project-baseline.md
|
||||
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
@@ -0,0 +1,65 @@
|
||||
# RC-004 Review of MIL-002 Speed calc decorator
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-004 |
|
||||
| CrossReference | [MIL-002], [QC-MIL-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-002]
|
||||
- Checklist used: [QC-MIL-001] and [QC-LANG-001] (the type is written in the PO language)
|
||||
- Scope: full review. Round 1 found the defects named under Overall Verdict; they were fixed in the document and the criteria re-checked in round 2, which this record shows.
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: S01 (a person; confirmed criteria 3, 5 and 9 of QC-LANG-001 in chat on 2026-11-06)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; S01 is also the author, the Product Owner and the named reviewer)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | "Deliverable": package `speed_calc` with its modules, tests, one screenshot per lecture step shown in the README |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Six criteria; 1, 2, 3, 5 and 6 are command or count checks. Criterion 4 (Doxygen comments) is by inspection and is backed by task 5, which runs `doxygen Doxyfile`; accepted as checkable |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Depends on MIL-001; matches PP-001 |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Objectives 1, 2 and 4. Round 1 defect (fixed): success criteria 1, 2, 3, 5 and the constants and Doxygen constraint were not cited; now in the Traceability table |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner S01, approving reviewer S01 (not independent; see the note in RC-003) |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-11-07, before 2026-11-09; equals the decision date in PP-001 |
|
||||
|
||||
## 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 a BCP 47 code; `it` is in the domain table of `docs/artifact-registry.md` |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. The English wording is correct |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English: purpose and target date read at a glance; Go/No-Go criteria are necessarily concrete so that they are checkable |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. No DICT exists; the PO confirmed the terms are correct |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | All keys, headings and statuses are the framework's English ones |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | The `docs/` listing has no twin file |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | No earlier accepted version exists and the language has been `en` since the first row |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. S01 reads English and knows software and IT; the IT domain terms are used correctly |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Round 1: PNG was not expanded; expanded in task 6 |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go. No Fail on QC-MIL-001 in round 2. Round 1 found one defect (criterion 4: thin traceability) and QC-LANG-001 criterion 10 (PNG unexpanded), both fixed. Criteria 3, 5 and 9 of QC-LANG-001 were Pending and are now Pass: S01 (a person) confirmed the English wording and the IT domain terms in chat on 2026-11-06. All Mandatory rows pass, so the verdict is Go and the Version History row of the document is Accepted. The review remains `Mode: autonomous, not independent` for the rest.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Confirm criteria 3, 5 and 9 of QC-LANG-001 as a person (Closed: confirmed by S01 in chat, 2026-11-06; criteria set to Pass, verdict Go, document row Accepted) | S01 | 2026-11-06 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-002]: ../../milestones/mil-002-speed-calc-decorator.md
|
||||
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
@@ -0,0 +1,65 @@
|
||||
# RC-005 Review of MIL-003 Wiki in three languages
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-005 |
|
||||
| CrossReference | [MIL-003], [QC-MIL-001], [QC-LANG-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [MIL-003]
|
||||
- Checklist used: [QC-MIL-001] and [QC-LANG-001] (the type is written in the PO language)
|
||||
- Scope: full review. Round 1 found the defects named under Overall Verdict; they were fixed in the document and the criteria re-checked in round 2, which this record shows.
|
||||
- Language and domain: en / it
|
||||
- Language reviewer: S01 (a person; confirmed criteria 3, 5 and 9 of QC-LANG-001 in chat on 2026-11-06)
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; S01 is also the author, the Product Owner and the named reviewer)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | A concrete deliverable is defined for every gate | Pass | "Deliverable": `docs/wiki/` with six pages in three languages plus `_Sidebar.md`, reviewed against QC-WIKI-001 |
|
||||
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Five criteria, checkable by file listing, first-line check and the QC-WIKI-001 review (that checklist exists as `framework/qc/artifacts/qc-wiki.md`); page set and sidebar shape match `framework/process/wiki.md` and QC-WIKI-001 criteria 2, 5, 10, 11, 12 and 16 |
|
||||
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Depends on MIL-002 (screenshots); matches PP-001 |
|
||||
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Objective 4; round 1 added success criteria 4 and 5, which Go criteria 1 and 3 verify |
|
||||
| 5 | Milestone owner and approving reviewer are identified | Pass | Owner S01, approving reviewer S01 (not independent; see the note in RC-003) |
|
||||
| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-11-09, equal to the BC-001 target and to the decision date in PP-001 |
|
||||
|
||||
## 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 a BCP 47 code; `it` is in the domain table of `docs/artifact-registry.md` |
|
||||
| 3 | The content (prose and table cells) is written in the stated language | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. The English wording is correct |
|
||||
| 4 | The register matches the one the registry gives for the artifact type | Pass | IT Executive English: purpose and target date read at a glance; Go/No-Go criteria are necessarily concrete so that they are checkable |
|
||||
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. No DICT exists; the PO confirmed the terms are correct |
|
||||
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | All keys, headings and statuses are the framework's English ones |
|
||||
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | The `docs/` listing has no twin file |
|
||||
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | No earlier accepted version exists and the language has been `en` since the first row |
|
||||
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | Confirmed by S01 (a person) in chat, 2026-11-06. S01 reads English and knows software and IT; the IT domain terms are used correctly |
|
||||
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | No abbreviation needs expanding |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go. No Fail on QC-MIL-001 in round 2. Round 1 found one weak spot (criterion 4: thin traceability), fixed. Observation: the file name says wiki-and-screenshots while the title and scope are the wiki only (screenshots belong to MIL-002); harmless, not renamed to keep the link stable. Criteria 3, 5 and 9 of QC-LANG-001 were Pending and are now Pass: S01 (a person) confirmed the English wording and the IT domain terms in chat on 2026-11-06. All Mandatory rows pass, so the verdict is Go and the Version History row of the document is Accepted. The review remains `Mode: autonomous, not independent` for the rest.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Confirm criteria 3, 5 and 9 of QC-LANG-001 as a person (Closed: confirmed by S01 in chat, 2026-11-06; criteria set to Pass, verdict Go, document row Accepted) | S01 | 2026-11-06 |
|
||||
|
||||
---
|
||||
|
||||
[MIL-003]: ../../milestones/mil-003-wiki-and-screenshots.md
|
||||
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
|
||||
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
|
||||
@@ -0,0 +1,54 @@
|
||||
# SQA Review Record
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | RC-006 |
|
||||
| CrossReference | [ADR-0001], [QC-ADR-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version: review of ADR-0001, two rounds | pending |
|
||||
|
||||
---
|
||||
|
||||
## Artifact Under Review
|
||||
|
||||
- Instance reviewed: [ADR-0001]
|
||||
- Checklist used: [QC-ADR-001] (a technical type: no QC-LANG-001 table)
|
||||
- Scope: full review. Round 1 found two defects (criterion 10 and the shared rationale for criterion 4); they were fixed in the ADR and the criteria re-checked in round 2, which this record shows.
|
||||
- Language and domain: n/a (technical type)
|
||||
- Language reviewer: none
|
||||
- Mode: autonomous, not independent (the reviewer is `AI as stand-in for S01`; S01 is also the author and Product Owner)
|
||||
|
||||
## Checklist Results
|
||||
|
||||
| # | Criterion | Status | Evidence/Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | The ID (`ADR-NNNN`, 4-digit) matches the filename number and is unique and sequential | Pass | ID `ADR-0001`, file `adr-0001-...`; the only ADR; registry next version is 0002 |
|
||||
| 2 | Context states the problem, the forces (cost, risk, constraints) and the options evaluated | Pass | Problem: stories/use cases and code layout for a one-function exercise; Forces paragraph (date 2026-11-09, S02 and S03 wants, layers hiding the three functions); options (a) and (b) for both decisions |
|
||||
| 3 | At least two options were considered, or the absence of alternatives is justified | Pass | Two options for each of the two decisions |
|
||||
| 4 | Decision is stated in one or two unhedged sentences and matches one of the evaluated options | Pass | Two sentences, no hedging; they match option (b) of each decision. Round 1: two decisions share one driver (proportion to the exercise), now stated in Context, so they are not unrelated |
|
||||
| 5 | Consequences list both Positive and Negative outcomes | Pass | Both lists present; negatives: does not scale, no story-level traceability |
|
||||
| 6 | Quality-attribute impacts (performance, security, portability, etc.) are named where the decision affects them | Pass | Maintainability/scalability limit named as negative; no runtime dependencies named as positive; performance and security are not affected |
|
||||
| 7 | Affected Artifacts are listed as links, and each is also in CrossReference | Pass | BC-001 and PP-001 are linked and both in CrossReference; PP-001 "Stories" column does say "none" and point to ADR-0001 |
|
||||
| 8 | Status changes are recorded as new Version History rows with a Change summary and Commit link; retained rows are never rewritten | Pass | Acceptance is a new row, the earlier row only moves to Deprecated as the RC process says; Commit is `pending` until the commit exists (resolved by `resolve-pending-commits.sh`) |
|
||||
| 9 | A superseded or deprecated ADR names its successor, and the successor links back | N-A | ADR-0001 is not superseded; the Deprecated row is a version row, not the ADR |
|
||||
| 10 | Written in business or technical language of the domain, with no unexplained abbreviations | Pass | Round 1 Fail: S01 to S03 were bare IDs. Fixed: S01, S02 and S03 are now glossed in Context |
|
||||
| 11 | Status is one of `Proposed`, `Accepted`, `Rejected`, `Deprecated` or `Superseded by ADR-NNNN`, and every Version History row uses only these | Pass | Rows use `Deprecated` and `Accepted` only |
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
Go. Every Mandatory criterion passes after the two round 1 fixes; criterion 9 is N-A with a reason. Not independent: the author and the stand-in reviewer are the same party.
|
||||
|
||||
## Action Items
|
||||
|
||||
| Action | Owner | Due |
|
||||
| --- | --- | --- |
|
||||
| Resolve the pending commit links after the commit | S01 | 2026-11-09 |
|
||||
|
||||
---
|
||||
|
||||
[ADR-0001]: ../../adr/adr-0001-skip-stories-plain-package.md
|
||||
[QC-ADR-001]: ../../../framework/qc/artifacts/qc-adr.md
|
||||
@@ -0,0 +1,87 @@
|
||||
# Traceability Matrix
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | TM-001 |
|
||||
| CrossReference | [BC-001], [SA-001] |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Proposed | Jens Tirsvad Nielsen | S01 | Initial version: BC, SA, PP, MIL-001 to MIL-003 and RC-001 to RC-005 | pending |
|
||||
|
||||
---
|
||||
|
||||
## 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) |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| [SA-001] | Stakeholder Analysis | en | it | - | [BC-001], [PP-001] | [RC-002] (Go) |
|
||||
| [BC-001] | Business Case | en | it | [SA-001] | [PP-001], [MIL-001], [MIL-002], [MIL-003] | [RC-001] (Go) |
|
||||
| [PP-001] | Project Plan | en | it | [BC-001], [SA-001] | [MIL-001], [MIL-002], [MIL-003] | - (no review gate; accepted by S01 through the accepted plan) |
|
||||
| [MIL-001] | Milestone / Gateway | en | it | [BC-001], [PP-001] | [MIL-002]; source code is not built yet; ADR-0001 is written | [RC-003] (Go) |
|
||||
| [MIL-002] | Milestone / Gateway | en | it | [BC-001], [PP-001], [MIL-001] | [MIL-003]; source code and tests are not built yet | [RC-004] (Go) |
|
||||
| [MIL-003] | Milestone / Gateway | en | it | [BC-001], [PP-001], [MIL-002] | - | [RC-005] (Go) |
|
||||
| [ADR-0001] | Architecture Decision Record | n/a | n/a | [BC-001], [PP-001] | source code and tests are not built yet | [RC-006] (Go) |
|
||||
| [RC-001] | SQA Review Record | - | - | [BC-001] | - | - |
|
||||
| [RC-002] | SQA Review Record | - | - | [SA-001] | - | - |
|
||||
| [RC-003] | SQA Review Record | - | - | [MIL-001] | - | - |
|
||||
| [RC-004] | SQA Review Record | - | - | [MIL-002] | - | - |
|
||||
| [RC-005] | SQA Review Record | - | - | [MIL-003] | - | - |
|
||||
| [RC-006] | SQA Review Record | - | - | [ADR-0001] | - | - |
|
||||
|
||||
## Concern Coverage
|
||||
|
||||
No view (architecture, design or use case artifact) exists yet, and none is planned
|
||||
before the milestones: the exercise is one function and the reason for skipping
|
||||
user stories and use cases is recorded in ADR-0001, a task of [MIL-001]
|
||||
(accepted). Each concern is delivered by a milestone Go criterion; that is
|
||||
noted in the first column. There is no Architecture Description, so the gaps
|
||||
are not listed there.
|
||||
|
||||
| Concern (CN-ID) | Views that answer it | Decisions (ADR) | Quality check (TP) | Status |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| CN-001 | none; delivered by [MIL-002] Go criteria 1 and 2 | none (ADR-0001 does not address it) | none | Gap |
|
||||
| CN-002 | none; delivered by [MIL-002] Go criterion 1 | none (ADR-0001 does not address it) | none | Gap |
|
||||
| CN-003 | none; delivered by [MIL-003] Go criteria 1 to 3 | none (ADR-0001 does not address it) | none | Gap |
|
||||
| CN-004 | none; delivered by [MIL-002] Go criterion 3 | none (ADR-0001 does not address it) | none | Gap |
|
||||
| CN-005 | none; delivered by [MIL-001] Go criterion 3 | none (ADR-0001 does not address it) | none | Gap |
|
||||
| CN-006 | none; delivered by [MIL-001] Go criteria 3 and 5 | none (ADR-0001 does not address it) | none | Gap |
|
||||
| CN-007 | none; delivered by [MIL-001] Go criterion 1 and [MIL-002] Go criterion 6 | none (ADR-0001 does not address it) | none | Gap |
|
||||
|
||||
## Open Inconsistencies
|
||||
|
||||
| # | Views | Inconsistency | Found in (RC-ID) | Status | Resolved in |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 1 | [SA-001], [BC-001] | CN-007 (no runtime dependencies) was traced to Business Case objective 3 (venv and run instructions), which does not cover it | [RC-002] | Closed | [SA-001] version of 2026-11-06 |
|
||||
| 2 | [BC-001] | The constraint "No runtime dependencies unless needed" contradicted success criterion 3 (0 runtime dependencies) | [RC-001] | Closed | [BC-001] version of 2026-11-06 |
|
||||
| 3 | [PP-001], [MIL-002] | The plan placed `constants.py` at [MIL-001], while [MIL-002] task 1 creates it | informal review of [PP-001] (no RC) | Closed | [PP-001] version of 2026-11-06 |
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- Types with no instance yet: KPI, BMC, BPMN, UCD, US, UC, DM, SSD, OC, SD, DCD, ERD, TP, AD, GOV, DICT. User stories and use cases are skipped on purpose (recorded in [ADR-0001]); GOV and DICT are not in the plan, which leaves QC-LANG-001 criterion 5 without a dictionary to check against.
|
||||
- `-` in Upstream means foundational; in Downstream, nothing is built on it yet; in Last Reviewed, no `RC-*` exists yet.
|
||||
- All five reviews are `Mode: autonomous, not independent` and `Go`: S01 confirmed criteria 3, 5 and 9 of QC-LANG-001 as a person in chat on 2026-11-06, so BC-001, SA-001 and MIL-001 to MIL-003 are `Accepted`.
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ../business-case.md
|
||||
[SA-001]: ../stakeholder-analysis.md
|
||||
[PP-001]: ../project-plan.md
|
||||
[MIL-001]: ../milestones/mil-001-project-baseline.md
|
||||
[MIL-002]: ../milestones/mil-002-speed-calc-decorator.md
|
||||
[MIL-003]: ../milestones/mil-003-wiki-and-screenshots.md
|
||||
[RC-001]: ./reviews/rc-001-business-case.md
|
||||
[RC-002]: ./reviews/rc-002-stakeholder-analysis.md
|
||||
[RC-003]: ./reviews/rc-003-mil-001-project-baseline.md
|
||||
[RC-004]: ./reviews/rc-004-mil-002-speed-calc-decorator.md
|
||||
[RC-005]: ./reviews/rc-005-mil-003-wiki.md
|
||||
[RC-006]: ./reviews/rc-006-adr-0001.md
|
||||
[ADR-0001]: ../adr/adr-0001-skip-stories-plain-package.md
|
||||
@@ -0,0 +1,88 @@
|
||||
# Stakeholder Analysis
|
||||
|
||||
## Metadata
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| ID | SA-001 |
|
||||
| CrossReference | [BC-001] |
|
||||
| Language | en |
|
||||
| Domain | it |
|
||||
|
||||
## Version History
|
||||
| Date | Status | Author | Reviewer | Change | Commit |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 2026-11-06 | Deprecated | Jens Tirsvad Nielsen | S01 | Review findings fixed: CN-007 traced to success criterion 3, abbreviations (RC-002) | pending |
|
||||
| 2026-11-06 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Go per RC-002; language checks confirmed by S01 | pending |
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
This analysis names the people the project serves and what each needs, so that
|
||||
owners, reviewers and tasks can cite stable IDs. It uses the power/interest grid
|
||||
and maps concerns to FURPS+ (Functionality, Usability, Reliability, Performance,
|
||||
Supportability, plus design, implementation, interface and physical constraints).
|
||||
|
||||
## Stakeholder Summary Table
|
||||
|
||||
| ID | Name | Role/Title | Organization | Power Level | Interest Level | Quadrant | Primary Concern (Business Language) |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| S01 | Jens Tirsvad Nielsen (course participant) | Product Owner, developer and reviewer | Tirsvad | HIGH | HIGH | Manage Closely | A correct exercise solution and a record of what was learned |
|
||||
| S02 | Udemy coursists | Fellow participants who share and compare code | Udemy course community | LOW | HIGH | Keep Informed | Readable, runnable code with the assignment's function names, and README run instructions |
|
||||
| S03 | GitHub viewers | Visitors who browse the repository for ideas | Public | LOW | LOW | Monitor | A clear repository description, topics and README, and no runtime dependencies |
|
||||
|
||||
## Power/Interest Classification Rationale
|
||||
|
||||
- **Manage Closely (S01):** decides scope, writes, reviews and accepts everything.
|
||||
- **Keep Informed (S02):** no authority over the project, but depends on its
|
||||
clarity; the README and wiki are the channel.
|
||||
- **Monitor (S03):** casual visitors with no stake beyond a good first
|
||||
impression; the description, topics and README serve them.
|
||||
|
||||
## Primary Concerns and FURPS+ Mapping
|
||||
|
||||
| Concern ID | Stakeholder | Concern | FURPS+ attribute |
|
||||
| --- | --- | --- | --- |
|
||||
| CN-001 | S01 | The decorator prints the time a function takes, like the expected output | Functionality |
|
||||
| CN-002 | S01 | Tests prove the behaviour without depending on real elapsed time | Reliability |
|
||||
| CN-003 | S01 | The learning of each lecture step is written down in three languages | Supportability |
|
||||
| CN-004 | S02 | Function names match the assignment (`speed_calc_decorator`, `fast_function`, `slow_function`) | Functionality |
|
||||
| CN-005 | S02 | Setup and run instructions with a local `.venv` are easy to follow | Usability |
|
||||
| CN-006 | S03 | Repository description, topics and README explain the project at a glance | Usability |
|
||||
| CN-007 | S03 | The project installs and runs with no runtime dependencies | Implementation |
|
||||
|
||||
## Communication Requirements
|
||||
|
||||
| ID | Channel | Frequency | Deliverable | Phase / Milestone |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| CR-001 | Pull request review | One per milestone | Pull request with the milestone's changes | MIL-001, MIL-002, MIL-003 |
|
||||
| CR-002 | README | Updated per milestone | Run and test instructions with screenshots | MIL-001, MIL-002 |
|
||||
| CR-003 | Wiki (en, da, ms) | Once | Lecture-step explanations with screenshots | MIL-003 |
|
||||
|
||||
## Conflicting Interests and Mitigations
|
||||
|
||||
| Conflict | Stakeholders | Mitigation |
|
||||
| --- | --- | --- |
|
||||
| S02 wants the exact assignment shape, S01 wants well-structured code (package, constants, tests) | S01, S02 | Keep the assignment's function names and output; add structure around them |
|
||||
| S01 wants a thorough wiki in three languages, S03 wants a short entry point | S01, S03 | README is short and links to the wiki for detail |
|
||||
|
||||
## Traceability Analysis
|
||||
|
||||
### Business Goal Alignment
|
||||
|
||||
| Stakeholder | Concern | Business Case objective |
|
||||
| --- | --- | --- |
|
||||
| S01 | CN-001, CN-002 | [BC-001] objectives 1 and 2 |
|
||||
| S01 | CN-003 | [BC-001] objective 4 |
|
||||
| S02 | CN-004 | [BC-001] objective 1 |
|
||||
| S02 | CN-005 | [BC-001] objective 3 |
|
||||
| S03 | CN-006 | [BC-001] objectives 4 and 5 |
|
||||
| S03 | CN-007 | [BC-001] success criterion 3 (0 runtime dependencies) and the constraint "No runtime dependencies" |
|
||||
|
||||
## Sign-Off
|
||||
|
||||
Product Owner: S01, accepted 2026-11-06 via RC-002.
|
||||
|
||||
---
|
||||
|
||||
[BC-001]: ./business-case.md
|
||||
Submodule
+1
Submodule framework added at be602df82f.
@@ -0,0 +1,29 @@
|
||||
[build-system]
|
||||
requires = ["setuptools>=75"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "speed-calc-decorator"
|
||||
version = "0.1.0"
|
||||
description = "Udemy 100 Days of Code, lecture 054: a decorator that measures how long a function takes to run."
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
license = "AGPL-3.0-or-later"
|
||||
license-files = ["LICENSE"]
|
||||
authors = [{ name = "Jens Tirsvad Nielsen" }]
|
||||
keywords = ["python", "decorator", "udemy", "100-days-of-code", "timing"]
|
||||
dependencies = []
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = ["pytest>=8", "pillow>=11"]
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["src"]
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
testpaths = ["tests"]
|
||||
pythonpath = ["src"]
|
||||
addopts = "-ra"
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 88
|
||||
Reference in new issue
Block a user