Audit code mort & legacy : 11 juin 2026
Audit complet de la codebase : fichiers orphelins, dépendances mortes, artefacts cassés, conformité bonnes pratiques 2026+. Outillage : knip 6.16.1 (config commitée : knip.json) + vérifications manuelles par grep sur…
Audit complet de la codebase : fichiers orphelins, dépendances mortes, artefacts cassés, conformité bonnes pratiques 2026+. Outillage : knip 6.16.1 (config commitée :
knip.json) + vérifications manuelles par grep sur chaque cluster majeur (taux de faux positifs mesuré sur échantillon : 0/12, les seules « références » restantes étaient des barrels eux-mêmes morts ou des commentaires).Relancer l'analyse :
pnpm dlx knip(le repo n'a pas knip en devDep — voir recommandation §8).
Synthèse
| Catégorie | Volume | Priorité |
|---|---|---|
| Artefacts cassés (config prettier, script référencé par l'UI) | 3 | P0 — réparer |
| Fichiers source orphelins (jamais importés depuis une entrée) | 239 | P1 — supprimer |
| Dépendances npm mortes | 37 (+2 à rebrancher) | P1 — désinstaller |
| Scripts / assets / contenu / i18n orphelins | 7 items | P2 |
| Exports & types morts dans des fichiers vivants | ~2 695 (concentrés dans les barrels export *) | P3 — gate CI |
Bonnes pratiques 2026 : le socle est sain (§7). Le problème n'est pas la qualité de la config mais l'accumulation de strates remplacées jamais supprimées — chaque refonte (MCP, workflow canvas, Base UI, scanner CLI → web) a laissé l'ancienne implémentation sur place.
1. P0 — Cassé (à réparer, pas du nettoyage)
1.1 .prettierrc.cjs requiert un package qui n'existe plus
module.exports = require("@boostecom/prettier-config")
@boostecom/prettier-config est un vestige du mono-repo à workspaces
(aplati en avril 2026). Conséquence : pnpm format et
pnpm format:check échouent, l'intégration éditeur est morte, et
prettier-plugin-tailwindcss (installé) ne tourne plus.
Correctif : config inline .prettierrc.json avec
"plugins": ["prettier-plugin-tailwindcss"].
1.2 scripts/marketplace-activate.sh appelle un script supprimé
Le script appelle node scripts/seed-marketplace.mjs : fichier
inexistant. Le seeding marketplace est automatique au cold-start depuis
sync-from-content.ts (cf. CLAUDE.md). Pire : deux pages dashboard
affichent encore ce script dans un message d'erreur utilisateur :
src/app/(dashboard)/account/saved/page.tsx:99src/app/(dashboard)/sell/dashboard/page.tsx:44
Correctif : supprimer le script + remplacer les 2 messages (le heal se fait
via le schema guard / POST /api/admin/db/push, plus aucun step manuel).
1.3 CLAUDE.md décrit un serveur MCP qui n'est plus monté
CLAUDE.md (§Outils Shopify) présente src/features/shopify/mcp comme LE
serveur MCP store-management. En réalité le serveur monté en production
est src/app/api/mcp/[storeId]/ (build-server + register-tools via
@/features/ai/sdk/sdk/shopify-bridge). L'arbre features/shopify/mcp
n'est importé nulle part (sauf mcp/shopify/client.ts, 2 consommateurs).
Correctif : mettre à jour CLAUDE.md + supprimer l'arbre mort (§2.1).
2. P1 — Clusters legacy entiers (vérifiés : 0 consommateur)
2.1 Ancien serveur MCP Shopify standalone : 25 fichiers
src/features/shopify/mcp/ : http.ts, index.ts, security.ts,
tools.ts, shopify/server.ts, shopify/helpers.ts + 19 fichiers
d'outils (shopify/tools/{blogs,bulk-operations,collections,customers, fulfillments,gift-cards,inventory,marketing,markets,metaobjects, navigation,orders,pages,products,shop,theme,translations,webhooks}.ts).
Remplacé par la route Remote MCP /api/mcp/[storeId].
Exception à GARDER : shopify/client.ts (importé par
features/ai/branches/shared.ts et la calibration).
2.2 Ancien harness d'agents : 19 fichiers
src/features/ai/agents/ : agent.ts, agents/{index,reader,router, router-prompt,writer}.ts, tools/{bash,edit,read,write,index}.ts,
config.ts, hooks.ts, identity.ts, index.ts, memory.ts,
skills.ts, stream.ts, workflow.ts. C'est un prototype d'agent
(outils bash/read/write façon CLI) antérieur à l'orchestrator Atlas.
À GARDER dans le même dossier (vivants, importés partout) :
identity-registry, identity-types, autonomy,
wrap-tools-with-autonomy, tool-permission-matrix.
2.3 Copie morte du workflow canvas : 16 fichiers
src/components/patterns/workflow/**(11 fichiers) — duplicata desrc/features/ai/workflow/canvas/ui/(l'arbre vivant). La copie a raté un bugfix appliqué seulement côté live (de2947dstore-browser toolbar) : preuve que c'est une strate abandonnée.src/components/canvas/primitives/**(5 fichiers : console-stream, task-list, version-timeline, view-toggle, index).
2.4 Ère CLI du scanner tracking : 20 fichiers
src/features/tracking/scan/ : reporters/** (terminal, html×4, json,
markdown, dashboard), batch.ts, compare.ts, share.ts, store.ts,
mcp-server.ts, cmp/** (3), config/index.ts, index.ts,
lib/web-vitals-injection.ts. Le scan vit désormais dans les routes
/scan/tracking + jobs ; les reporters terminal/HTML datent de l'époque
outil CLI.
2.5 Reste du cluster features/ai : ~17 fichiers
Chat/voice morts (runtime/tools/voice/{mic-fft,recording, use-mic-volume-bars}, voice-recording-inline.tsx), intégrations Notion
abandonnées (chat/actions/notion.ts,
runtime/integrations/notion/notion-add-instruction.tsx,
multi-step-form.tsx), agent-header.tsx, ai-chat-context.tsx,
chat/hooks/use-mobile.ts, chat/layout/design-system.ts,
chat/lib/integrations/agent/tasks.ts,
chat/lib/integrations/knowledge/memory.ts, context/index.ts,
orchestrator/sdk-integration/index.ts, prompts/system-helpers.ts,
tasks/actions.ts.
2.6 Widget workflow embarquable jamais shippé : 6 fichiers
src/features/ai/workflow/widget/** (widget, widget-provider, adapters
ai-gateway + index, config/types, index) : consomme @workflow/ai +
@workflow/core (deps mortes §4). Plus : canvas/index.ts,
canvas/workflow-toolbar.tsx, canvas/ui/preview/blocks/{shopify,vercel, viewer}/index.tsx (barrels), modes/index.ts, et 7 fichiers
nodes/store-browser/ (connectors-popover, mcps-sheet, node-status-bar,
theme-switcher, use-screenshot, shopify-bookmarks, url-validation).
2.7 Micro-modules src/lib/* scaffoldés jamais branchés : 24 fichiers
| Module | Fichiers |
|---|---|
lib/collaboration/ | index, manager, types (3) |
lib/mcp/ | index, registry, types (3) |
lib/prompts/ | builder, index, types (3) |
lib/validation/ | feedback, index, validator (3) |
lib/frameworks/ | index, registry, types, shopify/adapter, vercel/adapter (5) |
lib/channels/ | api, index (2) |
lib/providers/ | index, tenant-provider (2) |
lib/sops/index.ts, lib/memory/index.ts, lib/orchestrator/index.ts, lib/health/index.ts, lib/storage/index.ts (barrel seul — lib/storage/blob reste vivant), lib/store/resolve.ts, lib/browser/bright-data-adapter.ts, lib/intelligence/types.ts, lib/observability/types.ts | (9) |
2.8 Composants registry UI installés jamais consommés : 45 fichiers
src/components/ui/ : toast + use-toast (Radix Toast officiellement
retiré, sonner est le canon), sidebar, menubar, navigation-menu,
breadcrumb, pagination, command (→ dep cmdk), drawer (→ vaul),
combobox, context-menu, aspect-ratio, toggle, toggle-group, skeleton,
use-mobile, shadcn-compat/dropdown-menu, border-beam, emoji-selector,
field, item, version-selector, logo (barrel index.ts seul).
Chacun = dossier <name>/{<name>.tsx,index.ts}.
Réinstallables à la demande via npx shadcn@latest add <name>,
les garder « au cas où » viole la règle registry-first (le registre EST
l'inventaire).
2.9 Services / divers : 13 fichiers
services/promotions/{index,types}.ts,
services/algorithms/intelligence/{org-coherence-check, inference/creative-clusterer,inference/creative-vision-analyzer, providers/klaviyo-benchmarks,bulk-indexer/index,probes/stubs}.ts,
services/algorithms/{compliance/types,retrieval/types}.ts,
modules/analytics/{index,tracking/stripe-attribution}.ts,
modules/auth/permissions.ts, modules/email/templates/index.ts,
features/notes/actions.ts, features/reports/actions.ts.
2.10 Composants app/shell/patterns morts : ~40 fichiers
app/(minimal)/scan/tracking/_components/: methodology-section, robot-header, copyable-code-block, ecosystem-grid (4)app/(dashboard)/admin/content/marketplace/_components/: bulk-actions, draft-queue-list (2)components/patterns/: execution-planner complet (6), ai-elements/index, agent/index, context/index, intelligence-pulse, vitals/index, workflow/ui (déjà compté §2.3) (12)components/shells/: team-particles, team-comparison-drawer, sidebars/{index,sidebar-nav}, shells/index, registry/{index, registry-shell} (7)components/shared/: intelligence/store-intelligence-banner, theme-switcher/**, hooks/index, shared/index, types/index (6)components/hooks/{index,use-logs-count}.ts,components/hub/ad-library.tsx(3)config/atlas-version.ts,types/knowledge.ts(2)
Liste exhaustive machine-readable : sortie
pnpm dlx knip --reporter json, sectionfiles(239 entrées).
3. P1 — Dépendances npm mortes (vérifiées une à une)
3.1 Migration Radix → Base UI terminée — 23 packages
Les composants src/components/ui/* wrappent désormais
@base-ui/react ; plus AUCUN import Radix dans src/ :
@radix-ui/react-{accordion,aspect-ratio,avatar,checkbox,collapsible, context-menu,dropdown-menu,menubar,navigation-menu,popover,progress, radio-group,scroll-area,select,separator,slider,tabs,toast,toggle, toggle-group} (20) + radix-ui (pkg consolidé) + @mdx-js/mdx +
@mdx-js/react (le MDX passe par next-mdx-remote/rsc qui embarque
les siens en transitif).
3.2 Consommées uniquement par des fichiers morts — 7
cmdk (ui/command), vaul (ui/drawer), react-virtualized +
@types/react-virtualized (voice/mic-fft), @workflow/ai +
@workflow/core (widget §2.6), shiki.
3.3 Jamais importées — 9
@tabler/icons-react (0 import — lucide : 595 fichiers, hugeicons : 26),
@shopify/codemirror-language-client, @shopify/theme-check-browser,
@shopify/theme-language-server-browser (le liquid-editor utilise
@codemirror/* directement), embla-carousel-react, input-otp,
react-day-picker, react-resizable-panels, web-vitals (chargé
depuis CDN unpkg par vitals/collector/storefront-bundle.ts, jamais
depuis npm).
3.4 devDeps — 3 mortes, 2 à REBRANCHER (pas supprimer)
- Mortes :
autoprefixer(bundlé dans@tailwindcss/postcssv4),tailwindcss-animate(plugin v3, c'esttw-animate-cssqui est importé dansglobals.css:12),@types/react-virtualized. - À rebrancher :
prettier-plugin-tailwindcss(dans la nouvelle.prettierrc.json, cf. §1.1) eteslint-config-prettier(à ajouter en dernier élément du flat configeslint.config.mjs: installé mais jamais référencé).
3.5 Faux positifs knip : à GARDER
tw-animate-css (import CSS, invisible pour knip), toutes les deps
référencées par next.config.mjs / postcss / runtime Vercel.
4. P2 — Scripts, assets, contenu, i18n
| Item | Constat | Action |
|---|---|---|
scripts/scope-hub-css.mjs | Cassé : lit _backup/styles/ (supprimé) ; l'output src/styles/hub/hub.css est déjà commité | Supprimer |
scripts/create-quarterly-stripe-prices.mjs | One-off jamais référencé | Supprimer (ou déplacer en gist ops) |
scripts/fetch-partner-favicons.mjs | One-off jamais référencé (logos déjà dans public/brands/) | Supprimer |
public/boostecom copy.png | 80 K, nom avec espace, 0 référence | Supprimer |
content/changelog/ | Orphelin — le changelog vit en DB (ChangelogEntry, seed inline dans prisma/seed.ts, promotion auto via workflow auto-changelog.yml) | Supprimer le dossier |
Namespaces i18n settings + stepperPresets | Présents dans les 6 locales, 0 useTranslations/getTranslations | Supprimer des 6 fichiers |
| Cohérence locales | ✅ Les 6 fichiers ont des clés top-level identiques (35 namespaces) | — |
5. P3 — Exports morts dans fichiers vivants (~2 695)
Concentrés dans les barrels export * : top offenders
components/patterns/ai-elements/chat/index.ts (293),
canonical/index.ts (54), lib/security/index.ts (50),
features/connectors/index.ts (49), types/tracking.ts (38),
orchestrator/index.ts (38), features/vitals/index.ts (35)…
Ne PAS purger à la main : c'est le pattern barrel qui fabrique du mort en continu (et casse le tree-shaking + alourdit le graphe TS). Traitement :
- knip en CI (§8) fige le stock ;
- à chaque passage dans un module, remplacer
export *par des exports nommés réellement consommés.
6. Doublons restants (hors fichiers morts)
| Doublon | Vivant | Mort |
|---|---|---|
| Workflow preview blocks | features/ai/workflow/canvas/ui/preview/blocks/ | components/patterns/workflow/ui/preview/blocks/ (§2.3) |
use-mobile ×3 | celui consommé par le code vivant | components/ui/use-mobile/ + features/ai/chat/hooks/use-mobile.ts |
| Toasts | sonner | ui/toast + ui/use-toast + @radix-ui/react-toast |
| Icônes ×3 | lucide-react (canon, 595 fichiers) + @hugeicons (26 fichiers — consolidation possible mais VIVANT) | @tabler/icons-react (0) |
7. Bonnes pratiques 2026 — état des lieux
Conforme ✅
- TypeScript : strict,
moduleResolution: Bundler, ES2022, TS 5.9. - ESLint 9 flat config + plugin Next core-web-vitals + react-hooks ;
overrides justifiés (
no-consolewarn sauf warn/error). - Tailwind 4 natif :
@import "tailwindcss",@theme inline,@source, zéro directive v3, animations avecprefers-reduced-motion. - Next 16 :
src/proxy.ts(nouvelle convention middleware), App Router pur, images optimisées avec allowlist,serverExternalPackagescorrect (Prisma/pg/playwright). - Outillage : Node 22 pinné (
engines+.nvmrc),packageManagerpnpm 10 pinné,onlyBuiltDependenciesmaîtrisé. - Gates : pre-push
db:guard:check && typecheck(simple-git-hooks), CI audit-memory-scope (privacy tenant) + auto-changelog, 47 fichiers de tests vitest. - Vitest : node env,
globals: false, secrets déterministes, seamserver-only.
Compromis assumés ⚠️ (documentés dans le code, pas des bugs)
next.config.mjs:21-22ignoreBuildErrors+ignoreDuringBuilds: compensés par pre-push + CI (~15 min économisées par deploy, contexte issue #233). Risque résiduel :git push --no-verify. À réévaluer si l'équipe grossit.- 46 crons Vercel (limite 100) : surveillé via
/admin/operations/crons.
À corriger 🔧
- Prettier cassé (§1.1) — la seule vraie rupture de toolchain.
eslint-config-prettierinstallé mais pas branché (§3.4).- Optionnel :
verbatimModuleSyntax: truedans tsconfig (future-proof).
8. Garde-fou : empêcher le retour du code mort
- Ajouter knip en devDep + script
"deadcode": "knip": la configknip.jsonest déjà commitée (entrées Next.js + scripts + instrumentation, generated guard ignoré). - Gate CI : job
pnpm knip --reporter compactaprès le typecheck (ou au pre-push). Démarrer en non-bloquant, passer bloquant une fois le stock purgé. - Règle d'or registry-first : un composant shadcn retiré du code se DÉSINSTALLE (le registre le réinstalle en 5 s), pas de stock dormant.
- Pas de nouveaux barrels
export *: exports nommés uniquement.
9. Triage v2 — « orphelin » ≠ « poubelle » (revue produit du 11 juin)
Après revue fichier par fichier (lecture du code, substance, équivalent vivant, historique git), les 239 orphelins se répartissent en trois piles :
Pile 1 — À CONNECTER (~45 fichiers) : travail réel jamais branché
Implémentations substantielles SANS équivalent vivant : à monter, pas à supprimer. Point de montage identifié pour chacune :
| Chantier | Fichiers | Point de montage |
|---|---|---|
| Workspace V2 | components/canvas/primitives/ (console-stream SSE, task-list dnd-kit, version-timeline, view-toggle) + server actions features/ai/tasks/actions.ts, features/notes/actions.ts, features/reports/actions.ts | [orgSlug]/[storeSlug]/workspace/page.tsx (les actions CRUD sont prêtes, la UI dnd-kit aussi — il manque le montage des panneaux) |
| Store-browser : features finies non affichées | mcps-sheet (MCP par store + enable/disable), node-status-bar (372 l.), theme-switcher, connectors-popover, use-screenshot (Browserbase), shopify-bookmarks, url-validation + canvas/workflow-toolbar.tsx (l'API /api/workflow/[id] EXISTE) | nodes/store-browser/ (mode-views / index) + canvas workflow |
| Hub Ad Library v2 | components/hub/ad-library.tsx — grille créatives façon outil du marché, gating paywall inclus, « replacing the shared table rows » | surface « Ad Library » du hub intelligence |
| Execution Planner | patterns/ai-elements/execution-planner/ (6 fichiers complets : planner-view, step-card, timeline, agent-avatar) | panneau d'orchestration dans ai-chat.tsx (visualiser les plans Atlas) |
| Intelligence onboarding | intelligence-pulse.tsx (chip Strategic Action Plan), store-intelligence-banner.tsx (états visibility/loading/found/missing) | shell-client.tsx / cockpit store |
| Home / Agents | team-particles.tsx (canvas mesh + reduced-motion), team-comparison-drawer.tsx (comparateur 3 agents, vaul) | team-carousel.tsx (background + trigger), ou /agents |
| Scan tracking setup | copyable-code-block.tsx, ecosystem-grid.tsx (badges supported/beta/coming_soon) | pages /scan/tracking + /setup/tracking |
| Admin marketplace | bulk-actions.tsx (batch reject + raison), draft-queue-list.tsx | admin/content/marketplace/page.tsx |
| Notion instructions | notion-add-instruction.tsx + chat/actions/notion.ts (rate-limited) + knowledge/memory.ts (buildMemoryContext) | panneau intégrations du chat |
| Pipeline créatives ML | creative-vision-analyzer.ts (vision LLM budget-guardé) + creative-clusterer.ts (clustering embeddings → canonical L4) | orchestrateur intelligence (post-scan) — la « ML recos v2 » des docs |
| Intelligence divers | klaviyo-benchmarks.ts (→ EmailSection), org-coherence-check.ts (s'auto-registre, manque le cron), bulk-indexer/ (→ action admin) | canonical pipeline + cron + admin |
| Scraper tier 3 | lib/browser/bright-data-adapter.ts — la checklist env PROMET ce maillon (BRIGHTDATA_*) mais il n'est PAS branché dans fetch-providers.ts | chaîne fetch-providers (escalade Firecrawl → Browserbase → BrightData) |
| Consent engine | tracking/scan/cmp/ (discover + validate, 430 l. Playwright) | moteur de scan (enrichit les checks compliance c-01…c-07) |
| Design system finis | border-beam, emoji-selector, use-logs-count, config/atlas-version.ts | à disposition (garder) ; atlas-version → surfacer sur /changelog |
Pile 2 — LEGACY CONFIRMÉ (~165 fichiers) : remplacé, zéro perte UX
Tout a un équivalent vivant ou est un stub vide : détail aux §2-§4.
Résumé : vieux serveur MCP (25, remplacé par /api/mcp/[storeId]),
vieux harness agents (19, remplacé par l'orchestrator), copie morte du
workflow canvas (11, un bugfix n'existe que côté vivant), ère CLI du
scanner (17 : reporters terminal/html/json/markdown, batch, compare,
share, store, mcp-server… SAUF cmp/), ancienne voice UI (4 :
mic-fft, recording, use-mic-volume-bars, voice-recording-inline,
remplacée par voice-toolbar-bar.tsx, les commentaires du code le
disent), stubs chat (agent-header, ai-chat-context, multi-step-form,
agent/tasks in-memory…), composants registry shadcn standards jamais
consommés (~41, réinstallables en 5 s, AUCUN travail custom dedans),
scaffolds lib/* superseded (memory → features/ai/memory,
orchestrator → features/ai/orchestrator, mcp → features/connectors,
prompts → features/ai/prompts, validation, collaboration in-memory,
channels, providers, health), barrels morts (email templates,
analytics, shells, shared…), version-selector (doublon de
patterns/navigation/version-selector vivant),
shared/theme-switcher, robot-header + methodology-section (stubs
sans JSX), probes/stubs, auth/permissions (RBAC vivant dans
server.ts), stripe-attribution (19 l. « prep only »),
types orphelins (knowledge, compliance, retrieval, intelligence,
observability).
Pile 3 — DÉCISION PRODUIT (7 sujets)
| Sujet | Contenu | Recommandation |
|---|---|---|
| Widget chat embarquable | features/ai/workflow/widget/ (~350 l. complets, provider + adapter AI Gateway) | GARDER si l'embed externe (PageBuilder/sites tiers) est au roadmap, sinon supprimer |
lib/frameworks/ | registry + adapters Shopify/Vercel pour pipeline de code-gen (362 l. réelles) | GARDER si la génération de code multi-framework est planifiée |
services/promotions/ | MVP types + helpers, persistence « deferred » | Supprimer (réécrire avec Prisma le jour venu) |
lib/sops/ | SOP MetaGPT-style (245 l. de design) | Supprimer (l'orchestrator est free-form) ou garder en référence |
lib/store/resolve.ts | 3 helpers PROPRES que chaque page ré-implémente localement | CONNECTER : adopter dans les pages dashboard (dé-duplication) |
sidebar-nav.tsx, registry-shell.tsx | génériques propres sans consommateur identifié | Supprimer (réécrivables), sauf refonte admin imminente |
ui/drawer + dep vaul | team-comparison-drawer (Pile 1) s'appuie sur vaul | Conserver tant que le drawer est en Pile 1 |
Plan d'exécution révisé
| Vague | Contenu | Risque |
|---|---|---|
| A | P0 : correctif prettier + marketplace-activate.sh + 2 messages UI + CLAUDE.md (MCP + BrightData) | Nul |
| B | Suppression Pile 2 UNIQUEMENT (~165 fichiers) + typecheck + build | Nul (équivalent vivant vérifié pour chaque cluster) |
| C | Deps : désinstaller celles liées à la Pile 2 (~35 : Radix×21, tabler, shopify×3, workflow×2, cmdk, react-virtualized+types, shiki, web-vitals, mdx×2, embla, input-otp, react-day-picker, react-resizable-panels, autoprefixer, tailwindcss-animate) ; GARDER vaul ; rebrancher prettier-plugin-tailwindcss + eslint-config-prettier | Faible |
| D | Scripts/assets/content/i18n (§4) | Nul |
| E | knip en devDep + gate CI non-bloquant + ignore knip sur la Pile 1 le temps du branchement | Nul |
| F | Branchements Pile 1 — par chantier, dans l'ordre de valeur : (1) Store-browser features finies, (2) Hub Ad Library v2, (3) Workspace V2, (4) Admin marketplace, (5) Intelligence (pulse + banner + ML pipeline + BrightData + cmp), (6) Execution planner, (7) Home/Agents, (8) Scan setup, (9) Notion | Par lot, chaque branchement testé |
Les décisions Pile 3 peuvent tomber à tout moment : rien dans A-E n'y touche.
10. Bilan d'exécution (PR #274, 11 juin 2026)
Toutes les vagues exécutées. État final : pnpm deadcode exit 0,
typecheck clean, 407 tests verts, builds preview Vercel verts.
| Vague | Résultat |
|---|---|
| A | Prettier réparé (.prettierrc.json + plugin Tailwind), script cassé supprimé + 2 messages UI corrigés, CLAUDE.md MCP corrigé |
| B | 176 fichiers legacy supprimés (-21 865 lignes) |
| C | 40 packages désinstallés, eslint-config-prettier branché |
| D | Assets/contenu/i18n/scripts orphelins purgés |
| E | pnpm deadcode (knip) en CI — fichiers/deps = bloquant, exports = warning |
| F | Pile 1 entièrement branchée (7 chantiers, ~45 fichiers) |
Branchements vague F (commits 97d1a74 → d1e5063) :
admin marketplace bulk-review · Hub Ad Library v2 (slot
intel/intelAds pré-câblé) · Workspace V2 complet (la route était
une redirection morte) · store-browser ×8 (status bar, MCPs sheet,
theme switcher, connectors popover, screenshot, bookmarks, validation
URL, workflow toolbar) · chat (PlannerView sur getStrategicPlan
- instructions Notion + memory overlay) · home/setup (particles, comparateur d'agents, ecosystem grid, snippets copiables) · intelligence (pulse chip, banner, BrightData tier-3, benchmarks Klaviyo, coherence sweep hebdo, bulk-indexer admin, pipeline ML créatives borné mode-full/3 stores/50 créatives/budget).
Bonus découvert en route : meta-graph.ts importait dynamiquement
facebook-nodejs-business-sdk jamais installé, la vérification Meta
Pixel des scans échouait depuis toujours. Réécrit en fetch Graph API
natif (la feature fonctionne désormais).
Reste parqué (allowlist knip.json) : plus rien. Le lot final
(PR de suivi, 12 juin) a branché les quatre derniers parqués :
consent engine cmp/ dans le moteur de scan (flag cmpInteraction,
défaut true = comportement historique ; les 4 événements SSE CMP
s'allument dans une UI qui les attendait), widget chat embarquable
sur /embed/widget (adapter réaligné sur le contrat /api/chat,
exception frame-ancestors scopée), détection de framework au wizard
connect (detectFrameworkFromFiles soft-fail), resolveStoreBySlug
adopté par 6 pages, et les spares design-system (version Atlas sur
/changelog + admin health, badge logs sur la console store-browser,
BorderBeam sur la carte pricing populaire, EmojiSelector en
remplacement de la rangée d'emojis codée à la main du feedback).
Bonus : CMP_DETECTED partait après l'acceptation du banner (bug),
corrigé en route. L'allowlist knip ne contient plus que le schema
guard généré et le vendor ai-elements.