From 768ca344c95d4f21e565e37ac96661c2f8dc8f54 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Thu, 15 Oct 2026 00:17:27 +0800 Subject: [PATCH 1/2] MIL-009 plan and documents: executable with PyInstaller Milestone MIL-009, story US-001.07, ADR-0004, and the amended BC-001, DCD-001 and PP-001. Review records RC-042 to RC-047, all Go (autonomous mode, not independent). Task: MIL-009#1 --- docs/adr/adr-0004-pyinstaller-executable.md | 54 ++++++++++++ docs/artifact-registry.md | 6 +- docs/business-case.md | 6 +- docs/dcd.md | 10 ++- docs/milestones/mil-009-executable.md | 82 +++++++++++++++++++ docs/project-plan.md | 12 ++- docs/sqa/reviews/rc-042-business-case-exe.md | 69 ++++++++++++++++ docs/sqa/reviews/rc-043-user-stories-exe.md | 69 ++++++++++++++++ docs/sqa/reviews/rc-044-project-plan-exe.md | 53 ++++++++++++ .../rc-045-design-class-diagram-exe.md | 54 ++++++++++++ docs/sqa/reviews/rc-046-adr-0004.md | 54 ++++++++++++ docs/sqa/reviews/rc-047-mil-009.md | 65 +++++++++++++++ docs/sqa/traceability-matrix.md | 21 +++-- docs/user-stories.md | 25 +++++- 14 files changed, 559 insertions(+), 21 deletions(-) create mode 100644 docs/adr/adr-0004-pyinstaller-executable.md create mode 100644 docs/milestones/mil-009-executable.md create mode 100644 docs/sqa/reviews/rc-042-business-case-exe.md create mode 100644 docs/sqa/reviews/rc-043-user-stories-exe.md create mode 100644 docs/sqa/reviews/rc-044-project-plan-exe.md create mode 100644 docs/sqa/reviews/rc-045-design-class-diagram-exe.md create mode 100644 docs/sqa/reviews/rc-046-adr-0004.md create mode 100644 docs/sqa/reviews/rc-047-mil-009.md diff --git a/docs/adr/adr-0004-pyinstaller-executable.md b/docs/adr/adr-0004-pyinstaller-executable.md new file mode 100644 index 0000000..1509ab4 --- /dev/null +++ b/docs/adr/adr-0004-pyinstaller-executable.md @@ -0,0 +1,54 @@ +# ADR-0004: Windows executable built with PyInstaller + +## Metadata +| Key | Value | +| --- | --- | +| ID | ADR-0004 | +| CrossReference | [BC-001], [US-001], [DCD-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | + +Allowed Status values: `Proposed`, `Accepted`, `Rejected`, `Deprecated`, `Superseded by ADR-NNNN`. + +--- + +## Context + +The Product Owner (S01) wants an executable file, so that the program can be started without a Python installation (US-001.07). The program has images, a word list, a progress file that must survive restarts, and an optional speech extra. Options: + +1. A one-directory build (a folder with the executable and its libraries): starts faster and the data can sit beside the files, but it is a folder of hundreds of files to hand over. +2. A one-file build (a single `flash-card.exe` that unpacks itself to a temporary folder): one file to hand over, slower start; resources are in a temporary folder, so progress needs a place beside the executable. +3. Another packager (Nuitka, cx_Freeze) or an installer: more tooling and a larger change for the same result. + +## Decision + +Build a one-file, windowed (no console) Windows executable with PyInstaller by `tools/build_executable.py`. The images and the word list are inside the executable. The progress file and an optional word list are in a `data/` folder beside the executable (found with `sys.executable` when `sys.frozen` is set), and `--data-dir` still overrides it. PyInstaller is only in the optional extra `build`, so `dependencies` stays empty (ADR-0001). The executable is a build output and is not committed. + +## Consequences + +**Positive:** + +- One file to hand over, and no Python, `.venv` or pip needed to run it. +- The source run is unchanged; only the path rule differs when frozen, and it is tested without PyInstaller. +- The word list stays editable beside the executable. + +**Negative:** + +- PyInstaller cannot cross-compile: the executable must be built on Windows (and on Linux or macOS for those systems). +- A one-file executable unpacks to a temporary folder at each start and is larger with the speech packages; unsigned executables can trigger Windows SmartScreen or antivirus warnings. +- The Windows Store Python can cause Tcl/Tk path problems with PyInstaller; a build with it must be checked by a real start. + +## Affected Artifacts + +- [BC-001] — scope: the executable is in scope; installer, signing and release upload are out +- [US-001] — US-001.07 Start without Python +- [DCD-001] — packaging support and the choice of the word list file in the composition root + +--- + +[BC-001]: ../business-case.md +[US-001]: ../user-stories.md +[DCD-001]: ../dcd.md diff --git a/docs/artifact-registry.md b/docs/artifact-registry.md index d646e06..e782aa8 100644 --- a/docs/artifact-registry.md +++ b/docs/artifact-registry.md @@ -14,7 +14,7 @@ document of a type. `Primary File` may contain a glob (e.g. | 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 | 009 | +| MIL | Milestone / Gateway | docs/milestones/*.md | 010 | | UCD | Use Case Diagram | docs/use-case-diagram.md | 002 | | US | User Story | docs/user-stories.md | 002 | | UC | Use Case | docs/uc-*/uc.md | 002 | @@ -24,8 +24,8 @@ document of a type. `Primary File` may contain a glob (e.g. | SSD | System Sequence Diagram | docs/uc-*/ssd.md | 002 | | DCD | Design Class Diagram | docs/dcd.md | 002 | | DICT | Domain Dictionary | docs/dictionary.md | 002 | -| ADR | Architecture Decision Record | docs/adr/adr-NNNN-*.md | 0004 | -| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 042 | +| ADR | Architecture Decision Record | docs/adr/adr-NNNN-*.md | 0005 | +| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 048 | | TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 | ## Languages diff --git a/docs/business-case.md b/docs/business-case.md index a92b6c5..879a964 100644 --- a/docs/business-case.md +++ b/docs/business-case.md @@ -12,7 +12,8 @@ | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | -| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | In Scope: choice of level (new request of S01) | [0b983b7] | +| 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | In Scope: choice of level (new request of S01) | [0b983b7] | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Scope: executable built with PyInstaller (new request of S01) | pending | --- @@ -54,6 +55,7 @@ A small, well-structured reference solution gives the Product Owner a language l - Saving the words still to learn to `data/words_to_learn.csv` and using that file on the next start. - Optional spoken Malay word (text to speech) as an extra that can be installed. - A choice of level (the first 100 words, the first 1000 words or all words of the frequency ordered word list) before learning starts. +- A single Windows executable file, built with PyInstaller by a script of this repository, that runs without an installed Python. - `pyproject.toml`, `.gitignore`, `Doxyfile`, virtual environment instructions, `pytest` tests and `constants.py`. - README from the framework template, screenshots, and a wiki in English, Danish and Bahasa Malaysia. - Repository description and topics on the git host. @@ -63,7 +65,7 @@ A small, well-structured reference solution gives the Product Owner a language l - Other languages: the user interface labels are Malay and Danish only; another word list works by changing the data file but is not delivered. - Spaced repetition scheduling, statistics, accounts, cloud synchronisation and mobile apps. -- Packaging for distribution on PyPI or as an installer. +- Packaging for distribution on PyPI, an installer, a signed executable and an upload of the executable to a release (the executable built with PyInstaller is in scope; the file itself is not committed). - Redistribution of the course's own image files; the card and button images are generated for this project. - A translation quality review of the word list. diff --git a/docs/dcd.md b/docs/dcd.md index e5d826a..e430619 100644 --- a/docs/dcd.md +++ b/docs/dcd.md @@ -4,19 +4,20 @@ | Key | Value | | --- | --- | | ID | DCD-001 | -| CrossReference | [DM-001], [SD-001], [DICT-001], [ADR-0002] | +| CrossReference | [DM-001], [SD-001], [DICT-001], [ADR-0002], [ADR-0004] | ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | -| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added Level, Deck.within, the level argument and the level screen | [0b983b7] | +| 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added Level, Deck.within, the level argument and the level screen | [0b983b7] | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Scope note: runtime path rules and the executable build are packaging support, not design classes | pending | --- ## Purpose and Scope -The design classes of the program in `src/flash_card/`, in four layers (domain, application, infrastructure, presentation) with the presentation pattern MVVM ([ADR-0002]). The classes refine the concepts of [DM-001]; names are the IT terms of [DICT-001]. Methods trace to the operation contracts of [OC-001] and the sequence diagrams of [SD-001] (the SSD messages are in [SSD-001]). +The design classes of the program in `src/flash_card/`, in four layers (domain, application, infrastructure, presentation) with the presentation pattern MVVM ([ADR-0002]). The classes refine the concepts of [DM-001]; names are the IT terms of [DICT-001]. Methods trace to the operation contracts of [OC-001] and the sequence diagrams of [SD-001] (the SSD messages are in [SSD-001]). The module `flash_card/runtime.py` (where the resources and the data folder are when the program is frozen by PyInstaller) and the scripts in `tools/` are packaging support ([ADR-0004]): they have no system operation and are not design classes; `app.main` is still the only place that names the adapters, and it chooses the word list file. ## Diagram @@ -208,7 +209,7 @@ Main ..> FlashCardView : composes | Ports and adapters | `SpeechPort`, `GttsSpeech`, `NullSpeech` | Speech is an optional extra; the core runs without it | | Null Object | `NullSpeech` | No `if speech:` checks in the use case | | MVVM | `FlashCardView`, `FlashCardViewModel`, `LevelView`, `LevelViewModel` | Behaviour is tested without Tkinter ([ADR-0002]) | -| Composition root | `app.main` | The one place that names the adapters and shows the level screen | +| Composition root | `app.main` | The one place that names the adapters, shows the level screen and chooses the word list file (beside the executable, else inside it) | | Value object | `Level`, `Card`, `LanguagePair` | Immutable data with its own rule (`Level.first`) | ## Dependency Check @@ -223,5 +224,6 @@ Imports point inward: `domain` imports nothing from the other packages; `applica [OC-001]: ./uc-001/oc.md [SD-001]: ./uc-001/sd.md [ADR-0002]: ./adr/adr-0002-clean-architecture-and-mvvm.md +[ADR-0004]: ./adr/adr-0004-pyinstaller-executable.md [c3fbcbc]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/c3fbcbcfaf799e0ae34aed7e14d3bc8a62f03db3 [0b983b7]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/0b983b7fdadf6958717c1d0227d0f2ebe037f7b1 diff --git a/docs/milestones/mil-009-executable.md b/docs/milestones/mil-009-executable.md new file mode 100644 index 0000000..3d8e44a --- /dev/null +++ b/docs/milestones/mil-009-executable.md @@ -0,0 +1,82 @@ +# MIL-009: Executable with PyInstaller + +## Metadata +| Key | Value | +| --- | --- | +| ID | MIL-009 | +| CrossReference | [BC-001], [US-001], [UC-001], [DCD-001] | +| Language | en | +| Domain | it | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | + +--- + +## Purpose + +Decide whether the Learner can start the program from one executable file without a Python installation: the program is packaged with PyInstaller by a script of this repository, and behaves in the executable as it does from the source. + +## Deliverable + +`python tools/build_executable.py` builds `dist/flash-card.exe` (one file, no console window, an icon, the images and the word list inside, the speech extra included). The executable shows the level screen, keeps the progress in `data/words_to_learn.csv` next to it and prefers a `data/ms-da.csv` next to it over the word list inside. The executable itself is not committed to git; README and wiki (English, Danish, Bahasa Malaysia) explain how to build and use it. + +## Go / No-Go Criteria + +| # | Criterion (objectively checkable) | Go | No-Go | +| --- | --- | --- | --- | +| 1 | `python tools/build_executable.py` ends with exit code 0 and produces `dist/flash-card.exe` | File exists and is larger than 1 MB | No file or a build error | +| 2 | The executable starts on this machine with the virtual environment not activated and shows the level screen without a console window | A window titled "Flashy" exists after 5 seconds and the process is a Windows GUI program | The process ends or shows a console | +| 3 | With a `data/ms-da.csv` copied next to the executable it uses that file; without it the word list inside the executable is used | Smoke test with a marked list of two words, then without | The wrong list is used | +| 4 | Marking a word known in the executable writes `data/words_to_learn.csv` next to it and the next start continues from it | Smoke test reads the file after the run | No file or progress lost | +| 5 | The four images and the icon are inside the executable and are found when frozen | Card and button images are visible in a captured screenshot of the executable | A missing image or an exception | +| 6 | Path resolution when frozen (`sys.frozen`, `sys._MEIPASS`) is tested without PyInstaller | Unit tests pass | Not covered | +| 7 | `dependencies` in `pyproject.toml` is still empty; PyInstaller is only in the extra `build` | File check | A runtime dependency was added | +| 8 | BC-001, DCD-001 and ADR-0004 are updated and reviewed `Go`; README and wiki in three languages describe the build | Review records `Go`; `check-readme.sh` exit 0 | A document is missing | +| 9 | Code review against QC-PY-001 has no failed Mandatory criterion; `pytest`, `ruff`, `mypy --strict`, `lint-imports` and `doxygen` are clean | `RC-*` verdict Go and exit codes 0 | Otherwise | + +## Dependencies + +| Depends on | Reason | +| --- | --- | +| MIL-008 | The finished program, with the level screen, that is packaged | + +## Traceability + +| Business Case objective / KPI / user story | Reference | +| --- | --- | +| Objective 4 (a repository others can use), extended by the new request of S01; success criterion 4 (time to run) | [BC-001] | +| US-001.07 Start without Python | [US-001] | + +## Ownership + +| Role | Stakeholder ID (SA) | +| --- | --- | +| Owner | S01 | +| Approving reviewer | S01 (AI as stand-in in autonomous mode) | + +## Target Date + +2026-10-16 — within the delivery window that ends 2026-10-21 ([BC-001] constraint). + +## Tasks + +| # | Task | Summary | Needs its own Use Case/User Story? | Reference | +| --- | --- | --- | --- | --- | +| 1 | Update the documents for the executable | Amend BC-001 (In Scope: an executable built with PyInstaller; Out of Scope: an installer and a signed release stay out), add ADR-0004 (PyInstaller one-file windowed build, word list inside and a `data` folder beside the executable for progress, Windows only), and add the runtime path resolution to DCD-001. Every changed document gets a Version History row and a review. | No | BC-001, DCD-001 | +| 2 | Resolve resource and data paths when frozen | The images are found under `sys._MEIPASS` and the default data folder is `data/` next to the executable when `sys.frozen` is set; the source run keeps its paths. The rule is one function used by `constants.py`, tested by simulating the frozen state. | Yes | US-001.07 | +| 3 | Prefer the word list next to the executable | When the data folder has no `ms-da.csv` the program uses the copy inside the executable; the progress file is always written to the data folder; `--data-dir` still overrides both. | Yes | US-001.07 | +| 4 | Add the build script and the build extra | `tools/build_executable.py` calls PyInstaller (one file, windowed, name `flash-card`, the assets and the word list as data, the icon, the speech packages as hidden imports); `pyproject.toml` gets the extra `build`; `build/`, `dist/` and `*.spec` are ignored. | No | ADR-0004 | +| 5 | Generate the application icon | `tools/generate_images.py` also writes `flash_card.ico` (the card with the tick) from the same drawing code, so no external asset is used. | No | | +| 6 | Build and smoke-test the executable | Build it, start it with the virtual environment not active, check the window, the images, the level choice, the progress file next to it, the word list override and the speech import; record the result in the review record. | Yes | US-001.07 | +| 7 | Test the path rules and the build arguments | Unit tests for the frozen and source path rules and for the argument list the build script gives PyInstaller (without running PyInstaller). | No | | +| 8 | Update README and wiki | README and the Install page of the wiki in English, Danish and Bahasa Malaysia: how to build, where the executable and the data folder are, that Python is not needed to run it. The wiki is republished after the merge. | No | | + +--- + +[BC-001]: ../business-case.md +[US-001]: ../user-stories.md +[UC-001]: ../uc-001/uc.md +[DCD-001]: ../dcd.md diff --git a/docs/project-plan.md b/docs/project-plan.md index cecb92e..603fa33 100644 --- a/docs/project-plan.md +++ b/docs/project-plan.md @@ -4,7 +4,7 @@ | Key | Value | | --- | --- | | ID | PP-001 | -| CrossReference | [BC-001], [SA-001], [US-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007], [MIL-008] | +| CrossReference | [BC-001], [SA-001], [US-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007], [MIL-008], [MIL-009] | | Language | en | | Domain | it | @@ -12,7 +12,8 @@ | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | -| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added gateway MIL-008 Choose level (new request of S01) | [0b983b7] | +| 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added gateway MIL-008 Choose level (new request of S01) | [0b983b7] | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added gateway MIL-009 Executable with PyInstaller (new request of S01) | pending | --- @@ -40,6 +41,7 @@ This plan schedules the seven phases (gateways) that deliver the flash card prog | Spoken Malay word | [MIL-006] | 2026-10-19 | 2026-10-19 | S01 | US-001.05 | Text to speech as optional extra | [Milestone MIL-006][MS-006] | | Documentation and publication | [MIL-007] | 2026-10-19 to 2026-10-21 | 2026-10-21 | S01 | none | README, screenshots, wiki in 3 languages, description and topics | [Milestone MIL-007][MS-007] | | Choose level | [MIL-008] | 2026-10-20 | 2026-10-20 | S01 | US-001.06 | A level choice (100, 1000, all words) before the cards; documents, wiki and screenshots updated | | +| Executable with PyInstaller | [MIL-009] | 2026-10-16 | 2026-10-16 | S01 | US-001.07 | One Windows executable that runs without Python, built by a script; documents, wiki and README updated | | ```plantuml @startgantt @@ -60,6 +62,8 @@ Project starts 2026-10-14 [Documentation Go/No-Go] happens 2026-10-21 [Choose level] starts 2026-10-20 and ends 2026-10-20 [Choose level Go/No-Go] happens 2026-10-20 +[Executable] starts 2026-10-16 and ends 2026-10-16 +[Executable Go/No-Go] happens 2026-10-16 @endgantt ``` @@ -75,12 +79,13 @@ Project starts 2026-10-14 | README, screenshots, wiki in three languages | MIL-007 | | Repository description and topics | MIL-007 | | Choice of level (new request after MIL-007) | MIL-008 | +| Executable built with PyInstaller (new request after MIL-008) | MIL-009 | | Framework documents of the baseline | Baseline pull request before MIL-001 | ## Dependencies ``` -Baseline → MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005 → MIL-006 → MIL-007 → MIL-008 +Baseline → MIL-001 → MIL-002 → MIL-003 → MIL-004 → MIL-005 → MIL-006 → MIL-007 → MIL-008 → MIL-009 ``` A No-Go on a phase moves every later date by the days the rework takes; MIL-008 was added after MIL-007 and takes the unplanned day 2026-10-20, so no buffer is left inside the window; a No-Go moves the end date past 2026-10-21 and S01 decides whether to accept that. @@ -111,6 +116,7 @@ A No-Go on a phase moves every later date by the days the rework takes; MIL-008 [MIL-006]: ./milestones/mil-006-malay-speech.md [MIL-007]: ./milestones/mil-007-documentation-and-publication.md [MIL-008]: ./milestones/mil-008-choose-level.md +[MIL-009]: ./milestones/mil-009-executable.md [c3fbcbc]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/c3fbcbcfaf799e0ae34aed7e14d3bc8a62f03db3 [MS-001]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/milestone/165 [MS-002]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/milestone/166 diff --git a/docs/sqa/reviews/rc-042-business-case-exe.md b/docs/sqa/reviews/rc-042-business-case-exe.md new file mode 100644 index 0000000..314baa3 --- /dev/null +++ b/docs/sqa/reviews/rc-042-business-case-exe.md @@ -0,0 +1,69 @@ +# RC-042: Review of BC-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-042 | +| CrossReference | [BC-001], [QC-BC-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-15 | Accepted | 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] (language and domain) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the stand-in for S01 reads the language and knows the domain) +- 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 | The Cost-Benefit table is qualitative and says why: no revenue is expected, so a quantitative return does not apply. | +| 2 | Risks are identified with documented impact and mitigation | Pass | The Risks table has 5 risks, each with an impact and a mitigation. | +| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | The Success Criteria table has 8 rows with numeric targets and a measure each (for example 0 third-party packages; 5 commands or fewer). | +| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | Scope has `### In Scope` and `### Out of Scope`; the executable is added to In Scope and the installer, signing and release upload are named in Out of Scope. | +| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | The Stakeholders table cites S01, S02 and S03 and does not re-describe their roles. | +| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | Methodological and Standards Foundation names the framework, Larman, ISO/IEC 25010:2023 and PEP 8. | +| 7 | Assumptions and constraints are explicit and clearly distinguished from one another | Pass | Assumptions and Constraints are separate sections. | +| 8 | Document supports executive decision-making with a clear, unambiguous recommendation | Pass | Recommendation reads `Proceed` with a one-sentence 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 | Metadata of BC-001 has `Language | en` and `Domain | it`; neither is a placeholder. | +| 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 and `it` is a value of the registry's domain list. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English; Malay and Danish words and file names appear only as quoted data. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives `IT Executive English` for this type; the text is written for that reader. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | The PO terms of DICT-001 (flash card, word list, words to learn, study session) are used and no synonym replaces them. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists beside the document (checked in `docs/`). | +| 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 change of language or domain 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 | The reviewer is the stand-in for S01, the Product Owner, who reads English and knows the IT domain; no second language reviewer is needed (review-checklist-process step 2). Open to challenge by S01 in the end-of-run summary. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | CSV, MVVM, UI, PO and similar abbreviations are not all spelled out at first use; Optional, deferred. | + +## Overall Verdict + +Go — every Mandatory criterion passes; the failed Optional criteria are deferred with an action item. Reviewed by AI as stand-in for S01; not independent of the author. + +Full review (not a delta) after the change for MIL-009 (executable). + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| Criterion LANG 10 (Optional) failed: Abbreviations are spelled out on first use, in the stated language; fix or accept the deferral | S01 | 2026-10-21 | + +--- + +[BC-001]: ../../../docs/business-case.md +[QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-043-user-stories-exe.md b/docs/sqa/reviews/rc-043-user-stories-exe.md new file mode 100644 index 0000000..336cead --- /dev/null +++ b/docs/sqa/reviews/rc-043-user-stories-exe.md @@ -0,0 +1,69 @@ +# RC-043: Review of US-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-043 | +| CrossReference | [US-001], [QC-US-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [US-001] +- Checklist used: [QC-US-001], and [QC-LANG-001] (language and domain) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the stand-in for S01 reads the language and knows the domain) +- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | Follows INVEST criteria (Independent, Negotiable, Valuable, Estimable, Small, Testable) | Pass | INVEST Check section confirms the six properties for all seven stories and states one dependency exception. | +| 2 | Written in "As a / I want / So that" form | Pass | All seven stories use `As a / I want / so that`. | +| 3 | Clear, testable acceptance criteria are included | Pass | Every story, including US-001.07, has Given/When/Then acceptance criteria. | +| 4 | Traceable to a use case or epic | Pass | Every story traces to a milestone and to UC-001. | +| 5 | Story is sized to fit within a single iteration | Pass | Each story is one milestone, which fits one iteration. | +| 6 | Story statement avoids technical implementation detail | Fail | Acceptance criteria name `words_to_learn.csv`, `ms-da.csv` and 3000 ms, which are assignment-mandated names and values rather than pure behaviour. | +| 7 | Role named in the story matches an actor defined in the Use Case Diagram | Pass | The role `Learner` is the actor of UCD-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 of US-001 has `Language | en` and `Domain | it`; neither is a placeholder. | +| 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 and `it` is a value of the registry's domain list. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English; Malay and Danish words and file names appear only as quoted data. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives `IT Professional English` for this type; the text is written for that reader. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | The PO terms of DICT-001 (flash card, word list, words to learn, study session) are used and no synonym replaces them. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists beside the document (checked in `docs/`). | +| 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 change of language or domain 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 | The reviewer is the stand-in for S01, the Product Owner, who reads English and knows the IT domain; no second language reviewer is needed (review-checklist-process step 2). Open to challenge by S01 in the end-of-run summary. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | CSV, MVVM, UI, PO and similar abbreviations are not all spelled out at first use; Optional, deferred. | + +## Overall Verdict + +Go — every Mandatory criterion passes; the failed Optional criteria are deferred with an action item. Reviewed by AI as stand-in for S01; not independent of the author. + +Full review (not a delta) after the change for MIL-009 (executable). + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| Criterion 6 (Optional) failed: Story statement avoids technical implementation detail; fix or accept the deferral | S01 | 2026-10-21 | +| Criterion LANG 10 (Optional) failed: Abbreviations are spelled out on first use, in the stated language; fix or accept the deferral | S01 | 2026-10-21 | + +--- + +[US-001]: ../../../docs/user-stories.md +[QC-US-001]: ../../../framework/qc/artifacts/qc-user-story.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-044-project-plan-exe.md b/docs/sqa/reviews/rc-044-project-plan-exe.md new file mode 100644 index 0000000..33b7a50 --- /dev/null +++ b/docs/sqa/reviews/rc-044-project-plan-exe.md @@ -0,0 +1,53 @@ +# RC-044: Review of PP-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-044 | +| CrossReference | [PP-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [PP-001] +- Checklist used: none exists for this type, and [QC-LANG-001] (language and domain) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the stand-in for S01 reads the language and knows the domain) +- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`) + +## 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 of PP-001 has `Language | en` and `Domain | it`; neither is a placeholder. | +| 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 and `it` is a value of the registry's domain list. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English; Malay and Danish words and file names appear only as quoted data. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives `IT Executive English` for this type; the text is written for that reader. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | The PO terms of DICT-001 (flash card, word list, words to learn, study session) are used and no synonym replaces them. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists beside the document (checked in `docs/`). | +| 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 change of language or domain 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 | The reviewer is the stand-in for S01, the Product Owner, who reads English and knows the IT domain; no second language reviewer is needed (review-checklist-process step 2). Open to challenge by S01 in the end-of-run summary. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | CSV, MVVM, UI, PO and similar abbreviations are not all spelled out at first use; Optional, deferred. | + +## Overall Verdict + +Go — no checklist exists for the Project Plan type; the plan now schedules MIL-009 on 2026-10-16 inside the Business Case constraint (delivery by 2026-10-21) and the language checklist passes. Accepted as the Product Owner's stand-in, after the Product Owner accepted the MIL-009 plan in chat. Reviewed by AI as stand-in for S01; not independent of the author. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| Criterion LANG 10 (Optional) failed: Abbreviations are spelled out on first use, in the stated language; fix or accept the deferral | S01 | 2026-10-21 | + +--- + +[PP-001]: ../../../docs/project-plan.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/reviews/rc-045-design-class-diagram-exe.md b/docs/sqa/reviews/rc-045-design-class-diagram-exe.md new file mode 100644 index 0000000..d401620 --- /dev/null +++ b/docs/sqa/reviews/rc-045-design-class-diagram-exe.md @@ -0,0 +1,54 @@ +# RC-045: Review of DCD-001 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-045 | +| CrossReference | [DCD-001], [QC-DCD-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [DCD-001] +- Checklist used: [QC-DCD-001] +- Scope: full review +- Language and domain: n/a (technical type) +- Language reviewer: none +- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`) + +## Checklist Results + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | SOLID principles applied; no god classes with excessive responsibilities | Pass | Each class has one responsibility (Class Table); view, view model, session, deck and adapters are separate. | +| 2 | Visibility markers correct and consistent (`+` public, `-` private, `#` protected) | Pass | Visibility markers are on all members. | +| 3 | Relationships correctly distinguished: Association vs Aggregation vs Composition vs Dependency | Pass | Composition (Vocabulary and Card), aggregation (Deck), association, dependency and realization are distinguished. | +| 4 | Multiplicities and navigability specified on all associations | Pass | Multiplicities are on the associations; dependencies are directed. | +| 5 | Applied design patterns are annotated explicitly (e.g. Singleton, Factory, Strategy) | Pass | Pattern Annotations table lists Repository, Ports and adapters, Null Object, MVVM, Composition root. | +| 6 | Method signatures are traceable to Operation Contracts and/or design Sequence Diagrams | Pass | Method Traceability table is unchanged; the packaging support (`runtime.py`, `tools/`) is stated in Purpose and Scope as having no system operation and not being a design class, so it needs no row. | +| 7 | Class names and structure remain consistent with the Domain Model concepts they refine | Pass | The Class Table has a `Refines` column; names match the dictionary's IT terms; no class was added. | +| 8 | No circular dependencies between classes/packages unless explicitly justified | Pass | Dependency Check states there are no cycles. | +| 9 | Dependencies between classes and packages point inward: domain classes do not depend on infrastructure, delivery or framework classes | Pass | Domain imports nothing; infrastructure and presentation point inward (Dependency Check). | + +## Overall Verdict + +Go — every Mandatory criterion passes. Reviewed by AI as stand-in for S01; not independent of the author. + +Full review (not a delta) after the change for MIL-009 (executable). + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| none | - | - | + +--- + +[DCD-001]: ../../../docs/dcd.md +[QC-DCD-001]: ../../../framework/qc/artifacts/qc-dcd.md diff --git a/docs/sqa/reviews/rc-046-adr-0004.md b/docs/sqa/reviews/rc-046-adr-0004.md new file mode 100644 index 0000000..d4c390f --- /dev/null +++ b/docs/sqa/reviews/rc-046-adr-0004.md @@ -0,0 +1,54 @@ +# RC-046: Review of ADR-0004 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-046 | +| CrossReference | [ADR-0004], [QC-ADR-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [ADR-0004] +- Checklist used: [QC-ADR-001] +- Scope: full review +- Language and domain: n/a (technical type) +- Language reviewer: none +- Mode: autonomous, not independent (reviewer is `AI as stand-in for S01`) + +## 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-0004` matches the file name number. | +| 2 | Context states the problem, the forces (cost, risk, constraints) and the options evaluated | Pass | Context states the need (US-001.07), the forces and three options. | +| 3 | At least two options were considered, or the absence of alternatives is justified | Pass | Three options were considered. | +| 4 | Decision is stated in one or two unhedged sentences and matches one of the evaluated options | Pass | Decision is stated plainly and is option 2. | +| 5 | Consequences list both Positive and Negative outcomes | Pass | Consequences have Positive and Negative lists. | +| 6 | Quality-attribute impacts (performance, security, portability, etc.) are named where the decision affects them | Pass | Portability (Windows only, cross-compile limit), start-up time and size are named. | +| 7 | Affected Artifacts are listed as links, and each is also in CrossReference | Pass | Affected Artifacts BC-001, US-001 and DCD-001 are listed and in CrossReference. | +| 8 | Status changes are recorded as new Version History rows with a Change summary and Commit link; retained rows are never rewritten | Pass | First version; no status change yet. | +| 9 | A superseded or deprecated ADR names its successor, and the successor links back | N-A | Not superseded or deprecated. | +| 10 | Written in business or technical language of the domain, with no unexplained abbreviations | Pass | Written in plain technical English; `sys.frozen`, `sys.executable` are code names. | +| 11 | Status is one of `Proposed`, `Accepted`, `Rejected`, `Deprecated` or `Superseded by ADR-NNNN`, and every Version History row uses only these | Pass | Status `Proposed` before this review; uses an allowed value. | + +## Overall Verdict + +Go — every Mandatory criterion passes. Reviewed by AI as stand-in for S01; not independent of the author. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| none | - | - | + +--- + +[ADR-0004]: ../../../docs/adr/adr-0004-pyinstaller-executable.md +[QC-ADR-001]: ../../../framework/qc/artifacts/qc-adr.md diff --git a/docs/sqa/reviews/rc-047-mil-009.md b/docs/sqa/reviews/rc-047-mil-009.md new file mode 100644 index 0000000..9be3697 --- /dev/null +++ b/docs/sqa/reviews/rc-047-mil-009.md @@ -0,0 +1,65 @@ +# RC-047: Review of MIL-009 + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-047 | +| CrossReference | [MIL-009], [QC-MIL-001], [QC-LANG-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-009] +- Checklist used: [QC-MIL-001], and [QC-LANG-001] (language and domain) +- Scope: full review +- Language and domain: en / it +- Language reviewer: none (the stand-in for S01 reads the language and knows the domain) +- 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 | A concrete Deliverable section names the output evaluated at the gate. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | The Go / No-Go table has numbered criteria, each with an observable Go and No-Go. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names the milestone or documents it needs. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability table maps to Business Case objectives and the user story. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership table names S01 as owner and approving reviewer. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | Target Date lies inside the 2026-10-14 to 2026-10-21 window of the Business Case. | + +## 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 of MIL-009 has `Language | en` and `Domain | it`; neither is a placeholder. | +| 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 and `it` is a value of the registry's domain list. | +| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English; Malay and Danish words and file names appear only as quoted data. | +| 4 | The register matches the one the registry gives for the artifact type | Pass | The registry gives `IT Executive English` for this type; the text is written for that reader. | +| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | The PO terms of DICT-001 (flash card, word list, words to learn, study session) are used and no synonym replaces them. | +| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. | +| 7 | No translated twin (`..md`) exists beside the document | Pass | No translated twin exists beside the document (checked in `docs/`). | +| 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 change of language or domain 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 | The reviewer is the stand-in for S01, the Product Owner, who reads English and knows the IT domain; no second language reviewer is needed (review-checklist-process step 2). Open to challenge by S01 in the end-of-run summary. | +| 10 | Abbreviations are spelled out on first use, in the stated language | Fail | CSV, MVVM, UI, PO and similar abbreviations are not all spelled out at first use; Optional, deferred. | + +## Overall Verdict + +Go — every Mandatory criterion passes; the failed Optional criteria are deferred with an action item. Reviewed by AI as stand-in for S01; not independent of the author. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| Criterion LANG 10 (Optional) failed: Abbreviations are spelled out on first use, in the stated language; fix or accept the deferral | S01 | 2026-10-21 | + +--- + +[MIL-009]: ../../../docs/milestones/mil-009-executable.md +[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md +[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md diff --git a/docs/sqa/traceability-matrix.md b/docs/sqa/traceability-matrix.md index 31fea2b..5016164 100644 --- a/docs/sqa/traceability-matrix.md +++ b/docs/sqa/traceability-matrix.md @@ -10,7 +10,8 @@ | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | -| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added MIL-008 and the review records of the level choice (no checklist exists for this type) | [0b983b7] | +| 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added MIL-008 and the review records of the level choice (no checklist exists for this type) | [0b983b7] | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added the rows and review records of the executable request (no checklist exists for this type) | pending | --- @@ -24,17 +25,17 @@ updated whenever an artifact instance is created or reviewed. | Artifact Instance | Type | Language | Domain | Upstream (Backward Link) | Downstream (Forward Link) | Last Reviewed (RC-ID) | | --- | --- | --- | --- | --- | --- | --- | -| BC-001 | Business Case | en | it | - | SA-001, PP-001 | [RC-030] | +| BC-001 | Business Case | en | it | - | SA-001, PP-001 | [RC-042] | | SA-001 | Stakeholder Analysis | en | it | BC-001 | PP-001, DICT-001 | [RC-002] | -| PP-001 | Project Plan | en | it | BC-001, SA-001 | MIL-001 to MIL-008 | [RC-032] | +| PP-001 | Project Plan | en | it | BC-001, SA-001 | MIL-001 to MIL-008 | [RC-044] | | UCD-001 | Use Case Diagram | en | it | SA-001, BC-001 | US-001, UC-001 | [RC-004] | -| US-001 | User Story | en | it | UCD-001, BC-001 | MIL-002 to MIL-006, MIL-008 | [RC-031] | +| US-001 | User Story | en | it | UCD-001, BC-001 | MIL-002 to MIL-006, MIL-008 | [RC-043] | | UC-001 | Use Case | en | it | UCD-001, US-001 | DM-001, SSD-001 | [RC-033] | | DM-001 | Domain Model | en | it | UC-001 | SSD-001, DICT-001, DCD-001 | [RC-034] | | SSD-001 | System Sequence Diagram | en | it | UC-001, DM-001 | DCD-001 | [RC-036] | | OC-001 | Operation Contract | - | - | SSD-001, DM-001 | SD-001 | [RC-037] | | SD-001 | Sequence Diagram | - | - | OC-001 | DCD-001 | [RC-038] | -| DCD-001 | Design Class Diagram | - | - | DM-001, SD-001, DICT-001 | src/flash_card | [RC-039] | +| DCD-001 | Design Class Diagram | - | - | DM-001, SD-001, DICT-001 | src/flash_card | [RC-045] | | DICT-001 | Domain Dictionary | en | it | BC-001, SA-001, DM-001 | DCD-001 | [RC-035] | | ADR-0001 | Architecture Decision Record | - | - | BC-001 | MIL-001, MIL-003, MIL-006 | [RC-013] | | ADR-0002 | Architecture Decision Record | - | - | BC-001 | DCD-001 | [RC-014] | @@ -47,6 +48,8 @@ updated whenever an artifact instance is created or reviewed. | MIL-006 | Milestone / Gateway | en | it | BC-001, PP-001 | tasks of MIL-006 | [RC-021] | | MIL-007 | Milestone / Gateway | en | it | BC-001, PP-001 | tasks of MIL-007 | [RC-022] | | MIL-008 | Milestone / Gateway | en | it | BC-001, PP-001 | tasks of MIL-008 | [RC-040] | +| MIL-009 | Milestone / Gateway | en | it | BC-001 | - | [RC-047] | +| ADR-0004 | Architecture Decision Record | - | - | BC-001 | - | [RC-046] | | PY-MIL-001 | Python Source Code | - | - | DCD-001, ADR-0002 | - | [RC-023] | | PY-MIL-002 | Python Source Code | - | - | DCD-001, ADR-0002 | - | [RC-024] | | PY-MIL-003 | Python Source Code | - | - | DCD-001, ADR-0002 | - | [RC-025] | @@ -138,3 +141,11 @@ updated whenever an artifact instance is created or reviewed. [0b983b7]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/0b983b7fdadf6958717c1d0227d0f2ebe037f7b1 [RC-041]: ./reviews/rc-041-py-mil-008.md [PY-MIL-008]: ../../src/flash_card +[RC-042]: ./reviews/rc-042-business-case-exe.md +[RC-043]: ./reviews/rc-043-user-stories-exe.md +[RC-044]: ./reviews/rc-044-project-plan-exe.md +[RC-045]: ./reviews/rc-045-design-class-diagram-exe.md +[RC-046]: ./reviews/rc-046-adr-0004.md +[RC-047]: ./reviews/rc-047-mil-009.md +[MIL-009]: ../milestones/mil-009-executable.md +[ADR-0004]: ../adr/adr-0004-pyinstaller-executable.md diff --git a/docs/user-stories.md b/docs/user-stories.md index 4df7f4a..e045a00 100644 --- a/docs/user-stories.md +++ b/docs/user-stories.md @@ -4,7 +4,7 @@ | Key | Value | | --- | --- | | ID | US-001 | -| CrossReference | [UCD-001], [BC-001], [UC-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-008] | +| CrossReference | [UCD-001], [BC-001], [UC-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-008], [MIL-009] | | Language | en | | Domain | it | @@ -12,13 +12,14 @@ | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | -| 2026-10-14 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added US-001.06 Choose my level | [0b983b7] | +| 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added US-001.06 Choose my level | [0b983b7] | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added US-001.07 Start without Python | pending | --- ## Purpose and Scope -These stories cover the epic "Study Flash Cards": the four steps of the course assignment (the window, new cards, flipping the cards, saving progress), the spoken Malay word and the choice of level. Each story is delivered by one milestone. The wireframe the stories follow is in `docs/uc-001/wireframe.md`. +These stories cover the epic "Study Flash Cards": the four steps of the course assignment (the window, new cards, flipping the cards, saving progress), the spoken Malay word the choice of level and the start without an installed Python. Each story is delivered by one milestone. The wireframe the stories follow is in `docs/uc-001/wireframe.md`. ## Story List @@ -105,9 +106,24 @@ These stories cover the epic "Study Flash Cards": the four steps of the course a | --- | --- | --- | | [MIL-008], [UC-001] | fits one iteration | none | +### US-001.07 — Start without Python + +**As a** Learner, **I want** to start the program by opening one executable file, **so that** I can learn without installing Python or a virtual environment. + +**Acceptance Criteria** + +- Given the executable was built, when I open it on a Windows computer without Python, then the level screen appears and no console window opens. +- Given I mark a word as known in the executable, when I open it again, then the known word does not come up (my progress is kept in `data/words_to_learn.csv` next to the executable). +- Given a `data/ms-da.csv` exists next to the executable, when the program starts, then that word list is used; otherwise the word list inside the executable is used. +- Given the speech extra was included in the build and a network is available, when a card is shown, then the Malay word is spoken; without a network the program works silently. + +| Traces to | Size | INVEST exceptions | +| --- | --- | --- | +| [MIL-009], [UC-001] | fits one iteration | none | + ## INVEST Check -All six stories are Independent in delivery order (each builds on the one before but can be accepted alone), Negotiable in wording, Valuable to the Learner, Estimable, Small (one milestone each) and Testable (every criterion is Given/When/Then). Exception: US-001.02 to US-001.06 depend on the window of US-001.01, which is stated in their milestones' Dependencies. +All seven stories are Independent in delivery order (each builds on the one before but can be accepted alone), Negotiable in wording, Valuable to the Learner, Estimable, Small (one milestone each) and Testable (every criterion is Given/When/Then). Exception: US-001.02 to US-001.07 depend on the window of US-001.01, which is stated in their milestones' Dependencies. --- @@ -120,5 +136,6 @@ All six stories are Independent in delivery order (each builds on the one before [MIL-005]: ./milestones/mil-005-step4-save-progress.md [MIL-006]: ./milestones/mil-006-malay-speech.md [MIL-008]: ./milestones/mil-008-choose-level.md +[MIL-009]: ./milestones/mil-009-executable.md [c3fbcbc]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/c3fbcbcfaf799e0ae34aed7e14d3bc8a62f03db3 [0b983b7]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/0b983b7fdadf6958717c1d0227d0f2ebe037f7b1 -- 2.54.0 From d37f165c192fa53734df176ab45bfb0afcdfe392 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Thu, 15 Oct 2026 00:17:31 +0800 Subject: [PATCH 2/2] Resolve pending commit links of the MIL-009 plan --- docs/adr/adr-0004-pyinstaller-executable.md | 3 ++- docs/business-case.md | 3 ++- docs/dcd.md | 3 ++- docs/milestones/mil-009-executable.md | 3 ++- docs/project-plan.md | 3 ++- docs/sqa/reviews/rc-042-business-case-exe.md | 3 ++- docs/sqa/reviews/rc-043-user-stories-exe.md | 3 ++- docs/sqa/reviews/rc-044-project-plan-exe.md | 3 ++- docs/sqa/reviews/rc-045-design-class-diagram-exe.md | 3 ++- docs/sqa/reviews/rc-046-adr-0004.md | 3 ++- docs/sqa/reviews/rc-047-mil-009.md | 3 ++- docs/sqa/traceability-matrix.md | 3 ++- docs/user-stories.md | 3 ++- 13 files changed, 26 insertions(+), 13 deletions(-) diff --git a/docs/adr/adr-0004-pyinstaller-executable.md b/docs/adr/adr-0004-pyinstaller-executable.md index 1509ab4..90ae2b3 100644 --- a/docs/adr/adr-0004-pyinstaller-executable.md +++ b/docs/adr/adr-0004-pyinstaller-executable.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [768ca34] | Allowed Status values: `Proposed`, `Accepted`, `Rejected`, `Deprecated`, `Superseded by ADR-NNNN`. @@ -52,3 +52,4 @@ Build a one-file, windowed (no console) Windows executable with PyInstaller by ` [BC-001]: ../business-case.md [US-001]: ../user-stories.md [DCD-001]: ../dcd.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/business-case.md b/docs/business-case.md index 879a964..7b1c927 100644 --- a/docs/business-case.md +++ b/docs/business-case.md @@ -13,7 +13,7 @@ | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | In Scope: choice of level (new request of S01) | [0b983b7] | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Scope: executable built with PyInstaller (new request of S01) | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Scope: executable built with PyInstaller (new request of S01) | [768ca34] | --- @@ -152,3 +152,4 @@ Proceed — the scope is small, the risks are mitigated, and the result serves t [SA-001]: ./stakeholder-analysis.md [c3fbcbc]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/c3fbcbcfaf799e0ae34aed7e14d3bc8a62f03db3 [0b983b7]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/0b983b7fdadf6958717c1d0227d0f2ebe037f7b1 +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/dcd.md b/docs/dcd.md index e430619..e9628c1 100644 --- a/docs/dcd.md +++ b/docs/dcd.md @@ -11,7 +11,7 @@ | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added Level, Deck.within, the level argument and the level screen | [0b983b7] | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Scope note: runtime path rules and the executable build are packaging support, not design classes | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Scope note: runtime path rules and the executable build are packaging support, not design classes | [768ca34] | --- @@ -227,3 +227,4 @@ Imports point inward: `domain` imports nothing from the other packages; `applica [ADR-0004]: ./adr/adr-0004-pyinstaller-executable.md [c3fbcbc]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/c3fbcbcfaf799e0ae34aed7e14d3bc8a62f03db3 [0b983b7]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/0b983b7fdadf6958717c1d0227d0f2ebe037f7b1 +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/milestones/mil-009-executable.md b/docs/milestones/mil-009-executable.md index 3d8e44a..4c563fc 100644 --- a/docs/milestones/mil-009-executable.md +++ b/docs/milestones/mil-009-executable.md @@ -11,7 +11,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [768ca34] | --- @@ -80,3 +80,4 @@ Decide whether the Learner can start the program from one executable file withou [US-001]: ../user-stories.md [UC-001]: ../uc-001/uc.md [DCD-001]: ../dcd.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/project-plan.md b/docs/project-plan.md index 603fa33..a5cc368 100644 --- a/docs/project-plan.md +++ b/docs/project-plan.md @@ -13,7 +13,7 @@ | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added gateway MIL-008 Choose level (new request of S01) | [0b983b7] | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added gateway MIL-009 Executable with PyInstaller (new request of S01) | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added gateway MIL-009 Executable with PyInstaller (new request of S01) | [768ca34] | --- @@ -126,3 +126,4 @@ A No-Go on a phase moves every later date by the days the rework takes; MIL-008 [MS-006]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/milestone/170 [MS-007]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/milestone/171 [0b983b7]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/0b983b7fdadf6958717c1d0227d0f2ebe037f7b1 +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/sqa/reviews/rc-042-business-case-exe.md b/docs/sqa/reviews/rc-042-business-case-exe.md index 314baa3..1ce78ab 100644 --- a/docs/sqa/reviews/rc-042-business-case-exe.md +++ b/docs/sqa/reviews/rc-042-business-case-exe.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [768ca34] | --- @@ -67,3 +67,4 @@ Full review (not a delta) after the change for MIL-009 (executable). [BC-001]: ../../../docs/business-case.md [QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/sqa/reviews/rc-043-user-stories-exe.md b/docs/sqa/reviews/rc-043-user-stories-exe.md index 336cead..140053b 100644 --- a/docs/sqa/reviews/rc-043-user-stories-exe.md +++ b/docs/sqa/reviews/rc-043-user-stories-exe.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [768ca34] | --- @@ -67,3 +67,4 @@ Full review (not a delta) after the change for MIL-009 (executable). [US-001]: ../../../docs/user-stories.md [QC-US-001]: ../../../framework/qc/artifacts/qc-user-story.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/sqa/reviews/rc-044-project-plan-exe.md b/docs/sqa/reviews/rc-044-project-plan-exe.md index 33b7a50..ea4b044 100644 --- a/docs/sqa/reviews/rc-044-project-plan-exe.md +++ b/docs/sqa/reviews/rc-044-project-plan-exe.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [768ca34] | --- @@ -51,3 +51,4 @@ Go — no checklist exists for the Project Plan type; the plan now schedules MIL [PP-001]: ../../../docs/project-plan.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/sqa/reviews/rc-045-design-class-diagram-exe.md b/docs/sqa/reviews/rc-045-design-class-diagram-exe.md index d401620..d0fb706 100644 --- a/docs/sqa/reviews/rc-045-design-class-diagram-exe.md +++ b/docs/sqa/reviews/rc-045-design-class-diagram-exe.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [768ca34] | --- @@ -52,3 +52,4 @@ Full review (not a delta) after the change for MIL-009 (executable). [DCD-001]: ../../../docs/dcd.md [QC-DCD-001]: ../../../framework/qc/artifacts/qc-dcd.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/sqa/reviews/rc-046-adr-0004.md b/docs/sqa/reviews/rc-046-adr-0004.md index d4c390f..e286193 100644 --- a/docs/sqa/reviews/rc-046-adr-0004.md +++ b/docs/sqa/reviews/rc-046-adr-0004.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [768ca34] | --- @@ -52,3 +52,4 @@ Go — every Mandatory criterion passes. Reviewed by AI as stand-in for S01; not [ADR-0004]: ../../../docs/adr/adr-0004-pyinstaller-executable.md [QC-ADR-001]: ../../../framework/qc/artifacts/qc-adr.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/sqa/reviews/rc-047-mil-009.md b/docs/sqa/reviews/rc-047-mil-009.md index 9be3697..9a0c5b5 100644 --- a/docs/sqa/reviews/rc-047-mil-009.md +++ b/docs/sqa/reviews/rc-047-mil-009.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [768ca34] | --- @@ -63,3 +63,4 @@ Go — every Mandatory criterion passes; the failed Optional criteria are deferr [MIL-009]: ../../../docs/milestones/mil-009-executable.md [QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md [QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/sqa/traceability-matrix.md b/docs/sqa/traceability-matrix.md index 5016164..1b0c2d1 100644 --- a/docs/sqa/traceability-matrix.md +++ b/docs/sqa/traceability-matrix.md @@ -11,7 +11,7 @@ | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added MIL-008 and the review records of the level choice (no checklist exists for this type) | [0b983b7] | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added the rows and review records of the executable request (no checklist exists for this type) | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added the rows and review records of the executable request (no checklist exists for this type) | [768ca34] | --- @@ -149,3 +149,4 @@ updated whenever an artifact instance is created or reviewed. [RC-047]: ./reviews/rc-047-mil-009.md [MIL-009]: ../milestones/mil-009-executable.md [ADR-0004]: ../adr/adr-0004-pyinstaller-executable.md +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 diff --git a/docs/user-stories.md b/docs/user-stories.md index e045a00..393ca62 100644 --- a/docs/user-stories.md +++ b/docs/user-stories.md @@ -13,7 +13,7 @@ | --- | --- | --- | --- | --- | --- | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [c3fbcbc] | | 2026-10-14 | Deprecated | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added US-001.06 Choose my level | [0b983b7] | -| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added US-001.07 Start without Python | pending | +| 2026-10-15 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Added US-001.07 Start without Python | [768ca34] | --- @@ -139,3 +139,4 @@ All seven stories are Independent in delivery order (each builds on the one befo [MIL-009]: ./milestones/mil-009-executable.md [c3fbcbc]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/c3fbcbcfaf799e0ae34aed7e14d3bc8a62f03db3 [0b983b7]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/0b983b7fdadf6958717c1d0227d0f2ebe037f7b1 +[768ca34]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/031-flash-card/commit/768ca344c95d4f21e565e37ac96661c2f8dc8f54 -- 2.54.0