Plan the visible colours change (O6, SC8, MIL-003) #19

Merged
Tirsvad merged 3 commits from plan-visible-colours into main 2026-10-07 18:46:31 +02:00
6 changed files with 264 additions and 17 deletions
+2 -2
View File
@@ -14,8 +14,8 @@ 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 | 003 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 007 |
| MIL | Milestone / Gateway | docs/milestones/*.md | 004 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 009 |
## Languages
+14 -3
View File
@@ -11,7 +11,8 @@
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [b823d1f] |
| 2026-10-07 | Deprecated | Jens Tirsvad Nielsen | S01 | Initial version | [b823d1f] |
| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S01 | Added objective O6 and criterion SC8 (every dot clearly visible), the contrast standard, and a risk | [701feb1] |
---
@@ -35,6 +36,9 @@ proceed.
- **Quality standards:** every quality criterion is tagged with an ISO/IEC
25010:2023 characteristic. The code is reviewed against `qc-programming-python`
before the pull request.
- **Contrast:** the contrast ratio of the Web Content Accessibility Guidelines
(WCAG) 2.x, computed from relative luminance: 1.0 for a colour identical to
white and 21.0 for black.
- **Source requirements:** the course lecture "The Hirst Painting Project
Part 2 - Drawing the Dots" (a written summary of the lecture is the only
source supplied; the reference image is not).
@@ -46,6 +50,8 @@ Without one, the loops, the `turtle` positioning logic and the colour handling
taught in the lecture stay theory. The lecture itself names the usual
failures: a visible trail between dots, a missing last dot, white shades in
the palette that make dots invisible, and a slow, visibly drawing turtle.
Drawing the first painting from a photograph showed one more: faint colours
that pass the white-shade rule but still hardly show on the white background.
## Business Opportunity
@@ -63,6 +69,7 @@ so the effort the framework adds can be judged against the size of the work.
| O3 | Colour every dot by a random choice from that palette. |
| O4 | Keep the finished painting on screen until the user clicks, and present it cleanly: turtle hidden, no trail between dots. |
| O5 | Deliver the work through the framework: plan and issues first, then code reviewed against `qc-programming-python` (`RC-*` verdict `Go`) before the pull request. |
| O6 | Keep every dot clearly visible on the white background: drop palette colours whose contrast with white is below 2.0. |
## Scope
@@ -70,6 +77,7 @@ so the effort the framework adds can be judged against the size of the work.
- One Python program using the standard `turtle` module, the `random` module and the `colorgram` library.
- Extraction of the palette from one reference image, with white shades removed.
- Removal of faint colours from the palette: colours whose contrast with white is below 2.0.
- Drawing of the 10 by 10 dot grid: dot size, spacing, row change and heading handling.
- Screen handling: `exitonclick`, hiding the turtle, pen up between dots, drawing speed.
- The framework documents the plan-first workflow requires for this work (Business Case, Stakeholder Analysis, Project Plan, milestones), and the review records for them and for the code.
@@ -86,7 +94,7 @@ so the effort the framework adds can be judged against the size of the work.
### Tangible Benefits
- A working program that produces the painting described in O1 to O4.
- A working program that produces the painting described in O1 to O4, with every dot clearly visible (O6).
- A reviewed codebase with a recorded review (`RC-*`) against the Python checklist.
- A traceable record from objective to milestone to issue to code.
@@ -112,6 +120,7 @@ framework that the repository is built on.
| SC5 | Clean result (O4) | Turtle hidden at the end; no line drawn between dots; window stays open until a click | Visual check of one full run |
| SC6 | Run time (O4) | The full painting is drawn in 30 seconds or less | Timed run on the developer machine (value confirmed by S01) |
| SC7 | Review gate (O5) | `RC-*` for the code has verdict `Go`; the pull request closes every issue it completes | Review record and pull request description |
| SC8 | Visible colours (O6) | 0 palette colours with a contrast ratio against white below 2.0; SC3 still holds for the final palette (at least 2 colours) | Print of the extracted palette with the contrast of every colour, checked against the limit (value chosen by S01) |
## Risks
@@ -121,6 +130,7 @@ framework that the repository is built on.
| `colorgram` or the `turtle` graphical toolkit (Tk) cannot be installed or does not run on the developer machine | The program cannot be run or checked | Check both in the first task of the palette phase, before any other work depends on them |
| White or near-white shades stay in the palette | Dots are invisible on the white background, so SC1 looks failed | SC3 sets an explicit threshold and is checked on the printed palette |
| Off-by-one errors: last dot of a row or the last row missing, or a trail drawn | SC1 or SC5 fails | SC1 counts the dots and SC5 checks for a trail; both are verified in the code review |
| The contrast cut-off removes too many colours | The painting looks dull | The limit of 2.0 sits in a gap in the palette of the reference image: 8 of its 30 colours fall below it, and the palest colour kept has a contrast of 2.56, so 22 remain. SC3 still requires at least 2, and S01 judges the picture in the timed run |
| Framework process outweighs the size of the work | Schedule slips and the exercise stops being a small one | Keep to two phases and plain tasks; no use cases or design artifacts (see Out of Scope) |
| The only named reviewer is also the author | Reviews are not independent, as the review process requires | S01 accepted a documented self-review on 2026-10-07; each review record states it |
@@ -158,7 +168,7 @@ Roles, power and interest are in [SA-001]; they are not repeated here.
| Stakeholder ID (SA) | Interest in this project |
| --- | --- |
| S01 | Owner of all objectives (O1 to O5); accepts the work and answers the open questions above |
| S01 | Owner of all objectives (O1 to O6); accepts the work and answers the open questions above |
## Recommendation
@@ -168,3 +178,4 @@ Proceed — the work is small, the cost is only S01's time, and every objective
[SA-001]: ./stakeholder-analysis.md
[b823d1f]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/commit/b823d1f405ebac6b0198605edd9d802518529725
[701feb1]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/commit/701feb1e523b1d61fb93227a7f0e2feaac18bb4d
@@ -0,0 +1,86 @@
# MIL-003: Visible Colours
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-003 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version | [188b2e9] |
---
## Purpose
This gate decides whether the palette keeps only colours that stand out from
the white background, so that every dot of the painting is clearly visible
(objective O6 of the Business Case). The palette must contain no colour whose
contrast with white is below 2.0, and the painting must still meet every
earlier criterion.
## Deliverable
A contrast measure and a faint-colour filter in the program's source file under
`src/`, applied when the palette is extracted, together with their tests and
one real run that shows the painting drawn from the filtered palette.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | The contrast measure gives 1.0 for white and 21.0 for black, and the filter keeps a colour only when its contrast with white is 2.0 or more (SC8) | The tests of the measure and the filter pass | Any of those tests fails |
| 2 | The palette of the reference image has no colour with a contrast below 2.0, still has at least 2 colours, and still has no white shade (SC8, SC3) | The printed palette with the contrast of every colour meets all three | A colour below 2.0, fewer than 2 colours, or a white shade |
| 3 | The earlier behaviour is unchanged: all tests pass, and `ruff` and `mypy --strict` are clean | All tests pass and both tools report no problem | A failing test or a reported problem |
| 4 | A real run still draws the painting in 30 seconds or less, with 100 dots, no trail and no turtle, and the window stays open until a click (SC1, SC5, SC6) | A timed run and a captured picture show all of it, and every dot is clearly visible | Any of them 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 |
| --- | --- |
| MIL-001 | The filter is applied inside the palette function that phase delivered, beside its white-shade filter |
| MIL-002 | The painting is drawn again with the filtered palette, and its tests must keep passing |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| O6: every dot clearly visible, contrast with white of 2.0 or more | [BC-001]; criteria 1, 2 and 4, SC8 |
| O2: palette without white shades | [BC-001]; criterion 2, SC3 (still holds) |
| O1, O4: the painting and its clean presentation | [BC-001]; criteria 3 and 4, SC1, SC5 and SC6 |
| O5: delivery through the framework, code reviewed against `qc-programming-python` | [BC-001]; criterion 5, 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-10 — inside the one-week limit of [BC-001] (2026-10-07 to 2026-10-14), and leaves four days of slack.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Add the contrast measure | Add a function that returns the contrast ratio of a colour against white, as the Web Content Accessibility Guidelines (WCAG) 2.x define it from relative luminance: 1.0 for white and 21.0 for black. It is the measure that objective O6 and criterion SC8 of the Business Case rest on. | No | |
| 2 | Add the faint-colour filter | Add a named constant for the limit, 2.0, and a function that drops every colour whose contrast with white is below it, keeping the order of the rest. It sits beside the white-shade filter, which stays as it is, so SC3 keeps its own check. | No | |
| 3 | Add tests for the measure and the filter | Add tests under `tests/` with known values (white 1.0, black 21.0, a mid grey) and with the boundary: a colour just below 2.0 is dropped and one just above is kept. They pin the limit before the real image is involved, as the white-shade tests do for 240. | No | |
| 4 | Apply the filter when the palette is extracted | Make `extract_palette` apply the faint-colour filter after the white-shade filter, update its tests, and add one that checks the palette of the reference image: no colour below 2.0 and at least 2 colours. Print the palette with each contrast; the measurement on 2026-10-08 predicts 22 colours. | No | |
| 5 | Check the painting again with a real run | Run `main` on a real window, time it and capture the picture: 100 dots in 10 rows of 10, no trail, no turtle cursor, the window open until a click, and every dot clearly visible on the white background. This rechecks SC1 to SC8 together. | 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
[188b2e9]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/commit/188b2e97000d761802d4384c160598f785860a28
+23 -12
View File
@@ -4,31 +4,32 @@
| Key | Value |
| --- | --- |
| ID | PP-001 |
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002] |
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-07 | Deprecated | Jens Tirsvad Nielsen | S01 | Initial version | [b823d1f] |
| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S01 | Recorded the Go decisions of MIL-001 and MIL-002<br>Closed the reference-image open issue | [a6b17d3] |
| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S01 | Recorded the Go decisions of MIL-001 and MIL-002<br>Closed the reference-image open issue | [a6b17d3] |
| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S01 | Added gateway MIL-003 Visible Colours: schedule, timeline, scope coverage, dependency and a plan risk | [188b2e9] |
---
## Purpose
This plan schedules the two phases of the Hirst painting project, the colour
palette and the spot painting, inside the one-week limit that [BC-001] sets
(2026-10-07 to 2026-10-14). Each phase is a gateway with its own milestone
document, and each gateway ends with a Go/No-Go decision by S01.
This plan schedules the three phases of the Hirst painting project, the colour
palette, the spot painting and the visible colours, inside the one-week limit
that [BC-001] sets (2026-10-07 to 2026-10-14). Each phase is a gateway with its
own milestone document, and each gateway ends with a Go/No-Go decision by S01.
## Planning Assumptions
- Week 1 starts 2026-10-07; the plan ends by 2026-10-14, per the Business Case assumption confirmed by S01.
- The baseline documents ([BC-001], [SA-001] and their review records) are finished on 2026-10-07, before the first phase starts.
- Phase length: two to five days, because the work is one small script. The palette phase is shorter because it is the smaller of the two.
- S01 owns both phases and takes both Go/No-Go decisions; S01 is the only stakeholder in [SA-001], so communication follows the review gates in that document.
- S01 owns every phase and takes every Go/No-Go decision; S01 is the only stakeholder in [SA-001], so communication follows the review gates in that document.
- [MIL-003] was added on 2026-10-08, after [MIL-001] and [MIL-002] had been decided Go, to meet objective O6 of [BC-001]; it runs from 2026-10-08 to 2026-10-10, inside the one-week limit.
- No user stories exist: the program has no user interaction beyond the exit click, so the Stories column is empty.
## Gateway Schedule
@@ -37,6 +38,7 @@ document, and each gateway ends with a Go/No-Go decision by S01.
| --- | --- | --- | --- | --- | --- | --- | --- |
| Colour palette | [MIL-001] | 2026-10-07 to 2026-10-09 | 2026-10-09 | S01 | none | Palette function that returns the reference image's colours without white shades | [MIL-001 milestone] |
| Spot painting | [MIL-002] | 2026-10-10 to 2026-10-14 | 2026-10-14 | S01 | none | Program that draws the 10 by 10 painting and meets SC1 to SC7 of [BC-001] | [MIL-002 milestone] |
| Visible colours | [MIL-003] | 2026-10-08 to 2026-10-10 | 2026-10-10 | S01 | none | Palette without faint colours: every colour has a contrast of 2.0 or more with white (O6, SC8 of [BC-001]) | |
```plantuml
@startgantt
@@ -45,6 +47,8 @@ Project starts 2026-10-07
[Colour palette Go/No-Go] happens 2026-10-09
[Spot painting] starts 2026-10-10 and ends 2026-10-14
[Spot painting Go/No-Go] happens 2026-10-14
[Visible colours] starts 2026-10-08 and ends 2026-10-10
[Visible colours Go/No-Go] happens 2026-10-10
@endgantt
```
@@ -54,20 +58,25 @@ Project starts 2026-10-07
| --- | --- |
| One Python program using `turtle`, `random` and `colorgram` | [MIL-001] (`colorgram` part), [MIL-002] (`turtle` and `random` part) |
| Palette extracted from one reference image, white shades removed | [MIL-001] |
| Removal of faint colours from the palette: contrast with white below 2.0 | [MIL-003] |
| Drawing the 10 by 10 dot grid: size, spacing, row change, heading | [MIL-002] |
| Screen handling: `exitonclick`, hidden turtle, pen up, drawing speed | [MIL-002] |
| Framework documents and review records for the plan-first workflow | Finished before the first gateway ([BC-001], [SA-001], this plan, [MIL-001], [MIL-002] and their reviews); the review of each phase's code is a task in that phase |
| Framework documents and review records for the plan-first workflow | Finished before each gateway ([BC-001], [SA-001], this plan, the milestone and their reviews); the review of each phase's code is a task in that phase |
## Dependencies
```
Baseline documents → [MIL-001] Colour palette → [MIL-002] Spot painting
Baseline documents → [MIL-001] Colour palette → [MIL-002] Spot painting → [MIL-003] Visible colours
```
[MIL-002] needs the palette function from [MIL-001]. A No-Go on [MIL-001] moves
the start of [MIL-002] by the days needed to rework and re-review; the
one-week limit then has no slack, so S01 decides whether to extend it.
[MIL-003] extends the palette function of [MIL-001] and redraws the painting of
[MIL-002]; both were decided Go on 2026-10-08, so nothing blocks it. A No-Go on
[MIL-003] leaves the accepted program as it is, so the earlier gateways stand.
## Plan Risks
| Risk | Impact | Mitigation |
@@ -75,12 +84,13 @@ one-week limit then has no slack, so S01 decides whether to extend it.
| The reference image is not supplied before the palette phase starts | [MIL-001] cannot start its extraction task; the window of two to three days is lost | The tasks that do not need the image (toolchain check, white filter and its tests) come first; S01 decides on another image if this one stays unavailable |
| A No-Go on the palette phase | [MIL-002] starts late and the one-week limit is missed | The palette phase is the smaller one and ends 2026-10-09, leaving five days for the painting phase |
| Review effort is large compared with the code | Time goes to documents instead of the program | Two phases, plain tasks, no use cases or design artifacts, as set out in [BC-001] |
| The faint-colour filter changes code that [MIL-001] and [MIL-002] already delivered | An earlier test or criterion, such as SC3, could break | [MIL-003] keeps the white-shade filter and its tests untouched and adds the contrast filter beside it; criterion 3 of [MIL-003] requires every earlier test to pass |
| The Project Plan has no quality checklist | The plan is accepted on S01's judgement alone | S01 checks the plan against the one-week limit of [BC-001] and the Go/No-Go criteria of both milestones |
## Open Issues
- **Reference image:** resolved. S01 supplied `assets/20260524_132700.jpg` on 2026-10-07, which completed task 4 of [MIL-001].
- **Project Plan review:** the Project Plan has no quality checklist yet, so it is `Accepted` when S01 says so in chat (done on 2026-10-07, and again on 2026-10-08 for the gateway decisions); no review record is written for it.
- **Project Plan review:** the Project Plan has no quality checklist yet, so it is `Accepted` when S01 says so in chat (done on 2026-10-07, and again on 2026-10-08 for the gateway decisions and for MIL-003); no review record is written for it.
- **Milestone links:** `sync-project.sh --apply` ran on 2026-10-07 and created the two Milestones and issues #1 to #13 on the git host; the Milestone column links to them.
## Gateway Decisions
@@ -100,9 +110,10 @@ Both decisions came before the planned dates because every Go criterion was alre
[SA-001]: ./stakeholder-analysis.md
[MIL-001]: ./milestones/mil-001-palette.md
[MIL-002]: ./milestones/mil-002-painting.md
[MIL-003]: ./milestones/mil-003-visible-colours.md
[MIL-001 milestone]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/milestone/68
[MIL-002 milestone]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/milestone/69
[PR 14]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/pulls/14
[PR 16]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/pulls/16
[b823d1f]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/commit/b823d1f405ebac6b0198605edd9d802518529725
[a6b17d3]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/commit/a6b17d30bc0778b7f80c57bfd22a505df5fe9ee1
[188b2e9]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/commit/188b2e97000d761802d4384c160598f785860a28
@@ -0,0 +1,69 @@
# Review Record: Business Case BC-001, objective O6 (delta)
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-007 |
| CrossReference | [BC-001], [RC-001], [SA-001], [QC-BC-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version (draft prepared by the assistant for S01 to confirm)<br>Terms confirmed by S01, verdict `Go` | [701feb1] |
---
## Artifact Under Review
- Instance reviewed: [BC-001], the revision of 2026-10-08 (second row of its Version History)
- Checklist used: [QC-BC-001], together with [QC-LANG-001] because the Business Case is written in the PO language
- Scope: delta re-review of criteria 2, 3, 4, 5 and 6 of [QC-BC-001] and criteria 3, 4, 5, 9 and 10 of [QC-LANG-001]. Reason: the revision adds objective O6, success criterion SC8, a scope item, a risk row, the contrast standard (WCAG) and a sentence in the Problem Statement, and it changes the Stakeholders row from "O1 to O5" to "O1 to O6". Earlier record: [RC-001], which passed every criterion on the first version. The other criteria are untouched by the revision and keep their earlier result: [QC-BC-001] 1 (cost-benefit), 7 (assumptions and constraints) and 8 (recommendation), and [QC-LANG-001] 1, 2, 6, 7 and 8 (metadata, headings, no translated twin, no change of language)
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none. S01 reads English and knows the IT domain. S01 is also the author; S01 accepted a documented self-review on 2026-10-07 (see [RC-001], Action Item 1)
**Status of this record:** final. The assistant read the revised Business
Case against the criteria above; S01 confirmed the open point on 2026-10-08
and the verdict is `Go`.
**Stakeholder Analysis:** [SA-001] is not revised. S01's concern "The result looks clean and the window stays open until a click" (Usability) already covers O6, and every concern still traces to an objective, so its own checklist result is unchanged.
**Evidence for SC8 and the risk row:** the palette of the reference image was measured on 2026-10-08 with the WCAG contrast ratio against white. The 30 colours range from 1.22 to 15.85; the eight palest lie between 1.22 and 1.96, the next colour is at 2.56, so a limit of 2.0 removes 8 and keeps 22. The limit was chosen by S01 on 2026-10-08.
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 2 | Risks are identified with documented impact and mitigation | Pass | The Risks table now has 7 rows; the new row (the contrast cut-off removes too many colours) has the impact "The painting looks dull" and a mitigation with figures from the measurement above |
| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | SC8 states a target (0 palette colours with a contrast ratio against white below 2.0) and a measure (the printed palette with the contrast of every colour). It is consistent with SC3, which still holds for the final palette |
| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | The new In Scope item names the faint-colour removal and its limit; Out of Scope is unchanged and still distinct (no other parameters, no interface, no packaging) |
| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | The Stakeholders table still cites S01 only, now for "O1 to O6"; the new text refers to S01 by ID |
| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | The Methodological and Standards Foundation gains a "Contrast" bullet naming the WCAG 2.x contrast ratio computed from relative luminance, with its two reference values (1.0 for white, 21.0 for black) |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 3 | The content (prose and table cells) is written in the stated language | Pass | The new prose and table cells are English |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Registry gives IT Executive English for BC. The new objective, criterion and risk state decisions and targets; the technical definition (relative luminance) is confined to the standards bullet where a standard belongs |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | S01 confirmed on 2026-10-07 that no dictionary is needed. The new term *faint colour* is used in every new place (Problem Statement, In Scope, Risks) and is defined by SC8 as a contrast below 2.0; *white shade* keeps its meaning from SC3 |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | S01 confirmed on 2026-10-08 that the new terms *faint colour* and *contrast ratio* are used correctly (Action Item 1). S01 is also the author; the self-review was accepted on 2026-10-07 |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | WCAG is spelled out at its first use ("Web Content Accessibility Guidelines (WCAG) 2.x"); O6 and SC8 are defined by their tables |
## Overall Verdict
Go — every criterion in the delta passes. S01 confirmed on 2026-10-08 that the new terms *faint colour* and *contrast ratio* are used correctly, so [QC-LANG-001] criterion 9 is closed and the action item is closed. The revision of [BC-001] can be `Accepted`, after which the new phase can be planned against O6 and SC8.
## Action Items
| # | Action | Owner | Due |
| --- | --- | --- | --- |
| 1 | Confirm that the new terms *faint colour* and *contrast ratio* are used correctly (QC-LANG-001 criterion 9). **Closed 2026-10-08:** S01 confirmed both terms | S01 | 2026-10-09 |
---
[BC-001]: ../../business-case.md
[RC-001]: ./rc-001-business-case.md
[SA-001]: ../../stakeholder-analysis.md
[QC-BC-001]: ../../../framework/qc/qc-business-case.md
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
[701feb1]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/commit/701feb1e523b1d61fb93227a7f0e2feaac18bb4d
@@ -0,0 +1,70 @@
# Review Record: Milestone MIL-003
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-008 |
| CrossReference | [MIL-003], [BC-001], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S01 | Initial version (draft prepared by the assistant for S01 to confirm)<br>Terms confirmed by S01, verdict `Go` | [188b2e9] |
---
## Artifact Under Review
- Instance reviewed: [MIL-003]
- Checklist used: [QC-MIL-001], together with [QC-LANG-001] because the milestone is written in the PO language
- Scope: full review
- Language and domain: en / it (the artifact's Metadata rows)
- Language reviewer: none. S01 reads English and knows the IT domain. S01 is also the author; S01 accepted a documented self-review on 2026-10-07 (see the review record of BC-001, Action Item 1)
**Status of this record:** final. The assistant read the milestone against
every criterion and recorded what it found; S01 confirmed the open point on
2026-10-08 and the verdict is `Go`.
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable: a contrast measure and a faint-colour filter in the source file under `src/`, applied when the palette is extracted, with their tests and one real run that shows the painting. It is a tangible output, not a date |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Five criteria, each with a Go and a No-Go column and a check that can be run: the measure's values and the filter's limit by tests, the printed palette with every contrast, all tests and both tools, a timed run with a captured picture, and the review record |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Dependencies table names MIL-001 (the filter is applied inside its palette function) and MIL-002 (the painting is redrawn and its tests must keep passing), each with its reason; both were decided Go on 2026-10-08 |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Traceability table maps O6 (criteria 1, 2 and 4, SC8), O2 (criterion 2, SC3), O1 and O4 (criteria 3 and 4, SC1, SC5 and SC6) and O5 (criterion 5, SC7) of [BC-001]; O6 and SC8 are in the Business Case revision accepted with RC-007 |
| 5 | Milestone owner and approving reviewer are identified | Pass | Ownership table gives S01 for both; the shared identity is the accepted self-review |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-10-10, inside the one-week limit of [BC-001] (2026-10-07 to 2026-10-14) and in agreement with the Project Plan, leaving four days of slack |
## 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 | The `Language` row says `en` and the `Domain` row says `it`; `check-languages.sh --list` reports both |
| 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; `it` is in the registry's domain list ("Software and IT") |
| 3 | The content (prose and table cells) is written in the stated language | Pass | All prose and table cells are English; tool names are established technical terms |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Registry gives IT Executive English for MIL. Purpose, Deliverable and the Go/No-Go table state decisions and checks. The Tasks table is more technical (function names, `ruff`, `mypy --strict`) because the milestone reference requires each summary to be understood as an Issue without opening the file; S01 confirmed the same reading for MIL-001 and MIL-002 on 2026-10-07 |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | S01 confirmed that no dictionary is needed. The terms *faint colour*, *contrast* and *palette* match [BC-001] as revised and confirmed with RC-007, and *white shade* keeps its meaning from SC3. The new compound names *contrast measure* and *faint-colour filter* are used in the same form throughout |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Headings follow the MIL reference exactly |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | Only `docs/milestones/mil-003-visible-colours.md` exists |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | N-A | First version; there is no previous accepted version |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | S01 confirmed on 2026-10-08 that the domain terms are used correctly, including the new compound names *contrast measure* and *faint-colour filter* (Action Item 1). S01 is also the author; the self-review was accepted on 2026-10-07 |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | WCAG is spelled out at its first use, in task 1 ("Web Content Accessibility Guidelines (WCAG) 2.x"); O1 to O6, SC1 to SC8 are defined in [BC-001] and cited with it; RC is the project's review-record prefix |
## Overall Verdict
Go — every criterion of [QC-MIL-001] and of [QC-LANG-001] passes (criterion 8 of [QC-LANG-001] is N-A for a first version). S01 accepted the documented self-review and confirmed on 2026-10-08 that the domain terms are used correctly and that the technical wording of the Tasks table is acceptable. The action item is closed. The milestone may now be synced to the git host and its tasks may start (plan-first gate).
## Action Items
| # | Action | Owner | Due |
| --- | --- | --- | --- |
| 1 | Confirm that the domain terms are used correctly, including *contrast measure* and *faint-colour filter* (QC-LANG-001 criterion 9), and that the technical wording of the Tasks table is acceptable in a milestone of register IT Executive English. **Closed 2026-10-08:** S01 confirmed both points | S01 | 2026-10-09 |
---
[MIL-003]: ../../milestones/mil-003-visible-colours.md
[BC-001]: ../../business-case.md
[QC-MIL-001]: ../../../framework/qc/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/qc-language-domain.md
[188b2e9]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/018-hirst-painting/commit/188b2e97000d761802d4384c160598f785860a28