Centralize gstack toggling in the `profile` command without losing the
active-profile label.
- `gstack on` re-enables ALL parked gstack skills (moves
skills-disabled/gstack__* back) but does NOT touch .active-profile,
so the user layers full gstack on top of their current profile and
the statusline label is preserved. Unlike `reset`, which clears the
label to "none".
- `gstack off` disables gstack skills not listed in the active profile;
errors cleanly when no profile is active (needs one to know what to
keep).
Refactor (behavior-preserving): extract three shared helpers
`enable_all_gstack`, `disable_gstack_not_in`, `parked_gstack_count` and
rewire `cmd_reset` + `cmd_set` to reuse them instead of duplicating the
symlink-toggle loops. Wire `gstack` into main() dispatch, usage(), and the
header usage block.
Docs: SKILL.md argument-hint, examples, and output-policy updated. The
generic `make profile cmd="gstack on"` target already covers Make usage.
Verified: shellcheck CLEAN, `bash -n` OK, 6-case test (help, bad-action,
off-with-no-profile, on, off-trim, on-cycle) with final assertion that the
live symlink state was restored exactly to its pre-test value.
Memory: capitalize BDR-018 (decision), LRN-024 (DRY helper-extraction
pattern), BLK-007 (6 gstack source skills ios-*/spec unlinked post
submodule bump — open follow-up), EVAL-002 (self-eval, false "full.profile
bug" flag corrected pre-edit). Backfill index drift: BDR-017, BLK-005/006.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
12 KiB
TODO
profile.sh — verbe gstack on|off
- Extraire helper
enable_all_gstack()(boucle de cmd_reset) — anti-duplication - Extraire helper
disable_gstack_not_in(prof)(boucle gstack de cmd_set) — anti-duplication - Extraire helper
parked_gstack_count()(réutilise pattern cmd_current) - Refactor cmd_reset + cmd_set pour utiliser les helpers (comportement préservé)
cmd_gstack():on= enable tout gstack (garde label active-profile),off= disable gstack hors profil actif- Wire main() dispatch
gstack)+ usage() + bloc header - Doc : SKILL.md argument-hint + exemples + output-policy (Makefile générique suffit)
- shellcheck propre + tests (help/bad-action/none-error/on/off cycle) — état live restauré exact
- Investigué "fix" full.profile : PAS un bug — curation par design (BDR-017 caveat). Aucun fix code.
- FOLLOW-UP (BLK-007) : 6 skills gstack source (ios-*, spec) unlinkés post-bump → re-run gstack ./setup + reconcilier profils (iOS dans profils web ? probablement non)
- Capitalize : BDR-018, LRN-024, BLK-007, EVAL-002, journal 2026-06-02 + backfill index (BDR-017, BLK-005/006)
README.md overhaul
- Plan
- Corriger section install ctx7 (retirer MCP, clarifier CLI + API key)
- Marquer ruflo comme désactivé
- Supprimer section Troubleshooting/bugs courants
- Simplifier stacks tierces (gstack, ruflo, ctx7, GSD) — juste description + lien
- Ajouter section skills personnels (skills-perso)
- Ajouter section système d'autogestion (plugin-advisor, tokens, synergies)
- Nettoyer section Updating (retirer instructions manuelles par outil)
- Nettoyer section Maintenance (retirer doublon updating)
- Mettre à jour table Plugins reference (ctx7 row, ruflo OFF)
- Corriger lien USAGE.md dans l'intro (retirer mention cas/erreurs)
USAGE.md cleanup
- Supprimer tous les "Cas de figure — corrections vX.X.X validées"
- Supprimer table "Erreurs fréquentes"
- Corriger
/readme→/docdans bonnes pratiques - Supprimer séparateurs orphelins
Skill /doc
- Mettre à jour doc-syncer.md pour gérer ajouts/suppressions de features
- Mettre à jour SKILL.md description pour mentionner feature delta
Auto-activation ui-ux-pro-max sur détection design
- Créer
lib/design-gate.md— snippet réutilisable (detect design signals + ask to activate ui-ux-pro-max) - Intégrer dans feater.md — STEP 0.5 entre scope check et mini-plan
- Intégrer dans hotfixer.md — STEP 1.5 (si CSS/style/animation)
- Intégrer dans bugfixer.md — STEP 1.5 (si bug UI/style)
- Mettre à jour plugin-advisor.md — PHASE 4 : cohérence avec le design gate
- Mettre à jour CLAUDE.md skill routing — documenter le comportement auto
Refonte agents/seo-analyzer.md
- Lire agent actuel + plugin-advisor + interviewer + feater + hotfixer + analyzer
- Réécrire l'agent complet v1 (11 étapes)
- Ajouter orchestration sub-agents (hotfixer/feater) + triage par batches
- Déplacer plugin-advisor après détection stack (STEP 3 au lieu de STEP 0)
- Ajouter 2 niveaux d'audit (LOCAL code-only / FULL live+externe)
- Adapter scoring, legal, GEO aux deux niveaux
- Renumeroter proprement (0-14) + corriger toutes les refs internes
- Commit
/onboard — cso archetype-aware
Problème : prompt cso fallback est non-adaptatif — cherche XSS/SQLi/CORS même sur firmware.
Objectif : charger ## Typical pain points + Surface sécurité de l'archétype et les injecter dans le prompt cso.
- STEP 4.5 → ajouter extraction de archetype-context.md (pain points + Surface sécurité + category) — validé sur firmware-embedded / nextjs-app-router / library
- STEP 6 dispatch cso fallback → re-écrire prompt : universal checks + sections conditionnelles par category (web / embedded / library / cli / infra / data / desktop)
- STEP 6 dispatch cso gstack ON → passer
--archetype <name> --context-file .onboard-audit/archetype-context.mddans args - OUT-OF-SCOPE ce fix : étendre le pattern à analyze/code-clean/doc (déjà reçoivent
ARCHETYPE: <name>, juste pas le context-file). À faire dans un 2e passage si besoin.
/validate — nouveau skill W3C + WCAG (option A)
Scope : W3C HTML validity (validator.nu API) + W3C CSS validity (jigsaw API) + WCAG a11y (axe-core CLI / pa11y / WAVE API / fallback statique). Même pattern que /harden (audit par défaut, --fix avec confirmation A/B/C/D). Rapport = VALIDATE.md racine. Complémentaire à /onboard (qui audite a11y au setup initial — /validate est l'outil on-demand réutilisable).
Design décisions :
- Agent dédié :
agents/validator-analyzer.md(nouveau). Pas de réutilisation de seo-analyzer — scope différent (validité syntaxique vs indexabilité). - Depth : LOCAL (fichiers HTML/CSS statiques, tools npm locaux si dispo) | FULL (URL live + APIs distantes W3C/WAVE).
- External validators : validator.nu/?out=json (HTML), jigsaw.w3.org/css-validator (CSS), WAVE API optionnelle (quota gratuit ~100/mois), axe-cli local, pa11y-cli local.
- Tools fallback order : npm tools locaux → APIs distantes → agent général statique (cas onboard). Aucun install forcé.
- --fix conservateur :
alt=""sur images décoratives évidentes,langsur<html>, fermetures de tags manquantes, sauts de niveau heading renumérotés. PAS : labels forms, contraste couleurs, landmarks (demandent décision humaine). - Out of scope : meta tags/SEO → /seo ; JSON-LD → /geo ; security headers → /harden ; code linting générique (ESLint/Prettier) → hors scope web standards.
Subtasks :
- Créer
agents/validator-analyzer.md— spec 6 étapes (478 lignes) - Créer
skills/validate/SKILL.md— dispatcher (378 lignes) - Ajouter routage
/validatedans~/.claude/CLAUDE.mdsection "Skill routing" - Mettre à jour
skills/harden/SKILL.md— W3C/a11y redirigé vers /validate - Mettre à jour
skills/seo/SKILL.md— cross-ref /validate pour W3C/WCAG - Grep cohérence : refs /validate correctes, skill détecté par la harness
Animation lib (motion) — install + détection
Problème : motion (ex-framer-motion, rebrandé nov 2024) n'est ni installé par les scripts ni détecté par plugin-advisor / design-gate. Ajouter détection + install conditionnel.
Décisions :
- Package :
motion(npmmotion, importmotion/react).motion-vpour Vue 3 (package séparé). Svelte/vanilla →motion. - Éligibilité : tout projet qui peut consommer l'API. ✅ React/Next/Remix/Astro+React, Vue3/Nuxt, Svelte. ❌ Backend, CLI, embedded, Flutter, WordPress/Drupal/Strapi, RN (réservé
react-native-reanimated). - init-project STEP 5 : auto-install si éligible + absent (l'utilisateur a déjà validé scaffold).
- onboard STEP 2.5 : propose + attendre OK (projet existant, opt-in).
- plugin-advisor : read-only — détecte + reporte ("✅ motion installed" ou "ℹ️ eligible but absent — run /onboard").
- design-gate : ajouter motion/motion-v/framer-motion (legacy) dans filesystem signals.
Subtasks :
- Créer
lib/animation-lib-check.sh— fonctionsdetect_anim_eligibility()+is_anim_lib_installed()+recommend_anim_install_cmd() - Patcher
agents/scaffolder.mdPHASE 4 — note (le scaffolder n'installe PAS, l'orchestrateur init-project STEP 5e gère) - Patcher
skills/init-project/SKILL.md— STEP 5e ANIMATION LIB (auto-install si éligible) - Patcher
skills/onboard/SKILL.md— STEP 2.5 ANIMATION LIB (propose + attendre yes/skip) - Patcher
agents/plugin-advisor.mdPHASE 1 (sourcing du helper) + PHASE 2 (signauxanim-lib-eligible/anim-lib-installed) + PHASE 3 (section ANIMATION LIB read-only) - Patcher
lib/design-gate.md— ajouter motion/motion-v/framer-motion + autres anim-libs dans filesystem signals - Tester : shellcheck OK ; matrix React/Vue/RN/backend/with-motion/no-package/pnpm tous corrects
Helper --help / help sur tous les skills (option C)
Problème : aucun skill ne gère --help aujourd'hui. argument-hint affiche juste la syntaxe en autocomplétion, pas de description/exemples. L'utilisateur doit lire le SKILL.md ou deviner.
Objectif : /<skill> --help (ou /<skill> help) affiche un bloc standardisé (description, args, exemples, cross-refs) et exit SANS dispatcher l'agent ni modifier quoi que ce soit.
Design :
- Lib partagée : créer
skills/lib/help-handler.md— snippet réutilisable "if $ARGUMENTS contains --help|help|-h, extract frontmatter fields (description, argument-hint, cross-refs) + afficher bloc d'aide standardisé + STOP". - Format d'aide standardisé :
/<skill> — <titre court> DESCRIPTION <extrait de la frontmatter description, dépouillé des Triggers> USAGE /<skill> <argument-hint> ARGUMENTS <liste détaillée de chaque flag avec son effet — nouvelle section dans les SKILL.md, ou parsée depuis STEP 0 arg parsing> EXAMPLES <3-4 exemples concrets> SEE ALSO <extrait des "For X → use /Y" de la frontmatter> - Intégration : ajouter STEP 0.5 ("Handle --help") dans chaque SKILL.md juste après STEP 0 parsing args. Ordre : parse args → check --help → si oui afficher + exit → sinon continuer.
- Skills à patcher :
~/Documents/claude/skills/= ~20 skills persos + skills-perso list pour référence. Ne PAS toucher skills-external/gstack (ownership externe) ni example-skills.
Subtasks :
- Créer
skills/lib/help-handler.md— snippet réutilisable (détection + extraction + affichage) - Définir format d'aide standard + section "ARGUMENTS" vs reuse de argument-hint
- Décider : sections ARGUMENTS/EXAMPLES doivent-elles être dans la frontmatter (nouveau champ YAML) ou dans le corps du SKILL.md (nouvelle section
## Help) ? - Patcher un skill pilote (
/validate) — valider UX - Patcher les skills perso restants : analyze, bugfix, code-clean, commit-change, doc, feat, geo, graphify, harden, hotfix, init-project, make-pdf, onboard, plan-tune, plugin-check, refactor, seo, ship-feature, skills-perso, status, benchmark-models, context-save, context-restore
- Mettre à jour
~/.claude/CLAUDE.md— mentionner convention --help disponible sur tous les skills perso - Note : skills-external/gstack ont leur propre convention, ne pas toucher
Skill profiles (partition gstack par usage)
- Plan
lib/profile.sh— list/show/current/apply/set/reset/diff via symlink togglelib/profiles/{design,dev,qa,audit,minimal}.profile— 5 profilsskills/profile/SKILL.md— slash command/profile- Wire
agents/plugin-advisor.md— DETECT call profile.sh current + OUTPUT line PROFILE + nouvelle section "Skill profiles" dans TOGGLING EXTERNAL TOOLS - Wire
lib/toggle-external.sh— header pointer vers profile.sh Makefile— targets profile/profile-list/profile-current/profile-reset- Tests : list/show/current/diff/set/reset/apply tous OK, shellcheck propre, symlinks bien restaurés après reset
Profile system v2 — extension plugins/MCPs/CLIs
- Inventaire complet : 7 plugins (4 ON / 3 OFF), 0 MCP local, 4 CLIs installés
- Définir
MANAGED_PLUGINS(ui-ux-pro-max, plugin-dev, pr-review-toolkit) +PROTECTED_PLUGINS(caveman, security-guidance, superpowers) profile.shétendu : nouveau typeplugin@<marketplace>(auto-toggle viaclaude plugin enable/disable),mcp(delegate à toggle-external.sh pour magic),cli(advisory only)cmd_setdésactive aussi les MANAGED_PLUGINS hors profilcmd_resetne touche PAS aux plugins (info line explicite — re-enable manuel ou via apply)cmd_current: compteenabled+installed, tiebreaker = total le plus grandcmd_show: colonne TYPE élargie à 30 chars pourplugin@ui-ux-pro-max-skill- 4 nouveaux profils :
web,seo,web-full,backend - Profils existants raffinés (design, dev, qa, audit) avec
plugin@<marketplace>+cli skills/profile/SKILL.md: table profils mise à jour + table mécanisme par typeagents/plugin-advisor.md: table de recommandations étendue avec web/seo/web-full/backend- Tests :
set webenable ui-ux-pro-max+magic,set seodisable ui-ux-pro-max,set minimalépargne always-on,resetrestaure 64 skills - Memoire : BDR-008 (v2 décision) + journal entry 2026-05-04
- Shellcheck propre