Issue 1024, ADR 0422 (on ADR 0416). Release 2 of 2 of feature owned-paths; release 1 (mesh-host #117, the node-engine learns unknown/knows and moves out) was delivered to ace, g14, novox and shanks at 18:22. One delivery group with novox/hq feat/owned-paths (design 29).
All 256 directory and archive resources carry unknown: move-out for home folders whose program writes nothing there (dunst, i3, i3status-rust, picom, rofi, xorg, clipmenu's drop-ins, feh, powerlevel10k, betterbird, node-env), module for ~/.ssh (ssh-client's sweep) and ~/.claude (claude-code; ADR 0273's reactions not built yet, issue 1030), program for every folder outside a home.
knows keeps what a program or the operator relies on: powerlevel10k's 9 compiled .zwc files, i3's scripts/ (the screenshot key), i3's 10-asus.conf and 20-g14.conf, dunst's 50-slack.conf, betterbird's records and kept/, node-env's forge.credentials (written by claude-code, issue 1033).
No longer declared, as shared parents (ADR 0422 §6): ~/.config/systemd/user (clipmenu), ~/.config/git (ssh-client).
Each module's README says it (section "Files it does not know"); 45 new READMEs.
checks/owned (ADR 0422 §8) runs in merge-check.sh from the next pull request on; checks/sshdir stays while main's merge-check.sh runs it (playbook 07; issue 1035).
Tests that pin a manifest follow the new key only: route-proxy's digest (manifests equal once unknown is removed), zsh, powerlevel10k.
What the operator sees after delivery: files of their own in those home folders are moved to ~/.local/state/mesh-moved// with a list, never deleted (approved with ADR 0422). Reviewed in three rounds; forge tree equals the reviewed tree 1a32ec23. Opened along the way: 1033, 1035, 1037.
Issue 1024, ADR 0422 (on ADR 0416). Release 2 of 2 of feature owned-paths; release 1 (mesh-host #117, the node-engine learns `unknown`/`knows` and moves out) was delivered to ace, g14, novox and shanks at 18:22. One delivery group with novox/hq feat/owned-paths (design 29).
- All 256 `directory` and `archive` resources carry `unknown`: `move-out` for home folders whose program writes nothing there (dunst, i3, i3status-rust, picom, rofi, xorg, clipmenu's drop-ins, feh, powerlevel10k, betterbird, node-env), `module` for ~/.ssh (ssh-client's sweep) and ~/.claude (claude-code; ADR 0273's reactions not built yet, issue 1030), `program` for every folder outside a home.
- `knows` keeps what a program or the operator relies on: powerlevel10k's 9 compiled .zwc files, i3's `scripts/` (the screenshot key), i3's 10-asus.conf and 20-g14.conf, dunst's 50-slack.conf, betterbird's records and kept/, node-env's forge.credentials (written by claude-code, issue 1033).
- No longer declared, as shared parents (ADR 0422 §6): ~/.config/systemd/user (clipmenu), ~/.config/git (ssh-client).
- Each module's README says it (section "Files it does not know"); 45 new READMEs.
- `checks/owned` (ADR 0422 §8) runs in merge-check.sh from the next pull request on; `checks/sshdir` stays while main's merge-check.sh runs it (playbook 07; issue 1035).
- Tests that pin a manifest follow the new key only: route-proxy's digest (manifests equal once `unknown` is removed), zsh, powerlevel10k.
What the operator sees after delivery: files of their own in those home folders are moved to ~/.local/state/mesh-moved/<module>/ with a list, never deleted (approved with ADR 0422). Reviewed in three rounds; forge tree equals the reviewed tree 1a32ec23. Opened along the way: 1033, 1035, 1037.
mesh/merge-gate checking again: the gate refused `unknown` because the controller judged with a node-engine validator pinned before mesh-host #117; mesh-co…
mesh/repo-check checking again: the gate refused `unknown` because the controller judged with a node-engine validator pinned before mesh-host #117; mesh-co…
Every directory and archive resource carries `unknown`: move-out for a home folder whose program writes nothing there (the node-engine, delivered in mesh-host #117, moves the rest to ~/.local/state/mesh-moved/<module>/ with a list), module for ~/.ssh and ~/.claude, program elsewhere; `knows` keeps what a program or the operator relies on (powerlevel10k's compiled files, i3's scripts and the asus/g14 drop-ins, dunst's slack rule, betterbird's records, node-env's forge credential, issue 1033). Two shared folders are no longer declared. Each module's README says it. checks/owned holds every manifest to it; checks/sshdir stays while main's merge check runs it (issue 1035). Tests that pin a manifest follow the new key only. Reviewed in three rounds.
baserow keeps data (ADR 0233): what it holds is backed up before it moves
claude-code keeps data (ADR 0233): what it holds is backed up before it moves
distribution provides artifact-store: its consumers are sent again after it
distribution keeps data (ADR 0233): what it holds is backed up before it moves
dnsmasq waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
dnsmasq provides wildcard-resolution: its consumers are sent again after it
gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
gitea keeps data (ADR 0233): what it holds is backed up before it moves
grafana keeps data (ADR 0233): what it holds is backed up before it moves
home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
icecast keeps data (ADR 0233): what it holds is backed up before it moves
influxdb provides influxdb-api: its consumers are sent again after it
influxdb keeps data (ADR 0233): what it holds is backed up before it moves
keycloak waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
keycloak provides oidc-client: its consumers are sent again after it
keycloak keeps data (ADR 0233): what it holds is backed up before it moves
lab keeps data (ADR 0233): what it holds is backed up before it moves
mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mailu provides smtp: its consumers are sent again after it
mailu keeps data (ADR 0233): what it holds is backed up before it moves
matrix keeps data (ADR 0233): what it holds is backed up before it moves
mesh-vault provides secret: its consumers are sent again after it
mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
minio provides s3-bucket: its consumers are sent again after it
minio keeps data (ADR 0233): what it holds is backed up before it moves
mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mongodb provides mongodb-database: its consumers are sent again after it
mongodb keeps data (ADR 0233): what it holds is backed up before it moves
mosquitto provides mqtt-topic: its consumers are sent again after it
mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mssql provides mssql-database: its consumers are sent again after it
mssql keeps data (ADR 0233): what it holds is backed up before it moves
n8n keeps data (ADR 0233): what it holds is backed up before it moves
merging this needs a person's bus upgrade: nats is never sent by an ordinary send, and until mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"} runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)
nats provides mesh-bus: its consumers are sent again after it
nats keeps data (ADR 0233): what it holds is backed up before it moves
nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
nfs-server waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
nfs-server provides nfs-share: its consumers are sent again after it
nfs-server keeps data (ADR 0233): what it holds is backed up before it moves
nodered keeps data (ADR 0233): what it holds is backed up before it moves
only-office keeps data (ADR 0233): what it holds is backed up before it moves
postgres waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
postgres provides postgres-database: its consumers are sent again after it
postgres keeps data (ADR 0233): what it holds is backed up before it moves
records keeps data (ADR 0233): what it holds is backed up before it moves
redis provides redis-cache: its consumers are sent again after it
redis keeps data (ADR 0233): what it holds is backed up before it moves
restic keeps data (ADR 0233): what it holds is backed up before it moves
searxng keeps data (ADR 0233): what it holds is backed up before it moves
ssh-client keeps data (ADR 0233): what it holds is backed up before it moves
step-ca provides internal-acme-ca: its consumers are sent again after it
step-ca keeps data (ADR 0233): what it holds is backed up before it moves
supabase keeps data (ADR 0233): what it holds is backed up before it moves
umami provides analytics: its consumers are sent again after it
umami keeps data (ADR 0233): what it holds is backed up before it moves
unifi keeps data (ADR 0233): what it holds is backed up before it moves
xorg provides x11-display: its consumers are sent again after it
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 asus-zephyrus-g14, baserow, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, grafana, home-assistant, i3, i3status-rust, icecast, influxdb, kernel, lab, lemurs, letta, matrix, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mosquitto, mounts, n8n, node-env, nodered, picom, power, powerlevel10k, redis, restic, rofi, searxng, ssh-client, supabase, systemd, triggerhappy, unifi, xorg, zsh is judged on its first machine
composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
Machines
audit-logger on every machine running it: sent
confluence on every machine running it: sent
gitlab on every machine running it: sent
hello-web on every machine running it: sent
jira on every machine running it: sent
local-model-consumer on every machine running it: sent
mesh-watcher on every machine running it: sent
model-usage on every machine running it: sent
openai-consumer on every machine running it: sent
route-adapter on every machine running it: sent
showcase on every machine running it: sent
zfs on every machine running it: sent
artifact-store-tools on every machine running it: sent
asus-zephyrus-g14 on every machine running it: sent
baserow on every machine running it: sent
ca-trust on every machine running it: sent
claude-code on every machine running it: sent
claude-licence-manager on every machine running it: sent
clipmenu on every machine running it: sent
desk-channel on every machine running it: sent
distribution on every machine running it: sent
dnsmasq on every machine running it: sent
docker on every machine running it: sent
dunst on every machine running it: sent
fail2ban on every machine running it: sent
feh on every machine running it: sent
gitea on every machine running it: sent
grafana on every machine running it: sent
home-assistant on every machine running it: sent
i3 on every machine running it: sent
i3status-rust on every machine running it: sent
icecast on every machine running it: sent
influxdb on every machine running it: sent
invoicing on every machine running it: sent
kernel on every machine running it: sent
lab on every machine running it: sent
lemurs on every machine running it: sent
letta on every machine running it: sent
matrix on every machine running it: sent
memory-pressure on every machine running it: sent
mesh-catalog on every machine running it: sent
mesh-cli on every machine running it: sent
mesh-config on every machine running it: sent
mesh-delivery on every machine running it: sent
mesh-files on every machine running it: sent
mesh-issues on every machine running it: sent
mesh-knowledge on every machine running it: sent
mesh-mail on every machine running it: sent
mesh-mail-notifier on every machine running it: sent
mesh-provisioner on every machine running it: sent
mesh-provisioner-client on every machine running it: sent
mesh-reads on every machine running it: sent
mesh-vault on every machine running it: sent
messenger on every machine running it: sent
mosquitto on every machine running it: sent
mounts on every machine running it: sent
n8n on every machine running it: sent
nextcloud on every machine running it: sent
nfs-server on every machine running it: sent
node-env on every machine running it: sent
nodered on every machine running it: sent
only-office on every machine running it: sent
picom on every machine running it: sent
power on every machine running it: sent
powerlevel10k on every machine running it: sent
records on every machine running it: sent
redis on every machine running it: sent
restic on every machine running it: sent
rofi on every machine running it: sent
searxng on every machine running it: sent
ssh-client on every machine running it: sent
step-ca on every machine running it: sent
supabase on every machine running it: sent
systemd on every machine running it: sent
telegram on every machine running it: sent
triggerhappy on every machine running it: sent
umami on every machine running it: sent
unifi on every machine running it: sent
website on every machine running it: sent
xorg on every machine running it: sent
zsh on every machine running it: sent
Transitions
2026-10-17 17:55 (new) → proposed (announced): novox/mesh-catalog#349's head announced
2026-10-17 18:07 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-17 18:07 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-17 18:15 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-17 18:15 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-17 18:39 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@7104df6fa284` — **delivered** since 2026-10-17T18:39:13Z
**Delivery plan** — builds artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new: modules/build-agent, modules/marrytts, modules/ollama, modules/photos-eef, modules/photos-filip, modules/route-proxy → ace, g14, novox, shanks; merging this needs a person's bus upgrade; 12 wait(s) for a person
- tier 0: artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh
- ace: receives baserow, ca-trust, claude-code, docker, fail2ban, grafana, home-assistant, icecast, influxdb, kernel, letta, matrix, mesh-cli, mesh-files, mesh-provisioner-client, mesh-reads, mosquitto, n8n, node-env, nodered, power, powerlevel10k, redis, restic, searxng, ssh-client, supabase, systemd, unifi, zsh; waits for a person: dnsmasq, mssql, nfs-server, postgres
- g14: receives asus-zephyrus-g14, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, i3, i3status-rust, kernel, lemurs, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, node-env, picom, power, powerlevel10k, restic, rofi, ssh-client, systemd, triggerhappy, xorg, zsh
- novox: receives artifact-store-tools, ca-trust, claude-code, claude-licence-manager, desk-channel, distribution, docker, fail2ban, gitea, invoicing, kernel, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, messenger, nextcloud, node-env, only-office, power, powerlevel10k, records, restic, ssh-client, step-ca, systemd, telegram, umami, website, zsh; waits for a person: dnsmasq, keycloak, mailu, minio, mongodb, mssql, nats, postgres
- shanks: receives ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, i3, i3status-rust, kernel, lab, lemurs, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mounts, node-env, picom, power, powerlevel10k, restic, rofi, ssh-client, systemd, xorg, zsh
- baserow keeps data (ADR 0233): what it holds is backed up before it moves
- claude-code keeps data (ADR 0233): what it holds is backed up before it moves
- distribution provides artifact-store: its consumers are sent again after it
- distribution keeps data (ADR 0233): what it holds is backed up before it moves
- dnsmasq waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- dnsmasq provides wildcard-resolution: its consumers are sent again after it
- gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
- gitea keeps data (ADR 0233): what it holds is backed up before it moves
- grafana keeps data (ADR 0233): what it holds is backed up before it moves
- home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
- icecast keeps data (ADR 0233): what it holds is backed up before it moves
- influxdb provides influxdb-api: its consumers are sent again after it
- influxdb keeps data (ADR 0233): what it holds is backed up before it moves
- keycloak waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- keycloak provides oidc-client: its consumers are sent again after it
- keycloak keeps data (ADR 0233): what it holds is backed up before it moves
- lab keeps data (ADR 0233): what it holds is backed up before it moves
- mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mailu provides smtp: its consumers are sent again after it
- mailu keeps data (ADR 0233): what it holds is backed up before it moves
- matrix keeps data (ADR 0233): what it holds is backed up before it moves
- mesh-vault provides secret: its consumers are sent again after it
- mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
- minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- minio provides s3-bucket: its consumers are sent again after it
- minio keeps data (ADR 0233): what it holds is backed up before it moves
- mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mongodb provides mongodb-database: its consumers are sent again after it
- mongodb keeps data (ADR 0233): what it holds is backed up before it moves
- mosquitto provides mqtt-topic: its consumers are sent again after it
- mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
- mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mssql provides mssql-database: its consumers are sent again after it
- mssql keeps data (ADR 0233): what it holds is backed up before it moves
- n8n keeps data (ADR 0233): what it holds is backed up before it moves
- merging this needs a person's bus upgrade: nats is never sent by an ordinary send, and until `mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}` runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)
- nats provides mesh-bus: its consumers are sent again after it
- nats keeps data (ADR 0233): what it holds is backed up before it moves
- nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
- nfs-server waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- nfs-server provides nfs-share: its consumers are sent again after it
- nfs-server keeps data (ADR 0233): what it holds is backed up before it moves
- nodered keeps data (ADR 0233): what it holds is backed up before it moves
- only-office keeps data (ADR 0233): what it holds is backed up before it moves
- postgres waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- postgres provides postgres-database: its consumers are sent again after it
- postgres keeps data (ADR 0233): what it holds is backed up before it moves
- records keeps data (ADR 0233): what it holds is backed up before it moves
- redis provides redis-cache: its consumers are sent again after it
- redis keeps data (ADR 0233): what it holds is backed up before it moves
- restic keeps data (ADR 0233): what it holds is backed up before it moves
- searxng keeps data (ADR 0233): what it holds is backed up before it moves
- ssh-client keeps data (ADR 0233): what it holds is backed up before it moves
- step-ca provides internal-acme-ca: its consumers are sent again after it
- step-ca keeps data (ADR 0233): what it holds is backed up before it moves
- supabase keeps data (ADR 0233): what it holds is backed up before it moves
- umami provides analytics: its consumers are sent again after it
- umami keeps data (ADR 0233): what it holds is backed up before it moves
- unifi keeps data (ADR 0233): what it holds is backed up before it moves
- xorg provides x11-display: its consumers are sent again after it
- 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 asus-zephyrus-g14, baserow, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, grafana, home-assistant, i3, i3status-rust, icecast, influxdb, kernel, lab, lemurs, letta, matrix, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mosquitto, mounts, n8n, node-env, nodered, picom, power, powerlevel10k, redis, restic, rofi, searxng, ssh-client, supabase, systemd, triggerhappy, unifi, xorg, zsh is judged on its first machine
**Group** `feat/owned-paths`, in order: novox/hq@499407c66936 → novox/mesh-catalog@7104df6fa284
- composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
**Machines**
- audit-logger on every machine running it: sent
- confluence on every machine running it: sent
- gitlab on every machine running it: sent
- hello-web on every machine running it: sent
- jira on every machine running it: sent
- local-model-consumer on every machine running it: sent
- mesh-watcher on every machine running it: sent
- model-usage on every machine running it: sent
- openai-consumer on every machine running it: sent
- route-adapter on every machine running it: sent
- showcase on every machine running it: sent
- zfs on every machine running it: sent
- artifact-store-tools on every machine running it: sent
- asus-zephyrus-g14 on every machine running it: sent
- baserow on every machine running it: sent
- ca-trust on every machine running it: sent
- claude-code on every machine running it: sent
- claude-licence-manager on every machine running it: sent
- clipmenu on every machine running it: sent
- desk-channel on every machine running it: sent
- distribution on every machine running it: sent
- dnsmasq on every machine running it: sent
- docker on every machine running it: sent
- dunst on every machine running it: sent
- fail2ban on every machine running it: sent
- feh on every machine running it: sent
- gitea on every machine running it: sent
- grafana on every machine running it: sent
- home-assistant on every machine running it: sent
- i3 on every machine running it: sent
- i3status-rust on every machine running it: sent
- icecast on every machine running it: sent
- influxdb on every machine running it: sent
- invoicing on every machine running it: sent
- kernel on every machine running it: sent
- lab on every machine running it: sent
- lemurs on every machine running it: sent
- letta on every machine running it: sent
- matrix on every machine running it: sent
- memory-pressure on every machine running it: sent
- mesh-catalog on every machine running it: sent
- mesh-cli on every machine running it: sent
- mesh-config on every machine running it: sent
- mesh-delivery on every machine running it: sent
- mesh-files on every machine running it: sent
- mesh-issues on every machine running it: sent
- mesh-knowledge on every machine running it: sent
- mesh-mail on every machine running it: sent
- mesh-mail-notifier on every machine running it: sent
- mesh-provisioner on every machine running it: sent
- mesh-provisioner-client on every machine running it: sent
- mesh-reads on every machine running it: sent
- mesh-vault on every machine running it: sent
- messenger on every machine running it: sent
- mosquitto on every machine running it: sent
- mounts on every machine running it: sent
- n8n on every machine running it: sent
- nextcloud on every machine running it: sent
- nfs-server on every machine running it: sent
- node-env on every machine running it: sent
- nodered on every machine running it: sent
- only-office on every machine running it: sent
- picom on every machine running it: sent
- power on every machine running it: sent
- powerlevel10k on every machine running it: sent
- records on every machine running it: sent
- redis on every machine running it: sent
- restic on every machine running it: sent
- rofi on every machine running it: sent
- searxng on every machine running it: sent
- ssh-client on every machine running it: sent
- step-ca on every machine running it: sent
- supabase on every machine running it: sent
- systemd on every machine running it: sent
- telegram on every machine running it: sent
- triggerhappy on every machine running it: sent
- umami on every machine running it: sent
- unifi on every machine running it: sent
- website on every machine running it: sent
- xorg on every machine running it: sent
- zsh on every machine running it: sent
**Transitions**
- 2026-10-17 17:55 (new) → proposed (announced): novox/mesh-catalog#349's head announced
- 2026-10-17 18:07 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-17 18:07 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-17 18:15 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-17 18:15 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-17 18:39 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 652b00b2
Judged: head 652b00b25b28 merged into trunk 54b3ce503e79; read beside it: mesh-controller c43772fd94eb, mesh-controller-main c43772fd94eb, mesh-host 6469e8238443, mesh-tools 7412c5b6c9c5
mesh/merge-gate: FAIL — 6 problem(s) the change brings; the first: a machine (f35): nothing could be sent to it with this change — resource "xorg.config": a directory does not use "unknown", and it is set. Refused rather than ignored (modules: artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, build-agent, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, route-proxy, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new:modules/marrytts, new:modules/ollama, new:modules/photos-eef, new:modules/photos-filip)
mesh/repo-check: PASS — THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
baserow keeps data (ADR 0233): what it holds is backed up before it moves
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
claude-code keeps data (ADR 0233): what it holds is backed up before it moves
distribution provides artifact-store: its consumers are sent again after it
distribution keeps data (ADR 0233): what it holds is backed up before it moves
dnsmasq waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
dnsmasq provides wildcard-resolution: its consumers are sent again after it
gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
gitea keeps data (ADR 0233): what it holds is backed up before it moves
grafana keeps data (ADR 0233): what it holds is backed up before it moves
home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
icecast keeps data (ADR 0233): what it holds is backed up before it moves
influxdb provides influxdb-api: its consumers are sent again after it
influxdb keeps data (ADR 0233): what it holds is backed up before it moves
keycloak waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
keycloak provides oidc-client: its consumers are sent again after it
keycloak keeps data (ADR 0233): what it holds is backed up before it moves
lab keeps data (ADR 0233): what it holds is backed up before it moves
mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mailu provides smtp: its consumers are sent again after it
mailu keeps data (ADR 0233): what it holds is backed up before it moves
matrix keeps data (ADR 0233): what it holds is backed up before it moves
mesh-vault provides secret: its consumers are sent again after it
mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
minio provides s3-bucket: its consumers are sent again after it
minio keeps data (ADR 0233): what it holds is backed up before it moves
mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mongodb provides mongodb-database: its consumers are sent again after it
mongodb keeps data (ADR 0233): what it holds is backed up before it moves
mosquitto provides mqtt-topic: its consumers are sent again after it
mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mssql provides mssql-database: its consumers are sent again after it
mssql keeps data (ADR 0233): what it holds is backed up before it moves
n8n keeps data (ADR 0233): what it holds is backed up before it moves
merging this needs a person's bus upgrade: nats is never sent by an ordinary send, and until mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"} runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)
nats provides mesh-bus: its consumers are sent again after it
nats keeps data (ADR 0233): what it holds is backed up before it moves
nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
nfs-server waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
nfs-server provides nfs-share: its consumers are sent again after it
nfs-server keeps data (ADR 0233): what it holds is backed up before it moves
nodered keeps data (ADR 0233): what it holds is backed up before it moves
only-office keeps data (ADR 0233): what it holds is backed up before it moves
postgres waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
postgres provides postgres-database: its consumers are sent again after it
postgres keeps data (ADR 0233): what it holds is backed up before it moves
records keeps data (ADR 0233): what it holds is backed up before it moves
redis provides redis-cache: its consumers are sent again after it
redis keeps data (ADR 0233): what it holds is backed up before it moves
restic keeps data (ADR 0233): what it holds is backed up before it moves
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
searxng keeps data (ADR 0233): what it holds is backed up before it moves
ssh-client keeps data (ADR 0233): what it holds is backed up before it moves
step-ca provides internal-acme-ca: its consumers are sent again after it
step-ca keeps data (ADR 0233): what it holds is backed up before it moves
supabase keeps data (ADR 0233): what it holds is backed up before it moves
umami provides analytics: its consumers are sent again after it
umami keeps data (ADR 0233): what it holds is backed up before it moves
unifi keeps data (ADR 0233): what it holds is backed up before it moves
xorg provides x11-display: its consumers are sent again after it
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 asus-zephyrus-g14, baserow, build-agent, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, grafana, home-assistant, i3, i3status-rust, icecast, influxdb, kernel, lab, lemurs, letta, matrix, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mosquitto, mounts, n8n, node-env, nodered, picom, power, powerlevel10k, redis, restic, rofi, route-proxy, searxng, ssh-client, supabase, systemd, triggerhappy, unifi, xorg, zsh is judged on its first machine
Run by the build seat on shanks as build-1792254211537776414 (builds --log build-1792254211537776414).
type-checking modules/letta (TypeScript)
NOT TESTED: modules/letta is TypeScript and has no tests of its own
type-checking modules/mailu (TypeScript)
testing modules/mailu (TypeScript)
✔ an empty queue is healthy, and says so (1.673354ms)
✔ a recipient overdue on a name-service failure is unhealthy, with counts, its age and its reason (0.790332ms)
✔ one dead far domain overdue is healthy, and said (0.383455ms)
✔ overdue mail to three domains is unhealthy, whatever the reason (0.291194ms)
✔ a deferred message younger than the bound is healthy, and is said (0.275314ms)
✔ a container that cannot be reached is unhealthy, and says what docker said (0.290735ms)
✔ a name that does not resolve is unhealthy, though the queue is empty (0.290924ms)
✔ a container that does not answer in time is said so (0.199483ms)
✔ the health tool is served without the admin API, on the smtp container it is told (5.249567ms)
✔ the vault's apiKey is used, a setting of it is ignored and said once, without its value (2.01056ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 108.020181
type-checking modules/mesh-catalog (TypeScript)
testing modules/mesh-catalog (TypeScript)
✔ the catalogue hears the build seat that builds now, not only the retired one (issue 712) (3.803806ms)
✔ a walk's build is placed, under its module and commit (0.6501ms)
✔ a merge check, a try, a dry run and a failure are passed over without a fault (0.232023ms)
✔ an outcome that names no module or commit is said as the builder's fault (0.187522ms)
✔ a branch built through the build verb is passed over; a commit on the trunk, or from a seat that names none, is placed (ADR 0238) (0.161312ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 93.389846
type-checking modules/minio (TypeScript)
NOT TESTED: modules/minio is TypeScript and has no tests of its own
type-checking modules/model-usage (TypeScript)
testing modules/model-usage (TypeScript)
✔ a store that refuses a row is thrown, so the event is offered again, and it is spooled (19.720961ms)
✔ a redelivered event writes the same reading, never a second, and clears its spooled copy (10.512085ms)
✔ on its last delivery a usage event is spooled and taken (48.929341ms)
✔ the spool replays once the store answers, and an older reading replayed late does not overwrite a newer (50.138978ms)
✔ an event without a body is taken without a TypeError; a row the store could never take is skipped, not retried (1.665634ms)
✔ model_usage_status reports the spool, and is offered even when the store cannot be opened (50.18556ms)
﹣ against postgres: migrations are numbered and repeatable, and the upsert keeps the reading observed latest (0.201033ms) # TEST_DATABASE_URL is not set
ℹ tests 7
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 301.225686
type-checking modules/mongodb (TypeScript)
NOT TESTED: modules/mongodb is TypeScript and has no tests of its own
type-checking modules/mosquitto (TypeScript)
testing modules/mosquitto (TypeScript)
✔ named, the broker's container runs mosquitto_ctrl under the options shell, stdin open (1.259608ms)
✔ unnamed, this machine's mosquitto_ctrl runs under the same shell (0.183683ms)
✔ the options shell itself holds no secret (0.237933ms)
✔ an argv carrying the admin password or a password being set is refused, by name (0.478127ms)
✔ the admin tool refuses a dynsec command that would put a password on a command line (0.257823ms)
✔ the admin's name and password reach mosquitto_ctrl in a 0600 options file, and a password being set at its prompt (12.142059ms)
✔ a consumer that contributed nothing gets its own subtree (1.37485ms)
✔ a contributed list is granted exactly, duplicates once (0.380416ms)
✔ a list that is not topic filters is refused whole (0.315085ms)
✔ getRole's ACL lines are read, the warning and headings are not (0.382405ms)
✔ the role is brought to exactly the wanted ACLs (0.370536ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 113.623863
type-checking modules/mssql (TypeScript)
testing modules/mssql (TypeScript)
✔ a caller's statement runs as the reader, as it was written, on the database it names (2.198963ms)
✔ the reader is made as the administrator, kept out of sysadmin, and granted only reading (0.782851ms)
✔ without the reader's password the statement is refused, and nothing runs as the administrator (0.581779ms)
✔ a consumer's password is checked as a bound parameter, never in the text (0.333665ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 294.361125
type-checking modules/nextcloud (TypeScript)
testing modules/nextcloud (TypeScript)
✔ the vault's password is used, a setting of it is ignored and said once, without its value (1.924008ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 94.167326
type-checking modules/nodered (TypeScript)
testing modules/nodered (TypeScript)
✔ ace: the named broker node is moved to the bound broker and login; the other broker is not touched (2.579118ms)
✔ fresh: with nothing named, the step makes its own broker node (0.356515ms)
✔ a login the broker does not take is never written (0.846502ms)
✔ a named node that is not there, or a loopback broker, is refused (0.286984ms)
✔ a deploy that raced another is read again once (0.530738ms)
✔ settings name broker nodes under mqtt.brokers (0.152813ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 106.153403
type-checking modules/openai-consumer (TypeScript)
NOT TESTED: modules/openai-consumer is TypeScript and has no tests of its own
modules/powerlevel10k has no TypeScript sources of its own to type-check: its tests read its files
testing modules/powerlevel10k (TypeScript)
✔ the theme archive is built from the vendored release and carries its licence (1.383131ms)
✔ the configuration archive holds the prompt's configuration and nothing else (0.176413ms)
✔ both are unpacked under the account's home, owned by the account (0.218503ms)
✔ the zsh code in the normal slot sources the theme, then the configuration, and turns on no instant prompt (0.324345ms)
✔ the README names the upstream, the version and the licence (0.254534ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 96.166447
type-checking modules/redis (TypeScript)
NOT TESTED: modules/redis is TypeScript and has no tests of its own
type-checking modules/route-adapter (TypeScript)
testing modules/route-adapter (TypeScript)
✔ it writes one route file per contribution, in the predecessor's own shape (7.569082ms)
✔ it removes the file it wrote when that contribution goes (2.71926ms)
✔ it never touches a file it did not write (4.044439ms)
✔ the target port follows what the contributor publishes (1.815496ms)
✔ a contributor on another node is reached at the address the mesh gave it (1.35383ms)
✔ a node's settings are laid over the module's defaults, and nothing else changes (1.319209ms)
✔ a contribution it cannot act on is skipped and named (0.231254ms)
✔ a contribution the file shape cannot say is skipped and says which part (0.270784ms)
✔ it refuses when the predecessor's directory is not there, and says why (2.02442ms)
✔ a body limit is written as the predecessor's buffering middleware (2.139061ms)
✔ a body limit that is not a whole number of bytes is skipped and named (0.335395ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 123.465198
type-checking modules/searxng (TypeScript)
NOT TESTED: modules/searxng is TypeScript and has no tests of its own
type-checking modules/showcase (TypeScript)
NOT TESTED: modules/showcase is TypeScript and has no tests of its own
type-checking modules/umami (TypeScript)
NOT TESTED: modules/umami is TypeScript and has no tests of its own
type-checking modules/unifi (TypeScript)
NOT TESTED: modules/unifi is TypeScript and has no tests of its own
type-checking modules/zsh (TypeScript)
testing modules/zsh (TypeScript)
✔ the exit status and both streams are answered (9.337048ms)
✔ it runs in the directory it is given (4.986624ms)
✔ on timeout the whole process group is ended, a backgrounded grandchild included (503.673963ms)
✔ output beyond the bound is cut and the answer says so (7.537671ms)
✔ a job left in the background does not hold the answer (205.198731ms)
﹣ zsh runs the command as a login shell, when zsh is here (2.766001ms) # zsh is not installed here
✔ the timeout is held below the runtime's call limit (0.241723ms)
✔ the command's environment drops the mesh's words and gains the account's session words when they exist (0.250333ms)
✔ zsh_config counts the mesh's block in a file (3.770015ms)
✔ no file carries its text inline: each names its template, and the build packs files/ into one archive (1.471602ms)
✔ it claims node-login-shell serving execute, and declares no seat (0.127722ms)
✔ the .zshrc block is at the start and holds the three slots in order, after the defaults' header (0.213443ms)
✔ the .zshrc block carries the shared defaults and none of the operator's own lines (0.309705ms)
✔ the .zshenv block sources exactly the environment file node-environment fixes (0.304425ms)
✔ its environment is a contribution: the editor, the configuration home, and three PATH entries at the start (0.502678ms)
✔ it keeps the package and sets the login shell through the user shape (0.139662ms)
✔ the tools bundle registers the seat's verb under node-login-shell (0.244353ms)
✔ execute is a per-machine config value, served unless a machine withholds it (ADR 0268, ADR 0348 §4) (0.472177ms)
✔ the tools bundle registers execute only where the machine's setting serves it (0.418256ms)
✔ execute is served only when the machine's setting says serve (0.838312ms)
✔ anything but serve withholds it: a wrong value, no line, no file (0.267534ms)
✔ the setting is read from the file the bundle's word names (0.572109ms)
ℹ tests 22
ℹ suites 0
ℹ pass 21
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 832.284811
**Merge check** at `652b00b2`
Judged: head `652b00b25b28` merged into trunk `54b3ce503e79`; read beside it: mesh-controller `c43772fd94eb`, mesh-controller-main `c43772fd94eb`, mesh-host `6469e8238443`, mesh-tools `7412c5b6c9c5`
- `mesh/merge-gate`: **FAIL** — 6 problem(s) the change brings; the first: a machine (f35): nothing could be sent to it with this change — resource "xorg.config": a directory does not use "unknown", and it is set. Refused rather than ignored (modules: artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, build-agent, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, route-proxy, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new:modules/marrytts, new:modules/ollama, new:modules/photos-eef, new:modules/photos-filip)
- `mesh/repo-check`: **PASS** — THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
**Delivery plan** — builds artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, build-agent, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, route-proxy, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new: modules/marrytts, modules/ollama, modules/photos-eef, modules/photos-filip → ace, g14, novox, shanks; merging this needs a person's bus upgrade; 12 wait(s) for a person
- tier 0: artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, build-agent, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, route-proxy, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh
- ace: receives baserow, build-agent, ca-trust, claude-code, docker, fail2ban, grafana, home-assistant, icecast, influxdb, kernel, letta, matrix, mesh-cli, mesh-files, mesh-provisioner-client, mesh-reads, mosquitto, n8n, node-env, nodered, power, powerlevel10k, redis, restic, route-proxy, searxng, ssh-client, supabase, systemd, unifi, zsh; waits for a person: dnsmasq, mssql, nfs-server, postgres
- g14: receives asus-zephyrus-g14, build-agent, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, i3, i3status-rust, kernel, lemurs, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, node-env, picom, power, powerlevel10k, restic, rofi, ssh-client, systemd, triggerhappy, xorg, zsh
- novox: receives artifact-store-tools, build-agent, ca-trust, claude-code, claude-licence-manager, desk-channel, distribution, docker, fail2ban, gitea, invoicing, kernel, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, messenger, nextcloud, node-env, only-office, power, powerlevel10k, records, restic, route-proxy, ssh-client, step-ca, systemd, telegram, umami, website, zsh; waits for a person: dnsmasq, keycloak, mailu, minio, mongodb, mssql, nats, postgres
- shanks: receives build-agent, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, i3, i3status-rust, kernel, lab, lemurs, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mounts, node-env, picom, power, powerlevel10k, restic, rofi, ssh-client, systemd, xorg, zsh
- baserow keeps data (ADR 0233): what it holds is backed up before it moves
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- claude-code keeps data (ADR 0233): what it holds is backed up before it moves
- distribution provides artifact-store: its consumers are sent again after it
- distribution keeps data (ADR 0233): what it holds is backed up before it moves
- dnsmasq waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- dnsmasq provides wildcard-resolution: its consumers are sent again after it
- gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
- gitea keeps data (ADR 0233): what it holds is backed up before it moves
- grafana keeps data (ADR 0233): what it holds is backed up before it moves
- home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
- icecast keeps data (ADR 0233): what it holds is backed up before it moves
- influxdb provides influxdb-api: its consumers are sent again after it
- influxdb keeps data (ADR 0233): what it holds is backed up before it moves
- keycloak waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- keycloak provides oidc-client: its consumers are sent again after it
- keycloak keeps data (ADR 0233): what it holds is backed up before it moves
- lab keeps data (ADR 0233): what it holds is backed up before it moves
- mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mailu provides smtp: its consumers are sent again after it
- mailu keeps data (ADR 0233): what it holds is backed up before it moves
- matrix keeps data (ADR 0233): what it holds is backed up before it moves
- mesh-vault provides secret: its consumers are sent again after it
- mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
- minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- minio provides s3-bucket: its consumers are sent again after it
- minio keeps data (ADR 0233): what it holds is backed up before it moves
- mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mongodb provides mongodb-database: its consumers are sent again after it
- mongodb keeps data (ADR 0233): what it holds is backed up before it moves
- mosquitto provides mqtt-topic: its consumers are sent again after it
- mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
- mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mssql provides mssql-database: its consumers are sent again after it
- mssql keeps data (ADR 0233): what it holds is backed up before it moves
- n8n keeps data (ADR 0233): what it holds is backed up before it moves
- merging this needs a person's bus upgrade: nats is never sent by an ordinary send, and until `mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}` runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)
- nats provides mesh-bus: its consumers are sent again after it
- nats keeps data (ADR 0233): what it holds is backed up before it moves
- nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
- nfs-server waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- nfs-server provides nfs-share: its consumers are sent again after it
- nfs-server keeps data (ADR 0233): what it holds is backed up before it moves
- nodered keeps data (ADR 0233): what it holds is backed up before it moves
- only-office keeps data (ADR 0233): what it holds is backed up before it moves
- postgres waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- postgres provides postgres-database: its consumers are sent again after it
- postgres keeps data (ADR 0233): what it holds is backed up before it moves
- records keeps data (ADR 0233): what it holds is backed up before it moves
- redis provides redis-cache: its consumers are sent again after it
- redis keeps data (ADR 0233): what it holds is backed up before it moves
- restic keeps data (ADR 0233): what it holds is backed up before it moves
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
- searxng keeps data (ADR 0233): what it holds is backed up before it moves
- ssh-client keeps data (ADR 0233): what it holds is backed up before it moves
- step-ca provides internal-acme-ca: its consumers are sent again after it
- step-ca keeps data (ADR 0233): what it holds is backed up before it moves
- supabase keeps data (ADR 0233): what it holds is backed up before it moves
- umami provides analytics: its consumers are sent again after it
- umami keeps data (ADR 0233): what it holds is backed up before it moves
- unifi keeps data (ADR 0233): what it holds is backed up before it moves
- xorg provides x11-display: its consumers are sent again after it
- 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 asus-zephyrus-g14, baserow, build-agent, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, grafana, home-assistant, i3, i3status-rust, icecast, influxdb, kernel, lab, lemurs, letta, matrix, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mosquitto, mounts, n8n, node-env, nodered, picom, power, powerlevel10k, redis, restic, rofi, route-proxy, searxng, ssh-client, supabase, systemd, triggerhappy, unifi, xorg, zsh is judged on its first machine
- read by no module's build: checks/owned/go.mod, checks/owned/main.go, checks/owned/main_test.go, merge-check.sh, modules/artifact-store-tools/README.md, modules/asus-zephyrus-g14/README.md, modules/betterbird/README.md, modules/build-agent/README.md, modules/ca-trust/README.md, modules/claude-code/README.md, modules/claude-licence-manager/README.md, modules/clipmenu/README.md, modules/desk-channel/README.md, modules/dnsmasq/README.md, modules/docker/README.md, modules/dunst/README.md, modules/fail2ban/README.md, modules/feh/README.md, modules/hello-web/README.md, modules/i3/README.md, modules/i3status-rust/README.md, modules/invoicing/README.md, modules/kernel/README.md, modules/keycloak/README.md, modules/lemurs/README.md, modules/local-model-consumer/README.md, modules/matrix/README.md, modules/memory-pressure/README.md, modules/mesh-cli/README.md, modules/mesh-config/README.md, modules/mesh-delivery/README.md, modules/mesh-files/README.md, modules/mesh-issues/README.md, modules/mesh-knowledge/README.md, modules/mesh-mail-notifier/README.md, modules/mesh-mail/README.md, modules/mesh-provisioner-client/README.md, modules/mesh-provisioner/README.md, modules/mesh-reads/README.md, modules/mesh-vault/README.md, modules/mesh-watcher/README.md, modules/messenger/README.md, modules/mounts/README.md, modules/nfs-server/README.md, modules/node-env/README.md, modules/only-office/README.md, modules/picom/README.md, modules/postgres/README.md, modules/power/README.md, modules/powerlevel10k/README.md, modules/powerlevel10k/test/module.test.ts, modules/records/README.md, modules/restic/README.md, modules/rofi/README.md, modules/route-proxy/README.md, modules/route-proxy/cmd/route-provider/provider_test.go, modules/ssh-client/README.md, modules/ssh-client/cmd/ssh-client-tools/templates_test.go, modules/step-ca/README.md, modules/supabase/README.md, modules/telegram/README.md, modules/triggerhappy/README.md, modules/xorg/README.md, modules/zfs/README.md
Run by the build seat on shanks as `build-1792254211537776414` (`builds --log build-1792254211537776414`).
```
type-checking modules/letta (TypeScript)
NOT TESTED: modules/letta is TypeScript and has no tests of its own
type-checking modules/mailu (TypeScript)
testing modules/mailu (TypeScript)
✔ an empty queue is healthy, and says so (1.673354ms)
✔ a recipient overdue on a name-service failure is unhealthy, with counts, its age and its reason (0.790332ms)
✔ one dead far domain overdue is healthy, and said (0.383455ms)
✔ overdue mail to three domains is unhealthy, whatever the reason (0.291194ms)
✔ a deferred message younger than the bound is healthy, and is said (0.275314ms)
✔ a container that cannot be reached is unhealthy, and says what docker said (0.290735ms)
✔ a name that does not resolve is unhealthy, though the queue is empty (0.290924ms)
✔ a container that does not answer in time is said so (0.199483ms)
✔ the health tool is served without the admin API, on the smtp container it is told (5.249567ms)
✔ the vault's apiKey is used, a setting of it is ignored and said once, without its value (2.01056ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 108.020181
type-checking modules/mesh-catalog (TypeScript)
testing modules/mesh-catalog (TypeScript)
✔ the catalogue hears the build seat that builds now, not only the retired one (issue 712) (3.803806ms)
✔ a walk's build is placed, under its module and commit (0.6501ms)
✔ a merge check, a try, a dry run and a failure are passed over without a fault (0.232023ms)
✔ an outcome that names no module or commit is said as the builder's fault (0.187522ms)
✔ a branch built through the build verb is passed over; a commit on the trunk, or from a seat that names none, is placed (ADR 0238) (0.161312ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 93.389846
type-checking modules/minio (TypeScript)
NOT TESTED: modules/minio is TypeScript and has no tests of its own
type-checking modules/model-usage (TypeScript)
testing modules/model-usage (TypeScript)
✔ a store that refuses a row is thrown, so the event is offered again, and it is spooled (19.720961ms)
✔ a redelivered event writes the same reading, never a second, and clears its spooled copy (10.512085ms)
✔ on its last delivery a usage event is spooled and taken (48.929341ms)
✔ the spool replays once the store answers, and an older reading replayed late does not overwrite a newer (50.138978ms)
✔ an event without a body is taken without a TypeError; a row the store could never take is skipped, not retried (1.665634ms)
✔ model_usage_status reports the spool, and is offered even when the store cannot be opened (50.18556ms)
﹣ against postgres: migrations are numbered and repeatable, and the upsert keeps the reading observed latest (0.201033ms) # TEST_DATABASE_URL is not set
ℹ tests 7
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 301.225686
type-checking modules/mongodb (TypeScript)
NOT TESTED: modules/mongodb is TypeScript and has no tests of its own
type-checking modules/mosquitto (TypeScript)
testing modules/mosquitto (TypeScript)
✔ named, the broker's container runs mosquitto_ctrl under the options shell, stdin open (1.259608ms)
✔ unnamed, this machine's mosquitto_ctrl runs under the same shell (0.183683ms)
✔ the options shell itself holds no secret (0.237933ms)
✔ an argv carrying the admin password or a password being set is refused, by name (0.478127ms)
✔ the admin tool refuses a dynsec command that would put a password on a command line (0.257823ms)
✔ the admin's name and password reach mosquitto_ctrl in a 0600 options file, and a password being set at its prompt (12.142059ms)
✔ a consumer that contributed nothing gets its own subtree (1.37485ms)
✔ a contributed list is granted exactly, duplicates once (0.380416ms)
✔ a list that is not topic filters is refused whole (0.315085ms)
✔ getRole's ACL lines are read, the warning and headings are not (0.382405ms)
✔ the role is brought to exactly the wanted ACLs (0.370536ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 113.623863
type-checking modules/mssql (TypeScript)
testing modules/mssql (TypeScript)
✔ a caller's statement runs as the reader, as it was written, on the database it names (2.198963ms)
✔ the reader is made as the administrator, kept out of sysadmin, and granted only reading (0.782851ms)
✔ without the reader's password the statement is refused, and nothing runs as the administrator (0.581779ms)
✔ a consumer's password is checked as a bound parameter, never in the text (0.333665ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 294.361125
type-checking modules/nextcloud (TypeScript)
testing modules/nextcloud (TypeScript)
✔ the vault's password is used, a setting of it is ignored and said once, without its value (1.924008ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 94.167326
type-checking modules/nodered (TypeScript)
testing modules/nodered (TypeScript)
✔ ace: the named broker node is moved to the bound broker and login; the other broker is not touched (2.579118ms)
✔ fresh: with nothing named, the step makes its own broker node (0.356515ms)
✔ a login the broker does not take is never written (0.846502ms)
✔ a named node that is not there, or a loopback broker, is refused (0.286984ms)
✔ a deploy that raced another is read again once (0.530738ms)
✔ settings name broker nodes under mqtt.brokers (0.152813ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 106.153403
type-checking modules/openai-consumer (TypeScript)
NOT TESTED: modules/openai-consumer is TypeScript and has no tests of its own
modules/powerlevel10k has no TypeScript sources of its own to type-check: its tests read its files
testing modules/powerlevel10k (TypeScript)
✔ the theme archive is built from the vendored release and carries its licence (1.383131ms)
✔ the configuration archive holds the prompt's configuration and nothing else (0.176413ms)
✔ both are unpacked under the account's home, owned by the account (0.218503ms)
✔ the zsh code in the normal slot sources the theme, then the configuration, and turns on no instant prompt (0.324345ms)
✔ the README names the upstream, the version and the licence (0.254534ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 96.166447
type-checking modules/redis (TypeScript)
NOT TESTED: modules/redis is TypeScript and has no tests of its own
type-checking modules/route-adapter (TypeScript)
testing modules/route-adapter (TypeScript)
✔ it writes one route file per contribution, in the predecessor's own shape (7.569082ms)
✔ it removes the file it wrote when that contribution goes (2.71926ms)
✔ it never touches a file it did not write (4.044439ms)
✔ the target port follows what the contributor publishes (1.815496ms)
✔ a contributor on another node is reached at the address the mesh gave it (1.35383ms)
✔ a node's settings are laid over the module's defaults, and nothing else changes (1.319209ms)
✔ a contribution it cannot act on is skipped and named (0.231254ms)
✔ a contribution the file shape cannot say is skipped and says which part (0.270784ms)
✔ it refuses when the predecessor's directory is not there, and says why (2.02442ms)
✔ a body limit is written as the predecessor's buffering middleware (2.139061ms)
✔ a body limit that is not a whole number of bytes is skipped and named (0.335395ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 123.465198
type-checking modules/searxng (TypeScript)
NOT TESTED: modules/searxng is TypeScript and has no tests of its own
type-checking modules/showcase (TypeScript)
NOT TESTED: modules/showcase is TypeScript and has no tests of its own
type-checking modules/umami (TypeScript)
NOT TESTED: modules/umami is TypeScript and has no tests of its own
type-checking modules/unifi (TypeScript)
NOT TESTED: modules/unifi is TypeScript and has no tests of its own
type-checking modules/zsh (TypeScript)
testing modules/zsh (TypeScript)
✔ the exit status and both streams are answered (9.337048ms)
✔ it runs in the directory it is given (4.986624ms)
✔ on timeout the whole process group is ended, a backgrounded grandchild included (503.673963ms)
✔ output beyond the bound is cut and the answer says so (7.537671ms)
✔ a job left in the background does not hold the answer (205.198731ms)
﹣ zsh runs the command as a login shell, when zsh is here (2.766001ms) # zsh is not installed here
✔ the timeout is held below the runtime's call limit (0.241723ms)
✔ the command's environment drops the mesh's words and gains the account's session words when they exist (0.250333ms)
✔ zsh_config counts the mesh's block in a file (3.770015ms)
✔ no file carries its text inline: each names its template, and the build packs files/ into one archive (1.471602ms)
✔ it claims node-login-shell serving execute, and declares no seat (0.127722ms)
✔ the .zshrc block is at the start and holds the three slots in order, after the defaults' header (0.213443ms)
✔ the .zshrc block carries the shared defaults and none of the operator's own lines (0.309705ms)
✔ the .zshenv block sources exactly the environment file node-environment fixes (0.304425ms)
✔ its environment is a contribution: the editor, the configuration home, and three PATH entries at the start (0.502678ms)
✔ it keeps the package and sets the login shell through the user shape (0.139662ms)
✔ the tools bundle registers the seat's verb under node-login-shell (0.244353ms)
✔ execute is a per-machine config value, served unless a machine withholds it (ADR 0268, ADR 0348 §4) (0.472177ms)
✔ the tools bundle registers execute only where the machine's setting serves it (0.418256ms)
✔ execute is served only when the machine's setting says serve (0.838312ms)
✔ anything but serve withholds it: a wrong value, no line, no file (0.267534ms)
✔ the setting is read from the file the bundle's word names (0.572109ms)
ℹ tests 22
ℹ suites 0
ℹ pass 21
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 832.284811
```
mesh/merge-gate head 7104df6fa284 merged into trunk 5e6f5b8f6d99 — pass, with a note: builds artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow…
mesh/repo-check head 7104df6fa284 merged into trunk 5e6f5b8f6d99 — pass: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the ch…
mesh-catalog #350 removed both modules from the catalogue; this change's edits to them go with them, and mesh-issues keeps both #350's change and its `unknown`. The branch's tree is the reviewed tree merged with main 5e6f5b8f6d.
mesh/repo-check: PASS — THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
baserow keeps data (ADR 0233): what it holds is backed up before it moves
claude-code keeps data (ADR 0233): what it holds is backed up before it moves
distribution provides artifact-store: its consumers are sent again after it
distribution keeps data (ADR 0233): what it holds is backed up before it moves
dnsmasq waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
dnsmasq provides wildcard-resolution: its consumers are sent again after it
gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
gitea keeps data (ADR 0233): what it holds is backed up before it moves
grafana keeps data (ADR 0233): what it holds is backed up before it moves
home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
icecast keeps data (ADR 0233): what it holds is backed up before it moves
influxdb provides influxdb-api: its consumers are sent again after it
influxdb keeps data (ADR 0233): what it holds is backed up before it moves
keycloak waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
keycloak provides oidc-client: its consumers are sent again after it
keycloak keeps data (ADR 0233): what it holds is backed up before it moves
lab keeps data (ADR 0233): what it holds is backed up before it moves
mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mailu provides smtp: its consumers are sent again after it
mailu keeps data (ADR 0233): what it holds is backed up before it moves
matrix keeps data (ADR 0233): what it holds is backed up before it moves
mesh-vault provides secret: its consumers are sent again after it
mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
minio provides s3-bucket: its consumers are sent again after it
minio keeps data (ADR 0233): what it holds is backed up before it moves
mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mongodb provides mongodb-database: its consumers are sent again after it
mongodb keeps data (ADR 0233): what it holds is backed up before it moves
mosquitto provides mqtt-topic: its consumers are sent again after it
mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
mssql provides mssql-database: its consumers are sent again after it
mssql keeps data (ADR 0233): what it holds is backed up before it moves
n8n keeps data (ADR 0233): what it holds is backed up before it moves
merging this needs a person's bus upgrade: nats is never sent by an ordinary send, and until mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"} runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)
nats provides mesh-bus: its consumers are sent again after it
nats keeps data (ADR 0233): what it holds is backed up before it moves
nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
nfs-server waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
nfs-server provides nfs-share: its consumers are sent again after it
nfs-server keeps data (ADR 0233): what it holds is backed up before it moves
nodered keeps data (ADR 0233): what it holds is backed up before it moves
only-office keeps data (ADR 0233): what it holds is backed up before it moves
postgres waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
postgres provides postgres-database: its consumers are sent again after it
postgres keeps data (ADR 0233): what it holds is backed up before it moves
records keeps data (ADR 0233): what it holds is backed up before it moves
redis provides redis-cache: its consumers are sent again after it
redis keeps data (ADR 0233): what it holds is backed up before it moves
restic keeps data (ADR 0233): what it holds is backed up before it moves
searxng keeps data (ADR 0233): what it holds is backed up before it moves
ssh-client keeps data (ADR 0233): what it holds is backed up before it moves
step-ca provides internal-acme-ca: its consumers are sent again after it
step-ca keeps data (ADR 0233): what it holds is backed up before it moves
supabase keeps data (ADR 0233): what it holds is backed up before it moves
umami provides analytics: its consumers are sent again after it
umami keeps data (ADR 0233): what it holds is backed up before it moves
unifi keeps data (ADR 0233): what it holds is backed up before it moves
xorg provides x11-display: its consumers are sent again after it
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 asus-zephyrus-g14, baserow, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, grafana, home-assistant, i3, i3status-rust, icecast, influxdb, kernel, lab, lemurs, letta, matrix, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mosquitto, mounts, n8n, node-env, nodered, picom, power, powerlevel10k, redis, restic, rofi, searxng, ssh-client, supabase, systemd, triggerhappy, unifi, xorg, zsh is judged on its first machine
Run by the build seat on ace as build-1792259715740234799 (builds --log build-1792259715740234799).
type-checking modules/letta (TypeScript)
NOT TESTED: modules/letta is TypeScript and has no tests of its own
type-checking modules/mailu (TypeScript)
testing modules/mailu (TypeScript)
✔ an empty queue is healthy, and says so (1.362176ms)
✔ a recipient overdue on a name-service failure is unhealthy, with counts, its age and its reason (0.624266ms)
✔ one dead far domain overdue is healthy, and said (0.310315ms)
✔ overdue mail to three domains is unhealthy, whatever the reason (0.250071ms)
✔ a deferred message younger than the bound is healthy, and is said (0.231106ms)
✔ a container that cannot be reached is unhealthy, and says what docker said (0.251333ms)
✔ a name that does not resolve is unhealthy, though the queue is empty (0.220816ms)
✔ a container that does not answer in time is said so (0.162756ms)
✔ the health tool is served without the admin API, on the smtp container it is told (4.431676ms)
✔ the vault's apiKey is used, a setting of it is ignored and said once, without its value (1.564998ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 82.711967
type-checking modules/mesh-catalog (TypeScript)
testing modules/mesh-catalog (TypeScript)
✔ the catalogue hears the build seat that builds now, not only the retired one (issue 712) (3.765984ms)
✔ a walk's build is placed, under its module and commit (0.556979ms)
✔ a merge check, a try, a dry run and a failure are passed over without a fault (0.208262ms)
✔ an outcome that names no module or commit is said as the builder's fault (0.159761ms)
✔ a branch built through the build verb is passed over; a commit on the trunk, or from a seat that names none, is placed (ADR 0238) (0.146937ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 73.204268
type-checking modules/minio (TypeScript)
NOT TESTED: modules/minio is TypeScript and has no tests of its own
type-checking modules/model-usage (TypeScript)
testing modules/model-usage (TypeScript)
✔ a store that refuses a row is thrown, so the event is offered again, and it is spooled (16.521548ms)
✔ a redelivered event writes the same reading, never a second, and clears its spooled copy (9.798975ms)
✔ on its last delivery a usage event is spooled and taken (51.45322ms)
✔ the spool replays once the store answers, and an older reading replayed late does not overwrite a newer (45.83477ms)
✔ an event without a body is taken without a TypeError; a row the store could never take is skipped, not retried (0.893332ms)
✔ model_usage_status reports the spool, and is offered even when the store cannot be opened (44.411357ms)
﹣ against postgres: migrations are numbered and repeatable, and the upsert keeps the reading observed latest (0.163829ms) # TEST_DATABASE_URL is not set
ℹ tests 7
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 253.778915
type-checking modules/mongodb (TypeScript)
NOT TESTED: modules/mongodb is TypeScript and has no tests of its own
type-checking modules/mosquitto (TypeScript)
testing modules/mosquitto (TypeScript)
✔ named, the broker's container runs mosquitto_ctrl under the options shell, stdin open (1.68313ms)
✔ unnamed, this machine's mosquitto_ctrl runs under the same shell (0.156104ms)
✔ the options shell itself holds no secret (0.174158ms)
✔ an argv carrying the admin password or a password being set is refused, by name (0.413108ms)
✔ the admin tool refuses a dynsec command that would put a password on a command line (0.2017ms)
✔ the admin's name and password reach mosquitto_ctrl in a 0600 options file, and a password being set at its prompt (101.598597ms)
✔ a consumer that contributed nothing gets its own subtree (1.067391ms)
✔ a contributed list is granted exactly, duplicates once (0.231125ms)
✔ a list that is not topic filters is refused whole (0.220455ms)
✔ getRole's ACL lines are read, the warning and headings are not (0.287111ms)
✔ the role is brought to exactly the wanted ACLs (0.301668ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 176.841063
type-checking modules/mssql (TypeScript)
testing modules/mssql (TypeScript)
✔ a caller's statement runs as the reader, as it was written, on the database it names (2.302096ms)
✔ the reader is made as the administrator, kept out of sysadmin, and granted only reading (0.473963ms)
✔ without the reader's password the statement is refused, and nothing runs as the administrator (1.667261ms)
✔ a consumer's password is checked as a bound parameter, never in the text (0.235544ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 235.483572
type-checking modules/nextcloud (TypeScript)
testing modules/nextcloud (TypeScript)
✔ the vault's password is used, a setting of it is ignored and said once, without its value (2.012762ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 76.803505
type-checking modules/nodered (TypeScript)
testing modules/nodered (TypeScript)
✔ ace: the named broker node is moved to the bound broker and login; the other broker is not touched (2.079637ms)
✔ fresh: with nothing named, the step makes its own broker node (0.296728ms)
✔ a login the broker does not take is never written (0.156685ms)
✔ a named node that is not there, or a loopback broker, is refused (0.840884ms)
✔ a deploy that raced another is read again once (0.460107ms)
✔ settings name broker nodes under mqtt.brokers (0.14291ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 80.371485
type-checking modules/openai-consumer (TypeScript)
NOT TESTED: modules/openai-consumer is TypeScript and has no tests of its own
modules/powerlevel10k has no TypeScript sources of its own to type-check: its tests read its files
testing modules/powerlevel10k (TypeScript)
✔ the theme archive is built from the vendored release and carries its licence (1.175544ms)
✔ the configuration archive holds the prompt's configuration and nothing else (0.154871ms)
✔ both are unpacked under the account's home, owned by the account (0.47805ms)
✔ the zsh code in the normal slot sources the theme, then the configuration, and turns on no instant prompt (0.567609ms)
✔ the README names the upstream, the version and the licence (0.369596ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 72.255619
type-checking modules/redis (TypeScript)
NOT TESTED: modules/redis is TypeScript and has no tests of its own
type-checking modules/route-adapter (TypeScript)
testing modules/route-adapter (TypeScript)
✔ it writes one route file per contribution, in the predecessor's own shape (6.207952ms)
✔ it removes the file it wrote when that contribution goes (2.666342ms)
✔ it never touches a file it did not write (3.740104ms)
✔ the target port follows what the contributor publishes (1.578824ms)
✔ a contributor on another node is reached at the address the mesh gave it (1.193307ms)
✔ a node's settings are laid over the module's defaults, and nothing else changes (1.090183ms)
✔ a contribution it cannot act on is skipped and named (0.177965ms)
✔ a contribution the file shape cannot say is skipped and says which part (0.219524ms)
✔ it refuses when the predecessor's directory is not there, and says why (1.331889ms)
✔ a body limit is written as the predecessor's buffering middleware (1.558807ms)
✔ a body limit that is not a whole number of bytes is skipped and named (0.274678ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 90.015288
type-checking modules/searxng (TypeScript)
NOT TESTED: modules/searxng is TypeScript and has no tests of its own
type-checking modules/showcase (TypeScript)
NOT TESTED: modules/showcase is TypeScript and has no tests of its own
type-checking modules/umami (TypeScript)
NOT TESTED: modules/umami is TypeScript and has no tests of its own
type-checking modules/unifi (TypeScript)
NOT TESTED: modules/unifi is TypeScript and has no tests of its own
type-checking modules/zsh (TypeScript)
testing modules/zsh (TypeScript)
✔ the exit status and both streams are answered (7.610935ms)
✔ it runs in the directory it is given (3.543134ms)
✔ on timeout the whole process group is ended, a backgrounded grandchild included (502.529642ms)
✔ output beyond the bound is cut and the answer says so (6.080753ms)
✔ a job left in the background does not hold the answer (204.355657ms)
﹣ zsh runs the command as a login shell, when zsh is here (1.995357ms) # zsh is not installed here
✔ the timeout is held below the runtime's call limit (0.139212ms)
✔ the command's environment drops the mesh's words and gains the account's session words when they exist (0.239491ms)
✔ zsh_config counts the mesh's block in a file (3.293443ms)
✔ no file carries its text inline: each names its template, and the build packs files/ into one archive (1.215239ms)
✔ it claims node-login-shell serving execute, and declares no seat (0.110247ms)
✔ the .zshrc block is at the start and holds the three slots in order, after the defaults' header (0.183676ms)
✔ the .zshrc block carries the shared defaults and none of the operator's own lines (0.240683ms)
✔ the .zshenv block sources exactly the environment file node-environment fixes (0.257275ms)
✔ its environment is a contribution: the editor, the configuration home, and three PATH entries at the start (0.418799ms)
✔ it keeps the package and sets the login shell through the user shape (0.121038ms)
✔ the tools bundle registers the seat's verb under node-login-shell (0.211549ms)
✔ execute is a per-machine config value, served unless a machine withholds it (ADR 0268, ADR 0348 §4) (0.363634ms)
✔ the tools bundle registers execute only where the machine's setting serves it (0.322918ms)
✔ execute is served only when the machine's setting says serve (0.698085ms)
✔ anything but serve withholds it: a wrong value, no line, no file (0.218972ms)
✔ the setting is read from the file the bundle's word names (0.474835ms)
ℹ tests 22
ℹ suites 0
ℹ pass 21
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 801.040292
**Merge check** at `7104df6f`
Judged: head `7104df6fa284` merged into trunk `5e6f5b8f6d99`; read beside it: mesh-controller `d5d54498358e`, mesh-controller-main `d5d54498358e`, mesh-host `6469e8238443`, mesh-tools `7412c5b6c9c5`
- `mesh/merge-gate`: **PASS, WITH A NOTE** — a merge rebuilds 89 module(s) in 1 tier(s) (modules: artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new:modules/build-agent, new:modules/marrytts, new:modules/ollama, new:modules/photos-eef, new:modules/photos-filip, new:modules/route-proxy)
- `mesh/repo-check`: **PASS** — THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
**Delivery plan** — builds artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new: modules/build-agent, modules/marrytts, modules/ollama, modules/photos-eef, modules/photos-filip, modules/route-proxy → ace, g14, novox, shanks; merging this needs a person's bus upgrade; 12 wait(s) for a person
- tier 0: artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh
- ace: receives baserow, ca-trust, claude-code, docker, fail2ban, grafana, home-assistant, icecast, influxdb, kernel, letta, matrix, mesh-cli, mesh-files, mesh-provisioner-client, mesh-reads, mosquitto, n8n, node-env, nodered, power, powerlevel10k, redis, restic, searxng, ssh-client, supabase, systemd, unifi, zsh; waits for a person: dnsmasq, mssql, nfs-server, postgres
- g14: receives asus-zephyrus-g14, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, i3, i3status-rust, kernel, lemurs, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, node-env, picom, power, powerlevel10k, restic, rofi, ssh-client, systemd, triggerhappy, xorg, zsh
- novox: receives artifact-store-tools, ca-trust, claude-code, claude-licence-manager, desk-channel, distribution, docker, fail2ban, gitea, invoicing, kernel, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, messenger, nextcloud, node-env, only-office, power, powerlevel10k, records, restic, ssh-client, step-ca, systemd, telegram, umami, website, zsh; waits for a person: dnsmasq, keycloak, mailu, minio, mongodb, mssql, nats, postgres
- shanks: receives ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, i3, i3status-rust, kernel, lab, lemurs, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mounts, node-env, picom, power, powerlevel10k, restic, rofi, ssh-client, systemd, xorg, zsh
- baserow keeps data (ADR 0233): what it holds is backed up before it moves
- claude-code keeps data (ADR 0233): what it holds is backed up before it moves
- distribution provides artifact-store: its consumers are sent again after it
- distribution keeps data (ADR 0233): what it holds is backed up before it moves
- dnsmasq waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- dnsmasq provides wildcard-resolution: its consumers are sent again after it
- gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
- gitea keeps data (ADR 0233): what it holds is backed up before it moves
- grafana keeps data (ADR 0233): what it holds is backed up before it moves
- home-assistant keeps data (ADR 0233): what it holds is backed up before it moves
- icecast keeps data (ADR 0233): what it holds is backed up before it moves
- influxdb provides influxdb-api: its consumers are sent again after it
- influxdb keeps data (ADR 0233): what it holds is backed up before it moves
- keycloak waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- keycloak provides oidc-client: its consumers are sent again after it
- keycloak keeps data (ADR 0233): what it holds is backed up before it moves
- lab keeps data (ADR 0233): what it holds is backed up before it moves
- mailu waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mailu provides smtp: its consumers are sent again after it
- mailu keeps data (ADR 0233): what it holds is backed up before it moves
- matrix keeps data (ADR 0233): what it holds is backed up before it moves
- mesh-vault provides secret: its consumers are sent again after it
- mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
- minio waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- minio provides s3-bucket: its consumers are sent again after it
- minio keeps data (ADR 0233): what it holds is backed up before it moves
- mongodb waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mongodb provides mongodb-database: its consumers are sent again after it
- mongodb keeps data (ADR 0233): what it holds is backed up before it moves
- mosquitto provides mqtt-topic: its consumers are sent again after it
- mosquitto keeps data (ADR 0233): what it holds is backed up before it moves
- mssql waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- mssql provides mssql-database: its consumers are sent again after it
- mssql keeps data (ADR 0233): what it holds is backed up before it moves
- n8n keeps data (ADR 0233): what it holds is backed up before it moves
- merging this needs a person's bus upgrade: nats is never sent by an ordinary send, and until `mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}` runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)
- nats provides mesh-bus: its consumers are sent again after it
- nats keeps data (ADR 0233): what it holds is backed up before it moves
- nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
- nfs-server waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- nfs-server provides nfs-share: its consumers are sent again after it
- nfs-server keeps data (ADR 0233): what it holds is backed up before it moves
- nodered keeps data (ADR 0233): what it holds is backed up before it moves
- only-office keeps data (ADR 0233): what it holds is backed up before it moves
- postgres waits for a person: its policy records (module) — unless on a machine its move recreates none of its containers and moves none of its data, which the walk judges and then sends
- postgres provides postgres-database: its consumers are sent again after it
- postgres keeps data (ADR 0233): what it holds is backed up before it moves
- records keeps data (ADR 0233): what it holds is backed up before it moves
- redis provides redis-cache: its consumers are sent again after it
- redis keeps data (ADR 0233): what it holds is backed up before it moves
- restic keeps data (ADR 0233): what it holds is backed up before it moves
- searxng keeps data (ADR 0233): what it holds is backed up before it moves
- ssh-client keeps data (ADR 0233): what it holds is backed up before it moves
- step-ca provides internal-acme-ca: its consumers are sent again after it
- step-ca keeps data (ADR 0233): what it holds is backed up before it moves
- supabase keeps data (ADR 0233): what it holds is backed up before it moves
- umami provides analytics: its consumers are sent again after it
- umami keeps data (ADR 0233): what it holds is backed up before it moves
- unifi keeps data (ADR 0233): what it holds is backed up before it moves
- xorg provides x11-display: its consumers are sent again after it
- 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 asus-zephyrus-g14, baserow, ca-trust, claude-code, clipmenu, docker, dunst, fail2ban, feh, grafana, home-assistant, i3, i3status-rust, icecast, influxdb, kernel, lab, lemurs, letta, matrix, memory-pressure, mesh-cli, mesh-files, mesh-mail-notifier, mesh-provisioner-client, mesh-reads, mosquitto, mounts, n8n, node-env, nodered, picom, power, powerlevel10k, redis, restic, rofi, searxng, ssh-client, supabase, systemd, triggerhappy, unifi, xorg, zsh is judged on its first machine
- read by no module's build: checks/owned/go.mod, checks/owned/main.go, checks/owned/main_test.go, merge-check.sh, modules/artifact-store-tools/README.md, modules/asus-zephyrus-g14/README.md, modules/betterbird/README.md, modules/ca-trust/README.md, modules/claude-code/README.md, modules/claude-licence-manager/README.md, modules/clipmenu/README.md, modules/desk-channel/README.md, modules/dnsmasq/README.md, modules/docker/README.md, modules/dunst/README.md, modules/fail2ban/README.md, modules/feh/README.md, modules/hello-web/README.md, modules/i3/README.md, modules/i3status-rust/README.md, modules/invoicing/README.md, modules/kernel/README.md, modules/keycloak/README.md, modules/lemurs/README.md, modules/local-model-consumer/README.md, modules/matrix/README.md, modules/memory-pressure/README.md, modules/mesh-cli/README.md, modules/mesh-config/README.md, modules/mesh-delivery/README.md, modules/mesh-files/README.md, modules/mesh-issues/README.md, modules/mesh-knowledge/README.md, modules/mesh-mail-notifier/README.md, modules/mesh-mail/README.md, modules/mesh-provisioner-client/README.md, modules/mesh-provisioner/README.md, modules/mesh-reads/README.md, modules/mesh-vault/README.md, modules/mesh-watcher/README.md, modules/messenger/README.md, modules/mounts/README.md, modules/nfs-server/README.md, modules/node-env/README.md, modules/only-office/README.md, modules/picom/README.md, modules/postgres/README.md, modules/power/README.md, modules/powerlevel10k/README.md, modules/powerlevel10k/test/module.test.ts, modules/records/README.md, modules/restic/README.md, modules/rofi/README.md, modules/ssh-client/README.md, modules/ssh-client/cmd/ssh-client-tools/templates_test.go, modules/step-ca/README.md, modules/supabase/README.md, modules/telegram/README.md, modules/triggerhappy/README.md, modules/xorg/README.md, modules/zfs/README.md
Run by the build seat on ace as `build-1792259715740234799` (`builds --log build-1792259715740234799`).
```
type-checking modules/letta (TypeScript)
NOT TESTED: modules/letta is TypeScript and has no tests of its own
type-checking modules/mailu (TypeScript)
testing modules/mailu (TypeScript)
✔ an empty queue is healthy, and says so (1.362176ms)
✔ a recipient overdue on a name-service failure is unhealthy, with counts, its age and its reason (0.624266ms)
✔ one dead far domain overdue is healthy, and said (0.310315ms)
✔ overdue mail to three domains is unhealthy, whatever the reason (0.250071ms)
✔ a deferred message younger than the bound is healthy, and is said (0.231106ms)
✔ a container that cannot be reached is unhealthy, and says what docker said (0.251333ms)
✔ a name that does not resolve is unhealthy, though the queue is empty (0.220816ms)
✔ a container that does not answer in time is said so (0.162756ms)
✔ the health tool is served without the admin API, on the smtp container it is told (4.431676ms)
✔ the vault's apiKey is used, a setting of it is ignored and said once, without its value (1.564998ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 82.711967
type-checking modules/mesh-catalog (TypeScript)
testing modules/mesh-catalog (TypeScript)
✔ the catalogue hears the build seat that builds now, not only the retired one (issue 712) (3.765984ms)
✔ a walk's build is placed, under its module and commit (0.556979ms)
✔ a merge check, a try, a dry run and a failure are passed over without a fault (0.208262ms)
✔ an outcome that names no module or commit is said as the builder's fault (0.159761ms)
✔ a branch built through the build verb is passed over; a commit on the trunk, or from a seat that names none, is placed (ADR 0238) (0.146937ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 73.204268
type-checking modules/minio (TypeScript)
NOT TESTED: modules/minio is TypeScript and has no tests of its own
type-checking modules/model-usage (TypeScript)
testing modules/model-usage (TypeScript)
✔ a store that refuses a row is thrown, so the event is offered again, and it is spooled (16.521548ms)
✔ a redelivered event writes the same reading, never a second, and clears its spooled copy (9.798975ms)
✔ on its last delivery a usage event is spooled and taken (51.45322ms)
✔ the spool replays once the store answers, and an older reading replayed late does not overwrite a newer (45.83477ms)
✔ an event without a body is taken without a TypeError; a row the store could never take is skipped, not retried (0.893332ms)
✔ model_usage_status reports the spool, and is offered even when the store cannot be opened (44.411357ms)
﹣ against postgres: migrations are numbered and repeatable, and the upsert keeps the reading observed latest (0.163829ms) # TEST_DATABASE_URL is not set
ℹ tests 7
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 253.778915
type-checking modules/mongodb (TypeScript)
NOT TESTED: modules/mongodb is TypeScript and has no tests of its own
type-checking modules/mosquitto (TypeScript)
testing modules/mosquitto (TypeScript)
✔ named, the broker's container runs mosquitto_ctrl under the options shell, stdin open (1.68313ms)
✔ unnamed, this machine's mosquitto_ctrl runs under the same shell (0.156104ms)
✔ the options shell itself holds no secret (0.174158ms)
✔ an argv carrying the admin password or a password being set is refused, by name (0.413108ms)
✔ the admin tool refuses a dynsec command that would put a password on a command line (0.2017ms)
✔ the admin's name and password reach mosquitto_ctrl in a 0600 options file, and a password being set at its prompt (101.598597ms)
✔ a consumer that contributed nothing gets its own subtree (1.067391ms)
✔ a contributed list is granted exactly, duplicates once (0.231125ms)
✔ a list that is not topic filters is refused whole (0.220455ms)
✔ getRole's ACL lines are read, the warning and headings are not (0.287111ms)
✔ the role is brought to exactly the wanted ACLs (0.301668ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 176.841063
type-checking modules/mssql (TypeScript)
testing modules/mssql (TypeScript)
✔ a caller's statement runs as the reader, as it was written, on the database it names (2.302096ms)
✔ the reader is made as the administrator, kept out of sysadmin, and granted only reading (0.473963ms)
✔ without the reader's password the statement is refused, and nothing runs as the administrator (1.667261ms)
✔ a consumer's password is checked as a bound parameter, never in the text (0.235544ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 235.483572
type-checking modules/nextcloud (TypeScript)
testing modules/nextcloud (TypeScript)
✔ the vault's password is used, a setting of it is ignored and said once, without its value (2.012762ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 76.803505
type-checking modules/nodered (TypeScript)
testing modules/nodered (TypeScript)
✔ ace: the named broker node is moved to the bound broker and login; the other broker is not touched (2.079637ms)
✔ fresh: with nothing named, the step makes its own broker node (0.296728ms)
✔ a login the broker does not take is never written (0.156685ms)
✔ a named node that is not there, or a loopback broker, is refused (0.840884ms)
✔ a deploy that raced another is read again once (0.460107ms)
✔ settings name broker nodes under mqtt.brokers (0.14291ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 80.371485
type-checking modules/openai-consumer (TypeScript)
NOT TESTED: modules/openai-consumer is TypeScript and has no tests of its own
modules/powerlevel10k has no TypeScript sources of its own to type-check: its tests read its files
testing modules/powerlevel10k (TypeScript)
✔ the theme archive is built from the vendored release and carries its licence (1.175544ms)
✔ the configuration archive holds the prompt's configuration and nothing else (0.154871ms)
✔ both are unpacked under the account's home, owned by the account (0.47805ms)
✔ the zsh code in the normal slot sources the theme, then the configuration, and turns on no instant prompt (0.567609ms)
✔ the README names the upstream, the version and the licence (0.369596ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 72.255619
type-checking modules/redis (TypeScript)
NOT TESTED: modules/redis is TypeScript and has no tests of its own
type-checking modules/route-adapter (TypeScript)
testing modules/route-adapter (TypeScript)
✔ it writes one route file per contribution, in the predecessor's own shape (6.207952ms)
✔ it removes the file it wrote when that contribution goes (2.666342ms)
✔ it never touches a file it did not write (3.740104ms)
✔ the target port follows what the contributor publishes (1.578824ms)
✔ a contributor on another node is reached at the address the mesh gave it (1.193307ms)
✔ a node's settings are laid over the module's defaults, and nothing else changes (1.090183ms)
✔ a contribution it cannot act on is skipped and named (0.177965ms)
✔ a contribution the file shape cannot say is skipped and says which part (0.219524ms)
✔ it refuses when the predecessor's directory is not there, and says why (1.331889ms)
✔ a body limit is written as the predecessor's buffering middleware (1.558807ms)
✔ a body limit that is not a whole number of bytes is skipped and named (0.274678ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 90.015288
type-checking modules/searxng (TypeScript)
NOT TESTED: modules/searxng is TypeScript and has no tests of its own
type-checking modules/showcase (TypeScript)
NOT TESTED: modules/showcase is TypeScript and has no tests of its own
type-checking modules/umami (TypeScript)
NOT TESTED: modules/umami is TypeScript and has no tests of its own
type-checking modules/unifi (TypeScript)
NOT TESTED: modules/unifi is TypeScript and has no tests of its own
type-checking modules/zsh (TypeScript)
testing modules/zsh (TypeScript)
✔ the exit status and both streams are answered (7.610935ms)
✔ it runs in the directory it is given (3.543134ms)
✔ on timeout the whole process group is ended, a backgrounded grandchild included (502.529642ms)
✔ output beyond the bound is cut and the answer says so (6.080753ms)
✔ a job left in the background does not hold the answer (204.355657ms)
﹣ zsh runs the command as a login shell, when zsh is here (1.995357ms) # zsh is not installed here
✔ the timeout is held below the runtime's call limit (0.139212ms)
✔ the command's environment drops the mesh's words and gains the account's session words when they exist (0.239491ms)
✔ zsh_config counts the mesh's block in a file (3.293443ms)
✔ no file carries its text inline: each names its template, and the build packs files/ into one archive (1.215239ms)
✔ it claims node-login-shell serving execute, and declares no seat (0.110247ms)
✔ the .zshrc block is at the start and holds the three slots in order, after the defaults' header (0.183676ms)
✔ the .zshrc block carries the shared defaults and none of the operator's own lines (0.240683ms)
✔ the .zshenv block sources exactly the environment file node-environment fixes (0.257275ms)
✔ its environment is a contribution: the editor, the configuration home, and three PATH entries at the start (0.418799ms)
✔ it keeps the package and sets the login shell through the user shape (0.121038ms)
✔ the tools bundle registers the seat's verb under node-login-shell (0.211549ms)
✔ execute is a per-machine config value, served unless a machine withholds it (ADR 0268, ADR 0348 §4) (0.363634ms)
✔ the tools bundle registers execute only where the machine's setting serves it (0.322918ms)
✔ execute is served only when the machine's setting says serve (0.698085ms)
✔ anything but serve withholds it: a wrong value, no line, no file (0.218972ms)
✔ the setting is read from the file the bundle's word names (0.474835ms)
ℹ tests 22
ℹ suites 0
ℹ pass 21
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 801.040292
```
Reviewed by owned-paths-review@novox: Reviewed in three rounds against issue 1024 and ADR 0422; the fold of main 5e6f5b8f (#350) confirmed to lose nothing; forge tree equals the reviewed tree; gate passes (warning: the rebuild's width only) and merge-check.sh green under main's script. Marked through mesh-delivery.mark-ready (novox/hq issue 913).
ready at 7104df6fa28455abe66e8753348af28abdaed6b6
Reviewed by owned-paths-review@novox: Reviewed in three rounds against issue 1024 and ADR 0422; the fold of main 5e6f5b8f (#350) confirmed to lose nothing; forge tree equals the reviewed tree; gate passes (warning: the rebuild's width only) and merge-check.sh green under main's script. Marked through mesh-delivery.mark-ready (novox/hq issue 913).
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.
Issue 1024, ADR 0422 (on ADR 0416). Release 2 of 2 of feature owned-paths; release 1 (mesh-host #117, the node-engine learns
unknown/knowsand moves out) was delivered to ace, g14, novox and shanks at 18:22. One delivery group with novox/hq feat/owned-paths (design 29).directoryandarchiveresources carryunknown:move-outfor home folders whose program writes nothing there (dunst, i3, i3status-rust, picom, rofi, xorg, clipmenu's drop-ins, feh, powerlevel10k, betterbird, node-env),modulefor ~/.ssh (ssh-client's sweep) and ~/.claude (claude-code; ADR 0273's reactions not built yet, issue 1030),programfor every folder outside a home.knowskeeps what a program or the operator relies on: powerlevel10k's 9 compiled .zwc files, i3'sscripts/(the screenshot key), i3's 10-asus.conf and 20-g14.conf, dunst's 50-slack.conf, betterbird's records and kept/, node-env's forge.credentials (written by claude-code, issue 1033).checks/owned(ADR 0422 §8) runs in merge-check.sh from the next pull request on;checks/sshdirstays while main's merge-check.sh runs it (playbook 07; issue 1035).unknownis removed), zsh, powerlevel10k.What the operator sees after delivery: files of their own in those home folders are moved to ~/.local/state/mesh-moved// with a list, never deleted (approved with ADR 0422). Reviewed in three rounds; forge tree equals the reviewed tree
1a32ec23. Opened along the way: 1033, 1035, 1037.Delivery
novox/mesh-catalog@7104df6fa284— delivered since 2026-10-17T18:39:13ZDelivery plan — builds artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new: modules/build-agent, modules/marrytts, modules/ollama, modules/photos-eef, modules/photos-filip, modules/route-proxy → ace, g14, novox, shanks; merging this needs a person's bus upgrade; 12 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Group
feat/owned-paths, in order: novox/hq@499407c669 → novox/mesh-catalog@7104df6fa2Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
652b00b2Judged: head
652b00b25b28merged into trunk54b3ce503e79; read beside it: mesh-controllerc43772fd94eb, mesh-controller-mainc43772fd94eb, mesh-host6469e8238443, mesh-tools7412c5b6c9c5mesh/merge-gate: FAIL — 6 problem(s) the change brings; the first: a machine (f35): nothing could be sent to it with this change — resource "xorg.config": a directory does not use "unknown", and it is set. Refused rather than ignored (modules: artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, build-agent, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, route-proxy, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new:modules/marrytts, new:modules/ollama, new:modules/photos-eef, new:modules/photos-filip)mesh/repo-check: PASS — THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)Delivery plan — builds artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, build-agent, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, route-proxy, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new: modules/marrytts, modules/ollama, modules/photos-eef, modules/photos-filip → ace, g14, novox, shanks; merging this needs a person's bus upgrade; 12 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Run by the build seat on shanks as
build-1792254211537776414(builds --log build-1792254211537776414).Merge check at
7104df6fJudged: head
7104df6fa284merged into trunk5e6f5b8f6d99; read beside it: mesh-controllerd5d54498358e, mesh-controller-maind5d54498358e, mesh-host6469e8238443, mesh-tools7412c5b6c9c5mesh/merge-gate: PASS, WITH A NOTE — a merge rebuilds 89 module(s) in 1 tier(s) (modules: artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new:modules/build-agent, new:modules/marrytts, new:modules/ollama, new:modules/photos-eef, new:modules/photos-filip, new:modules/route-proxy)mesh/repo-check: PASS — THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the change's judges the pull requests after it merges; its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)Delivery plan — builds artifact-store-tools, asus-zephyrus-g14, audit-logger, baserow, betterbird, ca-trust, claude-code, claude-licence-manager, clipmenu, confluence, desk-channel, distribution, dnsmasq, docker, dunst, fail2ban, feh, gitea, gitlab, grafana, hello-web, home-assistant, i3, i3status-rust, icecast, influxdb, invoicing, jira, kernel, keycloak, lab, lemurs, letta, local-model-consumer, mailu, matrix, memory-pressure, mesh-catalog, mesh-cli, mesh-config, mesh-delivery, mesh-files, mesh-issues, mesh-knowledge, mesh-mail, mesh-mail-notifier, mesh-provisioner, mesh-provisioner-client, mesh-reads, mesh-vault, mesh-watcher, messenger, minio, model-usage, mongodb, mosquitto, mounts, mssql, n8n, nats, nextcloud, nfs-server, node-env, nodered, only-office, openai-consumer, picom, postgres, power, powerlevel10k, records, redis, restic, rofi, route-adapter, searxng, showcase, ssh-client, step-ca, supabase, systemd, telegram, triggerhappy, umami, unifi, website, xorg, zfs, zsh, new: modules/build-agent, modules/marrytts, modules/ollama, modules/photos-eef, modules/photos-filip, modules/route-proxy → ace, g14, novox, shanks; merging this needs a person's bus upgrade; 12 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Run by the build seat on ace as
build-1792259715740234799(builds --log build-1792259715740234799).ready at
7104df6fa2Reviewed by owned-paths-review@novox: Reviewed in three rounds against issue 1024 and ADR 0422; the fold of main
5e6f5b8f(#350) confirmed to lose nothing; forge tree equals the reviewed tree; gate passes (warning: the rebuild's width only) and merge-check.sh green under main's script. Marked through mesh-delivery.mark-ready (novox/hq issue 913).