Développeur de Plugin FSWP
Fondamental (toujours appliqué) : fswp-developer/references/lean-coding.md (écrivez moins, réutilisez d'abord), fswp-developer/references/coding-standards.md (normes de codage, documentation, i18n, accessibilité), et fswp-security-engineer (entrée, sortie, autorisation).
Exécute un PRD approuvé (fswp-architect). Le préfixe, la cible de distribution, la surface de fonctionnalités et le niveau JS sont déjà décidés ; ne demandez pas à nouveau. Pour chaque étape, chargez la compétence de domaine pour la procédure générale et la référence de cette compétence pour la profondeur des normes internes, les modèles et les règles plus strictes. Préséance : fswp-developer/references/precedence.md.
Pour les modifications d'un plugin existant, utilisez fswp-maintainer à la place ; il fait appel ici uniquement pour les modèles de structure.
Couches
1 BOOTSTRAP plugin-slug.php, uninstall.php, includes/class-plugin.php (pas de logique métier)
2 LIFECYCLE Activator / Deactivator (hook d'activation, dbDelta, vérification de mise à jour)
3 DOMAINE CPTs, tables, routes REST, cron : uniquement ce que le PRD liste
4a ADMIN UI wp-admin natif par défaut ; @wordpress/components pour un écran React ;
React SPA + Tailwind + TanStack Query + Zustand uniquement pour une admin de type application
4b PUBLIC UI Atomic Framework (fourni par l'utilisateur), vanilla JS par défaut, Alpine en option
L'interface d'administration n'utilise jamais les classes Atomic Framework ou Alpine. Ne créez jamais de classes de fonctionnalités inutilisées.
Flux de travail
| Étape | Action | Référence interne | Compétence de domaine |
|---|---|---|---|
| 1 Échafaudage | Déduire le slug, le préfixe, les noms de classe, le domaine de texte ; exécuter scripts/scaffold_plugin.py --help d'abord. Passer --plugin-uri et --author-uri uniquement s'ils sont réels (la ligne est supprimée sinon, jamais un domaine fictif). Exécuter fswp-qa-engineer/scripts/run_gate.sh <dir> <min-php> --fix juste après l'échafaudage : les modèles contiennent des marqueurs {{...}} que le formateur ne peut pas reformater en toute sécurité avant la substitution. | architecture.md | aucun |
| 2 Bootstrap + lifecycle | Bootstrap déclare l'en-tête, l'autoload, et transmet la main à la classe principale | architecture.md | aucun |
| 3 Sécurité | Ligne de base complète sur chaque fichier, quelle que soit la taille du plugin | fswp-security-engineer | fswp-security-engineer |
| 4 Domaine | CPTs, tables (dbDelta, versions de schéma), REST, cron | data-cpt.md, rest-cron.md | fswp-api-developer ; fswp-performance-engineer si le PRD le nécessite |
| 5 Blocs (si dans le PRD) | Blocs personnalisés, motifs, interactivité | aucun | fswp-block-developer |
| 6 Admin UI | API Settings, WP_List_Table, Dashicons ; escalader uniquement selon la liste de contrôle | admin-ui.md, modern-app-stack.md | aucun |
| 7 Sortie publique | Demander d'abord à l'utilisateur les fichiers actuels de l'Atomic Framework ; enqueue conditionnel à l'intérieur du callback | frontend-output.md | aucun |
| 8 i18n + distribution | Chaque chaîne PHP et JS ; readme ; licence ; versioning | i18n-distribution.md | fswp-release-manager pour WordPress.org |
Arrêtez-vous à la fin de l'étape 8 et passez à fswp-qa-engineer.
Structure des modules complémentaires
Lorsque fswp-maintainer s'exécute en mode add-on, il réutilise les étapes 1-3 et 8 ici. Les règles supplémentaires pour les add-ons (détection de l'hôte, Requires Plugins, ordre de chargement, absence gracieuse) se trouvent dans fswp-maintainer.
Normes (chaque construction, chaque itération)
references/standards.md régit la discipline de versioning/changelog, la décision de la pile technologique, les métadonnées requises du projet (n'inventez jamais une valeur manquante), la documentation par fonctionnalité dans docs/, la barre de qualité du code, et la discipline de code minimal (ordre décider-avant-d'écrire, corrections de cause racine, marqueurs shortcut:). Lisez-le avant la première construction et avant toute itération sur un plugin existant – ce n'est pas une étape de configuration unique.
Posture de sécurité
Jamais réduite pour les petits plugins : vérifications de capacité sur chaque action privilégiée, nonces sur chaque changement d'état, assainir l'entrée et échapper la sortie, $wpdb->prepare() sur chaque requête, un permission_callback réel sur chaque route REST, cycle de vie sûr, pas de secrets en clair. Règles complètes : fswp-security-engineer.
Niveau Alpine
Jamais déduit. Sélectionné uniquement par la liste de contrôle en 5 points dans references/frontend-output.md, et seulement après que l'utilisateur a explicitement confirmé avoir vu quel élément l'a déclenché et à quoi ressemble l'alternative vanilla.
Atomic Framework (fourni par l'utilisateur, pas regroupé)
C'est un produit maintenu séparément ; une copie regroupée dériverait. Chaque fois que la construction inclut frontend, demandez les fichiers actuels afw-tokens.css, afw-components.css, afw-foundation-logics.js (plus alpine.min.js, alpine-loader.js, alpine-components.js uniquement si le niveau Alpine a été confirmé). L'échafaudage les copie via --foundation-dir et s'arrête avec un rappel s'il est manquant.
Dépendances
Tout sauf l'Atomic Framework (niveau 2 @wordpress/*, pile niveau 3) est résolu à latest depuis son registre officiel au moment de l'échafaudage, puis épinglé : validez le fichier de verrouillage et enregistrez les versions résolues dans le README. Latest-at-scaffold plus un fichier de verrouillage validé satisfait la règle de source reproductible de WordPress.org. Exception : un plafond de compatibilité déclaré par l'utilisateur. Détails : references/modern-app-stack.md.
Livrable
Fichier {plugin-slug}.zip installable (dossier du plugin à la racine du zip) plus readme.txt et/ou README.md privé avec de vraies étapes d'installation, et un bref résumé : préfixe et décisions de fonctionnalités, étapes manuelles encore nécessaires (clés API, intervalle cron, paramètres initiaux). La sortie compilée est livrée avec sa source (references/modern-app-stack.md).
Inclus
scripts/scaffold_plugin.py:--features cpt,db,rest,cron,admin,frontend(n'importe quel sous-ensemble),--js-tier vanilla|alpine,--admin-tier native|react|app,--distribution wporg|private|both,--plugin-uri,--author-uri,--foundation-dir,--zip.assets/templates/: squelette de plugin avec les marqueurs{{PREFIX}},{{Prefix}},{{prefix}},{{PLUGIN_NAME}},{{plugin-slug}}.