MIL-002 Project scaffold and tooling
Metadata
| Key |
Value |
| ID |
MIL-002 |
| CrossReference |
BC-001 |
| Language |
en |
| Domain |
it |
Version History
| Date |
Status |
Author |
Reviewer |
Change |
Commit |
| 2026-10-28 |
Accepted |
Jens Tirsvad Nielsen |
AI as stand-in for S02 |
Initial version |
cadc5ef |
Purpose
Decide whether the Python project skeleton, tooling and container set-up are ready for feature work. The gate checks that a clean clone can install, test and run a smoke test.
Deliverable
pyproject.toml, src/ and tests/ layout, constants.py, Python .gitignore, Doxyfile, README from the framework template with .venv instructions, a Dockerfile for headless browser runs, and a passing smoke test.
Go / No-Go Criteria
| # |
Criterion (objectively checkable) |
Go |
No-Go |
| 1 |
python -m venv .venv, python -m pip install --upgrade pip and python -m pip install -e .[dev] succeed on a clean clone |
All commands exit 0 |
Any command fails |
| 2 |
python -m pytest passes |
0 failures |
A test fails |
| 3 |
pyproject.toml requires Python 3.13 or newer and lists Selenium as the only runtime dependency |
Both true |
Either false |
| 4 |
bash framework/scripts/check-readme.sh reports no finding |
Exit code 0 |
Exit code 1 |
| 5 |
The qc-programming-python.md review of the new code is Go |
RC-* is Go |
No-Go |
Dependencies
| Depends on |
Reason |
| MIL-001 |
Baseline must be accepted before code |
Traceability
| Business Case objective / KPI / user story |
Reference |
| O5, success criteria 4, 5 and 8 |
BC-001 |
| CN-004, CN-005, CN-008 |
SA-001 |
Ownership
| Role |
Stakeholder ID (SA) |
| Owner |
S01 |
| Approving reviewer |
S02 (AI as stand-in, autonomous mode, not independent) |
Target Date
2026-10-29 — inside the planned window 2026-10-28 to 2026-11-04 of PP-001; the Business Case sets no deadline.
Tasks
| # |
Task |
Summary |
Needs its own Use Case/User Story? |
Reference |
| 1 |
Create pyproject.toml |
Configure the project for Python 3.13 or newer with the src layout, Selenium as the only runtime dependency, and pytest (with coverage) as a development extra. This keeps S03's wish for no extra runtime dependencies. |
No |
O5 |
| 2 |
Create src and tests layout with constants.py |
Create the package under src/, a constants.py for the URL, selectors, timings and messages, and tests/ with a first smoke test. Constants live only in constants.py. |
No |
O5 |
| 3 |
Add Python .gitignore |
Add a standard Python .gitignore that also ignores .venv, .env, caches, coverage output, Doxygen output and browser run artefacts. |
No |
|
| 4 |
Add Doxyfile and Doxygen comment style |
Add a Doxyfile for src/ and write all source comments in Doxygen style (@brief, @param, @return). |
No |
|
| 5 |
Create README from the framework template |
Create README.md from framework/templates/README-template.md with overview, requirements, .venv creation, python -m pip install --upgrade pip, install, run and test commands. |
No |
O5 |
| 6 |
Add Docker image for headless browser runs |
Add a Dockerfile and a helper that run the bot and take screenshots in a Linux container with headless Chromium, so no GUI test uses the host desktop (framework/process/gui-testing.md). |
No |
ADR-0003 |