[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSY0QX5JDCT6MZV3BVX5CV":3,"skill-same:01M6CSY0QX5JDCT6MZV3BVX5CV":74},{"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":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":14,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6CSY0QX5JDCT6MZV3BVX5CV","php:make-contracts",null,"Génère les interfaces de contrats pour une architecture Elegant Objects","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\u002Fphp\u002Fskills\u002Fmake-contracts\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"php","contracts","php:make contracts","architecture","Bash","grep","read","write","edit","objects","2026-11-10 10:12:30",false,"---\nname: php:make-contracts\ndescription: Génère les interfaces de contrats pour une architecture Elegant Objects\nmodel: sonnet\nallowed-tools: [Bash, Read, Write, Edit, Grep, Glob]\nversion: 1.0.0\nlicense: MIT\n---\n\n# PHP Make Contracts Skill\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n\n## Description\nGénère l'ensemble des interfaces de contrats nécessaires pour une architecture respectant les principes Elegant Objects et DDD.\n\nCes interfaces servent de fondation pour toutes les autres skills du plugin.\n\n## Usage\n```\nUse skill php:make-contracts\n```\n\n## Templates\n- `OutInterface.php` - Interface pour objets de sortie (DTO)\n- `InvalideInterface.php` - Interface pour exceptions métier\n- `HasUrlsInterface.php` - Interface pour objets ayant des URLs\n- `OutDataInterface.php` - Interface pour data classes de sortie\n- `InvalideDataInterface.php` - Interface pour data classes d'invalidation\n- `UrlsDataInterface.php` - Interface pour data classes d'URLs\n- `Story\u002FStoryInterface.php` - Interface pour stories de tests\n- `Doctrine\u002FDoctrineMigrationInterface.php` - Interface pour migrations Doctrine\n\n## Variables requises\nAucune - Ces interfaces sont génériques et ne nécessitent pas de paramètres.\n\n## Dépendances\nAucune - C'est la première skill à exécuter (Niveau 0 - Fondation).\n\n## Outputs\n- `src\u002FContracts\u002FOutInterface.php`\n- `src\u002FContracts\u002FInvalideInterface.php`\n- `src\u002FContracts\u002FHasUrlsInterface.php`\n- `src\u002FContracts\u002FOutDataInterface.php`\n- `src\u002FContracts\u002FInvalideDataInterface.php`\n- `src\u002FContracts\u002FUrlsDataInterface.php`\n- `src\u002FContracts\u002FStory\u002FStoryInterface.php`\n- `src\u002FContracts\u002FDoctrine\u002FDoctrineMigrationInterface.php`\n\n## Workflow\n\n1. Vérifier si le répertoire `src\u002FContracts\u002F` existe\n2. Créer la structure de répertoires si nécessaire :\n   - `src\u002FContracts\u002F`\n   - `src\u002FContracts\u002FStory\u002F`\n   - `src\u002FContracts\u002FDoctrine\u002F`\n3. Copier tous les templates d'interfaces depuis `php\u002Fskills\u002Fmake-contracts\u002Ftemplates\u002FContracts\u002F` vers `src\u002FContracts\u002F`\n4. Afficher la liste des fichiers créés\n\n## Notes\n- Ces interfaces n'ont pas besoin d'être modifiées pour chaque projet\n- Elles doivent être créées une seule fois par projet\n- Toutes les autres skills du plugin dépendent de ces interfaces\n","# PHP Make Contracts Skill\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n\n## Description\nGénère l'ensemble des interfaces de contrats nécessaires pour une architecture respectant les principes Elegant Objects et DDD.\n\nCes interfaces servent de fondation pour toutes les autres skills du plugin.\n\n## Usage\n```\nUse skill php:make-contracts\n```\n\n## Templates\n- `OutInterface.php` - Interface pour objets de sortie (DTO)\n- `InvalideInterface.php` - Interface pour exceptions métier\n- `HasUrlsInterface.php` - Interface pour objets ayant des URLs\n- `OutDataInterface.php` - Interface pour data classes de sortie\n- `InvalideDataInterface.php` - Interface pour data classes d'invalidation\n- `UrlsDataInterface.php` - Interface pour data classes d'URLs\n- `Story\u002FStoryInterface.php` - Interface pour stories de tests\n- `Doctrine\u002FDoctrineMigrationInterface.php` - Interface pour migrations Doctrine\n\n## Variables requises\nAucune - Ces interfaces sont génériques et ne nécessitent pas de paramètres.\n\n## Dépendances\nAucune - C'est la première skill à exécuter (Niveau 0 - Fondation).\n\n## Outputs\n- `src\u002FContracts\u002FOutInterface.php`\n- `src\u002FContracts\u002FInvalideInterface.php`\n- `src\u002FContracts\u002FHasUrlsInterface.php`\n- `src\u002FContracts\u002FOutDataInterface.php`\n- `src\u002FContracts\u002FInvalideDataInterface.php`\n- `src\u002FContracts\u002FUrlsDataInterface.php`\n- `src\u002FContracts\u002FStory\u002FStoryInterface.php`\n- `src\u002FContracts\u002FDoctrine\u002FDoctrineMigrationInterface.php`\n\n## Workflow\n\n1. Vérifier si le répertoire `src\u002FContracts\u002F` existe\n2. Créer la structure de répertoires si nécessaire :\n   - `src\u002FContracts\u002F`\n   - `src\u002FContracts\u002FStory\u002F`\n   - `src\u002FContracts\u002FDoctrine\u002F`\n3. Copier tous les templates d'interfaces depuis `php\u002Fskills\u002Fmake-contracts\u002Ftemplates\u002FContracts\u002F` vers `src\u002FContracts\u002F`\n4. Afficher la liste des fichiers créés\n\n## Notes\n- Ces interfaces n'ont pas besoin d'être modifiées pour chaque projet\n- Elles doivent être créées une seule fois par projet\n- Toutes les autres skills du plugin dépendent de ces interfaces\n",{"name":5,"model":34,"license":15,"version":35,"description":7,"allowed-tools":36},"sonnet","1.0.0",[23,37,38,39,40,41],"Read","Write","Edit","Grep","Glob","main","bb0335112ea0991dc1dc6a29fa5a861397a5a6f6","php\u002Fskills\u002Fmake-contracts","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":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add atournayre\u002Fclaude-personas --skill \"php:make-contracts\"",{"tool":56,"command":57},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill \"php:make-contracts\"",{"tool":59,"command":60},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill \"php:make-contracts\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fphp\u002Fskills\u002Fmake-contracts\u002FSKILL.md",true,[64,70],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"evals\u002Fdomain-truth.json","REFERENCE","参考文档",1882,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fscenario-modeling\u002Fevals\u002Fdomain-truth.json",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"evals\u002Fevals.json",845,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fscenario-modeling\u002Fevals\u002Fevals.json",[75,86,126,133,141,152],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":29},"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",[],[82,83,25,27,26,84,24,85,19,23],"twig:make component","component","ux","template",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":108,"publishedAt":29},"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",[92,97,100,103],{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":98,"categoryName":99,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":101,"categoryName":102,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[109,110,111,112,113,114,115,116,117,118,119,23,120,121,122,123,25,26,124,125],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","validation","messages","plan","tool","page","find","javascript","chrome",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":29},"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",[],[128,23,24,25,26,27],{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":29},"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",[],[135,140,23,24,25,26,27],"message",{"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":150,"publishedAt":29},"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",[147],{"categoryNo":148,"categoryName":149,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000005","邮件与沟通",[143,27,151,23,85,24,25,26],"email",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":29},"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",[],[154,23,24,25,26,27,159,118],"options"]