go/cli: the local protocol mesh-cli speaks to the node-engine (hq ADR 0272) #14

Merged
mesh-admin merged 2 commits from feat/cli-local-protocol into main 2026-10-09 11:38:36 +00:00
Contributor

Part of hq ADR 0272 (accepted 2026-10-09, hq PR #243) and issue 343: the controller's terminal had no command.

What. A Go package go/cli: the node-engine's socket path (/run/nox-mesh-host/cli.sock), one request (the command line as words) and one answer (stdout, stderr, exit, terminal, why, refused, cut, unknown), each one line of JSON with bounds (64 KiB request, 16 MiB answer), Ask (mesh-cli's side), Refusal (nothing ran) and NotKnown(call, why) (asked, outcome not known: the line may have run, see the call). Standard library only.

Why here. mesh-cli (a catalogue module) and the node-engine both speak it; ADR 0039 as ADR 0188 reads it puts a local protocol a module's program speaks to its runtime in the SDK. The bus request the engine then makes to the controller is the transport's and is not here.

The Go binding is now checked in the Go toolchain. go/merge-check.sh (gofmt, vet, the whole suite) is declared by the root check (# mesh-check-also: go go/merge-check.sh), as mesh-lab does; the root check no longer says "NOT TESTED HERE: go/" for it. This PR changes its own check, so main's version judged it; the new one judges the PRs after it.

Release. Merge with a merge commit, not a squash, then tag the merge commit go/v0.1.9 (go/v0.1.8 is mesh-sdk #12's).

Pins. mesh-host #69 and mesh-catalog #156 pin this branch's final head as git.novox.be/novox/mesh-sdk/go v0.1.8-0.20261009103748-a5a040c9049b (head a5a040c9). Once go/v0.1.9 is tagged they move to it.

Tests. Round trip (bytes preserved), a request over the bound or naming nothing refused, Ask over a real unix socket, a missing socket said, an unknown outcome never a refusal. sh merge-check.sh (TypeScript + Go) passes locally; the mesh's verdict: gate PASS, repo-check PASS.

Merge order. First: this, then mesh-host #69, mesh-controller #176, mesh-catalog #156; then mesh-cli assigned to every node at the terminal.

Part of hq ADR 0272 (accepted 2026-10-09, hq PR #243) and issue 343: the controller's terminal had no command. **What.** A Go package `go/cli`: the node-engine's socket path (`/run/nox-mesh-host/cli.sock`), one request (the command line as words) and one answer (stdout, stderr, exit, terminal, why, refused, cut, unknown), each one line of JSON with bounds (64 KiB request, 16 MiB answer), `Ask` (mesh-cli's side), `Refusal` (nothing ran) and `NotKnown(call, why)` (asked, outcome not known: the line may have run, see the call). Standard library only. **Why here.** mesh-cli (a catalogue module) and the node-engine both speak it; ADR 0039 as ADR 0188 reads it puts a local protocol a module's program speaks to its runtime in the SDK. The bus request the engine then makes to the controller is the transport's and is not here. **The Go binding is now checked in the Go toolchain.** `go/merge-check.sh` (gofmt, vet, the whole suite) is declared by the root check (`# mesh-check-also: go go/merge-check.sh`), as mesh-lab does; the root check no longer says "NOT TESTED HERE: go/" for it. This PR changes its own check, so main's version judged it; the new one judges the PRs after it. **Release.** Merge with a **merge commit, not a squash**, then tag the merge commit **`go/v0.1.9`** (`go/v0.1.8` is mesh-sdk #12's). **Pins.** mesh-host #69 and mesh-catalog #156 pin this branch's final head as `git.novox.be/novox/mesh-sdk/go v0.1.8-0.20261009103748-a5a040c9049b` (head a5a040c9). Once `go/v0.1.9` is tagged they move to it. **Tests.** Round trip (bytes preserved), a request over the bound or naming nothing refused, `Ask` over a real unix socket, a missing socket said, an unknown outcome never a refusal. `sh merge-check.sh` (TypeScript + Go) passes locally; the mesh's verdict: gate PASS, repo-check PASS. **Merge order.** First: this, then mesh-host #69, mesh-controller #176, mesh-catalog #156; then `mesh-cli` assigned to every node at the terminal.
mesh-admin added 1 commit 2026-10-09 10:11:47 +00:00
mesh-cli holds no credential: it asks the node-engine on its own machine
over a socket, and the node-engine reads the account from the kernel. The
socket's path, the request and the answer are shared by the program and the
node-engine, so they live here once (ADR 0039: a local protocol a module's
program speaks to its runtime). The bus request the node-engine then makes
is the transport's, and stays out of the SDK.
jschoubben added 1 commit 2026-10-09 10:37:51 +00:00
go/cli: an outcome not known is not a refusal; the Go binding is checked in the Go toolchain
mesh/merge-gate pass: builds mesh-sdk, sent nowhere; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; it…
mesh/delivery delivered
a5a040c904
Review of hq ADR 0272: a line whose answer did not come in time may have
run, and saying "nothing ran" there is a lie. Answer.Unknown and NotKnown
say it may have run and name the call to look at.

The SDK's repo-check ran in the TypeScript toolchain only and said
"NOT TESTED HERE: go/". go/merge-check.sh now runs the Go binding in the Go
toolchain, declared by the root check (mesh-check-also), as the lab does.

Released as go/v0.1.9 (go/v0.1.8 is mesh-sdk #12's).
Author
Contributor

Delivery novox/mesh-sdk@a5a040c9049b — delivered since 2026-10-09T11:40:45Z

Delivery plan — builds mesh-sdk, sent nowhere; no bus step

  • tier 0: mesh-sdk

Machines

  • mesh-sdk on every machine running it: sent

Transitions

  • 2026-10-09 10:38 (new) → proposed (announced): novox/mesh-sdk#14's head announced
  • 2026-10-09 10:39 proposed → checked (checked): the verdict names this commit
  • 2026-10-09 10:39 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-09 11:39 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-09 11:39 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path
  • 2026-10-09 11:40 delivering → delivered (done): its walk is done: every machine of its deploy plan passed, or was left as its policy says

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-sdk@a5a040c9049b` — **delivered** since 2026-10-09T11:40:45Z **Delivery plan** — builds mesh-sdk, sent nowhere; no bus step - tier 0: mesh-sdk **Machines** - mesh-sdk on every machine running it: sent **Transitions** - 2026-10-09 10:38 (new) → proposed (announced): novox/mesh-sdk#14's head announced - 2026-10-09 10:39 proposed → checked (checked): the verdict names this commit - 2026-10-09 10:39 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-09 11:39 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-09 11:39 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path - 2026-10-09 11:40 delivering → delivered (done): its walk is done: every machine of its deploy plan passed, or was left as its policy says The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Author
Contributor

Merge check at a5a040c9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-sdk)
  • mesh/repo-check: PASS — THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; its merge-check.sh passed

Delivery plan — builds mesh-sdk, sent nowhere; no bus step

  • tier 0: mesh-sdk

Run by the build seat on ace as build-1791542295679942086 (builds --log build-1791542295679942086).

# Subtest: rejected, the set is kept active and not asked again while the mesh says the same
ok 10 - rejected, the set is kept active and not asked again while the mesh says the same
  ---
  duration_ms: 179.351325
  type: 'test'
  ...
# Subtest: a waiting set the mesh asks for again settles, and nothing is retired
ok 11 - a waiting set the mesh asks for again settles, and nothing is retired
  ---
  duration_ms: 65.731684
  type: 'test'
  ...
# Subtest: delete refuses an active consumer and deletes only the named retired one
ok 12 - delete refuses an active consumer and deletes only the named retired one
  ---
  duration_ms: 53.944158
  type: 'test'
  ...
# Subtest: an addition acts on the first pass
ok 13 - an addition acts on the first pass
  ---
  duration_ms: 16.613754
  type: 'test'
  ...
# Subtest: what the backend holds at start is retired by the same rules
ok 14 - what the backend holds at start is retired by the same rules
  ---
  duration_ms: 45.306841
  type: 'test'
  ...
# Subtest: the four tools are registered for the module and answer
ok 15 - the four tools are registered for the module and answer
  ---
  duration_ms: 0.717438
  type: 'test'
  ...
# [tools] broken: contributor failed, exposing none: Error: no token
# Subtest: semver orders releases
ok 16 - semver orders releases
  ---
  duration_ms: 0.855377
  type: 'test'
  ...
# Subtest: module tools register and collect, a thrower is skipped not fatal
ok 17 - module tools register and collect, a thrower is skipped not fatal
  ---
  duration_ms: 0.549883
  type: 'test'
  ...
# [provisioner:analytics] webapp-anchor: no longer in /tmp/prov-9i2QkD/analytics.json; RETIRED, MARK ONLY — this provider cannot disable a consumer (its adapter has no retire), so webapp-anchor KEEPS ITS ACCESS and its data until a person deletes it with `cleanup delete`. Nothing was changed in the backend (novox/hq ADR 0230): the mesh stopped asking for it: the same answer in 5 passes over 0s, from 2026-10-09T10:39:54.856Z
# [provisioner:analytics] webapp-anchor: DELETING, asked by someone: gone for good
# Subtest: provisioner creates each consumer with the mesh's login and password; remove waits for a person's delete
ok 18 - provisioner creates each consumer with the mesh's login and password; remove waits for a person's delete
  ---
  duration_ms: 217.554289
  type: 'test'
  ...
# [provisioner:s3-bucket] mesh_anchor_ncloud: no longer in /tmp/prov-derived-jVAHNf/store.json; RETIRED, MARK ONLY — this provider cannot disable a consumer (its adapter has no retire), so mesh_anchor_ncloud KEEPS ITS ACCESS and its data until a person deletes it with `cleanup delete`. Nothing was changed in the backend (novox/hq ADR 0230): the mesh stopped asking for it: the same answer in 5 passes over 0s, from 2026-10-09T10:39:55.089Z
# [provisioner:s3-bucket] mesh_anchor_ncloud: DELETING, asked by someone: unassigned
# Subtest: provisioner hands the adapter what the mesh derived, and still has it at withdrawal
ok 19 - provisioner hands the adapter what the mesh derived, and still has it at withdrawal
  ---
  duration_ms: 124.342239
  type: 'test'
  ...
# Subtest: provisioner stops calling an unreadable secret a race, and says what to look at
ok 20 - provisioner stops calling an unreadable secret a race, and says what to look at
  ---
  duration_ms: 71.820722
  type: 'test'
  ...
# [provisioner:postgres-database] contributions file unreadable (/tmp/prov-QJ9NYq/postgres-database.json): ENOENT: no such file or directory, open '/tmp/prov-QJ9NYq/postgres-database.json'; nothing applied or removed until it can be read
# [provisioner:postgres-database] contributions file readable again
# [provisioner:postgres-database] contributions file is not JSON (/tmp/prov-QJ9NYq/postgres-database.json): SyntaxError: Expected property name or '}' in JSON at position 2 (line 1 column 3); nothing applied or removed until it can be read
# [provisioner:postgres-database] contributions file readable again
# [provisioner:postgres-database] /tmp/prov-QJ9NYq/postgres-database.json is for s3-bucket, not postgres-database; nothing applied or removed until it can be read
# [provisioner:postgres-database] contributions file readable again
# [provisioner:postgres-database] /tmp/prov-QJ9NYq/postgres-database.json has no given list; nothing applied or removed until it can be read
# [provisioner:postgres-database] contributions file readable again
# [provisioner:postgres-database] RETIREMENT WAITS FOR A PERSON: the mesh no longer asks for 2 of the 2 consumer(s) this provider holds (mesh_anchor_forge, mesh_anchor_mail), more than 3, or more than 50% of the 2 held. Nothing is retired until `retire approve` or `retire reject` (novox/hq ADR 0230)
# [provisioner:postgres-database] retirement of mesh_anchor_forge, mesh_anchor_mail approved by test: both unassigned on purpose
# [provisioner:postgres-database] mesh_anchor_forge: no longer in /tmp/prov-QJ9NYq/postgres-database.json; RETIRED, MARK ONLY — this provider cannot disable a consumer (its adapter has no retire), so mesh_anchor_forge KEEPS ITS ACCESS and its data until a person deletes it with `cleanup delete`. Nothing was changed in the backend (novox/hq ADR 0230): approved by test: both unassigned on purpose
# [provisioner:postgres-database] mesh_anchor_mail: no longer in /tmp/prov-QJ9NYq/postgres-database.json; RETIRED, MARK ONLY — this provider cannot disable a consumer (its adapter has no retire), so mesh_anchor_mail KEEPS ITS ACCESS and its data until a person deletes it with `cleanup delete`. Nothing was changed in the backend (novox/hq ADR 0230): approved by test: both unassigned on purpose
# Subtest: provisioner removes nothing while its contributions file cannot be used (novox/hq issue 241)
ok 21 - provisioner removes nothing while its contributions file cannot be used (novox/hq issue 241)
  ---
  duration_ms: 1306.3892
  type: 'test'
  ...
# [provisioner:cache] webapp-anchor: the backend no longer holds it; applying again
# Subtest: provisioner applies again what the backend no longer holds, and trusts memory without holds
ok 22 - provisioner applies again what the backend no longer holds, and trusts memory without holds
  ---
  duration_ms: 213.546721
  type: 'test'
  ...
# [provisioner:cache] webapp-anchor: could not check the backend, will ask again: Error: connection refused
# [provisioner:cache] webapp-anchor: could not check the backend, will ask again: Error: connection refused
# [provisioner:cache] webapp-anchor: could not check the backend, will ask again: Error: connection refused
# Subtest: provisioner keeps a consumer applied when the backend cannot be asked
ok 23 - provisioner keeps a consumer applied when the backend cannot be asked
  ---
  duration_ms: 72.170931
  type: 'test'
  ...
# Subtest: provisioner backs off when create does not satisfy holds, and says so
ok 24 - provisioner backs off when create does not satisfy holds, and says so
  ---
  duration_ms: 401.536818
  type: 'test'
  ...
# Subtest: provisioner treats a failed or hung holds as could-not-ask, and never logs the password
ok 25 - provisioner treats a failed or hung holds as could-not-ask, and never logs the password
  ---
  duration_ms: 401.006603
  type: 'test'
  ...
# Subtest: provisioner stops a verify pass at a timeout, and retries a failed re-apply at the next check
ok 26 - provisioner stops a verify pass at a timeout, and retries a failed re-apply at the next check
  ---
  duration_ms: 300.797586
  type: 'test'
  ...
# Subtest: modules can SERVE: a real async tool, loaded and invoked over the broker
ok 27 - modules can SERVE: a real async tool, loaded and invoked over the broker
  ---
  duration_ms: 27.31593
  type: 'test'
  ...
# Subtest: serving refuses one module exposing two tools of the same name
ok 28 - serving refuses one module exposing two tools of the same name
  ---
  duration_ms: 0.254388
  type: 'test'
  ...
# Subtest: events: a module emits, a listener and the audit sink (\#) both receive it, with metadata
ok 29 - events: a module emits, a listener and the audit sink (\#) both receive it, with metadata
  ---
  duration_ms: 0.581973
  type: 'test'
  ...
# Subtest: each registration is given the environment asked for it, and sees no other's (ADR 0192)
ok 30 - each registration is given the environment asked for it, and sees no other's (ADR 0192)
  ---
  duration_ms: 0.233579
  type: 'test'
  ...
# Subtest: a bundle on stdio lists its tools and answers a call, a seat's verb among them
ok 31 - a bundle on stdio lists its tools and answers a call, a seat's verb among them
  ---
  duration_ms: 125.19616
  type: 'test'
  ...
# Subtest: a bundle served as its module lists the seat's verbs as the seat's, whichever registered first (ADR 0193)
ok 32 - a bundle served as its module lists the seat's verbs as the seat's, whichever registered first (ADR 0193)
  ---
  duration_ms: 83.455374
  type: 'test'
  ...
# Subtest: a launched tool's emit is asked of the runtime, and the call answers once the runtime has published (ADR 0193)
ok 33 - a launched tool's emit is asked of the runtime, and the call answers once the runtime has published (ADR 0193)
  ---
  duration_ms: 82.416831
  type: 'test'
  ...
# Subtest: a launched bundle subscribes as it is imported, handles events the runtime hands it, and asks through it (ADR 0198)
ok 34 - a launched bundle subscribes as it is imported, handles events the runtime hands it, and asks through it (ADR 0198)
  ---
  duration_ms: 3199.345237
  type: 'test'
  ...
# Subtest: a subscribe the runtime refused leaves no handler behind, so one event is handled once (novox/hq issue 276)
ok 35 - a subscribe the runtime refused leaves no handler behind, so one event is handled once (novox/hq issue 276)
  ---
  duration_ms: 83.248144
  type: 'test'
  ...
# Subtest: a launched bundle watches its state as it is imported, has the current values before it goes on, and keeps state through the runtime (ADR 0201)
ok 36 - a launched bundle watches its state as it is imported, has the current values before it goes on, and keeps state through the runtime (ADR 0201)
  ---
  duration_ms: 264.720434
  type: 'test'
  ...
# Subtest: topics match as the runtime's do: * one segment, \# and ** any number
ok 37 - topics match as the runtime's do: * one segment, \# and ** any number
  ---
  duration_ms: 2.170057
  type: 'test'
  ...
1..37
# tests 37
# suites 0
# pass 37
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3915.01792
NOT TESTED HERE: go/ (the Go binding) — the TypeScript toolchain holds no Go compiler
NOT TESTED HERE: python/, rust/, c/ — no toolchain of theirs runs a merge check
**Merge check** at `a5a040c9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-sdk) - `mesh/repo-check`: **PASS** — THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; its merge-check.sh passed **Delivery plan** — builds mesh-sdk, sent nowhere; no bus step - tier 0: mesh-sdk Run by the build seat on ace as `build-1791542295679942086` (`builds --log build-1791542295679942086`). ``` # Subtest: rejected, the set is kept active and not asked again while the mesh says the same ok 10 - rejected, the set is kept active and not asked again while the mesh says the same --- duration_ms: 179.351325 type: 'test' ... # Subtest: a waiting set the mesh asks for again settles, and nothing is retired ok 11 - a waiting set the mesh asks for again settles, and nothing is retired --- duration_ms: 65.731684 type: 'test' ... # Subtest: delete refuses an active consumer and deletes only the named retired one ok 12 - delete refuses an active consumer and deletes only the named retired one --- duration_ms: 53.944158 type: 'test' ... # Subtest: an addition acts on the first pass ok 13 - an addition acts on the first pass --- duration_ms: 16.613754 type: 'test' ... # Subtest: what the backend holds at start is retired by the same rules ok 14 - what the backend holds at start is retired by the same rules --- duration_ms: 45.306841 type: 'test' ... # Subtest: the four tools are registered for the module and answer ok 15 - the four tools are registered for the module and answer --- duration_ms: 0.717438 type: 'test' ... # [tools] broken: contributor failed, exposing none: Error: no token # Subtest: semver orders releases ok 16 - semver orders releases --- duration_ms: 0.855377 type: 'test' ... # Subtest: module tools register and collect, a thrower is skipped not fatal ok 17 - module tools register and collect, a thrower is skipped not fatal --- duration_ms: 0.549883 type: 'test' ... # [provisioner:analytics] webapp-anchor: no longer in /tmp/prov-9i2QkD/analytics.json; RETIRED, MARK ONLY — this provider cannot disable a consumer (its adapter has no retire), so webapp-anchor KEEPS ITS ACCESS and its data until a person deletes it with `cleanup delete`. Nothing was changed in the backend (novox/hq ADR 0230): the mesh stopped asking for it: the same answer in 5 passes over 0s, from 2026-10-09T10:39:54.856Z # [provisioner:analytics] webapp-anchor: DELETING, asked by someone: gone for good # Subtest: provisioner creates each consumer with the mesh's login and password; remove waits for a person's delete ok 18 - provisioner creates each consumer with the mesh's login and password; remove waits for a person's delete --- duration_ms: 217.554289 type: 'test' ... # [provisioner:s3-bucket] mesh_anchor_ncloud: no longer in /tmp/prov-derived-jVAHNf/store.json; RETIRED, MARK ONLY — this provider cannot disable a consumer (its adapter has no retire), so mesh_anchor_ncloud KEEPS ITS ACCESS and its data until a person deletes it with `cleanup delete`. Nothing was changed in the backend (novox/hq ADR 0230): the mesh stopped asking for it: the same answer in 5 passes over 0s, from 2026-10-09T10:39:55.089Z # [provisioner:s3-bucket] mesh_anchor_ncloud: DELETING, asked by someone: unassigned # Subtest: provisioner hands the adapter what the mesh derived, and still has it at withdrawal ok 19 - provisioner hands the adapter what the mesh derived, and still has it at withdrawal --- duration_ms: 124.342239 type: 'test' ... # Subtest: provisioner stops calling an unreadable secret a race, and says what to look at ok 20 - provisioner stops calling an unreadable secret a race, and says what to look at --- duration_ms: 71.820722 type: 'test' ... # [provisioner:postgres-database] contributions file unreadable (/tmp/prov-QJ9NYq/postgres-database.json): ENOENT: no such file or directory, open '/tmp/prov-QJ9NYq/postgres-database.json'; nothing applied or removed until it can be read # [provisioner:postgres-database] contributions file readable again # [provisioner:postgres-database] contributions file is not JSON (/tmp/prov-QJ9NYq/postgres-database.json): SyntaxError: Expected property name or '}' in JSON at position 2 (line 1 column 3); nothing applied or removed until it can be read # [provisioner:postgres-database] contributions file readable again # [provisioner:postgres-database] /tmp/prov-QJ9NYq/postgres-database.json is for s3-bucket, not postgres-database; nothing applied or removed until it can be read # [provisioner:postgres-database] contributions file readable again # [provisioner:postgres-database] /tmp/prov-QJ9NYq/postgres-database.json has no given list; nothing applied or removed until it can be read # [provisioner:postgres-database] contributions file readable again # [provisioner:postgres-database] RETIREMENT WAITS FOR A PERSON: the mesh no longer asks for 2 of the 2 consumer(s) this provider holds (mesh_anchor_forge, mesh_anchor_mail), more than 3, or more than 50% of the 2 held. Nothing is retired until `retire approve` or `retire reject` (novox/hq ADR 0230) # [provisioner:postgres-database] retirement of mesh_anchor_forge, mesh_anchor_mail approved by test: both unassigned on purpose # [provisioner:postgres-database] mesh_anchor_forge: no longer in /tmp/prov-QJ9NYq/postgres-database.json; RETIRED, MARK ONLY — this provider cannot disable a consumer (its adapter has no retire), so mesh_anchor_forge KEEPS ITS ACCESS and its data until a person deletes it with `cleanup delete`. Nothing was changed in the backend (novox/hq ADR 0230): approved by test: both unassigned on purpose # [provisioner:postgres-database] mesh_anchor_mail: no longer in /tmp/prov-QJ9NYq/postgres-database.json; RETIRED, MARK ONLY — this provider cannot disable a consumer (its adapter has no retire), so mesh_anchor_mail KEEPS ITS ACCESS and its data until a person deletes it with `cleanup delete`. Nothing was changed in the backend (novox/hq ADR 0230): approved by test: both unassigned on purpose # Subtest: provisioner removes nothing while its contributions file cannot be used (novox/hq issue 241) ok 21 - provisioner removes nothing while its contributions file cannot be used (novox/hq issue 241) --- duration_ms: 1306.3892 type: 'test' ... # [provisioner:cache] webapp-anchor: the backend no longer holds it; applying again # Subtest: provisioner applies again what the backend no longer holds, and trusts memory without holds ok 22 - provisioner applies again what the backend no longer holds, and trusts memory without holds --- duration_ms: 213.546721 type: 'test' ... # [provisioner:cache] webapp-anchor: could not check the backend, will ask again: Error: connection refused # [provisioner:cache] webapp-anchor: could not check the backend, will ask again: Error: connection refused # [provisioner:cache] webapp-anchor: could not check the backend, will ask again: Error: connection refused # Subtest: provisioner keeps a consumer applied when the backend cannot be asked ok 23 - provisioner keeps a consumer applied when the backend cannot be asked --- duration_ms: 72.170931 type: 'test' ... # Subtest: provisioner backs off when create does not satisfy holds, and says so ok 24 - provisioner backs off when create does not satisfy holds, and says so --- duration_ms: 401.536818 type: 'test' ... # Subtest: provisioner treats a failed or hung holds as could-not-ask, and never logs the password ok 25 - provisioner treats a failed or hung holds as could-not-ask, and never logs the password --- duration_ms: 401.006603 type: 'test' ... # Subtest: provisioner stops a verify pass at a timeout, and retries a failed re-apply at the next check ok 26 - provisioner stops a verify pass at a timeout, and retries a failed re-apply at the next check --- duration_ms: 300.797586 type: 'test' ... # Subtest: modules can SERVE: a real async tool, loaded and invoked over the broker ok 27 - modules can SERVE: a real async tool, loaded and invoked over the broker --- duration_ms: 27.31593 type: 'test' ... # Subtest: serving refuses one module exposing two tools of the same name ok 28 - serving refuses one module exposing two tools of the same name --- duration_ms: 0.254388 type: 'test' ... # Subtest: events: a module emits, a listener and the audit sink (\#) both receive it, with metadata ok 29 - events: a module emits, a listener and the audit sink (\#) both receive it, with metadata --- duration_ms: 0.581973 type: 'test' ... # Subtest: each registration is given the environment asked for it, and sees no other's (ADR 0192) ok 30 - each registration is given the environment asked for it, and sees no other's (ADR 0192) --- duration_ms: 0.233579 type: 'test' ... # Subtest: a bundle on stdio lists its tools and answers a call, a seat's verb among them ok 31 - a bundle on stdio lists its tools and answers a call, a seat's verb among them --- duration_ms: 125.19616 type: 'test' ... # Subtest: a bundle served as its module lists the seat's verbs as the seat's, whichever registered first (ADR 0193) ok 32 - a bundle served as its module lists the seat's verbs as the seat's, whichever registered first (ADR 0193) --- duration_ms: 83.455374 type: 'test' ... # Subtest: a launched tool's emit is asked of the runtime, and the call answers once the runtime has published (ADR 0193) ok 33 - a launched tool's emit is asked of the runtime, and the call answers once the runtime has published (ADR 0193) --- duration_ms: 82.416831 type: 'test' ... # Subtest: a launched bundle subscribes as it is imported, handles events the runtime hands it, and asks through it (ADR 0198) ok 34 - a launched bundle subscribes as it is imported, handles events the runtime hands it, and asks through it (ADR 0198) --- duration_ms: 3199.345237 type: 'test' ... # Subtest: a subscribe the runtime refused leaves no handler behind, so one event is handled once (novox/hq issue 276) ok 35 - a subscribe the runtime refused leaves no handler behind, so one event is handled once (novox/hq issue 276) --- duration_ms: 83.248144 type: 'test' ... # Subtest: a launched bundle watches its state as it is imported, has the current values before it goes on, and keeps state through the runtime (ADR 0201) ok 36 - a launched bundle watches its state as it is imported, has the current values before it goes on, and keeps state through the runtime (ADR 0201) --- duration_ms: 264.720434 type: 'test' ... # Subtest: topics match as the runtime's do: * one segment, \# and ** any number ok 37 - topics match as the runtime's do: * one segment, \# and ** any number --- duration_ms: 2.170057 type: 'test' ... 1..37 # tests 37 # suites 0 # pass 37 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 3915.01792 NOT TESTED HERE: go/ (the Go binding) — the TypeScript toolchain holds no Go compiler NOT TESTED HERE: python/, rust/, c/ — no toolchain of theirs runs a merge check ```
mesh-admin merged commit cd01c3701d into main 2026-10-09 11:38:36 +00:00
mesh-admin deleted branch feat/cli-local-protocol 2026-10-09 11:38:36 +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/mesh-sdk#14