@sebastienrousseau/dotfiles 0.2.502 → 0.2.504

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 +109 -9
  2. package/LICENSE +21 -1283
  3. package/README.md +6 -4
  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 +118 -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 +5 -5
  56. package/scripts/diagnostics/conflicts.sh +2 -2
  57. package/scripts/diagnostics/doctor-unified.sh +3 -3
  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 +5 -5
  64. package/scripts/diagnostics/scorecard.sh +4 -4
  65. package/scripts/diagnostics/security-score.sh +25 -6
  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 +13 -3
  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 +156 -37
  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 +22 -16
  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 +3 -3
  92. package/scripts/git-hooks/pre-push +13 -0
  93. package/scripts/ops/ai-setup.sh +1 -1
  94. package/scripts/ops/bundle.sh +3 -3
  95. package/scripts/ops/chaos.sh +2 -2
  96. package/scripts/ops/chezmoi-apply.sh +12 -6
  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 +31 -2
  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 +74 -10
  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,199 @@
1
+ # Dot — native PowerShell module for the dotfiles framework.
2
+ #
3
+ # This module provides native PowerShell cmdlets for the subset of
4
+ # `dot` subcommands that don't require bash. Closes Stub rows in
5
+ # docs/reference/POWERSHELL_PARITY.md.
6
+ #
7
+ # Loaded by bin/dot.ps1 dispatcher; cmdlets are also callable
8
+ # directly:
9
+ # Import-Module ./scripts/dot/powershell/Dot.psm1
10
+ # Get-DotVersion
11
+ # Invoke-DotHelp
12
+ # Test-DotAgentsSync -Verbose
13
+ #
14
+ # Tested via scripts/ci/windows-smoke-test.ps1.
15
+
16
+ #requires -Version 7.0
17
+
18
+ Set-StrictMode -Version Latest
19
+ $ErrorActionPreference = 'Stop'
20
+
21
+ # Module-level constants -------------------------------------------------------
22
+
23
+ $script:RepoRoot = if ($env:DOT_REPO_ROOT) {
24
+ $env:DOT_REPO_ROOT
25
+ }
26
+ else {
27
+ # When called from bin/dot.ps1 the dispatcher sets DOT_REPO_ROOT.
28
+ # When imported directly, infer it from this file's path:
29
+ # scripts/dot/powershell/Dot.psm1 → ../../..
30
+ (Resolve-Path (Join-Path $PSScriptRoot '..\..\..')).Path
31
+ }
32
+
33
+ # Post-Phase-4b (v0.2.503) .chezmoidata.toml ships under defaults/.
34
+ # Probe defaults/ first; fall back to legacy root location for older
35
+ # deployments that pre-date the .chezmoiroot activation.
36
+ $script:DataFile = Join-Path $script:RepoRoot 'defaults/.chezmoidata.toml'
37
+ if (-not (Test-Path $script:DataFile)) {
38
+ $script:DataFile = Join-Path $script:RepoRoot '.chezmoidata.toml'
39
+ }
40
+
41
+ # Helpers ---------------------------------------------------------------------
42
+
43
+ function script:Get-DotfilesVersionFromData {
44
+ if (-not (Test-Path $script:DataFile)) {
45
+ throw "Cannot read $script:DataFile (set DOT_REPO_ROOT to override)"
46
+ }
47
+ $line = Get-Content $script:DataFile |
48
+ Where-Object { $_ -match '^dotfiles_version\s*=\s*"([^"]+)"' } |
49
+ Select-Object -First 1
50
+ if (-not $line) {
51
+ throw "dotfiles_version not found in $script:DataFile"
52
+ }
53
+ if ($line -notmatch '"([^"]+)"') {
54
+ throw "Could not parse dotfiles_version from line: $line"
55
+ }
56
+ return $Matches[1]
57
+ }
58
+
59
+ function script:Write-DotBanner {
60
+ param([string]$Section)
61
+ if ($env:NO_COLOR) {
62
+ Write-Host "Dot · $Section"
63
+ return
64
+ }
65
+ $esc = [char]27
66
+ Write-Host "$esc[1;38;5;212mDot · $Section$esc[0m"
67
+ }
68
+
69
+ # Public cmdlets --------------------------------------------------------------
70
+
71
+ <#
72
+ .SYNOPSIS
73
+ Print the dotfiles framework version.
74
+
75
+ .DESCRIPTION
76
+ Native PowerShell implementation of `dot version`. Reads the
77
+ canonical version from .chezmoidata.toml (the single source of
78
+ truth) — does NOT shell out to bash.
79
+
80
+ .EXAMPLE
81
+ Get-DotVersion
82
+ 0.2.503
83
+
84
+ .EXAMPLE
85
+ Get-DotVersion -AsObject | ConvertTo-Json
86
+ {
87
+ "Version": "0.2.503",
88
+ "Source": "...\\.chezmoidata.toml",
89
+ "Native": true
90
+ }
91
+ #>
92
+ function Get-DotVersion {
93
+ [CmdletBinding()]
94
+ param(
95
+ [switch]$AsObject
96
+ )
97
+ $version = Get-DotfilesVersionFromData
98
+ if ($AsObject) {
99
+ return [pscustomobject]@{
100
+ Version = $version
101
+ Source = $script:DataFile
102
+ Native = $true
103
+ }
104
+ }
105
+ return $version
106
+ }
107
+
108
+ <#
109
+ .SYNOPSIS
110
+ Print the dot CLI help overview.
111
+
112
+ .DESCRIPTION
113
+ Native PowerShell implementation of `dot help`. Reads command
114
+ metadata from CLAUDE.md / the dispatcher's help table; does
115
+ NOT shell out to bash.
116
+
117
+ The full Linux-style help (every subcommand grouped by category)
118
+ requires the bash dispatcher; this cmdlet shows the Windows-
119
+ native subset.
120
+ #>
121
+ function Invoke-DotHelp {
122
+ [CmdletBinding()]
123
+ param()
124
+ $version = Get-DotfilesVersionFromData
125
+ Write-DotBanner -Section 'Help'
126
+ Write-Host ''
127
+ Write-Host " Version v$version"
128
+ Write-Host " Repo https://github.com/sebastienrousseau/dotfiles"
129
+ Write-Host " Docs https://github.com/sebastienrousseau/dotfiles/blob/master/docs/manual/"
130
+ Write-Host ''
131
+ Write-Host 'Native PowerShell commands (no bash required):'
132
+ Write-Host ''
133
+ Write-Host ' Get-DotVersion Print framework version'
134
+ Write-Host ' Invoke-DotHelp This screen'
135
+ Write-Host ' Test-DotAgentsSync Check AGENTS.md ↔ CLAUDE.md sync'
136
+ Write-Host ''
137
+ Write-Host 'Bash-bridged subcommands (require bash on PATH):'
138
+ Write-Host ''
139
+ Write-Host ' dot doctor Deep environment audit'
140
+ Write-Host ' dot env list List installed mise tools'
141
+ Write-Host ' dot env emit Emit v1 environment manifest'
142
+ Write-Host ' dot agents render Re-render every AGENTS.md harness'
143
+ Write-Host ' dot fleet status Single-node fleet status (Full on PowerShell)'
144
+ Write-Host ''
145
+ Write-Host 'See: dot help all (via bash) — full command index'
146
+ }
147
+
148
+ <#
149
+ .SYNOPSIS
150
+ Verify that AGENTS.md is in sync with CLAUDE.md.
151
+
152
+ .DESCRIPTION
153
+ Native PowerShell implementation of `dot agents check`. Both
154
+ files share a "Project Overview" paragraph that is the canonical
155
+ sync surface. If they diverge, AGENTS.md needs re-rendering
156
+ (run `dot agents render` via bash; native PowerShell render is
157
+ a separate ticket).
158
+
159
+ .OUTPUTS
160
+ [bool] — $true when in sync, $false otherwise.
161
+
162
+ .EXAMPLE
163
+ if (-not (Test-DotAgentsSync)) {
164
+ Write-Warning 'AGENTS.md is stale; run: bash dot_local/bin/executable_dot agents render'
165
+ }
166
+ #>
167
+ function Test-DotAgentsSync {
168
+ [CmdletBinding()]
169
+ [OutputType([bool])]
170
+ param()
171
+ $claude = Join-Path $script:RepoRoot 'CLAUDE.md'
172
+ $agents = Join-Path $script:RepoRoot 'AGENTS.md'
173
+ foreach ($f in @($claude, $agents)) {
174
+ if (-not (Test-Path $f)) {
175
+ Write-Error "missing: $f"
176
+ return $false
177
+ }
178
+ }
179
+ # Both files declare: "Chezmoi-managed dotfiles for macOS, Linux,
180
+ # WSL, and PowerShell 7.5+. Version `0.2.503`."
181
+ # That single line is the canonical sync surface — its content
182
+ # is generated from the same template by `dot agents render`.
183
+ $claudeLine = (Select-String -Path $claude -Pattern '^Chezmoi-managed dotfiles' -SimpleMatch:$false |
184
+ Select-Object -First 1).Line
185
+ $agentsLine = (Select-String -Path $agents -Pattern '^Chezmoi-managed dotfiles' -SimpleMatch:$false |
186
+ Select-Object -First 1).Line
187
+ if (-not $claudeLine -or -not $agentsLine) {
188
+ Write-Verbose "sync surface line not found — claude:[$claudeLine] agents:[$agentsLine]"
189
+ return $false
190
+ }
191
+ if ($claudeLine -ne $agentsLine) {
192
+ Write-Verbose "drift detected:`n CLAUDE.md: $claudeLine`n AGENTS.md: $agentsLine"
193
+ return $false
194
+ }
195
+ Write-Verbose 'AGENTS.md sync surface matches CLAUDE.md'
196
+ return $true
197
+ }
198
+
199
+ Export-ModuleMember -Function Get-DotVersion, Invoke-DotHelp, Test-DotAgentsSync
@@ -3,9 +3,9 @@
3
3
  set -euo pipefail
4
4
 
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- # shellcheck source=../dot/lib/ui.sh
6
+ # shellcheck source=../../lib/dot/ui.sh
7
7
  # shellcheck disable=SC1091
8
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
8
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
9
9
 
10
10
  ui_init
11
11
  ui_header "Nerd Fonts"
@@ -6,7 +6,7 @@
6
6
  set -euo pipefail
7
7
 
8
8
  _cleanup_files=()
9
- trap 'rm -f "${_cleanup_files[@]}"' EXIT
9
+ trap 'set +u; rm -f "${_cleanup_files[@]}" 2>/dev/null; set -u' EXIT
10
10
 
11
11
  # ANSI Colors
12
12
  RED='\033[0;31m'
@@ -33,7 +33,7 @@ echo -n " 🔍 Scanning for secrets... "
33
33
  # Exclude assignments to values containing common placeholder strings or within template expressions
34
34
  SENSITIVE_PATTERNS="(GITHUB_TOKEN|API_KEY|SECRET|password|private_key|AKIA[0-9A-Z]{16})[[:space:]]*[:=]"
35
35
  # Exclusions list for legitimate variable checks or documentation
36
- SECRET_EXCLUDES="test_|assertions.sh|.pre-commit|README|CHANGELOG|FEATURES.md|CONFIG_STRATEGY.md|docs/|install/lib/|.chezmoitemplates/|mcp-doctor.sh|\.github/workflows/"
36
+ SECRET_EXCLUDES="test_|assertions.sh|.pre-commit|README|CHANGELOG|FEATURES.md|docs/|install/lib/|.chezmoitemplates/|mcp-doctor.sh|\.github/workflows/"
37
37
  # Also exclude .tmpl files from secret scanning as they contain many false positive markers
38
38
  if echo "$STAGED_FILES" | grep -v "\.tmpl" | xargs grep -EiE "$SENSITIVE_PATTERNS" /dev/null | grep -vE "$SECRET_EXCLUDES" | grep -viE "dummy|placeholder|example|test|sk-placeholder|\\{\\{" >/dev/null 2>&1; then
39
39
  printf '%b\\n' "${RED}FAILED${NC}"
@@ -140,6 +140,6 @@ if [[ $FAILED -eq 1 ]]; then
140
140
  printf '%b\\n' " (Use --no-verify to bypass if absolutely necessary)"
141
141
  exit 1
142
142
  else
143
- printf '%b\n' "${GREEN}${BOLD}✅ Audit passed.${NC} v0.2.502 standards maintained."
143
+ printf '%b\n' "${GREEN}${BOLD}✅ Audit passed.${NC} v0.2.504 standards maintained."
144
144
  exit 0
145
145
  fi
@@ -90,3 +90,16 @@ if [ "${DOTFILES_ALLOW_UNSKIPPED_PUSH:-}" = "1" ]; then
90
90
  fi
91
91
 
92
92
  bash "$repo_root/scripts/qa/reliability-audit.sh" --quick
93
+
94
+ # Step 4 — version-string consistency. Catches the case where the
95
+ # canonical version in .chezmoidata.toml advanced but a human-visible
96
+ # surface (CLI banner, man page, README badge) wasn't bumped. The
97
+ # script is cheap (~8 grep calls); failure tells the user exactly
98
+ # which file drifted and offers --fix.
99
+ bash "$repo_root/scripts/qa/check-version-consistency.sh" --quiet || {
100
+ echo "" >&2
101
+ echo "Pre-push blocked: version-string drift detected." >&2
102
+ echo "Run: scripts/qa/check-version-consistency.sh" >&2
103
+ echo "Then: scripts/qa/check-version-consistency.sh --fix (optional auto-fix)" >&2
104
+ exit 1
105
+ }
@@ -6,7 +6,7 @@ set -euo pipefail
6
6
 
7
7
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
8
8
  # shellcheck disable=SC1091
9
- source "$SCRIPT_DIR/dot/lib/ui.sh"
9
+ source "$SCRIPT_DIR/../lib/dot/ui.sh"
10
10
 
11
11
  ui_header "Universal AI Toolchain Setup"
12
12
 
@@ -5,13 +5,13 @@
5
5
  set -euo pipefail
6
6
 
7
7
  _cleanup_files=()
8
- trap 'rm -f "${_cleanup_files[@]}"' EXIT
8
+ trap 'set +u; rm -f "${_cleanup_files[@]}" 2>/dev/null; set -u' EXIT
9
9
 
10
10
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
11
11
  # shellcheck disable=SC1091
12
- source "$SCRIPT_DIR/dot/lib/ui.sh"
12
+ source "$SCRIPT_DIR/../lib/dot/ui.sh"
13
13
  # shellcheck disable=SC1091
14
- source "$SCRIPT_DIR/dot/lib/log.sh"
14
+ source "$SCRIPT_DIR/../lib/dot/log.sh"
15
15
  export DOT_COMMAND="bundle"
16
16
 
17
17
  # Concurrency guard
@@ -6,9 +6,9 @@
6
6
  set -euo pipefail
7
7
 
8
8
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- # shellcheck source=../dot/lib/ui.sh
9
+ # shellcheck source=../../lib/dot/ui.sh
10
10
  # shellcheck disable=SC1091
11
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
11
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
12
12
  ui_init
13
13
 
14
14
  if [[ "${1:-}" != "--force" ]]; then
@@ -3,17 +3,23 @@
3
3
  set -euo pipefail
4
4
 
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- # shellcheck source=../dot/lib/ui.sh
6
+ # shellcheck source=../../lib/dot/ui.sh
7
7
  # shellcheck disable=SC1091
8
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
9
- # shellcheck source=../dot/lib/log.sh
8
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
9
+ # shellcheck source=../../lib/dot/log.sh
10
10
  # shellcheck disable=SC1091
11
- source "$SCRIPT_DIR/../dot/lib/log.sh"
11
+ source "$SCRIPT_DIR/../../lib/dot/log.sh"
12
12
  export DOT_COMMAND="apply"
13
13
 
14
- # Temp file cleanup
14
+ # Temp file cleanup. `set +u` guards the array expansion: on bash 3.2
15
+ # (macOS) expanding an empty array under `set -u` is an "unbound
16
+ # variable" error, which would fire on every clean `dot sync`.
15
17
  _TMPFILES=()
16
- cleanup() { rm -f "${_TMPFILES[@]}"; }
18
+ cleanup() {
19
+ set +u
20
+ rm -f "${_TMPFILES[@]}" 2>/dev/null
21
+ set -u
22
+ }
17
23
  trap cleanup EXIT
18
24
 
19
25
  # Help flag
@@ -21,12 +21,12 @@ trap cleanup EXIT
21
21
 
22
22
  # Configuration
23
23
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
24
- # shellcheck source=../dot/lib/ui.sh
24
+ # shellcheck source=../../lib/dot/ui.sh
25
25
  # shellcheck disable=SC1091
26
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
27
- # shellcheck source=../dot/lib/log.sh
26
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
27
+ # shellcheck source=../../lib/dot/log.sh
28
28
  # shellcheck disable=SC1091
29
- source "$SCRIPT_DIR/../dot/lib/log.sh"
29
+ source "$SCRIPT_DIR/../../lib/dot/log.sh"
30
30
  DOT_COMMAND="heal"
31
31
  REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
32
32
  DOTFILES_SOURCE="$REPO_ROOT"
@@ -3,9 +3,9 @@
3
3
  set -euo pipefail
4
4
 
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- # shellcheck source=../dot/lib/ui.sh
6
+ # shellcheck source=../../lib/dot/ui.sh
7
7
  # shellcheck disable=SC1091
8
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
8
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
9
9
 
10
10
  ZWC_CACHE_DIRS_DEFAULT=("$HOME/.config/shell" "$HOME/.config/zsh")
11
11
 
@@ -6,9 +6,9 @@ set -euo pipefail
6
6
 
7
7
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
8
8
  # shellcheck disable=SC1091
9
- source "$SCRIPT_DIR/dot/lib/ui.sh"
9
+ source "$SCRIPT_DIR/../lib/dot/ui.sh"
10
10
  # shellcheck disable=SC1091
11
- source "$SCRIPT_DIR/dot/lib/log.sh"
11
+ source "$SCRIPT_DIR/../lib/dot/log.sh"
12
12
  export DOT_COMMAND="prewarm"
13
13
 
14
14
  # Prevent concurrent execution
@@ -10,12 +10,12 @@ set -euo pipefail
10
10
 
11
11
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12
12
  PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
13
- # shellcheck source=../dot/lib/ui.sh
13
+ # shellcheck source=../../lib/dot/ui.sh
14
14
  # shellcheck disable=SC1091
15
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
16
- # shellcheck source=../dot/lib/log.sh
15
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
16
+ # shellcheck source=../../lib/dot/log.sh
17
17
  # shellcheck disable=SC1091
18
- source "$SCRIPT_DIR/../dot/lib/log.sh"
18
+ source "$SCRIPT_DIR/../../lib/dot/log.sh"
19
19
  export DOT_COMMAND="release"
20
20
  ui_init
21
21
 
@@ -14,12 +14,12 @@ trap 'set +u; rm -f "${_cleanup_files[@]}" 2>/dev/null; set -u' EXIT
14
14
 
15
15
  # Configuration
16
16
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17
- # shellcheck source=../dot/lib/ui.sh
17
+ # shellcheck source=../../lib/dot/ui.sh
18
18
  # shellcheck disable=SC1091
19
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
20
- # shellcheck source=../dot/lib/log.sh
19
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
20
+ # shellcheck source=../../lib/dot/log.sh
21
21
  # shellcheck disable=SC1091
22
- source "$SCRIPT_DIR/../dot/lib/log.sh"
22
+ source "$SCRIPT_DIR/../../lib/dot/log.sh"
23
23
  export DOT_COMMAND="rollback"
24
24
  REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
25
25
  # Resolve symlinks for consistent path handling
@@ -6,9 +6,9 @@
6
6
  set -euo pipefail
7
7
 
8
8
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- # shellcheck source=../dot/lib/ui.sh
9
+ # shellcheck source=../../lib/dot/ui.sh
10
10
  # shellcheck disable=SC1091
11
- source "$SCRIPT_DIR/../dot/lib/ui.sh"
11
+ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
12
12
 
13
13
  ui_init
14
14
 
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ #
4
+ # Verify that every "live" version reference matches the canonical
5
+ # version in .chezmoidata.toml. The intent is to catch drift between
6
+ # the source-of-truth and the human-visible surfaces (CLI banner, man
7
+ # page, badge URL, etc.) BEFORE it ships.
8
+ #
9
+ # Historical references (CHANGELOG entries, audit-doc closed-cycle
10
+ # tables, roadmap docs that mention previous versions) are NOT
11
+ # checked — they are intentionally pinned to the version they
12
+ # describe.
13
+ #
14
+ # Usage:
15
+ # scripts/qa/check-version-consistency.sh # verify
16
+ # scripts/qa/check-version-consistency.sh --fix # auto-fix
17
+ # scripts/qa/check-version-consistency.sh --quiet # rc-only
18
+ #
19
+ # Exit codes:
20
+ # 0 every live reference matches
21
+ # 1 drift detected (with diff printed unless --quiet)
22
+ # 2 bad usage / missing canonical version
23
+
24
+ set -euo pipefail
25
+
26
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
27
+ cd "$REPO_ROOT"
28
+
29
+ # ── Parse flags ─────────────────────────────────────────────────────────
30
+ fix=0
31
+ quiet=0
32
+ for arg in "$@"; do
33
+ case "$arg" in
34
+ --fix) fix=1 ;;
35
+ --quiet | -q) quiet=1 ;;
36
+ -h | --help)
37
+ sed -n '2,21p' "$0"
38
+ exit 0
39
+ ;;
40
+ *)
41
+ echo "unknown flag: $arg" >&2
42
+ exit 2
43
+ ;;
44
+ esac
45
+ done
46
+
47
+ _log() { ((quiet)) || printf '%s\n' "$*"; }
48
+ _err() { printf 'check-version-consistency: %s\n' "$*" >&2; }
49
+
50
+ # ── Canonical version ──────────────────────────────────────────────────
51
+ canonical="$(grep -E '^dotfiles_version[[:space:]]*=' defaults/.chezmoidata.toml |
52
+ head -1 | sed -E 's/.*"([^"]+)".*/\1/')"
53
+
54
+ if [[ -z "$canonical" ]]; then
55
+ _err 'failed to read dotfiles_version from defaults/.chezmoidata.toml'
56
+ exit 2
57
+ fi
58
+ _log "canonical: $canonical (defaults/.chezmoidata.toml)"
59
+
60
+ # ── Per-file expected-substring map ────────────────────────────────────
61
+ # Each entry: PATH|MATCH_PATTERN|EXPECTED_STRING
62
+ # MATCH_PATTERN is a fixed substring to grep for on the file to
63
+ # locate the version-bearing line; we then verify it contains the
64
+ # expected substring rendered with $canonical. version-sync.sh
65
+ # already handles many files (it reads package.json as source);
66
+ # this list captures the surfaces version-sync.sh historically
67
+ # missed — bento.sh banner, man-page header, dispatcher header.
68
+ specs=(
69
+ "package.json|\"version\"|\"version\": \"${canonical}\""
70
+ "bin/dot|^VERSION=|VERSION=\"${canonical}\""
71
+ "bin/dot|^# Dotfiles CLI Entry Point - v|# Dotfiles CLI Entry Point - v${canonical}"
72
+ "share/man/man1/dot.1|^.TH DOT 1|dotfiles v${canonical}"
73
+ "lib/dot/bento.sh|D O T F I L E S|[v${canonical}]"
74
+ "README.md|img.shields.io/badge/Version|Version-v${canonical}-blue"
75
+ "CLAUDE.md|^Chezmoi-managed dotfiles|Version \`${canonical}\`"
76
+ "AGENTS.md|^Chezmoi-managed dotfiles|Version \`${canonical}\`"
77
+ )
78
+
79
+ drift=0
80
+ for spec in "${specs[@]}"; do
81
+ IFS='|' read -r path pattern expected <<<"$spec"
82
+ if [[ ! -f "$path" ]]; then
83
+ _err "MISSING: $path (declared in spec list)"
84
+ drift=$((drift + 1))
85
+ continue
86
+ fi
87
+ line="$(grep -E "$pattern" "$path" | head -1 || true)"
88
+ if [[ -z "$line" ]]; then
89
+ _err "PATTERN NOT FOUND: '$pattern' in $path"
90
+ drift=$((drift + 1))
91
+ continue
92
+ fi
93
+ if [[ "$line" != *"$expected"* ]]; then
94
+ _err "DRIFT in $path"
95
+ _err " found: $line"
96
+ _err " expected: contains '$expected'"
97
+ drift=$((drift + 1))
98
+ if ((fix)); then
99
+ # Auto-fix: only safe when the file contains a previous v0.X.YYY
100
+ # we can sed-replace. Skip otherwise.
101
+ old="$(printf '%s' "$line" | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -1)"
102
+ if [[ -n "$old" ]] && [[ "$old" != "v${canonical}" ]]; then
103
+ sed -i.bak "s|${old}|v${canonical}|g" "$path" && rm -f "$path.bak"
104
+ _log " fixed: $path ($old → v${canonical})"
105
+ fi
106
+ fi
107
+ fi
108
+ done
109
+
110
+ if ((drift > 0)); then
111
+ if ((fix)); then
112
+ _log ""
113
+ _log "Auto-fixed where safe. Re-run without --fix to verify."
114
+ else
115
+ _log ""
116
+ _log "Tip: rerun with --fix to auto-correct (only safe substitutions)."
117
+ _log " For non-trivial drift, edit the file manually then re-run."
118
+ fi
119
+ exit 1
120
+ fi
121
+
122
+ _log "all $((${#specs[@]})) live version surfaces match $canonical"
123
+ exit 0
@@ -43,7 +43,7 @@ integration_tests="$(find "$REPO_ROOT/tests/integration" -name 'test_*.sh' | wc
43
43
  total_tests="$(find "$REPO_ROOT/tests" -path '*/framework/*' -prune -o -name 'test_*.sh' -print | wc -l | tr -d ' ')"
44
44
  named_tests="$(rg -o '\btest_start\b' "$REPO_ROOT/tests/unit" "$REPO_ROOT/tests/integration" -g 'test_*.sh' | wc -l | tr -d ' ')"
45
45
  docs_files="$(find "$REPO_ROOT/docs" -type f \( -name '*.md' -o -name '*.md.tmpl' \) | wc -l | tr -d ' ')"
46
- shell_surfaces="$(find "$REPO_ROOT/scripts" "$REPO_ROOT/dot_local/bin" "$REPO_ROOT/.chezmoitemplates/functions" -type f \( -name '*.sh' -o -name 'executable_*' \) | wc -l | tr -d ' ')"
46
+ shell_surfaces="$(find "$REPO_ROOT/scripts" "$REPO_ROOT/defaults/dot_local/bin" "$REPO_ROOT/defaults/.chezmoitemplates/functions" -type f \( -name '*.sh' -o -name 'executable_*' \) | wc -l | tr -d ' ')"
47
47
 
48
48
  printf 'Coverage Baseline\n'
49
49
  printf 'Repository: %s\n' "$REPO_ROOT"
@@ -5,12 +5,12 @@ set -euo pipefail
5
5
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
6
  REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
7
7
 
8
- DOT_CLI="$REPO_ROOT/dot_local/bin/executable_dot"
8
+ DOT_CLI="$REPO_ROOT/bin/dot"
9
9
  UTILS_DOC="$REPO_ROOT/docs/reference/UTILS.md"
10
10
  AI_DOC="$REPO_ROOT/docs/AI.md"
11
11
  SCRIPTS_DOC="$REPO_ROOT/docs/reference/SCRIPTS.md"
12
12
  ARCH_DOC="$REPO_ROOT/docs/architecture/ARCHITECTURE.md"
13
- FUNCTION_GROUPS_JSON="$REPO_ROOT/.chezmoitemplates/functions/groups.json"
13
+ FUNCTION_GROUPS_JSON="$REPO_ROOT/defaults/.chezmoitemplates/functions/groups.json"
14
14
  MIN_DOCS_COVERAGE="${MIN_DOCS_COVERAGE:-100}"
15
15
 
16
16
  TOTAL_CHECKS=0
@@ -16,7 +16,7 @@ $ErrorActionPreference = 'Stop'
16
16
  $Failures = New-Object System.Collections.Generic.List[string]
17
17
 
18
18
  $RepoRoot = if ($env:GITHUB_WORKSPACE) { $env:GITHUB_WORKSPACE } else { (Get-Location).Path }
19
- $ProfileSrc = Join-Path $RepoRoot 'dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl'
19
+ $ProfileSrc = Join-Path $RepoRoot 'defaults/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl'
20
20
 
21
21
  if (-not (Test-Path $ProfileSrc)) {
22
22
  Write-Output "FAIL: profile source not found at $ProfileSrc"