[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSYC4YV9FD5M0PXSZPWMS8":3,"skill-same:01M6CSYC4YV9FD5M0PXSZPWMS8":73},{"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},"01M6CSYC4YV9FD5M0PXSZPWMS8","php:make-story",null,"Génère Story Foundry pour fixtures de 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-story\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27],"php","Story","php:make story","foundry","Bash","grep","read","write","edit","2026-11-10 10:12:30",false,"---\nname: php:make-story\ndescription: Génère Story Foundry pour fixtures de tests\nmodel: sonnet\nallowed-tools: [Bash, Read, Write, Edit, Grep, Glob]\nversion: 1.0.0\nlicense: MIT\n---\n\n# PHP Make Story Skill\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n\n## Description\nGénère une Story Foundry pour créer des fixtures de tests avec scénarios prédéfinis.\n\n## Usage\n```\nUse skill php:make-story\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\n## Dépendances\n- Entité dans `src\u002FEntity\u002F{EntityName}.php`\n- Factory (appelle `php:make-factory` si absente)\n- Contracts (StoryInterface)\n\n## Outputs\n- `src\u002FStory\u002F{EntityName}Story.php`\n- `src\u002FStory\u002FAppStory.php` (créé ou mis à jour)\n\n## Workflow\n\n1. Demander le nom de l'entité (EntityName)\n2. Vérifier que l'entité existe\n3. Vérifier\u002Fcréer la Factory\n4. Générer la Story depuis le template `templates\u002FStory\u002F`\n5. Créer ou mettre à jour AppStory\n6. Afficher les fichiers créés\n\n## Patterns appliqués\n\n### Story\n- Extends Story, Implements StoryInterface\n- Classe `final`\n- Méthode `build()` créant les fixtures via Factory\n\n### AppStory\n- Extends Story, Implements StoryInterface\n- Attribut #[AsFixture(name: 'main')]\n- Point d'entrée unique pour toutes les fixtures\n\n## References\n\n- [Usage](references\u002Fusage.md) - Scénarios complexes, relations et états nommés\n\n## Notes\n- AppStory est le point d'entrée pour charger toutes les fixtures\n- Stories peuvent avoir des dépendances (charger d'autres Stories)\n- `addState()` pour nommer des instances réutilisables dans les tests\n","# PHP Make Story Skill\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n\n## Description\nGénère une Story Foundry pour créer des fixtures de tests avec scénarios prédéfinis.\n\n## Usage\n```\nUse skill php:make-story\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\n## Dépendances\n- Entité dans `src\u002FEntity\u002F{EntityName}.php`\n- Factory (appelle `php:make-factory` si absente)\n- Contracts (StoryInterface)\n\n## Outputs\n- `src\u002FStory\u002F{EntityName}Story.php`\n- `src\u002FStory\u002FAppStory.php` (créé ou mis à jour)\n\n## Workflow\n\n1. Demander le nom de l'entité (EntityName)\n2. Vérifier que l'entité existe\n3. Vérifier\u002Fcréer la Factory\n4. Générer la Story depuis le template `templates\u002FStory\u002F`\n5. Créer ou mettre à jour AppStory\n6. Afficher les fichiers créés\n\n## Patterns appliqués\n\n### Story\n- Extends Story, Implements StoryInterface\n- Classe `final`\n- Méthode `build()` créant les fixtures via Factory\n\n### AppStory\n- Extends Story, Implements StoryInterface\n- Attribut #[AsFixture(name: 'main')]\n- Point d'entrée unique pour toutes les fixtures\n\n## References\n\n- [Usage](references\u002Fusage.md) - Scénarios complexes, relations et états nommés\n\n## Notes\n- AppStory est le point d'entrée pour charger toutes les fixtures\n- Stories peuvent avoir des dépendances (charger d'autres Stories)\n- `addState()` pour nommer des instances réutilisables dans les tests\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-story","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-story\"",{"tool":55,"command":56},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill \"php:make-story\"",{"tool":58,"command":59},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill \"php:make-story\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fphp\u002Fskills\u002Fmake-story\u002FSKILL.md",true,[63,69],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"SOURCE.md","REFERENCE","参考文档",208,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fwallet-portfolio-agent\u002FSOURCE.md",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"TRUST.auto.yaml",2217,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fwallet-portfolio-agent\u002FTRUST.auto.yaml",[74,85,125,132,140,151],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"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",[],[81,82,25,27,26,83,24,84,19,23],"twig:make component","component","ux","template",{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":107,"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",[91,96,99,102],{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":97,"categoryName":98,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":100,"categoryName":101,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":103,"categoryName":104,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[108,109,110,111,112,113,114,115,116,117,118,23,119,120,121,122,25,26,123,124],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","validation","messages","plan","tool","page","find","javascript","chrome",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"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",[],[127,23,24,25,26,27],{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"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",[],[134,139,23,24,25,26,27],"message",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":149,"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",[146],{"categoryNo":147,"categoryName":148,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000005","邮件与沟通",[142,27,150,23,84,24,25,26],"email",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"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",[],[153,23,24,25,26,27,158,117],"options"]