# The release checklist of a board
mmo.admin's guide is `docs/checklists.md` (`mmoframework-docs://mmo.admin/checklists.md`): the file, the recipe, the
page, how an application adds them. This is the part phase 3 needs.
## Create it
```bash
H=http://localhost/my.oviepro
jq -n --slurpfile recipe recipe.json '{version: 0, title: "my.oviepro 4.1 : relecture avant commit",
description: "Tout ce qui a changé pour les tickets du board, à relire avant de commiter.",
board: "my.oviepro-deploy", boardUrl: "admin/developer/boards", recipe: $recipe[0]}' \
| curl -s -X PUT -H 'Content-Type: application/json' --data-binary @- "$H/api/checklists/my.oviepro-4.1.json"
curl -s -X POST "$H/api/checklists/my.oviepro-4.1/build.json" | jq '.data.progress, .data.build'
```
The name is the release's (`my.oviepro-4.1`), not the board's: a board lives across releases, a checklist is one.
## The recipe my.oviepro 4.1 had
```json
{
"repositories": [
{"label": "my.oviepro", "path": "~/dev/src/my.oviepro", "exclude": ["checklists/"], "together": ["modules/IJSS/", "www/assets/fonts/montserrat/", "boards/"]},
{"label": "mmo.core", "path": "~/dev/src/MMO/master/libs/core"},
{"label": "mmo.client", "path": "~/dev/src/MMO/master/libs/client"},
{"label": "hub (MMO/master)", "path": "~/dev/src/MMO/master", "pages": false, "exclude": ["libs/"]}
],
"site": "http://localhost/my.oviepro/",
"pages": "my.oviepro — pages",
"checks": {
"1": {"page": "API (compte non admin)", "check": "PUT /data/main/roles.json en s'ajoutant admin: true -> 403, rôle inchangé.", "url": "home"}
},
"items": [
{"group": "transverse", "section": "avant de commiter", "title": "`php tools/mmo.php verify` passe pour chaque lib modifiée", "detail": "..."},
{"group": "transverse", "section": "nettoyage", "title": "Données de test locales « TEST CLAUDE »", "detail": "..."}
],
"texts": {"M": "modifié", "D": "supprimé", "??": "nouveau", "A": "nouveau", "R": "renommé", "T": "type changé",
"files": "{count} fichiers, {state}", "diff": "Relire le diff : `git -C {root} diff -- {path}`",
"new": "Relire le fichier (nouveau).", "deleted": "Vérifier que la suppression est voulue (`git checkout -- {path}` le restaure).",
"orphan": " Aucun ticket ne le cite : changement transverse, à relire pour lui-même.",
"pages": "pages", "root": "(racine)", "page": "page ",
"unchecked": "(aucune vérification décrite)", "uncheckedDetail": "Vérifier à l'écran ce que le résultat du ticket dit avoir corrigé."}
}
```
- **checks** are only needed for tickets whose result comment has no ```` ```check ```` block (phase 2's agents
write one). A ticket with neither gets one item asking to check its result on screen: write its check then.
- **items** are what no ticket covers. Always worth one: `verify` passes for each library touched; the config files
changed (re-read before shipping, a local path must not ship); the behaviour changes every application of the
framework gets; the commit order (each library on its branch, then the hub's submodule pointers, the application
apart); the test data to remove; what an agent created by mistake.
- A treated ticket is one whose discussion has the result comment (`**Claude — résultat**` / `**Claude — result**`),
or one the recipe's `checks` names. `treated` (a regular expression) changes that.
## After
- Rebuild after every new fix (`build.json`, or the page's Rebuild button): what was checked stays checked while its
item is still there -- an item's id is its group, section and title.
- `orphans` (files no ticket cites) are not errors: say which they are; a file an agent changed for a ticket but did
not cite means its comment is incomplete -- add the path to the comment and rebuild.
- The user checks, the page labels the tickets `vérifié`, and moves them to done with a comment listing what was
checked. Never check items for the user.