Fixes the mesh-issues part of hq issue 365 (the issue tracker cannot prove who opened or changed an issue).
What changes. Each verb that writes (open, note, link, set, move, import, reserve) records who acted as stdio.CallerOf(args): the bus user the tool runner took from the caller-named subject the call arrived on (mesh-tools#27), e.g. shanks.node-tools for an agent on that machine's console. unproven where the runtime proves none: a call on the old subject (served for one release, hq issue 464) or a runtime from before mesh-tools#27. The caller still never comes from the arguments: caller, by on open, and _meta inside the arguments are refused as unknown arguments, as before. The public methods (terminal dry-run, tests) keep recording unproven; the tools call the per-caller variants. Unproven is now mesh-sdk's stdio.Unproven (same word). README's Who acted says what is proven and its limit (issue 333's caveat).
SDK pin. go.mod pins mesh-sdk/go at the head of mesh-sdk#20 (v0.1.14-0.20261011031108-d9e24e95a242). After mesh-sdk#20 merges, re-pin to its merge commit before this merges (or keep: the commit stays reachable).
Tests (fail first: they do not compile on main). caller_test.go drives the verbs through the SDK's real stdio loop: with the runtime's _meta caller, open/note/link/set/move/reserve record that user (issue, notes, moved event's caller, reservation); a caller in the arguments is refused; a call with no runtime caller records unproven. go test -race ./... and MESH_CHECK_CHANGED=modules/mesh-issues/go.mod sh merge-check.sh pass (manifest check not run here: no controller beside).
Companion pull requests, branch fix/365-a-tool-call-names-its-caller: mesh-sdk#20, mesh-tools#27, mesh-controller (grants). Merge this last: it records a caller only once the runtime hands one, and is harmless before.
Fixes the mesh-issues part of hq issue 365 (the issue tracker cannot prove who opened or changed an issue).
**What changes.** Each verb that writes (open, note, link, set, move, import, reserve) records who acted as `stdio.CallerOf(args)`: the bus user the tool runner took from the caller-named subject the call arrived on (mesh-tools#27), e.g. `shanks.node-tools` for an agent on that machine's console. `unproven` where the runtime proves none: a call on the old subject (served for one release, hq issue 464) or a runtime from before mesh-tools#27. The caller still never comes from the arguments: `caller`, `by` on open, and `_meta` inside the arguments are refused as unknown arguments, as before. The public methods (terminal dry-run, tests) keep recording `unproven`; the tools call the per-caller variants. `Unproven` is now mesh-sdk's `stdio.Unproven` (same word). README's *Who acted* says what is proven and its limit (issue 333's caveat).
**SDK pin.** go.mod pins mesh-sdk/go at the head of mesh-sdk#20 (v0.1.14-0.20261011031108-d9e24e95a242). After mesh-sdk#20 merges, re-pin to its merge commit before this merges (or keep: the commit stays reachable).
**Tests (fail first: they do not compile on main).** caller_test.go drives the verbs through the SDK's real stdio loop: with the runtime's `_meta` caller, open/note/link/set/move/reserve record that user (issue, notes, moved event's caller, reservation); a caller in the arguments is refused; a call with no runtime caller records `unproven`. `go test -race ./...` and `MESH_CHECK_CHANGED=modules/mesh-issues/go.mod sh merge-check.sh` pass (manifest check not run here: no controller beside).
Companion pull requests, branch fix/365-a-tool-call-names-its-caller: mesh-sdk#20, mesh-tools#27, mesh-controller (grants). Merge this last: it records a caller only once the runtime hands one, and is harmless before.
Deliverynovox/mesh-catalog@f134ed59101b — covered since 2026-10-11T10:11:55Z
Delivery plan — builds mesh-issues, mesh-knowledge → novox; no bus step
tier 0: mesh-issues, mesh-knowledge
novox: receives mesh-issues, mesh-knowledge
Machines
build-agent on ace: passed — carried by plan-1791711055874604089
mesh-issues on novox: passed — healthy 3 times over 2m41s
mesh-knowledge on novox: passed — judged with mesh-issues: healthy 3 times over 2m41s
mesh-sdk on every machine running it: sent
mesh-issues on the rest running it: sent
mesh-knowledge on the rest running it: sent
Transitions
2026-10-11 09:26 (new) → proposed (announced): novox/mesh-catalog#207's head announced
2026-10-11 09:34 proposed → checked (checked): the verdict names this commit
2026-10-11 09:34 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-11 09:52 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-11 10:07 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-11 10:11 delivering → covered (covered): covered: a later merge that contains it was delivered: novox/mesh-catalog@a3f4387e26 (merged as 300406e0 into main, walk plan-1791712541213638551)
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@f134ed59101b` — **covered** since 2026-10-11T10:11:55Z
**Delivery plan** — builds mesh-issues, mesh-knowledge → novox; no bus step
- tier 0: mesh-issues, mesh-knowledge
- novox: receives mesh-issues, mesh-knowledge
**Machines**
- build-agent on ace: passed — carried by plan-1791711055874604089
- mesh-issues on novox: passed — healthy 3 times over 2m41s
- mesh-knowledge on novox: passed — judged with mesh-issues: healthy 3 times over 2m41s
- mesh-sdk on every machine running it: sent
- mesh-issues on the rest running it: sent
- mesh-knowledge on the rest running it: sent
**Transitions**
- 2026-10-11 09:26 (new) → proposed (announced): novox/mesh-catalog#207's head announced
- 2026-10-11 09:34 proposed → checked (checked): the verdict names this commit
- 2026-10-11 09:34 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-11 09:52 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-11 10:07 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-11 10:11 delivering → covered (covered): covered: a later merge that contains it was delivered: novox/mesh-catalog@a3f4387e2630 (merged as 300406e0 into main, walk plan-1791712541213638551)
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-issues)
mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
Delivery plan — builds mesh-issues → novox; no bus step
tier 0: mesh-issues
novox: receives mesh-issues
read by no module's build: modules/mesh-issues/README.md, modules/mesh-issues/cmd/mesh-issues/caller_test.go
Run by the build seat on shanks as build-1791689202884700358 (builds --log build-1791689202884700358).
--- the gate: mesh-issues
mesh-issues: ok, invokes claude-code.claude_code_judge, seat:mesh-delivery.checks, seat:operator-channel.notify, records.records_status, records.records_list, records.records_read, keeps state issues, counters, grooming, reservations
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-11T03:09:01Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-11T03:09:01Z
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 1 module(s) in 1 tier(s): mesh-issues
notes:
- modules/mesh-issues/README.md and modules/mesh-issues/cmd/mesh-issues/caller_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.005s
words: 12 retired words and 70 daemons' lines, none in the 39619 strings of 658 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.013s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/paths 0.006s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 69, as kept
testing modules/mesh-issues
ok mesh-issues/cmd/mesh-issues 8.491s
--- its merge-check-typescript.sh (typescript toolchain)
**Merge check** at `61f81d44`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-issues)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
**Delivery plan** — builds mesh-issues → novox; no bus step
- tier 0: mesh-issues
- novox: receives mesh-issues
- read by no module's build: modules/mesh-issues/README.md, modules/mesh-issues/cmd/mesh-issues/caller_test.go
Run by the build seat on shanks as `build-1791689202884700358` (`builds --log build-1791689202884700358`).
```
--- the gate: mesh-issues
mesh-issues: ok, invokes claude-code.claude_code_judge, seat:mesh-delivery.checks, seat:operator-channel.notify, records.records_status, records.records_list, records.records_read, keeps state issues, counters, grooming, reservations
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-11T03:09:01Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-11T03:09:01Z
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 1 module(s) in 1 tier(s): mesh-issues
notes:
- modules/mesh-issues/README.md and modules/mesh-issues/cmd/mesh-issues/caller_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.005s
words: 12 retired words and 70 daemons' lines, none in the 39619 strings of 658 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.013s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/paths 0.006s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 69, as kept
testing modules/mesh-issues
ok mesh-issues/cmd/mesh-issues 8.491s
--- its merge-check-typescript.sh (typescript toolchain)
```
Companions for hq issue 365: mesh-sdk#20, mesh-controller#224, mesh-tools#27. Merge order: mesh-sdk#20, mesh-controller#224, mesh-tools#27, then this (re-pinned to mesh-sdk#20's merge commit).
Companions for hq issue 365: mesh-sdk#20, mesh-controller#224, mesh-tools#27. Merge order: mesh-sdk#20, mesh-controller#224, mesh-tools#27, then this (re-pinned to mesh-sdk#20's merge commit).
The tool runner now takes a call's caller from the subject it arrived on and
hands it to the module through the SDK (stdio.CallerOf); the tracker records
that bus user on what each verb writes instead of unproven. Never from the
arguments, which still refuse any caller, and unproven where the runtime proves
none. Needs mesh-sdk's go/caller.go (pinned at its branch head until merged).
mesh/merge-gate pass: builds mesh-issues, mesh-knowledge → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/delivery covered: a later merge that contains it was delivered: novox/mesh-catalog@a3f4387e2630 (merged as 300406e0 into main, walk plan-17917125412…
Both pin mesh-sdk/go at 4cf45b5 (mesh-sdk#20 merged). mesh-knowledge's one
reading of the caller, callerOf, now answers stdio.CallerOf, so a call on the
caller-named subject is recorded as its caller's bus user and any other as
unproven, never from the arguments.
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-issues, mesh-knowledge)
mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
Delivery plan — builds mesh-issues, mesh-knowledge → novox; no bus step
tier 0: mesh-issues, mesh-knowledge
novox: receives mesh-issues, mesh-knowledge
read by no module's build: modules/mesh-issues/README.md, modules/mesh-issues/cmd/mesh-issues/caller_test.go, modules/mesh-knowledge/README.md, modules/mesh-knowledge/cmd/mesh-knowledge/caller_test.go
Run by the build seat on g14 as build-1791710817207905411 (builds --log build-1791710817207905411).
--- the gate: mesh-issues, mesh-knowledge
note: mesh-knowledge uses the seat "operator-channel", which no module declares and the mesh does not define among the manifests given; registration judges it against the whole catalogue, and passing the declaring module's manifest too judges it here
mesh-issues: ok, invokes claude-code.claude_code_judge, seat:mesh-delivery.checks, seat:operator-channel.notify, records.records_status, records.records_list, records.records_read, keeps state issues, counters, grooming, reservations
mesh-knowledge: ok, 1 tool(s), invokes seat:issue-tracker.reserve, claude-code.claude_code_judge, records.records_status, records.records_list, records.records_read, seat:operator-channel.notify, ready: keep by unit every 30s; watch by its tool knowledge_health every 1m0s
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
2 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-11T09:30:02Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-11T09:30:02Z
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 1 tier(s): mesh-issues, mesh-knowledge
notes:
- modules/mesh-issues/README.md, modules/mesh-issues/cmd/mesh-issues/caller_test.go, modules/mesh-knowledge/README.md and modules/mesh-knowledge/cmd/mesh-knowledge/caller_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.002s
words: 12 retired words and 70 daemons' lines, none in the 41389 strings of 672 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.009s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/paths 0.005s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 69, as kept
testing modules/mesh-issues
ok mesh-issues/cmd/mesh-issues 8.035s
testing modules/mesh-knowledge
ok mesh-knowledge/cmd/mesh-knowledge 89.963s
--- its merge-check-typescript.sh (typescript toolchain)
**Merge check** at `f134ed59`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-issues, mesh-knowledge)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
**Delivery plan** — builds mesh-issues, mesh-knowledge → novox; no bus step
- tier 0: mesh-issues, mesh-knowledge
- novox: receives mesh-issues, mesh-knowledge
- read by no module's build: modules/mesh-issues/README.md, modules/mesh-issues/cmd/mesh-issues/caller_test.go, modules/mesh-knowledge/README.md, modules/mesh-knowledge/cmd/mesh-knowledge/caller_test.go
Run by the build seat on g14 as `build-1791710817207905411` (`builds --log build-1791710817207905411`).
```
--- the gate: mesh-issues, mesh-knowledge
note: mesh-knowledge uses the seat "operator-channel", which no module declares and the mesh does not define among the manifests given; registration judges it against the whole catalogue, and passing the declaring module's manifest too judges it here
mesh-issues: ok, invokes claude-code.claude_code_judge, seat:mesh-delivery.checks, seat:operator-channel.notify, records.records_status, records.records_list, records.records_read, keeps state issues, counters, grooming, reservations
mesh-knowledge: ok, 1 tool(s), invokes seat:issue-tracker.reserve, claude-code.claude_code_judge, records.records_status, records.records_list, records.records_read, seat:operator-channel.notify, ready: keep by unit every 30s; watch by its tool knowledge_health every 1m0s
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
2 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-11T09:30:02Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-11T09:30:02Z
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 1 tier(s): mesh-issues, mesh-knowledge
notes:
- modules/mesh-issues/README.md, modules/mesh-issues/cmd/mesh-issues/caller_test.go, modules/mesh-knowledge/README.md and modules/mesh-knowledge/cmd/mesh-knowledge/caller_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.002s
words: 12 retired words and 70 daemons' lines, none in the 41389 strings of 672 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.009s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/paths 0.005s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 69, as kept
testing modules/mesh-issues
ok mesh-issues/cmd/mesh-issues 8.035s
testing modules/mesh-knowledge
ok mesh-knowledge/cmd/mesh-knowledge 89.963s
--- its merge-check-typescript.sh (typescript toolchain)
```
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.
Fixes the mesh-issues part of hq issue 365 (the issue tracker cannot prove who opened or changed an issue).
What changes. Each verb that writes (open, note, link, set, move, import, reserve) records who acted as
stdio.CallerOf(args): the bus user the tool runner took from the caller-named subject the call arrived on (mesh-tools#27), e.g.shanks.node-toolsfor an agent on that machine's console.unprovenwhere the runtime proves none: a call on the old subject (served for one release, hq issue 464) or a runtime from before mesh-tools#27. The caller still never comes from the arguments:caller,byon open, and_metainside the arguments are refused as unknown arguments, as before. The public methods (terminal dry-run, tests) keep recordingunproven; the tools call the per-caller variants.Unprovenis now mesh-sdk'sstdio.Unproven(same word). README's Who acted says what is proven and its limit (issue 333's caveat).SDK pin. go.mod pins mesh-sdk/go at the head of mesh-sdk#20 (v0.1.14-0.20261011031108-d9e24e95a242). After mesh-sdk#20 merges, re-pin to its merge commit before this merges (or keep: the commit stays reachable).
Tests (fail first: they do not compile on main). caller_test.go drives the verbs through the SDK's real stdio loop: with the runtime's
_metacaller, open/note/link/set/move/reserve record that user (issue, notes, moved event's caller, reservation); a caller in the arguments is refused; a call with no runtime caller recordsunproven.go test -race ./...andMESH_CHECK_CHANGED=modules/mesh-issues/go.mod sh merge-check.shpass (manifest check not run here: no controller beside).Companion pull requests, branch fix/365-a-tool-call-names-its-caller: mesh-sdk#20, mesh-tools#27, mesh-controller (grants). Merge this last: it records a caller only once the runtime hands one, and is harmless before.
Delivery
novox/mesh-catalog@f134ed59101b— covered since 2026-10-11T10:11:55ZDelivery plan — builds mesh-issues, mesh-knowledge → novox; no bus step
Machines
Transitions
300406e0into main, walk plan-1791712541213638551)The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
61f81d44mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-issues)mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)Delivery plan — builds mesh-issues → novox; no bus step
Run by the build seat on shanks as
build-1791689202884700358(builds --log build-1791689202884700358).Companions for hq issue 365: mesh-sdk#20, mesh-controller#224, mesh-tools#27. Merge order: mesh-sdk#20, mesh-controller#224, mesh-tools#27, then this (re-pinned to mesh-sdk#20's merge commit).
61f81d4454tof134ed5910Merge check at
f134ed59mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-issues, mesh-knowledge)mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)Delivery plan — builds mesh-issues, mesh-knowledge → novox; no bus step
Run by the build seat on g14 as
build-1791710817207905411(builds --log build-1791710817207905411).