MMOframework
Pourquoi l'IA Playground Bibliothèques Documentation Rechercher Agence
FR EN
Index

ChecklistBuilder

MMO\admin\helpers · 1 symbole · générée le 27 Oct 2026

class

ChecklistBuilder

ChecklistBuilder.php:68

Builds the items of a release checklist (Checklist) from its recipe: what changed in the repositories, what the board's tickets say to check, and what no ticket covers.

class MMO\admin\helpers\ChecklistBuilder
Espace de noms
MMO\admin\helpers
The recipe, kept in the checklist (`recipe`): {"repositories": [{"label": "my.oviepro", "path": "~/dev/src/my.oviepro", "exclude": ["libs/"], "together": ["modules/IJSS/"]}], "treated": "/\\*\\*Claude — (résultat|result)\\*\\* /u", "site": "http://localhost/my.oviepro/", "pages": "my.oviepro — pages", "checks": {"12": {"page": "declaration/MaladiePro", "check": "INRS references readable", "url": "gestion/maladies"}}, "items": [{"group": "before committing", "section": "verify", "title": "`php tools/mmo.php verify` passes", "detail": "..."}], "itemsFile": "src/pages/admin/release-checklist.items.json", "texts": {"diff": "Relire le diff : `git -C {root} diff -- {path}`", ...}, "beforeCommit": "avant de commiter", "noRunGroups": ["release dev.oviepro.com"], "account": "/(compte limité à un groupe)/u", "accounts": {"limited": {"username": "test.groupe.nord", "label": "...", "match": "/compte limité/iu", "roles": ["dev-user"], "groups": ["Nord"]}}} - **repositories**: one `code` item per changed file (`git status`), grouped under the repository's label and a section for its folder ([`section`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-section)). A path of `together` is one item for all its files (a deleted module, a folder of fonts), a path of `exclude` is left out (a hub's `libs/`, whose submodules are repositories of their own). A file of `src/pages` is in its page's section, unless `"pages": false` (a library, whose `src/pages` are not its own). An item names the tickets whose discussion cites the file ([`mentions`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-mentions)): a file no ticket cites is a transverse change. - **treated**: a regular expression; a ticket whose discussion matches it was treated, and gets a functional check. The default matches the result comment an agent writes (`**Claude — résultat**`, `**Claude — result**`). - **checks**: the functional check of a ticket, on a page. Without one, the last ```` ```check ```` block of the ticket's discussion (else of its description) gives them, one per line: `page | what to check`, or `page | url | what to check`. A treated ticket with neither gets an item asking to check its result on screen. - **site**: what a relative `url` is relative to. **pages**: the group of the functional checks. - **items** / **itemsFile**: items written by hand -- what to do before committing, what to clean up after. The file is flat items, or a page by page functional test: `{members, types, round, sections: [{label, icon, recheck, pages: [{label, path, note, recheck, checks: [{label, type, recheck}]}]}]}`, whose `members`, `types`, `round` and sections' icons the checklist takes too ([`meta`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-meta)). `round` is the release the checklist is checked for: a new one starts a round, every box unchecked ([`Checklist::startRound`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/Checklist.md#checklist-startround)). `recheck` -- of a check, or of its page or section for all of theirs -- asks the checks a release touched to be checked again: a new value unchecks them, them only ([`Checklist::setItems`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/Checklist.md#checklist-setitems)). - **actions**: each item gets how it is checked in one click (`action`, [`Checklist::NormalizeAction`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/Checklist.md#checklist-normalizeaction)): a changed file a `diff` against the working tree; a page's check its `page`, with as whom ([`$account`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-account)) and its steps; the ```` ```check ```` lines `diff | repository:path | what to read` (since the last release, [`release`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-release)), `run | command | expected | repository`, `decision | question | option 1 / option 2`, `manual | command or step | what to do`; an item written by hand keeps its own, else gets its command in `code` ([`inferAction`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-inferaction)); a page's check whose address is a command, a request, a screen's name or needs a record still gets one ([`screenAction`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-screenaction), `screens`, `delivery`). A `diff` written by hand without revisions reads the working tree in the `beforeCommit` group, the last release's changes elsewhere. - **runFolders**: folders a ▶ may run in (`cd {folder} && ...`) besides the repositories, which make no item ([`RunFolders`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-runfolders)): `["~/dev/src/MMO/master", "~/dev/src/MMO/master/libs/core"]`, or `{label, path}` each. - **noRunGroups** / **runGroups**: where a command the server runs gets a ▶ (`run`) rather than « Copy » (`manual`): every group but the ones of `noRunGroups` (a release's, whose commands are a server's), or only the ones of `runGroups` when given ([`runsIn`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-runsin)). - **accounts**: the test accounts' profiles ([`TestAccounts`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/TestAccounts.md#testaccounts)): a page's check -- or a request to send by hand -- whose text one of their `match` finds (the earliest), or whose ```` ```check ```` line ends with `as=<key>`, gets that profile as `action.as`: the page opens it in that account's session. A check that speaks of an account no profile knows is listed ([`unmatchedAccounts`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-unmatchedaccounts)). - **merge**: items doing the same thing are one ([`merge`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-merge)): the same file's diff, the same command, the same page with the same steps, the same decision. `false` keeps them apart.
$board = KanbanBoard::Edit('boards/acme.json', fn(KanbanBoard $b) => $b); $builder = new ChecklistBuilder(['repositories' => [['label' => 'acme', 'path' => '~/dev/src/acme']]], $board); $items = $builder->build(); $builder->orphans(); // the files no ticket cites

Index

PLACEHOLDER
account
ambiguous
board
bodies
command
delivery
icons
items
localNote
maxCommits
meta
pipe
profiles
recipe
releases
runnable
screens
texts
treated
unmatchedAccounts
actionItem($ticket, $title, $check)
build()
changes($repository)One item per file changed in a repository.
CheckBlock($markdown) static
checksOf($id)
commandAction($command, $folder, $expect, $notes, $group)
commandOf($cell, $rest)
copied($command, $folder)
DeriveMatch($command) staticWhat the machine finds in a command's output when it passed, by family (the cd {folder} && before it left aside): - php tools/mmo.php verify|i18n: its last line ok., never failed:; - `phpun…
diffRange($action, $group)A diff action written by hand without its revisions gets them: before committing (the recipe's beforeCommit group), what is about to be committed -- from HEAD to the working tree --; else wha…
ExpandBraces($text) static
giveAccounts()Give each check opening a page -- or a request sent by hand -- the test account it is done as: the profile its ``` `check `` line names (as=<key>) or its item already gives (action.as`), el…
handWritten()the items of items and itemsFile
Home() static
inferAction($item)The action of an item written by hand that gives none: its first command in code -- of its title, else of its detail -- run by the server when it is on the list ($runnable; `cd {folder} && .…
MatchCells($cells) staticA ``` `check `` line's match= / notMatch= cells (a text, or a /regular expression/`): what the machine finds in a run's output, taken out of $cells.
mentions($path)
merge($items)Items doing the same thing (Signature) are one: the first keeps its place (group, section) and gets the tickets of all, its title says how many it stands for -- a new title, so a new id: a box…
mergedDiff($action, $others)A merged diff reads commits: from the oldest revision of its items (a later one is a commit since it; HEAD becomes the last release), to its branch -- to the working tree only while its path has …
meta()
Notes($text) static
OpenQuote($command) static
orphans()
pageAction($url, $check)
pageChecks()one item per functional check of a treated ticket
Path($path) static
Placeholders($address) static
recordUrl($ticket, $path, $query)
release($root)
repository($label)
repositoryAt($folder)
RunFolders($recipe) staticThe recipe's runFolders: folders a ▶ may run a command in (cd {folder} && ...) besides its repositories -- a hub and its libraries, for a checklist that lists no code (the front testers') --, n…
runsIn($group)
screen($page, $path)
screenAction($ticket, $check, $siblings)The action of a page's check whose second cell is not an address to open as it is: - a delivery ($delivery: Livraison stg | php admin.php atonline-reimport | ...): manual, a server is a pe…
section($path, $pages)
sectionsItems($json)
Shown($path) static
Signature($item) static
source()
Status($root) static
treatedTickets()
unmatched()
unmatchedAccounts()
url($url)
withSteps($action, $cell)
__construct($recipe, $board)

Constantes1

PLACEHOLDER

const PLACEHOLDER = '/<[^<>]*>|\\{(?!uid\\})[^{}]*\\}|…|\\.\\.\\./u'

Propriétés20

account

string $account = '/\\b((?:connecté |logged in )?(?:en|as|avec(?: un| le)?|with(?: an?| the)?|sous) (?:compte|account)\\b[^,;:.()«»]*)/iu'
Type
string

ambiguous

array $ambiguous = […6 items]
Type
array

bodies

protected array $bodies = []
Type
array

command

string $command = '/^(cd|php|git|npm|npx|node|python3?|tar|curl|mongosh|mongo|sudo|ssh|scp|rsync|composer|bash|sh|phpunit|crontab|time|grep|ls|cat|find|wc|jq)\\s|^\\.\\//'
Type
string

delivery

string $delivery = '/^(livraison|delivery|déploiement|deployment)\\b/iu'
Type
string

icons

array $icons = […4 items]
Type
array

items

protected array $items = []
Type
array

localNote

string $localNote = '/^(en )?(ligne de commande|command line)$/iu'
Type
string

maxCommits

int $maxCommits = 12
Type
int

meta

protected array $meta = ['members' => [], 'types' => [], 'groups' => [], 'round' => '']
Type
array

pipe

string $pipe = '/^(head|tail|tar|grep|wc|jq|sort|uniq|cut|sed|awk|xargs|less|cat|tee)\\b/'
Type
string

profiles

array $profiles = []
Type
array

recipe

protected array $recipe
Type
array

releases

protected array $releases = []
Type
array

screens

array $screens = []
Type
array

texts

array $texts = […28 items]
Type
array

treated

string $treated = '/\\*\\*Claude — (résultat|result)\\*\\*/u'
Type
string

unmatchedAccounts

protected array $unmatchedAccounts = []
Type
array

Méthodes47

actionItem($ticket, $title, $check)

ChecklistBuilder.php:778
protected function actionItem(string $ticket, string $title, array $check): array
$ticketstring
$titlestringthe item's
$checkarray
retournearrayits item, in the group of these (actions), a section per type

build()

ChecklistBuilder.php:172
function build(): array
retournearraythe items, in the order the page shows them: written by hand, the code, the pages

changes($repository)

ChecklistBuilder.php:464

One item per file changed in a repository.

protected function changes(array $repository): void
$repositoryarray
retournevoid

CheckBlock($markdown)

staticChecklistBuilder.php:975
static function CheckBlock(string $markdown): array
$markdownstring
retournearraystring, check: string, url: ?string, as?: string}|array{type: string, cells: list<string>, as?: string}> the lines of its last ``` `check `` block: page | what to check, page | url | what to check; or, when the first cell is one of them, diff | repository:path | what to read, run | command | expected | repository, decision | question | option 1 / option 2, manual | command or step | what to do` -- their cells after the first
ChecklistBuilder::CheckBlock("```check\nhome | the logo is whole\n```"); // [['page' => 'home', 'check' => 'the logo is whole', 'url' => null]]ChecklistBuilder::CheckBlock("```check\nrun | phpunit | OK\n```"); // [['type' => 'run', 'cells' => ['phpunit', 'OK']]]ChecklistBuilder::CheckBlock("```check\ngestion | gestion/accidents | only its AT | as=limited\n```"); // [[..., 'as' => 'limited']]: a last cell `as=<key>` is the test account (@see TestAccounts)

checksOf($id)

ChecklistBuilder.php:950
function checksOf(string $id): array
$idstring
retournearraystring, check: string, url?: ?string, as?: string}|array{type: string, cells: list<string>, asked?: ?string, as?: string}> the functional checks of a ticket -- a page's, or another type's (CheckBlock): from the recipe's checks, else from the last ``` `check ``` block of its discussion, else of its description

commandAction($command, $folder, $expect, $notes, $group)

ChecklistBuilder.php:649
function commandAction( string $command, ?string $folder, string $expect, array $notes, string $group ): array
Voir
$localNote ($notes: on the instance, after a backup...) and the server runs the command ($runnable) in a folder of the recipe; else a manual, the command to copy (cd folder && ...)
$commandstring
$foldernull | stringwhere it runs, as written (~/dev/src/acme)
$expectstringwhat it prints when it passes
$notesarraywhat the line says besides (ligne de commande, dev.oviepro.com)
$groupstringthe item's
retournearraya run when the item's group runs commands (runsIn), nothing is said besides it but

commandOf($cell, $rest)

ChecklistBuilder.php:676
function commandOf(string $cell, string $rest): ?array
$cellstringthe second cell of a ``` `check ``` line
$reststringthe cells after it, | between them
retournenull | arraystring, 1: ?string, 2: list<string>, 3: string}|null [command, folder, notes, expected] when the cell is a command ($command): its parentheses ((ligne de commande), (sur l'instance, après une sauvegarde)) and what follows the command (puis une seconde fois) are notes, cd folder && ... and folder (command) give its folder; a pipeline or a quote the block's | cut is put back together; null for what is not a command
$builder->commandOf('(ligne de commande) php admin.php x --json', 'valid json'); // ['php admin.php x --json', null, ['ligne de commande'], 'valid json']

copied($command, $folder)

ChecklistBuilder.php:663
protected function copied(string $command, ?string $folder): string
$commandstring
$foldernull | string
retournestring$command as it is copied: cd {folder} && {command} when it runs in a folder

DeriveMatch($command)

staticChecklistBuilder.php:892
What the machine finds in a command's output when it passed, by family (the `cd {folder} &&` before it left aside): - `php tools/mmo.php verify|i18n`: its last line `ok.`, never `failed:`; - `phpunit`: `OK (`, never `FAILURES!` nor `ERRORS!`; - `npm test`: `0 failed` (mmo.client's runner: « 505 passed, 0 failed »); `node --test`: `fail 0`; - `php admin.php ...` (a dry run, a listing that only reads): the framework's `END(200)`, never an error (`!! `, its `!! END(500) !!`, `Uncaught`, `Fatal error`); - `mongosh ... DRY_RUN`: `dry run` (each part of a patch says « (dry run: nothing written) »), never a mongo error; - `php scripts/check-release.php`: its summary, `point(s) prouvé(s)`; `php scripts/admin.php plan`: `versions`.static function DeriveMatch(string $command): array
$commandstring
retournearraystring, notMatch?: string} nothing for another command: its expect decides, as before
ChecklistBuilder::DeriveMatch('cd ~/dev/src/acme && phpunit --filter x'); // ['match' => '/^OK \(/m', 'notMatch' => '/FAILURES!|ERRORS!/']

diffRange($action, $group)

ChecklistBuilder.php:826

A diff action written by hand without its revisions gets them: before committing (the recipe's beforeCommit group), what is about to be committed -- from HEAD to the working tree --; else what changed since the last release (release).

protected function diffRange(array $action, string $group): array
$actionarray
$groupstringits item's
retournearray

ExpandBraces($text)

staticChecklistBuilder.php:1087
static function ExpandBraces(string $text): string
$textstring
retournestring$text with its a/{b,c}.d written out: a/b.d a/c.d, the way an agent names several files at once
ChecklistBuilder::ExpandBraces('src/views/{A,B}.jhs'); // 'src/views/A.jhs src/views/B.jhs'

giveAccounts()

ChecklistBuilder.php:242
Give each check opening a page -- or a request sent by hand -- the test account it is done as: the profile its ```` ```check ```` line names (`as=<key>`) or its item already gives (`action.as`), else the one whose `match` is found first in its text (the check, then its page's name; an item written by hand: its title and detail). A command to copy is no one's. Without profiles, the words [`$account`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-account) found stay.protected function giveAccounts(): void
retournevoid

inferAction($item)

ChecklistBuilder.php:407

The action of an item written by hand that gives none: its first command in code -- of its title, else of its detail -- run by the server when it is on the list ($runnable; cd {folder} && ... runs it in that repository) and the item's group runs commands (runsIn), else copied (manual); else its page (url).

function inferAction(array $item): ?array
$itemarray
retournenull | array
$builder->inferAction(['title' => '`php tools/mmo.php verify --lib=admin` passes']); // ['type' => 'run', 'command' => 'php tools/mmo.php verify --lib=admin', ...]

MatchCells($cells)

staticChecklistBuilder.php:916

A ``` `check `` line's match= / notMatch= cells (a text, or a /regular expression/`): what the machine finds in a run's output, taken out of $cells.

static function MatchCells(array &$cells): array
$cellsarray
retournearraystring, notMatch?: string}
ChecklistBuilder::MatchCells($cells); // ['match' => '/\d+ pages en 200/'], $cells without that cell

mentions($path)

ChecklistBuilder.php:1002
function mentions(string $path): array
$pathstringa file, from its repository
retournearraythe treated tickets whose discussion cites it: by its path, or by its last three or two parts

merge($items)

ChecklistBuilder.php:296

Items doing the same thing (Signature) are one: the first keeps its place (group, section) and gets the tickets of all, its title says how many it stands for -- a new title, so a new id: a box ticked for one of them is not ticked for all --, its detail what each other one was for. A merged diff reads a range of commits, never the working tree alone, and its detail lists the commits touching its path (the newest $maxCommits): one file changed by several tickets is read once, commit by commit.

function merge(array $items): array
$itemsarray
retournearray
$builder->merge([['title' => 'A', 'action' => ['type' => 'run', 'command' => 'phpunit']], ['title' => 'B', 'action' => ['type' => 'run', 'command' => 'phpunit']]]); // [['title' => 'A (+ 1 more)', 'detail' => "Also: B", ...]]

mergedDiff($action, $others)

ChecklistBuilder.php:327

A merged diff reads commits: from the oldest revision of its items (a later one is a commit since it; HEAD becomes the last release), to its branch -- to the working tree only while its path has changes not committed.

protected function mergedDiff(array &$action, array $others = []): string
$actionarraythe diff, changed in place
$others = []arraythe diffs of the same path merged into it
retournestringthe commits from its old revision to its new one touching its path ($texts commits), '' when git says none

meta()

ChecklistBuilder.php:206
function meta(): array
retournearraylist<string>, types: array<string, array{label: string, icon: string}>, groups: array<string, array{icon: string}>, round: string} what the last build read besides the items: the members of a page by page file, what each type of check is called (the file's types, the recipe's over them), each section's icon, the round the file asks for ('' for none)

Notes($text)

staticChecklistBuilder.php:731
static function Notes(string $text): array
$textstring
retournearraylist<string>, 1: string} the parentheses $text starts with, and what follows them
ChecklistBuilder::Notes('(ligne de commande) php admin.php x'); // [['ligne de commande'], 'php admin.php x']

OpenQuote($command)

staticChecklistBuilder.php:764
static function OpenQuote(string $command): bool
$commandstring
retourneboolwhether $command leaves a quote open: a ' or " that starts or ends a word -- not an apostrophe between two letters (sur l'instance)
ChecklistBuilder::OpenQuote("phpunit --filter 'testA"); // true

Path($path)

staticChecklistBuilder.php:1065
static function Path(string $path): string
$pathstring
retournestringa path of the recipe: ~/ is the home folder of whoever owns the application's folder -- the developer, not the web server running the request -- {root}... as filename
ChecklistBuilder::Path('~/dev/src/acme'); // '/home/marc/dev/src/acme'

Placeholders($address)

staticChecklistBuilder.php:753
static function Placeholders(string $address): array
$addressstring
retournearraythe placeholders of an address that say which record: <un AT> as « un AT », {id d'une DAT} as « une DAT »; not …, nor a bare {id}
ChecklistBuilder::Placeholders("analyse?id=<id d'un AT>"); // ['un AT']

recordUrl($ticket, $path, $query)

ChecklistBuilder.php:720
protected function recordUrl(string $ticket, string $path, string $query): ?string
$ticketstring
$pathstringan address's path (declaration/AccidentTravail)
$querystringits query, with a placeholder (?id=<un AT>)
retournenull | stringthe same address with a record the ticket names in its discussion or its description (declaration/AccidentTravail?id=6979c45fbdc48981440b1d82), the first one; null for none

release($root)

ChecklistBuilder.php:840
function release(string $root): array
$rootstringa repository's folder
retournearray?string, to: ?string} the changes since its last release: from its most recent v* tag the branch holds, or its last version X.Y.Z commit of mmo.json (mmo.admin's release, which tags nothing) when that one is later -- to its branch; nulls when git says neither
$builder->release('/home/marc/dev/src/acme'); // ['from' => 'v5.0.0', 'to' => 'develop']

repository($label)

ChecklistBuilder.php:859
function repository(string $label): ?array
$labelstringa repository of the recipe, by its label (or its folder's name)
retournenull | arraythe recipe's repository

repositoryAt($folder)

ChecklistBuilder.php:868
protected function repositoryAt(string $folder): ?string
$folderstring
retournenull | stringthe label of the recipe's repository in $folder (~/dev/src/acme), null for none

RunFolders($recipe)

staticChecklistBuilder.php:933

The recipe's runFolders: folders a ▶ may run a command in (cd {folder} && ...) besides its repositories -- a hub and its libraries, for a checklist that lists no code (the front testers') --, no item made of them.

static function RunFolders(array $recipe): array
$recipearray
retournearraystring> their paths, by label: an entry's label, else the folder as written (~/dev/src/MMO/master)
ChecklistBuilder::RunFolders(['runFolders' => ['~/dev/src/MMO/master']]); // ['~/dev/src/MMO/master' => '/home/marc/dev/src/MMO/master']

runsIn($group)

ChecklistBuilder.php:547
function runsIn(string $group): bool
$groupstringan item's
retourneboolwhether a command of its items the server runs gets a ▶: the recipe's runGroups name it when they are given, else its noRunGroups (a release's groups, whose commands are a server's) do not
(new ChecklistBuilder(['noRunGroups' => ['release dev']]))->runsIn('release dev'); // false

screen($page, $path)

ChecklistBuilder.php:703
function screen(string $page, ?string $path): ?string
$pagestringthe name of a screen
$pathnull | stringthe path of an address that needs a record
retournenull | stringthe url of $screens for it: by its name (any case), else by its path or the closest parent

screenAction($ticket, $check, $siblings)

ChecklistBuilder.php:579
The action of a page's check whose second cell is not an address to open as it is: - a delivery ([`$delivery`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-delivery): `Livraison stg | php admin.php atonline-reimport | ...`): `manual`, a server is a person's; - a command ([`commandOf`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-commandof): `php admin.php ... --dry-run`, `(ligne de commande) ...`, `cd folder && ...`, `~/folder (command)`): [`commandAction`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-commandaction) -- a `run` when the server runs it and its group runs commands, else `manual`; - a request (`POST maladie.pdf`, `(outils réseau) POST ...`, an `.json` address with a placeholder): `manual`; - an address with a placeholder (`declaration/AccidentTravail/documents?id=<un AT>`): the same address with a record the ticket names (`?id=6979c45f...`), else the screen that lists them ([`$screens`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-screens)), its first step saying which to open; - a screen named without its address (`(menu du compte) Profil`): the address another check of the ticket gives it, else [`$screens`](https://mmoframework.fr/fr/documentation/mmo.admin/php/helpers/ChecklistBuilder.md#checklistbuilder-screens); - else `manual`: what the cells say, as steps.function screenAction(string $ticket, array $check, array $siblings = []): array
$ticketstring
$checkarray
$siblings = []arraythe ticket's other checks
retournearray
$builder->screenAction('12', ['page' => 'Profil', 'url' => '(menu du compte) Profil', 'check' => 'saved']); // a `page` of $screens['Profil']

section($path, $pages)

ChecklistBuilder.php:1022
function section(string $path, bool $pages = true): string
$pathstringa file, from its repository
$pages = trueboolwhether src/pages holds the pages of an application (mmo.client): a page is then in its page's section
retournestringits section: its folder, two or three levels deep; a page's folder for a page

sectionsItems($json)

ChecklistBuilder.php:438
protected function sectionsItems(array $json): array
$jsonarray{sections: [{label, icon, recheck, pages: [{label, path, note, recheck, checks: [{label, type, recheck}]}]}]}
retournearrayone item per check: the section is the group, the page the section; a check's recheck is its own, else its page's, else its section's

Signature($item)

staticChecklistBuilder.php:362
static function Signature(array $item): ?string
$itemarray
retournenull | stringwhat the item does, the same for items that check the same thing: a diff its repository and path; a command (run, or copied) itself, where and what it must print; a page its address, account and steps; a decision its ticket and question; null for an item without an action, a page without steps, or a step by hand without one

source()

ChecklistBuilder.php:216
function source(): ?string
retournenull | stringwhat the items depend on when they come from the recipe alone (items, itemsFile): its hash, which changes when the file or the recipe does; null for a recipe reading repositories or a board, which only a build says
(new ChecklistBuilder(['itemsFile' => '{root}/checklists/general.json']))->source(); // 'a3f1...'

Status($root)

staticChecklistBuilder.php:1045
static function Status(string $root): array
$rootstringa repository
retournearraystring, 1: string}> [state, path] for each changed file: M, D, ??, A, R, T

unmatched()

ChecklistBuilder.php:263
function unmatched(): array
retournearraythe treated tickets no code item names: fixed without a change, or cited in a form the search misses

unmatchedAccounts()

ChecklistBuilder.php:232
function unmatchedAccounts(): array
retournearraystring, title: string, text: string, as: ?string}> the checks of the last build that speak of an account (TestAccounts::MENTION) -- or name one, as= -- that no profile of the recipe's accounts knows: their item's id, title, the text read, what as said

withSteps($action, $cell)

ChecklistBuilder.php:633
protected function withSteps(array $action, string $cell): array
$actionarray
$cellstring
retournearray$action with $cell before its steps: (menu du compte) Profil as « menu du compte : Profil »