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
@@ -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