aboutsummaryrefslogtreecommitdiff
path: root/docs/design/2026-08-14-velox-reinstall-gaps-2.org
blob: 95842ac4db7b4645615f289cacab89121d48c453 (plain)
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
#+TITLE: Fifth reinstall gap — machine-local .local.el config, and a general shape
#+AUTHOR: Craig Jennings

* Follow-up to this morning's handoff

Sent you four gaps an hour ago
([[file:2026-08-14-velox-reinstall-gaps-1.org][the first report]]). Here is a fifth,
found straight afterwards when I noticed calendar sync was dead on velox.

* What was broken

=calendar-sync.timer= was enabled and firing every fifteen minutes, and failing
every time with exit 255:

: calendar-sync: No calendars configured (set calendar-sync-calendars)

The three output files sat at zero bytes. The cause is that
=~/.emacs.d/calendar-sync.local.el= is gitignored, so the reinstall deleted it
along with everything else untracked, and the module's loader treats a missing
file as a *silent* no-op. So the config vanished quietly and the only symptom
was a failing unit nobody was watching.

Cheap to fix once found: the repo tracks =calendar-sync.local.el.example=, and
that template already encodes the shape velox uses — feeds resolved by
=:secret-host= against =authinfo.gpg= rather than inlined. The authinfo entries
had survived, because =~/.authinfo.gpg= is a stow symlink into the dotfiles repo.
So rebuilding was one copy, and all three feeds now sync clean and land
byte-identical to ratio's.

* The general shape, which is the part worth acting on

This is the same failure as gap 1, one layer down, and it is worth stating
generally because the install can act on it:

- A tracked =*.local.el.example= template plus a gitignored =*.local.el= is a
  deliberate pattern in this config, not a one-off. =.gitignore= lines 56-58
  list three of them: =calendar-sync.local.el=, =signal-config.local.el=,
  =google-keep.local.el=. Every one of those is gone on velox right now. I have
  only repaired the calendar one.
- Secrets held *by reference* survive a rebuild; secrets held *inline* do not.
  The calendar config came back for free because the tokens were in
  =authinfo.gpg=, which is stow-managed and therefore travels. Ratio's copy of
  the same file inlines its URLs, and had ratio been the machine rebuilt, those
  three feed tokens would simply have been gone.
- The failure was silent by design. A missing local config is a no-op, which is
  right for a machine that never configured the feature and wrong for one that
  just lost it.

* What the install could do

- After a rebuild, enumerate every tracked =*.local.el.example= in a project and
  report which have no corresponding =*.local.el=. That is a one-line find and it
  turns a silent no-op into a visible checklist item.
- Same for any =*.local.*= convention elsewhere in the fleet — the pattern is not
  specific to Emacs.
- Worth pairing with gap 2: a unit that is enabled and failing every fifteen
  minutes for two days is its own signal. A post-rebuild pass over
  =systemctl --user list-units --state=failed= would have caught this one
  without knowing anything about calendars.

That last one generalizes best. Of the five gaps I have sent you, three were
things that *looked* fine — a stowed unit file, an enabled timer, a present
clone — and were not.