118 lines
4.3 KiB
Markdown
118 lines
4.3 KiB
Markdown
# Guide des agents Lardon3D
|
|
|
|
## Validation obligatoire
|
|
|
|
Avant livraison, exécuter réellement :
|
|
|
|
```sh
|
|
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/`, notamment
|
|
`scan3d/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()` ni `popen()` 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.
|
|
|
|
## É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 utilise encore son worker dédié et n'est pas migré vers
|
|
le scheduler générique.
|
|
- Le viewer Vulkan n'est pas commencé.
|
|
|
|
## Prochains tickets recommandés
|
|
|
|
1. Sélectionner une tâche admissible sans blocage par la tête de file ✓
|
|
2. Introduire le DAG et les dépendances.
|
|
3. Persister les tâches et checkpoints de reprise.
|
|
4. Orchestrer et mesurer les séquences adaptatives.
|
|
5. Ajouter les pools bornés CPU, IO et GPU.
|
|
6. Migrer l'import vers le scheduler générique.
|
|
7. 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 :
|
|
1. Identifier le document canonique correspondant dans docs/
|
|
2. Le lire
|
|
3. 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 :
|
|
1. Ne pas choisir silencieusement
|
|
2. Signaler la contradiction
|
|
3. Décider quelle spécification doit devenir canonique
|
|
4. Mettre la documentation à jour
|
|
5. 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.
|