[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSYPPHCZ3QQ9G2WZTKR3G3":3,"skill-same:01M6CSYPPHCZ3QQ9G2WZTKR3G3":77},{"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":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":14,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M6CSYPPHCZ3QQ9G2WZTKR3G3","reviewer:elegant-objects",null,"Vérifier la conformité du code PHP aux principes Elegant Objects de Yegor Bugayenko","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\u002Freviewer\u002Fskills\u002Felegant-objects\u002FSKILL.md",[],[19,20,21,22,23,24,25,26],"reviewer","objects","reviewer:elegant objects","code","Bash","php","grep","read","2026-11-10 10:12:30",false,"---\nname: reviewer:elegant-objects\ndescription: Vérifier la conformité du code PHP aux principes Elegant Objects de Yegor Bugayenko\nargument-hint: [fichier.php]\nmodel: sonnet\nallowed-tools: [Bash, Read, Grep, Glob]\nversion: 1.0.0\nlicense: MIT\n---\n\n# Elegant Objects Reviewer\n\nVérifier la conformité du code PHP aux principes Elegant Objects de Yegor Bugayenko. Analyse un fichier spécifique ou tous les fichiers modifiés dans la branche.\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n```\n\u002Freviewer:elegant-objects [fichier.php]\n```\n\nSans argument : analyse les fichiers PHP modifiés dans la branche.\n\n## Workflow\n\n### 1. Déterminer les fichiers à analyser\n\n- Avec argument : analyser le fichier spécifié\n- Sans argument : `git diff --name-only` pour obtenir les fichiers PHP modifiés\n\n### 2. Vérifier les règles Elegant Objects\n\n#### Classes\n- Classes `final` (sauf abstraites et interfaces)\n- Max 4 attributs\n- Pas de getters\u002Fsetters publics\n- Pas de méthodes statiques\n- Noms sans suffixe -er (Manager, Handler, Helper...)\n- Constructeur unique et simple (uniquement des affectations)\n\n#### Méthodes\n- Pas de retour `null`\n- Pas d'argument `null`\n- Corps sans lignes vides ni commentaires inline\n- CQRS : séparation commandes\u002Fqueries\n\n#### Tests\n- Une assertion par test (dernière instruction)\n- Noms en français décrivant le comportement\n- Pas de setUp\u002FtearDown\n\n### 3. Calculer le score de conformité\n\n- Violation critique: -10 points\n- Violation majeure: -5 points\n- Recommandation: -2 points\n- Base: 100\n\n### 4. Générer le rapport\n\n```\n## Score de conformité Elegant Objects\nScore global : X\u002F100\n\n## Violations critiques (bloquantes)\n### [Règle violée]\n- Fichier: \u002Fchemin\u002Fabsolu\u002Ffichier.php:ligne\n- Problème: Description précise\n- Suggestion: Code corrigé ou approche recommandée\n\n## Violations majeures (à corriger)\n[Même format]\n\n## Recommandations (améliorations)\n[Même format]\n\n## Statistiques\n- Fichiers analysés : X\n- Classes analysées : Y\n- Méthodes analysées : Z\n- Tests analysés : W\n- Total violations : N\n\n## Prochaines étapes\nListe priorisée des corrections à effectuer\n```\n\n## Règles\n\n- Ignorer vendor\u002F, var\u002F, cache\u002F\n- Controllers Symfony tolérés\n- Prioriser par criticité\n","# Elegant Objects Reviewer\n\nVérifier la conformité du code PHP aux principes Elegant Objects de Yegor Bugayenko. Analyse un fichier spécifique ou tous les fichiers modifiés dans la branche.\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n```\n\u002Freviewer:elegant-objects [fichier.php]\n```\n\nSans argument : analyse les fichiers PHP modifiés dans la branche.\n\n## Workflow\n\n### 1. Déterminer les fichiers à analyser\n\n- Avec argument : analyser le fichier spécifié\n- Sans argument : `git diff --name-only` pour obtenir les fichiers PHP modifiés\n\n### 2. Vérifier les règles Elegant Objects\n\n#### Classes\n- Classes `final` (sauf abstraites et interfaces)\n- Max 4 attributs\n- Pas de getters\u002Fsetters publics\n- Pas de méthodes statiques\n- Noms sans suffixe -er (Manager, Handler, Helper...)\n- Constructeur unique et simple (uniquement des affectations)\n\n#### Méthodes\n- Pas de retour `null`\n- Pas d'argument `null`\n- Corps sans lignes vides ni commentaires inline\n- CQRS : séparation commandes\u002Fqueries\n\n#### Tests\n- Une assertion par test (dernière instruction)\n- Noms en français décrivant le comportement\n- Pas de setUp\u002FtearDown\n\n### 3. Calculer le score de conformité\n\n- Violation critique: -10 points\n- Violation majeure: -5 points\n- Recommandation: -2 points\n- Base: 100\n\n### 4. Générer le rapport\n\n```\n## Score de conformité Elegant Objects\nScore global : X\u002F100\n\n## Violations critiques (bloquantes)\n### [Règle violée]\n- Fichier: \u002Fchemin\u002Fabsolu\u002Ffichier.php:ligne\n- Problème: Description précise\n- Suggestion: Code corrigé ou approche recommandée\n\n## Violations majeures (à corriger)\n[Même format]\n\n## Recommandations (améliorations)\n[Même format]\n\n## Statistiques\n- Fichiers analysés : X\n- Classes analysées : Y\n- Méthodes analysées : Z\n- Tests analysés : W\n- Total violations : N\n\n## Prochaines étapes\nListe priorisée des corrections à effectuer\n```\n\n## Règles\n\n- Ignorer vendor\u002F, var\u002F, cache\u002F\n- Controllers Symfony tolérés\n- Prioriser par criticité\n",{"name":5,"model":32,"license":15,"version":33,"description":7,"allowed-tools":34,"argument-hint":38},"sonnet","1.0.0",[23,35,36,37],"Read","Grep","Glob",[39],"fichier.php","main","bb0335112ea0991dc1dc6a29fa5a861397a5a6f6","reviewer\u002Fskills\u002Felegant-objects","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":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add atournayre\u002Fclaude-personas --skill \"reviewer:elegant-objects\"",{"tool":54,"command":55},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill \"reviewer:elegant-objects\"",{"tool":57,"command":58},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill \"reviewer:elegant-objects\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Freviewer\u002Fskills\u002Felegant-objects\u002FSKILL.md",true,[62,68,73],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"agents\u002Fopenai.yaml","REFERENCE","参考文档",258,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fbeefiker\u002Fsuperloopy\u002Fskills\u002Fi-have-adhd\u002Fagents\u002Fopenai.yaml",{"path":69,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"LICENSE","许可证",1069,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fbeefiker\u002Fsuperloopy\u002Fskills\u002Fi-have-adhd\u002FLICENSE",{"path":74,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Fupstream-notice.md",930,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fbeefiker\u002Fsuperloopy\u002Fskills\u002Fi-have-adhd\u002Freferences\u002Fupstream-notice.md",[78,91,131,138,146,157],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":27},"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",[],[85,86,26,87,88,89,25,90,24,23],"twig:make component","component","edit","write","ux","template",{"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":27},"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,23,125,126,127,128,26,88,129,130],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","validation","messages","plan","tool","page","find","javascript","chrome",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":27},"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",[],[133,23,25,26,88,87],{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":27},"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",[],[140,145,23,25,26,88,87],"message",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":155,"publishedAt":27},"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",[152],{"categoryNo":153,"categoryName":154,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000005","邮件与沟通",[148,87,156,23,90,25,26,88],"email",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":27},"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",[],[159,23,25,26,88,87,164,123],"options"]