[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSTKYWJPCN28PDG65BWE07":3,"skill-same:01M6CSTKYWJPCN28PDG65BWE07":66},{"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":24,"linkOnly":25,"markdownContent":26,"markdownBody":27,"frontMatter":28,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":14,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":44,"updatedAt":45,"install":46,"resources":59},"01M6CSTKYWJPCN28PDG65BWE07","architect:plan",null,"Générer plan d'implémentation détaillé dans docs\u002Fspecs\u002F - Phase 4 (supporte le mode automatique)","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\u002Farchitect\u002Fskills\u002Fplan\u002FSKILL.md",[],[19,20,5,21,22,23],"architect","plan","docs","read","write","2026-11-10 10:12:30",false,"---\nname: architect:plan\ndescription: Générer plan d'implémentation détaillé dans docs\u002Fspecs\u002F - Phase 4 (supporte le mode automatique)\nmodel: sonnet\nallowed-tools: [Write, Read, Glob, TaskCreate, TaskUpdate, TaskList]\nversion: 1.0.0\nlicense: MIT\n---\n\n# Générer le plan d'implémentation (Phase 4)\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\nPhase 4 du workflow de développement : générer un plan d'implémentation détaillé basé sur l'architecture choisie.\n\n# Instructions\n\n## 1. Créer les tâches de planification (mode interactif)\n\nEn mode interactif, utiliser `TaskCreate` pour chaque étape :\n\n```\nTaskCreate #1: Lire le contexte du workflow\nTaskCreate #2: Créer le répertoire docs\u002Fspecs\nTaskCreate #3: Générer le plan d'implémentation\nTaskCreate #4: Afficher le résumé\nTaskCreate #5: Mettre à jour le workflow state\n```\n\n## 2. Lire le contexte\n\n- Lire `.claude\u002Fdata\u002F.dev-workflow-state.json` pour récupérer :\n  - La feature description\n  - Les décisions de clarification (phase 2)\n  - L'architecture choisie (phase 3)\n- Si phases précédentes non complétées, rediriger ou exit 1 (mode automatique)\n\n## 3. Créer le répertoire si nécessaire\n\n```bash\nmkdir -p docs\u002Fspecs\n```\n\n## 4. Générer le plan\n\nCréer le fichier `docs\u002Fspecs\u002Ffeature-{nom-kebab-case}.md` avec la structure suivante :\n\n```markdown\n# Plan d'implémentation : {Feature Name}\n\n## Résumé\n\n**Feature :** {description}\n**Approche :** {nom de l'approche choisie}\n**Date :** {date du jour}\n\n## Contexte\n\n### Problème résolu\n{description du problème}\n\n### Décisions prises\n- {décision 1}\n- {décision 2}\n\n## Architecture\n\n### Composants\n| Composant | Responsabilité | Fichier |\n|-----------|---------------|---------|\n| {nom} | {description} | `{chemin}` |\n\n### Diagramme de flux\n```\n{représentation ASCII du flux}\n```\n\n## Plan d'implémentation\n\n### Étape 1 : {titre}\n- [ ] {tâche 1}\n- [ ] {tâche 2}\n\n**Fichiers :**\n- `{chemin}` : {description}\n\n### Étape 2 : {titre}\n- [ ] {tâche 1}\n- [ ] {tâche 2}\n\n**Fichiers :**\n- `{chemin}` : {description}\n\n## Tests\n\n### Tests unitaires\n- [ ] {test 1}\n- [ ] {test 2}\n\n### Tests d'intégration\n- [ ] {test 1}\n```\n\n## 5. Mettre à jour le workflow state\n\n```json\n{\n  \"currentPhase\": 4,\n  \"phases\": {\n    \"4\": {\n      \"status\": \"completed\",\n      \"completedAt\": \"{ISO timestamp}\",\n      \"durationMs\": \"{durée}\",\n      \"planPath\": \"docs\u002Fspecs\u002Ffeature-{nom-kebab-case}.md\",\n      \"components\": [\"{liste des composants}\"],\n      \"implementationSteps\": \"{nombre}\"\n    }\n  }\n}\n```\n\n# Règles\n\n- Le plan doit être **actionnable** (pas de descriptions vagues)\n- Chaque étape doit avoir des **fichiers** et des **tâches** clairs\n- Les tests doivent être **spécifiés** avant l'implémentation\n- Respecter les **conventions du projet** (CLAUDE.md)\n- En mode automatique : aucune interaction, exit 1 si phases précédentes manquantes\n\n# Prochaine étape\n\n```\nPlan généré : docs\u002Fspecs\u002Ffeature-{nom}.md\n\nProchaine étape : implémenter selon le plan\n\nL'implémentation nécessite ton approbation explicite.\n```\n","# Générer le plan d'implémentation (Phase 4)\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\nPhase 4 du workflow de développement : générer un plan d'implémentation détaillé basé sur l'architecture choisie.\n\n# Instructions\n\n## 1. Créer les tâches de planification (mode interactif)\n\nEn mode interactif, utiliser `TaskCreate` pour chaque étape :\n\n```\nTaskCreate #1: Lire le contexte du workflow\nTaskCreate #2: Créer le répertoire docs\u002Fspecs\nTaskCreate #3: Générer le plan d'implémentation\nTaskCreate #4: Afficher le résumé\nTaskCreate #5: Mettre à jour le workflow state\n```\n\n## 2. Lire le contexte\n\n- Lire `.claude\u002Fdata\u002F.dev-workflow-state.json` pour récupérer :\n  - La feature description\n  - Les décisions de clarification (phase 2)\n  - L'architecture choisie (phase 3)\n- Si phases précédentes non complétées, rediriger ou exit 1 (mode automatique)\n\n## 3. Créer le répertoire si nécessaire\n\n```bash\nmkdir -p docs\u002Fspecs\n```\n\n## 4. Générer le plan\n\nCréer le fichier `docs\u002Fspecs\u002Ffeature-{nom-kebab-case}.md` avec la structure suivante :\n\n```markdown\n# Plan d'implémentation : {Feature Name}\n\n## Résumé\n\n**Feature :** {description}\n**Approche :** {nom de l'approche choisie}\n**Date :** {date du jour}\n\n## Contexte\n\n### Problème résolu\n{description du problème}\n\n### Décisions prises\n- {décision 1}\n- {décision 2}\n\n## Architecture\n\n### Composants\n| Composant | Responsabilité | Fichier |\n|-----------|---------------|---------|\n| {nom} | {description} | `{chemin}` |\n\n### Diagramme de flux\n```\n{représentation ASCII du flux}\n```\n\n## Plan d'implémentation\n\n### Étape 1 : {titre}\n- [ ] {tâche 1}\n- [ ] {tâche 2}\n\n**Fichiers :**\n- `{chemin}` : {description}\n\n### Étape 2 : {titre}\n- [ ] {tâche 1}\n- [ ] {tâche 2}\n\n**Fichiers :**\n- `{chemin}` : {description}\n\n## Tests\n\n### Tests unitaires\n- [ ] {test 1}\n- [ ] {test 2}\n\n### Tests d'intégration\n- [ ] {test 1}\n```\n\n## 5. Mettre à jour le workflow state\n\n```json\n{\n  \"currentPhase\": 4,\n  \"phases\": {\n    \"4\": {\n      \"status\": \"completed\",\n      \"completedAt\": \"{ISO timestamp}\",\n      \"durationMs\": \"{durée}\",\n      \"planPath\": \"docs\u002Fspecs\u002Ffeature-{nom-kebab-case}.md\",\n      \"components\": [\"{liste des composants}\"],\n      \"implementationSteps\": \"{nombre}\"\n    }\n  }\n}\n```\n\n# Règles\n\n- Le plan doit être **actionnable** (pas de descriptions vagues)\n- Chaque étape doit avoir des **fichiers** et des **tâches** clairs\n- Les tests doivent être **spécifiés** avant l'implémentation\n- Respecter les **conventions du projet** (CLAUDE.md)\n- En mode automatique : aucune interaction, exit 1 si phases précédentes manquantes\n\n# Prochaine étape\n\n```\nPlan généré : docs\u002Fspecs\u002Ffeature-{nom}.md\n\nProchaine étape : implémenter selon le plan\n\nL'implémentation nécessite ton approbation explicite.\n```\n",{"name":5,"model":29,"license":15,"version":30,"description":7,"allowed-tools":31},"sonnet","1.0.0",[32,33,34,35,36,37],"Write","Read","Glob","TaskCreate","TaskUpdate","TaskList","main","bb0335112ea0991dc1dc6a29fa5a861397a5a6f6","architect\u002Fskills\u002Fplan","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":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add atournayre\u002Fclaude-personas --skill \"architect:plan\"",{"tool":52,"command":53},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill \"architect:plan\"",{"tool":55,"command":56},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill \"architect:plan\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Farchitect\u002Fskills\u002Fplan\u002FSKILL.md",true,[60],{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":65},"evals\u002Ftriggers.json","REFERENCE","参考文档",1527,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fprompt-validator\u002Fevals\u002Ftriggers.json",[67,82,121,128,136,147],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":24},"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",[],[74,75,22,76,23,77,78,79,80,81],"twig:make component","component","edit","ux","grep","template","php","Bash",{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":104,"publishedAt":24},"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",[88,93,96,99],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":94,"categoryName":95,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":97,"categoryName":98,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[105,106,107,108,109,110,111,112,113,114,115,81,20,116,117,118,22,23,119,120],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","validation","messages","tool","page","find","javascript","chrome",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":24},"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",[],[123,81,78,22,23,76],{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":24},"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",[],[130,135,81,78,22,23,76],"message",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":145,"publishedAt":24},"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",[142],{"categoryNo":143,"categoryName":144,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000005","邮件与沟通",[138,76,146,81,79,78,22,23],"email",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":24},"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",[],[149,81,78,22,23,76,154,114],"options"]