Files
049-snack-and-lift/docs/milestones/mil-002-scaffold.md

3.5 KiB

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 50e8331

Purpose

Decide whether the Python project skeleton, the tooling and the container image are ready, so that the lecture steps can be built on them.

Deliverable

pyproject.toml, src/ and tests/ layout, constants.py, .gitignore, Doxyfile, README from the framework template with .venv instructions, and a Docker image with headless Chrome for browser runs.

Go / No-Go Criteria

# Criterion (objectively checkable) Go No-Go
1 pip install -e .[dev] in a fresh .venv and pytest pass 0 failures An install or test failure
2 pyproject.toml requires Python 3.13 or newer and lists Selenium as the only runtime dependency Both true Either false
3 doxygen Doxyfile runs without warnings on the skeleton 0 warnings Any warning
4 bash framework/scripts/check-readme.sh reports no finding Exit code 0 Exit code 1
5 The container image builds and starts headless Chrome A Selenium smoke run reads a page title Build or run fails

Dependencies

Depends on Reason
MIL-001 Needs the accepted baseline

Traceability

Business Case objective / KPI / user story Reference
O7, success criteria 5, 6, 9 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-06 of PP-001; the Business Case sets no deadline.

Tasks

# Task Summary Needs its own Use Case/User Story? Reference
1 Create pyproject.toml and the package layout Create pyproject.toml (Python 3.13 or newer, Selenium runtime, pytest and pytest-cov in a dev extra, a console script) and the src/snack_and_lift and tests/ folders with a first passing test. No O7
2 Add constants.py Create constants.py holding the site URL, element IDs and selectors, the Tuesday and Thursday 6pm rule, the retry count and the Chrome profile folder name, so no magic value is in the logic. No O7
3 Add .gitignore, Doxyfile and .dockerignore Add a Python .gitignore (including chrome_profile/, .venv/ and .env), a Doxyfile for the Doxygen comments and a .dockerignore. No O7
4 Write the README with .venv instructions Write README.md from the framework template: overview, requirements, creating and using a local .venv, python -m pip install --upgrade pip, run and test commands, and the container run. No O7
5 Build the browser container image Create a Dockerfile with headless Chrome and the project, so browser runs and screenshots never use the host desktop (framework/process/gui-testing.md). Prove it with a smoke run that reads the site's page title. No O7