The lab said nothing was running while two machines were
'incus list' failed because this shell had no permission to reach the daemon, incusOk returned null, and the caller wrote ?? "[]". So 'mesh-lab list' printed 'no scenario instances standing' -- confidently, about a question it had never managed to ask. The comment on incusOk warns about exactly this, in those words: absence and success made indistinguishable. Three of its own callers then did it. Two listings and the live diagram, which would have drawn an empty scenario rather than fail -- a picture that is confidently wrong, which is worse than none. Anything enumerating what exists now goes through enumerate() and throws. incusOk stays right where failure genuinely means no, like instanceExists, and there is a test holding that line so this does not get over-corrected until nothing can be asked at all. Worth noting 'mesh-lab check' already diagnoses this precise cause, down to 'a session that predates it cannot see it'. The diagnosis existed; the listing just never asked for it.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
* by the running machine now — nothing is inferred from a file on disk.
|
||||
*/
|
||||
|
||||
import { incusOk, taggedNetworks } from "../incus/client.ts";
|
||||
import { incus, incusOk, taggedNetworks } from "../incus/client.ts";
|
||||
import { depthOf, type Diagram, type DiagramMachine, type DiagramSegment } from "./model.ts";
|
||||
|
||||
interface RawInstance {
|
||||
@@ -28,7 +28,10 @@ interface RawInstance {
|
||||
export async function diagramFromLive(instanceId: string): Promise<Diagram> {
|
||||
const networks = (await taggedNetworks()).filter((n) => n.instanceId === instanceId);
|
||||
|
||||
const json = (await incusOk(["list", "--format", "json"], 30_000)) ?? "[]";
|
||||
// Not `incusOk(...) ?? "[]"`. A picture is read from what runs (novox/hq ADR 0018), and a read
|
||||
// that failed and became an empty list would draw an empty scenario rather than fail — a
|
||||
// diagram that is confidently wrong, which is worse than no diagram.
|
||||
const json = (await incus(["list", "--format", "json"], 30_000)).stdout.trim() || "[]";
|
||||
const parsed = JSON.parse(json) as RawInstance[];
|
||||
const mine = parsed.filter((i) => i.config?.["user.mesh-lab.instance"] === instanceId);
|
||||
if (mine.length === 0 && networks.length === 0) throw new Error(`no scenario instance '${instanceId}'`);
|
||||
|
||||
Reference in New Issue
Block a user