[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSY5PCPXSA7V7YYP8TGH3H":3,"skill-same:01M6CSY5PCPXSA7V7YYP8TGH3H":63},{"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":41,"commitSha":42,"skillDirectory":43,"forksCount":14,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M6CSY5PCPXSA7V7YYP8TGH3H","php:make-factory",null,"Génère Factory Foundry pour tests","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-factory\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27],"php","factory","php:make factory","foundry","Bash","grep","read","write","edit","2026-11-10 10:12:30",false,"---\nname: php:make-factory\ndescription: Génère Factory Foundry pour tests\nmodel: sonnet\nallowed-tools: [Bash, Read, Write, Edit, Grep, Glob]\nversion: 1.0.0\nlicense: MIT\n---\n\n# PHP Make Factory Skill\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n\n## Description\nGénère une Factory Foundry pour créer des instances d'entités dans les tests.\n\n## Usage\n```\nUse skill php:make-factory\n```\n\n## Variables requises\n- **{EntityName}** - Nom de l'entité en PascalCase (ex: Product)\n- **{entityName}** - Nom de l'entité en camelCase (ex: product)\n- **{namespace}** - Namespace du projet (défaut: App)\n- **{properties}** - Liste des propriétés pour `defaults()`\n\n## Dépendances\n- Entité dans `src\u002FEntity\u002F{EntityName}.php`\n- Zenstruck Foundry installé\n\n## Outputs\n- `src\u002FFactory\u002F{EntityName}Factory.php`\n\n## Workflow\n\n1. Demander le nom de l'entité (EntityName)\n2. Vérifier que l'entité existe\n3. Lire l'entité pour détecter les propriétés du constructeur `create()`\n4. Générer la factory depuis le template `templates\u002FFactory\u002F`\n5. Afficher le fichier créé\n\n## Patterns appliqués\n\n- Extends PersistentObjectFactory, classe `final`\n- Méthode `class()` retournant FQCN\n- Méthode `defaults()` avec valeurs Faker\n- Méthode `initialize()` avec `instantiateWith()` appelant `Entity::create()`\n- Méthodes custom (ex: `withSpecificId()`, `inactive()`)\n\n## References\n\n- [Usage](references\u002Fusage.md) - Exemples de tests et valeurs Faker recommandées\n\n## Notes\n- Utilise `instantiateWith()` pour respecter Elegant Objects (pas de `new Entity()`)\n- Faker via `self::faker()`\n- Méthodes custom uniquement si demandées (YAGNI)\n- Persiste par défaut, `withoutPersisting()` si besoin\n","# PHP Make Factory Skill\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n\n## Description\nGénère une Factory Foundry pour créer des instances d'entités dans les tests.\n\n## Usage\n```\nUse skill php:make-factory\n```\n\n## Variables requises\n- **{EntityName}** - Nom de l'entité en PascalCase (ex: Product)\n- **{entityName}** - Nom de l'entité en camelCase (ex: product)\n- **{namespace}** - Namespace du projet (défaut: App)\n- **{properties}** - Liste des propriétés pour `defaults()`\n\n## Dépendances\n- Entité dans `src\u002FEntity\u002F{EntityName}.php`\n- Zenstruck Foundry installé\n\n## Outputs\n- `src\u002FFactory\u002F{EntityName}Factory.php`\n\n## Workflow\n\n1. Demander le nom de l'entité (EntityName)\n2. Vérifier que l'entité existe\n3. Lire l'entité pour détecter les propriétés du constructeur `create()`\n4. Générer la factory depuis le template `templates\u002FFactory\u002F`\n5. Afficher le fichier créé\n\n## Patterns appliqués\n\n- Extends PersistentObjectFactory, classe `final`\n- Méthode `class()` retournant FQCN\n- Méthode `defaults()` avec valeurs Faker\n- Méthode `initialize()` avec `instantiateWith()` appelant `Entity::create()`\n- Méthodes custom (ex: `withSpecificId()`, `inactive()`)\n\n## References\n\n- [Usage](references\u002Fusage.md) - Exemples de tests et valeurs Faker recommandées\n\n## Notes\n- Utilise `instantiateWith()` pour respecter Elegant Objects (pas de `new Entity()`)\n- Faker via `self::faker()`\n- Méthodes custom uniquement si demandées (YAGNI)\n- Persiste par défaut, `withoutPersisting()` si besoin\n",{"name":5,"model":33,"license":15,"version":34,"description":7,"allowed-tools":35},"sonnet","1.0.0",[23,36,37,38,39,40],"Read","Write","Edit","Grep","Glob","main","bb0335112ea0991dc1dc6a29fa5a861397a5a6f6","php\u002Fskills\u002Fmake-factory","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":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add atournayre\u002Fclaude-personas --skill \"php:make-factory\"",{"tool":55,"command":56},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill \"php:make-factory\"",{"tool":58,"command":59},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill \"php:make-factory\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fphp\u002Fskills\u002Fmake-factory\u002FSKILL.md",true,[],[64,75,115,122,130,141],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"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",[],[71,72,25,27,26,73,24,74,19,23],"twig:make component","component","ux","template",{"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":97,"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",[81,86,89,92],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":87,"categoryName":88,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":90,"categoryName":91,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[98,99,100,101,102,103,104,105,106,107,108,23,109,110,111,112,25,26,113,114],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","validation","messages","plan","tool","page","find","javascript","chrome",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"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",[],[117,23,24,25,26,27],{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"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",[],[124,129,23,24,25,26,27],"message",{"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":139,"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",[136],{"categoryNo":137,"categoryName":138,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000005","邮件与沟通",[132,27,140,23,74,24,25,26],"email",{"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":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",[],[143,23,24,25,26,27,148,107],"options"]