My unified nix flake for all configuration management.
  • Nix 72.2%
  • Rust 13.6%
  • Shell 7.3%
  • Python 3.2%
  • TypeScript 1.8%
  • Other 1.9%
Find a file
Daniel Flanagan b729310fe4
All checks were successful
/ check-format (push) Successful in 12s
/ build (push) Has been skipped
fix(battleship/pool-guard): reclaim below the warn line, not onto it
The free-space reclaim floor was a flat 20%, which is warnCapacity's 80%
restated as free space. A pruner that succeeded exactly as designed
therefore parked rpool ON the warn line, and zpool-capacity-alert paged
every 15 minutes about the pruner's own target.

Observed 2026-08-31: rpool at 80% with the guest healthy, exactly the
three configured pre-deploy points kept, the daily trim reporting 100%
trimmed, and prune-cutover-snapshots green every night since Aug 25 --
every mechanism correct, and a page anyway. That is the shape of alert an
operator learns to wave through, which is the outcome the guard exists to
prevent (see the 2026-08-16 and 2026-08-28 pool-full outages).

Derive the floor from warnCapacity plus a margin rather than writing the
two numbers side by side, so moving the warn line moves the floor with it
and they cannot drift back into agreeing. Two assertions carry the
invariants: a completed reclaim leaves the pool below warn, and the floor
still stays clear of the critical line.

Alternative not taken: raising warnCapacity to 85. That keeps the two
numbers independent, so the same collision returns the next time either
is tuned, and it gives up the 80% signal for the reason it was chosen --
ZFS's allocator falls back to best-fit there and write latency climbs.

Tested with nix eval of nixosConfigurations.battleship, which evaluates
the assertions.
2026-08-31 09:28:43 -05:00
.forgejo/workflows fix(ci): stop CI rooting every build, and keep the store off empty 2026-08-28 22:35:32 -05:00
.helix Format 2025-02-14 13:31:18 -06:00
dotfiles fix(limine): drop the noctalia guard that defeated the wallpaper sync, and give flab colours too 2026-08-30 22:32:00 -05:00
issues feat(beefcake): detect store paths registered valid but missing on disk 2026-08-30 23:16:12 -05:00
lib feat(niri): make noctalia the fleet default shell instead of dms 2026-08-30 23:28:28 -05:00
packages fix(battleship/pool-guard): reclaim below the warn line, not onto it 2026-08-31 09:28:43 -05:00
prototypes/beefcake-impermanence fix(beefcake): allowlist immich-ensure-mobile-oauth in the lite gate 2026-08-27 09:42:02 -05:00
secrets chore: add openrouter api key 2026-08-27 13:36:30 -05:00
.envrc feat: fix nix-direnv since removal of home-manager 2026-07-07 09:37:20 -05:00
.gitignore chore: drop accidentally-committed __pycache__; gitignore python bytecode 2026-07-22 16:00:46 -05:00
.sops.yaml feat(pitft): onboard to sops so the otel collector can start 2026-08-17 13:37:42 -05:00
AGENTS.md feat(deploy): make stage+reboot the default for beefcake, blue/green opt-in 2026-08-23 15:29:41 -05:00
CLAUDE.md refactor: make CLAUDE.md a symlink to AGENTS.md 2026-03-23 17:14:34 -05:00
flake.lock feat(greeter): add noctalia-greeter behind desktop.greeter.implementation 2026-08-28 14:23:14 -05:00
flake.nix feat(greeter): add noctalia-greeter behind desktop.greeter.implementation 2026-08-28 14:23:14 -05:00
readme.md refactor(modules): relocate lib/modules/home out of the misleading "home" name 2026-07-17 10:01:13 -05:00
run-claude-sandbox.sh feat: add n8n 2025-11-20 21:15:27 -06:00