Stop the deploy tier from reverting live theme state #43

Merged
dank merged 1 commits from fix/42-deploy-generated into main 2026-10-20 17:10:03 -07:00
Owner

Stop the deploy tier from reverting live theme state

Found by doing the obvious thing #41 should have included: running deploy.sh --check
against the live box after the merge. Three findings, one commit — they share the deploy
tier, its docs, and the first test file that tier ever had. Refs #42.

1. Generated palette output was tracked, and a sync would have restored it over your live theme

dotfiles/zz-blankpad/niri/.config/niri/noctalia.kdl (b3d3df4, 2026-10-18) is noctalia's
palette output — machine-written, #ff8c00 / #f43841. It sat byte-identical to the
live file, so it looked inert, and --check was already proposing
ADOPT .config/niri/noctalia.kdl (identical, will symlink). The first time you changed
theme, the next deploy.sh would have quarantined your live palette and reinstated the
colours of 2026-10-18
— a user-visible revert with a .quarantine/ receipt as its only
trace.

deploy.sh now refuses the class: SKIP … (generated theme output), patterns mirrored in
.gitignore so it cannot be re-added, file untracked.

2. A zz override older than the file it overrides

dotfiles/zz-blankpad/niri/…/layout.kdl: focus ring width 2, active-color "#e01b24"
(7b7dbf5, 2026-10-17) — while base absorbed b3d3df4 (2026-10-18): width 4, "#ff8c00".
Stow order makes zz-$HOST win, and a cross-package owner change is a silent relink
(the script's own comment: "nothing to quarantine"). Live was linked to base, the newer
intent, so every --check printed RELINK .config/niri/cfg/layout.kdl and one unattended
deploy.sh would have quietly reverted the amber focus ring. Duplicate deleted; base owns
the file. The law recorded with it: a zz file exists only to differ, and RELINK lines
are never cosmetic noise.

3. Two topologies I asserted in #41 and never measured

The media law and the .gitignore comment both claimed ~/.local/share/noctalia/wallpapers
symlinks into the repo, so deleting the tracked copies would have blanked the desktop.
Measured: it is a real directory of real files that Noctalia owns; the repo copy was a
duplicate, and the #41 merge deleted it without the desktop flickering. Nothing was ever at
risk. What replaces the false claim is the law that actually bites: untracking a path
deletes the file in every other checkout
, git rm --cached on the branch notwithstanding
— the copy that survives here survived because the application, not the repo, owned it.

Guard

tests/deploy.bats — new; there was no deploy test at all. Black box: exit status, stdout,
the symlink shape under $HOME, the quarantine directory. Red before the change (test 2
fails precisely because the live palette is quarantined and reverted), 4/4 after, with a
control proving an ordinary identical config is still adopted — an exclusion nobody can turn
off is just a broken tool.

Verification

bats tests/ 66/66, kb-lint.sh omp-docs 0 violations, kb-coverage.py 0 issues.
Live deploy.sh --check on blankpad, with DEPLOY_REPO pointed at this tree: actions=0,
and SKIP … (generated theme output) where it used to say ADOPT … noctalia.kdl.

Deliberately not done: the real deploy.sh run that clears the remaining RELINK lines.
Running it from a worktree would repoint live symlinks into a checkout the heartbeat reaps
after seven days (the law in omp-docs/tools/dotfiles-deploy.md). It runs on blankpad from
~/.omp once this is merged, and the acceptance check is two consecutive --check runs
printing zero actions.


cwd: /home/blank/.omp/wt/wt-20261019-125509-7c8a99d · session: 01a155bb-6474-7366-be9d-629f74af0e05
Build worktree: ~/.omp/wt/wt-deploy-generated off origin/main. Refs #42

# Stop the deploy tier from reverting live theme state Found by doing the obvious thing #41 should have included: running `deploy.sh --check` against the live box after the merge. Three findings, one commit — they share the deploy tier, its docs, and the first test file that tier ever had. Refs #42. ## 1. Generated palette output was tracked, and a sync would have restored it over your live theme `dotfiles/zz-blankpad/niri/.config/niri/noctalia.kdl` (`b3d3df4`, 2026-10-18) is noctalia's palette **output** — machine-written, `#ff8c00` / `#f43841`. It sat byte-identical to the live file, so it looked inert, and `--check` was already proposing `ADOPT .config/niri/noctalia.kdl (identical, will symlink)`. The first time you changed theme, the next `deploy.sh` would have **quarantined your live palette and reinstated the colours of 2026-10-18** — a user-visible revert with a `.quarantine/` receipt as its only trace. `deploy.sh` now refuses the class: `SKIP … (generated theme output)`, patterns mirrored in `.gitignore` so it cannot be re-added, file untracked. ## 2. A `zz` override older than the file it overrides `dotfiles/zz-blankpad/niri/…/layout.kdl`: focus ring `width 2`, `active-color "#e01b24"` (`7b7dbf5`, 2026-10-17) — while base absorbed `b3d3df4` (2026-10-18): `width 4`, `"#ff8c00"`. Stow order makes `zz-$HOST` win, and a cross-package owner change is a **silent relink** (the script's own comment: *"nothing to quarantine"*). Live was linked to base, the newer intent, so every `--check` printed `RELINK .config/niri/cfg/layout.kdl` and one unattended `deploy.sh` would have quietly reverted the amber focus ring. Duplicate deleted; base owns the file. The law recorded with it: a `zz` file exists only to differ, and `RELINK` lines are never cosmetic noise. ## 3. Two topologies I asserted in #41 and never measured The media law and the `.gitignore` comment both claimed `~/.local/share/noctalia/wallpapers` *symlinks into* the repo, so deleting the tracked copies would have blanked the desktop. Measured: it is a **real directory of real files** that Noctalia owns; the repo copy was a duplicate, and the #41 merge deleted it without the desktop flickering. Nothing was ever at risk. What replaces the false claim is the law that actually bites: **untracking a path deletes the file in every other checkout**, `git rm --cached` on the branch notwithstanding — the copy that survives here survived because the application, not the repo, owned it. ## Guard `tests/deploy.bats` — new; there was no deploy test at all. Black box: exit status, stdout, the symlink shape under `$HOME`, the quarantine directory. Red before the change (test 2 fails precisely because the live palette *is* quarantined and reverted), 4/4 after, with a control proving an ordinary identical config is still adopted — an exclusion nobody can turn off is just a broken tool. ## Verification `bats tests/` **66/66**, `kb-lint.sh omp-docs` 0 violations, `kb-coverage.py` 0 issues. Live `deploy.sh --check` on blankpad, with `DEPLOY_REPO` pointed at this tree: `actions=0`, and `SKIP … (generated theme output)` where it used to say `ADOPT … noctalia.kdl`. **Deliberately not done:** the real `deploy.sh` run that clears the remaining `RELINK` lines. Running it from a worktree would repoint live symlinks into a checkout the heartbeat reaps after seven days (the law in `omp-docs/tools/dotfiles-deploy.md`). It runs on blankpad from `~/.omp` once this is merged, and the acceptance check is two consecutive `--check` runs printing zero actions. --- cwd: /home/blank/.omp/wt/wt-20261019-125509-7c8a99d · session: 01a155bb-6474-7366-be9d-629f74af0e05 Build worktree: `~/.omp/wt/wt-deploy-generated` off `origin/main`. Refs #42
dank added 1 commit 2026-10-20 17:08:22 -07:00
Three findings from verifying the #41 merge against the live box with
`deploy.sh --check`. One commit because they share the deploy tier, its
documentation, and the first test file that tier ever had.

**1. Generated palette output was tracked, and sync would have restored it over a
live theme.** `dotfiles/zz-blankpad/niri/.config/niri/noctalia.kdl` (`b3d3df4`,
2026-10-18) sat byte-identical to the live file — harmless while the palette held, and
`--check` was already proposing `ADOPT … noctalia.kdl`. The moment the theme changed, the
next sync would have quarantined the live file and reinstated 2026-10-18's colours.
`deploy.sh` now refuses the class outright (`SKIP … (generated theme output)`), `.gitignore`
carries the matching patterns so it cannot be re-added, and the file is untracked.

**2. A `zz` override older than the file it overrides.** `dotfiles/zz-blankpad/niri/…/
layout.kdl` held focus ring `width 2` / `#e01b24` (`7b7dbf5`, 2026-10-17) while base
absorbed `b3d3df4` (2026-10-18): `width 4`, `#ff8c00`. Stow order makes `zz-*` win, and a
cross-package owner change relinks *silently* — no quarantine, no warning. Live was linked
to base, the newer intent, so `--check` printed `RELINK … layout.kdl` every run and one
unattended `deploy.sh` would have reverted the amber focus ring. The duplicate is deleted;
base owns the file.

**3. Two topologies I had asserted and not measured.** The media law and the `.gitignore`
comment both said `~/.local/share/noctalia/wallpapers` symlinks into the repo, so deleting
the tracked copies would blank the desktop. Measured: it is a real directory of real files
that Noctalia owns; the repo held a duplicate, and the #41 merge deleted that duplicate
without the desktop flickering. The correct general law replaces the false one — untracking
a path deletes the file in every other checkout, `git rm --cached` on the branch
notwithstanding — and the restore procedure now points at the app's directory, which
`deploy.sh` does not manage.

The guard is `tests/deploy.bats`, black-box over exit status, stdout, the symlink shape
under `$HOME`, and the quarantine directory. Before the change: test 1 and test 2 fail,
test 2 because the live palette really is quarantined and reverted. After: 4/4, including
the control that an ordinary identical config is still adopted — an exclusion nobody can
turn off is just a broken tool.

Verification: `bats tests/` 66/66, `kb-lint.sh omp-docs` 0 violations, `kb-coverage.py` 0
issues, and live `deploy.sh --check` on blankpad reports `SKIP … (generated theme output)`
with `actions=0` instead of `ADOPT … noctalia.kdl`. The real `deploy.sh` run that clears the
remaining `RELINK` lines is deliberately left until this is in main — running it from a
worktree would repoint live symlinks into a checkout the heartbeat reaps.

Refs #42
dank merged commit 7523ca5c19 into main 2026-10-20 17:10:03 -07:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dank/command-center#43