From bd37adacdd83a31bb6adaccf84178f9b785f49ce Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 14:16:21 +0000 Subject: [PATCH] check:manifest-covers knows a desktop-only bundle is not in the web tree rudder-voice targets desktop and widget, so generate-tree skips it through isWebBuilt(); this check did not, and reported the deliberate absence as a missing plugin. It reads the same rule now. --- internal/check-manifest-covers-discovery.mjs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/check-manifest-covers-discovery.mjs b/internal/check-manifest-covers-discovery.mjs index ad2fccc97..ed8b63293 100644 --- a/internal/check-manifest-covers-discovery.mjs +++ b/internal/check-manifest-covers-discovery.mjs @@ -36,6 +36,7 @@ import { resolve, dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' import { discoverSpaRegistry } from './plugin-gallery/discover.mjs' import { TREE_NAME } from './_tree-name.mjs' +import { isWebBuilt } from './plugin-targets.mjs' const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..') const MANIFEST = join(ROOT, 'public', TREE_NAME, 'manifest.json') @@ -84,6 +85,13 @@ try { gated = Array.isArray(cfg.gatedProfiles) ? cfg.gatedProfiles.map(String) : [] } catch { gated = [] } +// ★ AND A FOURTH: a bundle whose every profile targets something other than the web (Rudder: +// desktop + widget) is built by desktop:build, never into the tree. generate-tree and run-parallel +// skip it through the same isWebBuilt(); read it here too, or its deliberate absence reads as the +// silent-omission bug this gate exists for. +const nonWeb = registry.filter(b => !isWebBuilt(join(ROOT, 'plugin-designs', b.bundle))).map(b => b.bundle) +gated = [...gated, ...nonWeb] + const manifest = JSON.parse(readFileSync(MANIFEST, 'utf8')) const listed = new Map((manifest.bundles || []).map(b => [b.bundle, (b.profiles || []).length])) const found = new Map(