5.2 KiB
5.2 KiB
Guide des agents Lardon3D
Validation obligatoire
Avant livraison, exécuter réellement :
CC=clang meson setup build --wipe
meson compile -C build -j8
meson test -C build --print-errorlogs
git diff --check
Pour les changements sensibles à la mémoire ou aux durées de vie, ajouter un build ASan/UBSan séparé. Pour toute concurrence, exécuter aussi TSan lorsque disponible. Ne jamais annoncer une vérification non exécutée.
Git et périmètre
- Ne jamais utiliser
git add -A. - Ne jamais ajouter ou modifier
scan3d/, notammentscan3d/tri_photos.py. - Ne faire ni commit ni push depuis le sandbox.
- Préserver les changements existants hors ticket.
- Fournir à la fin la liste exacte des fichiers appartenant au ticket.
Architecture à préserver
- La TUI orchestre les entrées et ncurses ; le métier et le layout restent séparés. Le layout dessine uniquement et ne modifie aucun état.
- ncurses appartient exclusivement au thread principal.
- Toute tâche possède une estimation immuable et une réservation valide avant son exécution. Aucun callback ne démarre sans réservation active.
- Le Resource Governor décide des budgets, slots et lots. Le scheduler applique le FIFO et exécute le contrat ; il ne réinterprète jamais les ressources.
- Les API à durée de vie complexe restent opaques, avec propriété et nettoyage explicites.
Principes non négociables
- La stabilité du système hôte et la réactivité de la TUI passent avant le débit.
- Aucun traitement lourd monolithique : utiliser des séquences adaptatives.
- Budgets, files et buffers doivent être bornés.
- La RAM d'un iGPU partagé appartient au budget RAM système.
- La zram est un filet de sécurité, jamais un budget de travail.
- Publier uniquement des sorties atomiques validées ; effectuer un rollback ciblé sans toucher aux données antérieures.
- Préserver des frontières permettant la reprise après interruption.
- Le viewer reste séparé, lecteur de snapshots validés et non bloquant.
Contraintes de code
- C17, Clang, Meson et ncursesw.
- Aucune variable globale d'état.
- Nettoyer explicitement chaque allocation, descripteur, mutex, condition et thread.
- Ne pas utiliser
system()nipopen()dans le code de production. - Ne laisser aucun
TODO, code mort ou dépendance inutile dans un ticket fini. - Préférer l'évolution minimale aux réécritures de modules validés.
- Viser 100 colonnes et ne jamais dépasser 120 sans justification locale.
- Mettre les appels complexes et le SQL sur plusieurs lignes lisibles.
- Éviter le code-golf et garder des fonctions confortables à relire dans Neovim.
- Commenter les invariants non évidents plutôt que paraphraser le code.
Long run OpenCode
.opencode/work/current_ticket.mdest la mémoire durable du ticket et doit être actualisé après chaque phase majeure.- Avant une compaction ou une fin de session incomplète, écrire
.opencode/work/handoff.mdavec la prochaine action exacte. - Une seule validation lourde à la fois : normal, ASan/UBSan, TSan puis stress.
- Un timeout doit être isolé et expliqué ; le répéter jusqu'au vert est interdit.
- Après les tests verts, imposer revue, audit de concurrence si pertinent, documentation, corrections et revalidation ciblée.
État actuel
- Moteur de tâches FIFO, un worker, pause et annulation coopératives.
- Gouverneur thread-safe avec estimations, budgets et réservations opaques.
- Scheduler relié au gouverneur ; réservation obligatoire avant callback.
- Aucun DAG, aucune priorité, aucun pool de workers.
- L'import asynchrone
import.imagesutilise le scheduler générique, ses lots adaptatifs et ses checkpoints persistants. - Le viewer Vulkan n'est pas commencé.
Prochains tickets recommandés
- Sélectionner une tâche admissible sans blocage par la tête de file ✓
- Introduire le DAG et les dépendances.
- Persister les tâches et checkpoints de reprise.
- Orchestrer et mesurer les séquences adaptatives.
- Ajouter les pools bornés CPU, IO et GPU.
- Migrer l'import vers le scheduler générique.
- Ajouter la publication live validée, puis le viewer Vulkan séparé.
Règles documentaires
README.md racine
Le README.md à la racine est le sommaire canonique de la documentation.
Vérification avant ticket architectural
Avant un ticket architectural important :
- Identifier le document canonique correspondant dans docs/
- Le lire
- Vérifier que le ticket respecte ses invariants
Mise à jour après ticket
Après un ticket modifiant :
- API
- Architecture
- Ownership
- Concurrence
- Persistance
- Pipeline
- Limites
Appeler lardon-docs avant de considérer le ticket terminé.
Contradictions code/documentation
Si code et documentation architecturale se contredisent :
- Ne pas choisir silencieusement
- Signaler la contradiction
- Décider quelle spécification doit devenir canonique
- Mettre la documentation à jour
- Seulement ensuite poursuivre
Nouveaux documents
Tout nouveau document docs/** doit être référencé depuis README.md si c'est un document canonique destiné aux lecteurs du projet.
Unicité des documents
Ne jamais créer plusieurs documents canoniques décrivant le même contrat.