docs: add repository architecture and agent guidelines
This commit is contained in:
parent
6379dce843
commit
3d4a13be60
1 changed files with 80 additions and 0 deletions
80
AGENTS.md
Normal file
80
AGENTS.md
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
# 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é.
|
||||
Loading…
Reference in a new issue