go/cli: carry mesh-cli's standard input with its line, for the controller's terminal alone (hq ADR 0259 §10, ADR 0272) #15

Merged
mesh-admin merged 1 commits from feat/a-terminal-line-takes-standard-input into main 2026-10-09 15:31:48 +00:00
Contributor

Reviewers' checklist (the same on all four PRs)

  • Standard input is bounded at 64 KiB (MaxStdin), refused over it by mesh-cli before asking and by every reader after.
  • It is given only to a line that runs as the controller's terminal; an ordinary call carrying it is refused and nothing runs.
  • It is never logged, never in the controller's calls record (not even as base64), never in its journal, never in an answer, never resent with a follow.
  • On the bus it travels only inside the one core request mesh.control..cli: no stream captures that subject, only the controller is granted to subscribe it, and every hop (node-engine to bus, bus to controller) is TLS with the pinned certificate. It is not sealed end to end: the bus server process holds it in memory while it routes the request. Sealing it to the controller would need a controller key every engine knows, which does not exist today; said here so a reviewer can ask for it.
  • A terminal is never read by mesh-cli: only a pipe or a file.

This PR: Request.Stdin (omitted when empty), MaxStdin, MaxRequest grown by base64 of that bound, AskWith; Ask unchanged. Tests: the bound refused on both sides; 64 KiB of binary input travels whole within MaxRequest; a request without input names no stdin.

Order: this first and tagged; then mesh-host, mesh-catalog (mesh-cli) and mesh-controller, which carry the pseudo-version f047d0a until the tag. sh merge-check.sh passes locally. Do not merge without review.

**Reviewers' checklist (the same on all four PRs)** - Standard input is bounded at 64 KiB (`MaxStdin`), refused over it by mesh-cli before asking and by every reader after. - It is given only to a line that runs as the controller's terminal; an ordinary call carrying it is refused and nothing runs. - It is never logged, never in the controller's calls record (not even as base64), never in its journal, never in an answer, never resent with a follow. - On the bus it travels only inside the one core request mesh.control.<node>.cli: no stream captures that subject, only the controller is granted to subscribe it, and every hop (node-engine to bus, bus to controller) is TLS with the pinned certificate. It is **not** sealed end to end: the bus server process holds it in memory while it routes the request. Sealing it to the controller would need a controller key every engine knows, which does not exist today; said here so a reviewer can ask for it. - A terminal is never read by mesh-cli: only a pipe or a file. **This PR**: `Request.Stdin` (omitted when empty), `MaxStdin`, `MaxRequest` grown by base64 of that bound, `AskWith`; `Ask` unchanged. Tests: the bound refused on both sides; 64 KiB of binary input travels whole within `MaxRequest`; a request without input names no stdin. **Order**: this first and tagged; then mesh-host, mesh-catalog (mesh-cli) and mesh-controller, which carry the pseudo-version f047d0a until the tag. `sh merge-check.sh` passes locally. Do not merge without review.
mesh-admin added 1 commit 2026-10-09 14:51:07 +00:00
go/cli: carry mesh-cli's standard input with its line, bounded at 64 KiB, for the controller's terminal alone
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: its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript), go/merge-check.sh (go)
mesh/delivery covered after its stop: a later walk that contains it was delivered: plan-1791659640519725407 (novox/mesh-sdk at 19cfe0ef into main, done, …
mesh/delivery-group group feat/a-terminal-line-takes-standard-input delivered: every member is delivered
f047d0a4a9
A secret given at the terminal (secret accept … --from -) has no way through mesh-cli today: the controller
runs every line with no standard input. The request now carries it, refused over 64 KiB by mesh-cli and by
the reader alike, and MaxRequest grows by what base64 makes of that bound.
Author
Contributor

Delivery novox/mesh-sdk@f047d0a4a970 — stopped since 2026-10-09T16:11:04Z

Covered: covered after its stop: a later walk that contains it was delivered: plan-1791659640519725407 (novox/mesh-sdk at 19cfe0ef into main, done, contains its merge ff1fcd44)

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

  • tier 0: mesh-sdk

Group feat/a-terminal-line-takes-standard-input, in order: novox/mesh-controller@07e59c535e → novox/mesh-host@4ea6a2f04e → novox/mesh-sdk@f047d0a4a9

Transitions

  • 2026-10-09 14:51 (new) → proposed (announced): novox/mesh-sdk#15's head announced
  • 2026-10-09 14:53 proposed → checked (checked): the verdict names this commit
  • 2026-10-09 14:53 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-09 15:31 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 16:11 published → stopped (stop): its group feat/a-terminal-line-takes-standard-input stopped: novox/mesh-controller@07e59c535e superseded

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

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-sdk@f047d0a4a970` — **stopped** since 2026-10-09T16:11:04Z **Covered**: covered after its stop: a later walk that contains it was delivered: plan-1791659640519725407 (novox/mesh-sdk at 19cfe0ef into main, done, contains its merge ff1fcd44) **Delivery plan** — builds mesh-sdk, sent nowhere; no bus step - tier 0: mesh-sdk **Group** `feat/a-terminal-line-takes-standard-input`, in order: novox/mesh-controller@07e59c535e7c → novox/mesh-host@4ea6a2f04e2c → novox/mesh-sdk@f047d0a4a970 - novox/mesh-controller@07e59c535e7c before novox/mesh-host@4ea6a2f04e2c: built by, over engine before controller - novox/mesh-controller@07e59c535e7c before novox/mesh-sdk@f047d0a4a970: built by - composed together: pass — every machine composes with the change as it did without (4 of 4 compose) **Transitions** - 2026-10-09 14:51 (new) → proposed (announced): novox/mesh-sdk#15's head announced - 2026-10-09 14:53 proposed → checked (checked): the verdict names this commit - 2026-10-09 14:53 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-09 15:31 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 16:11 published → stopped (stop): its group feat/a-terminal-line-takes-standard-input stopped: novox/mesh-controller@07e59c535e7c superseded The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Author
Contributor

Merge check at f047d0a4

  • 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 — its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript), go/merge-check.sh (go)

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

  • tier 0: mesh-sdk

Run by the build seat on novox as build-1791557476561512440 (builds --log build-1791557476561512440).

# 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: 64.637589
  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: 57.376641
  type: 'test'
  ...
# Subtest: an addition acts on the first pass
ok 13 - an addition acts on the first pass
  ---
  duration_ms: 16.13592
  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: 47.690219
  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: 2.597973
  type: 'test'
  ...
# [tools] broken: contributor failed, exposing none: Error: no token
# Subtest: semver orders releases
ok 16 - semver orders releases
  ---
  duration_ms: 1.225822
  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.831431
  type: 'test'
  ...
# [provisioner:analytics] webapp-anchor: no longer in /tmp/prov-vPsIo0/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-09T14:53:28.910Z
# [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.193248
  type: 'test'
  ...
# [provisioner:s3-bucket] mesh_anchor_ncloud: no longer in /tmp/prov-derived-O0psxe/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-09T14:53:29.144Z
# [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: 132.387393
  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.968289
  type: 'test'
  ...
# [provisioner:postgres-database] contributions file unreadable (/tmp/prov-T5oWCf/postgres-database.json): ENOENT: no such file or directory, open '/tmp/prov-T5oWCf/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-T5oWCf/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-T5oWCf/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-T5oWCf/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-T5oWCf/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-T5oWCf/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: 1317.333565
  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: 212.072001
  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: 70.970958
  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: 402.262416
  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: 402.275036
  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: 301.839902
  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: 34.752323
  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.33264
  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.741171
  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.2246
  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: 126.126596
  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.330832
  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: 83.527143
  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: 3203.340681
  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: 82.972102
  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: 286.930994
  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.881074
  type: 'test'
  ...
1..37
# tests 37
# suites 0
# pass 37
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3974.043341
NOT TESTED HERE: go/ (the Go binding) — the Go toolchain runs it from go/merge-check.sh
NOT TESTED HERE: python/, rust/, c/ — no toolchain of theirs runs a merge check
--- its go/merge-check.sh (go toolchain)
ok  	git.novox.be/novox/mesh-sdk/go	0.005s
ok  	git.novox.be/novox/mesh-sdk/go/asker	0.003s
ok  	git.novox.be/novox/mesh-sdk/go/asks	0.003s
ok  	git.novox.be/novox/mesh-sdk/go/cli	0.007s
?   	git.novox.be/novox/mesh-sdk/go/example	[no test files]
**Merge check** at `f047d0a4` - `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** — its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript), go/merge-check.sh (go) **Delivery plan** — builds mesh-sdk, sent nowhere; no bus step - tier 0: mesh-sdk Run by the build seat on novox as `build-1791557476561512440` (`builds --log build-1791557476561512440`). ``` # 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: 64.637589 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: 57.376641 type: 'test' ... # Subtest: an addition acts on the first pass ok 13 - an addition acts on the first pass --- duration_ms: 16.13592 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: 47.690219 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: 2.597973 type: 'test' ... # [tools] broken: contributor failed, exposing none: Error: no token # Subtest: semver orders releases ok 16 - semver orders releases --- duration_ms: 1.225822 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.831431 type: 'test' ... # [provisioner:analytics] webapp-anchor: no longer in /tmp/prov-vPsIo0/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-09T14:53:28.910Z # [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.193248 type: 'test' ... # [provisioner:s3-bucket] mesh_anchor_ncloud: no longer in /tmp/prov-derived-O0psxe/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-09T14:53:29.144Z # [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: 132.387393 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.968289 type: 'test' ... # [provisioner:postgres-database] contributions file unreadable (/tmp/prov-T5oWCf/postgres-database.json): ENOENT: no such file or directory, open '/tmp/prov-T5oWCf/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-T5oWCf/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-T5oWCf/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-T5oWCf/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-T5oWCf/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-T5oWCf/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: 1317.333565 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: 212.072001 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: 70.970958 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: 402.262416 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: 402.275036 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: 301.839902 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: 34.752323 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.33264 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.741171 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.2246 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: 126.126596 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.330832 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: 83.527143 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: 3203.340681 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: 82.972102 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: 286.930994 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.881074 type: 'test' ... 1..37 # tests 37 # suites 0 # pass 37 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 3974.043341 NOT TESTED HERE: go/ (the Go binding) — the Go toolchain runs it from go/merge-check.sh NOT TESTED HERE: python/, rust/, c/ — no toolchain of theirs runs a merge check --- its go/merge-check.sh (go toolchain) ok git.novox.be/novox/mesh-sdk/go 0.005s ok git.novox.be/novox/mesh-sdk/go/asker 0.003s ok git.novox.be/novox/mesh-sdk/go/asks 0.003s ok git.novox.be/novox/mesh-sdk/go/cli 0.007s ? git.novox.be/novox/mesh-sdk/go/example [no test files] ```
mesh-admin merged commit ff1fcd4441 into main 2026-10-09 15:31:48 +00:00
mesh-admin deleted branch feat/a-terminal-line-takes-standard-input 2026-10-09 15:31:48 +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-sdk#15