Enforce "config in, state out": quarantine *.env, destroy tracked fiction, refresh the census #40

Open
opened 2026-10-20 16:30:46 -07:00 by dank · 0 comments
Owner

Problem

The repo's law is "config in, state out" with a hard secret quarantine, and the audit of the live dotfiles tier found three ways it is not being enforced.

  1. *.env is not quarantined. .gitignore covers .env and **/.env only, so postgres.env and frank-job-hunt.env are not ignored — git check-ignore says so. The pre-commit gate's pattern list is token-shape only (sk-, ghp_, github_pat_, glpat-, xox*, AKIA, PEM, aes_, JWT), so a low-entropy POSTGRES_PASSWORD=… is not a shape it knows and would pass. Real instances on blankpad right now: ~/.config/containers/systemd/postgres.env (has POSTGRES_PASSWORD), ~/.config/frank-job-hunt.env, four files in ~/.config/secrets/.
  2. Tracked fiction. home/dank/.omp/dotfiles/** (3 files) duplicates niri/cfg/autostart.kdl, niri/cfg/keybinds.kdl and systemd-user/…/swayidle-lock.service under a prefix scripts/deploy.sh never reads — the live package is deployed and symlinked, so the copy is a second owner that only misleads. .pre-pull-backup/** (2 managed-skill files) is a local backup in history, which .gitignore itself forbids. ~8 wallhaven JPEGs are tracked under dotfiles/noctalia/.local/share/noctalia/wallpapers/, pushing .git to 100 MB; the wallhaven ID is in every filename, so they are re-fetchable inputs, not config.
  3. The census cannot be used. omp-docs/inventory/home-config-census.md is census-date: 2026-08-28, tagged unverified, and every path in it is /home/dank while this box is /home/blank. It is the declared input for the pruning session and it is stale, so the pruning session would prune against another box.

Scope

  • *.env into the quarantine block + a password-assignment pattern into the gate, with a black-box test that stages a fake low-entropy password and asserts the hook blocks it, plus a benign control.
  • Untrack home/dank/** and .pre-pull-backup/** (moved to .AGENTTRASH/, not deleted), untrack the wallpapers and ignore the directory, record the law where an agent will read it.
  • Rewrite the census from live data: per-file tracked/box-only classification, installed-vs-absent discrimination, and the 14 absent-program config dirs named as the pruning session's input.

Non-goals

No history rewrite. Blobs already in history stay in .git — the 100 MB is permanent until a filter-repo pass, which is a separate decision because it rewrites history. Adopting the nine hand-authored box-only tool configs (git, bat, lazygit, micro, flameshot, glow, autostart) is deliberately out: not selected.


cwd: /home/blank/.omp/wt/wt-20261019-125509-7c8a99d · session: 01a155bb-6474-7366-be9d-629f74af0e05

Corrections after measurement (2026-10-20)

  • Wallpaper payload is 23 files / 80.4 MiB, not "~8 JPEGs"; an early du of
    the repo root was mistaken for the image sum. The untracking kept the files on
    disk because ~/.local/share/noctalia/wallpapers symlinks into them.
  • Two findings the draft did not know about: the gate matched removed diff
    lines, so it blocked the commit that redacts a secret; and it blocked its own
    fixtures, needing a two-path self-exemption. Both pinned by tests.
  • A live defect surfaced on the box: default.target.wants/blankpad-desk-autoswitch.service
    was a dangling symlink into a reaped worktree — desk auto-switching silently
    off while is-enabled answered enabled. Relinked, left inactive to avoid
    applying a desk profile mid-session.
## Problem The repo's law is "config in, state out" with a hard secret quarantine, and the audit of the live dotfiles tier found three ways it is not being enforced. 1. **`*.env` is not quarantined.** `.gitignore` covers `.env` and `**/.env` only, so `postgres.env` and `frank-job-hunt.env` are not ignored — `git check-ignore` says so. The pre-commit gate's pattern list is token-shape only (`sk-`, `ghp_`, `github_pat_`, `glpat-`, `xox*`, `AKIA`, PEM, `aes_`, JWT), so a low-entropy `POSTGRES_PASSWORD=…` is not a shape it knows and would pass. Real instances on blankpad right now: `~/.config/containers/systemd/postgres.env` (has `POSTGRES_PASSWORD`), `~/.config/frank-job-hunt.env`, four files in `~/.config/secrets/`. 2. **Tracked fiction.** `home/dank/.omp/dotfiles/**` (3 files) duplicates `niri/cfg/autostart.kdl`, `niri/cfg/keybinds.kdl` and `systemd-user/…/swayidle-lock.service` under a prefix `scripts/deploy.sh` never reads — the live package is deployed and symlinked, so the copy is a second owner that only misleads. `.pre-pull-backup/**` (2 managed-skill files) is a local backup in history, which `.gitignore` itself forbids. ~8 wallhaven JPEGs are tracked under `dotfiles/noctalia/.local/share/noctalia/wallpapers/`, pushing `.git` to 100 MB; the wallhaven ID is in every filename, so they are re-fetchable inputs, not config. 3. **The census cannot be used.** `omp-docs/inventory/home-config-census.md` is `census-date: 2026-08-28`, tagged `unverified`, and every path in it is `/home/dank` while this box is `/home/blank`. It is the declared input for the pruning session and it is stale, so the pruning session would prune against another box. ## Scope - `*.env` into the quarantine block + a password-assignment pattern into the gate, with a black-box test that stages a fake low-entropy password and asserts the hook blocks it, plus a benign control. - Untrack `home/dank/**` and `.pre-pull-backup/**` (moved to `.AGENTTRASH/`, not deleted), untrack the wallpapers and ignore the directory, record the law where an agent will read it. - Rewrite the census from live data: per-file tracked/box-only classification, installed-vs-absent discrimination, and the 14 absent-program config dirs named as the pruning session's input. ## Non-goals No history rewrite. Blobs already in history stay in `.git` — the 100 MB is permanent until a `filter-repo` pass, which is a separate decision because it rewrites history. Adopting the nine hand-authored box-only tool configs (`git`, `bat`, `lazygit`, `micro`, `flameshot`, `glow`, `autostart`) is deliberately out: not selected. --- cwd: /home/blank/.omp/wt/wt-20261019-125509-7c8a99d · session: 01a155bb-6474-7366-be9d-629f74af0e05 ## Corrections after measurement (2026-10-20) - Wallpaper payload is **23 files / 80.4 MiB**, not "~8 JPEGs"; an early `du` of the repo root was mistaken for the image sum. The untracking kept the files on disk because `~/.local/share/noctalia/wallpapers` symlinks into them. - Two findings the draft did not know about: the gate matched **removed** diff lines, so it blocked the commit that redacts a secret; and it blocked its own fixtures, needing a two-path self-exemption. Both pinned by tests. - A live defect surfaced on the box: `default.target.wants/blankpad-desk-autoswitch.service` was a dangling symlink into a reaped worktree — desk auto-switching silently off while `is-enabled` answered `enabled`. Relinked, left `inactive` to avoid applying a desk profile mid-session.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dank/command-center#40