Appendices
Appendix B: Security Checklist
Run this checklist after a fresh install and quarterly afterwards.
Pre-Install
- Download
install.shover HTTPS only - Inspect
install.shbefore running (optional, recommended for untrusted environments) - Ensure SSH signing key exists and is backed up (
~/.ssh/id_ed25519) - Ensure Age key is backed up if reinstalling (
~/.config/age/keys.txt)
Post-Install
- Run
dot doctor— expect score ≥90 - Run
dot verify --security— all checks pass - Verify commit signing:
cd ~/.dotfiles && git verify-commit HEAD - Confirm
~/.ssh/allowed_signerscontains your public key - Check that
~/.config/age/keys.txtpermissions are0600 - Run
dot mcp --strict— policy matches registry
Ongoing (monthly)
-
dot upgrade— pick up security patches -
dot verify --security— confirm no new leaks - Review
~/.local/state/dotfiles/mcp-violations.log— any unexpected entries? - Review recent attestations —
ls ~/.local/state/dotfiles/attestation/ | tail -10 - Rotate Age key if compromised or as part of scheduled rotation
Ongoing (quarterly)
- Rotate SSH signing key
- Audit
~/.ssh/allowed_signers— remove former team members - Review SOPS recipient list in
.sops.yaml - Run
dot chaosin a test container — verify heal works - Update pinned tool versions in
mise.toml - Run fleet attestation — confirm all hosts aligned
Incident Response
If a secret leak is detected:
-
Contain — remove from history, force-push
-
Rotate — change the leaked secret upstream (Stripe key, SSH key, etc.)
-
Audit — check who/what had access
-
Notify — inform affected parties if required
If a host is compromised:
- Revoke — remove the host's public key from
~/.ssh/allowed_signerson all other fleet hosts - Re-encrypt —
sops updatekeyswith the host excluded from recipients - Attest — run
dot fleet attestto verify revocation propagated - Wipe — if the host is recoverable,
rm -rf ~/.config/age ~/.dotfilesand reinstall
Gates Enforced by CI
Every PR to main must pass:
- SSH-signed commits
- Shellcheck zero warnings (severity=error)
- Gitleaks scan
- Detect-secrets baseline diff
- TruffleHog verified scan
- Copyright headers present
- 100% executable module mapping
- 100% measured line and branch coverage (current ratchet is documented in
docs/operations/COVERAGE.md) - Reliability tests (macOS + Ubuntu)
- Checkov infra scan
- Version sync (bumped across all files)