fix(#60): checks that lied, and claims the machine stopped honouring #61

Merged
dank merged 13 commits from fix/60-review-findings into main 2026-10-21 01:44:07 -07:00
9 changed files with 30 additions and 23 deletions
Showing only changes of commit 671222b881 - Show all commits

No files matched your search

+4 -7
View File
@@ -94,19 +94,16 @@ knowledge base. Those pages own their facts; this is only the pointer.
### Issue tracker
Work items are Gitea issues on `dank/command-center` (Dankclaw,
`192.168.0.143:3000`) — no `gh`, no `tea`. See
[`omp-docs/skills/issue-tracker.md`](omp-docs/skills/issue-tracker.md).
See [`omp-docs/skills/issue-tracker.md`](omp-docs/skills/issue-tracker.md).
### Triage labels
The five canonical roles, each label string equal to its name. See
[`omp-docs/skills/triage-labels.md`](omp-docs/skills/triage-labels.md).
See [`omp-docs/skills/triage-labels.md`](omp-docs/skills/triage-labels.md).
### Domain docs
Single-context, inside the existing knowledge base: `omp-docs/glossary.md` and
`omp-docs/decisions/`. See [`omp-docs/skills/domain-docs.md`](omp-docs/skills/domain-docs.md).
ADRs: `omp-docs/decisions/`. `omp-docs/glossary.md` is intentionally not created.
See [`omp-docs/skills/domain-docs.md`](omp-docs/skills/domain-docs.md).
## Secret gate (HARD rule)
@@ -1,5 +1,5 @@
[Unit]
Description=swayidle idle lock (locks via noctalia-shell IPC, suspends on lid)
Description=swayidle idle lock watcher (arms the idle lock via noctalia-shell IPC; suspend is covered by noctalia's sleep inhibitor)
Documentation=https://github.com/swaywm/swayidle
After=graphical-session.target
# Restart together with the session, not merely at boot: this unit is wanted by
+2 -2
View File
@@ -1,8 +1,8 @@
# Architecture decision records
Decisions this repo has made and will not silently revisit. One file per
decision, named `NNN-<slug>.md`, listed here — an unlisted page fails `kb-lint`
and does not exist as far as any agent is concerned.
decision, named `NNN-<slug>.md`, listed here — an unlisted page fails
`scripts/kb-coverage.py` and does not exist as far as any agent is concerned.
**No ADRs yet.** The first one lands the moment a decision stops being
reversible.
+2 -2
View File
@@ -57,8 +57,8 @@ search practices, open models, MCP.
## [Inventory](inventory/index.md)
Pre-pruning census of every userspace config on this box — the input for the
pruning session.
Per-file tracked-vs-box-only census of `~/.config` on blankpad — the input for the
dotfiles pruning/adoption session.
## [Decisions](decisions/index.md)
+1 -1
View File
@@ -2,4 +2,4 @@
Census of all userspace program configuration on the workstation.
- [home-config-census.md](home-config-census.md) — Complete inventory of top-level dotfiles, ~/.config, ~/.local/share state, and special directories (~/.pi, ~/.omp)
- [home-config-census.md](home-config-census.md) — Per-file tracked-vs-box-only census of ~/.config on blankpad — the input for the dotfiles pruning/adoption session.
+4 -3
View File
@@ -38,7 +38,7 @@ happened, and the durable lesson. It is not a file manifest.
A gate that gets an empty file list reports success. Law: a check MUST fail closed;
a silently-passing gate is worse than none, because it buys the belief of safety.
Details: [secret gate](../tools/index.md).
Details: [secret gate](/tools/index.md).
```
**Rules:**
@@ -58,8 +58,9 @@ Details: [secret gate](../tools/index.md).
- ❌ Forgetting the entry — the change lands undocumented and the next agent rediscovers
the failure the hard way.
- ❌ Starting a second log in a subdirectory — the sprawl that makes logging useless.
- ❌ Invented absolute paths in links — links resolve relative to the page, and the
linter checks them.
- ❌ Invented paths in links — the RECOMMENDED form is an absolute bundle path
(`/tools/index.md`), resolved against the bundle root; the mistake is a path that
names no file there, and that is what the linter reports.
- ❌ Re-expanding an old entry in place — the entry is a pointer; git is the transcript.
---
+13 -4
View File
@@ -1,14 +1,14 @@
---
type: reference
title: Dotfiles deployment tier
description: How dotfiles/ packages become live configuration — stow-equivalent symlinks, host override packages, and the two laws about theme media and systemd enable symlinks.
description: How dotfiles/ packages become live configuration — deploy.sh modes, host override packages, and the tier's hard-won laws, from media and generated theme output to systemd enable/start semantics, dconf dumps, and idle-lock watcher triage.
tags:
- dotfiles
- deployment
- systemd
- noctalia
timestamp: 2026-10-20
verified: 2026-10-20
verified: 2026-10-21
---
# Dotfiles deployment tier
@@ -54,8 +54,17 @@ checkout, `git rm --cached` on the branch notwithstanding.
Restore on a fresh box: the library lives in `~/.local/share/noctalia/wallpapers/`, a path
`deploy.sh` does not manage. Every filename is `wallhaven_<id>.<ext>` and the ID is the
whole address — `curl -L -o <name> "https://wallhaven.cc/w/<id>"` into that directory puts
the set back. Losing it is an acceptable outcome; 80 MB per clone forever is not.
whole address — but `https://wallhaven.cc/w/<id>` answers `text/html`, the web page, so
resolve the direct CDN URL through the API and download that:
```bash
id=73g8xo # the wallhaven_<id> stem of any file in the set
url=$(curl -s "https://wallhaven.cc/api/v1/w/$id" | grep -o '"path":"[^"]*' | cut -d'"' -f4)
curl -L -o ~/.local/share/noctalia/wallpapers/"${url##*/}" "$url"
```
`data.path` already ends in `wallhaven_<id>.<ext>`, so the filename keeps itself. Losing it
is an acceptable outcome; 80 MB per clone forever is not.
## Law: never `systemctl --user enable` a unit from a worktree
+1 -1
View File
@@ -9,7 +9,7 @@ Configuration guides and reference material for installed software. Each tool ha
* [applications](applications.md) — Default userspace applications on CachyOS with Niri — browsers, editor, terminal, file manager, audio, screenshots, gaming.
* [cachyos](cachyos.md) — Arch-based rolling release with performance-optimized kernels, repositories, and gaming stack. Running on the workstation.
* [comfyui](comfyui/index.md) — Node-based AI image generation engine on dankclaw. FLUX.2 klein 4B, CPU backend, systemd managed.
* [dotfiles-deploy](dotfiles-deploy.md) — How `dotfiles/` packages become live config: `deploy.sh` modes, host override packages, and why theme media and worktree-enabled units are traps.
* [dotfiles-deploy](dotfiles-deploy.md) — How `dotfiles/` packages become live config: `deploy.sh` modes, host override packages, and the tier's hard-won laws, from media and generated theme output to systemd enable/start semantics, dconf dumps, and idle-lock watcher triage.
* [ghostty](ghostty/index.md) — GPU-accelerated terminal emulator with extensive configuration, keybindings, and shaders.
* [gitea](gitea/index.md) — Private Git hosting on dankclaw. Quadlet-managed containers: Gitea, PostgreSQL, Caddy.
* [handy](handy.md) — Offline speech-to-text transcription with WebKitGTK backend and Tauri v2 UI.
+2 -2
View File
@@ -18,8 +18,8 @@ btop
# system / fleet tooling
yay # AUR helper bootstrap: ships in the cachyos repo; aur.pkgs installs need it
git-lfs # LFS smudge/clean for tracked wallpapers (see .gitattributes)
swayidle # idle lock + lid policy via swayidle-lock.service unit
git-lfs # .gitattributes still routes image types through the LFS filter; no image is tracked since 2026-10-20
swayidle # idle lock watcher via swayidle-lock.service; suspend locking is noctalia's sleep inhibitor
# desktop apps
flameshot # screenshot tool; bound to CTRL+Shift+1/2/3 in niri keybinds