Revert the revert of G's mesh-sdk merge (#191): G's sdk stands again over reader release 3

Main reverted G's half merge (#189, reverted by 8afc3eb in #191) and then took the reader release's S1-S5, which
copied G's code. G's form holds where they differ (process_bus.go, seats.go, state.go and their tests); the
release's kept names stay so main's callers keep building: SeatViewPrefix beside SeatReadPrefix, and QueueInvoke's
empty strings on not-ok (with its test TestQueueInvoke). The tree differs from G's head f30dee54 only by those and
the release's two tests (objects cap option, seat states and stream kinds).

Builds: design 47 G (the milestone's sdk part, as at f30dee54)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
This commit is contained in:
2026-11-13 12:49:56 +01:00
parent 93e0a7b50d
commit 5fa64be894
211 changed files with 32027 additions and 2484 deletions
+11 -2
View File
@@ -1,8 +1,17 @@
// A tools bundle written against the protocol: the module's own tool, a seat's verb, and one that fails.
// A tools bundle written against the protocol: the module's own tool, a seat's verb, one that fails, and one that says
// who called it as the runtime proved it and refuses a caller its verb's list does not name.
import { serveStdio } from "../../dist/stdio/index.js";
import { callerOf, callIdOf, refusal } from "../../dist/callers/index.js";
const verbs = { "node-lamp.on": ["mesh-delivery-forge-bridge"] };
await serveStdio("lamp", [
{ name: "brightness", description: "set it", input: { level: { type: "number", description: "0 to 10" } }, run: async (a) => ({ level: a.level }) },
{ name: "node-lamp.on", description: "the seat's verb", input: {}, run: async () => ({ on: true }) },
{ name: "node-lamp.on", description: "the seat's verb", input: {}, run: async (a) => {
const no = refusal(verbs, "node-lamp.on", callerOf(a));
if (no) throw no;
return { on: true };
} },
{ name: "fail", description: "it throws", input: {}, run: async () => { throw new Error("the bulb is gone"); } },
{ name: "who", description: "who called", input: {}, run: async (a) => ({ caller: callerOf(a), call: callIdOf(a) }) },
]);
+4 -1
View File
@@ -1,8 +1,11 @@
// A launched bundle whose tool emits (novox/hq ADR 0193): the emit travels to the runtime over stdio.
// A launched bundle whose tool emits (novox/hq ADR 0193): the emit travels to the runtime over stdio, and so does an
// event it says on a seat (ADR 0259 §3).
import { registerModuleTools } from "../../dist/tools/index.js";
import { emit } from "../../dist/events/index.js";
import { seatPublish } from "../../dist/runtime/index.js";
import { serveRegisteredOverStdio } from "../../dist/stdio/index.js";
registerModuleTools("chime", () => [
{ name: "ring", description: "rings and says so", input: {}, run: async () => { await emit("rang", { times: 1 }); return { rang: true }; } },
{ name: "peal", description: "says it on its seat", input: {}, run: async () => { await seatPublish("mesh.seat.bell.event.pealed.anchor", { times: 2 }, "p-1"); return { pealed: true }; } },
]);
await serveRegisteredOverStdio();
+22
View File
@@ -0,0 +1,22 @@
// A launched bundle whose finding writer's transport is the bundle's (design 47 G §559): the writer's publish asks the
// runtime for an acknowledged publish, its consumer of the asks a subscription that delivers only new messages.
import { bundleTransport } from "../../dist/views/index.js";
import { registerModuleTools } from "../../dist/tools/index.js";
import { serveRegisteredOverStdio } from "../../dist/stdio/index.js";
const t = bundleTransport("keeper", "anchor");
await t.listen("mesh-conditions.findings-asked", (b) => process.stderr.write(`asked ${JSON.stringify(b)}\n`));
registerModuleTools("keeper", () => [
{
name: "say", description: "says a finding", input: {},
run: async () => {
try {
await t.publish("finding-written", { kind: "k" }, "id-1");
return { said: true };
} catch (e) {
return { said: false, why: String(e.message) };
}
},
},
]);
await serveRegisteredOverStdio();