From d1ebfd80998d0b7a62fb486303d3e92d43f15c91 Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Sat, 5 Sep 2026 14:29:55 -0400 Subject: [PATCH] Show active Mediascholar bootstrap --- slab/bin/prox-worker.mjs | 6 ++++++ slab/test/prox-worker.test.mjs | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/slab/bin/prox-worker.mjs b/slab/bin/prox-worker.mjs index 5652a39079..4ed4e89d6b 100644 --- a/slab/bin/prox-worker.mjs +++ b/slab/bin/prox-worker.mjs @@ -214,6 +214,7 @@ export async function buildMediascholarStatus(config) { ]); const current = runs[0] || null; const running = mainUnit.ActiveState === "active"; + const bootstrapping = new Set(["active", "activating"]).has(bootstrapUnit.ActiveState); const requiredTools = doctor?.paperTools ? Object.values(doctor.paperTools) : []; const toolsReady = requiredTools.length > 0 && requiredTools.every(Boolean); const admission = doctor?.admission; @@ -237,6 +238,11 @@ export async function buildMediascholarStatus(config) { detail = phase === "authoring-paper" ? "Research, drafting, building, and visual QA are running inside the paper stack." : "The topic is being formed without a human-supplied prompt."; + } else if (bootstrapping) { + state = "working"; + phase = "bootstrap"; + headline = "Installing the paper mill"; + detail = "The toolchain is being installed at low priority inside Jasellite's resource limits."; } else if (current?.status === "candidate") { state = "review"; phase = "candidate"; diff --git a/slab/test/prox-worker.test.mjs b/slab/test/prox-worker.test.mjs index f78c74c60e..ac2853e52f 100644 --- a/slab/test/prox-worker.test.mjs +++ b/slab/test/prox-worker.test.mjs @@ -116,6 +116,12 @@ test("headless Prox exposes a path-free public Mediascholar status", async (t) = assert.equal(JSON.stringify(status).includes("/private/"), false); assert.equal(JSON.stringify(status).includes("secret-provider"), false); + await writeFile(fakeSystemctl, `#!/bin/sh\ncase "$*" in\n *show*mediascholar-bootstrap.service*) printf 'ActiveState=activating\\nSubState=start\\nResult=success\\nExecMainStatus=0\\n' ;;\n *show*) printf 'ActiveState=inactive\\nSubState=dead\\nResult=success\\nExecMainStatus=0\\n' ;;\n *list-timers*) printf '[]\\n' ;;\nesac\n`); + const bootstrapping = await buildMediascholarStatus(config); + assert.equal(bootstrapping.state, "working"); + assert.equal(bootstrapping.phase, "bootstrap"); + assert.equal(bootstrapping.headline, "Installing the paper mill"); + const server = createWorkerServer(config, "127.0.0.1"); const port = await listen(server); t.after(() => close(server)); -- 2.51.2