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.
*.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/.
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.
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.
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.
*.envis not quarantined..gitignorecovers.envand**/.envonly, sopostgres.envandfrank-job-hunt.envare not ignored —git check-ignoresays 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-entropyPOSTGRES_PASSWORD=…is not a shape it knows and would pass. Real instances on blankpad right now:~/.config/containers/systemd/postgres.env(hasPOSTGRES_PASSWORD),~/.config/frank-job-hunt.env, four files in~/.config/secrets/.home/dank/.omp/dotfiles/**(3 files) duplicatesniri/cfg/autostart.kdl,niri/cfg/keybinds.kdlandsystemd-user/…/swayidle-lock.serviceunder a prefixscripts/deploy.shnever 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.gitignoreitself forbids. ~8 wallhaven JPEGs are tracked underdotfiles/noctalia/.local/share/noctalia/wallpapers/, pushing.gitto 100 MB; the wallhaven ID is in every filename, so they are re-fetchable inputs, not config.omp-docs/inventory/home-config-census.mdiscensus-date: 2026-08-28, taggedunverified, and every path in it is/home/dankwhile 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
*.envinto 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.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.Non-goals
No history rewrite. Blobs already in history stay in
.git— the 100 MB is permanent until afilter-repopass, 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)
duofthe repo root was mistaken for the image sum. The untracking kept the files on
disk because
~/.local/share/noctalia/wallpaperssymlinks into them.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.
default.target.wants/blankpad-desk-autoswitch.servicewas a dangling symlink into a reaped worktree — desk auto-switching silently
off while
is-enabledansweredenabled. Relinked, leftinactiveto avoidapplying a desk profile mid-session.