09.03.05 — Skills Pick#

Sélection d’artefacts (screenshots, logs, reports). Toujours par mtime, jamais par nom de fichier.

Listing (potentiellement non exhaustif)#

SkillCible
pick-screenshotsPioche les screenshots les plus récents (par mtime), en les contextualisant à l’aide de logs si possible
pick-logsPioche les logs les plus récents (par mtime)
pick-reportsPioche les reports DOCX/JSON les plus récents (par mtime)

« mtime »#

Citation du Holy Book :

Mtime, pas nom de fichier. Les suffixes UUID sont aléatoires ; pick-* trie par mtime.

Tous les artefacts d’Ocarina sont nommés avec un UUID :

  • Screenshots : SUCCESS_a3f2b1c4.png, FAIL_b9e8d2a3.png
  • Logs : <test name>.log mais dans un arbre <cycle>/<campaign>/<suite>/<test>.log souvent dupliqué entre runs avec un dossier racine suffixé d’un UUID en cas d’exécutions multiples sur la même machine
  • Rapports : <uuid hex 8>.json, <uuid hex 4>/<...>.docx

Schéma#

input  : "lance review-report sur le dernier run"
        → pick-reports (mtime DESC, limit 1)
        → review-report sur le rapport sélectionné
input  : "trouve les screenshots du test X dans le dernier run"
        → pick-reports → dernier run
        → pick-screenshots scopé

Pourquoi des skills dédiées plutôt que ls -t#

Sans skillAvec skill
Claude doit deviner la convention de répertoire (.reports/docx/ vs .reports/json/)Le skill connaît la convention
Risque de pick un screenshot hors sujetLe skill scope au dernier run
Pas de filtrage par browser / par test / par catégorieLe skill expose des filtres typés

« pick then act »#

Cycle en échec  →  pick-reports  →  review-report(<picked report>)
                                            ↓
                                    classification → IDENTIFIED_GAPS.md

pick-* est rarement appelée seule. C’est toujours un prélude à un skill qui consomme l’artefact pické.

Illustration des nommages aléatoires#

Quand un cycle de test propulsé par Ocarina se termine, les artefacts sont construits tel que :

.reports/
├── docx/
│   └── <uuid 4 chars>/                                           # par run
│       └── <campaign>/
│           └── <suite>/
│               └── <test>.docx
└── json/
    └── <uuid 8 chars>.json                                       # par run