Two workstation app modules, modelled on nextcloud-client and blueman (hq ADR 0182, 0205, 0208, 0210, 0212).
slack
No package:slack-desktop 4.51.191-1 is from the AUR on both workstations (pacman counts it as foreign), and the host installs official packages only. ADR 0205 does not apply either, because Slack's binary is not redistributable. The README says so.
One start, as a node-display-sessionconfig contribution:exec --no-startup-id /usr/bin/slack --gtk-version=3 -s, together with the operator's three for_window rules from ~/.config/i3/config.d/50-slack.conf (class (?i)^slack$, role browser-window, $ws3).
Why not XDG autostart: Slack 4.51's own Launch app on login setting is the existence of ~/.config/autostart/slack.desktop. Ticking it creates a symlink to the package's entry, and unticking it deletes the file. Owning that path would make two writers, and leaving it to Slack would mean a symlink.
Tools:slack_status, slack_log (masked), slack_restart (transient user unit mesh-slack), slack_check. slack_check reports:
every second start;
the operator's duplicate rules;
a stdout pipe nobody reads (EPIPE). Slack's logger silences EPIPE, but its other writes still fail;
a missing tray icon (from the X window tree);
no notifier on the bus.
Accounts and workspaces are counted, never named. Tokens, cookies, message text and names are never answered.
jetbrains-toolbox
Kept as found: a self-updating tarball in ~/.local/share/JetBrains/Toolbox. A pinned archive would be a second writer of bin/.
One start: Toolbox's own autostart entry, which it writes itself for its Launch at startup switch. With the switch off, it starts on demand, which is a note and not a finding.
Tools:toolbox_status (version, switches, each IDE with its version, build and update channel), toolbox_restart (mesh-jetbrains-toolbox, --minimize) and toolbox_check.
Bundle name:toolbox-tools. jetbrains-toolbox-tools would cut to Toolbox's comm jetbrains-toolb, and restart would kill the tools themselves. The smoke run caught this.
Also
The header of the shared desktop.go / desktop_test.go now names all four bundles. The files are byte-identical in nextcloud-client, blueman, slack and jetbrains-toolbox.
.gitignore covers the two in-place build outputs.
Verified
go vet and go test pass for slack, jetbrains-toolbox, blueman, nextcloud-client and i3. i3's composed-contributions test runs i3 -C with slack's lines.
mctl module check: all five are ok. The 10 problems the whole-catalogue run reports are the existing node-backup seat issues on main.
A read-only smoke run of status, check and log on the laptop matched what was inspected.
Manual migration (after assign + push)
On each workstation:
Delete ~/.config/autostart/slack.desktop, the predecessor's file.
Delete ~/.config/i3/config.d/50-slack.conf.
Then, on the desktop machine:
run slack_restart, because Slack's stdout is a dead pipe;
run toolbox_restart, because that session predates dex.
Not merged, built, assigned or pushed to any machine.
Two workstation app modules, modelled on nextcloud-client and blueman (hq ADR 0182, 0205, 0208, 0210, 0212).
## slack
- **No package:** `slack-desktop` 4.51.191-1 is from the AUR on both workstations (pacman counts it as foreign), and the host installs official packages only. ADR 0205 does not apply either, because Slack's binary is not redistributable. The README says so.
- **One start, as a `node-display-session` `config` contribution:** `exec --no-startup-id /usr/bin/slack --gtk-version=3 -s`, together with the operator's three `for_window` rules from `~/.config/i3/config.d/50-slack.conf` (class `(?i)^slack$`, role browser-window, $ws3).
- **Why not XDG autostart:** Slack 4.51's own *Launch app on login* setting is the existence of `~/.config/autostart/slack.desktop`. Ticking it creates a **symlink** to the package's entry, and unticking it deletes the file. Owning that path would make two writers, and leaving it to Slack would mean a symlink.
- **Tools:** `slack_status`, `slack_log` (masked), `slack_restart` (transient user unit `mesh-slack`), `slack_check`. `slack_check` reports:
- every second start;
- the operator's duplicate rules;
- a stdout pipe nobody reads (EPIPE). Slack's logger silences EPIPE, but its other writes still fail;
- a missing tray icon (from the X window tree);
- no notifier on the bus.
- Accounts and workspaces are counted, never named. Tokens, cookies, message text and names are never answered.
## jetbrains-toolbox
- **Kept as found:** a self-updating tarball in `~/.local/share/JetBrains/Toolbox`. A pinned archive would be a second writer of `bin/`.
- **One start:** Toolbox's own autostart entry, which it writes itself for its *Launch at startup* switch. With the switch off, it starts on demand, which is a note and not a finding.
- **Tools:** `toolbox_status` (version, switches, each IDE with its version, build and update channel), `toolbox_restart` (`mesh-jetbrains-toolbox`, `--minimize`) and `toolbox_check`.
- **Bundle name:** `toolbox-tools`. `jetbrains-toolbox-tools` would cut to Toolbox's comm `jetbrains-toolb`, and restart would kill the tools themselves. The smoke run caught this.
## Also
- The header of the shared `desktop.go` / `desktop_test.go` now names all four bundles. The files are byte-identical in nextcloud-client, blueman, slack and jetbrains-toolbox.
- `.gitignore` covers the two in-place build outputs.
## Verified
- `go vet` and `go test` pass for slack, jetbrains-toolbox, blueman, nextcloud-client and i3. i3's composed-contributions test runs `i3 -C` with slack's lines.
- `mctl module check`: all five are ok. The 10 problems the whole-catalogue run reports are the existing `node-backup` seat issues on main.
- A read-only smoke run of status, check and log on the laptop matched what was inspected.
## Manual migration (after assign + push)
On each workstation:
1. Delete `~/.config/autostart/slack.desktop`, the predecessor's file.
2. Delete `~/.config/i3/config.d/50-slack.conf`.
Then, on the desktop machine:
- run `slack_restart`, because Slack's stdout is a dead pipe;
- run `toolbox_restart`, because that session predates dex.
Not merged, built, assigned or pushed to any machine.
Slack comes from the AUR and Toolbox from JetBrains' self-updating tarball,
so neither is declared: the host installs official packages only, and a
pinned archive would fight Toolbox's own updates. Slack's start and the
operator's i3 window rules become one node-display-session contribution,
because Slack's own launch-on-login is a symlink in ~/.config/autostart.
Toolbox keeps its own autostart entry as its one start. The shared
desktop.go header now names all four bundles.
Deliverynovox/mesh-catalog@f2b516864705 — held since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.
Delivery plan — builds blueman, nextcloud-client, slack, new: modules/jetbrains-toolbox → g14, shanks; no bus step
tier 0: blueman, nextcloud-client, slack
g14: receives blueman, nextcloud-client, slack
shanks: receives blueman, nextcloud-client, slack
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#59 merged; its head was not heard by this owner, so it is made from the forge's word
2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@f2b516864705` — **held** since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on.
**Delivery plan** — builds blueman, nextcloud-client, slack, new: modules/jetbrains-toolbox → g14, shanks; no bus step
- tier 0: blueman, nextcloud-client, slack
- g14: receives blueman, nextcloud-client, slack
- shanks: receives blueman, nextcloud-client, slack
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#59 merged; its head was not heard by this owner, so it is made from the forge's word
- 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
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.
Two workstation app modules, modelled on nextcloud-client and blueman (hq ADR 0182, 0205, 0208, 0210, 0212).
slack
slack-desktop4.51.191-1 is from the AUR on both workstations (pacman counts it as foreign), and the host installs official packages only. ADR 0205 does not apply either, because Slack's binary is not redistributable. The README says so.node-display-sessionconfigcontribution:exec --no-startup-id /usr/bin/slack --gtk-version=3 -s, together with the operator's threefor_windowrules from~/.config/i3/config.d/50-slack.conf(class(?i)^slack$, role browser-window, $ws3).~/.config/autostart/slack.desktop. Ticking it creates a symlink to the package's entry, and unticking it deletes the file. Owning that path would make two writers, and leaving it to Slack would mean a symlink.slack_status,slack_log(masked),slack_restart(transient user unitmesh-slack),slack_check.slack_checkreports:jetbrains-toolbox
~/.local/share/JetBrains/Toolbox. A pinned archive would be a second writer ofbin/.toolbox_status(version, switches, each IDE with its version, build and update channel),toolbox_restart(mesh-jetbrains-toolbox,--minimize) andtoolbox_check.toolbox-tools.jetbrains-toolbox-toolswould cut to Toolbox's commjetbrains-toolb, and restart would kill the tools themselves. The smoke run caught this.Also
desktop.go/desktop_test.gonow names all four bundles. The files are byte-identical in nextcloud-client, blueman, slack and jetbrains-toolbox..gitignorecovers the two in-place build outputs.Verified
go vetandgo testpass for slack, jetbrains-toolbox, blueman, nextcloud-client and i3. i3's composed-contributions test runsi3 -Cwith slack's lines.mctl module check: all five are ok. The 10 problems the whole-catalogue run reports are the existingnode-backupseat issues on main.Manual migration (after assign + push)
On each workstation:
~/.config/autostart/slack.desktop, the predecessor's file.~/.config/i3/config.d/50-slack.conf.Then, on the desktop machine:
slack_restart, because Slack's stdout is a dead pipe;toolbox_restart, because that session predates dex.Not merged, built, assigned or pushed to any machine.
Delivery
novox/mesh-catalog@f2b516864705— held since 2026-10-06T23:05:28ZHeld for a person: merged without a passing check: only a person decides that it goes on —
mesh-delivery.releasewith why lets it go on.Delivery plan — builds blueman, nextcloud-client, slack, new: modules/jetbrains-toolbox → g14, shanks; no bus step
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.