hq ADR 0195 and 0197, the runtime and console side (controller side: mesh-controller #241, #242).
Announcing (0197). The Go node-tools answers the NATS services protocol's $SRV.PING/$SRV.INFO/$SRV.STATS (bare and under its name and instance) as one service node-tools, instance = machine, one endpoint per tool or seat verb it serves right now — every subject it is served on, plain and per-node — with metadata kind, module, tool, seat, scope, node, interchangeable, description, schema. The TypeScript runtime the per-module containers run announces the same way as a service named for its module. Serving is unchanged. nats micro list / nats micro info read it natively (verified with natscli against the test bus).
Discovery (0195). The console announces five tools — mesh_overview, mesh_machine, mesh_search, mesh_describe, mesh_call — and resolves addresses <seat>.<verb>, <node>/<seat>.<verb>, <node>/<module>.<tool> (+ <module>.<tool> for interchangeable modules; a stateful module without a machine is refused naming its machines). Its index comes from one $SRV.INFO gathered for 750 ms, kept 5 s. "Not answering" = an assignment whose module has tools: true in the controller's modules JSON and announced nothing on that machine; modules without tools never appear. The catalogue roster, per-module tools requests and all text parsing are gone. MESH_CONSOLE_FLAT=1 keeps the flat list, built from the announcements; old <module>.<tool> names still call.
Deviation from the ADR's wording: one service per runtime process (not per module), because allow_responses: max 1 lets a process answer each request once; the endpoint metadata names module and seat. The controller's grants (#242) follow this.
Tests: Go (runtime announces exactly what it serves, parsed with micro.Info; follows a re-issued membership; console: five tools, zero roster requests, not-answering computed from records, late module found, flat mode) — run with -p 1, three times; TypeScript 37/37.
hq ADR 0195 and 0197, the runtime and console side (controller side: mesh-controller #241, #242).
**Announcing (0197).** The Go node-tools answers the NATS services protocol's `$SRV.PING`/`$SRV.INFO`/`$SRV.STATS` (bare and under its name and instance) as one service `node-tools`, instance = machine, one endpoint per tool or seat verb it serves right now — every subject it is served on, plain and per-node — with metadata `kind`, `module`, `tool`, `seat`, `scope`, `node`, `interchangeable`, `description`, `schema`. The TypeScript runtime the per-module containers run announces the same way as a service named for its module. Serving is unchanged. `nats micro list` / `nats micro info` read it natively (verified with natscli against the test bus).
**Discovery (0195).** The console announces five tools — `mesh_overview`, `mesh_machine`, `mesh_search`, `mesh_describe`, `mesh_call` — and resolves addresses `<seat>.<verb>`, `<node>/<seat>.<verb>`, `<node>/<module>.<tool>` (+ `<module>.<tool>` for interchangeable modules; a stateful module without a machine is refused naming its machines). Its index comes from one `$SRV.INFO` gathered for 750 ms, kept 5 s. "Not answering" = an assignment whose module has `tools: true` in the controller's `modules` JSON and announced nothing on that machine; modules without tools never appear. The catalogue roster, per-module `tools` requests and all text parsing are gone. `MESH_CONSOLE_FLAT=1` keeps the flat list, built from the announcements; old `<module>.<tool>` names still call.
**Deviation from the ADR's wording:** one service per runtime process (not per module), because `allow_responses: max 1` lets a process answer each request once; the endpoint metadata names module and seat. The controller's grants (#242) follow this.
Tests: Go (runtime announces exactly what it serves, parsed with `micro.Info`; follows a re-issued membership; console: five tools, zero roster requests, not-answering computed from records, late module found, flat mode) — run with `-p 1`, three times; TypeScript 37/37.
mesh_overview, mesh_machine, mesh_search, mesh_describe and mesh_call walk the mesh's structure;
every tool has one address per layer: <seat>.<verb>, <node>/<seat>.<verb>, <node>/<module>.<tool>,
and <module>.<tool> for a module the mesh issued a plain subject. A stateful module called without
its machine, a node seat without one, a mesh seat with one, or a module on the wrong machine is
refused naming what would work. Answers come from the mesh when asked, kept five seconds, so a tool
that arrives mid-session is found. The flat catalogue stays behind MESH_CONSOLE_FLAT=1 and old
<module>.<tool> names still answer.
The Go runtime answers $SRV.PING, $SRV.INFO and $SRV.STATS (and per name and id) in the
io.nats.micro.v1 format with what it serves at the moment it is asked: one service per runtime
process, since the bus admits one reply per request from each responder, and one endpoint per tool
per subject, its metadata saying module, seat, scope, machine, description, schema and whether the
module is interchangeable. Serving is unchanged.
The console gathers one $SRV.INFO request's answers instead of asking the catalogue's roster and
each module's tools, and reads the controller's records as JSON for what should have answered: an
assignment with tools that did not announce is named, a module without tools never is. The text
parsers of node list and module list are gone. Packages share the test bus: go test -p 1.
The per-module containers still run this runtime; their tools and the seats they hold (the store's,
the catalogue's) must be found by the console the same way as the node runtime's. It answers
$SRV.PING, $SRV.INFO and $SRV.STATS with one service per process, one endpoint per tool per subject
and per seat verb served, the metadata as the Go runtime writes it.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
hq ADR 0195 and 0197, the runtime and console side (controller side: mesh-controller #241, #242).
Announcing (0197). The Go node-tools answers the NATS services protocol's
$SRV.PING/$SRV.INFO/$SRV.STATS(bare and under its name and instance) as one servicenode-tools, instance = machine, one endpoint per tool or seat verb it serves right now — every subject it is served on, plain and per-node — with metadatakind,module,tool,seat,scope,node,interchangeable,description,schema. The TypeScript runtime the per-module containers run announces the same way as a service named for its module. Serving is unchanged.nats micro list/nats micro inforead it natively (verified with natscli against the test bus).Discovery (0195). The console announces five tools —
mesh_overview,mesh_machine,mesh_search,mesh_describe,mesh_call— and resolves addresses<seat>.<verb>,<node>/<seat>.<verb>,<node>/<module>.<tool>(+<module>.<tool>for interchangeable modules; a stateful module without a machine is refused naming its machines). Its index comes from one$SRV.INFOgathered for 750 ms, kept 5 s. "Not answering" = an assignment whose module hastools: truein the controller'smodulesJSON and announced nothing on that machine; modules without tools never appear. The catalogue roster, per-moduletoolsrequests and all text parsing are gone.MESH_CONSOLE_FLAT=1keeps the flat list, built from the announcements; old<module>.<tool>names still call.Deviation from the ADR's wording: one service per runtime process (not per module), because
allow_responses: max 1lets a process answer each request once; the endpoint metadata names module and seat. The controller's grants (#242) follow this.Tests: Go (runtime announces exactly what it serves, parsed with
micro.Info; follows a re-issued membership; console: five tools, zero roster requests, not-answering computed from records, late module found, flat mode) — run with-p 1, three times; TypeScript 37/37.