Beside every TypeScript entrypoint the builder writes an executable launcher; the runtime is told it (hq ADR 0193) #239

Merged
mesh-admin merged 1 commits from feat/0193-a-launcher-beside-every-typescript-entrypoint into main 2026-10-03 19:08:22 +00:00
Contributor

hq ADR 0193: the runtime knows no language; the build makes each served entrypoint executable.

  • Builder: beside every .js entrypoint of a TypeScript bundle, <entry>.serve.mjs, mode 0755, which imports the entrypoint and serves what it registered over MCP on stdio through the bundle's own SDK (serveRegisteredOverStdio, SDK 0.1.4). Nothing for Go, whose build is a binary.
  • The build records its launchers on the bundle (Built.Launchers → Bundle.Launchers, kept in the stored manifest).
  • Composer: MESH_TOOL_MODULES names the launcher where a build wrote one and the entrypoint where it did not, so bundles built before this keep serving until rebuilt — no flag day.

Tests: launcher written executable with the right import, none for Go; composer names the launcher for a new build and the entrypoint for an old one. Full suite passes from the worktree beside the current catalogue. End to end: the nftables bundle assembled this way, started with MESH_SERVED_MODULE=nftables, listed node-packet-filter.rules/reload/remove and firewall_rules.

hq ADR 0193: the runtime knows no language; the build makes each served entrypoint executable. - Builder: beside every `.js` entrypoint of a TypeScript bundle, `<entry>.serve.mjs`, mode 0755, which imports the entrypoint and serves what it registered over MCP on stdio through the bundle's own SDK (`serveRegisteredOverStdio`, SDK 0.1.4). Nothing for Go, whose build is a binary. - The build records its launchers on the bundle (`Built.Launchers` → `Bundle.Launchers`, kept in the stored manifest). - Composer: `MESH_TOOL_MODULES` names the launcher where a build wrote one and the entrypoint where it did not, so bundles built before this keep serving until rebuilt — no flag day. Tests: launcher written executable with the right import, none for Go; composer names the launcher for a new build and the entrypoint for an old one. Full suite passes from the worktree beside the current catalogue. End to end: the nftables bundle assembled this way, started with `MESH_SERVED_MODULE=nftables`, listed `node-packet-filter.rules/reload/remove` and `firewall_rules`.
mesh-admin added 1 commit 2026-10-03 19:08:14 +00:00
The runtime knows no language: the build makes each served entrypoint executable. For a TypeScript
bundle that is <entry>.serve.mjs, which imports the entrypoint and serves what it registered over
MCP on stdio through the bundle's own SDK. The build records its launchers on the bundle, and the
composer names the launcher where a build wrote one and the entrypoint where it did not, so bundles
built before this keep serving until they are rebuilt.
mesh-admin merged commit 2b149dd43e into main 2026-10-03 19:08:22 +00:00
mesh-admin deleted branch feat/0193-a-launcher-beside-every-typescript-entrypoint 2026-10-03 19:08:22 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#239