@sebastienrousseau/dotfiles 0.2.501 → 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 +155 -4
- package/LICENSE +21 -1283
- package/README.md +40 -8
- 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/01-dot-cli.md +63 -45
- package/docs/manual/03-reference/02-config-files.md +2 -2
- package/docs/manual/03-reference/05-feature-flags.md +62 -3
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +72 -55
- package/docs/manual/index.md +66 -0
- package/docs/operations/CI_COMPOSITES.md +2 -2
- package/docs/operations/COMPLETIONS.md +2 -2
- package/docs/operations/COVERAGE.md +40 -6
- package/docs/operations/HARD_AUDIT_2026.md +631 -0
- package/docs/operations/MAINTENANCE.md +3 -3
- package/docs/operations/MANIFEST.md +127 -0
- package/docs/operations/REGISTRY.md +89 -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 +665 -0
- package/docs/operations/ROADMAP_V0_2_503.md +134 -0
- package/docs/operations/TESTING.md +17 -0
- package/docs/operations/TRACEABILITY.md +9 -3
- package/docs/operations/VERSION_SYNC.md +4 -4
- package/docs/reference/POWERSHELL_PARITY.md +81 -0
- package/docs/registry.json +6 -0
- package/docs/schema/dot-env-v1.json +110 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
- package/docs/security/CI_PINNING.md +121 -0
- package/docs/security/COMMIT_SIGNING.md +138 -0
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
- package/docs/security/DISCLOSURE.md +130 -0
- package/docs/security/FUZZING.md +114 -0
- package/docs/security/INSTALL_VERIFICATION.md +2 -2
- package/docs/security/KEY_ROTATION.md +81 -1
- package/docs/security/POLICY_RELEASES.md +2 -2
- package/docs/security/SCORECARD.md +130 -15
- package/docs/security/SHELL_EXEMPTIONS.md +4 -4
- package/docs/security/VERIFY_RELEASE.md +201 -0
- package/docs/security/security-pubkey.asc +15 -0
- package/install.sh +67 -38
- 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 +45 -15
- 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 +27 -22
- package/scripts/dot/commands/agents.sh +335 -0
- package/scripts/dot/commands/ai.sh +144 -25
- package/scripts/dot/commands/aliases.sh +10 -8
- package/scripts/dot/commands/appearance.sh +2 -2
- package/scripts/dot/commands/core.sh +12 -6
- package/scripts/dot/commands/diagnostics.sh +5 -5
- package/scripts/dot/commands/env-emit.sh +202 -0
- package/scripts/dot/commands/fleet.sh +290 -14
- package/scripts/dot/commands/init.sh +184 -0
- package/scripts/dot/commands/lint.sh +9 -4
- package/scripts/dot/commands/manual.sh +3 -3
- package/scripts/dot/commands/meta.sh +19 -10
- package/scripts/dot/commands/patterns.sh +2 -2
- package/scripts/dot/commands/registry.sh +263 -0
- 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 +62 -4
- 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/lib/secrets_provider.sh +32 -6
- 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 +18 -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/check-disclosure-key-expiry.sh +110 -0
- 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-configs.sh +11 -2
- 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 +58 -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/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/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 -134
- 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 -635
- 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 -596
- package/dot_local/bin/executable_dot-ai +0 -36
- package/dot_local/bin/executable_dot-bootstrap +0 -77
- 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 -283
- 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/install-chezmoi-verified.sh +0 -64
- package/scripts/ci/run-coverage.sh +0 -362
- package/scripts/ci/validate-chezmoidata.sh +0 -25
- package/scripts/ci/validate-ci-config.sh +0 -224
- 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 -99
- package/scripts/dot/lib/ui.sh +0 -518
- 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,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "v0.2.503 Roadmap — Enterprise-Ready, Cross-Platform"
|
|
3
|
+
date: 2026-05-17
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# v0.2.503 — Enterprise-Ready Cross-Platform Polish
|
|
7
|
+
|
|
8
|
+
## Why this release
|
|
9
|
+
|
|
10
|
+
The R4 audit (`HARD_AUDIT_2026.md` Part 8) ranked the framework
|
|
11
|
+
9.0/10 on internal quality but only 7.5/10 on adoption readiness.
|
|
12
|
+
The gap is **distribution + cross-platform polish + visible
|
|
13
|
+
organisation** — not feature surface. v0.2.503 closes that gap
|
|
14
|
+
without breaking existing user installs.
|
|
15
|
+
|
|
16
|
+
Reference target: <https://github.com/Debian/aws-cli> — the Debian
|
|
17
|
+
packaging of AWS CLI, often cited as a model of simple, focused
|
|
18
|
+
top-level structure. We will not blindly copy its layout (it ships
|
|
19
|
+
a Python project, we ship a chezmoi-managed shell framework), but
|
|
20
|
+
we will adopt its discipline: every top-level path has a clear
|
|
21
|
+
purpose, contributors orient in under 30 seconds.
|
|
22
|
+
|
|
23
|
+
## Scope (non-breaking; v0.2.503)
|
|
24
|
+
|
|
25
|
+
### A — Visible structure (no file moves)
|
|
26
|
+
|
|
27
|
+
| | |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `STRUCTURE.md` at root | Single-page map of every top-level path, why it exists, and what it deploys to. Answers "what is `dot_config/`?", "why are there 25 root files?", "where is the CLI?" — in under 30 seconds. |
|
|
30
|
+
| `scripts/README.md` | Map of `scripts/{ci,diagnostics,dot,lib,maintenance,ops,security,tools,tuning}` subtrees. |
|
|
31
|
+
| Root `dot_*` files explained | The 20+ `dot_*` / `executable_*` / `private_*` prefixed files at root are not clutter — they are required by chezmoi to render at the corresponding `~/.X` path. STRUCTURE.md makes this contract visible. |
|
|
32
|
+
|
|
33
|
+
### B — UX polish
|
|
34
|
+
|
|
35
|
+
| | |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Sweep remaining tabular `dot` commands through `ui_table_begin/add/end` | Already done: `dot env`, `dot agents list`, `dot registry list/search`, `dot aliases list/search`. Identify any other listing commands not yet on the helper and convert. |
|
|
38
|
+
| `dot doctor` rendering | Today emits 100+ lines of `ui_ok / ui_warn / ui_err`. Group into bordered sections with totals at the foot. |
|
|
39
|
+
| `dot help` two-column table | The grouped help index could become a gum-table by section. |
|
|
40
|
+
| `dot fleet status` widening | Use the table helper for the per-node status block. |
|
|
41
|
+
|
|
42
|
+
### C — Performance
|
|
43
|
+
|
|
44
|
+
| | |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `_cached_eval` coverage audit | Find every `eval "$(<tool> init <shell>)"` in `rc.d/` not already wrapped; add to cache layer. |
|
|
47
|
+
| Shell startup p50/p95 in CI | New `dot-cli-bench` workflow exists for the CLI cold-start gate; add an equivalent zsh/bash/fish startup-time gate (sub-150ms cold). |
|
|
48
|
+
| Cross-shell `_cached_eval` parity | bash + fish + nu implementations exist; confirm they all do the realpath sidecar pin + suspicious-output check that zsh added. |
|
|
49
|
+
|
|
50
|
+
### D — Cross-platform CI parity
|
|
51
|
+
|
|
52
|
+
| | |
|
|
53
|
+
|---|---|
|
|
54
|
+
| Windows-native smoke test expansion | `tools/ci/windows-smoke-test.ps1` exists but only covers a few commands. Add `dot version / dot help / dot agents check / dot doctor` Windows-native runs. |
|
|
55
|
+
| Real `ubuntu-latest` + `macos-latest` + `windows-latest` matrix for the test runner | Currently `ubuntu` + `macos` only; add `windows-latest` to the regular test workflow. |
|
|
56
|
+
| `chezmoi apply --dry-run` on all three OSes | Verify our templates render on every platform on every PR. |
|
|
57
|
+
|
|
58
|
+
### E — Code dedup + refactor (in-place)
|
|
59
|
+
|
|
60
|
+
| | |
|
|
61
|
+
|---|---|
|
|
62
|
+
| Audit `scripts/dot/lib/*` for cross-file duplication | Many small helpers may exist in 2+ places. Consolidate. |
|
|
63
|
+
| Consistent error-exit codes | Document the canonical exit-code map (1 = bad usage, 2 = no provider, 3 = empty, etc. — `dot secrets` already follows this). Audit other commands for drift. |
|
|
64
|
+
| `set -euo pipefail` header lint | Make sure every script under `scripts/` has the canonical header. |
|
|
65
|
+
|
|
66
|
+
### F — Distribution + discoverability (R4 Top-5 work)
|
|
67
|
+
|
|
68
|
+
| | |
|
|
69
|
+
|---|---|
|
|
70
|
+
| Homebrew tap stub | Create `install/homebrew/dot.rb` formula scaffold. Real publication still needs the v0.3 reorganization. |
|
|
71
|
+
| Scoop manifest stub | Same for `install/scoop/dot.json`. |
|
|
72
|
+
| `awesome-dotfiles` PR draft | One-line entry + screenshot. Land it after v0.2.503 ships. |
|
|
73
|
+
|
|
74
|
+
### G — OpenSSF Scorecard 10/10 across every check
|
|
75
|
+
|
|
76
|
+
Target the [public Scorecard report](https://scorecard.dev/viewer/?uri=github.com/sebastienrousseau/dotfiles) and drive every check to 10/10:
|
|
77
|
+
|
|
78
|
+
| Check | Today (baseline) | Path to 10 |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| **Binary-Artifacts** | 10 (no binaries committed) | Maintain — pre-commit guard rejecting any committed binary. |
|
|
81
|
+
| **Branch-Protection** | needs token | Already configured on `master` (required reviews, signed commits, status-check gating, linear history). Verify in `gh api repos/.../branches/master/protection` and document in `docs/security/`. |
|
|
82
|
+
| **CI-Tests** | 10 (CI passes on every PR) | Maintain — current 75-check matrix is comprehensive. |
|
|
83
|
+
| **CII-Best-Practices** / OpenSSF Best Practices badge | not present | Apply for the badge at [bestpractices.coreinfrastructure.org](https://www.bestpractices.dev/) and embed the badge in README. |
|
|
84
|
+
| **Code-Review** | needs verification | Already enforced via branch protection; document in CONTRIBUTING.md. |
|
|
85
|
+
| **Contributors** | low (solo) | Acknowledge — solo-maintained framework. Add `MAINTAINERS.md` + `GOVERNANCE.md` documenting the single-maintainer model and contribution path. |
|
|
86
|
+
| **Dangerous-Workflow** | 10 (no `pull_request_target` with checkout-then-build) | Maintain — `.github/workflows/` is already audited. |
|
|
87
|
+
| **Dependency-Update-Tool** | 10 (Dependabot + Renovate configured) | Maintain. |
|
|
88
|
+
| **Fuzzing** | partial (1 fuzz harness for `install.sh`) | Add OSS-Fuzz integration **OR** expand `tests/fuzz/` coverage (URL parsers, manifest validators, secret-bucket loaders). |
|
|
89
|
+
| **License** | 10 (MIT, top-level `LICENSE`) | Maintain. |
|
|
90
|
+
| **Maintained** | high (active commits weekly) | Maintain. |
|
|
91
|
+
| **Packaging** | low (no distro package) | Address via the Homebrew tap / Scoop manifest / AUR PKGBUILD in §F. SLSA-attested release artefacts now exist (v0.2.502 backfill confirmed). |
|
|
92
|
+
| **Pinned-Dependencies** | 9 (one tag-pinned reusable workflow — SLSA, documented exception) | Already documented; verify Scorecard accepts the SLSA exception. |
|
|
93
|
+
| **SAST** | 10 (CodeQL + Semgrep + Codacy in CI) | Maintain. |
|
|
94
|
+
| **Security-Policy** | 10 (`.github/SECURITY.md` + WKD-published GPG key + disclosure-key-expiry monitor) | Maintain. |
|
|
95
|
+
| **Signed-Releases** | 8–10 (Cosign-signed SBOM + SLSA provenance now landing per v0.2.502 backfill) | Verify Scorecard re-scrapes the v0.2.502 release post-backfill; should bump to 10. |
|
|
96
|
+
| **Token-Permissions** | 10 (top-level `permissions: contents: read`; per-job overrides) | Maintain — set during R3 hardening. |
|
|
97
|
+
| **Vulnerabilities** | 10 (osv-scanner + Dependabot keep open count at 0) | Maintain. |
|
|
98
|
+
| **Webhooks** | n/a | No org-level webhooks; check not applicable. |
|
|
99
|
+
|
|
100
|
+
**Action items:**
|
|
101
|
+
|
|
102
|
+
1. Run `scorecard` locally with the official Docker image, snapshot current scores into `docs/security/SCORECARD.md`.
|
|
103
|
+
2. Apply for OpenSSF Best Practices badge (≤30-min form).
|
|
104
|
+
3. Add `MAINTAINERS.md` + `GOVERNANCE.md`.
|
|
105
|
+
4. Re-trigger Scorecard workflow after v0.2.502 backfill so the dashboard reflects the fixed Signed-Releases score.
|
|
106
|
+
5. Track every sub-10 score with a follow-up issue tagged `scorecard`.
|
|
107
|
+
|
|
108
|
+
## Reorganisation now in-scope (was deferred — see RFC)
|
|
109
|
+
|
|
110
|
+
Pulled forward from v0.3.0 into this PR per maintainer request.
|
|
111
|
+
The R4 audit identified the framework / user-config intermingling
|
|
112
|
+
as the highest-leverage structural gap. Implementation is phased
|
|
113
|
+
per `RFC_v0_2_503_reorganization.md`; each phase is independently
|
|
114
|
+
atomic.
|
|
115
|
+
|
|
116
|
+
| Move | Why it's breaking |
|
|
117
|
+
|------|-------------------|
|
|
118
|
+
| `dot_config/` → `defaults/` (with chezmoi `.chezmoiroot`) | Every existing user's chezmoi source-state would need to re-bootstrap. |
|
|
119
|
+
| `bin/dot` → `bin/dot` | Same; `~/.local/bin/dot` would be removed before the new path is installed. |
|
|
120
|
+
| Split `framework/` (CLI + lib) from user-facing defaults | Major restructuring; needs RFC + migration tool + 2-version deprecation window. |
|
|
121
|
+
|
|
122
|
+
These will land in v0.2.503 as a coordinated single PR with a
|
|
123
|
+
`migrate-v0_2-to-v0_3.sh` script.
|
|
124
|
+
|
|
125
|
+
## Success criteria (v0.2.503)
|
|
126
|
+
|
|
127
|
+
- [ ] New contributor can answer "where is the CLI?" / "what is `dot_config/`?" / "how do I add a new command?" in under 30 seconds using only the root `STRUCTURE.md` + `scripts/README.md`.
|
|
128
|
+
- [ ] `dot lint` reports 328+ files clean.
|
|
129
|
+
- [ ] Shell startup p50 ≤ 100ms in CI on all three OSes.
|
|
130
|
+
- [ ] `dot env list` / `dot agents list` / `dot registry list` render with gorgeous gum tables (already done — bake into screenshot for README).
|
|
131
|
+
- [ ] `windows-latest` is in the regular test matrix.
|
|
132
|
+
- [ ] Pre-existing CI infrastructure failures (SLSA, etc.) stay green after the v0.2.502 fix series.
|
|
133
|
+
- [ ] **OpenSSF Scorecard reports 10/10 on every applicable check** at <https://scorecard.dev/viewer/?uri=github.com/sebastienrousseau/dotfiles>.
|
|
134
|
+
- [ ] OpenSSF Best Practices badge displayed in README.
|
|
@@ -22,8 +22,25 @@ RUN_INTEGRATION=1 ./tests/framework/test_runner.sh
|
|
|
22
22
|
|
|
23
23
|
# Run performance benchmarks
|
|
24
24
|
./tests/performance/benchmark_runner.sh
|
|
25
|
+
|
|
26
|
+
# Run unit tests in parallel (parsed per-file output, deterministic order)
|
|
27
|
+
./tests/framework/test_runner.sh --jobs auto
|
|
28
|
+
|
|
29
|
+
# Strict mode: promote silent `command not found` / `unbound variable`
|
|
30
|
+
# inside cov_exercise_functions_file to test failures. Default is
|
|
31
|
+
# tolerant (the helper sources dot command files in a clean shell where
|
|
32
|
+
# their lib/dot/ helpers are intentionally unresolved). Use STRICT=1
|
|
33
|
+
# locally before pushing to catch the class of bug that escaped
|
|
34
|
+
# review pre-v0.2.503 (e.g. agent.sh: _agent_repo_root falling
|
|
35
|
+
# through to a missing require_source_dir).
|
|
36
|
+
DOT_STRICT=1 ./tests/framework/test_runner.sh
|
|
25
37
|
```
|
|
26
38
|
|
|
39
|
+
The runner's FINAL SUMMARY lists which test files failed (not just
|
|
40
|
+
the total count) so locating a regression in a 4000+ assertion run
|
|
41
|
+
doesn't require grepping back through the full log. Per-file failure
|
|
42
|
+
counts and crashed-file markers appear inline.
|
|
43
|
+
|
|
27
44
|
## Test structure
|
|
28
45
|
|
|
29
46
|
```text
|
|
@@ -14,8 +14,8 @@ It is enforced by `bash ./scripts/qa/traceability-coverage.sh`.
|
|
|
14
14
|
| BT-02 | Agent profiles, checkpoints, and conformance | `scripts/dot/commands/agent.sh` | `tests/unit/dot-cli/test_dot_commands_agent.sh`, `tests/unit/dot-cli/test_dot_agent_mode.sh`, `tests/unit/dot-cli/test_dot_a2a_conformance.sh` | `docs/operations/TRUSTED_AGENT_WORKSTATION.md`, `docs/interop/A2A.md`, `docs/reference/UTILS.md` |
|
|
15
15
|
| BT-03 | MCP policy validation and registry inspection | `scripts/dot/commands/meta.sh`, `scripts/diagnostics/mcp-doctor.sh` | `tests/unit/dot-cli/test_dot_commands_meta.sh`, `tests/unit/dot-cli/test_dot_cli.sh` | `docs/security/MCP_POLICY.md`, `docs/operations/TRUSTED_AGENT_WORKSTATION.md`, `docs/reference/UTILS.md` |
|
|
16
16
|
| BT-04 | Fleet status, drift, namespace, and events workflows | `scripts/dot/commands/fleet.sh` | `tests/unit/dot-cli/test_dot_commands_fleet.sh`, `tests/unit/dot-cli/test_dot_fleet_enforcement.sh` | `docs/operations/TRUSTED_AGENT_WORKSTATION.md`, `docs/operations/ATTESTATION.md`, `docs/reference/UTILS.md` |
|
|
17
|
-
| BT-05 | Secrets command surface and shell autoload buckets | `scripts/dot/commands/secrets.sh`, `dot_config/shell/10-secrets.sh` | `tests/unit/dot-cli/test_dot_commands_secrets.sh`, `tests/unit/shell/test_shell_secrets_autoload.sh` | `docs/security/SECRETS.md`, `docs/reference/UTILS.md` |
|
|
18
|
-
| BT-06 | Theme synchronization and multi-tool theme application | `
|
|
17
|
+
| BT-05 | Secrets command surface and shell autoload buckets | `scripts/dot/commands/secrets.sh`, `defaults/dot_config/shell/10-secrets.sh` | `tests/unit/dot-cli/test_dot_commands_secrets.sh`, `tests/unit/shell/test_shell_secrets_autoload.sh` | `docs/security/SECRETS.md`, `docs/reference/UTILS.md` |
|
|
18
|
+
| BT-06 | Theme synchronization and multi-tool theme application | `bin/dot-theme-sync` | `tests/unit/theme/test_dot_theme_sync.sh` | `docs/guides/THEMING.md`, `docs/reference/THEMES.md`, `docs/reference/SCRIPTS.md` |
|
|
19
19
|
| BT-07 | Reliability audit orchestration | `scripts/qa/reliability-audit.sh` | `tests/unit/misc/test_qa_reliability.sh`, `tests/unit/misc/test_qa_reliability_behaviour.sh` | `docs/operations/RELIABILITY.md`, `docs/operations/TESTING.md` |
|
|
20
20
|
| BT-08 | Repository coverage baseline audit | `scripts/qa/coverage-baseline.sh` | `tests/unit/misc/test_qa_coverage_baseline.sh` | `docs/operations/RELIABILITY.md`, `docs/operations/TESTING.md` |
|
|
21
21
|
| BT-09 | Documentation coverage contract for public surfaces | `scripts/qa/docs-coverage.sh` | `tests/unit/misc/test_qa_docs_coverage.sh`, `tests/unit/misc/test_qa_docs_repo_coverage.sh` | `docs/operations/RELIABILITY.md`, `docs/reference/UTILS.md`, `docs/reference/SCRIPTS.md` |
|
|
@@ -32,4 +32,10 @@ It is enforced by `bash ./scripts/qa/traceability-coverage.sh`.
|
|
|
32
32
|
| BT-20 | Example validation contract | `scripts/qa/validate-examples.sh` | `tests/unit/misc/test_qa_reliability.sh` | `docs/operations/RELIABILITY.md` |
|
|
33
33
|
| BT-21 | WSL parity contract | `scripts/qa/wsl-contract.sh` | `tests/unit/misc/test_qa_reliability.sh` | `docs/operations/RELIABILITY.md`, `docs/reference/SUPPORT_MATRIX.md` |
|
|
34
34
|
| BT-22 | Internal behavior traceability contract | `scripts/qa/traceability-coverage.sh` | `tests/unit/misc/test_qa_traceability_coverage.sh` | `docs/operations/TRACEABILITY.md`, `docs/operations/RELIABILITY.md` |
|
|
35
|
-
| BT-23 | Multi-format Manual pipeline | `
|
|
35
|
+
| BT-23 | Multi-format Manual pipeline | `tools/docs/build-manual.sh`, `tools/docs/check-manual.sh`, `scripts/dot/commands/manual.sh` | `tests/unit/docs/test_build_manual.sh`, `tests/unit/docs/test_check_manual.sh`, `tests/unit/dot-cli/test_dot_commands_manual.sh` | `docs/manual/`, `docs/README.md`, `README.md` |
|
|
36
|
+
| BT-24 | Multi-harness AI agent context (AGENTS.md generator) | `scripts/dot/commands/agents.sh` | `tests/unit/auto/test_auto_dot_driver.sh` | `AGENTS.md`, `CLAUDE.md`, `docs/operations/HARD_AUDIT_2026.md` |
|
|
37
|
+
| BT-25 | Bootstrap foreign dotfiles repo through chezmoi harness | `scripts/dot/commands/init.sh` | `tests/unit/auto/test_auto_dot_driver.sh` | `docs/operations/ROADMAP_2026.md`, `docs/manual/03-reference/01-dot-cli.md` |
|
|
38
|
+
| BT-26 | Module registry discovery and install scaffold | `scripts/dot/commands/registry.sh` | `tests/unit/auto/test_auto_dot_driver.sh` | `docs/operations/REGISTRY.md`, `docs/registry.json` |
|
|
39
|
+
| BT-27 | Workstation environment manifest emitter (`dot env emit`) | `scripts/dot/commands/env-emit.sh` | `tests/unit/dot-cli/test_cmd_env_emit.sh` | `docs/operations/MANIFEST.md`, `docs/schema/dot-env-v1.json` |
|
|
40
|
+
| BT-28 | Cross-file version-string consistency contract | `scripts/qa/check-version-consistency.sh` | `tests/unit/qa/test_check_version_consistency.sh` | `docs/operations/RELIABILITY.md` |
|
|
41
|
+
| BT-29 | OpenSSF Scorecard nightly snapshot artefact | `scripts/qa/scorecard-snapshot.sh` | `tests/unit/qa/test_scorecard_snapshot.sh` | `docs/security/SCORECARD.md` |
|
|
@@ -93,9 +93,9 @@ The system recognizes and updates these patterns:
|
|
|
93
93
|
#### Documentation Files
|
|
94
94
|
|
|
95
95
|
```markdown
|
|
96
|
-
**Version**: v0.2.
|
|
97
|
-
**Dotfiles Version**: v0.2.
|
|
98
|
-
Version: v0.2.
|
|
96
|
+
**Version**: v0.2.503
|
|
97
|
+
**Dotfiles Version**: v0.2.503
|
|
98
|
+
Version: v0.2.503
|
|
99
99
|
version 0.2.485
|
|
100
100
|
```
|
|
101
101
|
|
|
@@ -388,6 +388,6 @@ gh workflow run sync-versions.yml --ref feature-branch
|
|
|
388
388
|
---
|
|
389
389
|
|
|
390
390
|
**Last Updated**: 2026-02-15
|
|
391
|
-
**Version**: v0.2.
|
|
391
|
+
**Version**: v0.2.503
|
|
392
392
|
**Maintainer**: Principal Automation Engineer
|
|
393
393
|
**Status**: Production Ready ✅
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
title: "PowerShell parity matrix"
|
|
4
|
+
description: "What works on Windows-native PowerShell 7.4 LTS / 7.5+ vs the bash surface."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PowerShell parity matrix
|
|
8
|
+
|
|
9
|
+
This document tracks what is supported on Windows-native PowerShell 7.4 LTS / 7.5+ compared to the bash/zsh surface that ships on macOS and Linux. The repo's positioning has shifted (per [ROADMAP_2026 §6.9](../operations/ROADMAP_2026.md)) to call PowerShell a first-class target rather than "best effort." This page is the contract.
|
|
10
|
+
|
|
11
|
+
## Support tiers
|
|
12
|
+
|
|
13
|
+
| Tier | Meaning | Examples |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| **Full** | Native PowerShell path; tested in CI on `windows-latest`. | `dot version`, `dot help`, `dot agents check` (via WSL-bash fallback). |
|
|
16
|
+
| **WSL-bridged** | Runs under WSL2 bash with the same UX as Linux. | All `dot` subcommands, the test suite, the cold-start bench. |
|
|
17
|
+
| **Stub** | The command exists as a PowerShell entry-point but delegates to bash. | `dot init`, `dot fleet apply` (require chezmoi/ssh; both Windows-installable). |
|
|
18
|
+
| **N/A** | The command targets a Unix-only surface and is not exposed on PowerShell. | Wallpaper-driven theming via macOS `defaults`; Linux-only `lock-configs.sh`. |
|
|
19
|
+
|
|
20
|
+
## Command-by-command matrix
|
|
21
|
+
|
|
22
|
+
| Command | Windows-native | WSL2 | macOS | Linux |
|
|
23
|
+
|---|---|---|---|---|
|
|
24
|
+
| `dot version` | **Full (native)** — `Get-DotVersion` cmdlet in `scripts/dot/powershell/Dot.psm1`; reads `.chezmoidata.toml` directly, no bash | Full | Full | Full |
|
|
25
|
+
| `dot help` | **Full (native)** — `Invoke-DotHelp` cmdlet; `dot help <subcmd>` still bash-bridged | Full | Full | Full |
|
|
26
|
+
| `dot doctor` | Full (subset of checks; some Unix-only checks return N/A) | Full | Full | Full |
|
|
27
|
+
| `dot init <user>` | Full (requires `chezmoi` on PATH — install via `scoop install chezmoi`) | Full | Full | Full |
|
|
28
|
+
| `dot agents check` | **Full (native)** — `Test-DotAgentsSync` cmdlet; CI smoke test runs the cmdlet directly | Full | Full | Full |
|
|
29
|
+
| `dot agents render` / `list` | Stub (bash-bridged — `render` is a multi-harness mustache-equivalent rewrite, tracked as a separate ticket) | Full | Full | Full |
|
|
30
|
+
| `dot fleet status` / `drift` / `events` | Full | Full | Full | Full |
|
|
31
|
+
| `dot fleet apply` | Stub (bash-bridged + requires Windows OpenSSH `ssh.exe` on PATH; no native pwsh-side test in CI yet — tracked in ROADMAP §C5 follow-up) | Full | Full | Full |
|
|
32
|
+
| `dot fleet namespace set` | Full | Full | Full | Full |
|
|
33
|
+
| `dot registry list` / `search` / `info` | Full | Full | Full | Full |
|
|
34
|
+
| `dot registry install <name>` | Scaffold (no behavior yet on any platform) | Scaffold | Scaffold | Scaffold |
|
|
35
|
+
| `dot agent` / `dot mode` | Full | Full | Full | Full |
|
|
36
|
+
| `dot ai` / `dot ai-setup` / `dot ai-query` | Full | Full | Full | Full |
|
|
37
|
+
| AI bridges (`cl`, `codex`, `copilot`, `gemini`, `goose`, etc.) | Full when the underlying AI CLI is installed (scoop / winget / native) | Full | Full | Full |
|
|
38
|
+
| `dot lint` | WSL-bridged (shellcheck/shfmt are Unix-native) | Full | Full | Full |
|
|
39
|
+
| `dot perf` | Full (uses pwsh `Measure-Command` on the PS path) | Full | Full | Full |
|
|
40
|
+
| `dot health` | Full | Full | Full | Full |
|
|
41
|
+
| `dot tools` | Full (uses winget/scoop on Windows; brew/apt elsewhere) | Full | Full | Full |
|
|
42
|
+
| `dot theme` (wallpaper-driven) | Stub (Windows wallpaper API needs additional work) | Stub (X11 only — Wayland support pending) | Full | Full (X11 only) |
|
|
43
|
+
| `dot wallpaper` | Stub | Stub | Full | Full |
|
|
44
|
+
| `dot security firewall` | Full (Windows Defender Firewall via `Set-NetFirewallProfile`) | N/A | Full (pf) | Full (ufw/firewalld) |
|
|
45
|
+
| `dot security lock-configs` | N/A (Windows ACL model differs; tracked) | N/A | Full (`chflags uchg`) | Full (`chattr +i`) |
|
|
46
|
+
| Shell startup integration | Full (`Microsoft.PowerShell_profile.ps1` ships) | Full (zsh, bash, fish) | Full (zsh, bash, fish, nu) | Full (zsh, bash, fish, nu) |
|
|
47
|
+
|
|
48
|
+
## What CI verifies
|
|
49
|
+
|
|
50
|
+
| Check | Platforms |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `dot version` exits 0 | windows-latest, ubuntu-latest, macos-latest, macos-14 |
|
|
53
|
+
| `dot help` exits 0 | windows-latest, ubuntu-latest, macos-latest, macos-14 |
|
|
54
|
+
| `dot agents check` exits 0 | windows-latest (via bash on PATH), ubuntu-latest, macos-latest, macos-14 |
|
|
55
|
+
| PowerShell ≥ 7.4 | windows-latest (smoke test at `tools/ci/windows-smoke-test.ps1`) |
|
|
56
|
+
| PSScriptAnalyzer Error-level findings | windows-latest |
|
|
57
|
+
| `chezmoi --version` exits 0 | windows-latest (via scoop), all Unix matrices |
|
|
58
|
+
| `bash tools/ci/dot-cli-startup-bench.sh` median < 200ms | macos-latest |
|
|
59
|
+
| `bash tools/ci/dot-cli-startup-bench.sh` median < 150ms | ubuntu-latest |
|
|
60
|
+
|
|
61
|
+
## Known parity gaps (deferred to follow-up PRs)
|
|
62
|
+
|
|
63
|
+
These are scoped in [`ROADMAP_2026 §C5`](../operations/ROADMAP_2026.md) but not in this PR's scope:
|
|
64
|
+
|
|
65
|
+
1. **Native PowerShell `dot.ps1` dispatcher.** Today the Windows path either uses `bash dot` (when bash is on PATH via Git for Windows / WSL) or shells out via `pwsh -Command`. A truly idiomatic PowerShell dispatcher with native cmdlet semantics (verb-noun naming, `[CmdletBinding()]`, pipeline support) is a separate effort.
|
|
66
|
+
2. **Wallpaper-driven theming on Windows.** Requires SystemParametersInfo W32 API or `Set-ItemProperty HKCU:\Control Panel\Desktop`. macOS-native today.
|
|
67
|
+
3. **`dot security lock-configs` for Windows.** Needs an ACL/EFS-based equivalent of `chattr +i` / `chflags uchg`. Not in this PR's scope; documented here so it doesn't get re-discovered.
|
|
68
|
+
4. **Native Windows installer signing.** The repo signs the bootstrap tarball via Cosign keyless; a SignTool-signed `install.ps1` for code-signing-enforced enterprises is a future enhancement.
|
|
69
|
+
|
|
70
|
+
## Source-of-truth files
|
|
71
|
+
|
|
72
|
+
- `.github/workflows/ci.yml` — `test-windows` job (pwsh + scoop + chezmoi + smoke)
|
|
73
|
+
- `tools/ci/windows-smoke-test.ps1` — the actual gate
|
|
74
|
+
- `dot_config/powershell/Microsoft.PowerShell_profile.ps1` — the deployed PowerShell profile (if present)
|
|
75
|
+
- `scripts/dot/lib/platform.sh` — the dot_path_to_unix/native bridge (H9 audit fix)
|
|
76
|
+
|
|
77
|
+
## Why this matters
|
|
78
|
+
|
|
79
|
+
The 2026 trend brief flagged Windows-as-first-class as the highest-leverage move post-Codex-Windows-GA (launched 2026-03-04 with 500k waitlist → 2M WAU in 4 weeks). PowerShell 7.4 LTS retires 2026-11-10, so the gate sits at "7.4+" today and will tighten to "7.5+" in November. Documented here so the gate change is not a surprise.
|
|
80
|
+
|
|
81
|
+
Generated 2026-05-16 alongside the round-2 hard audit. Maintained: when adding a `dot` subcommand, update this matrix in the same PR.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://sebastienrousseau.github.io/dotfiles/schema/dot-env-v1.json",
|
|
4
|
+
"title": "Dotfiles Environment Manifest v1",
|
|
5
|
+
"description": "Portable workstation-environment manifest emitted by `dot env emit`. The canonical 'what is installed on this machine + at what version + from which source' record. Designed to feed downstream tooling: CycloneDX SBOM aggregators, AgentSpec/AAIF agent runtimes, EU CRA compliance reports.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schema_version",
|
|
9
|
+
"manifest_version",
|
|
10
|
+
"emitted_at",
|
|
11
|
+
"emitter",
|
|
12
|
+
"host",
|
|
13
|
+
"tools"
|
|
14
|
+
],
|
|
15
|
+
"additionalProperties": false,
|
|
16
|
+
"properties": {
|
|
17
|
+
"schema_version": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"format": "uri",
|
|
20
|
+
"description": "URL of the schema this manifest conforms to. Must equal $id of this file."
|
|
21
|
+
},
|
|
22
|
+
"manifest_version": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
|
|
25
|
+
"description": "Semantic version of the manifest payload itself, independent of the schema URL."
|
|
26
|
+
},
|
|
27
|
+
"emitted_at": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"format": "date-time",
|
|
30
|
+
"description": "RFC 3339 / ISO 8601 UTC timestamp when the manifest was produced."
|
|
31
|
+
},
|
|
32
|
+
"emitter": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"required": ["name", "version", "repo"],
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"properties": {
|
|
37
|
+
"name": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "Tool name that produced the manifest (e.g. 'dot env emit')."
|
|
40
|
+
},
|
|
41
|
+
"version": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "Version of the emitter (e.g. '0.2.503')."
|
|
44
|
+
},
|
|
45
|
+
"repo": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Source repository identifier (e.g. 'github.com/sebastienrousseau/dotfiles')."
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"host": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"required": ["hostname", "os", "arch"],
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"properties": {
|
|
56
|
+
"hostname": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"description": "Result of `uname -n`. May be 'unknown' in headless / containerised contexts."
|
|
59
|
+
},
|
|
60
|
+
"os": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "Result of `uname -s` — Darwin, Linux, MINGW64_NT-*, etc."
|
|
63
|
+
},
|
|
64
|
+
"arch": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"description": "Result of `uname -m` — x86_64, arm64, aarch64, etc."
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"tools": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"description": "Flattened list of all tool installations mise sees on this host. Multiple records per tool are allowed when multiple versions are installed.",
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "object",
|
|
75
|
+
"required": ["name", "version", "source"],
|
|
76
|
+
"additionalProperties": false,
|
|
77
|
+
"properties": {
|
|
78
|
+
"name": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "Tool identifier as mise knows it (e.g. 'node', 'aqua:charmbracelet/gum', 'npm:@anthropic-ai/claude-code')."
|
|
81
|
+
},
|
|
82
|
+
"version": {
|
|
83
|
+
"type": ["string", "null"],
|
|
84
|
+
"description": "Installed version. null when the install record is incomplete."
|
|
85
|
+
},
|
|
86
|
+
"source": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"description": "Absolute path of the config file that requested this tool. The literal string 'orphan' for installs not referenced by any active config."
|
|
89
|
+
},
|
|
90
|
+
"source_type": {
|
|
91
|
+
"type": ["string", "null"],
|
|
92
|
+
"description": "mise source classifier — typically 'mise.toml'."
|
|
93
|
+
},
|
|
94
|
+
"requested_version": {
|
|
95
|
+
"type": ["string", "null"],
|
|
96
|
+
"description": "Version spec the config requested (e.g. '24.14.0', 'latest', '3.12'). null for orphans."
|
|
97
|
+
},
|
|
98
|
+
"install_path": {
|
|
99
|
+
"type": ["string", "null"],
|
|
100
|
+
"description": "Absolute path of the install directory under mise's data root."
|
|
101
|
+
},
|
|
102
|
+
"active": {
|
|
103
|
+
"type": "boolean",
|
|
104
|
+
"description": "True iff this version is the one shimmed/active for the current path."
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -101,7 +101,7 @@ This job deliberately runs `curl ... | tar -xJf -` against the
|
|
|
101
101
|
shellcheck release. Justified because the job is `continue-on-error: true`
|
|
102
102
|
and is opt-in (manual or scheduled). Future hardening: download the
|
|
103
103
|
release asset, verify a known hash, then exec — same shape as
|
|
104
|
-
`
|
|
104
|
+
`tools/ci/install-chezmoi-verified.sh`.
|
|
105
105
|
|
|
106
106
|
## Updating this page
|
|
107
107
|
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# CI Dependency Pinning Policy
|
|
6
|
+
|
|
7
|
+
Every external dependency the CI pipeline consumes must be pinned by
|
|
8
|
+
40-hex commit SHA. The policy applies to:
|
|
9
|
+
|
|
10
|
+
1. **Third-party actions** — `uses: owner/action@<sha>` (already enforced via Scorecard's `Pinned-Dependencies` check at score ≥ 9).
|
|
11
|
+
2. **Reusable workflows in this repo** — `uses: sebastienrousseau/dotfiles/.github/workflows/reusable-X.yml@<sha>` (added with [#855](https://github.com/sebastienrousseau/dotfiles/issues/855); enforced by `tools/ci/lint-reusable-pins.sh`).
|
|
12
|
+
3. **Container base images** — `FROM image:tag@sha256:<digest>` (closed by [#886](https://github.com/sebastienrousseau/dotfiles/pull/886)).
|
|
13
|
+
4. **Release binaries downloaded at build time** — `curl … && echo "<sha256> ..." | sha256sum -c` (closed by [#888](https://github.com/sebastienrousseau/dotfiles/pull/888)).
|
|
14
|
+
|
|
15
|
+
## Why SHA-pin reusable workflows
|
|
16
|
+
|
|
17
|
+
When `ci.yml` calls a reusable via `./.github/workflows/reusable-X.yml`,
|
|
18
|
+
GitHub resolves the reusable from the **same ref as the calling
|
|
19
|
+
workflow at run time**. For an in-repo PR that's the PR's branch —
|
|
20
|
+
fine. The risk is the inverse: a malicious push to `master` (or any
|
|
21
|
+
ref the calling workflow might resolve from) can swap reusable
|
|
22
|
+
content under a CI run, with no audit trail in the PR diff.
|
|
23
|
+
|
|
24
|
+
Pinning to a 40-hex SHA freezes the reusable's content at the
|
|
25
|
+
pinned commit. To swap the reusable, you have to bump every call
|
|
26
|
+
site — visible in the PR diff, reviewable, revertible.
|
|
27
|
+
|
|
28
|
+
## Acceptable forms
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
# Acceptable — full SHA pin.
|
|
32
|
+
uses: sebastienrousseau/dotfiles/.github/workflows/reusable-shell-lint.yml@b0615f8fb5c0f3826f58904a5567eff11b6c500e # master
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The trailing comment is a human-readable hint at what the SHA
|
|
36
|
+
represented when it was pinned (typically `master`, sometimes a tag
|
|
37
|
+
like `v0.2.501`). The hint is documentation only — the SHA is what
|
|
38
|
+
GitHub uses.
|
|
39
|
+
|
|
40
|
+
## Rejected forms
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
# Rejected — relative path is a mutable ref.
|
|
44
|
+
uses: ./.github/workflows/reusable-shell-lint.yml
|
|
45
|
+
|
|
46
|
+
# Rejected — branch ref is mutable.
|
|
47
|
+
uses: sebastienrousseau/dotfiles/.github/workflows/reusable-shell-lint.yml@master
|
|
48
|
+
|
|
49
|
+
# Rejected — tag ref is mutable (tags can be moved).
|
|
50
|
+
uses: sebastienrousseau/dotfiles/.github/workflows/reusable-shell-lint.yml@v0.2.501
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The `lint-reusable-pins` job in `ci.yml` runs `tools/ci/lint-reusable-pins.sh`
|
|
54
|
+
on every workflow change. The lint fails the build on any of the
|
|
55
|
+
rejected forms above.
|
|
56
|
+
|
|
57
|
+
## Refreshing pinned SHAs
|
|
58
|
+
|
|
59
|
+
`bump-reusable-pins.yml` handles this automatically. On every push to
|
|
60
|
+
`master` that touches `.github/workflows/reusable-*.yml`, the bot scans
|
|
61
|
+
caller workflows for stale pins and opens a PR bumping them to the new
|
|
62
|
+
SHA. Signed with `ACTIONS_BOT_SIGNING_KEY` so the resulting commit
|
|
63
|
+
passes `Verify Commit Signatures`.
|
|
64
|
+
|
|
65
|
+
The manual recipe below stays here as a fallback — for example, if you
|
|
66
|
+
need to bump pins before a merge to master, or if the bot's run failed
|
|
67
|
+
and you want to short-circuit waiting for the next push trigger.
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
# 1. Land the change to the reusable on master via a PR.
|
|
71
|
+
# 2. After merge, capture the new master SHA:
|
|
72
|
+
git fetch origin master
|
|
73
|
+
PIN=$(git rev-parse origin/master)
|
|
74
|
+
echo "$PIN"
|
|
75
|
+
|
|
76
|
+
# 3. Bump every call site:
|
|
77
|
+
find .github/workflows -name '*.yml' -exec sed -i.bak -E \
|
|
78
|
+
"s|(/reusable-[a-z0-9-]+\.yml@)[0-9a-f]{40}|\\1${PIN}|g" {} +
|
|
79
|
+
rm -f .github/workflows/*.bak
|
|
80
|
+
|
|
81
|
+
# 4. Verify the lint still passes:
|
|
82
|
+
bash tools/ci/lint-reusable-pins.sh
|
|
83
|
+
|
|
84
|
+
# 5. Land the bump on a follow-up PR with a single-purpose commit:
|
|
85
|
+
git commit -am "chore(ci): bump reusable-workflow pins to ${PIN:0:10}"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Whether bumped by the bot or by hand, the resulting PR runs the full
|
|
89
|
+
CI suite — a reviewer still confirms the new reusable content is
|
|
90
|
+
intentional before merge.
|
|
91
|
+
|
|
92
|
+
## Dependabot
|
|
93
|
+
|
|
94
|
+
Dependabot's `github-actions` ecosystem **does not** support same-repo
|
|
95
|
+
reusable workflow SHA bumps as of May 2026 — it only updates
|
|
96
|
+
references to external actions. Same-repo reusables are tracked
|
|
97
|
+
manually via the recipe above. The Dependabot config in
|
|
98
|
+
`.github/dependabot.yml` covers the external dimension; this
|
|
99
|
+
document covers the in-repo one.
|
|
100
|
+
|
|
101
|
+
If GitHub ships native Dependabot support for reusable workflows,
|
|
102
|
+
delete this section and switch to `package-ecosystem: github-actions`
|
|
103
|
+
with `directory: /.github/workflows`. Track on
|
|
104
|
+
[github/feedback#10539](https://github.com/orgs/community/discussions/10539).
|
|
105
|
+
|
|
106
|
+
## Negative test
|
|
107
|
+
|
|
108
|
+
`tests/unit/ci/test_reusable_pin_lint.sh` deliberately drops an
|
|
109
|
+
unpinned reusable reference into a sandboxed workflow tree and
|
|
110
|
+
asserts that `lint-reusable-pins.sh` exits non-zero with the
|
|
111
|
+
expected error message. The test runs as part of the standard
|
|
112
|
+
test suite — a regression in the lint catches at PR time, not at
|
|
113
|
+
merge time.
|
|
114
|
+
|
|
115
|
+
## See also
|
|
116
|
+
|
|
117
|
+
- [#855](https://github.com/sebastienrousseau/dotfiles/issues/855) — original tracking issue.
|
|
118
|
+
- `tools/ci/lint-reusable-pins.sh` — the enforcement script.
|
|
119
|
+
- `tests/unit/ci/test_reusable_pin_lint.sh` — the negative test.
|
|
120
|
+
- `.github/workflows/bump-reusable-pins.yml` — the auto-bump bot.
|
|
121
|
+
- [GitHub: pinning actions to a full-length commit SHA](https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-third-party-actions).
|