refactor(scripts): #13 porter la décomposition install-guidelines.js → scripts/steps/ + scripts/lib/
Contexte
scripts/install-guidelines.js était un monolithe de 2217 lignes. oxa-guidelines a déjà fermé son EPIC::Modules (14 issues, oxa#194→#207) qui a fait passer son propre script d'installation à un orchestrateur mince de 59 lignes, découpé en scripts/steps/ (18 steps) + scripts/lib/ (utilitaires + formatters). Cette MR porte ce découpage tel quel dans shared/guidelines.
Changements
-
scripts/install-guidelines.js: orchestrateur mince,ctxexplicite,InstallErrortypée remontée en un seul point dansinstall() -
scripts/steps/: 18 steps +index.js(source de vérité de l'ordre d'exécution) -
scripts/lib/: args, docs, errors, frontmatter, fs-scan, generated-paths, glob, helpers, targets, yaml +lib/formatters/(cursor, copilot, claude-agent, claude-skill, agent-skills, antigravity, frontmatter-block) - Genericisation complète :
lib/oxa-guidelines→lib/guidelines, aucune référence "oxa" restante -
guidelines/technos/déplacé versguidelines/docs/shared/technos/(le code porté attend un chemin source unifié avec la destination d'installation) - 125 tests portés depuis oxa-guidelines (
node --test, aucune dépendance ajoutée),package.json:"test": "node --test"
Effet de bord assumé
Le portage est fidèle au code oxa actuel (pas de redesign). Plusieurs bugs déjà corrigés côté oxa arrivent donc avec, et résolvent au passage 5 issues ouvertes dans shared/guidelines : #1 (closed) (codex outil de premier rang), #7 (closed) (chemin technos unifié — implique le déplacement ci-dessus), #8 (closed) (bug scanDir), #10 (closed) (regex linkPath), #11 (closed) (schéma metadata.json : globs/applyTo/limite 12000 caractères). Chaque issue est commentée et close séparément avec le détail de ce qui la résout.
Vérification
-
node --test: 125/125 passent - Installeur exécuté de bout en bout sur un projet scratch (
lib/guidelinesen copie locale) : run par défaut,--techs java@25,--claude(vérifie que Codex est bien skip),--codex— tous en exit 0
Closes #13 (closed), #1 (closed), #7 (closed), #8 (closed), #10 (closed), #11 (closed)