@sebastienrousseau/dotfiles 0.2.502 → 0.2.503
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +83 -9
- package/LICENSE +21 -1283
- package/README.md +5 -3
- package/docs/CONFIG_STRATEGY.md +124 -0
- package/docs/COPYRIGHT +1 -1
- package/docs/GOVERNANCE.md +98 -0
- package/docs/MAINTAINERS.md +41 -0
- package/docs/OPENCODE.md +127 -0
- package/docs/README.md +2 -0
- package/docs/STRUCTURE.md +102 -0
- package/docs/adr/ADR-011-nushell-tier3-keep.md +2 -2
- package/docs/architecture/AI_COST_OPTIMIZATION.md +143 -0
- package/docs/architecture/REPO_LAYOUT.md +8 -8
- package/docs/archive/MILESTONE_v0.2.493.md +1 -1
- package/docs/index.md +2 -2
- package/docs/interop/POWERSHELL.md +1 -1
- package/docs/manual/00-introduction.md +1 -1
- package/docs/manual/01-concepts/02-trust-model.md +1 -1
- package/docs/manual/03-reference/02-config-files.md +2 -2
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +72 -59
- package/docs/operations/CI_COMPOSITES.md +2 -2
- package/docs/operations/COMPLETIONS.md +2 -2
- package/docs/operations/COVERAGE.md +5 -5
- package/docs/operations/HARD_AUDIT_2026.md +11 -11
- package/docs/operations/MAINTENANCE.md +3 -3
- package/docs/operations/MANIFEST.md +127 -0
- package/docs/operations/RELEASE_PIPELINE.md +130 -0
- package/docs/operations/RFC_v0_2_503_reorganization.md +280 -0
- package/docs/operations/ROADMAP_2026.md +6 -6
- package/docs/operations/ROADMAP_V0_2_503.md +134 -0
- package/docs/operations/TESTING.md +17 -0
- package/docs/operations/TRACEABILITY.md +6 -3
- package/docs/operations/VERSION_SYNC.md +4 -4
- package/docs/reference/POWERSHELL_PARITY.md +8 -7
- package/docs/schema/dot-env-v1.json +110 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
- package/docs/security/CI_PINNING.md +17 -9
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
- package/docs/security/FUZZING.md +114 -0
- package/docs/security/INSTALL_VERIFICATION.md +2 -2
- package/docs/security/POLICY_RELEASES.md +2 -2
- package/docs/security/SCORECARD.md +58 -3
- package/docs/security/SHELL_EXEMPTIONS.md +4 -4
- package/docs/security/VERIFY_RELEASE.md +201 -0
- package/install.sh +27 -5
- package/package.json +1 -1
- package/scripts/README.md +123 -0
- package/scripts/ci/check-copyright-headers.sh +4 -93
- package/scripts/ci/check-shell-preamble.sh +4 -103
- package/scripts/ci/guard-gitleaks-checkout.sh +4 -54
- package/scripts/diagnostics/a2a-conformance.sh +4 -4
- package/scripts/diagnostics/alias-governance.sh +1 -1
- package/scripts/diagnostics/aliases-cheatsheet.sh +2 -2
- package/scripts/diagnostics/benchmark.sh +4 -4
- package/scripts/diagnostics/conflicts.sh +2 -2
- package/scripts/diagnostics/doctor-unified.sh +2 -2
- package/scripts/diagnostics/doctor.sh +10 -10
- package/scripts/diagnostics/drift-dashboard.sh +2 -2
- package/scripts/diagnostics/health.sh +4 -4
- package/scripts/diagnostics/history-analysis.sh +2 -2
- package/scripts/diagnostics/mcp-doctor.sh +10 -7
- package/scripts/diagnostics/perf.sh +4 -4
- package/scripts/diagnostics/scorecard.sh +4 -4
- package/scripts/diagnostics/security-score.sh +2 -2
- package/scripts/diagnostics/smoke-test.sh +2 -2
- package/scripts/diagnostics/snapshot.sh +2 -2
- package/scripts/diagnostics/verify.sh +4 -4
- package/scripts/diagnostics/version-locks.sh +2 -2
- package/scripts/diagnostics/workstation-attestation.sh +14 -14
- package/scripts/dot/commands/agent.sh +8 -0
- package/scripts/dot/commands/agents.sh +14 -4
- package/scripts/dot/commands/ai.sh +144 -25
- package/scripts/dot/commands/appearance.sh +2 -2
- package/scripts/dot/commands/core.sh +2 -2
- package/scripts/dot/commands/diagnostics.sh +5 -5
- package/scripts/dot/commands/env-emit.sh +202 -0
- package/scripts/dot/commands/fleet.sh +12 -11
- package/scripts/dot/commands/init.sh +4 -4
- package/scripts/dot/commands/lint.sh +9 -4
- package/scripts/dot/commands/manual.sh +3 -3
- package/scripts/dot/commands/meta.sh +12 -6
- package/scripts/dot/commands/patterns.sh +2 -2
- package/scripts/dot/commands/registry.sh +4 -4
- package/scripts/dot/commands/restore.sh +4 -4
- package/scripts/dot/commands/secrets.sh +4 -3
- package/scripts/dot/commands/security.sh +2 -2
- package/scripts/dot/commands/tools.sh +13 -3
- package/scripts/dot/powershell/Dot.psm1 +199 -0
- package/scripts/fonts/install-nerd-fonts.sh +2 -2
- package/scripts/git-hooks/pre-commit-audit.sh +2 -2
- package/scripts/git-hooks/pre-push +13 -0
- package/scripts/ops/ai-setup.sh +1 -1
- package/scripts/ops/bundle.sh +2 -2
- package/scripts/ops/chaos.sh +2 -2
- package/scripts/ops/chezmoi-apply.sh +4 -4
- package/scripts/ops/heal.sh +4 -4
- package/scripts/ops/post-apply-repair.sh +2 -2
- package/scripts/ops/prewarm.sh +2 -2
- package/scripts/ops/release.sh +4 -4
- package/scripts/ops/rollback.sh +4 -4
- package/scripts/ops/setup.sh +2 -2
- package/scripts/qa/check-version-consistency.sh +123 -0
- package/scripts/qa/coverage-baseline.sh +1 -1
- package/scripts/qa/docs-coverage.sh +2 -2
- package/scripts/qa/powershell-contract.ps1 +1 -1
- package/scripts/qa/scorecard-snapshot.sh +127 -0
- package/scripts/security/backup.sh +2 -2
- package/scripts/security/dns-doh.sh +4 -4
- package/scripts/security/encryption-check.sh +4 -4
- package/scripts/security/enforce-policies.sh +2 -2
- package/scripts/security/firewall.sh +4 -4
- package/scripts/security/lock-screen.sh +4 -4
- package/scripts/security/manage-secrets.sh +2 -2
- package/scripts/security/ssh-cert.sh +2 -2
- package/scripts/security/telemetry-kill.sh +4 -4
- package/scripts/security/usb-safety.sh +4 -4
- package/scripts/theme/extract-heic-frames.sh +114 -0
- package/scripts/theme/rebuild-themes.sh +8 -1
- package/scripts/theme/switch.sh +13 -6
- package/scripts/theme/wallpaper-sync.sh +297 -93
- package/scripts/tuning/linux.sh +2 -2
- package/scripts/tuning/macos.sh +2 -2
- package/scripts/version-sync.sh +55 -7
- package/dot_config/.module-manifest.json +0 -69
- package/dot_config/ai/identity.md +0 -23
- package/dot_config/ai/patterns/architect.md +0 -16
- package/dot_config/ai/patterns/hardener.md +0 -15
- package/dot_config/ai/patterns/refactor.md +0 -15
- package/dot_config/aider/aider.conf.yml +0 -32
- package/dot_config/alacritty/alacritty.toml.tmpl +0 -55
- package/dot_config/ansible/ansible.cfg +0 -11
- package/dot_config/atuin/config.toml.tmpl +0 -47
- package/dot_config/bat/config +0 -23
- package/dot_config/brave-flags.conf.tmpl +0 -7
- package/dot_config/btop/btop.conf +0 -16
- package/dot_config/btop/themes/tokyonight.theme +0 -34
- package/dot_config/bun/bunfig.toml.tmpl +0 -33
- package/dot_config/claude/mcp_servers.json +0 -20
- package/dot_config/containers/containers.conf +0 -14
- package/dot_config/curl/dot_curlrc +0 -18
- package/dot_config/dlv/config.yml +0 -39
- package/dot_config/docker/config.json +0 -15
- package/dot_config/dotfiles/agent-card.json +0 -29
- package/dot_config/dotfiles/agent-profiles.json +0 -92
- package/dot_config/dotfiles/boot/README.md +0 -13
- package/dot_config/dotfiles/grub/README.md +0 -13
- package/dot_config/dotfiles/lock/README.md +0 -13
- package/dot_config/dotfiles/mcp-lock.json +0 -33
- package/dot_config/dotfiles/mcp-policy.json +0 -52
- package/dot_config/dotfiles/mcp-registry.json +0 -47
- package/dot_config/dotfiles/model-registry.json +0 -20
- package/dot_config/dotfiles/policy-bundles.json +0 -38
- package/dot_config/dotfiles/prompt-registry.json +0 -16
- package/dot_config/dotfiles/versions.env +0 -18
- package/dot_config/duf/duf.conf +0 -6
- package/dot_config/duti/defaults.duti +0 -5
- package/dot_config/emoji/emoji.txt +0 -34
- package/dot_config/environment.d/50-ssh-agent.conf +0 -2
- package/dot_config/environment.d/90-wayland.conf +0 -19
- package/dot_config/fastfetch/config.jsonc +0 -28
- package/dot_config/firefox/user.js.tmpl +0 -58
- package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +0 -9
- package/dot_config/fish/completions/dot.fish.tmpl +0 -115
- package/dot_config/fish/conf.d/000-perf-cache.fish +0 -56
- package/dot_config/fish/conf.d/aliases.fish.tmpl +0 -77
- package/dot_config/fish/conf.d/direnv.fish +0 -4
- package/dot_config/fish/conf.d/env.fish.tmpl +0 -48
- package/dot_config/fish/conf.d/functions.fish.tmpl +0 -22
- package/dot_config/fish/conf.d/init.fish.tmpl +0 -172
- package/dot_config/fish/conf.d/mise-activate.fish +0 -5
- package/dot_config/fish/config.fish.tmpl +0 -44
- package/dot_config/fish/fish_plugins +0 -1
- package/dot_config/fish/functions/_.fish +0 -3
- package/dot_config/fish/functions/_cached_eval.fish +0 -131
- package/dot_config/fish/functions/_cached_eval_clear.fish +0 -17
- package/dot_config/fish/functions/als.fish +0 -46
- package/dot_config/fish/functions/bg-upgrade.fish +0 -7
- package/dot_config/fish/functions/c.fish +0 -3
- package/dot_config/fish/functions/cat.fish +0 -9
- package/dot_config/fish/functions/d.fish +0 -7
- package/dot_config/fish/functions/dot.fish +0 -34
- package/dot_config/fish/functions/h.fish +0 -3
- package/dot_config/fish/functions/l.fish +0 -7
- package/dot_config/fish/functions/la.fish +0 -7
- package/dot_config/fish/functions/ll.fish +0 -7
- package/dot_config/fish/functions/log_error.fish +0 -13
- package/dot_config/fish/functions/log_info.fish +0 -13
- package/dot_config/fish/functions/lr.fish +0 -7
- package/dot_config/fish/functions/lra.fish +0 -7
- package/dot_config/fish/functions/ls.fish +0 -7
- package/dot_config/fish/functions/lt.fish +0 -7
- package/dot_config/fish/functions/lta.fish +0 -7
- package/dot_config/fish/functions/notify-run.fish +0 -11
- package/dot_config/fish/functions/q.fish +0 -3
- package/dot_config/fish/functions/silent-run.fish +0 -7
- package/dot_config/fish/functions/yy.fish +0 -8
- package/dot_config/flatpak/flatpak.list +0 -4
- package/dot_config/fontconfig/fonts.conf.tmpl +0 -57
- package/dot_config/foot/foot.ini.tmpl +0 -33
- package/dot_config/fuzzel/fuzzel.ini.tmpl +0 -18
- package/dot_config/fzf/fzf.zsh +0 -48
- package/dot_config/gem/gemrc +0 -9
- package/dot_config/gh/config.yml +0 -12
- package/dot_config/ghostty/config.tmpl +0 -165
- package/dot_config/git/allowed_signers.tmpl +0 -18
- package/dot_config/git/attributes +0 -12
- package/dot_config/git/commit-template +0 -10
- package/dot_config/git/hooks/executable_commit-msg +0 -146
- package/dot_config/git/ignore +0 -27
- package/dot_config/gnupg/gpg-agent.conf +0 -11
- package/dot_config/go/golangci.yml +0 -118
- package/dot_config/go/gopls.json +0 -30
- package/dot_config/goose/config.yaml +0 -29
- package/dot_config/gtk-3.0/gtk.css.tmpl +0 -184
- package/dot_config/gtk-3.0/settings.ini.tmpl +0 -27
- package/dot_config/gtk-4.0/gtk.css.tmpl +0 -252
- package/dot_config/gtk-4.0/settings.ini.tmpl +0 -18
- package/dot_config/htop/htoprc +0 -20
- package/dot_config/inputrc +0 -2
- package/dot_config/ipython/profile_default/ipython_config.py +0 -19
- package/dot_config/just/justfile +0 -122
- package/dot_config/k9s/config.yaml +0 -65
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
- package/dot_config/kanshi/config.tmpl +0 -22
- package/dot_config/karabiner/karabiner.json +0 -14
- package/dot_config/kitty/kitty.conf.tmpl +0 -53
- package/dot_config/lazydocker/config.yml +0 -186
- package/dot_config/lazygit/config.yml +0 -35
- package/dot_config/mako/config +0 -47
- package/dot_config/mas/masapps.txt +0 -5
- package/dot_config/micro/settings.json +0 -3
- package/dot_config/mimeapps.list +0 -77
- package/dot_config/minikube/config.json +0 -13
- package/dot_config/mise/config.toml +0 -99
- package/dot_config/mongosh/mongoshrc.js +0 -68
- package/dot_config/mpv/input.conf +0 -47
- package/dot_config/mpv/mpv.conf +0 -47
- package/dot_config/mycli/myclirc +0 -67
- package/dot_config/nano/nanorc +0 -28
- package/dot_config/ncdu/config +0 -12
- package/dot_config/niri/config.kdl.tmpl +0 -327
- package/dot_config/nushell/aliases.nu +0 -18
- package/dot_config/nushell/cached_eval.nu +0 -80
- package/dot_config/nushell/completions.nu.tmpl +0 -52
- package/dot_config/nushell/config.nu.tmpl +0 -86
- package/dot_config/nushell/env.nu.tmpl +0 -102
- package/dot_config/nushell/functions.nu.tmpl +0 -17
- package/dot_config/nvim/init.lua +0 -18
- package/dot_config/nvim/lazy-lock.json +0 -58
- package/dot_config/nvim/lua/config/autocmds.lua +0 -107
- package/dot_config/nvim/lua/config/keymaps.lua +0 -92
- package/dot_config/nvim/lua/config/lazy.lua +0 -44
- package/dot_config/nvim/lua/config/options.lua +0 -49
- package/dot_config/nvim/lua/plugins/ai.lua +0 -75
- package/dot_config/nvim/lua/plugins/coding.lua +0 -216
- package/dot_config/nvim/lua/plugins/completion.lua +0 -60
- package/dot_config/nvim/lua/plugins/dap.lua +0 -412
- package/dot_config/nvim/lua/plugins/editor.lua +0 -55
- package/dot_config/nvim/lua/plugins/git.lua +0 -10
- package/dot_config/nvim/lua/plugins/lsp.lua +0 -156
- package/dot_config/nvim/lua/plugins/markdown.lua +0 -18
- package/dot_config/nvim/lua/plugins/rust.lua +0 -34
- package/dot_config/nvim/lua/plugins/sessions.lua +0 -33
- package/dot_config/nvim/lua/plugins/ui.lua +0 -509
- package/dot_config/paru/paru.conf +0 -10
- package/dot_config/pip/pip.conf.tmpl +0 -32
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +0 -81
- package/dot_config/pueue/pueue.yml +0 -34
- package/dot_config/pypoetry/config.toml +0 -6
- package/dot_config/pyrightconfig.json +0 -5
- package/dot_config/raycast/README.md +0 -13
- package/dot_config/redis/redisclirc +0 -41
- package/dot_config/ripgrep/ripgreprc +0 -21
- package/dot_config/shell/00-core-paths.sh.tmpl +0 -141
- package/dot_config/shell/05-core-safety.sh +0 -48
- package/dot_config/shell/10-secrets.sh +0 -41
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +0 -17
- package/dot_config/shell/40-ls-colors.sh +0 -49
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +0 -11
- package/dot_config/shell/50-logic-functions.sh.tmpl +0 -11
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +0 -65
- package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -121
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -55
- package/dot_config/shell/Brewfile +0 -207
- package/dot_config/shell/Brewfile.cask +0 -92
- package/dot_config/shell/Brewfile.cli +0 -127
- package/dot_config/shell/README.md +0 -284
- package/dot_config/shell/als_data.txt.tmpl +0 -65
- package/dot_config/shell/custom/auto_ls.zsh +0 -20
- package/dot_config/shell/custom/context_suggest.zsh +0 -68
- package/dot_config/shell/custom/error_analysis.zsh +0 -45
- package/dot_config/sops/dot_sops.yaml +0 -23
- package/dot_config/starship.toml.tmpl +0 -202
- package/dot_config/swaylock/config +0 -43
- package/dot_config/systemd/user/dotfiles-maintenance.service +0 -8
- package/dot_config/systemd/user/dotfiles-maintenance.timer +0 -11
- package/dot_config/systemd/user/pueued.service +0 -12
- package/dot_config/systemd/user/ssh-agent.service +0 -12
- package/dot_config/task/Taskfile.yml +0 -86
- package/dot_config/tflint/tflint.hcl +0 -9
- package/dot_config/tmux/tmux.conf.tmpl +0 -223
- package/dot_config/topgrade.toml.tmpl +0 -54
- package/dot_config/user-dirs.dirs +0 -10
- package/dot_config/vscode/extensions.txt +0 -11
- package/dot_config/vscode/settings.json.tmpl +0 -82
- package/dot_config/waybar/config.jsonc.tmpl +0 -90
- package/dot_config/waybar/style.css.tmpl +0 -211
- package/dot_config/wezterm/wezterm.lua.tmpl +0 -64
- package/dot_config/wget/wgetrc +0 -12
- package/dot_config/xdg-desktop-portal/niri-portals.conf +0 -5
- package/dot_config/yarn/yarnrc.yml +0 -36
- package/dot_config/yazi/keymap.toml +0 -67
- package/dot_config/yazi/theme.toml +0 -102
- package/dot_config/yazi/yazi.toml +0 -40
- package/dot_config/zathura/zathurarc +0 -52
- package/dot_config/zellij/config.kdl.tmpl +0 -79
- package/dot_config/zsh/dot_zprofile +0 -7
- package/dot_config/zsh/dot_zshenv +0 -5
- package/dot_config/zsh/dot_zshrc.tmpl +0 -688
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +0 -99
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -18
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
- package/dot_config/zsh/rc.d/20-zinit.zsh +0 -65
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -214
- package/dot_config/zsh/rc.d/40-bell.zsh +0 -20
- package/dot_config/zsh/rc.d/50-login-fortune.zsh +0 -9
- package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +0 -32
- package/dot_local/bin/executable_ai-update +0 -195
- package/dot_local/bin/executable_ai_core +0 -152
- package/dot_local/bin/executable_antigravity +0 -11
- package/dot_local/bin/executable_b64 +0 -84
- package/dot_local/bin/executable_bm +0 -79
- package/dot_local/bin/executable_cb +0 -39
- package/dot_local/bin/executable_dot +0 -636
- package/dot_local/bin/executable_dot-ai +0 -36
- package/dot_local/bin/executable_dot-bootstrap +0 -76
- package/dot_local/bin/executable_dot-launch-or-focus +0 -52
- package/dot_local/bin/executable_dot-load-benchmark +0 -31
- package/dot_local/bin/executable_dot-load-benchmark-pty +0 -77
- package/dot_local/bin/executable_dot-theme-sync +0 -952
- package/dot_local/bin/executable_dot_completion +0 -57
- package/dot_local/bin/executable_dtags +0 -28
- package/dot_local/bin/executable_epoch +0 -67
- package/dot_local/bin/executable_extract +0 -41
- package/dot_local/bin/executable_gbd +0 -52
- package/dot_local/bin/executable_gd +0 -42
- package/dot_local/bin/executable_git-ai-commit +0 -175
- package/dot_local/bin/executable_git-ai-diff +0 -169
- package/dot_local/bin/executable_gl +0 -101
- package/dot_local/bin/executable_hash +0 -161
- package/dot_local/bin/executable_hashsum +0 -160
- package/dot_local/bin/executable_hex +0 -115
- package/dot_local/bin/executable_jsonv +0 -78
- package/dot_local/bin/executable_jwt +0 -94
- package/dot_local/bin/executable_kill-port +0 -75
- package/dot_local/bin/executable_lorem +0 -118
- package/dot_local/bin/executable_mkscript +0 -35
- package/dot_local/bin/executable_monitor +0 -56
- package/dot_local/bin/executable_myip +0 -51
- package/dot_local/bin/executable_notify +0 -24
- package/dot_local/bin/executable_open +0 -38
- package/dot_local/bin/executable_pw +0 -27
- package/dot_local/bin/executable_rec-start +0 -46
- package/dot_local/bin/executable_rec-stop +0 -35
- package/dot_local/bin/executable_regex +0 -132
- package/dot_local/bin/executable_start-niri +0 -8
- package/dot_local/bin/executable_tmux-sessionizer +0 -314
- package/dot_local/bin/executable_tour +0 -177
- package/dot_local/bin/executable_up +0 -23
- package/dot_local/bin/executable_update +0 -142
- package/dot_local/bin/executable_uuid +0 -87
- package/dot_local/bin/executable_win +0 -32
- package/dot_local/bin/executable_yamlv +0 -57
- package/dot_local/share/bash-completion/completions/dot +0 -72
- package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
- package/dot_local/share/man/man1/dot.1 +0 -149
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +0 -64
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +0 -18
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +0 -13
- package/dot_local/share/wayland-sessions/niri.desktop.tmpl +0 -6
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/dot_local/share/zsh/completions/_dot +0 -287
- package/scripts/ci/check-dangerous-chmod.sh +0 -19
- package/scripts/ci/check-deps-dev.sh +0 -236
- package/scripts/ci/check-insecure-tls.sh +0 -61
- package/scripts/ci/check-regression-traceability.sh +0 -67
- package/scripts/ci/dot-cli-startup-bench.sh +0 -126
- package/scripts/ci/install-chezmoi-verified.sh +0 -67
- package/scripts/ci/lint-reusable-pins.sh +0 -78
- package/scripts/ci/run-coverage.sh +0 -451
- package/scripts/ci/validate-chezmoidata.sh +0 -25
- package/scripts/ci/validate-ci-config.sh +0 -224
- package/scripts/ci/windows-smoke-test.ps1 +0 -136
- package/scripts/docs/build-manual.sh +0 -883
- package/scripts/docs/check-manual.sh +0 -213
- package/scripts/dot/lib/bento.sh +0 -50
- package/scripts/dot/lib/log.sh +0 -200
- package/scripts/dot/lib/platform.sh +0 -112
- package/scripts/dot/lib/ui.sh +0 -650
- package/scripts/dot/lib/utils.sh +0 -377
- package/scripts/maintenance/check-updates.sh +0 -131
- package/scripts/release/package-policy-bundles.sh +0 -125
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AI Cost Optimization"
|
|
3
|
+
date: 2026-05-24
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AI Cost Optimization
|
|
7
|
+
|
|
8
|
+
This dotfiles framework ships an opinionated AI-cost layer designed to
|
|
9
|
+
keep token spend predictable and low while still using the smartest
|
|
10
|
+
model for orchestration. Two ideas drive it:
|
|
11
|
+
|
|
12
|
+
1. **Delegate the grunt work.** Have the expensive smart model
|
|
13
|
+
orchestrate, and a cheap fast model do the file reads, edits, and
|
|
14
|
+
verification. The smart model sees one tool call and the final
|
|
15
|
+
`git diff` instead of every intermediate read.
|
|
16
|
+
2. **Account every call.** Every invocation through `dot ai <provider>`
|
|
17
|
+
appends a JSONL entry so you can see spend across all providers in
|
|
18
|
+
one report, not just per-tool dashboards.
|
|
19
|
+
|
|
20
|
+
## Quick reference
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
dot ai delegate "rename every UserService method that starts with get to fetch"
|
|
24
|
+
dot ai cost # all-time overview
|
|
25
|
+
dot ai cost --since 7 # last 7 days
|
|
26
|
+
dot ai cost --fails # only failures + breakdown by failure type
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Inside Claude Code: `/vibe`, `/vibe-report`, `/vibeon`, `/vibeoff`,
|
|
30
|
+
`/vibestatus`, `/vibe-model-pick`, `/vibe-model-clear`.
|
|
31
|
+
|
|
32
|
+
## The delegator pattern
|
|
33
|
+
|
|
34
|
+
The pattern comes from [pcx-wave/vibe-skill][vibe-skill]. Mistral Vibe
|
|
35
|
+
is the default delegate but the same wrapper accepts any model Vibe
|
|
36
|
+
knows about (DeepSeek V4 Flash, Gemini Flash, etc.).
|
|
37
|
+
|
|
38
|
+
[vibe-skill]: https://github.com/pcx-wave/vibe-skill
|
|
39
|
+
|
|
40
|
+
Cost comparison (May 2026 list prices, blended 85 in / 15 out typical
|
|
41
|
+
of coding tasks):
|
|
42
|
+
|
|
43
|
+
| Task | Claude Sonnet 4.6 ($3 / $15) | Mistral Medium 3.5 ($1.50 / $7.50) | DeepSeek V4 Flash ($0.14 / $0.28) |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| 1-file tweak (800 tok) | ~$0.004 | ~$0.002 | ~$0.0001 |
|
|
46
|
+
| 6-read task (4,800 tok) | ~$0.023 | ~$0.012 | ~$0.0008 |
|
|
47
|
+
| Multi-file refactor (12,000 tok) | ~$0.058 | ~$0.029 | ~$0.002 |
|
|
48
|
+
|
|
49
|
+
Real-world stats from 254 vibe-skill runs over 10 days (May 2026):
|
|
50
|
+
|
|
51
|
+
| | Amount |
|
|
52
|
+
|---|---|
|
|
53
|
+
| Actually paid (Mistral Pro prorated + DeepSeek pay-as-you-go) | **$10.35** |
|
|
54
|
+
| Same workload pay-as-you-go via Mistral API | $46.61 |
|
|
55
|
+
| Same workload on Claude Sonnet 4.6 | $179.91 |
|
|
56
|
+
| Saved vs Claude | **$169.56 (17.4× cheaper)** |
|
|
57
|
+
|
|
58
|
+
Claude itself contributes ~500-1500 tokens per delegation as
|
|
59
|
+
orchestration overhead. Even with that overhead the savings dominate
|
|
60
|
+
for anything beyond a one-line edit.
|
|
61
|
+
|
|
62
|
+
## Pieces deployed by this repo
|
|
63
|
+
|
|
64
|
+
| Component | Source path | Deployed to | Role |
|
|
65
|
+
|---|---|---|---|
|
|
66
|
+
| `vibe` skill | `defaults/dot_claude/skills/vibe/` | `~/.claude/skills/vibe/` | Claude Code slash commands (`/vibe`, `/vibe-report`, etc.) |
|
|
67
|
+
| Delegator binary | `defaults/dot_claude/skills/vibe/tools/executable_vibe-delegate` | `~/.claude/skills/vibe/tools/vibe-delegate` | Runs the cheap-model task in a pseudo-TTY, parses streaming JSON, syntax-checks changes, logs the run |
|
|
68
|
+
| Reporter | `defaults/dot_claude/skills/vibe/tools/executable_delegate-report` | `~/.claude/skills/vibe/tools/delegate-report` | Reads the JSONL log, prints overview / by-model / by-project / failure tables |
|
|
69
|
+
| CLI shim | `scripts/dot/commands/ai.sh` | `bin/dot ai delegate` / `bin/dot ai cost` | Same delegator + reporter, callable from the terminal without Claude Code |
|
|
70
|
+
| Unified log hook | `_ai_log_run` in `ai.sh` | runs inside `run_ai_with_context` | Appends one JSONL line per `dot ai <provider>` invocation |
|
|
71
|
+
| Log file | runtime-managed | `~/.local/share/delegate-runs.jsonl` | One line per run; `dot ai cost` reads it |
|
|
72
|
+
|
|
73
|
+
## State files
|
|
74
|
+
|
|
75
|
+
| File | Owner | Purpose |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `~/.local/share/delegate-runs.jsonl` | runtime | One JSONL entry per AI invocation (vibe + every other provider) |
|
|
78
|
+
| `~/.local/share/vibe-auto.flag` | `/vibeon` / `/vibeoff` | When present, Claude auto-delegates coding tasks to Vibe |
|
|
79
|
+
| `~/.local/share/vibe-model.flag` | `/vibe-model-pick` | Override the Vibe model for the next runs; cleared by `/vibe-model-clear` |
|
|
80
|
+
| `~/.vibe/config.toml` | user | Vibe's own provider / model configuration |
|
|
81
|
+
|
|
82
|
+
## Reading the report
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
DELEGATE REPORT 2026-05-17 → 2026-05-24
|
|
86
|
+
Runs : 27 (ok: 25, failed: 2, timeout: 0)
|
|
87
|
+
Success rate : 92%
|
|
88
|
+
Avg duration : 18.4s
|
|
89
|
+
Tokens total : 4,231,082
|
|
90
|
+
Delegate cost : $1.4711
|
|
91
|
+
Claude equiv : $14.8294
|
|
92
|
+
Saved : $13.3583 (90% cheaper than Claude)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
`Claude equiv` is what the same workload would have cost on Claude
|
|
96
|
+
Sonnet 4.6 ($3 / $15 per M tokens, blended at the same in/out ratio).
|
|
97
|
+
The savings line is the difference. Failure types are broken out per
|
|
98
|
+
model so you can see which delegate is most reliable for your repo.
|
|
99
|
+
|
|
100
|
+
## Provider coverage
|
|
101
|
+
|
|
102
|
+
Every provider exposed via `dot ai <provider>` is logged best-effort.
|
|
103
|
+
For providers that don't surface token counts in their CLI output, the
|
|
104
|
+
report still tracks: timestamp, project, exit code, duration, prompt
|
|
105
|
+
word count. Token / cost fields stay zero for those providers — the
|
|
106
|
+
report tolerates the gap and aggregates by `model` regardless.
|
|
107
|
+
|
|
108
|
+
Providers tracked today:
|
|
109
|
+
|
|
110
|
+
| Provider | Binary | Logged | Tokens surfaced? |
|
|
111
|
+
|---|---|---|---|
|
|
112
|
+
| Claude Code | `claude` | yes | no (CLI doesn't expose) |
|
|
113
|
+
| Codex | `codex` | yes | no |
|
|
114
|
+
| Copilot CLI | `copilot` | yes | no |
|
|
115
|
+
| Gemini CLI | `gemini` | yes | no |
|
|
116
|
+
| Goose | `goose` | yes | no |
|
|
117
|
+
| Aider | `aider` | yes | no |
|
|
118
|
+
| OpenCode | `opencode` | yes | no |
|
|
119
|
+
| Autohand | `autohand` | yes | no |
|
|
120
|
+
| Mistral Vibe | `vibe` | yes | **yes** (via delegator) |
|
|
121
|
+
| Qwen | `qwen` | yes | no |
|
|
122
|
+
| ZAI | `zai` | yes | no |
|
|
123
|
+
| Shell-GPT | `sgpt` | yes | no |
|
|
124
|
+
| Ollama (local) | `ollama` | yes | n/a (no cost) |
|
|
125
|
+
| Kiro CLI | `kiro-cli` | yes | no |
|
|
126
|
+
|
|
127
|
+
## Future work
|
|
128
|
+
|
|
129
|
+
Not implemented yet, ordered roughly by likely impact:
|
|
130
|
+
|
|
131
|
+
1. **Provider-level budget guard.** `dot ai budget --set 50/month`
|
|
132
|
+
would warn at 80% and refuse new requests at 100% (overridable).
|
|
133
|
+
Needs per-provider cost estimation hooks beyond what each CLI
|
|
134
|
+
surfaces today.
|
|
135
|
+
2. **Prompt response cache.** Many coding-helper queries are
|
|
136
|
+
deterministic ("syntax for X in Y"). A local cache keyed on prompt
|
|
137
|
+
hash + provider could short-circuit repeat queries.
|
|
138
|
+
3. **Per-task-class model routing.** `dot ai delegate --class refactor`
|
|
139
|
+
would pick the cheapest model that meets the quality bar for the
|
|
140
|
+
task class. Today the user picks the model.
|
|
141
|
+
4. **Rate-limit awareness.** Track API rate limits from response
|
|
142
|
+
headers, queue requests, surface a `dot ai cost --limits` view that
|
|
143
|
+
shows time-to-reset for every provider with an active limit.
|
|
@@ -14,7 +14,7 @@ For naming conventions (file prefixes, run-script numbering tiers), see
|
|
|
14
14
|
[`../NAMING_CONVENTIONS.md`](../NAMING_CONVENTIONS.md). For the broader
|
|
15
15
|
architectural rationale (philosophy, startup model, flake strategy), see
|
|
16
16
|
[`ARCHITECTURE.md`](ARCHITECTURE.md). For the configuration-management
|
|
17
|
-
strategy at a higher level, see [
|
|
17
|
+
strategy at a higher level, see [`../CONFIG_STRATEGY.md`](../CONFIG_STRATEGY.md).
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -85,7 +85,7 @@ exist on purpose and don't overlap:
|
|
|
85
85
|
|-------------------------------|-----------------------|------------------------------------------------------------------|-------------------------------|
|
|
86
86
|
| `dot_claude/CLAUDE.md` | `~/.claude/CLAUDE.md` | Claude Code, in **any** cwd on this machine | Personal, cross-project |
|
|
87
87
|
| `CLAUDE.md` (repo root) | Not deployed | Claude Code, when cwd is **this** repo | Repo-scoped guidance |
|
|
88
|
-
| `OPENCODE.md`
|
|
88
|
+
| `docs/OPENCODE.md` | Not deployed | OpenCode CLI, when cwd is **this** repo | Repo-scoped guidance (mirror) |
|
|
89
89
|
| `.claude/settings.local.json` | Not deployed, **not tracked** | Claude Code | Per-machine permission allowlist |
|
|
90
90
|
|
|
91
91
|
Each of the three tracked files carries a header comment explaining its
|
|
@@ -143,11 +143,11 @@ the repo itself.
|
|
|
143
143
|
|
|
144
144
|
| Subdir | Purpose |
|
|
145
145
|
|-------------------------------------------|-----------------------------------------------------------------|
|
|
146
|
-
| `
|
|
146
|
+
| `tools/ci/` | CI helpers (`check-copyright-headers.sh`, `install-chezmoi-verified.sh`, `validate-ci-config.sh`) |
|
|
147
147
|
| `scripts/dot/commands/` | Subcommand implementations for the `dot` CLI |
|
|
148
|
-
| `
|
|
148
|
+
| `tools/docs/` | Manual build pipeline (`build-manual.sh`, `check-manual.sh`) |
|
|
149
149
|
| `scripts/theme/` | K-Means CIELAB theme engine + HEIC merge/convert |
|
|
150
|
-
| `scripts/ops/`, `
|
|
150
|
+
| `scripts/ops/`, `tools/maintenance/`, `tools/release/` | Operator tooling |
|
|
151
151
|
| `scripts/diagnostics/`, `scripts/qa/`, `scripts/security/`, `scripts/secrets/` | Domain-scoped scripts |
|
|
152
152
|
| `scripts/fonts/`, `scripts/demo/`, `scripts/git-hooks/`, `scripts/tools/`, `scripts/tuning/`, `scripts/lib/` | Supporting scripts |
|
|
153
153
|
| `scripts/uninstall.sh`, `scripts/version-sync.sh` | Top-level ops entrypoints |
|
|
@@ -199,7 +199,7 @@ braces.
|
|
|
199
199
|
| `templates/chezmoi-data/`, `templates/projects/` | Starter scaffolding for new machines / new projects |
|
|
200
200
|
| `examples/` | 14 standalone demo scripts used by the manual and tutorials |
|
|
201
201
|
| `CHANGELOG.md`, `LICENSE`, `README.md` | Standard |
|
|
202
|
-
| `CONFIG_STRATEGY.md`
|
|
202
|
+
| `docs/CONFIG_STRATEGY.md` | High-level "how configuration management works here" overview |
|
|
203
203
|
| `.gitattributes`, `.gitignore`, `.gitleaksignore`, `.editorconfig`, `.secrets.baseline`, `.sops.yaml`, `.luacheckrc` | Repo-level tool configs |
|
|
204
204
|
| `.pre-commit-config.yaml` → `config/pre-commit-config.yaml` | Symlink so `pre-commit` finds the canonical config |
|
|
205
205
|
|
|
@@ -213,7 +213,7 @@ version control. If one of them ever shows up in `git status`, check the
|
|
|
213
213
|
|
|
214
214
|
| Path | Source |
|
|
215
215
|
|--------------------------|------------------------------------------------------------------------------|
|
|
216
|
-
| `_build/` | Output of `
|
|
216
|
+
| `_build/` | Output of `tools/docs/build-manual.sh` |
|
|
217
217
|
| `.pnpm-store/` | pnpm's content-addressable store (should never appear here) |
|
|
218
218
|
| `.claude/` | Claude Code per-machine state (`settings.local.json` permission allowlists) |
|
|
219
219
|
| `node_modules/` | Node dependency trees from repo-local scripts |
|
|
@@ -229,7 +229,7 @@ A quick decision tree for common cases:
|
|
|
229
229
|
|
|
230
230
|
- **New app config that lives under `~/.config/<app>/`** → `dot_config/<app>/` (see `docs/NAMING_CONVENTIONS.md` → "Adding New Modules").
|
|
231
231
|
- **New user-facing CLI script** → `dot_local/bin/executable_<name>`.
|
|
232
|
-
- **New `dot` subcommand** → implementation in `scripts/dot/commands/<name>.sh`, routing in `
|
|
232
|
+
- **New `dot` subcommand** → implementation in `scripts/dot/commands/<name>.sh`, routing in `bin/dot`.
|
|
233
233
|
- **New repo-only automation** (CI helper, maintenance task, release step) → `scripts/<domain>/<name>.sh`.
|
|
234
234
|
- **New test** → `tests/unit/<domain>/test_<feature>.sh` (follow `test_{domain}_{feature}.sh` naming).
|
|
235
235
|
- **New doc** → pick the narrowest of `docs/architecture/`, `docs/reference/`, `docs/guides/`, `docs/operations/`, `docs/security/`.
|
|
@@ -16,7 +16,7 @@ This milestone keeps scope intentionally small and operationally focused.
|
|
|
16
16
|
|
|
17
17
|
- [x] Add `dot verify` command routing in diagnostics module.
|
|
18
18
|
- `scripts/dot/commands/diagnostics.sh`
|
|
19
|
-
- `
|
|
19
|
+
- `bin/dot`
|
|
20
20
|
- [x] Add verification runner script.
|
|
21
21
|
- `scripts/diagnostics/verify.sh`
|
|
22
22
|
- Runs:
|
package/docs/index.md
CHANGED
|
@@ -7,7 +7,7 @@ render_with_liquid: false
|
|
|
7
7
|
Cross-platform, signed, local-first dotfiles for macOS, Linux, and WSL.
|
|
8
8
|
|
|
9
9
|
[](https://github.com/sebastienrousseau/dotfiles/actions)
|
|
10
|
-
[](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.503)
|
|
11
11
|
[](https://github.com/sebastienrousseau/dotfiles/releases)
|
|
12
12
|
|
|
13
13
|
This site is published from the `docs/` directory on `master` and tracks the current workstation baseline, operational guidance, and security material for the repository.
|
|
@@ -38,6 +38,6 @@ This site is published from the `docs/` directory on `master` and tracks the cur
|
|
|
38
38
|
|
|
39
39
|
## Current Release
|
|
40
40
|
|
|
41
|
-
- Current tagged release: [`v0.2.
|
|
41
|
+
- Current tagged release: [`v0.2.503`](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.503)
|
|
42
42
|
- Latest release feed: [GitHub releases](https://github.com/sebastienrousseau/dotfiles/releases/latest)
|
|
43
43
|
- Source repository: [sebastienrousseau/dotfiles](https://github.com/sebastienrousseau/dotfiles)
|
|
@@ -13,7 +13,7 @@ and what specifically is verified. Closes the docs slice of
|
|
|
13
13
|
|
|
14
14
|
| File | Role |
|
|
15
15
|
|---|---|
|
|
16
|
-
| [`dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl`](../../dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl) | The dotfiles PowerShell profile. Deployed to `$PROFILE` (resolves to `~/.config/powershell/Microsoft.PowerShell_profile.ps1` on Linux/macOS; `Documents\PowerShell\Microsoft.PowerShell_profile.ps1` on Windows). |
|
|
16
|
+
| [`dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl`](../../defaults/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl) | The dotfiles PowerShell profile. Deployed to `$PROFILE` (resolves to `~/.config/powershell/Microsoft.PowerShell_profile.ps1` on Linux/macOS; `Documents\PowerShell\Microsoft.PowerShell_profile.ps1` on Windows). |
|
|
17
17
|
| [`scripts/qa/powershell-contract.ps1`](../../scripts/qa/powershell-contract.ps1) | The runtime contract. Renders the template, dot-sources it, asserts required function shims exist, runs PSScriptAnalyzer. |
|
|
18
18
|
| [`tests/unit/install/test_powershell_profile_syntax.sh`](../../tests/unit/install/test_powershell_profile_syntax.sh) | Static-syntax test runnable on Linux/macOS via `pwsh` when present; falls back to brace-balance + textual invariants when not. |
|
|
19
19
|
|
|
@@ -4,7 +4,7 @@ render_with_liquid: false
|
|
|
4
4
|
|
|
5
5
|
# Introduction
|
|
6
6
|
|
|
7
|
-
This manual describes `.dotfiles` v0.2.
|
|
7
|
+
This manual describes `.dotfiles` v0.2.503 — a trusted agent workstation baseline for macOS, Linux, and WSL.
|
|
8
8
|
|
|
9
9
|
The repository is more than a personal dotfiles collection. It ships as workstation infrastructure: signed, attested, multi-platform, AI-aware, and self-healing. Chezmoi handles templating and platform differences. The `dot` CLI sits on top and coordinates lifecycle operations.
|
|
10
10
|
|
|
@@ -32,7 +32,7 @@ The trust anchor is the signer's public key published in `~/.ssh/allowed_signers
|
|
|
32
32
|
|
|
33
33
|
### Verified Chezmoi Installer
|
|
34
34
|
|
|
35
|
-
The `install.sh` script prefers `
|
|
35
|
+
The `install.sh` script prefers `tools/ci/install-chezmoi-verified.sh`, which:
|
|
36
36
|
|
|
37
37
|
1. Downloads chezmoi from the upstream release URL
|
|
38
38
|
2. Verifies the SHA256 checksum against a hardcoded, version-pinned value
|
|
@@ -33,7 +33,7 @@ Every config file read or written by `.dotfiles`, with its schema and purpose.
|
|
|
33
33
|
|
|
34
34
|
```toml
|
|
35
35
|
# Version — bumped by version-sync.sh at release time
|
|
36
|
-
dotfiles_version = "0.2.
|
|
36
|
+
dotfiles_version = "0.2.503"
|
|
37
37
|
|
|
38
38
|
# Machine preset — override in ~/.config/chezmoi/chezmoi.toml per host
|
|
39
39
|
machine = ""
|
|
@@ -219,7 +219,7 @@ Agent Card (MCP A2A spec):
|
|
|
219
219
|
```json
|
|
220
220
|
{
|
|
221
221
|
"name": "dotfiles-agent",
|
|
222
|
-
"version": "0.2.
|
|
222
|
+
"version": "0.2.503",
|
|
223
223
|
"capabilities": ["chezmoi.apply", "theme.switch", "secrets.decrypt"],
|
|
224
224
|
"policy_hash": "0x7f2a..."
|
|
225
225
|
}
|
package/docs/manual/_toc.yml
CHANGED
|
@@ -4,63 +4,76 @@ render_with_liquid: false
|
|
|
4
4
|
|
|
5
5
|
# Command Index
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Generated from `dot help all`. To refresh after adding or renaming
|
|
8
|
+
a subcommand, run `tools/docs/generate-command-index.sh`. The CI
|
|
9
|
+
job `lint/command-index` fails when this file is stale.
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
11
|
+
| Command | Summary |
|
|
12
|
+
|---------|---------|
|
|
13
|
+
| `dot add` | Add a file to chezmoi source |
|
|
14
|
+
| `dot agent` | Profile-aware execution, agent card, a2a-card, session log, checkpoints, and conformance |
|
|
15
|
+
| `dot ai` | AI CLI status, delegate, and cost report |
|
|
16
|
+
| `dot ai-query` | Context-aware RAG query over your dotfiles |
|
|
17
|
+
| `dot ai-setup` | Interactive setup for all AI CLI tools |
|
|
18
|
+
| `dot aider` | Aider with context patterns |
|
|
19
|
+
| `dot attest` | Export workstation attestation evidence (--json |
|
|
20
|
+
| `dot backup` | Create a compressed backup of your home |
|
|
21
|
+
| `dot bundle` | Create offline archive of dotfiles environment |
|
|
22
|
+
| `dot cache-refresh` | Regenerate shell caches for ultra-fast startup |
|
|
23
|
+
| `dot cd` | Print source directory path (use: cd $(dot cd)) |
|
|
24
|
+
| `dot chaos` | Simulate config corruption to test self-healing |
|
|
25
|
+
| `dot cl` | Claude CLI with context patterns |
|
|
26
|
+
| `dot commit` | AI-powered conventional commit |
|
|
27
|
+
| `dot copilot` | GitHub Copilot CLI with context patterns |
|
|
28
|
+
| `dot diff` | Show chezmoi diff with exclusions |
|
|
29
|
+
| `dot dns-doh` | Enable DNS-over-HTTPS [macOS,Linux] |
|
|
30
|
+
| `dot docs` | Show repo README |
|
|
31
|
+
| `dot doctor` | Deep audit: tools, paths, portability, AI analysis (--ai |
|
|
32
|
+
| `dot edit` | Open chezmoi source in $EDITOR |
|
|
33
|
+
| `dot encrypt-check` | Check disk encryption status |
|
|
34
|
+
| `dot env` | Tool versions (mise) |
|
|
35
|
+
| `dot firewall` | Apply firewall hardening [macOS,Linux] |
|
|
36
|
+
| `dot fleet` | Show fleet node status, drift, and namespace (--json for machine output) |
|
|
37
|
+
| `dot fleet` | drift Check for configuration drift across managed files |
|
|
38
|
+
| `dot fleet` | events Show recent fleet events from local event log |
|
|
39
|
+
| `dot fleet` | namespace Show or set the active namespace for multi-tenant isolation |
|
|
40
|
+
| `dot fonts` | Install Nerd Fonts (JetBrainsMono by default) |
|
|
41
|
+
| `dot gemini` | Gemini CLI with context patterns |
|
|
42
|
+
| `dot help` | Show this help message |
|
|
43
|
+
| `dot history` | Shell history analysis |
|
|
44
|
+
| `dot keys` | Keybindings (sign-check: verify git signing) |
|
|
45
|
+
| `dot kiro` | Kiro CLI with context patterns |
|
|
46
|
+
| `dot learn` | Start the interactive tour of your new tools |
|
|
47
|
+
| `dot lint` | Lint shell scripts (--fix |
|
|
48
|
+
| `dot load-bench` | Measure time to heavy-layer readiness |
|
|
49
|
+
| `dot lock-screen` | Enforce lock screen idle settings [Linux] |
|
|
50
|
+
| `dot mcp` | Inspect MCP policy, supply chain, and registry |
|
|
51
|
+
| `dot metrics` | Show recent observability metrics (JSONL) |
|
|
52
|
+
| `dot mode` | Set or inspect agent operating profiles (ask/plan/apply/audit) |
|
|
53
|
+
| `dot new` | Create a new project from a template |
|
|
54
|
+
| `dot ollama` | Ollama with context patterns |
|
|
55
|
+
| `dot opencode` | OpenCode with context patterns |
|
|
56
|
+
| `dot packages` | List installed packages and package managers |
|
|
57
|
+
| `dot perf` | Show performance mode and quick timing |
|
|
58
|
+
| `dot profile` | Show/switch configuration profile |
|
|
59
|
+
| `dot rollback` | Rollback dotfiles to a previous state |
|
|
60
|
+
| `dot sandbox` | Launch a safe sandbox preview (Docker/Podman) |
|
|
61
|
+
| `dot score` | System health and security scorecard |
|
|
62
|
+
| `dot search` | Find commands by keyword |
|
|
63
|
+
| `dot secrets` | Edit encrypted secrets (age) |
|
|
64
|
+
| `dot secrets-create` | Create an encrypted secrets file |
|
|
65
|
+
| `dot secrets-init` | Initialize age key for secrets |
|
|
66
|
+
| `dot sgpt` | Shell-GPT with context patterns |
|
|
67
|
+
| `dot snapshot` | Capture baseline system snapshot |
|
|
68
|
+
| `dot ssh-cert` | Manage short-lived SSH certificates |
|
|
69
|
+
| `dot ssh-key` | Encrypt an SSH key locally with age |
|
|
70
|
+
| `dot status` | Show configuration drift (chezmoi status) |
|
|
71
|
+
| `dot sync` | Apply dotfiles (alias for apply; --pull to fetch, --check to preview) |
|
|
72
|
+
| `dot telemetry` | Disable OS telemetry [macOS,Linux] |
|
|
73
|
+
| `dot theme` | Switch terminal theme (dark/light) |
|
|
74
|
+
| `dot tools` | Show or install nix packages |
|
|
75
|
+
| `dot tune` | Apply OS tuning (opt-in) [macOS,Linux] |
|
|
76
|
+
| `dot upgrade` | Update system toolchains, plugins, and dotfiles |
|
|
77
|
+
| `dot usb-safety` | Disable automount for removable media [Linux] |
|
|
78
|
+
| `dot version` | Show version information. |
|
|
79
|
+
| `dot wallpaper` | Apply a wallpaper from your library [macOS,Linux] |
|
|
@@ -17,7 +17,7 @@ to bump pins. Managed under
|
|
|
17
17
|
Path: `.github/actions/setup-chezmoi/action.yml`
|
|
18
18
|
|
|
19
19
|
Installs the pinned `chezmoi` binary (using the SHA256-verified
|
|
20
|
-
installer at `
|
|
20
|
+
installer at `tools/ci/install-chezmoi-verified.sh` when the repo is
|
|
21
21
|
checked out, falling back to `get.chezmoi.io` otherwise), caches the
|
|
22
22
|
result, and appends the bin-dir to `$GITHUB_PATH`.
|
|
23
23
|
|
|
@@ -151,6 +151,6 @@ bump on a weekly schedule.
|
|
|
151
151
|
|
|
152
152
|
- `.github/actions/setup-chezmoi/action.yml`
|
|
153
153
|
- `.github/actions/setup-mise/action.yml`
|
|
154
|
-
- `
|
|
154
|
+
- `tools/ci/install-chezmoi-verified.sh` — the SHA-pinned installer
|
|
155
155
|
the chezmoi composite prefers when available.
|
|
156
156
|
- Issue [#879](https://github.com/sebastienrousseau/dotfiles/issues/879).
|
|
@@ -116,8 +116,8 @@ their lifecycle.
|
|
|
116
116
|
|
|
117
117
|
## References
|
|
118
118
|
|
|
119
|
-
- [`dot_config/zsh/rc.d/30-options.zsh.tmpl`](../../dot_config/zsh/rc.d/30-options.zsh.tmpl) — the deferred-compinit logic.
|
|
120
|
-
- [`run_onchange_after_zcompile-completions.sh.tmpl`](../../run_onchange_after_zcompile-completions.sh.tmpl) — the apply-time precompile hook.
|
|
119
|
+
- [`dot_config/zsh/rc.d/30-options.zsh.tmpl`](../../defaults/dot_config/zsh/rc.d/30-options.zsh.tmpl) — the deferred-compinit logic.
|
|
120
|
+
- [`run_onchange_after_zcompile-completions.sh.tmpl`](../../defaults/run_onchange_after_zcompile-completions.sh.tmpl) — the apply-time precompile hook.
|
|
121
121
|
- [`zsh` completion docs](https://zsh.sourceforge.io/Doc/Release/Completion-System.html).
|
|
122
122
|
- ADR-002 (Shell Performance Optimization).
|
|
123
123
|
- Issue [#864](https://github.com/sebastienrousseau/dotfiles/issues/864).
|
|
@@ -44,7 +44,7 @@ matches and emits standard `lcov.info` that Codecov ingests natively.
|
|
|
44
44
|
| Surface | What runs |
|
|
45
45
|
|---|---|
|
|
46
46
|
| **PR + push to master** | `.github/workflows/coverage.yml` → `Coverage / kcov` job → uploads lcov.info to Codecov and fails the build below `MIN_COVERAGE_PCT` (currently `0`, ratcheted up each slice). |
|
|
47
|
-
| **Local dev** | `bash
|
|
47
|
+
| **Local dev** | `bash tools/ci/run-coverage.sh` — works on Linux + macOS (xtrace is a bash primitive, no platform tools needed). |
|
|
48
48
|
| **macOS dev** | Supported. xtrace-based instrumentation runs on macOS bash 3.2+ and Homebrew bash 5.x. |
|
|
49
49
|
|
|
50
50
|
## The current floor
|
|
@@ -87,7 +87,7 @@ not aspirational:
|
|
|
87
87
|
aggregator level.
|
|
88
88
|
- **Animated demo helpers** — same as interactive UIs.
|
|
89
89
|
|
|
90
|
-
`
|
|
90
|
+
`tools/ci/run-coverage.sh` has a `SKIP_PATHS` set that removes
|
|
91
91
|
genuinely-untestable scripts from the lcov denominator. Within the
|
|
92
92
|
files that remain, individual mutation-only function bodies are
|
|
93
93
|
fenced with `# LCOV_EXCL_START` / `# LCOV_EXCL_STOP` and a one-line
|
|
@@ -101,7 +101,7 @@ The honest floor is the achievable one.
|
|
|
101
101
|
## Running locally
|
|
102
102
|
|
|
103
103
|
```bash
|
|
104
|
-
bash
|
|
104
|
+
bash tools/ci/run-coverage.sh # Linux or macOS
|
|
105
105
|
|
|
106
106
|
# Output:
|
|
107
107
|
# coverage/traces/<file>.trace — per-test xtrace logs
|
|
@@ -159,7 +159,7 @@ threshold to get two independent signals.
|
|
|
159
159
|
|
|
160
160
|
## Excluded paths
|
|
161
161
|
|
|
162
|
-
`
|
|
162
|
+
`tools/ci/run-coverage.sh` excludes:
|
|
163
163
|
|
|
164
164
|
- `tests/**` itself (don't measure coverage of the tests).
|
|
165
165
|
- `.git/`, `node_modules/`.
|
|
@@ -176,7 +176,7 @@ Adjust via the env vars at the top of `run-coverage.sh`.
|
|
|
176
176
|
## References
|
|
177
177
|
|
|
178
178
|
- [Bash xtrace + PS4 + BASH_ENV docs](https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html).
|
|
179
|
-
- [`
|
|
179
|
+
- [`tools/ci/run-coverage.sh`](../../tools/ci/run-coverage.sh).
|
|
180
180
|
- [`.github/workflows/coverage.yml`](../../.github/workflows/coverage.yml).
|
|
181
181
|
- Issue [#856](https://github.com/sebastienrousseau/dotfiles/issues/856) (closed) /
|
|
182
182
|
[#883](https://github.com/sebastienrousseau/dotfiles/issues/883) (coverage roadmap).
|
|
@@ -24,12 +24,12 @@ The goal stated by the maintainer: become the de facto workstation provisioning
|
|
|
24
24
|
|
|
25
25
|
| # | File:line | Finding | Recommended fix |
|
|
26
26
|
|---|---|---|---|
|
|
27
|
-
| H1 | `
|
|
27
|
+
| H1 | `bin/dot:589` | `source "$_user_cmd" "$@"` — a user-provided custom command calling `exit` kills the whole CLI. | Replace with `bash "$_user_cmd" "$@"` or `( source "$_user_cmd" "$@" )` subshell. |
|
|
28
28
|
| H2 | `scripts/dot/commands/agent.sh:28,51,83-92` | `_agent_default_profile()` calls `jq` before `_agent_assert_dependencies()` runs in `cmd_mode()`. On a host without jq, error message is cryptic. | Move dependency assertion to top of every entry-point. |
|
|
29
29
|
| H3 | `scripts/dot/commands/fleet.sh:294-297` | GNU vs BSD `sed -i` branch isn't atomic; concurrent `dot fleet namespace set` calls can corrupt `.chezmoidata.toml`. | Use `mktemp` + `mv` (atomic) and wrap with `flock`. |
|
|
30
30
|
| H4 | `dot_config/zsh/dot_zshrc.tmpl:220-221` | `_cached_eval` writes cache with `mv "$cache.tmp.$$" "$cache"` — PID collision possible between two shells. Cold-start affected. | Use `mktemp` instead of `$$`. |
|
|
31
31
|
| H5 | `scripts/dot/commands/meta.sh:64-67` | `rm -rf "$cache_dir/zsh"/*-init.zsh` — if the glob doesn't match, expands to the literal pattern and the `-rf` removes the wrong path. | Guard with `[[ -d ... ]]` or use `find ... -type f -delete`. |
|
|
32
|
-
| H6 | `install.sh:177-198` | Chezmoi installer downloaded over `https://get.chezmoi.io` with size/shebang validation but no cryptographic signature check. | **Fixed in `eaca…` (TBD commit) by removing the unverified fallback.** The verified installer at `
|
|
32
|
+
| H6 | `install.sh:177-198` | Chezmoi installer downloaded over `https://get.chezmoi.io` with size/shebang validation but no cryptographic signature check. | **Fixed in `eaca…` (TBD commit) by removing the unverified fallback.** The verified installer at `tools/ci/install-chezmoi-verified.sh` (SHA256-checked against GitHub Releases) is now the only path; if it fails we refuse to bootstrap rather than silently degrading. |
|
|
33
33
|
| H7 | `install/lib/package_managers.sh:71-92` | Homebrew installer runs from `brew.sh` with a warning but no SHA256 verification. | **False positive on review** — `install_homebrew()` already requires `HOMEBREW_INSTALLER_SHA256` and aborts on checksum mismatch (`install/lib/package_managers.sh:84-92`). Audit cited the security-note string at line 56, not the verification block. |
|
|
34
34
|
| H8 | `install/lib/installers.sh:40-54` | Binary downloads SHA256-verify, but the checksum URL is not pinned. DNS attacker can redirect both binary and checksum together. | **Overstated on review** — `github_asset_url` already obtains both binary and checksum URLs from `api.github.com` via a single authenticated call; both transit HTTPS with cert validation. A DNS attacker would need a valid cert for `api.github.com`. Real defence in depth would add `cosign verify` for releases that publish a Sigstore bundle; tracking as a future enhancement. |
|
|
35
35
|
| H9 | `scripts/dot/lib/platform.sh:42-65` | `dot_path_to_unix/native()` silently returns the Windows path if `wslpath` is missing — caller cannot tell success from failure. | Return non-zero when `wslpath` is required but absent; document the contract. |
|
|
@@ -39,12 +39,12 @@ The goal stated by the maintainer: become the de facto workstation provisioning
|
|
|
39
39
|
| # | File:line | Finding | Recommended fix |
|
|
40
40
|
|---|---|---|---|
|
|
41
41
|
| M1 | `scripts/dot/commands/core.sh:81` | `chezmoi status \|\| true` loses error context — can't distinguish "tree is clean" from "chezmoi crashed". | Capture into a variable and inspect the exit code. |
|
|
42
|
-
| M2 | `
|
|
42
|
+
| M2 | `bin/dot:542` | `route="$(_dot_command_route "$COMMAND" \|\| true)"` is defensible (falls through to the user-command path that emits a proper error), but reads as a bug. | Add comment explaining intent or refactor to explicit `if`. |
|
|
43
43
|
| M3 | `scripts/dot/lib/ui.sh:335,340` | `mktemp` output race in `ui_run_cmd()` between subshell write and parent read; under load the `cat` can hit an empty file. | Switch to `read rc < "$rc_file"` or `[[ -s "$rc_file" ]]` guard. |
|
|
44
44
|
| M4 | `scripts/dot/commands/agent.sh:221-224,338-341,385-388` | `set +e / "$@" / set -e` blocks log failure but propagate the original exit code; callers can't tell intentional vs accidental. | Document the contract or restructure to `if !`. |
|
|
45
45
|
| M5 | `scripts/security/lock-configs.sh:27-33` | `sudo chattr +i` silently fails when sudo is unavailable in automation. | Fail explicitly when sudo is required. |
|
|
46
46
|
| M6 | `dot_config/zsh/dot_zshrc.tmpl:147-159` | `_cached_eval` mtime check doesn't follow symlinks — a `mise` upgrade that only flips a symlink target won't bust the cache. | Resolve via `readlink -f` and track the chain. |
|
|
47
|
-
| M7 | `
|
|
47
|
+
| M7 | `tools/ci/install-chezmoi-verified.sh:25-32` | Only x86_64 + arm64 are supported. ppc64le, s390x, riscv64 fail silently. | Document supported architectures and emit a clear error otherwise. |
|
|
48
48
|
|
|
49
49
|
### 1.4 Low (track in backlog)
|
|
50
50
|
|
|
@@ -107,7 +107,7 @@ Distribution targets (pick 3, not 5): Homebrew tap first, AUR second, Scoop thir
|
|
|
107
107
|
|
|
108
108
|
Community moves:
|
|
109
109
|
|
|
110
|
-
- **Show HN:** lead with the wallpaper-driven themes (v0.2.
|
|
110
|
+
- **Show HN:** lead with the wallpaper-driven themes (v0.2.503). Screenshot-driven hook nobody else has.
|
|
111
111
|
- **Blog post series (3 posts):** "Why I stopped using chezmoi directly", "Bootstrapping 15 machines from one git repo in <90 seconds", "Secrets in dotfiles: a 2026 threat model".
|
|
112
112
|
- **CFPs:** FOSDEM 2027 (dev tools devroom), All Things Open 2026, SCaLE LA. Skip KubeCon.
|
|
113
113
|
- **Sponsor 2–3 newsletters at $500–1500/issue:** Console.dev, TLDR DevOps, Changelog News.
|
|
@@ -188,7 +188,7 @@ Plus reliability fixes:
|
|
|
188
188
|
**This quarter (positioning):** ✅ shipped
|
|
189
189
|
|
|
190
190
|
1. ✅ AGENTS.md generator — `dot agents render/check/list` syncs `CLAUDE.md` → `AGENTS.md` + Cursor + Codex stubs (commit TBD). Closes #1 competitive gap.
|
|
191
|
-
2. ✅ Sub-100ms `dot` CLI cold-start gate — `
|
|
191
|
+
2. ✅ Sub-100ms `dot` CLI cold-start gate — `tools/ci/dot-cli-startup-bench.sh` + `.github/workflows/dot-cli-bench.yml`. Median **47ms** locally, budget 250ms. Closes #3 competitive gap.
|
|
192
192
|
3. ⏳ Add `windows-latest` runner to the test matrix (deferred; needs PS7 mock harness).
|
|
193
193
|
4. ⏳ Pursue mise + 1Password + Codespaces integrations (months 6-12 of the roadmap).
|
|
194
194
|
|
|
@@ -230,8 +230,8 @@ The round-2 audit found regressions in the freshly-shipped strategic features. A
|
|
|
230
230
|
| R6 | **Medium** | `scripts/dot/commands/agents.sh:render` | New files written with default umask permissions — could leak through a permissive global umask. | ✅ Explicit `chmod 0644` after each write. |
|
|
231
231
|
| R7 | **Medium** | `scripts/dot/commands/registry.sh:128-135` | `set-url` accepted any scheme (http, ftp, file) without validation; the unsigned registry JSON is fetched from whatever URL was set. | ✅ Refuses non-HTTPS (with `file://` exemption documented for testing); atomic `mktemp + mv` write to config so concurrent `set-url` invocations cannot corrupt. |
|
|
232
232
|
| R8 | **Medium** | `scripts/dot/commands/fleet.sh:467` | `mktemp -d` without a `-t` template could collide between concurrent `dot fleet apply` invocations from the same user. | ✅ Now uses `mktemp -d -t dotfiles-fleet.XXXXXX`. |
|
|
233
|
-
| R9 | **Medium** | `
|
|
234
|
-
| R10 | **Low** | `
|
|
233
|
+
| R9 | **Medium** | `tools/ci/dot-cli-startup-bench.sh:87-89` | `env -i HOME=... PATH=...` preserved a PATH that could include user-installed `dot` shims; not a true cold-start measurement. Low-impact (the explicit `$DOT_BIN` argument is absolute), but the comment overclaimed. | Annotated only — the explicit `$DOT_BIN` already pins the binary; the PATH note in the comment is now precise. |
|
|
234
|
+
| R10 | **Low** | `tools/ci/dot-cli-startup-bench.sh:58-71` | `_now_ms` falls through to `python3 -c '…'` on macOS bash 3.2; Python startup can inflate measurements 80-150ms. | Documented; consider switching to `gdate +%s%N` when GNU coreutils is installed. |
|
|
235
235
|
| R11 | **Low** | `scripts/dot/commands/agents.sh` (list path) | `mkdir -p` for `.cursor/rules` and `.codex` ran even for read-only subcommands (`list`, `check`). Harmless, but pointless. | Deferred. |
|
|
236
236
|
|
|
237
237
|
### 6.3 New documentation gaps (all fixed in this commit)
|
|
@@ -346,7 +346,7 @@ Round-3 docs agent found 5 drifts, 2 of which were false positives on re-verific
|
|
|
346
346
|
|
|
347
347
|
| ID | File | Drift | Status |
|
|
348
348
|
|---|---|---|---|
|
|
349
|
-
| D1+D2 | `
|
|
349
|
+
| D1+D2 | `bin/dot` | 5 orphan dispatch routes + 1 orphan help-table entry for commands removed in C3 of Round 1 (`verify`, `benchmark`, `prewarm`, `remove`, `clean-cache`) | ✅ Fixed |
|
|
350
350
|
| D3 | `docs/reference/POWERSHELL_PARITY.md` | `dot agents` + `dot fleet apply` labelled "Full" on Windows without backing CI | ✅ Relabelled to "Stub (bash-bridged)" |
|
|
351
351
|
| D4 | `docs/operations/ROADMAP_2026.md` + `HARD_AUDIT_2026.md` §6.9 | Microsoft Build 2026 date was wrong: "2026-05-19 in Seattle" vs actual **2026-06-02 to 2026-06-03 in San Francisco (Fort Mason)** | ✅ Corrected; Show-HN timing shifts ~2 weeks right |
|
|
352
352
|
|
|
@@ -501,10 +501,10 @@ R4 cross-platform agent produced a 10-table audit. Real findings, ranked by what
|
|
|
501
501
|
|
|
502
502
|
| # | Severity | Gap | Concrete close |
|
|
503
503
|
|---|---|---|---|
|
|
504
|
-
| **P1** | High | No `Makefile install` target with `PREFIX`/`DESTDIR` support. Distro packagers have no canonical artefact to package. | Add `Makefile` with `install:` rule copying `
|
|
504
|
+
| **P1** | High | No `Makefile install` target with `PREFIX`/`DESTDIR` support. Distro packagers have no canonical artefact to package. | Add `Makefile` with `install:` rule copying `bin/dot` to `$(PREFIX)/bin/dot`, man page to `$(PREFIX)/share/man/man1/`, completions to `$(PREFIX)/share/zsh/site-functions/_dot`. |
|
|
505
505
|
| **P2** | High | No Homebrew tap, no AUR `PKGBUILD`, no Scoop manifest. | Publish `sebastienrousseau/homebrew-tap`, `aur/dotfiles-git/PKGBUILD`, `scoop-bucket/dot.json` from CI on tag — single tarball with SHA256 + Cosign-signed bundle. |
|
|
506
506
|
| **P3** | High | `.devcontainer/Dockerfile:31` still installs unverified `get.chezmoi.io` (the same anti-pattern that gave us H6 in R1). | Replace with the pinned-SHA256 path used in `install-chezmoi-verified.sh`. |
|
|
507
|
-
| **P4** | High | Repo intermingles framework (`scripts/`, `
|
|
507
|
+
| **P4** | High | Repo intermingles framework (`scripts/`, `bin/dot`, `install/`) with maintainer's personal `dot_config/` (~80 tools). Packagers must ship both. | Document the framework/user split in a new `FRAMEWORK_STRUCTURE.md`; long-term, move framework code under `framework/` so `Makefile install` skips `dot_config/`. |
|
|
508
508
|
| **P5** | Medium | PowerShell-native parity is bash-bridged for `dot agents`, `dot fleet apply`, `dot theme`. Windows-native users can't run them without WSL. | Native PowerShell ports per `docs/reference/POWERSHELL_PARITY.md` Stub rows; estimated 1-week effort for full top-3. |
|
|
509
509
|
|
|
510
510
|
P1+P2 together unlock the entire distribution surface and are ~5 person-days combined. They are the *cheapest path to "you can install us with `brew install`/`paru -S`/`scoop install`"* — which is the literal threshold for de-facto status on each platform.
|
|
@@ -46,7 +46,7 @@ For every release update:
|
|
|
46
46
|
6. Local apply has completed:
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
|
-
CHEZMOI_SOURCE_DIR="$HOME/.dotfiles" ./
|
|
49
|
+
CHEZMOI_SOURCE_DIR="$HOME/.dotfiles" ./bin/dot apply
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
## Security Scan Guardrails
|
|
@@ -54,10 +54,10 @@ CHEZMOI_SOURCE_DIR="$HOME/.dotfiles" ./dot_local/bin/executable_dot apply
|
|
|
54
54
|
We prevent gitleaks historical-scan regressions with:
|
|
55
55
|
|
|
56
56
|
- Shallow checkout (`fetch-depth: 1`, `fetch-tags: false`) in gitleaks jobs.
|
|
57
|
-
- A workflow-dispatch guard script: `
|
|
57
|
+
- A workflow-dispatch guard script: `tools/ci/guard-gitleaks-checkout.sh`.
|
|
58
58
|
|
|
59
59
|
**Manual verification:**
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
bash
|
|
62
|
+
bash tools/ci/guard-gitleaks-checkout.sh
|
|
63
63
|
```
|