docs: baseline plan (business case, stakeholders, plan, milestones, reviews)

Business Case, Stakeholder Analysis, Domain Dictionary, Project Plan,
three milestones, review records RC-001 to RC-006 and the traceability
matrix. PO language en, domain it.
This commit is contained in:
2026-10-14 21:17:30 +08:00
parent 301e2164b0
commit 53f56eeb14
17 changed files with 1152 additions and 0 deletions
+61
View File
@@ -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/uc-*/uc.md`); `framework/scripts/find-crossreferences.sh` reads it.
| Short Name | Artifact Type | Primary File | Next Available Version |
| --- | --- | --- | --- |
| BC | Business Case | docs/business-case.md | 002 |
| SA | Stakeholder Analysis | docs/stakeholder-analysis.md | 002 |
| PP | Project Plan | docs/project-plan.md | 002 |
| MIL | Milestone / Gateway | docs/milestones/*.md | 004 |
| DICT | Domain Dictionary | docs/dictionary.md | 002 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 007 |
| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 |
## Languages
Set the PO language when the project starts; `project-planning` asks for it
if it is missing. An artifact of a type marked "Written in the PO language"
exists once, in that language, under its normal name (`business-case.md`); the
`artifact` skill ("One file per artifact") has the rule.
| Setting | Value |
| --- | --- |
| PO language | en |
| PO domain | it |
| High-level register | IT Executive English |
| Technical register | IT Professional English |
| Wiki languages | en and the PO language, at least (`framework/process/wiki.md`) |
Every artifact of a type marked "Yes" below states its language and domain in
its `Language` and `Domain` Metadata rows; `new-artifact.sh` fills them from
`PO language` and `PO domain`. `Language` is a BCP 47 code (`da`, `en`).
`Domain` is a value from this list; add a row to introduce a domain, so a
reviewer can see at once which professional vocabulary a document uses.
| Domain | Meaning |
| --- | --- |
| it | Software and IT |
| medical | Healthcare and medical devices |
| construction | Construction and civil engineering |
| Artifact types | Register | Written in the PO language |
| --- | --- | --- |
| BC, KPI, PP, MIL | IT Executive English | Yes |
| SA, BMC, BPMN, UCD, US, UC, SSD, DM, RA, GOV, DICT | IT Professional English | Yes |
| OC, SD, DCD, ERD, 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.
+171
View File
@@ -0,0 +1,171 @@
# Password Manager Business Case
## Metadata
| Key | Value |
| --- | --- |
| ID | BC-001 |
| CrossReference | [SA-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Password Manager Business Case
## Executive Summary
A desktop password manager written in Python 3.13 and Tkinter, built as the
assignment of days 29 and 30 of Udemy's "100 Days of Code: The Complete Python
Pro Bootcamp". The application generates passwords, saves them with a website
and an e-mail address in a JSON file, handles a missing or empty data file
without crashing, and searches the saved data for a website. The repository is
meant to be read, run and compared by other course participants, so it keeps
the assignment's function names, has no runtime dependencies and ships a README
and a wiki in English, Danish and Bahasa Malaysia.
## Methodological and Standards Foundation
- Larman, *Applying UML and Patterns*: planning-first, small iterations, the
artifact chain of the framework mounted at `framework/`.
- ISO/IEC 25010:2023 characteristics tag every quality criterion.
- Clean Architecture layering and MVVM for the user interface
(`clean-architecture` skill).
- Python conventions of the `coding-conventions` skill; Doxygen comments in
the source.
## Problem Statement
The course's earlier version of the program stores passwords in a plain text
file. A text file cannot be searched by website, is hard to update without
rewriting the whole file and breaks the program when it is missing. A course
participant who wants to compare solutions also has no reference repository
that shows the finished assignment together with tests and set-up
instructions.
## Business Opportunity
A small, tested, documented reference solution lets other participants verify
their own work, and shows the author's engineering practice to anyone who
browses the repository.
## Objectives
1. O1: Store each saved entry as a nested key-value record (website, e-mail,
password) in a JSON file.
2. O2: Keep the program running when the data file is missing, empty or invalid
by creating or repairing it.
3. O3: Let the user search the saved data by website and see the e-mail and
password, or a clear message when nothing is found.
4. O4: Publish the work as a runnable, tested and documented repository with a
description, topics, a README and a three-language wiki with screenshots.
## Scope
### In Scope
- Password generation, saving to JSON, searching by website.
- Exception handling for a missing, empty or invalid data file.
- A Tkinter window with the assignment's fields and buttons.
- `pyproject.toml`, pytest tests, `constants.py`, a Python `.gitignore`, a
Doxyfile and Doxygen comments.
- README, a wiki in English, Danish and Bahasa Malaysia, and screenshots.
- Repository description and topics on the git host.
- Instructions for a local `.venv` and `python -m pip install --upgrade pip`.
### Out of Scope
- Encryption of the stored passwords; the file is plain JSON as in the course.
- Editing or deleting saved entries.
- Packaging for PyPI or an installer.
- Any runtime dependency beyond the Python standard library.
## Expected Benefits
### Tangible Benefits
- A runnable program with an automated test suite.
- A README and a three-language wiki a newcomer can follow without help.
- A repository with a description and topics that can be found and understood.
### Intangible Benefits
- Practice of exception handling and JSON in a worked example.
- A worked example of the planning-first framework for a small project.
## Strategic Alignment
The project supports the author's course goal of finishing the 100 Days of Code
bootcamp with reviewable, documented solutions, and the goal of keeping each
day's project as a self-contained repository.
## Success Criteria
| # | Criterion | Target | Measure |
| --- | --- | --- | --- |
| 1 | Entries are stored as nested JSON | 100 % of saves produce valid JSON that `json.load` reads back | pytest test of the storage module |
| 2 | A missing, empty or invalid data file does not crash the program | 3 of 3 cases handled, each covered by a test | pytest tests |
| 3 | A search for a saved website returns its e-mail and password; an unknown website gives a message | 2 of 2 cases covered by tests | pytest tests |
| 4 | The test suite passes on Python 3.13 | 0 failures | `python -m pytest` |
| 5 | The project has no runtime dependencies | 0 entries in `dependencies` of `pyproject.toml` | file inspection |
| 6 | The wiki exists in three languages with the same page set | 3 languages, same pages, every page has a screenshot or a reason it has none | `check-languages.sh` and file listing |
| 7 | The repository has a description and at least 5 topics | description set, topics >= 5 | git host API read |
## Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| Plain-text storage of passwords is mistaken for a secure design | Readers copy an insecure pattern | README and wiki state in a Security note that the file is unencrypted and for learning only |
| The author's token in `.env` is committed or printed | Credential leak | `.env` is in `.gitignore`, is never imported by the program and is never echoed |
| Tkinter is missing on a reader's Python | The window does not start | README lists Tkinter as a requirement and the logic is testable without the window |
| Danish or Bahasa Malaysia translation errors | Misleading instructions | Code blocks and commands stay English; English is the authoritative text |
| Screenshots become outdated | Docs disagree with the program | Screenshots are produced by a documented step in the last milestone |
## Assumptions
- Python 3.13 or newer is installed on the reader's machine.
- Tkinter ships with the reader's Python.
- The git host `git.tirsystem.com` is reachable and the token in `.env` can edit
repository metadata and open pull requests.
- S01 can act as reviewer of every artifact, as stand-in in autonomous mode.
## Constraints
- Python 3.13 or newer; `venv` for the environment; pytest for tests.
- Folder structure `src/`, `tests/`, `docs/`.
- Constants live in `constants.py`.
- No runtime dependencies unless needed.
- Work is done on branches and pull requests, one per milestone.
- Tokens are read from `.env`, which is neither tested nor imported.
## Cost–Benefit Assessment
The assessment is qualitative: the project is an unpaid learning exercise with
no revenue, and the cost is the author's time.
| Costs | Benefits |
| --- | --- |
| About three working sessions of the author's time | A complete, reviewed reference solution |
| Effort to keep three wiki languages in step | Readable by English, Danish and Malay speaking participants |
| Effort to maintain tests and documentation | A reliable program and a repeatable set-up |
## Stakeholders
| Stakeholder ID (SA) | Interest in this project |
| --- | --- |
| S01 | Finish the assignment, own the result and review it |
| S02 | Readable, runnable code with the assignment's function names and run instructions |
| S03 | A clear description, topics and README, and no runtime dependencies |
## Recommendation
Proceed — the scope is small, every objective is verifiable by a test or a file
check, and the risks have mitigations.
---
[SA-001]: ./stakeholder-analysis.md
+48
View File
@@ -0,0 +1,48 @@
# Password Manager Domain Dictionary
## Metadata
| Key | Value |
| --- | --- |
| ID | DICT-001 |
| CrossReference | [BC-001], [SA-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Purpose and Scope
Maps each Product Owner (PO) term of the password manager to its professional
IT term. PO language: English (`en`); domain: `it`. The dictionary covers the
words used in the Business Case, the Stakeholder Analysis, the Project Plan and
the milestones, and the names used in the Python source.
## Dictionary
| PO term | Language | IT term | Definition | Used as PO term in | Used as IT term in |
| --- | --- | --- | --- | --- | --- |
| Password entry | en | Credential record | One saved website with its e-mail address and password. | BC, SA, PP, MIL | PY |
| Password file | en | JSON data file | The file on disk that holds every password entry as nested key-value data. | BC, SA, PP, MIL | PY |
| Search | en | Lookup | Finding the password entry of a website by its name. | BC, SA, PP, MIL | PY |
| Password generator | en | Random string generator | The function that creates a random password of letters, digits and symbols. | BC, PP, MIL | PY |
| Window | en | Tkinter view | The graphical form where the user types, searches and saves. | BC, SA, PP, MIL | PY |
| Missing file | en | FileNotFoundError | The condition where the password file does not exist yet. | BC, PP, MIL | PY |
| Empty or damaged file | en | JSONDecodeError | The condition where the password file exists but holds no valid JSON. | BC, PP, MIL | PY |
## Rules
- The Business Case, Stakeholder Analysis, Project Plan and milestones use the
PO term; the Python source, its docstrings and its tests use the IT term.
- One IT term per PO term and one PO term per IT term; no synonyms.
- The Domain Model does not exist in this project (no use case is modelled), so
the dictionary holds the terms of the documents that exist.
---
[BC-001]: ./business-case.md
[SA-001]: ./stakeholder-analysis.md
@@ -0,0 +1,75 @@
# Project Foundation
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-001 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Project Foundation
## Purpose
Decide whether the repository has the configuration, conventions and entry documentation every later phase builds on, so that feature work starts on a runnable, testable skeleton.
## Deliverable
A repository with `pyproject.toml` (Python 3.13 or newer, pytest as a development dependency, no runtime dependency), a Python `.gitignore` that excludes `.env` and `.venv`, `src/password_manager/constants.py`, a smoke test under `tests/`, a `Doxyfile`, a `README.md` built from the framework template with `.venv` instructions, and a repository description and topics on the git host.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `python -m pytest` passes in a fresh `.venv` | 0 failures | Any failure |
| 2 | `pyproject.toml` has `requires-python >= 3.13` and an empty runtime `dependencies` list | Both present | Missing or non-empty |
| 3 | `.gitignore` contains `.env` and `.venv` | Both present | Either missing |
| 4 | `bash framework/scripts/check-readme.sh` exits 0 | Exit 0 | Any finding |
| 5 | The git host shows a description and at least 5 topics for the repository | Both set | Either missing |
## Dependencies
| Depends on | Reason |
| --- | --- |
| (none) | The baseline documents are in the repository |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| BC-001 O4; Success criteria 4, 5 and 7 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (AI as stand-in, autonomous mode) |
## Target Date
2026-10-15 — the Business Case sets no deadline; the plan's first phase is one to two days.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Create pyproject.toml and the package skeleton | Add `pyproject.toml` with Python 3.13 or newer, the setuptools build backend, a `src/password_manager` package, pytest as an optional `dev` dependency and pytest paths. Needed so the project installs with `python -m pip install -e .[dev]` and tests find the package. | No | |
| 2 | Add the Python .gitignore | Add a Python `.gitignore` that also excludes `.env`, `.venv` and Doxygen output, so a token or an environment is never committed. | No | |
| 3 | Add constants.py | Create `src/password_manager/constants.py` holding the data file name, window title, padding, default e-mail and password-length values, because the requirement is that constants live in one module. | No | |
| 4 | Add the Doxyfile | Add a `Doxyfile` that documents `src/` into `docs/doxygen/` so the Doxygen comments in the source can be built into HTML. | No | |
| 5 | Write the README from the framework template | Create `README.md` from the framework template with requirements, the `.venv` creation and `python -m pip install --upgrade pip` commands, run and test instructions and a Security note. | No | |
| 6 | Set the repository description and topics | Use the git host API with the token from `.env` (never printed, never imported by the project) to set a description and topics for the repository so viewers (S03) can find it. | No | |
| 7 | Add the smoke test | Add a first pytest test that imports the package and its constants so the test command is proven from the first milestone. | No | |
---
[BC-001]: ../business-case.md
@@ -0,0 +1,76 @@
# Password Manager Features
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-002 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Password Manager Features
## Purpose
Decide whether the program does what the three lectures describe: JSON storage, exception handling and search, behind the Tkinter window.
## Deliverable
The `password_manager` package with a JSON storage module, `generate_password`, `save` and `find_password` functions under the assignment's names, a Tkinter view with an MVVM view model, and pytest tests for every behaviour, all with Doxygen comments and reviewed against the Python checklist.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `python -m pytest` passes | 0 failures | Any failure |
| 2 | Saving an entry writes nested JSON that `json.load` reads back | Test passes | Test fails or missing |
| 3 | A missing, empty and invalid data file are each handled without an exception reaching the user | 3 of 3 tests pass | Any case unhandled |
| 4 | Searching a saved website returns its e-mail and password; an unknown website returns a not-found message | 2 of 2 tests pass | Either fails |
| 5 | The code review record against `qc-programming-python` is `Go` | Go | No-Go or Go-with-conditions |
| 6 | No third-party import exists in `src/` | None found | Any found |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-001 | The skeleton, constants and configuration must exist first |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| BC-001 O1, O2, O3; Success criteria 1 to 5 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (AI as stand-in, autonomous mode) |
## Target Date
2026-10-17 — follows MIL-001 by two days, within the Business Case constraints.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Implement JSON storage | Create the storage module that writes entries with `json.dump(indent=4)`, reads with `json.load` and updates by loading the existing data first, as the first lecture explains, so the file stays one valid nested dictionary. | No | |
| 2 | Handle a missing, empty or invalid data file | Catch `FileNotFoundError` and `json.JSONDecodeError` with try, except, else and finally so a first save creates the file and the entry fields are cleared in every case (challenge 1). | No | |
| 3 | Implement find_password | Add the search that loads the data, looks the website up and returns the e-mail and password, or a clear not-found message, including the case where the file does not exist (challenge 2). | No | |
| 4 | Implement generate_password | Generate a random password of letters, digits and symbols with `random`/`secrets` from the standard library, using the length bounds from `constants.py`. | No | |
| 5 | Build the Tkinter window | Create the view and view model (MVVM): logo canvas, Website with Search, Email/Username, Password with Generate Password, and the Add button; copy the generated password with the Tkinter clipboard so no dependency is added. | No | |
| 6 | Write the pytest tests | Cover storage, the three file conditions, search found and not found, the generator and the view model with temporary files, because the tests are the evidence of the Business Case success criteria. | No | |
| 7 | Review the code against qc-programming-python | Review `src/` and `tests/` against the Python checklist and record an RC with the verdict before the pull request. | No | |
---
[BC-001]: ../business-case.md
@@ -0,0 +1,76 @@
# Documentation and Publishing
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-003 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Documentation and Publishing
## Purpose
Decide whether the project can be handed to course participants (S02) and repository visitors (S03): screenshots, README and a wiki in three languages.
## Deliverable
Screenshots of the running window under `docs/images/`, a README that shows them, a wiki under `docs/wiki/` in English, Danish (`-da`) and Bahasa Malaysia (`-ms`) with the same pages, a publish-wiki workflow and a passing framework check.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `docs/images/` holds at least 2 screenshots of the real window | 2 or more PNG files | Fewer |
| 2 | README embeds a screenshot and still passes `check-readme.sh` | Both true | Either false |
| 3 | Every wiki page exists in `en`, `da` and `ms` with the same page set | Page sets equal | Any page missing |
| 4 | Every wiki page starts with the language switch line | All pages | Any page without |
| 5 | `bash framework/scripts/check-languages.sh` exits 0 | Exit 0 | Any finding |
| 6 | `python -m pytest` still passes | 0 failures | Any failure |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-002 | A finished, running program is needed to take screenshots |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| BC-001 O4; Success criteria 6 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 (AI as stand-in, autonomous mode) |
## Target Date
2026-10-19 — follows MIL-002 by two days, within the Business Case constraints.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Capture screenshots of the application | Run the window with sample data, capture the main window, a successful search and a not-found message into `docs/images/` and record the capture steps so they can be repeated. | No | |
| 2 | Add the screenshots to the README | Embed the main-window screenshot in `README.md` with alternative text so S02 and S03 see the result before they run it. | No | |
| 3 | Write the English wiki | Write Home, Installation, Usage and Development pages in `docs/wiki/` with `_Sidebar.md` and `_Footer.md`; English is the authoritative text. | No | |
| 4 | Write the Danish wiki | Translate every English page to Danish as `<Page>-da.md`, keeping code blocks, commands and file names in English. | No | |
| 5 | Write the Bahasa Malaysia wiki | Translate every English page to Bahasa Malaysia as `<Page>-ms.md`, keeping code blocks, commands and file names in English. | No | |
| 6 | Add the publish-wiki workflow | Copy `framework/templates/ci/publish-wiki.yml` to the host's workflow folder so the wiki reaches the host's wiki after the merge. | No | |
| 7 | Run the framework and final checks | Run `check-readme.sh`, `check-languages.sh`, the test suite and record the final review so the milestone has its evidence. | No | |
---
[BC-001]: ../business-case.md
+102
View File
@@ -0,0 +1,102 @@
# Password Manager 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-10-14 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | pending |
---
# Password Manager Project Plan
## Purpose
Schedule the three gateways that take the password manager from an empty
repository to a published, tested and documented project. The Business Case
sets no deadline, so the plan keeps the phases short and sequential.
## Planning Assumptions
- Work starts 2026-10-14 and the plan ends 2026-10-19.
- Each phase is one branch and one pull request, and its tasks are Issues.
- S01 reviews every artifact; in autonomous mode the AI acts as stand-in for S01
and the review records say so ([SA-001]).
- Product Owner language is English (domain `it`); the wiki exists in English,
Danish and Bahasa Malaysia as the Business Case requires ([BC-001]).
- The application is a user interface, so the presentation pattern is MVVM.
The wireframe is the course's layout: logo on top, then Website with a
Search button, Email/Username, Password with a Generate button, and a wide
Add button.
## Gateway Schedule
| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Project Foundation | [MIL-001] | 2026-10-14 to 2026-10-15 | 2026-10-15 | S01 | none | pyproject.toml, .gitignore, constants.py, Doxyfile, README, repository description and topics | |
| Password Manager Features | [MIL-002] | 2026-10-15 to 2026-10-17 | 2026-10-17 | S01 | none | JSON storage, exception handling, search, generator, window and tests | |
| Documentation and Publishing | [MIL-003] | 2026-10-17 to 2026-10-19 | 2026-10-19 | S01 | none | Screenshots, README with screenshots, wiki in en, da and ms | |
```plantuml
@startgantt
Project starts 2026-10-14
[Project Foundation] starts 2026-10-14 and ends 2026-10-15
[Foundation Go/No-Go] happens 2026-10-15
[Password Manager Features] starts 2026-10-15 and ends 2026-10-17
[Features Go/No-Go] happens 2026-10-17
[Documentation and Publishing] starts 2026-10-17 and ends 2026-10-19
[Publishing Go/No-Go] happens 2026-10-19
@endgantt
```
## Scope Coverage
| Business Case scope item | Gateway |
| --- | --- |
| Password generation, saving to JSON, searching by website | [MIL-002] |
| Exception handling for a missing, empty or invalid data file | [MIL-002] |
| A Tkinter window with the assignment's fields and buttons | [MIL-002] |
| `pyproject.toml`, pytest tests, `constants.py`, `.gitignore`, Doxyfile, Doxygen comments | [MIL-001] and [MIL-002] |
| README | [MIL-001], completed with screenshots in [MIL-003] |
| Wiki in English, Danish and Bahasa Malaysia, screenshots | [MIL-003] |
| Repository description and topics | [MIL-001] |
| Local `.venv` and pip upgrade instructions | [MIL-001] |
## Dependencies
```
MIL-001 -> MIL-002 -> MIL-003
```
A No-Go on a gateway holds every later gateway; the later dates move by the
rework time.
## Plan Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| The git host token cannot edit repository metadata or merge | Description, topics or merge steps fail | Stop and report as autonomous mode requires; the user performs the step |
| Screenshots cannot be captured in the session | README and wiki lack images | Capture the window with a documented script; if impossible, stop and report |
| The wiki publish workflow has no runner | Wiki does not reach the host | The pages stay in `docs/wiki/`; report and let the user decide how to publish |
## Open Issues
- No use cases or user stories are modelled: the tasks are technical steps of
the course assignment, so every task is a plain task.
- The Domain Dictionary (`DICT`) is created with the first milestone review so
that the language checklist can be applied.
---
[BC-001]: ./business-case.md
[SA-001]: ./stakeholder-analysis.md
[MIL-001]: ./milestones/mil-001-project-foundation.md
[MIL-002]: ./milestones/mil-002-password-manager-features.md
[MIL-003]: ./milestones/mil-003-documentation-and-publishing.md
+67
View File
@@ -0,0 +1,67 @@
# SQA Review Record
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-001 |
| CrossReference | [BC-001], [QC-BC-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Review of BC-001
## Artifact Under Review
- Instance reviewed: [BC-001]
- Checklist used: [QC-BC-001], [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (reads English and the IT domain; confirmed in chat by replying "accepted" to the plan message that asked for it)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | Cost-Benefit is qualitative and the section says why (unpaid learning exercise, no revenue). |
| 2 | Risks are identified with documented impact and mitigation | Pass | Risks table lists five risks, each with impact and mitigation. |
| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | Success Criteria table has 7 rows with numeric targets and a measure each. |
| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | `### In Scope` and `### Out of Scope` are separate 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]; no role is re-described. |
| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | Methodological and Standards Foundation names Larman, ISO/IEC 25010 and Clean Architecture. |
| 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 is a single "Proceed" with rationale. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Language `en` and Domain `it` rows are present and filled. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry's domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English; headings are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` per the registry; the text matches the reader it assumes. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms of [DICT-001] (password entry, password file, search, window) are used; no synonym found. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists beside the file. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version: no language change since an earlier accepted version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | S01 is the language reviewer and confirmed the English text and IT terms. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, MVVM, JSON) are spelled out or defined where first used. |
## Overall Verdict
Go — every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[BC-001]: ../../business-case.md
@@ -0,0 +1,67 @@
# SQA Review Record
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-002 |
| CrossReference | [SA-001], [QC-SA-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Review of SA-001
## Artifact Under Review
- Instance reviewed: [SA-001]
- Checklist used: [QC-SA-001], [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (reads English and the IT domain; confirmed in chat by replying "accepted" to the plan message that asked for it)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | Power/Interest grid is filled for every stakeholder, with no gaps or unclassified entries | Pass | S01, 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 | IDs S01-S03 are unique and stable. |
| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | Power and Interest are HIGH or LOW per stakeholder, with a rationale section. |
| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | Communication Requirements table gives channel, frequency, deliverable and milestone. |
| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | Conflicting Interests table has three conflicts, each with a mitigation. |
| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | Business Goal Alignment table traces each concern to [BC-001] O1 to O4. |
| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | Primary Concerns table gives business wording and a FURPS+ attribute. |
| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | Short tables and plain wording; each stakeholder finds their row at once. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Language `en` and Domain `it` rows are present and filled. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry's domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English; headings are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Professional English` per the registry; the text matches the reader it assumes. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms of [DICT-001] (password entry, password file, search, window) are used; no synonym found. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists beside the file. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version: no language change since an earlier accepted version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | S01 is the language reviewer and confirmed the English text and IT terms. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, MVVM, JSON) are spelled out or defined where first used. |
## Overall Verdict
Go — every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[SA-001]: ../../stakeholder-analysis.md
+66
View File
@@ -0,0 +1,66 @@
# SQA Review Record
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-003 |
| CrossReference | [DICT-001], [QC-DICT-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Review of DICT-001
## Artifact Under Review
- Instance reviewed: [DICT-001]
- Checklist used: [QC-DICT-001], [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (reads English and the IT domain; confirmed in chat by replying "accepted" to the plan message that asked for it)
- Mode: autonomous, not independent (reviewer is `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 | All 7 rows have PO term, language, IT term and definition. |
| 2 | Each PO term maps to exactly one IT term and the reverse (no synonyms) | Pass | Each PO term has exactly one IT term and the reverse. |
| 3 | Every Domain Model concept has a row, and the Domain Model uses its PO term | Pass | No Domain Model exists; the Rules section says so. The criterion applies to the document set that exists, and every term used in BC, SA, PP, MIL has a row. |
| 4 | The Operation Contracts, Sequence Diagrams, Design Class Diagrams and ERD use the IT term, not the PO term | Pass | No OC, SD, DCD or ERD exists; the Python source is the IT-term consumer and is checked in the code review. |
| 5 | Definitions are written in the PO language and are one sentence | Pass | Each definition is one English sentence. |
| 6 | "Used as PO term in" and "Used as IT term in" name artifact types that exist in the project | Pass | Used-in columns name only BC, SA, PP, MIL and PY, which 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` and Domain `it` match the registry. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Language `en` and Domain `it` rows are present and filled. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry's domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English; headings are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Professional English` per the registry; the text matches the reader it assumes. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms of [DICT-001] (password entry, password file, search, window) are used; no synonym found. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists beside the file. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version: no language change since an earlier accepted version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | S01 is the language reviewer and confirmed the English text and IT terms. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, MVVM, JSON) are spelled out or defined where first used. |
## Overall Verdict
Go — every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[DICT-001]: ../../dictionary.md
+65
View File
@@ -0,0 +1,65 @@
# SQA Review Record
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-004 |
| CrossReference | [MIL-001], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Review of MIL-001
## Artifact Under Review
- Instance reviewed: [MIL-001]
- Checklist used: [QC-MIL-001], [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (reads English and the IT domain; confirmed in chat by replying "accepted" to the plan message that asked for it)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows with Go and No-Go columns. |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding milestone or states none. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability table maps to [BC-001] objectives and success criteria. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer (stand-in). |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is set and the Business Case has no earlier deadline. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Language `en` and Domain `it` rows are present and filled. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry's domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English; headings are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` per the registry; the text matches the reader it assumes. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms of [DICT-001] (password entry, password file, search, window) are used; no synonym found. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists beside the file. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version: no language change since an earlier accepted version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | S01 is the language reviewer and confirmed the English text and IT terms. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, MVVM, JSON) are spelled out or defined where first used. |
## Overall Verdict
Go — every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-001]: ../../milestones/mil-001-project-foundation.md
+65
View File
@@ -0,0 +1,65 @@
# SQA Review Record
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-005 |
| CrossReference | [MIL-002], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Review of MIL-002
## Artifact Under Review
- Instance reviewed: [MIL-002]
- Checklist used: [QC-MIL-001], [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (reads English and the IT domain; confirmed in chat by replying "accepted" to the plan message that asked for it)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows with Go and No-Go columns. |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding milestone or states none. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability table maps to [BC-001] objectives and success criteria. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer (stand-in). |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is set and the Business Case has no earlier deadline. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Language `en` and Domain `it` rows are present and filled. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry's domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English; headings are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` per the registry; the text matches the reader it assumes. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms of [DICT-001] (password entry, password file, search, window) are used; no synonym found. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists beside the file. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version: no language change since an earlier accepted version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | S01 is the language reviewer and confirmed the English text and IT terms. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, MVVM, JSON) are spelled out or defined where first used. |
## Overall Verdict
Go — every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-002]: ../../milestones/mil-002-password-manager-features.md
+65
View File
@@ -0,0 +1,65 @@
# SQA Review Record
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-006 |
| CrossReference | [MIL-003], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
# Review of MIL-003
## Artifact Under Review
- Instance reviewed: [MIL-003]
- Checklist used: [QC-MIL-001], [QC-LANG-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: S01 (reads English and the IT domain; confirmed in chat by replying "accepted" to the plan message that asked for it)
- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable section names concrete files and outputs. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Go / No-Go table has objectively checkable rows with Go and No-Go columns. |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the preceding milestone or states none. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability table maps to [BC-001] objectives and success criteria. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership names S01 as owner and approving reviewer (stand-in). |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date is set and the Business Case has no earlier deadline. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | Language `en` and Domain `it` rows are present and filled. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is BCP 47; `it` is in the registry's domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English; headings are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register `IT Executive English` per the registry; the text matches the reader it assumes. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms of [DICT-001] (password entry, password file, search, window) are used; no synonym found. |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No `*.en.md` or other translated twin exists beside the file. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | First version: no language change since an earlier accepted version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | S01 is the language reviewer and confirmed the English text and IT terms. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations (PO, MVVM, JSON) are spelled out or defined where first used. |
## Overall Verdict
Go — every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None | S01 | - |
---
[MIL-003]: ../../milestones/mil-003-documentation-and-publishing.md
+57
View File
@@ -0,0 +1,57 @@
# Password Manager Traceability Matrix
## Metadata
| Key | Value |
| --- | --- |
| ID | TM-001 |
| CrossReference | [BC-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Purpose
Tracks backward and forward links between artifact instances so that the
Business Case's traceability can be checked. 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], [DICT-001] | [RC-001] |
| [SA-001] | SA | en | it | [BC-001] | [PP-001], [DICT-001] | [RC-002] |
| [DICT-001] | DICT | en | it | [BC-001], [SA-001] | - | [RC-003] |
| [PP-001] | PP | en | it | [BC-001], [SA-001] | [MIL-001], [MIL-002], [MIL-003] | - |
| [MIL-001] | MIL | en | it | [BC-001], [PP-001] | [MIL-002] | [RC-004] |
| [MIL-002] | MIL | en | it | [BC-001], [MIL-001] | [MIL-003] | [RC-005] |
| [MIL-003] | MIL | en | it | [BC-001], [MIL-002] | - | [RC-006] |
## Coverage Notes
- `-` in Upstream means foundational; in Downstream it means nothing is built
on it yet; in Last Reviewed it means no `RC-*` exists. The Project Plan has
no QC checklist; the Product Owner accepted it in chat.
- No KPI, use case, user story or design artifact exists: the project models
its tasks as plain technical tasks (see the Project Plan's Open Issues).
- Code reviews (`PY`) are added by the milestones that produce code.
---
[BC-001]: ../business-case.md
[SA-001]: ../stakeholder-analysis.md
[DICT-001]: ../dictionary.md
[PP-001]: ../project-plan.md
[MIL-001]: ../milestones/mil-001-project-foundation.md
[MIL-002]: ../milestones/mil-002-password-manager-features.md
[MIL-003]: ../milestones/mil-003-documentation-and-publishing.md
[RC-001]: ./reviews/rc-001-business-case.md
[RC-002]: ./reviews/rc-002-stakeholder-analysis.md
[RC-003]: ./reviews/rc-003-dictionary.md
[RC-004]: ./reviews/rc-004-mil-001.md
[RC-005]: ./reviews/rc-005-mil-002.md
[RC-006]: ./reviews/rc-006-mil-003.md
+87
View File
@@ -0,0 +1,87 @@
# Password Manager Stakeholder Analysis
## Metadata
| Key | Value |
| --- | --- |
| ID | SA-001 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending |
---
## Purpose
Identify who is affected by the password manager project and what each person
or group needs, so that owners, reviewers and readers can be named by a stable
ID in every other document. The analysis follows the Power/Interest grid
(Mendelow) and maps concerns 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 and reviewer | Tirsvad | HIGH | HIGH | Manage Closely | Finish the assignment correctly and publish a result worth keeping |
| S02 | Udemy coursists | Course participants who share and compare solutions | Udemy 100 Days of Code community | LOW | HIGH | Keep Informed | Readable, runnable code with the assignment's function names and instructions to run it |
| 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, accepts every artifact and merges
the work. High power and high interest.
- **Keep Informed (S02):** cannot change the project but cares about the
result; they are served by the README and the wiki.
- **Monitor (S03):** casual visitors; they are served by the repository
description, topics and README and need no direct communication.
## Primary Concerns and FURPS+ Mapping
| ID | Concern | FURPS+ attribute |
| --- | --- | --- |
| S01 | The program behaves as the assignment describes | Functionality |
| S01 | The work is planned, reviewed and traceable | Supportability |
| S02 | Function names match the assignment | Functionality |
| S02 | The program runs after following the README | Usability |
| S02 | The code is readable | Supportability |
| S03 | The repository explains itself at first glance | Usability |
| S03 | Nothing extra has to be installed | Performance (installation effort) |
## Communication Requirements
| ID | Channel | Frequency | Deliverable | Phase / Milestone |
| --- | --- | --- | --- | --- |
| S01 | Chat session and pull request review | Once per milestone | Pull request and run summary | MIL-001, MIL-002, MIL-003 |
| S02 | README and wiki | Once, at publication | Run instructions and usage pages in three languages | MIL-003 |
| S03 | Repository description, topics and README | Once, at publication | Description, topics and README | MIL-001, MIL-003 |
## Conflicting Interests and Mitigations
| Conflict | Stakeholders | Mitigation |
| --- | --- | --- |
| S02 wants the code to stay close to the course; S01 wants tests and layering | S01, S02 | Keep the assignment's function names in the public module and put structure behind them |
| S03 wants no dependencies; a convenient clipboard copy would need one | S01, S03 | Use Tkinter's own clipboard methods; add no runtime dependency |
| Plain-text storage suits the course but is unsafe for real use | S01, S02, S03 | State the limitation in README and wiki |
## Traceability Analysis
### Business Goal Alignment
| Stakeholder | Concern | Business Case objective |
| --- | --- | --- |
| S01 | Correct behaviour | [BC-001] O1, O2, O3 |
| S01 | Planned and reviewed work | [BC-001] O4 |
| S02 | Function names, run instructions | [BC-001] O3, O4 |
| S03 | Description, topics, README, no dependencies | [BC-001] O4 |
## Sign-Off
Reviewed and signed off by S01 (autonomous mode: AI as stand-in for S01).
---
[BC-001]: ./business-case.md