[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CSV47XJMQ8EXKB2XWNP3YE":3,"skill-same:01M6CSV47XJMQ8EXKB2XWNP3YE":91},{"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":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":54,"commitSha":55,"skillDirectory":56,"forksCount":14,"repositoryHtmlUrl":57,"repositoryHomepageUrl":58,"ownerHtmlUrl":59,"ownerBlogUrl":6,"ownerDescription":60,"updatedAt":61,"install":62,"resources":75},"01M6CSV47XJMQ8EXKB2XWNP3YE","devops:pr",null,"Crée une Pull Request GitHub standard avec workflow complet : QA, commits, assignation milestone\u002Fprojet, code review 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\u002Fdevops\u002Fskills\u002Fpr\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[24,25,5,26,27,28,29,30,31,32,33,34,35,36,37,38],"pr","devops","code review","review","github","workflow","pull request","code","qa","pull","commits","Bash","read","write","milestone","2026-11-10 10:12:30",false,"---\nname: devops:pr\ndescription: >\n  Crée une Pull Request GitHub standard avec workflow complet :\n  QA, commits, assignation milestone\u002Fprojet, code review automatique.\nallowed-tools: [Bash, Read, Write, TaskCreate, TaskUpdate, TaskList, AskUserQuestion]\nmodel: sonnet\nversion: 1.0.0\nlicense: MIT\n---\n\n# DevOps PR Skill (Standard)\n\n## Usage\n```\n\u002Fdevops:pr [branche-base] [milestone] [projet] [--no-interaction] [--delete] [--no-review]\n```\n\n## Configuration\n\n```bash\nCORE_SCRIPTS=\"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\"\nPR_TEMPLATE_PATH=\".github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md\"\nENV_FILE_PATH=\".env.claude\"\n```\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n### Initialisation\n\n**Créer les tâches du workflow avec TaskCreate :**\n\n```\nTaskCreate #1: Charger config .env.claude\nTaskCreate #2: Confirmation initiale (si --no-interaction absent)\nTaskCreate #3: Vérifier scopes GitHub\nTaskCreate #4: Vérifier template PR\nTaskCreate #5: Lancer QA intelligente\nTaskCreate #6: Analyser changements git\nTaskCreate #7: Confirmer branche de base\nTaskCreate #8: Générer description PR\nTaskCreate #9: Push et créer PR\nTaskCreate #10: Assigner milestone\nTaskCreate #11: Assigner projet GitHub\nTaskCreate #12: Code review automatique (si plugin installé)\nTaskCreate #13: Nettoyage branche locale\n```\n\n**Important :**\n- Utiliser `activeForm` (ex: \"Chargeant config\", \"Vérifiant scopes GitHub\")\n- Ne créer la tâche #12 que si plugin review installé ET `--no-review` absent\n- Chaque tâche doit être marquée `in_progress` puis `completed`\n\n### Étapes\n\n1. **Charger configuration depuis `.env.claude`** :\n   - Parser les variables `MAIN_BRANCH` et `PROJECT`\n   - Ignorer si absent\n\n2. **Confirmation initiale** :\n   - Si `--no-interaction` : passer toutes les confirmations\n   - Sinon : résumer paramètres et demander confirmation\n\n3. Vérifier scopes GitHub (`$CORE_SCRIPTS\u002Fcheck_scopes.sh`)\n4. Vérifier template PR (`$CORE_SCRIPTS\u002Fverify_pr_template.sh`)\n5. Lancer QA intelligente (`$CORE_SCRIPTS\u002Fsmart_qa.sh`)\n6. Analyser changements git (`$CORE_SCRIPTS\u002Fanalyze_changes.sh`)\n7. Confirmer branche de base (ou `AskUserQuestion`)\n8. Générer titre PR via `$PR_SCRIPTS\u002Fgenerate_pr_title.sh` :\n   ```bash\n   TITLE=$($PR_SCRIPTS\u002Fgenerate_pr_title.sh)\n   EXIT_CODE=$?\n   ```\n   - Exit 0 → titre prêt (issue extraite du nom de branche)\n   - Exit 2 → `AskUserQuestion` \"Cette PR est-elle liée à une issue ?\" avec options :\n     - \"Oui, numéro : ___\" → relancer avec `--issue \u003CN>`\n     - \"Non\" → relancer avec `--no-issue`\n   - Générer ensuite la description PR intelligente\n9. Push et créer PR (`$CORE_SCRIPTS\u002Fcreate_pr.sh`)\n10. Assigner milestone (`$CORE_SCRIPTS\u002Fassign_milestone.py`)\n11. Assigner projet GitHub (`$CORE_SCRIPTS\u002Fassign_project.py`)\n12. Code review automatique (si plugin review installé)\n13. Nettoyage branche locale (`$CORE_SCRIPTS\u002Fcleanup_branch.sh`)\n\n## Code Review\n\nSi plugin `review` installé, lance 4 agents en parallèle :\n- `code-reviewer` - Conformité CLAUDE.md\n- `silent-failure-hunter` - Erreurs silencieuses\n- `test-analyzer` - Couverture tests\n- `git-history-reviewer` - Contexte historique\n\nAgrège résultats (score >= 80) dans commentaire PR.\n\n## Options\n\n| Flag | Description |\n|------|-------------|\n| `--no-interaction` | Mode automatique : passer confirmations, utiliser defaults |\n| `--delete` | Supprimer branche LOCALE uniquement après création PR |\n| `--no-review` | Désactiver code review automatique |\n\n## Règles critiques\n\n**INTERDICTION ABSOLUE** :\n- Ne JAMAIS exécuter `git push origin --delete \u003Cbranche>` ou `git push -d origin \u003Cbranche>`\n- Ne JAMAIS supprimer la branche remote (fermerait automatiquement la PR)\n- Le flag `--delete` ne concerne QUE la branche locale\n\n## Error Handling\n\n- Template absent -> ARRÊT\n- QA échouée -> ARRÊT\n- Milestone\u002Fprojet non trouvé -> WARNING (non bloquant)\n","# DevOps PR Skill (Standard)\n\n## Usage\n```\n\u002Fdevops:pr [branche-base] [milestone] [projet] [--no-interaction] [--delete] [--no-review]\n```\n\n## Configuration\n\n```bash\nCORE_SCRIPTS=\"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\"\nPR_TEMPLATE_PATH=\".github\u002FPULL_REQUEST_TEMPLATE\u002Fdefault.md\"\nENV_FILE_PATH=\".env.claude\"\n```\n\n## Instructions à Exécuter\n\n**IMPORTANT : Exécute ce workflow étape par étape :**\n\n### Initialisation\n\n**Créer les tâches du workflow avec TaskCreate :**\n\n```\nTaskCreate #1: Charger config .env.claude\nTaskCreate #2: Confirmation initiale (si --no-interaction absent)\nTaskCreate #3: Vérifier scopes GitHub\nTaskCreate #4: Vérifier template PR\nTaskCreate #5: Lancer QA intelligente\nTaskCreate #6: Analyser changements git\nTaskCreate #7: Confirmer branche de base\nTaskCreate #8: Générer description PR\nTaskCreate #9: Push et créer PR\nTaskCreate #10: Assigner milestone\nTaskCreate #11: Assigner projet GitHub\nTaskCreate #12: Code review automatique (si plugin installé)\nTaskCreate #13: Nettoyage branche locale\n```\n\n**Important :**\n- Utiliser `activeForm` (ex: \"Chargeant config\", \"Vérifiant scopes GitHub\")\n- Ne créer la tâche #12 que si plugin review installé ET `--no-review` absent\n- Chaque tâche doit être marquée `in_progress` puis `completed`\n\n### Étapes\n\n1. **Charger configuration depuis `.env.claude`** :\n   - Parser les variables `MAIN_BRANCH` et `PROJECT`\n   - Ignorer si absent\n\n2. **Confirmation initiale** :\n   - Si `--no-interaction` : passer toutes les confirmations\n   - Sinon : résumer paramètres et demander confirmation\n\n3. Vérifier scopes GitHub (`$CORE_SCRIPTS\u002Fcheck_scopes.sh`)\n4. Vérifier template PR (`$CORE_SCRIPTS\u002Fverify_pr_template.sh`)\n5. Lancer QA intelligente (`$CORE_SCRIPTS\u002Fsmart_qa.sh`)\n6. Analyser changements git (`$CORE_SCRIPTS\u002Fanalyze_changes.sh`)\n7. Confirmer branche de base (ou `AskUserQuestion`)\n8. Générer titre PR via `$PR_SCRIPTS\u002Fgenerate_pr_title.sh` :\n   ```bash\n   TITLE=$($PR_SCRIPTS\u002Fgenerate_pr_title.sh)\n   EXIT_CODE=$?\n   ```\n   - Exit 0 → titre prêt (issue extraite du nom de branche)\n   - Exit 2 → `AskUserQuestion` \"Cette PR est-elle liée à une issue ?\" avec options :\n     - \"Oui, numéro : ___\" → relancer avec `--issue \u003CN>`\n     - \"Non\" → relancer avec `--no-issue`\n   - Générer ensuite la description PR intelligente\n9. Push et créer PR (`$CORE_SCRIPTS\u002Fcreate_pr.sh`)\n10. Assigner milestone (`$CORE_SCRIPTS\u002Fassign_milestone.py`)\n11. Assigner projet GitHub (`$CORE_SCRIPTS\u002Fassign_project.py`)\n12. Code review automatique (si plugin review installé)\n13. Nettoyage branche locale (`$CORE_SCRIPTS\u002Fcleanup_branch.sh`)\n\n## Code Review\n\nSi plugin `review` installé, lance 4 agents en parallèle :\n- `code-reviewer` - Conformité CLAUDE.md\n- `silent-failure-hunter` - Erreurs silencieuses\n- `test-analyzer` - Couverture tests\n- `git-history-reviewer` - Contexte historique\n\nAgrège résultats (score >= 80) dans commentaire PR.\n\n## Options\n\n| Flag | Description |\n|------|-------------|\n| `--no-interaction` | Mode automatique : passer confirmations, utiliser defaults |\n| `--delete` | Supprimer branche LOCALE uniquement après création PR |\n| `--no-review` | Désactiver code review automatique |\n\n## Règles critiques\n\n**INTERDICTION ABSOLUE** :\n- Ne JAMAIS exécuter `git push origin --delete \u003Cbranche>` ou `git push -d origin \u003Cbranche>`\n- Ne JAMAIS supprimer la branche remote (fermerait automatiquement la PR)\n- Le flag `--delete` ne concerne QUE la branche locale\n\n## Error Handling\n\n- Template absent -> ARRÊT\n- QA échouée -> ARRÊT\n- Milestone\u002Fprojet non trouvé -> WARNING (non bloquant)\n",{"name":5,"model":44,"license":15,"version":45,"description":46,"allowed-tools":47},"sonnet","1.0.0","Crée une Pull Request GitHub standard avec workflow complet : QA, commits, assignation milestone\u002Fprojet, code review automatique.\n",[35,48,49,50,51,52,53],"Read","Write","TaskCreate","TaskUpdate","TaskList","AskUserQuestion","main","bb0335112ea0991dc1dc6a29fa5a861397a5a6f6","devops\u002Fskills\u002Fpr","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":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add atournayre\u002Fclaude-personas --skill \"devops:pr\"",{"tool":68,"command":69},"bunx","bunx skills add atournayre\u002Fclaude-personas --skill \"devops:pr\"",{"tool":71,"command":72},"pnpm","pnpm dlx skills add atournayre\u002Fclaude-personas --skill \"devops:pr\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fatournayre\u002Fclaude-personas\u002Fblob\u002Fmain\u002Fdevops\u002Fskills\u002Fpr\u002FSKILL.md",true,[76,82,87],{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"example.html","REFERENCE","参考文档",89752,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FPPT-Design\u002Fopen-design-html-ppt-zhangzara-signal\u002Fexample.html",{"path":83,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"LICENSE","许可证",1067,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FPPT-Design\u002Fopen-design-html-ppt-zhangzara-signal\u002FLICENSE",{"path":88,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":89,"sourceHtmlUrl":90},"template.json",1789,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FPPT-Design\u002Fopen-design-html-ppt-zhangzara-signal\u002Ftemplate.json",[92,106,144,151,159,170],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":39},"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",[],[99,100,36,101,37,102,103,104,105,35],"twig:make component","component","edit","ux","grep","template","php",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":126,"publishedAt":39},"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",[112,115,118,121],{"categoryNo":113,"categoryName":114,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":116,"categoryName":117,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":119,"categoryName":120,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[127,128,129,130,131,132,133,134,135,136,137,35,138,139,140,141,36,37,142,143],"test","ui","tester","ui test","tester:ui test","MCP","debug","create","update","validation","messages","plan","tool","page","find","javascript","chrome",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":39},"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",[],[146,35,103,36,37,101],{"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":39},"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",[],[153,158,35,103,36,37,101],"message",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":168,"publishedAt":39},"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",[165],{"categoryNo":166,"categoryName":167,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通",[161,101,169,35,104,103,36,37],"email",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":176,"publishedAt":39},"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",[],[172,35,103,36,37,101,177,136],"options"]