@@ -31,13 +31,11 @@ import {
3131 type DefaultWorkflow ,
3232 type ModelSource ,
3333 type SeedTenantArgs ,
34- type ToolRegistryPublisher ,
3534} from "./tenant-seed" ;
3635import {
3736 fetchRegistryTarballSource ,
3837 installRegistryTarball ,
3938 isCorbitsToolsRegistrySeeded ,
40- publishCorbitsToolsRegistry ,
4139 REQUIRED_SEED_TOOL_PACKAGES ,
4240} from "@corbits/tool-registry-publish" ;
4341import type { WorkflowPusher } from "@corbits/connections/workflow-push" ;
@@ -322,8 +320,6 @@ export type ReconcileArgs = {
322320 } ;
323321 model : ModelSource | undefined ;
324322 pushWorkflow : WorkflowPusher ;
325- /** Defaults to the real `publishCorbitsToolsRegistry`. */
326- publishToolRegistry ?: ToolRegistryPublisher ;
327323 /** Test seam standing in for the deploy step, the same way
328324 * `ensureSeeded` accepts one. */
329325 seedTenantFn ?: ( args : SeedTenantArgs ) => ReturnType < typeof seedTenant > ;
@@ -426,15 +422,20 @@ export async function resolveTenantDeployer(
426422/**
427423 * Installs ONLY the absent pins, tools first, then skills + grants +
428424 * workflows together through `seedTenant`. Safe to re-run: with every
429- * pin present this is READS ONLY — `seedTenant` is never entered, the
430- * publish is gated on the registry not already seeded, and a tarball
431- * already published under its name@version is skipped (immutable).
432- * Sidecar-unavailable (502-class) pins report `blocked` without
433- * throwing — the same class `ensureSeeded` treats as pending; any other
434- * failure reports `failed` and is safe to re-run. Skill pins are
435- * re-read after the seed pass: still-absent (stock cutover — the skills
436- * mount is gone, so the 404-tolerant plant writes nothing) reports
437- * `blocked`, never `installed`.
425+ * pin present this is READS ONLY — `seedTenant` is never entered.
426+ * `workspace-pack` tool pins are never packed or published here (CL-8190:
427+ * that requires `fs` + `bun build`, which no hub-triggered path may run —
428+ * an operator publishes them out of band with `bun run publish-tools`);
429+ * an absent workspace-pack pin reports `blocked` and this function stays
430+ * read-only for tools. A `tarball-url` pin is still installed here — that
431+ * install is a plain fetch + upload, and a tarball already published
432+ * under its name@version is skipped (immutable). Sidecar-unavailable
433+ * (502-class) pins report `blocked` without throwing — the same class
434+ * `ensureSeeded` treats as pending; any other failure reports `failed`
435+ * and is safe to re-run. Skill pins are re-read after the seed pass:
436+ * still-absent (stock cutover — the skills mount is gone, so the
437+ * 404-tolerant plant writes nothing) reports `blocked`, never
438+ * `installed`.
438439 */
439440export async function reconcileTenantDesiredState (
440441 args : ReconcileArgs ,
@@ -458,26 +459,18 @@ export async function reconcileTenantDesiredState(
458459 }
459460 } else {
460461 try {
462+ // `workspace-pack` pins are never packed or published from here
463+ // (CL-8190): packing needs `fs` + `bun build`, which no
464+ // hub-triggered reconcile path may run. An absent pin just reports
465+ // `blocked` — the operator installs it out of band with
466+ // `bun run publish-tools`.
461467 const workspacePacks = TENANT_DESIRED_STATE . toolPackages . filter (
462468 ( pin ) => pin . source . kind === "workspace-pack" ,
463469 ) ;
464- if ( workspacePacks . length > 0 ) {
465- const publish = args . publishToolRegistry ?? publishCorbitsToolsRegistry ;
466- await publish ( {
467- api,
468- cookies,
469- hubUrl : args . hubUrl ,
470- tenantId,
471- log,
472- } ) ;
473- for ( const pin of workspacePacks ) {
474- pins . push ( {
475- name : pin . name ,
476- kind : "tool-package" ,
477- status : "installed" ,
478- } ) ;
479- }
470+ for ( const pin of workspacePacks ) {
471+ pins . push ( { name : pin . name , kind : "tool-package" , status : "blocked" } ) ;
480472 }
473+ if ( workspacePacks . length > 0 ) sawBlocked = true ;
481474 // The tarball-url half of the tool install: live and wired, but
482475 // data-gated — no `tarball-url` pin exists in
483476 // `TENANT_DESIRED_STATE` yet (no external artifacts exist), so this
0 commit comments