fix(core): declare 6 phantom deps + bump 0.3.2#172
Conversation
…gfm, rehype-highlight, highlight.js, idb-keyval, qrcode.react), bump 0.3.2 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… (Scenario A) qrcode.react declares react as peerDep — no embedded copy. In the gate environment, react is installed both at packages/core/node_modules (devDeps) and at repo root (gate installs it for tsc). Vite/vitest resolves ESM for qrcode.react to the root copy while react-dom resolves locally → two React instances → invalid hook call. In a generated app all packages are hoisted to a single root node_modules, so this double-instance cannot occur in production. Fix: add resolve.dedupe for react/react-dom in vitest.config.ts to force a single instance in tests, matching the real-app hoisting behaviour. package-lock.json updated to reflect the 6 new deps declared in package.json. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CI débloqueé — Gate GREEN ✅Scénario retenu : A — artefact de test (pas un défaut de packaging)Preuve :
Correction appliquée ( resolve: {
dedupe: ["react", "react-dom", "react/jsx-runtime", "react/jsx-dev-runtime"],
}Force vitest à utiliser une seule instance de React dans les tests, aligné sur le comportement réel d'une app générée. Les 6 deps restent en Fichiers modifiés (3 commits)
Résultat gate localProchaine étape pour Rémi : merger cette PR → Generated by Claude Code |
…(inline) — qrcode.react smoke green in CI resolve.dedupe was insufficient: qrcode.react ESM is externalized by vitest by default (loaded via Node native loader, bypassing Vite's module graph). In a fresh CI environment, npm install in packages/core creates packages/core/node_modules/react, then the gate installs react at root too. Node resolves 'react' from qrcode.react's location to the root copy, while react-dom uses packages/core's copy → two distinct React instances in memory → "Cannot read properties of null (reading 'useMemo')". Fix: server.deps.inline: ['qrcode.react'] forces vitest to transform qrcode.react through Vite instead of externalizing it. Vite's module graph then applies resolve.dedupe, ensuring a single React instance regardless of how many physical copies exist on disk. Verified: crash reproduced with two React copies present, fix makes 230/230 pass in that exact condition. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fix itéré — pourquoi
|
Problème
@blueprint-modular/core@0.3.1importait (via les composantsbpm.*re-exportés) plusieurs modules non déclarés dans sonpackage.json. Ces deps « fantômes » causaient desModule not founddans les apps générées par Maker — contournés temporairement côté Maker (PR #286,package-template.ts). Cette PR réalise le niveau 2 : le core déclare lui-même ses deps.Changements
packages/core/package.jsonuniquement :0.3.1→0.3.2dependenciesdes 6 deps épinglées :Versions identiques au template Maker (alignement garantit que les apps existantes n'ont pas de conflit).
Choix
dependenciesvspeerDependenciesCes 6 packages sont marqués
externaldansvite.config.ts(non bundlés), mais contrairement àleaflet/react-leaflet(optionnels, feature-flaggés), ils sont requis par des composants core non-optionnels (QRCode,Markdown, etc.). Les déclarer endependenciespermet à npm/pnpm de les installer automatiquement côté consumer sans configuration supplémentaire.leaflet/react-leafletrestent enpeerDependenciesoptionnelles — inchangées.Preuve d'usage
Les 6 packages sont listés comme
externaldanspackages/core/vite.config.ts(lignes 39–47), ce qui confirme qu'ils sont importés mais non bundlés. Les composants consommateurs :components/bpm/QRCode.tsx,components/bpm/Markdown.tsx,components/AIChat/AIChat.tsx, modules wiki (idb-keyval).Périmètre
npm publish— étape manuelle Rémi (Windows + Dashlane).Séquence post-merge pour Rémi
git checkout master && git pullsur Windows.cd packages/core && npm publish --access publicnpm view @blueprint-modular/core version→0.3.2package-template.tsvers0.3.2et retirer les 6 lignes devenues redondantes. Recapture fixtures G5/G6 obligatoire.Generated by Claude Code