3.4 KiB
3.4 KiB
Ticket Executor - Learnings
Session 2026-03-17 (26 tickets)
T-001 — Secrets .env
- Pattern: Replace secrets with
change_me_in_env_localplaceholder, move real values to.env.local - Gotcha:
.env.localmust contain ALL overridden secrets
T-002 — Security API Gitea
- Pattern: Ajouter
security: "is_granted('ROLE_USER')"sur les opérations ApiResource - Learning: Vérifier d'abord les ressources déjà sécurisées pour ne pas dupliquer
T-003 — SVG Upload
- Pattern: Double protection - bloquer à l'upload (retirer du MIME allowlist) + defense-in-depth (Content-Disposition: attachment au download)
- Learning: Toujours vérifier upload ET download controllers
T-004 — MCP create-task / Repos numérotation
- Gotcha critique: PostgreSQL n'autorise PAS
FOR UPDATEavec des fonctions d'agrégation (MAX) - Fix: Utiliser
pg_advisory_xact_lock()au lieu deFOR UPDATEpour les queries avec agrégation - Pattern: Offset les lock keys (+1000000) pour éviter collisions entre Task et ClientTicket
T-005 — Filter ROLE_CLIENT projects
- Pattern: Créer une Doctrine Extension (
QueryCollectionExtensionInterface+QueryItemExtensionInterface) pour filtrer par relation - Learning: Symfony autoconfigure enregistre l'extension automatiquement
T-006 — Block client doc upload
- Pattern: Vérifier le rôle dans le Processor AVANT de résoudre l'IRI de la tâche
- Learning: Le portail client envoie un
clientTicketIRI (pas detaskIRI), donc le check surtaskIrinon-vide suffit
T-007 — MCP role checks
- Pattern: Injecter
Securitydans chaque Tool, vérifier au début de__invoke() - Learning: 22 tools à modifier - bien séparer ROLE_ADMIN (users/clients) vs ROLE_USER (le reste)
T-009 — Password hashing
- Pattern: Champ
plainPasswordnon-persisté, writable uniquement, hashé dans le Processor - Learning: Modifier aussi le frontend (DTO + composant) quand on renomme un champ API
T-010 — Rate limiting
- Gotcha:
login_throttlingnécessitesymfony/rate-limiterinstallé, pas juste dans composer.json - Learning: Toujours vérifier que les packages sont installés, pas juste déclarés
T-012 — Harmoniser repos numérotation
- Pattern: Aligner les contrats (retourner le max, pas le next) et mettre le +1 côté appelant
- Learning: Vérifier TOUS les appelants d'une méthode renommée
T-015 — useAvatarService
- Learning: Quand on migre vers
useApi(), ajouter la détection FormData pour ne pas écraser le Content-Type multipart
T-020 — i18n
- Pattern: Ajouter
useI18n()dans le setup script avant de pouvoir utilisert()dans le JS - Learning: Les templates peuvent utiliser
$t()directement sans import
T-022 — Retirer twig-bundle
- Pattern: Retirer de composer.json + bundles.php + supprimer config YAML + templates
- Learning: API Platform ne requiert PAS twig, c'est juste suggéré pour Swagger UI
Meta-learnings
- Parallélisation: Les tickets touchant des fichiers indépendants peuvent tourner en parallèle sans problème
- MCP status: Toujours mettre "En cours" AVANT de commencer, "Terminé" APRÈS validation
- PostgreSQL gotchas: Tester les queries SQL avec agrégation + locking sur PostgreSQL, pas MySQL
- Agents: Les agents simples (1-3 fichiers) terminent en ~30s, les complexes (22 fichiers) en ~8min