@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.
Files changed (412) hide show
  1. package/CHANGELOG.md +83 -9
  2. package/LICENSE +21 -1283
  3. package/README.md +5 -3
  4. package/docs/CONFIG_STRATEGY.md +124 -0
  5. package/docs/COPYRIGHT +1 -1
  6. package/docs/GOVERNANCE.md +98 -0
  7. package/docs/MAINTAINERS.md +41 -0
  8. package/docs/OPENCODE.md +127 -0
  9. package/docs/README.md +2 -0
  10. package/docs/STRUCTURE.md +102 -0
  11. package/docs/adr/ADR-011-nushell-tier3-keep.md +2 -2
  12. package/docs/architecture/AI_COST_OPTIMIZATION.md +143 -0
  13. package/docs/architecture/REPO_LAYOUT.md +8 -8
  14. package/docs/archive/MILESTONE_v0.2.493.md +1 -1
  15. package/docs/index.md +2 -2
  16. package/docs/interop/POWERSHELL.md +1 -1
  17. package/docs/manual/00-introduction.md +1 -1
  18. package/docs/manual/01-concepts/02-trust-model.md +1 -1
  19. package/docs/manual/03-reference/02-config-files.md +2 -2
  20. package/docs/manual/_toc.yml +1 -1
  21. package/docs/manual/command-index.md +72 -59
  22. package/docs/operations/CI_COMPOSITES.md +2 -2
  23. package/docs/operations/COMPLETIONS.md +2 -2
  24. package/docs/operations/COVERAGE.md +5 -5
  25. package/docs/operations/HARD_AUDIT_2026.md +11 -11
  26. package/docs/operations/MAINTENANCE.md +3 -3
  27. package/docs/operations/MANIFEST.md +127 -0
  28. package/docs/operations/RELEASE_PIPELINE.md +130 -0
  29. package/docs/operations/RFC_v0_2_503_reorganization.md +280 -0
  30. package/docs/operations/ROADMAP_2026.md +6 -6
  31. package/docs/operations/ROADMAP_V0_2_503.md +134 -0
  32. package/docs/operations/TESTING.md +17 -0
  33. package/docs/operations/TRACEABILITY.md +6 -3
  34. package/docs/operations/VERSION_SYNC.md +4 -4
  35. package/docs/reference/POWERSHELL_PARITY.md +8 -7
  36. package/docs/schema/dot-env-v1.json +110 -0
  37. package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
  38. package/docs/security/CI_PINNING.md +17 -9
  39. package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
  40. package/docs/security/FUZZING.md +114 -0
  41. package/docs/security/INSTALL_VERIFICATION.md +2 -2
  42. package/docs/security/POLICY_RELEASES.md +2 -2
  43. package/docs/security/SCORECARD.md +58 -3
  44. package/docs/security/SHELL_EXEMPTIONS.md +4 -4
  45. package/docs/security/VERIFY_RELEASE.md +201 -0
  46. package/install.sh +27 -5
  47. package/package.json +1 -1
  48. package/scripts/README.md +123 -0
  49. package/scripts/ci/check-copyright-headers.sh +4 -93
  50. package/scripts/ci/check-shell-preamble.sh +4 -103
  51. package/scripts/ci/guard-gitleaks-checkout.sh +4 -54
  52. package/scripts/diagnostics/a2a-conformance.sh +4 -4
  53. package/scripts/diagnostics/alias-governance.sh +1 -1
  54. package/scripts/diagnostics/aliases-cheatsheet.sh +2 -2
  55. package/scripts/diagnostics/benchmark.sh +4 -4
  56. package/scripts/diagnostics/conflicts.sh +2 -2
  57. package/scripts/diagnostics/doctor-unified.sh +2 -2
  58. package/scripts/diagnostics/doctor.sh +10 -10
  59. package/scripts/diagnostics/drift-dashboard.sh +2 -2
  60. package/scripts/diagnostics/health.sh +4 -4
  61. package/scripts/diagnostics/history-analysis.sh +2 -2
  62. package/scripts/diagnostics/mcp-doctor.sh +10 -7
  63. package/scripts/diagnostics/perf.sh +4 -4
  64. package/scripts/diagnostics/scorecard.sh +4 -4
  65. package/scripts/diagnostics/security-score.sh +2 -2
  66. package/scripts/diagnostics/smoke-test.sh +2 -2
  67. package/scripts/diagnostics/snapshot.sh +2 -2
  68. package/scripts/diagnostics/verify.sh +4 -4
  69. package/scripts/diagnostics/version-locks.sh +2 -2
  70. package/scripts/diagnostics/workstation-attestation.sh +14 -14
  71. package/scripts/dot/commands/agent.sh +8 -0
  72. package/scripts/dot/commands/agents.sh +14 -4
  73. package/scripts/dot/commands/ai.sh +144 -25
  74. package/scripts/dot/commands/appearance.sh +2 -2
  75. package/scripts/dot/commands/core.sh +2 -2
  76. package/scripts/dot/commands/diagnostics.sh +5 -5
  77. package/scripts/dot/commands/env-emit.sh +202 -0
  78. package/scripts/dot/commands/fleet.sh +12 -11
  79. package/scripts/dot/commands/init.sh +4 -4
  80. package/scripts/dot/commands/lint.sh +9 -4
  81. package/scripts/dot/commands/manual.sh +3 -3
  82. package/scripts/dot/commands/meta.sh +12 -6
  83. package/scripts/dot/commands/patterns.sh +2 -2
  84. package/scripts/dot/commands/registry.sh +4 -4
  85. package/scripts/dot/commands/restore.sh +4 -4
  86. package/scripts/dot/commands/secrets.sh +4 -3
  87. package/scripts/dot/commands/security.sh +2 -2
  88. package/scripts/dot/commands/tools.sh +13 -3
  89. package/scripts/dot/powershell/Dot.psm1 +199 -0
  90. package/scripts/fonts/install-nerd-fonts.sh +2 -2
  91. package/scripts/git-hooks/pre-commit-audit.sh +2 -2
  92. package/scripts/git-hooks/pre-push +13 -0
  93. package/scripts/ops/ai-setup.sh +1 -1
  94. package/scripts/ops/bundle.sh +2 -2
  95. package/scripts/ops/chaos.sh +2 -2
  96. package/scripts/ops/chezmoi-apply.sh +4 -4
  97. package/scripts/ops/heal.sh +4 -4
  98. package/scripts/ops/post-apply-repair.sh +2 -2
  99. package/scripts/ops/prewarm.sh +2 -2
  100. package/scripts/ops/release.sh +4 -4
  101. package/scripts/ops/rollback.sh +4 -4
  102. package/scripts/ops/setup.sh +2 -2
  103. package/scripts/qa/check-version-consistency.sh +123 -0
  104. package/scripts/qa/coverage-baseline.sh +1 -1
  105. package/scripts/qa/docs-coverage.sh +2 -2
  106. package/scripts/qa/powershell-contract.ps1 +1 -1
  107. package/scripts/qa/scorecard-snapshot.sh +127 -0
  108. package/scripts/security/backup.sh +2 -2
  109. package/scripts/security/dns-doh.sh +4 -4
  110. package/scripts/security/encryption-check.sh +4 -4
  111. package/scripts/security/enforce-policies.sh +2 -2
  112. package/scripts/security/firewall.sh +4 -4
  113. package/scripts/security/lock-screen.sh +4 -4
  114. package/scripts/security/manage-secrets.sh +2 -2
  115. package/scripts/security/ssh-cert.sh +2 -2
  116. package/scripts/security/telemetry-kill.sh +4 -4
  117. package/scripts/security/usb-safety.sh +4 -4
  118. package/scripts/theme/extract-heic-frames.sh +114 -0
  119. package/scripts/theme/rebuild-themes.sh +8 -1
  120. package/scripts/theme/switch.sh +13 -6
  121. package/scripts/theme/wallpaper-sync.sh +297 -93
  122. package/scripts/tuning/linux.sh +2 -2
  123. package/scripts/tuning/macos.sh +2 -2
  124. package/scripts/version-sync.sh +55 -7
  125. package/dot_config/.module-manifest.json +0 -69
  126. package/dot_config/ai/identity.md +0 -23
  127. package/dot_config/ai/patterns/architect.md +0 -16
  128. package/dot_config/ai/patterns/hardener.md +0 -15
  129. package/dot_config/ai/patterns/refactor.md +0 -15
  130. package/dot_config/aider/aider.conf.yml +0 -32
  131. package/dot_config/alacritty/alacritty.toml.tmpl +0 -55
  132. package/dot_config/ansible/ansible.cfg +0 -11
  133. package/dot_config/atuin/config.toml.tmpl +0 -47
  134. package/dot_config/bat/config +0 -23
  135. package/dot_config/brave-flags.conf.tmpl +0 -7
  136. package/dot_config/btop/btop.conf +0 -16
  137. package/dot_config/btop/themes/tokyonight.theme +0 -34
  138. package/dot_config/bun/bunfig.toml.tmpl +0 -33
  139. package/dot_config/claude/mcp_servers.json +0 -20
  140. package/dot_config/containers/containers.conf +0 -14
  141. package/dot_config/curl/dot_curlrc +0 -18
  142. package/dot_config/dlv/config.yml +0 -39
  143. package/dot_config/docker/config.json +0 -15
  144. package/dot_config/dotfiles/agent-card.json +0 -29
  145. package/dot_config/dotfiles/agent-profiles.json +0 -92
  146. package/dot_config/dotfiles/boot/README.md +0 -13
  147. package/dot_config/dotfiles/grub/README.md +0 -13
  148. package/dot_config/dotfiles/lock/README.md +0 -13
  149. package/dot_config/dotfiles/mcp-lock.json +0 -33
  150. package/dot_config/dotfiles/mcp-policy.json +0 -52
  151. package/dot_config/dotfiles/mcp-registry.json +0 -47
  152. package/dot_config/dotfiles/model-registry.json +0 -20
  153. package/dot_config/dotfiles/policy-bundles.json +0 -38
  154. package/dot_config/dotfiles/prompt-registry.json +0 -16
  155. package/dot_config/dotfiles/versions.env +0 -18
  156. package/dot_config/duf/duf.conf +0 -6
  157. package/dot_config/duti/defaults.duti +0 -5
  158. package/dot_config/emoji/emoji.txt +0 -34
  159. package/dot_config/environment.d/50-ssh-agent.conf +0 -2
  160. package/dot_config/environment.d/90-wayland.conf +0 -19
  161. package/dot_config/fastfetch/config.jsonc +0 -28
  162. package/dot_config/firefox/user.js.tmpl +0 -58
  163. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +0 -9
  164. package/dot_config/fish/completions/dot.fish.tmpl +0 -115
  165. package/dot_config/fish/conf.d/000-perf-cache.fish +0 -56
  166. package/dot_config/fish/conf.d/aliases.fish.tmpl +0 -77
  167. package/dot_config/fish/conf.d/direnv.fish +0 -4
  168. package/dot_config/fish/conf.d/env.fish.tmpl +0 -48
  169. package/dot_config/fish/conf.d/functions.fish.tmpl +0 -22
  170. package/dot_config/fish/conf.d/init.fish.tmpl +0 -172
  171. package/dot_config/fish/conf.d/mise-activate.fish +0 -5
  172. package/dot_config/fish/config.fish.tmpl +0 -44
  173. package/dot_config/fish/fish_plugins +0 -1
  174. package/dot_config/fish/functions/_.fish +0 -3
  175. package/dot_config/fish/functions/_cached_eval.fish +0 -131
  176. package/dot_config/fish/functions/_cached_eval_clear.fish +0 -17
  177. package/dot_config/fish/functions/als.fish +0 -46
  178. package/dot_config/fish/functions/bg-upgrade.fish +0 -7
  179. package/dot_config/fish/functions/c.fish +0 -3
  180. package/dot_config/fish/functions/cat.fish +0 -9
  181. package/dot_config/fish/functions/d.fish +0 -7
  182. package/dot_config/fish/functions/dot.fish +0 -34
  183. package/dot_config/fish/functions/h.fish +0 -3
  184. package/dot_config/fish/functions/l.fish +0 -7
  185. package/dot_config/fish/functions/la.fish +0 -7
  186. package/dot_config/fish/functions/ll.fish +0 -7
  187. package/dot_config/fish/functions/log_error.fish +0 -13
  188. package/dot_config/fish/functions/log_info.fish +0 -13
  189. package/dot_config/fish/functions/lr.fish +0 -7
  190. package/dot_config/fish/functions/lra.fish +0 -7
  191. package/dot_config/fish/functions/ls.fish +0 -7
  192. package/dot_config/fish/functions/lt.fish +0 -7
  193. package/dot_config/fish/functions/lta.fish +0 -7
  194. package/dot_config/fish/functions/notify-run.fish +0 -11
  195. package/dot_config/fish/functions/q.fish +0 -3
  196. package/dot_config/fish/functions/silent-run.fish +0 -7
  197. package/dot_config/fish/functions/yy.fish +0 -8
  198. package/dot_config/flatpak/flatpak.list +0 -4
  199. package/dot_config/fontconfig/fonts.conf.tmpl +0 -57
  200. package/dot_config/foot/foot.ini.tmpl +0 -33
  201. package/dot_config/fuzzel/fuzzel.ini.tmpl +0 -18
  202. package/dot_config/fzf/fzf.zsh +0 -48
  203. package/dot_config/gem/gemrc +0 -9
  204. package/dot_config/gh/config.yml +0 -12
  205. package/dot_config/ghostty/config.tmpl +0 -165
  206. package/dot_config/git/allowed_signers.tmpl +0 -18
  207. package/dot_config/git/attributes +0 -12
  208. package/dot_config/git/commit-template +0 -10
  209. package/dot_config/git/hooks/executable_commit-msg +0 -146
  210. package/dot_config/git/ignore +0 -27
  211. package/dot_config/gnupg/gpg-agent.conf +0 -11
  212. package/dot_config/go/golangci.yml +0 -118
  213. package/dot_config/go/gopls.json +0 -30
  214. package/dot_config/goose/config.yaml +0 -29
  215. package/dot_config/gtk-3.0/gtk.css.tmpl +0 -184
  216. package/dot_config/gtk-3.0/settings.ini.tmpl +0 -27
  217. package/dot_config/gtk-4.0/gtk.css.tmpl +0 -252
  218. package/dot_config/gtk-4.0/settings.ini.tmpl +0 -18
  219. package/dot_config/htop/htoprc +0 -20
  220. package/dot_config/inputrc +0 -2
  221. package/dot_config/ipython/profile_default/ipython_config.py +0 -19
  222. package/dot_config/just/justfile +0 -122
  223. package/dot_config/k9s/config.yaml +0 -65
  224. package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
  225. package/dot_config/kanshi/config.tmpl +0 -22
  226. package/dot_config/karabiner/karabiner.json +0 -14
  227. package/dot_config/kitty/kitty.conf.tmpl +0 -53
  228. package/dot_config/lazydocker/config.yml +0 -186
  229. package/dot_config/lazygit/config.yml +0 -35
  230. package/dot_config/mako/config +0 -47
  231. package/dot_config/mas/masapps.txt +0 -5
  232. package/dot_config/micro/settings.json +0 -3
  233. package/dot_config/mimeapps.list +0 -77
  234. package/dot_config/minikube/config.json +0 -13
  235. package/dot_config/mise/config.toml +0 -99
  236. package/dot_config/mongosh/mongoshrc.js +0 -68
  237. package/dot_config/mpv/input.conf +0 -47
  238. package/dot_config/mpv/mpv.conf +0 -47
  239. package/dot_config/mycli/myclirc +0 -67
  240. package/dot_config/nano/nanorc +0 -28
  241. package/dot_config/ncdu/config +0 -12
  242. package/dot_config/niri/config.kdl.tmpl +0 -327
  243. package/dot_config/nushell/aliases.nu +0 -18
  244. package/dot_config/nushell/cached_eval.nu +0 -80
  245. package/dot_config/nushell/completions.nu.tmpl +0 -52
  246. package/dot_config/nushell/config.nu.tmpl +0 -86
  247. package/dot_config/nushell/env.nu.tmpl +0 -102
  248. package/dot_config/nushell/functions.nu.tmpl +0 -17
  249. package/dot_config/nvim/init.lua +0 -18
  250. package/dot_config/nvim/lazy-lock.json +0 -58
  251. package/dot_config/nvim/lua/config/autocmds.lua +0 -107
  252. package/dot_config/nvim/lua/config/keymaps.lua +0 -92
  253. package/dot_config/nvim/lua/config/lazy.lua +0 -44
  254. package/dot_config/nvim/lua/config/options.lua +0 -49
  255. package/dot_config/nvim/lua/plugins/ai.lua +0 -75
  256. package/dot_config/nvim/lua/plugins/coding.lua +0 -216
  257. package/dot_config/nvim/lua/plugins/completion.lua +0 -60
  258. package/dot_config/nvim/lua/plugins/dap.lua +0 -412
  259. package/dot_config/nvim/lua/plugins/editor.lua +0 -55
  260. package/dot_config/nvim/lua/plugins/git.lua +0 -10
  261. package/dot_config/nvim/lua/plugins/lsp.lua +0 -156
  262. package/dot_config/nvim/lua/plugins/markdown.lua +0 -18
  263. package/dot_config/nvim/lua/plugins/rust.lua +0 -34
  264. package/dot_config/nvim/lua/plugins/sessions.lua +0 -33
  265. package/dot_config/nvim/lua/plugins/ui.lua +0 -509
  266. package/dot_config/paru/paru.conf +0 -10
  267. package/dot_config/pip/pip.conf.tmpl +0 -32
  268. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +0 -81
  269. package/dot_config/pueue/pueue.yml +0 -34
  270. package/dot_config/pypoetry/config.toml +0 -6
  271. package/dot_config/pyrightconfig.json +0 -5
  272. package/dot_config/raycast/README.md +0 -13
  273. package/dot_config/redis/redisclirc +0 -41
  274. package/dot_config/ripgrep/ripgreprc +0 -21
  275. package/dot_config/shell/00-core-paths.sh.tmpl +0 -141
  276. package/dot_config/shell/05-core-safety.sh +0 -48
  277. package/dot_config/shell/10-secrets.sh +0 -41
  278. package/dot_config/shell/40-fzf-defaults.sh.tmpl +0 -17
  279. package/dot_config/shell/40-ls-colors.sh +0 -49
  280. package/dot_config/shell/50-logic-functions-core.sh.tmpl +0 -11
  281. package/dot_config/shell/50-logic-functions.sh.tmpl +0 -11
  282. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +0 -65
  283. package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -121
  284. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -55
  285. package/dot_config/shell/Brewfile +0 -207
  286. package/dot_config/shell/Brewfile.cask +0 -92
  287. package/dot_config/shell/Brewfile.cli +0 -127
  288. package/dot_config/shell/README.md +0 -284
  289. package/dot_config/shell/als_data.txt.tmpl +0 -65
  290. package/dot_config/shell/custom/auto_ls.zsh +0 -20
  291. package/dot_config/shell/custom/context_suggest.zsh +0 -68
  292. package/dot_config/shell/custom/error_analysis.zsh +0 -45
  293. package/dot_config/sops/dot_sops.yaml +0 -23
  294. package/dot_config/starship.toml.tmpl +0 -202
  295. package/dot_config/swaylock/config +0 -43
  296. package/dot_config/systemd/user/dotfiles-maintenance.service +0 -8
  297. package/dot_config/systemd/user/dotfiles-maintenance.timer +0 -11
  298. package/dot_config/systemd/user/pueued.service +0 -12
  299. package/dot_config/systemd/user/ssh-agent.service +0 -12
  300. package/dot_config/task/Taskfile.yml +0 -86
  301. package/dot_config/tflint/tflint.hcl +0 -9
  302. package/dot_config/tmux/tmux.conf.tmpl +0 -223
  303. package/dot_config/topgrade.toml.tmpl +0 -54
  304. package/dot_config/user-dirs.dirs +0 -10
  305. package/dot_config/vscode/extensions.txt +0 -11
  306. package/dot_config/vscode/settings.json.tmpl +0 -82
  307. package/dot_config/waybar/config.jsonc.tmpl +0 -90
  308. package/dot_config/waybar/style.css.tmpl +0 -211
  309. package/dot_config/wezterm/wezterm.lua.tmpl +0 -64
  310. package/dot_config/wget/wgetrc +0 -12
  311. package/dot_config/xdg-desktop-portal/niri-portals.conf +0 -5
  312. package/dot_config/yarn/yarnrc.yml +0 -36
  313. package/dot_config/yazi/keymap.toml +0 -67
  314. package/dot_config/yazi/theme.toml +0 -102
  315. package/dot_config/yazi/yazi.toml +0 -40
  316. package/dot_config/zathura/zathurarc +0 -52
  317. package/dot_config/zellij/config.kdl.tmpl +0 -79
  318. package/dot_config/zsh/dot_zprofile +0 -7
  319. package/dot_config/zsh/dot_zshenv +0 -5
  320. package/dot_config/zsh/dot_zshrc.tmpl +0 -688
  321. package/dot_config/zsh/rc.d/00-alias-shims.zsh +0 -99
  322. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -18
  323. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
  324. package/dot_config/zsh/rc.d/20-zinit.zsh +0 -65
  325. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -214
  326. package/dot_config/zsh/rc.d/40-bell.zsh +0 -20
  327. package/dot_config/zsh/rc.d/50-login-fortune.zsh +0 -9
  328. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +0 -32
  329. package/dot_local/bin/executable_ai-update +0 -195
  330. package/dot_local/bin/executable_ai_core +0 -152
  331. package/dot_local/bin/executable_antigravity +0 -11
  332. package/dot_local/bin/executable_b64 +0 -84
  333. package/dot_local/bin/executable_bm +0 -79
  334. package/dot_local/bin/executable_cb +0 -39
  335. package/dot_local/bin/executable_dot +0 -636
  336. package/dot_local/bin/executable_dot-ai +0 -36
  337. package/dot_local/bin/executable_dot-bootstrap +0 -76
  338. package/dot_local/bin/executable_dot-launch-or-focus +0 -52
  339. package/dot_local/bin/executable_dot-load-benchmark +0 -31
  340. package/dot_local/bin/executable_dot-load-benchmark-pty +0 -77
  341. package/dot_local/bin/executable_dot-theme-sync +0 -952
  342. package/dot_local/bin/executable_dot_completion +0 -57
  343. package/dot_local/bin/executable_dtags +0 -28
  344. package/dot_local/bin/executable_epoch +0 -67
  345. package/dot_local/bin/executable_extract +0 -41
  346. package/dot_local/bin/executable_gbd +0 -52
  347. package/dot_local/bin/executable_gd +0 -42
  348. package/dot_local/bin/executable_git-ai-commit +0 -175
  349. package/dot_local/bin/executable_git-ai-diff +0 -169
  350. package/dot_local/bin/executable_gl +0 -101
  351. package/dot_local/bin/executable_hash +0 -161
  352. package/dot_local/bin/executable_hashsum +0 -160
  353. package/dot_local/bin/executable_hex +0 -115
  354. package/dot_local/bin/executable_jsonv +0 -78
  355. package/dot_local/bin/executable_jwt +0 -94
  356. package/dot_local/bin/executable_kill-port +0 -75
  357. package/dot_local/bin/executable_lorem +0 -118
  358. package/dot_local/bin/executable_mkscript +0 -35
  359. package/dot_local/bin/executable_monitor +0 -56
  360. package/dot_local/bin/executable_myip +0 -51
  361. package/dot_local/bin/executable_notify +0 -24
  362. package/dot_local/bin/executable_open +0 -38
  363. package/dot_local/bin/executable_pw +0 -27
  364. package/dot_local/bin/executable_rec-start +0 -46
  365. package/dot_local/bin/executable_rec-stop +0 -35
  366. package/dot_local/bin/executable_regex +0 -132
  367. package/dot_local/bin/executable_start-niri +0 -8
  368. package/dot_local/bin/executable_tmux-sessionizer +0 -314
  369. package/dot_local/bin/executable_tour +0 -177
  370. package/dot_local/bin/executable_up +0 -23
  371. package/dot_local/bin/executable_update +0 -142
  372. package/dot_local/bin/executable_uuid +0 -87
  373. package/dot_local/bin/executable_win +0 -32
  374. package/dot_local/bin/executable_yamlv +0 -57
  375. package/dot_local/share/bash-completion/completions/dot +0 -72
  376. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  377. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  378. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  379. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  380. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  381. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  382. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  383. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  384. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  385. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  386. package/dot_local/share/man/man1/dot.1 +0 -149
  387. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +0 -64
  388. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +0 -18
  389. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +0 -13
  390. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +0 -6
  391. package/dot_local/share/zsh/completions/.keep +0 -0
  392. package/dot_local/share/zsh/completions/_dot +0 -287
  393. package/scripts/ci/check-dangerous-chmod.sh +0 -19
  394. package/scripts/ci/check-deps-dev.sh +0 -236
  395. package/scripts/ci/check-insecure-tls.sh +0 -61
  396. package/scripts/ci/check-regression-traceability.sh +0 -67
  397. package/scripts/ci/dot-cli-startup-bench.sh +0 -126
  398. package/scripts/ci/install-chezmoi-verified.sh +0 -67
  399. package/scripts/ci/lint-reusable-pins.sh +0 -78
  400. package/scripts/ci/run-coverage.sh +0 -451
  401. package/scripts/ci/validate-chezmoidata.sh +0 -25
  402. package/scripts/ci/validate-ci-config.sh +0 -224
  403. package/scripts/ci/windows-smoke-test.ps1 +0 -136
  404. package/scripts/docs/build-manual.sh +0 -883
  405. package/scripts/docs/check-manual.sh +0 -213
  406. package/scripts/dot/lib/bento.sh +0 -50
  407. package/scripts/dot/lib/log.sh +0 -200
  408. package/scripts/dot/lib/platform.sh +0 -112
  409. package/scripts/dot/lib/ui.sh +0 -650
  410. package/scripts/dot/lib/utils.sh +0 -377
  411. package/scripts/maintenance/check-updates.sh +0 -131
  412. 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 | `dot_local/bin/executable_dot-theme-sync` | `tests/unit/theme/test_dot_theme_sync.sh` | `docs/guides/THEMING.md`, `docs/reference/THEMES.md`, `docs/reference/SCRIPTS.md` |
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,7 +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 | `scripts/docs/build-manual.sh`, `scripts/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` |
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
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
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
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.502
97
- **Dotfiles Version**: v0.2.502
98
- Version: v0.2.502
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.502
391
+ **Version**: v0.2.503
392
392
  **Maintainer**: Principal Automation Engineer
393
393
  **Status**: Production Ready ✅
@@ -21,11 +21,12 @@ This document tracks what is supported on Windows-native PowerShell 7.4 LTS / 7.
21
21
 
22
22
  | Command | Windows-native | WSL2 | macOS | Linux |
23
23
  |---|---|---|---|---|
24
- | `dot version` | Full | Full | Full | Full |
25
- | `dot help` | Full | Full | Full | Full |
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
26
  | `dot doctor` | Full (subset of checks; some Unix-only checks return N/A) | Full | Full | Full |
27
27
  | `dot init <user>` | Full (requires `chezmoi` on PATH — install via `scoop install chezmoi`) | Full | Full | Full |
28
- | `dot agents render` / `check` / `list` | Stub (bash-bridgedrequires bash on PATH; the smoke test calls `bash dot agents check` from pwsh) | 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 |
29
30
  | `dot fleet status` / `drift` / `events` | Full | Full | Full | Full |
30
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 |
31
32
  | `dot fleet namespace set` | Full | Full | Full | Full |
@@ -51,11 +52,11 @@ This document tracks what is supported on Windows-native PowerShell 7.4 LTS / 7.
51
52
  | `dot version` exits 0 | windows-latest, ubuntu-latest, macos-latest, macos-14 |
52
53
  | `dot help` exits 0 | windows-latest, ubuntu-latest, macos-latest, macos-14 |
53
54
  | `dot agents check` exits 0 | windows-latest (via bash on PATH), ubuntu-latest, macos-latest, macos-14 |
54
- | PowerShell ≥ 7.4 | windows-latest (smoke test at `scripts/ci/windows-smoke-test.ps1`) |
55
+ | PowerShell ≥ 7.4 | windows-latest (smoke test at `tools/ci/windows-smoke-test.ps1`) |
55
56
  | PSScriptAnalyzer Error-level findings | windows-latest |
56
57
  | `chezmoi --version` exits 0 | windows-latest (via scoop), all Unix matrices |
57
- | `bash scripts/ci/dot-cli-startup-bench.sh` median < 200ms | macos-latest |
58
- | `bash scripts/ci/dot-cli-startup-bench.sh` median < 150ms | ubuntu-latest |
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 |
59
60
 
60
61
  ## Known parity gaps (deferred to follow-up PRs)
61
62
 
@@ -69,7 +70,7 @@ These are scoped in [`ROADMAP_2026 §C5`](../operations/ROADMAP_2026.md) but not
69
70
  ## Source-of-truth files
70
71
 
71
72
  - `.github/workflows/ci.yml` — `test-windows` job (pwsh + scoop + chezmoi + smoke)
72
- - `scripts/ci/windows-smoke-test.ps1` — the actual gate
73
+ - `tools/ci/windows-smoke-test.ps1` — the actual gate
73
74
  - `dot_config/powershell/Microsoft.PowerShell_profile.ps1` — the deployed PowerShell profile (if present)
74
75
  - `scripts/dot/lib/platform.sh` — the dot_path_to_unix/native bridge (H9 audit fix)
75
76
 
@@ -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
- `scripts/ci/install-chezmoi-verified.sh`.
104
+ `tools/ci/install-chezmoi-verified.sh`.
105
105
 
106
106
  ## Updating this page
107
107
 
@@ -8,7 +8,7 @@ Every external dependency the CI pipeline consumes must be pinned by
8
8
  40-hex commit SHA. The policy applies to:
9
9
 
10
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 `scripts/ci/lint-reusable-pins.sh`).
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
12
  3. **Container base images** — `FROM image:tag@sha256:<digest>` (closed by [#886](https://github.com/sebastienrousseau/dotfiles/pull/886)).
13
13
  4. **Release binaries downloaded at build time** — `curl … && echo "<sha256> ..." | sha256sum -c` (closed by [#888](https://github.com/sebastienrousseau/dotfiles/pull/888)).
14
14
 
@@ -50,15 +50,21 @@ uses: sebastienrousseau/dotfiles/.github/workflows/reusable-shell-lint.yml@maste
50
50
  uses: sebastienrousseau/dotfiles/.github/workflows/reusable-shell-lint.yml@v0.2.501
51
51
  ```
52
52
 
53
- The `lint-reusable-pins` job in `ci.yml` runs `scripts/ci/lint-reusable-pins.sh`
53
+ The `lint-reusable-pins` job in `ci.yml` runs `tools/ci/lint-reusable-pins.sh`
54
54
  on every workflow change. The lint fails the build on any of the
55
55
  rejected forms above.
56
56
 
57
57
  ## Refreshing pinned SHAs
58
58
 
59
- Reusable workflows in this repo are the only same-repo dependency
60
- Dependabot doesn't auto-bump. Refresh manually after a change to a
61
- reusable:
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.
62
68
 
63
69
  ```sh
64
70
  # 1. Land the change to the reusable on master via a PR.
@@ -73,14 +79,15 @@ find .github/workflows -name '*.yml' -exec sed -i.bak -E \
73
79
  rm -f .github/workflows/*.bak
74
80
 
75
81
  # 4. Verify the lint still passes:
76
- bash scripts/ci/lint-reusable-pins.sh
82
+ bash tools/ci/lint-reusable-pins.sh
77
83
 
78
84
  # 5. Land the bump on a follow-up PR with a single-purpose commit:
79
85
  git commit -am "chore(ci): bump reusable-workflow pins to ${PIN:0:10}"
80
86
  ```
81
87
 
82
- We treat the manual bump as **deliberate**, not a chore it forces
83
- a reviewer to confirm the new reusable content is intentional.
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.
84
91
 
85
92
  ## Dependabot
86
93
 
@@ -108,6 +115,7 @@ merge time.
108
115
  ## See also
109
116
 
110
117
  - [#855](https://github.com/sebastienrousseau/dotfiles/issues/855) — original tracking issue.
111
- - `scripts/ci/lint-reusable-pins.sh` — the enforcement script.
118
+ - `tools/ci/lint-reusable-pins.sh` — the enforcement script.
112
119
  - `tests/unit/ci/test_reusable_pin_lint.sh` — the negative test.
120
+ - `.github/workflows/bump-reusable-pins.yml` — the auto-bump bot.
113
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).
@@ -19,7 +19,7 @@ Managed under [#877](https://github.com/sebastienrousseau/dotfiles/issues/877).
19
19
 
20
20
  ## Active exceptions
21
21
 
22
- _(none currently)_
22
+ *(none currently)*
23
23
 
24
24
  ## Adding an exception
25
25
 
@@ -79,7 +79,7 @@ auto-fail the gate even when they're still listed here.
79
79
 
80
80
  ## References
81
81
 
82
- - [`scripts/ci/check-deps-dev.sh`](../../scripts/ci/check-deps-dev.sh) — the scanner.
82
+ - [`tools/ci/check-deps-dev.sh`](../../tools/ci/check-deps-dev.sh) — the scanner.
83
83
  - [`.github/workflows/deps-dev-validation.yml`](../../.github/workflows/deps-dev-validation.yml) — CI wiring.
84
84
  - [`tests/unit/security/test_check_deps_dev.sh`](../../tests/unit/security/test_check_deps_dev.sh) — contract test against canned fixtures.
85
85
  - [deps.dev API reference](https://docs.deps.dev/api/v3/).
@@ -0,0 +1,114 @@
1
+ ---
2
+ title: "Fuzzing"
3
+ date: 2026-05-17
4
+ ---
5
+
6
+ # Fuzzing
7
+
8
+ The project ships native-Go fuzz harnesses for every user-input
9
+ parsing surface in the framework. The harnesses run locally via
10
+ `go test -fuzz`, in CI on every PR via `.github/workflows/fuzz.yml`,
11
+ and (pending upstream submission) continuously on Google's OSS-Fuzz
12
+ infrastructure.
13
+
14
+ ## Why Go fuzzing
15
+
16
+ The framework is bash. Bash has no first-class fuzzing framework
17
+ that OpenSSF Scorecard recognises (Scorecard scores `Fuzzing` 0
18
+ unless the project ships an integration with one of: OSS-Fuzz,
19
+ ClusterFuzzLite, native Go fuzz, libFuzzer, Atheris). The
20
+ pragmatic path is to **port each user-input parsing surface
21
+ into a small Go function**, run the fuzzer against the Go port,
22
+ and keep the Go port in lockstep with the shell original via
23
+ identical regex / control-flow.
24
+
25
+ Drift between the shell and Go port IS the bug class the
26
+ fuzzer is designed to surface — if the Go port accepts a string
27
+ the shell rejects (or vice-versa), one of them has a hole.
28
+
29
+ ## Harnesses today
30
+
31
+ | Harness | Mirrors | What it proves |
32
+ |---------|---------|----------------|
33
+ | `FuzzValidateName` | `scripts/dot/lib/utils.sh:101` (`validate_name`) | Every accepted name contains only `[a-zA-Z0-9._-]`; no shell metacharacter slips through; empty input refused. |
34
+ | `FuzzInitURLResolver` | `scripts/dot/commands/init.sh` (URL construction in `dot init <user\|owner/repo\|url>`) | Accepted URLs use `https://` / `git@` / `ssh://` only; plain HTTP refused; no shell metacharacters in constructed URLs; one input shape per acceptable form. |
35
+
36
+ Add a harness when:
37
+
38
+ - a new `dot <subcommand>` accepts user input via `$1` / `--flag`,
39
+ - a new regex appears in `scripts/dot/lib/utils.sh`,
40
+ - a new "construct a URL / path / shell-eval string" code path lands.
41
+
42
+ ## Running locally
43
+
44
+ ```sh
45
+ cd oss-fuzz-integration/fuzz
46
+
47
+ # 30-second smoke (find regressions quickly)
48
+ go test -run TestNothing -fuzz=FuzzValidateName -fuzztime=30s ./...
49
+ go test -run TestNothing -fuzz=FuzzInitURLResolver -fuzztime=30s ./...
50
+
51
+ # Longer run when investigating a flake
52
+ go test -run TestNothing -fuzz=FuzzValidateName -fuzztime=10m ./...
53
+ ```
54
+
55
+ Failures land in `testdata/fuzz/Fuzz<Name>/` as auto-saved
56
+ reproducers. Commit them — they become permanent regression
57
+ guards via `go test ./...`.
58
+
59
+ ## OSS-Fuzz integration (pending)
60
+
61
+ The `oss-fuzz-integration/` directory contains everything OSS-Fuzz
62
+ needs to onboard this project:
63
+
64
+ ```
65
+ oss-fuzz-integration/
66
+ ├── project.yaml # OSS-Fuzz project metadata
67
+ ├── Dockerfile # build environment
68
+ ├── build.sh # compiles every harness in fuzz/
69
+ └── fuzz/ # the harnesses themselves
70
+ ├── go.mod
71
+ ├── validate_name_test.go
72
+ └── init_url_resolver_test.go
73
+ ```
74
+
75
+ To onboard:
76
+
77
+ 1. Fork `github.com/google/oss-fuzz`.
78
+ 2. Copy `oss-fuzz-integration/` contents to `projects/dotfiles/` in the fork.
79
+ 3. Verify locally per <https://google.github.io/oss-fuzz/getting-started/new-project-guide/#testing-locally>:
80
+
81
+ ```sh
82
+ python infra/helper.py build_image dotfiles
83
+ python infra/helper.py build_fuzzers --sanitizer address dotfiles
84
+ python infra/helper.py check_build dotfiles
85
+ python infra/helper.py run_fuzzer dotfiles fuzz_validate_name
86
+ ```
87
+
88
+ 4. Open a PR to `google/oss-fuzz` per <https://google.github.io/oss-fuzz/getting-started/accepting-new-projects/>.
89
+ 5. Once merged, OSS-Fuzz schedules continuous runs on GCP; findings land as private issues in the OSS-Fuzz tracker and are mirrored to the maintainer email in `project.yaml`.
90
+ 6. Update `docs/security/SCORECARD.md` — Scorecard's `Fuzzing` check recognises OSS-Fuzz projects automatically (0 → 10).
91
+
92
+ The upstream PR opens the door to the **CIFuzz** GitHub Action,
93
+ which runs OSS-Fuzz-style fuzzing on every PR in this repo
94
+ (separate from the local-go-fuzz CI job).
95
+
96
+ ## CI workflow
97
+
98
+ `.github/workflows/fuzz.yml` (planned) runs each harness for
99
+ 60 seconds on every PR touching:
100
+
101
+ - `scripts/dot/lib/utils.sh`
102
+ - `scripts/dot/commands/init.sh`
103
+ - `oss-fuzz-integration/**`
104
+
105
+ This is the local equivalent of CIFuzz and catches the
106
+ "shell-regex-change without Go-port update" drift class before
107
+ PR merge.
108
+
109
+ ## See also
110
+
111
+ - `docs/security/SCORECARD.md` — `Fuzzing` check tracking.
112
+ - [Go native fuzzing tutorial](https://go.dev/doc/tutorial/fuzz).
113
+ - [OSS-Fuzz new project guide](https://google.github.io/oss-fuzz/getting-started/new-project-guide/).
114
+ - [CIFuzz GitHub Action](https://google.github.io/oss-fuzz/getting-started/continuous-integration/).
@@ -27,7 +27,7 @@ the install never starts.
27
27
  ### 2. The `chezmoi` binary (always verified when possible)
28
28
 
29
29
  `install.sh` prefers the bundled checksum-verified installer at
30
- `scripts/ci/install-chezmoi-verified.sh`, which:
30
+ `tools/ci/install-chezmoi-verified.sh`, which:
31
31
 
32
32
  - Resolves the platform (`uname -s` + `uname -m`).
33
33
  - Downloads `chezmoi_<version>_<os>_<arch>.tar.gz` AND the matching
@@ -115,7 +115,7 @@ PR.
115
115
  ## References
116
116
 
117
117
  - `install.sh` — the entry point.
118
- - `scripts/ci/install-chezmoi-verified.sh` — the SHA256-pinned
118
+ - `tools/ci/install-chezmoi-verified.sh` — the SHA256-pinned
119
119
  chezmoi installer.
120
120
  - `tests/unit/install/test_install_chezmoi_verified.sh` — the
121
121
  negative test.
@@ -19,8 +19,8 @@ They include:
19
19
  ## Local packaging
20
20
 
21
21
  ```bash
22
- bash scripts/release/package-policy-bundles.sh --version 2026.03
23
- bash scripts/release/package-policy-bundles.sh --json
22
+ bash tools/release/package-policy-bundles.sh --version 2026.03
23
+ bash tools/release/package-policy-bundles.sh --json
24
24
  ```
25
25
 
26
26
  ## Release workflow