1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# Daily-Driver Machines
Applies to: `**/*`
Craig runs exactly two daily-driver machines: **ratio** and **velox**. They are
kept in sync, and an important change made on one usually needs to reach the
other.
## The Rule
When you make or notice a change that is **machine-level and important** —
dotfiles, installed tooling, a synced repo's clone or timer setup, a global
config, a systemd unit, a credential, a one-time bootstrap step — consider
whether the *other* daily driver needs the same change, and flag it. Don't
assume a change made on the current machine is live everywhere.
Both machines are on the same tailnet, so the agent can usually reach the other
one directly over tailscale ssh — it can sync, verify, or repair the other daily
driver, not just flag the drift. Reach for that when a change needs to land on
both boxes now. (This session repaired ratio's dotfiles and verified the fix
over tailscale; the .emacs.d side has driven ratio the same way — `git fetch` +
`reset --hard` and an `scp` across.)
When tailscale is down or the other machine is offline, fall back to the
original discipline: this is a prompt to think, and the point is to surface "the
other daily driver may need this too" at the moment the change lands, so it
doesn't silently drift to one box.
## How the sync actually happens
The mechanism depends on what changed:
- **A tracked repo** (rulesets, dotfiles, a project) — the other machine just
needs a `git pull` (and, for rulesets, a `make install` to relink anything
new). Most changes are this.
- **Dotfiles** — ride the dotfiles repo; the other machine picks them up on its
next stow/pull.
- **A one-time setup** — a new repo clone, a new systemd timer, a freshly
installed tool, a credential — has to be done by hand on each machine. These
are the ones that silently drift, because nothing carries them automatically.
When the change is the one-time kind, say so explicitly: name the manual step
the other machine still needs.
## Reaching the other machine over tailscale
`tailscale status` lists every node with its tailscale IP and online state.
Connect by tailscale IP (e.g. `100.71.182.1`) or MagicDNS name (e.g.
`ratio.tailf3bb8c.ts.net`) — both always resolve and connect. A bare hostname
(`ssh ratio`) works only when MagicDNS is configured on the local machine;
without it the bare name can fail to resolve, which makes the box look
unreachable when it isn't. Prefer the IP or the full MagicDNS name when in
doubt. The first connection from a new address fails host-key verification under
`BatchMode`; add `-o StrictHostKeyChecking=accept-new` to clear it.
## Knowing which machine you're on
`uname -n` returns the hostname (`ratio` or `velox`). Use it when a reminder is
machine-specific ("on ratio, you still need to …") so the note is actionable
rather than abstract — and after an ssh hop, to confirm which machine you landed
on.
## Current open instance
None. (The org-roam knowledge-base clone + `roam-sync` timer is confirmed on
both daily drivers, velox and ratio, as of 2026-06-30.)
|