[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSVZV8CFHCDZBE1KMM0E8H":3,"skill-same:01M6CSVZV8CFHCDZBE1KMM0E8H":78},{"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":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":14,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6CSVZV8CFHCDZBE1KMM0E8H","implementer:code",null,"Implémenter selon le plan — avec ou sans approbation préalable","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\u002Fimplementer\u002Fskills\u002Fcode\u002FSKILL.md",[],[19,20,5,21,22,23,24,25,26,27],"code","implementer","sans","Bash","plan","grep","read","write","edit","2026-11-10 10:12:30",false,"---\nname: implementer:code\ndescription: Implémenter selon le plan — avec ou sans approbation préalable\nargument-hint: [path-to-plan]\nmodel: sonnet\nallowed-tools: [Read, Write, Edit, Bash, Grep, Glob, TaskCreate, TaskUpdate, TaskList]\nversion: 1.0.0\nlicense: MIT\n---\n\n# Implémenter selon le plan\n\nPhase d'implémentation du workflow de développement : implémenter la feature selon le plan généré.\n\n## Variables\n\nPATH_TO_PLAN: $ARGUMENTS\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n### 1. Vérifier le contexte et charger le plan\n\n- Extraire PATH_TO_PLAN depuis $ARGUMENTS\n- Si PATH_TO_PLAN n'est pas fourni :\n  - Lire `.claude\u002Fdata\u002F.dev-workflow-state.json` avec Read\n  - Extraire `planPath` du JSON\n- Si toujours pas de plan, afficher une erreur et arrêter\n\n### 2. Lire le plan\n\n- Lire le fichier plan complet\n- Extraire les étapes d'implémentation\n- Identifier les fichiers à créer\u002Fmodifier\n\n### 3. Demander approbation avant implémentation (mode manuel)\n\nSi lancé sans argument `--auto` :\n\n> Attendre confirmation de l'utilisateur avant de continuer.\n\nSi lancé avec `--auto` ou si le contexte workflow le demande :\n\n> Démarrage immédiat sans checkpoint d'approbation.\n\n### 4. Implémenter étape par étape\n\nPour chaque étape du plan :\n\n1. Créer une todo pour l'étape (`TaskCreate`)\n2. Lire les fichiers concernés (si modification)\n3. Implémenter le code\n4. Respecter :\n   - Les conventions du projet (CLAUDE.md)\n   - Les patterns identifiés dans l'exploration\n   - Les décisions prises en phase d'analyse\n5. Marquer la todo comme complétée (`TaskUpdate`)\n\n**Ordre d'implémentation recommandé :**\n1. Interfaces et contrats\n2. Value Objects et exceptions métier\n3. Entités et collections\n4. Services et handlers\n5. Configuration (services.yaml, etc.)\n\n### 5. Créer les tests\n\n- Créer les tests unitaires spécifiés dans le plan\n- Suivre l'approche TDD si possible\n- S'assurer que les tests passent\n\n### 6. Vérifications qualité\n\n```bash\nmake phpstan    # PHPStan niveau 9\nmake fix        # Formatage PSR-12\n```\n\nCorriger TOUTES les erreurs PHPStan avant de continuer.\n\n### 7. Rapport final\n\n```\nImplémentation terminée\n\n  Checklist : X\u002FY fichiers complétés\n\n  Fichiers créés :\n  - src\u002FService\u002FNewService.php\n  - tests\u002FService\u002FNewServiceTest.php\n\n  Fichiers modifiés :\n  - config\u002Fservices.yaml\n  - src\u002FController\u002FMainController.php\n\n  PHPStan : 0 erreur\n  Tests : verts\n```\n\n## Règles\n\n- PHPStan = 0 erreurs (bloquant CI)\n- Respecter le plan (pas d'improvisation)\n- Tests pour chaque composant\n- Ne JAMAIS créer de commits Git\n","# Implémenter selon le plan\n\nPhase d'implémentation du workflow de développement : implémenter la feature selon le plan généré.\n\n## Variables\n\nPATH_TO_PLAN: $ARGUMENTS\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n### 1. Vérifier le contexte et charger le plan\n\n- Extraire PATH_TO_PLAN depuis $ARGUMENTS\n- Si PATH_TO_PLAN n'est pas fourni :\n  - Lire `.claude\u002Fdata\u002F.dev-workflow-state.json` avec Read\n  - Extraire `planPath` du JSON\n- Si toujours pas de plan, afficher une erreur et arrêter\n\n### 2. Lire le plan\n\n- Lire le fichier plan complet\n- Extraire les étapes d'implémentation\n- Identifier les fichiers à créer\u002Fmodifier\n\n### 3. Demander approbation avant implémentation (mode manuel)\n\nSi lancé sans argument `--auto` :\n\n> Attendre confirmation de l'utilisateur avant de continuer.\n\nSi lancé avec `--auto` ou si le contexte workflow le demande :\n\n> Démarrage immédiat sans checkpoint d'approbation.\n\n### 4. Implémenter étape par étape\n\nPour chaque étape du plan :\n\n1. Créer une todo pour l'étape (`TaskCreate`)\n2. Lire les fichiers concernés (si modification)\n3. Implémenter le code\n4. Respecter :\n   - Les conventions du projet (CLAUDE.md)\n   - Les patterns identifiés dans l'exploration\n   - Les décisions prises en phase d'analyse\n5. Marquer la todo comme complétée (`TaskUpdate`)\n\n**Ordre d'implémentation recommandé :**\n1. Interfaces et contrats\n2. Value Objects et exceptions métier\n3. Entités et collections\n4. Services et handlers\n5. Configuration (services.yaml, etc.)\n\n### 5. Créer les tests\n\n- Créer les tests unitaires spécifiés dans le plan\n- Suivre l'approche TDD si possible\n- S'assurer que les tests passent\n\n### 6. Vérifications qualité\n\n```bash\nmake phpstan    # PHPStan niveau 9\nmake fix        # Formatage PSR-12\n```\n\nCorriger TOUTES les erreurs PHPStan avant de continuer.\n\n### 7. Rapport final\n\n```\nImplémentation terminée\n\n  Checklist : X\u002FY fichiers complétés\n\n  Fichiers créés :\n  - src\u002FService\u002FNewService.php\n  - tests\u002FService\u002FNewServiceTest.php\n\n  Fichiers modifiés :\n  - config\u002Fservices.yaml\n  - src\u002FController\u002FMainController.php\n\n  PHPStan : 0 erreur\n  Tests : verts\n```\n\n## Règles\n\n- PHPStan = 0 erreurs (bloquant CI)\n- Respecter le plan (pas d'improvisation)\n- Tests pour chaque composant\n- Ne JAMAIS créer de commits Git\n",{"name":5,"model":33,"license":15,"version":34,"description":7,"allowed-tools":35,"argument-hint":44},"sonnet","1.0.0",[36,37,38,22,39,40,41,42,43],"Read","Write","Edit","Grep","Glob","TaskCreate","TaskUpdate","TaskList",[45],"path-to-plan","main","bb0335112ea0991dc1dc6a29fa5a861397a5a6f6","implementer\u002Fskills\u002Fcode","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":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add atournayre\u002Fclaude-personas --skill \"implementer:code\"",{"tool":60,"command":61},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill \"implementer:code\"",{"tool":63,"command":64},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill \"implementer:code\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fimplementer\u002Fskills\u002Fcode\u002FSKILL.md",true,[68,74],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"evals\u002Fevals.json","REFERENCE","参考文档",744,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Frefine-prompt\u002Fevals\u002Fevals.json",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":76,"sourceHtmlUrl":77},"evals\u002Ftriggers.json",2906,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Frefine-prompt\u002Fevals\u002Ftriggers.json",[79,91,130,137,145,156],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":28},"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",[],[86,87,25,27,26,88,24,89,90,22],"twig:make component","component","ux","template","php",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":113,"publishedAt":28},"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",[97,102,105,108],{"categoryNo":98,"categoryName":99,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":103,"categoryName":104,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":106,"categoryName":107,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":109,"categoryName":110,"taxonomyType":111,"taxonomyTypeDesc":112},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[114,115,116,117,118,119,120,121,122,123,124,22,23,125,126,127,25,26,128,129],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","validation","messages","tool","page","find","javascript","chrome",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":28},"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",[],[132,22,24,25,26,27],{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":28},"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",[],[139,144,22,24,25,26,27],"message",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":154,"publishedAt":28},"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",[151],{"categoryNo":152,"categoryName":153,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000005","邮件与沟通",[147,27,155,22,89,24,25,26],"email",{"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":162,"publishedAt":28},"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",[],[158,22,24,25,26,27,163,123],"options"]