Plan the Hirst painting project and review the plan documents

Add the Business Case (BC-001), Stakeholder Analysis (SA-001), Project Plan
(PP-001) and two milestones: MIL-001 Colour Palette and MIL-002 Spot Painting.
Record their reviews as RC-001 to RC-004 (all Go, self-review accepted by S01).

The PO language is English and the domain is IT. The milestones and their 13
tasks are synced as Gitea milestones 68 and 69 and issues #1 to #13.
This commit is contained in:
2026-10-07 23:49:16 +08:00
parent 7c0ed0dcc5
commit b823d1f405
10 changed files with 866 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
# MIL-001: Colour Palette
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-001 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | pending |
---
## Purpose
This gate decides whether the colour palette is usable, so that the painting
phase can build on it. The palette must come from the reference image through
`colorgram`, must contain no white shades, and the toolchain it depends on
(`colorgram` and the `turtle` graphical toolkit) must work on the developer
machine.
## Deliverable
A palette function in the program's source file under `src/` that reads the
reference image with `colorgram`, drops white shades and returns the remaining
colours as RGB tuples, together with the tests that check it and the printed
palette of the real image.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `import colorgram` and `import turtle` succeed and a `turtle` window opens on the developer machine | Both imports succeed and the window opens | An import fails or no window opens |
| 2 | The palette of the reference image has at least 2 colours (SC3) | 2 or more colours printed | 0 or 1 colour |
| 3 | The palette has no colour with red, green and blue all at 240 or above (SC3) | 0 such colours in the printed palette | 1 or more such colours |
| 4 | The tests of the white-shade filter and of the palette pass | All tests pass | Any test fails |
| 5 | The phase code has a review record against `qc-programming-python` with verdict `Go` (SC7) | `RC-*` verdict `Go` | `Go-with-conditions` or `No-Go`, or no record |
## Dependencies
| Depends on | Reason |
| --- | --- |
| None | The baseline documents are `Accepted`; this is the first gateway |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| O2: palette from a reference image with `colorgram`, without white shades | [BC-001]; criteria 1 to 4 and SC3 |
| O5: delivery through the framework, code reviewed against `qc-programming-python` | [BC-001]; criterion 5 and SC7 |
No use case or user story applies: every task is a technical step, so the
Tasks column "Needs its own Use Case/User Story?" says `No` throughout.
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-10-09 — inside the one-week limit of [BC-001] (2026-10-07 to 2026-10-14), and leaves five days for the painting phase.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Check the toolchain | Confirm that Python 3 with Tk (the graphical toolkit behind `turtle`) runs `import turtle` and opens a window, install `colorgram` with `pip`, and record the versions. The Business Case lists a missing toolchain as a risk, so this comes before any other work depends on it. | No | |
| 2 | Write the white-shade filter | Write a function that drops every colour whose red, green and blue are all at or above 240; the threshold is a named constant (SC3 of the Business Case). It needs no image, so it can be written and tested first. | No | |
| 3 | Add tests for the white-shade filter | Add tests under `tests/` that feed the filter synthetic colours (pure white, near-white, an ordinary colour) and check which are kept. They pin down the threshold before the real image is involved. | No | |
| 4 | Get the reference image into the project | S01 supplies the reference image the lecture uses; store it in the repository and note its path. Without it the palette cannot be extracted, and the location is an open issue of the Project Plan. | No | |
| 5 | Write the palette extraction and check the palette | Write a function that reads the image with `colorgram`, turns each extracted colour into a red-green-blue (RGB) tuple, applies the filter and returns the list (O2). Print the palette of the real image and check it against SC3: at least 2 colours and no white shade. The painting phase imports this function. | No | |
| 6 | Review the phase code against qc-programming-python | Check the code of this phase against `framework/qc/qc-programming-python.md` and record the result as an `RC-*`; a `Go` verdict is Go criterion 5 (SC7). | No | |
---
[BC-001]: ../business-case.md
+86
View File
@@ -0,0 +1,86 @@
# MIL-002: Spot Painting
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-002 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | pending |
---
## Purpose
This gate decides whether the program draws the finished painting as the
Business Case requires: a 10 by 10 grid of 100 dots of size 20 spaced 50 units
apart, each coloured at random from the palette, left on screen until a click,
with the turtle hidden and no trail between dots, and drawn in 30 seconds or
less.
## Deliverable
The runnable program in the single source file under `src/`, using the palette
function of the colour palette phase, together with its tests and one timed run
that shows the finished painting.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | The painting has exactly 100 dots in 10 rows of 10 (SC1) | 100 dots counted in the tests and in the window | Any other count, or a missing last dot or row |
| 2 | Dot size is 20 and neighbouring centres are 50 units apart in rows and in columns (SC2) | Values match in the code, the tests and the window | Any other size or spacing |
| 3 | Every dot colour is a member of the palette (SC4) | The test passes for all 100 dots | A colour outside the palette |
| 4 | The turtle is hidden at the end, no line joins the dots, and the window stays open until a click (SC5) | All three seen in one full run | A visible turtle, a trail, or a window that closes by itself |
| 5 | One full run draws the painting in 30 seconds or less (SC6) | 30 seconds or less by stopwatch | More than 30 seconds |
| 6 | The phase code has a review record against `qc-programming-python` with verdict `Go` (SC7) | `RC-*` verdict `Go` | `Go-with-conditions` or `No-Go`, or no record |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-001 | The painting draws with the palette function that phase delivers, and starts only after it has a `Go` decision |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| O1: 10 by 10 grid of dots, size 20, spacing 50 | [BC-001]; criteria 1 and 2, SC1 and SC2 |
| O3: random colour from the palette for every dot | [BC-001]; criterion 3, SC4 |
| O4: painting kept on screen and presented cleanly | [BC-001]; criteria 4 and 5, SC5 and SC6 |
| O5: delivery through the framework, code reviewed against `qc-programming-python` | [BC-001]; criterion 6, SC7 |
No use case or user story applies: every task is a technical step, so the
Tasks column "Needs its own Use Case/User Story?" says `No` throughout.
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-10-14 — the last day of the one-week limit of [BC-001] (2026-10-07 to 2026-10-14).
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Set up the screen and the turtle | Create the screen and the turtle, switch to the 255-level red-green-blue (RGB) colour mode so the palette tuples work, hide the turtle and lift the pen. This removes the cursor and the trail from the result (O4, SC5). | No | |
| 2 | Compute the dot positions | Write a function that returns the 100 dot centres for 10 rows of 10 with 50 units between neighbours, starting from a corner chosen so the whole grid fits in the window. It draws nothing, so tests can check the count and the spacing without a window (O1, SC1, SC2). | No | |
| 3 | Draw the dots with random palette colours | Move to each position with the pen up and draw a dot of size 20 coloured by `random.choice` over the palette from the colour palette phase (O1, O3). The last dot of every row and the last row must be drawn, which the lecture names as a common mistake. | No | |
| 4 | Keep the window open until a click | End the program with `exitonclick` so the finished painting stays on screen until the user clicks (O4, SC5). | No | |
| 5 | Speed up the drawing | Set the turtle speed, or turn off screen updates until the end, so the full painting is drawn in 30 seconds or less, and time one full run (SC6). | No | |
| 6 | Add tests for the geometry and the colours | Add tests under `tests/` that check 100 positions in 10 rows of 10, a spacing of 50 in rows and in columns, and that every colour picked is in the palette (SC1, SC2, SC4). | No | |
| 7 | Review the phase code and check the painting | Check the code of this phase against `framework/qc/qc-programming-python.md` and record the result as an `RC-*`; then run the program once and check criteria 1 to 5 against it (SC7). | No | |
---
[BC-001]: ../business-case.md