[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSV1HV51A1TKT2EVB1VB6Y":3,"skill-same:01M6CSV1HV51A1TKT2EVB1VB6Y":87},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":14,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6CSV1HV51A1TKT2EVB1VB6Y","devops:conflict",null,"Analyse les conflits git et propose à l'utilisateur une résolution pas à pas avec validation de chaque étape.","atournayre\u002Fclaude-personas","atournayre","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4262077?v=4","01M6CSSGYW0E0D0M3E2T6J9X2Z","Aurélien Tournayre","01M6CSSH3DENJF2XWZ41H0F43K",0,"MIT","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fdevops\u002Fskills\u002Fconflict\u002FSKILL.md",[],[19,5,20,21,22,23,24,25,26,27,28,29,30,31],"devops","merge","status","git merge","git","validation","Bash","rebase","read","edit","diff","log","git log","2026-11-10 10:12:30",false,"---\nname: devops:conflict\ndescription: Analyse les conflits git et propose à l'utilisateur une résolution pas à pas avec validation de chaque étape.\nmodel: sonnet\nallowed-tools: [Bash(git status:*), Bash(git diff:*), Bash(git log:*), Bash(git merge:*), Bash(git rebase:*), Bash(git checkout:*), Bash(git add:*), Read, Edit]\nargument-hint: \u003Cbranche-destination>\nversion: 1.0.0\nlicense: MIT\n---\n\n# Résolution Interactive de Conflits Git\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\nRésoudre les conflits git de manière interactive : $ARGUMENTS\n\n## Purpose\n\nAnalyser les conflits git et guider l'utilisateur dans une résolution pas à pas, fichier par fichier, avec validation à chaque étape.\n\n## Variables\n- DESTINATION_BRANCH: $1 (branche de destination pour le merge\u002Frebase)\n- CURRENT_BRANCH: !`git branch --show-current`\n- CONFLICTED_FILES: Liste des fichiers en conflit\n- RESOLUTION_MODE: merge ou rebase (détecté automatiquement)\n\n## État Actuel du Repository\n\n- Branche actuelle : !`git branch --show-current`\n- Status Git : !`git status --porcelain`\n- Conflits détectés : !`git diff --name-only --diff-filter=U`\n- Commits divergents : !`git log --oneline HEAD...$DESTINATION_BRANCH --max-count=5`\n\n## Workflow\n\n### 1. Validation initiale\n\n**Vérifier DESTINATION_BRANCH obligatoire :**\n- Si `DESTINATION_BRANCH` n'est pas fourni -> ARRÊTER et demander à l'utilisateur\n\n**Vérifier que DESTINATION_BRANCH existe :**\n- `git branch --list \"$DESTINATION_BRANCH\"` (locale)\n- `git branch -r --list \"origin\u002F$DESTINATION_BRANCH\"` (remote)\n- Si n'existe pas -> ARRÊTER avec erreur\n\n**Vérifier l'état du repository :**\n- `git status` pour détecter :\n  - Merge en cours (fichiers \"both modified\")\n  - Rebase en cours (`.git\u002Frebase-merge\u002F` ou `.git\u002Frebase-apply\u002F`)\n  - Conflits existants\n\n### 2. Initier l'opération si nécessaire\n\n**Si aucun merge\u002Frebase en cours :**\n- Demander à l'utilisateur : \"Voulez-vous merger ou rebaser $CURRENT_BRANCH sur $DESTINATION_BRANCH ?\"\n- Options :\n  1. Merge : `git merge $DESTINATION_BRANCH`\n  2. Rebase : `git rebase $DESTINATION_BRANCH`\n  3. Annuler\n- Exécuter l'opération choisie\n\n**Si l'opération échoue avec conflits :**\n- Continuer avec l'analyse des conflits\n\n### 3. Analyse des conflits\n\n**Lister tous les fichiers en conflit :**\n```bash\ngit diff --name-only --diff-filter=U\n```\n\n**Pour chaque fichier, collecter :**\n- Chemin complet du fichier\n- Nombre de sections en conflit\n- Lignes concernées\n- Contexte (fonction\u002Fclasse\u002Fmodule)\n\n### 4. Résolution interactive par fichier\n\n**Pour chaque fichier en conflit :**\n\n**Étape A : Afficher le contexte**\n- Nom du fichier et chemin\n- Nombre de conflits dans ce fichier\n- `git diff $FICHIER` pour voir les marqueurs de conflit\n\n**Étape B : Analyser les versions**\n- Lire le fichier avec Read pour voir les marqueurs :\n  - `\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD` : version actuelle\n  - `=======` : séparateur\n  - `>>>>>>> $DESTINATION_BRANCH` : version à merger\n- Afficher les différences de manière claire\n\n**Étape C : Proposer 3 stratégies**\n\n1. **Garder la version actuelle (ours)**\n   - `git checkout --ours $FICHIER`\n   - Quand : notre version est correcte, l'autre est obsolète\n\n2. **Garder la version entrante (theirs)**\n   - `git checkout --theirs $FICHIER`\n   - Quand : leur version est correcte, la nôtre est obsolète\n\n3. **Résolution manuelle**\n   - Utiliser Edit pour fusionner manuellement\n   - Supprimer les marqueurs `\u003C\u003C\u003C\u003C\u003C\u003C\u003C`, `=======`, `>>>>>>>`\n   - Combiner les changements pertinents des deux versions\n\n**Étape D : Demander confirmation**\n- Afficher un résumé de la stratégie choisie\n- Demander : \"Voulez-vous appliquer cette résolution ? (oui\u002Fnon\u002Fvoir le diff)\"\n- Si \"voir le diff\" : montrer le résultat avec `git diff --cached $FICHIER`\n\n**Étape E : Appliquer la résolution**\n- Exécuter la stratégie choisie\n- Marquer le fichier comme résolu : `git add $FICHIER`\n- Confirmer : \"Conflit résolu dans $FICHIER\"\n\n### 5. Vérification finale\n\n**Après avoir résolu tous les fichiers :**\n```bash\ngit status\n```\n- Vérifier qu'il n'y a plus de fichiers \"both modified\"\n- Vérifier que tous les fichiers conflictuels sont stagés\n\n**Demander confirmation finale :**\n- \"Tous les conflits sont résolus. Voulez-vous finaliser ?\"\n- Options :\n  1. Oui, finaliser\n  2. Non, réviser les changements\n  3. Annuler tout (abort)\n\n### 6. Finalisation\n\n**Si merge :**\n```bash\ngit commit --no-edit\n# ou si l'utilisateur veut personnaliser :\ngit commit -m \"Merge branch '$DESTINATION_BRANCH' into $CURRENT_BRANCH\"\n```\n\n**Si rebase :**\n```bash\ngit rebase --continue\n```\n\n**Si annulation demandée :**\n```bash\ngit merge --abort   # ou\ngit rebase --abort\n```\n\n## Examples\n\n```bash\n# Situation : on est sur feature\u002Fauth, on veut merger main\n\u002Fdevops:conflict main\n\n# Situation : rebase en cours, 3 fichiers en conflit\n\u002Fdevops:conflict develop\n```\n\n## Rapport \u002F Réponse\n\n```markdown\n# Rapport de Résolution de Conflits\n\n## Configuration\n- Branche actuelle : $CURRENT_BRANCH\n- Branche destination : $DESTINATION_BRANCH\n- Type d'opération : merge\u002Frebase\n\n## Conflits Détectés\n- Nombre total de fichiers : X\n- Fichiers résolus : Y\n- Fichiers restants : Z\n\n## Résolutions Appliquées\n\n### Fichier : src\u002Fauth.php\n- Stratégie : Résolution manuelle\n- Raison : Fusion de deux implémentations valides\n\n### Fichier : config\u002Fapp.php\n- Stratégie : Garder version actuelle (ours)\n- Raison : Configuration locale spécifique\n\n## Statut Final\nTous les conflits résolus\nMerge\u002Frebase finalisé avec succès\n```\n\n## Validation\n\n- DESTINATION_BRANCH doit exister (locale ou remote)\n- Tous les fichiers en conflit doivent être traités\n- Aucun marqueur de conflit ne doit rester dans les fichiers\n- Tous les fichiers résolus doivent être stagés\n- L'utilisateur doit valider avant chaque résolution\n- L'utilisateur doit confirmer avant la finalisation\n\n## Notes Importantes\n\n- La commande est 100% interactive : chaque action nécessite validation\n- L'utilisateur garde le contrôle total du processus\n- Possibilité d'annuler à tout moment avec merge\u002Frebase --abort\n- Les résolutions manuelles utilisent Edit pour garantir la qualité\n","# Résolution Interactive de Conflits Git\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\nRésoudre les conflits git de manière interactive : $ARGUMENTS\n\n## Purpose\n\nAnalyser les conflits git et guider l'utilisateur dans une résolution pas à pas, fichier par fichier, avec validation à chaque étape.\n\n## Variables\n- DESTINATION_BRANCH: $1 (branche de destination pour le merge\u002Frebase)\n- CURRENT_BRANCH: !`git branch --show-current`\n- CONFLICTED_FILES: Liste des fichiers en conflit\n- RESOLUTION_MODE: merge ou rebase (détecté automatiquement)\n\n## État Actuel du Repository\n\n- Branche actuelle : !`git branch --show-current`\n- Status Git : !`git status --porcelain`\n- Conflits détectés : !`git diff --name-only --diff-filter=U`\n- Commits divergents : !`git log --oneline HEAD...$DESTINATION_BRANCH --max-count=5`\n\n## Workflow\n\n### 1. Validation initiale\n\n**Vérifier DESTINATION_BRANCH obligatoire :**\n- Si `DESTINATION_BRANCH` n'est pas fourni -> ARRÊTER et demander à l'utilisateur\n\n**Vérifier que DESTINATION_BRANCH existe :**\n- `git branch --list \"$DESTINATION_BRANCH\"` (locale)\n- `git branch -r --list \"origin\u002F$DESTINATION_BRANCH\"` (remote)\n- Si n'existe pas -> ARRÊTER avec erreur\n\n**Vérifier l'état du repository :**\n- `git status` pour détecter :\n  - Merge en cours (fichiers \"both modified\")\n  - Rebase en cours (`.git\u002Frebase-merge\u002F` ou `.git\u002Frebase-apply\u002F`)\n  - Conflits existants\n\n### 2. Initier l'opération si nécessaire\n\n**Si aucun merge\u002Frebase en cours :**\n- Demander à l'utilisateur : \"Voulez-vous merger ou rebaser $CURRENT_BRANCH sur $DESTINATION_BRANCH ?\"\n- Options :\n  1. Merge : `git merge $DESTINATION_BRANCH`\n  2. Rebase : `git rebase $DESTINATION_BRANCH`\n  3. Annuler\n- Exécuter l'opération choisie\n\n**Si l'opération échoue avec conflits :**\n- Continuer avec l'analyse des conflits\n\n### 3. Analyse des conflits\n\n**Lister tous les fichiers en conflit :**\n```bash\ngit diff --name-only --diff-filter=U\n```\n\n**Pour chaque fichier, collecter :**\n- Chemin complet du fichier\n- Nombre de sections en conflit\n- Lignes concernées\n- Contexte (fonction\u002Fclasse\u002Fmodule)\n\n### 4. Résolution interactive par fichier\n\n**Pour chaque fichier en conflit :**\n\n**Étape A : Afficher le contexte**\n- Nom du fichier et chemin\n- Nombre de conflits dans ce fichier\n- `git diff $FICHIER` pour voir les marqueurs de conflit\n\n**Étape B : Analyser les versions**\n- Lire le fichier avec Read pour voir les marqueurs :\n  - `\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD` : version actuelle\n  - `=======` : séparateur\n  - `>>>>>>> $DESTINATION_BRANCH` : version à merger\n- Afficher les différences de manière claire\n\n**Étape C : Proposer 3 stratégies**\n\n1. **Garder la version actuelle (ours)**\n   - `git checkout --ours $FICHIER`\n   - Quand : notre version est correcte, l'autre est obsolète\n\n2. **Garder la version entrante (theirs)**\n   - `git checkout --theirs $FICHIER`\n   - Quand : leur version est correcte, la nôtre est obsolète\n\n3. **Résolution manuelle**\n   - Utiliser Edit pour fusionner manuellement\n   - Supprimer les marqueurs `\u003C\u003C\u003C\u003C\u003C\u003C\u003C`, `=======`, `>>>>>>>`\n   - Combiner les changements pertinents des deux versions\n\n**Étape D : Demander confirmation**\n- Afficher un résumé de la stratégie choisie\n- Demander : \"Voulez-vous appliquer cette résolution ? (oui\u002Fnon\u002Fvoir le diff)\"\n- Si \"voir le diff\" : montrer le résultat avec `git diff --cached $FICHIER`\n\n**Étape E : Appliquer la résolution**\n- Exécuter la stratégie choisie\n- Marquer le fichier comme résolu : `git add $FICHIER`\n- Confirmer : \"Conflit résolu dans $FICHIER\"\n\n### 5. Vérification finale\n\n**Après avoir résolu tous les fichiers :**\n```bash\ngit status\n```\n- Vérifier qu'il n'y a plus de fichiers \"both modified\"\n- Vérifier que tous les fichiers conflictuels sont stagés\n\n**Demander confirmation finale :**\n- \"Tous les conflits sont résolus. Voulez-vous finaliser ?\"\n- Options :\n  1. Oui, finaliser\n  2. Non, réviser les changements\n  3. Annuler tout (abort)\n\n### 6. Finalisation\n\n**Si merge :**\n```bash\ngit commit --no-edit\n# ou si l'utilisateur veut personnaliser :\ngit commit -m \"Merge branch '$DESTINATION_BRANCH' into $CURRENT_BRANCH\"\n```\n\n**Si rebase :**\n```bash\ngit rebase --continue\n```\n\n**Si annulation demandée :**\n```bash\ngit merge --abort   # ou\ngit rebase --abort\n```\n\n## Examples\n\n```bash\n# Situation : on est sur feature\u002Fauth, on veut merger main\n\u002Fdevops:conflict main\n\n# Situation : rebase en cours, 3 fichiers en conflit\n\u002Fdevops:conflict develop\n```\n\n## Rapport \u002F Réponse\n\n```markdown\n# Rapport de Résolution de Conflits\n\n## Configuration\n- Branche actuelle : $CURRENT_BRANCH\n- Branche destination : $DESTINATION_BRANCH\n- Type d'opération : merge\u002Frebase\n\n## Conflits Détectés\n- Nombre total de fichiers : X\n- Fichiers résolus : Y\n- Fichiers restants : Z\n\n## Résolutions Appliquées\n\n### Fichier : src\u002Fauth.php\n- Stratégie : Résolution manuelle\n- Raison : Fusion de deux implémentations valides\n\n### Fichier : config\u002Fapp.php\n- Stratégie : Garder version actuelle (ours)\n- Raison : Configuration locale spécifique\n\n## Statut Final\nTous les conflits résolus\nMerge\u002Frebase finalisé avec succès\n```\n\n## Validation\n\n- DESTINATION_BRANCH doit exister (locale ou remote)\n- Tous les fichiers en conflit doivent être traités\n- Aucun marqueur de conflit ne doit rester dans les fichiers\n- Tous les fichiers résolus doivent être stagés\n- L'utilisateur doit valider avant chaque résolution\n- L'utilisateur doit confirmer avant la finalisation\n\n## Notes Importantes\n\n- La commande est 100% interactive : chaque action nécessite validation\n- L'utilisateur garde le contrôle total du processus\n- Possibilité d'annuler à tout moment avec merge\u002Frebase --abort\n- Les résolutions manuelles utilisent Edit pour garantir la qualité\n",{"name":5,"model":37,"license":15,"version":38,"description":7,"allowed-tools":39,"argument-hint":49},"sonnet","1.0.0",[40,41,42,43,44,45,46,47,48],"Bash(git status:*)","Bash(git diff:*)","Bash(git log:*)","Bash(git merge:*)","Bash(git rebase:*)","Bash(git checkout:*)","Bash(git add:*)","Read","Edit","\u003Cbranche-destination>","main","bb0335112ea0991dc1dc6a29fa5a861397a5a6f6","devops\u002Fskills\u002Fconflict","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas","https:\u002F\u002Fatournayre.github.io\u002Fclaude-personas\u002F","https:\u002F\u002Fgithub.com\u002Fatournayre","🔵, Back End Developer, @symfony  :heart:, @rectorphp :heart:,  \r\n:bug: fixer (creator sometimes 🤫), member of @afup","2026-03-02 23:42:20",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add atournayre\u002Fclaude-personas --skill \"devops:conflict\"",{"tool":64,"command":65},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill \"devops:conflict\"",{"tool":67,"command":68},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill \"devops:conflict\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fdevops\u002Fskills\u002Fconflict\u002FSKILL.md",true,[72,78,83],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"example.html","REFERENCE","参考文档",50465,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FPPT-Design\u002Fopen-design-html-ppt-zhangzara-scatterbrain\u002Fexample.html",{"path":79,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"LICENSE","许可证",1067,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FPPT-Design\u002Fopen-design-html-ppt-zhangzara-scatterbrain\u002FLICENSE",{"path":84,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":85,"sourceHtmlUrl":86},"template.json",1901,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FPPT-Design\u002Fopen-design-html-ppt-zhangzara-scatterbrain\u002Ftemplate.json",[88,102,141,148,156,167],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":32},"01M6CSZPR0W1K1S9BX3247CZJ1","twig:make-component","Génère un Twig Component Symfony UX (classe PHP + template Twig)","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Ftwig\u002Fskills\u002Fmake-component\u002FSKILL.md",[],[95,96,27,28,97,98,99,100,101,25],"twig:make component","component","write","ux","grep","template","php",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":124,"publishedAt":32},"01M6CSZKCYYT4EAW4CDSTS3TSH","tester:ui-test","Teste automatiquement une interface utilisateur dans Chrome : navigation, clics, validation visuelle, tests fonctionnels, responsive, comportement et debug. Génère un rapport détaillé avec screenshots et optionnellement un GIF du parcours.","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Ftester\u002Fskills\u002Fui-test\u002FSKILL.md",[108,113,116,119],{"categoryNo":109,"categoryName":110,"taxonomyType":111,"taxonomyTypeDesc":112},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":114,"categoryName":115,"taxonomyType":111,"taxonomyTypeDesc":112},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":117,"categoryName":118,"taxonomyType":111,"taxonomyTypeDesc":112},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":120,"categoryName":121,"taxonomyType":122,"taxonomyTypeDesc":123},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[125,126,127,128,129,130,131,132,133,24,134,25,135,136,137,138,27,97,139,140],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","messages","plan","tool","page","find","javascript","chrome",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":147,"publishedAt":32},"01M6CSZGQ8X9XNXRBYX0AA3CYE","symfony:voter","Genere un Voter de securite Symfony pour le controle d'acces granulaire","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fsymfony\u002Fskills\u002Fvoter\u002FSKILL.md",[],[143,25,99,27,97,28],{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":32},"01M6CSZEJ3BNHCNZT18SYFGDME","symfony:message","Genere un Message Symfony Messenger avec son Handler pour traitement asynchrone","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fsymfony\u002Fskills\u002Fmessage\u002FSKILL.md",[],[150,155,25,99,27,97,28],"message",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":165,"publishedAt":32},"01M6CSZBWSK9M6YMJX886BVWYF","symfony:mailer","Genere un email Symfony (TemplatedEmail ou Notification) avec template Twig","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fsymfony\u002Fskills\u002Fmailer\u002FSKILL.md",[162],{"categoryNo":163,"categoryName":164,"taxonomyType":111,"taxonomyTypeDesc":112},"01JBSEEDCAT000000000000005","邮件与沟通",[158,28,166,25,100,99,27,97],"email",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":32},"01M6CSZ9DXMYZ9HTRE8A324AWG","symfony:form","Genere un FormType Symfony avec contraintes de validation et options","https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fsymfony\u002Fskills\u002Fform\u002FSKILL.md",[],[169,25,99,27,97,28,174,24],"options"]