Fixes hq issues 743 and 750 together (playbook 08, related issues in one fix: switching the history on before the history tool stops handing out content would make 750 worse).
743, the history daemon and the copy.
modules/clipmenu declares clipmenud.service as a user unit of the operator's account, enabled and running, so $mod+. shows history again; the xinitrc start is removed.
A drop-in starts it through a launcher that waits quietly until the display exists, reading DISPLAY and XAUTHORITY from the user manager (systemctl --user show-environment) on every pass, with the text-only xsel first on PATH; StartLimitIntervalSec=0 and RestartSec=2s, so it never gives up before X is up.
copy reads the clipboard back and fails with the reason (xsel's message, the transient unit's journal) instead of reporting success; it never echoes the copied text.
750, nothing hands out what was copied.
history returns only times, sizes, the count and whether the daemon collects; clipmenu_paste returns only the byte count; clipmenu_delete takes only place together with the entry's at and refuses when they no longer match.
README: a re-login is needed after delivery (the running session's own clipmenud holds the lock until then).
Tests: history has no content; copy fails on a read-back mismatch or a missing display; the manifest declares the unit, drop-in and launcher; the real launcher uses DISPLAY at once and waits with no or several sockets until the display arrives; delete refuses a stale place. go vet, go test (-race), MESH_CHECK_MODULES=clipmenu merge-check.sh pass.
Reviewed independently before push, three rounds: APPROVE at 2353350d79. Its two small follow-ups are issue 857.
Fixes hq issues 743 and 750 together (playbook 08, related issues in one fix: switching the history on before the history tool stops handing out content would make 750 worse).
**743, the history daemon and the copy.**
- modules/clipmenu declares `clipmenud.service` as a user unit of the operator's account, enabled and running, so `$mod+.` shows history again; the xinitrc start is removed.
- A drop-in starts it through a launcher that waits quietly until the display exists, reading DISPLAY and XAUTHORITY from the user manager (`systemctl --user show-environment`) on every pass, with the text-only xsel first on PATH; StartLimitIntervalSec=0 and RestartSec=2s, so it never gives up before X is up.
- `copy` reads the clipboard back and fails with the reason (xsel's message, the transient unit's journal) instead of reporting success; it never echoes the copied text.
**750, nothing hands out what was copied.**
- `history` returns only times, sizes, the count and whether the daemon collects; `clipmenu_paste` returns only the byte count; `clipmenu_delete` takes only `place` together with the entry's `at` and refuses when they no longer match.
README: a re-login is needed after delivery (the running session's own clipmenud holds the lock until then).
Tests: history has no content; copy fails on a read-back mismatch or a missing display; the manifest declares the unit, drop-in and launcher; the real launcher uses DISPLAY at once and waits with no or several sockets until the display arrives; delete refuses a stale place. go vet, go test (-race), MESH_CHECK_MODULES=clipmenu merge-check.sh pass.
Reviewed independently before push, three rounds: APPROVE at 2353350d79f14cd51e993ea2f1eec0fdd8c4f0bf. Its two small follow-ups are issue 857.
clipmenud is declared as the operator's user unit, enabled and running, with a launcher that finds the display. Copy reads the clipboard back and fails with the reason. History and paste answer counts, times and lengths, never content.
Deliverynovox/mesh-catalog@c070bea782aa — delivered since 2026-10-15T21:04:01Z
Delivery plan — builds clipmenu → g14, shanks; no bus step
tier 0: clipmenu
g14: receives clipmenu
shanks: receives clipmenu
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before clipmenu is judged on its first machine
Machines
clipmenu on every machine running it: sent
Transitions
2026-10-15 20:59 (new) → proposed (announced): novox/mesh-catalog#320's head announced
2026-10-15 21:01 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-15 21:01 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-15 21:02 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-15 21:02 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-15 21:04 delivering → delivered (done): its walk is done, carrying its own commit: 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-catalog@c070bea782aa` — **delivered** since 2026-10-15T21:04:01Z
**Delivery plan** — builds clipmenu → g14, shanks; no bus step
- tier 0: clipmenu
- g14: receives clipmenu
- shanks: receives clipmenu
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before clipmenu is judged on its first machine
**Machines**
- clipmenu on every machine running it: sent
**Transitions**
- 2026-10-15 20:59 (new) → proposed (announced): novox/mesh-catalog#320's head announced
- 2026-10-15 21:01 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-15 21:01 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-15 21:02 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-15 21:02 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-15 21:04 delivering → delivered (done): its walk is done, carrying its own commit: 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`.
Merge check at 2353350d
Judged: head 2353350d79f1 merged into trunk de6657c846b9; read beside it: mesh-controller 7543f64911c5, mesh-controller-main 7543f64911c5, mesh-host 198fd34ec497, mesh-tools 6b3e15042fee
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)
mesh/repo-check: FAIL — its merge-check.sh failed: the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)
Delivery plan — builds clipmenu → g14, shanks; no bus step
tier 0: clipmenu
g14: receives clipmenu
shanks: receives clipmenu
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before clipmenu is judged on its first machine
Run by the build seat on novox as build-1792097101717698111 (builds --log build-1792097101717698111).
--- the gate: clipmenu
clipmenu: ok, 3 tool(s); WARNING: daemon stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-15T20:37:28Z 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-15T20:37:28Z
modules the change moves:
- clipmenu (changed)
machines:
- a machine (f35): composes; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
- 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; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
a merge would rebuild 1 module(s) in 1 tier(s): clipmenu
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.003s
words: 12 retired words and 70 daemons' lines, none in the 48745 strings of 746 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.015s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/mailstore 0.013s
mail-store: claimed only by mesh-mail
ok git.novox.be/novox/mesh-catalog/checks/secrets 0.020s
secrets: no setting can replace a vault secret in a mergeable file (1 known, nested)
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)
the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)
Out of date when it landed: out of date: judged against trunk de6657c846, the trunk is now aee97bf8ad42; judged again on a recheck or when it is merged
**Merge check** at `2353350d`
Judged: head `2353350d79f1` merged into trunk `de6657c846b9`; read beside it: mesh-controller `7543f64911c5`, mesh-controller-main `7543f64911c5`, mesh-host `198fd34ec497`, mesh-tools `6b3e15042fee`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)
- `mesh/repo-check`: **FAIL** — its merge-check.sh failed: the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)
**Delivery plan** — builds clipmenu → g14, shanks; no bus step
- tier 0: clipmenu
- g14: receives clipmenu
- shanks: receives clipmenu
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before clipmenu is judged on its first machine
Run by the build seat on novox as `build-1792097101717698111` (`builds --log build-1792097101717698111`).
```
--- the gate: clipmenu
clipmenu: ok, 3 tool(s); WARNING: daemon stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-15T20:37:28Z 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-15T20:37:28Z
modules the change moves:
- clipmenu (changed)
machines:
- a machine (f35): composes; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
- 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; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
a merge would rebuild 1 module(s) in 1 tier(s): clipmenu
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.003s
words: 12 retired words and 70 daemons' lines, none in the 48745 strings of 746 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.015s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/mailstore 0.013s
mail-store: claimed only by mesh-mail
ok git.novox.be/novox/mesh-catalog/checks/secrets 0.020s
secrets: no setting can replace a vault secret in a mergeable file (1 known, nested)
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)
the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)
```
**Out of date when it landed**: out of date: judged against trunk de6657c846b9, the trunk is now aee97bf8ad42; judged again on a recheck or when it is merged
Merge check at 2353350d
Judged: head 2353350d79f1 merged into trunk aee97bf8ad42; read beside it: mesh-controller 7543f64911c5, mesh-controller-main 7543f64911c5, mesh-host 198fd34ec497, mesh-tools 6b3e15042fee
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)
mesh/repo-check: FAIL — its merge-check.sh failed: the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)
Delivery plan — builds clipmenu → g14, shanks; no bus step
tier 0: clipmenu
g14: receives clipmenu
shanks: receives clipmenu
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before clipmenu is judged on its first machine
Run by the build seat on ace as build-1792097282341360968 (builds --log build-1792097282341360968).
--- the gate: clipmenu
clipmenu: ok, 3 tool(s); WARNING: daemon stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-15T20:47:28Z 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-15T20:47:28Z
modules the change moves:
- clipmenu (changed)
machines:
- a machine (f35): composes; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
- 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; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
a merge would rebuild 1 module(s) in 1 tier(s): clipmenu
--- 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 48745 strings of 746 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.012s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/mailstore 0.008s
mail-store: claimed only by mesh-mail
ok git.novox.be/novox/mesh-catalog/checks/secrets 0.011s
secrets: no setting can replace a vault secret in a mergeable file (1 known, nested)
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)
the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)
**Merge check** at `2353350d`
Judged: head `2353350d79f1` merged into trunk `aee97bf8ad42`; read beside it: mesh-controller `7543f64911c5`, mesh-controller-main `7543f64911c5`, mesh-host `198fd34ec497`, mesh-tools `6b3e15042fee`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)
- `mesh/repo-check`: **FAIL** — its merge-check.sh failed: the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)
**Delivery plan** — builds clipmenu → g14, shanks; no bus step
- tier 0: clipmenu
- g14: receives clipmenu
- shanks: receives clipmenu
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before clipmenu is judged on its first machine
Run by the build seat on ace as `build-1792097282341360968` (`builds --log build-1792097282341360968`).
```
--- the gate: clipmenu
clipmenu: ok, 3 tool(s); WARNING: daemon stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-15T20:47:28Z 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-15T20:47:28Z
modules the change moves:
- clipmenu (changed)
machines:
- a machine (f35): composes; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
- 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; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
a merge would rebuild 1 module(s) in 1 tier(s): clipmenu
--- 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 48745 strings of 746 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.012s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/mailstore 0.008s
mail-store: claimed only by mesh-mail
ok git.novox.be/novox/mesh-catalog/checks/secrets 0.011s
secrets: no setting can replace a vault secret in a mergeable file (1 known, nested)
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)
the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)
```
mesh-delivery: not merged. This pull request is marked ready at 2353350d79, and its check failed: every machine composes with the change as it did without (4 of 4 compose) (head 2353350d79 merged into trunk aee97bf8ad). A new head, marked ready once reviewed, or a recheck that passes, merges it.
mesh-delivery: **not merged.** This pull request is marked ready at 2353350d79f14cd51e993ea2f1eec0fdd8c4f0bf, and its check failed: every machine composes with the change as it did without (4 of 4 compose) (head 2353350d79f1 merged into trunk aee97bf8ad42). A new head, marked ready once reviewed, or a recheck that passes, merges it.
mesh/merge-gate head c070bea782aa merged into trunk 7443938fef69 — pass: builds clipmenu → g14, shanks; no bus step; every machine composes with the change…
mesh/repo-check head c070bea782aa merged into trunk 7443938fef69 — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-…
mesh-delivery: the ready mark at is cleared: the head is now c070bea782, pushed after it. Mark the new head ready once it is reviewed.
mesh-delivery: the ready mark at is cleared: the head is now c070bea782aa725be4b25963d144d57122dfb5b5, pushed after it. Mark the new head ready once it is reviewed.
Merge check at c070bea7
Judged: head c070bea782aa merged into trunk 7443938fef69; read beside it: mesh-controller 7543f64911c5, mesh-controller-main 7543f64911c5, mesh-host 198fd34ec497, mesh-tools 6b3e15042fee
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)
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 clipmenu → g14, shanks; no bus step
tier 0: clipmenu
g14: receives clipmenu
shanks: receives clipmenu
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before clipmenu is judged on its first machine
Run by the build seat on ace as build-1792097973961248379 (builds --log build-1792097973961248379).
--- the gate: clipmenu
clipmenu: ok, 3 tool(s), ready: daemon by unit every 30s
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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-15T20:57:28Z 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-15T20:57:28Z
modules the change moves:
- clipmenu (changed)
machines:
- a machine (f35): composes; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
- 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; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
a merge would rebuild 1 module(s) in 1 tier(s): clipmenu
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.003s
words: 12 retired words and 70 daemons' lines, none in the 48782 strings of 747 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.012s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/mailstore 0.009s
mail-store: claimed only by mesh-mail
ok git.novox.be/novox/mesh-catalog/checks/secrets 0.011s
secrets: no setting can replace a vault secret in a mergeable file (1 known, nested)
ok git.novox.be/novox/mesh-catalog/checks/paths 0.007s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 62, as kept
ok git.novox.be/novox/mesh-catalog/checks/deps 0.211s
testing modules/clipmenu
ok clipmenu/cmd/clipmenu-tools 9.282s
--- its merge-check-typescript.sh (typescript toolchain)
**Merge check** at `c070bea7`
Judged: head `c070bea782aa` merged into trunk `7443938fef69`; read beside it: mesh-controller `7543f64911c5`, mesh-controller-main `7543f64911c5`, mesh-host `198fd34ec497`, mesh-tools `6b3e15042fee`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)
- `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 clipmenu → g14, shanks; no bus step
- tier 0: clipmenu
- g14: receives clipmenu
- shanks: receives clipmenu
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before clipmenu is judged on its first machine
Run by the build seat on ace as `build-1792097973961248379` (`builds --log build-1792097973961248379`).
```
--- the gate: clipmenu
clipmenu: ok, 3 tool(s), ready: daemon by unit every 30s
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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-15T20:57:28Z 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-15T20:57:28Z
modules the change moves:
- clipmenu (changed)
machines:
- a machine (f35): composes; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
- 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; the change adds 5 resource(s) and removes 0 (+directory:clipmenu.daemon-dropins, +directory:clipmenu.user-units-dir, +file:clipmenu.daemon-dropin, +file:clipmenu.launcher, +service:clipmenu.daemon)
a merge would rebuild 1 module(s) in 1 tier(s): clipmenu
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.003s
words: 12 retired words and 70 daemons' lines, none in the 48782 strings of 747 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.012s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/mailstore 0.009s
mail-store: claimed only by mesh-mail
ok git.novox.be/novox/mesh-catalog/checks/secrets 0.011s
secrets: no setting can replace a vault secret in a mergeable file (1 known, nested)
ok git.novox.be/novox/mesh-catalog/checks/paths 0.007s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 62, as kept
ok git.novox.be/novox/mesh-catalog/checks/deps 0.211s
testing modules/clipmenu
ok clipmenu/cmd/clipmenu-tools 9.282s
--- 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 hq issues 743 and 750 together (playbook 08, related issues in one fix: switching the history on before the history tool stops handing out content would make 750 worse).
743, the history daemon and the copy.
clipmenud.serviceas a user unit of the operator's account, enabled and running, so$mod+.shows history again; the xinitrc start is removed.systemctl --user show-environment) on every pass, with the text-only xsel first on PATH; StartLimitIntervalSec=0 and RestartSec=2s, so it never gives up before X is up.copyreads the clipboard back and fails with the reason (xsel's message, the transient unit's journal) instead of reporting success; it never echoes the copied text.750, nothing hands out what was copied.
historyreturns only times, sizes, the count and whether the daemon collects;clipmenu_pastereturns only the byte count;clipmenu_deletetakes onlyplacetogether with the entry'satand refuses when they no longer match.README: a re-login is needed after delivery (the running session's own clipmenud holds the lock until then).
Tests: history has no content; copy fails on a read-back mismatch or a missing display; the manifest declares the unit, drop-in and launcher; the real launcher uses DISPLAY at once and waits with no or several sockets until the display arrives; delete refuses a stale place. go vet, go test (-race), MESH_CHECK_MODULES=clipmenu merge-check.sh pass.
Reviewed independently before push, three rounds: APPROVE at
2353350d79. Its two small follow-ups are issue 857.Delivery
novox/mesh-catalog@c070bea782aa— delivered since 2026-10-15T21:04:01ZDelivery plan — builds clipmenu → g14, shanks; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.ready at
2353350d79(the operator's word, 2026-10-15; independent review APPROVE at this sha, round 3).Merge check at
2353350dJudged: head
2353350d79f1merged into trunkde6657c846b9; read beside it: mesh-controller7543f64911c5, mesh-controller-main7543f64911c5, mesh-host198fd34ec497, mesh-tools6b3e15042feemesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)mesh/repo-check: FAIL — its merge-check.sh failed: the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)Delivery plan — builds clipmenu → g14, shanks; no bus step
Run by the build seat on novox as
build-1792097101717698111(builds --log build-1792097101717698111).Out of date when it landed: out of date: judged against trunk
de6657c846, the trunk is now aee97bf8ad42; judged again on a recheck or when it is mergedMerge check at
2353350dJudged: head
2353350d79f1merged into trunkaee97bf8ad42; read beside it: mesh-controller7543f64911c5, mesh-controller-main7543f64911c5, mesh-host198fd34ec497, mesh-tools6b3e15042feemesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)mesh/repo-check: FAIL — its merge-check.sh failed: the long-running resources without health rose from 62 to 63: declare how each new one is ready (ADR 0240 rule 8)Delivery plan — builds clipmenu → g14, shanks; no bus step
Run by the build seat on ace as
build-1792097282341360968(builds --log build-1792097282341360968).mesh-delivery: not merged. This pull request is marked ready at
2353350d79, and its check failed: every machine composes with the change as it did without (4 of 4 compose) (head2353350d79merged into trunkaee97bf8ad). A new head, marked ready once reviewed, or a recheck that passes, merges it.mesh-delivery: the ready mark at is cleared: the head is now
c070bea782, pushed after it. Mark the new head ready once it is reviewed.Merge check at
c070bea7Judged: head
c070bea782aamerged into trunk7443938fef69; read beside it: mesh-controller7543f64911c5, mesh-controller-main7543f64911c5, mesh-host198fd34ec497, mesh-tools6b3e15042feemesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: clipmenu)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 clipmenu → g14, shanks; no bus step
Run by the build seat on ace as
build-1792097973961248379(builds --log build-1792097973961248379).