Playbook d'Exécution SDLC du Studio de Design Animé
Lorsqu'une tâche d'implémentation de fonctionnalité ou de correction de bug est confiée dans ce dépôt, exécutez ces étapes exactement dans l'ordre :
Étape 1 : Synchronisation des Contrats (Porte Spécification)
- Inspectez
engine/schemas.pyetremotion/src/types.ts. - Ajoutez ou modifiez les champs pour satisfaire les exigences de la fonctionnalité.
- Validez que les modèles Pydantic se compilent :
(Remarque : si un venv de projet existe, invoquez viapython3 -c "import engine.schemas as s; print('Schemas OK')".venv/bin/python3). - Ne passez jamais au code d'implémentation tant que les contrats dans les deux langages ne sont pas alignés.
Étape 2 : Phase Rouge (Écrire des Tests Échouants)
- Écrivez un nouveau fichier de test ou cas de test dans
tests/(Pytest) ouremotion/src/__tests__/(Vitest/Jest). - Testez la validation du schéma, les cas limites et la sortie sérialisée attendue.
- Exécutez le test et confirmez l'échec :
pytest tests/ # Si un runner de test frontend est configuré dans remotion/package.json : npm --prefix remotion test -- --run - Enregistrez la trace d'échec. Si le test réussit immédiatement, réécrivez-le pour tester la nouvelle capacité réelle. La phase Rouge est satisfaite uniquement lorsque les tests échouent avec les assertions attendues.
Étape 3 : Phase Verte (Implémentation Minimale)
- Écrivez le code minimal dans
engine/ouremotion/src/pour satisfaire le test échouant. - Dans Remotion, respectez strictement la Loi de Trame Déterministe :
- La dérivation doit venir strictement de
useCurrentFrame()etuseVideoConfig(). - N'utilisez jamais
Date.now(),Math.random(), ourequestAnimationFrame()non borné.
- La dérivation doit venir strictement de
- Préservation des motifs architecturaux existants (
<Series>,<Sequence>,<ThreeScene>,<KineticScene>). - Assurez-vous que les actifs vectoriels conservent les IDs et classes conformément à
remotion/svgo.config.mjspour le ciblage GSAP.
Étape 4 : Porte Qualité et Boucle d'Auto-Guérison Automatisée
Suivez le compteur d'itérations de la boucle (ATTEMPT ∈ {1, 2, 3}). Exécutez chaque porte séquentiellement sans masquer les codes de sortie (n'ajoutez pas || true) :
# Niveau 1 : Analyse Statique de Types
python3 -m mypy engine/schemas.py engine/api.py
npm --prefix remotion run build -- --bundle-cache=false
# Niveau 2 : Suites de Tests Automatisées
pytest tests/
# Si un runner de test frontend est configuré dans remotion/package.json :
npm --prefix remotion test -- --run
# Niveau 3 : Rastérisation de Tramage Chromium Headless
(cd remotion && npx remotion still src/index.ts MainComposition /tmp/smoke.png \
--props='{"scenes":[],"theme":{}}' \
--gl=angle \
--overwrite)
Politique d'Auto-Guérison et Rollback
-
En cas d'échec (Tentative 1 ou 2) :
- Capturez le chemin exact du fichier, le numéro de ligne défaillant et la trace d'erreur/stderr.
- Implémentez un correctif minimal et ciblé répondant strictement à l'erreur rapportée.
- Incrémentez
ATTEMPTet redémarrez le Niveau 1.
-
En cas d'échec (Tentative 3 - Budget Épuisé) : Arrêtez immédiatement les modifications spéculatives et restaurez uniquement les fichiers de fonctionnalité modifiés et créés (ne jamais effectuer un nettoyage global général) :
# Solution de repli d'épuisement du Niveau 4 : ciblez uniquement les périmètres du code fonctionnel git restore --staged --worktree engine/ remotion/ tests/ git clean -fd engine/ remotion/ tests/ rm -f /tmp/smoke.png echo "La porte qualité a échoué après 3 tentatives. Les chemins de code cibles ont été restaurés à une base de code propre." exit 1(Alternative pour préserver le travail pour une analyse post-mortem :
git stash push -u -m "sdlc-failed-attempt-$(date +%s)" -- engine/ remotion/ tests/) -
En cas de succès (Tous les Niveaux Quittent avec 0) : Supprimez les artefacts transitoires et créez le commit vérifié :
rm -f /tmp/smoke.png git add engine/ remotion/ tests/ git commit -m "feat(motion-sdlc): implement verified feature with green test gate"