ADR 0188: a module's own code is bundles in any language, and a tools bundle speaks MCP to the runtime; design 38 gains WP1b #300

Merged
mesh-admin merged 3 commits from decision/0187-a-modules-own-code-is-bundles-in-any-language into main 2026-10-02 19:27:40 +00:00
Contributor

Records the operator's direction of 2026-10-02, which no record held until now: the SDK must not limit who writes a module; tools and services may be written in any language (Rust, C, Go, Python, JavaScript); one module may ship several bundles — its tools, a seat's implementation, a daemon; skeleton first, a full implementation when the work requires it.

ADR 0187 (extends 0175):

  1. A module's own code is bundles, never an image; images are for third-party software a module installs.
  2. A bundle the runtime serves is a process that speaks MCP over stdio to the node's runtime (tools/list, tools/call; a tool named <seat>.<verb> is the seat's implementation). Importing a TypeScript bundle stays as the shortcut, not the contract. Any language with an MCP library can write a tools bundle today.
  3. A service bundle is a process in whatever language it compiles from — already possible, now the rule.
  4. One thin SDK per language under ADR 0039's test: the stdio loop, the tool type, a few primitives; no transport. First set: TypeScript, Go, Python, Rust, C.
  5. Skeleton first; a skeleton is proven by one bundle in that language answering one tool on the live mesh.

Rejected: one language as now; a full bus client per language (the cascade multiplied, 0039's refusal); a protocol of our own.

Also: dated mechanism-changed notes in 0175, 0039 and 0150; design 38 records WP1 as built (mesh-tools #29) and adds WP1b — the launcher beside the loader and the skeleton SDKs, with its proof; the glossary's bundle widens. records.py, index.py (regenerated), cycle.py all pass.

Records the operator's direction of 2026-10-02, which no record held until now: the SDK must not limit who writes a module; tools **and** services may be written in any language (Rust, C, Go, Python, JavaScript); one module may ship several bundles — its tools, a seat's implementation, a daemon; skeleton first, a full implementation when the work requires it. **ADR 0187** (extends 0175): 1. A module's own code is bundles, never an image; images are for third-party software a module installs. 2. A bundle the runtime serves is a process that speaks **MCP over stdio** to the node's runtime (`tools/list`, `tools/call`; a tool named `<seat>.<verb>` is the seat's implementation). Importing a TypeScript bundle stays as the shortcut, not the contract. Any language with an MCP library can write a tools bundle today. 3. A service bundle is a `process` in whatever language it compiles from — already possible, now the rule. 4. One thin SDK per language under ADR 0039's test: the stdio loop, the tool type, a few primitives; no transport. First set: TypeScript, Go, Python, Rust, C. 5. Skeleton first; a skeleton is proven by one bundle in that language answering one tool on the live mesh. Rejected: one language as now; a full bus client per language (the cascade multiplied, 0039's refusal); a protocol of our own. **Also:** dated mechanism-changed notes in 0175, 0039 and 0150; design 38 records WP1 as built (mesh-tools #29) and adds **WP1b** — the launcher beside the loader and the skeleton SDKs, with its proof; the glossary's *bundle* widens. `records.py`, `index.py` (regenerated), `cycle.py` all pass.
mesh-admin added 1 commit 2026-10-02 16:57:14 +00:00
The operator's direction, absent from every record until now: the SDK must not limit who writes a
module; tools and services may be written in any language; one module may ship several bundles
(tools, a seat's implementation, a daemon); skeleton first, a full implementation when the work
requires it. ADR 0175 had the runtime import a bundle, which only JavaScript can be.

0187 makes a tools bundle a process the node's runtime launches and speaks MCP over stdio to —
the vocabulary the runtime already speaks outward — so any language with an MCP library can write
one today and the mesh's SDK per language is thin; the transport stays in the runtime (0039's
refusal, kept). Importing a TypeScript bundle is the shortcut, not the contract. Notes in 0175,
0039 and 0150 say where their mechanism moved; design 38 records WP1 as built and adds WP1b (the
launcher and the skeleton SDKs); the glossary's bundle widens.
mesh-admin changed title from ADR 0187: a module's own code is bundles in any language, and a tools bundle speaks MCP to the runtime; design 38 gains WP1b to ADR 0188: a module's own code is bundles in any language, and a tools bundle speaks MCP to the runtime; design 38 gains WP1b 2026-10-02 19:01:03 +00:00
jschoubben added 2 commits 2026-10-02 19:01:04 +00:00
Two records shared 0187 (issue 155's collision); the branch landing last
renumbers, and this is it. Only the number changes.
Author
Contributor

Renumbered to ADR 0188. 0187 landed on main first, as "A dead tracker is not the machine's failure", and cycle.py refuses two records with one number; the branch that lands last renumbers (playbook 03, issue 155).

What changed, in two commits on top of yours (no rewrite, so a pull fast-forwards):

  • a merge of main into this branch, clean;
  • the record renamed to 0188, its heading, and every reference to it: the glossary, ADRs 0039, 0150 and 0175, the README index and design 38. Only the number changes, 9 lines.

records/index/cycle pass. The branch name still says 0187; that is only a name. Pull before pushing again.

Renumbered to **ADR 0188**. 0187 landed on main first, as "A dead tracker is not the machine's failure", and cycle.py refuses two records with one number; the branch that lands last renumbers (playbook 03, issue 155). What changed, in two commits on top of yours (no rewrite, so a pull fast-forwards): - a merge of main into this branch, clean; - the record renamed to 0188, its heading, and every reference to it: the glossary, ADRs 0039, 0150 and 0175, the README index and design 38. Only the number changes, 9 lines. records/index/cycle pass. The branch name still says 0187; that is only a name. **Pull before pushing again.**
mesh-admin merged commit e11bf320c9 into main 2026-10-02 19:27:40 +00:00
mesh-admin deleted branch decision/0187-a-modules-own-code-is-bundles-in-any-language 2026-10-02 19:27:40 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/hq#300