@sebastienrousseau/dotfiles 0.2.520 → 0.2.522

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 (323) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/LICENSE-APACHE +190 -0
  3. package/LICENSE-MIT +21 -0
  4. package/README.md +43 -37
  5. package/install.sh +76 -10
  6. package/package.json +7 -7
  7. package/tools/README.md +49 -0
  8. package/tools/ci/install-chezmoi-verified.sh +68 -0
  9. package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
  10. package/docs/AI.md +0 -179
  11. package/docs/ARCHITECTURE.md +0 -117
  12. package/docs/CNAME +0 -1
  13. package/docs/CONFIG_STRATEGY.md +0 -124
  14. package/docs/COPYRIGHT +0 -7
  15. package/docs/ECOSYSTEM.md +0 -220
  16. package/docs/GOLD-STANDARD-AUDIT.md +0 -352
  17. package/docs/GOVERNANCE.md +0 -98
  18. package/docs/MAINTAINERS.md +0 -41
  19. package/docs/MINIMUM-TOOLCHAIN.md +0 -100
  20. package/docs/NAMING_CONVENTIONS.md +0 -102
  21. package/docs/OPENCODE.md +0 -127
  22. package/docs/README.md +0 -84
  23. package/docs/STRUCTURE.md +0 -102
  24. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
  25. package/docs/adr/ADR-002-shell-performance.md +0 -130
  26. package/docs/adr/ADR-003-security-first.md +0 -158
  27. package/docs/adr/ADR-004-cli-architecture.md +0 -171
  28. package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
  29. package/docs/adr/ADR-006-shell-selection.md +0 -124
  30. package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
  31. package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
  32. package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
  33. package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
  34. package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
  35. package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
  36. package/docs/adr/README.md +0 -40
  37. package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
  38. package/docs/architecture/ARCHITECTURE.md +0 -20
  39. package/docs/architecture/INTEROP.md +0 -44
  40. package/docs/architecture/REPO_LAYOUT.md +0 -241
  41. package/docs/architecture/WALKTHROUGH.md +0 -86
  42. package/docs/architecture/fleet-deployment.md +0 -77
  43. package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
  44. package/docs/archive/LEGACY_ROADMAP.md +0 -6
  45. package/docs/archive/MILESTONE_v0.2.493.md +0 -47
  46. package/docs/archive/PLAN.md +0 -199
  47. package/docs/archive/REPO_AUDIT.md +0 -31
  48. package/docs/articles/.pages +0 -6
  49. package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
  50. package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
  51. package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
  52. package/docs/articles/index.md +0 -36
  53. package/docs/guides/INSTALL.md +0 -144
  54. package/docs/guides/MACOS_ICLOUD_SYMLINKS.md +0 -121
  55. package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
  56. package/docs/guides/THEMING.md +0 -230
  57. package/docs/guides/TROUBLESHOOTING.md +0 -176
  58. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
  59. package/docs/index.md +0 -132
  60. package/docs/interop/A2A.md +0 -39
  61. package/docs/interop/POWERSHELL.md +0 -102
  62. package/docs/manual/00-introduction.md +0 -89
  63. package/docs/manual/01-concepts/01-architecture.md +0 -138
  64. package/docs/manual/01-concepts/02-trust-model.md +0 -183
  65. package/docs/manual/01-concepts/03-theme-engine.md +0 -186
  66. package/docs/manual/01-concepts/04-fleet.md +0 -148
  67. package/docs/manual/01-concepts/05-self-healing.md +0 -204
  68. package/docs/manual/02-tutorials/01-first-install.md +0 -197
  69. package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
  70. package/docs/manual/02-tutorials/03-create-profile.md +0 -244
  71. package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
  72. package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
  73. package/docs/manual/03-reference/01-dot-cli.md +0 -475
  74. package/docs/manual/03-reference/02-config-files.md +0 -265
  75. package/docs/manual/03-reference/03-environment.md +0 -124
  76. package/docs/manual/03-reference/04-templates.md +0 -190
  77. package/docs/manual/03-reference/05-feature-flags.md +0 -187
  78. package/docs/manual/04-cookbook/01-recipes.md +0 -285
  79. package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
  80. package/docs/manual/04-cookbook/03-faq.md +0 -175
  81. package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
  82. package/docs/manual/05-appendices/B-security-checklist.md +0 -85
  83. package/docs/manual/05-appendices/C-glossary.md +0 -40
  84. package/docs/manual/05-appendices/D-bibliography.md +0 -58
  85. package/docs/manual/05-appendices/E-license.md +0 -38
  86. package/docs/manual/_toc.yml +0 -58
  87. package/docs/manual/command-index.md +0 -175
  88. package/docs/manual/concept-index.md +0 -170
  89. package/docs/manual/index.md +0 -66
  90. package/docs/migration/README.md +0 -81
  91. package/docs/migration/from-bare-git-repo.md +0 -156
  92. package/docs/migration/from-gnu-stow.md +0 -165
  93. package/docs/migration/from-plain-chezmoi.md +0 -148
  94. package/docs/migration/from-yadm.md +0 -187
  95. package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
  96. package/docs/operations/ATTESTATION.md +0 -44
  97. package/docs/operations/CI_CADENCE.md +0 -107
  98. package/docs/operations/CI_COMPOSITES.md +0 -156
  99. package/docs/operations/COMPLETIONS.md +0 -123
  100. package/docs/operations/COVERAGE.md +0 -204
  101. package/docs/operations/DRIFT.md +0 -107
  102. package/docs/operations/HARD_AUDIT_2026.md +0 -631
  103. package/docs/operations/MAINTENANCE.md +0 -63
  104. package/docs/operations/MANIFEST.md +0 -127
  105. package/docs/operations/MIGRATION.md +0 -109
  106. package/docs/operations/OPERATIONS.md +0 -188
  107. package/docs/operations/PERFORMANCE.md +0 -133
  108. package/docs/operations/PERFORMANCE_BUDGETS.md +0 -196
  109. package/docs/operations/REGISTRY.md +0 -90
  110. package/docs/operations/RELEASE_PIPELINE.md +0 -128
  111. package/docs/operations/RELIABILITY.md +0 -122
  112. package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
  113. package/docs/operations/ROADMAP.md +0 -10
  114. package/docs/operations/ROADMAP_2026.md +0 -7
  115. package/docs/operations/ROADMAP_V0_2_503.md +0 -10
  116. package/docs/operations/TESTING.md +0 -216
  117. package/docs/operations/TRACEABILITY.md +0 -44
  118. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
  119. package/docs/operations/VERSION_SYNC.md +0 -393
  120. package/docs/packaging.md +0 -222
  121. package/docs/reference/ALIASES.md +0 -131
  122. package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
  123. package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
  124. package/docs/reference/FEATURE-MATRIX.md +0 -646
  125. package/docs/reference/FEATURES.md +0 -66
  126. package/docs/reference/FONTS.md +0 -112
  127. package/docs/reference/POWERSHELL_PARITY.md +0 -82
  128. package/docs/reference/PROFILES.md +0 -69
  129. package/docs/reference/SCREENSHOTS.md +0 -121
  130. package/docs/reference/SCRIPTS.md +0 -71
  131. package/docs/reference/SUPPORT_MATRIX.md +0 -80
  132. package/docs/reference/THEMES.md +0 -117
  133. package/docs/reference/TOOLS.md +0 -110
  134. package/docs/reference/UTILS.md +0 -243
  135. package/docs/registry.json +0 -6
  136. package/docs/schema/dot-env-v1.json +0 -110
  137. package/docs/schema/dot-registry-v1.json +0 -33
  138. package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
  139. package/docs/security/AUDIT_BYPASS.md +0 -103
  140. package/docs/security/AUTOMATION_SECRETS.md +0 -26
  141. package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
  142. package/docs/security/CI_PINNING.md +0 -129
  143. package/docs/security/COMMIT_SIGNING.md +0 -138
  144. package/docs/security/COMPLIANCE.md +0 -458
  145. package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
  146. package/docs/security/DISCLOSURE.md +0 -130
  147. package/docs/security/ENCRYPTION.md +0 -57
  148. package/docs/security/FMEA.md +0 -159
  149. package/docs/security/FUZZING.md +0 -209
  150. package/docs/security/HISTORY_FILTERING.md +0 -132
  151. package/docs/security/INCIDENT_RESPONSE.md +0 -579
  152. package/docs/security/INSTALL_VERIFICATION.md +0 -122
  153. package/docs/security/KEYS.md +0 -49
  154. package/docs/security/KEY_ROTATION.md +0 -303
  155. package/docs/security/MCP_POLICY.md +0 -78
  156. package/docs/security/POLICY_RELEASES.md +0 -37
  157. package/docs/security/README.md +0 -28
  158. package/docs/security/SCORECARD.md +0 -195
  159. package/docs/security/SECRETS.md +0 -158
  160. package/docs/security/SECURITY.md +0 -45
  161. package/docs/security/SECURITY_CHECKLIST.md +0 -55
  162. package/docs/security/SHELL_EXEMPTIONS.md +0 -145
  163. package/docs/security/SOUP_REGISTER.md +0 -36
  164. package/docs/security/THREAT_MODEL.md +0 -130
  165. package/docs/security/VERIFICATION_VALIDATION.md +0 -228
  166. package/docs/security/VERIFY_RELEASE.md +0 -201
  167. package/docs/security/security-pubkey.asc +0 -15
  168. package/docs/stylesheets/extra.css +0 -444
  169. package/docs/themes/README.md +0 -10
  170. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
  171. package/docs/themes/hero-shot.svg +0 -78
  172. package/scripts/README.md +0 -123
  173. package/scripts/ci/check-copyright-headers.sh +0 -8
  174. package/scripts/ci/check-shell-preamble.sh +0 -8
  175. package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
  176. package/scripts/demo/record.sh +0 -43
  177. package/scripts/diagnostics/a2a-conformance.sh +0 -163
  178. package/scripts/diagnostics/alias-governance.sh +0 -165
  179. package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
  180. package/scripts/diagnostics/aliases-manifest.sh +0 -77
  181. package/scripts/diagnostics/attest-verify.sh +0 -147
  182. package/scripts/diagnostics/benchmark.sh +0 -408
  183. package/scripts/diagnostics/conflicts.sh +0 -73
  184. package/scripts/diagnostics/doctor-unified.sh +0 -43
  185. package/scripts/diagnostics/doctor.sh +0 -797
  186. package/scripts/diagnostics/drift-dashboard.sh +0 -203
  187. package/scripts/diagnostics/health.sh +0 -656
  188. package/scripts/diagnostics/history-analysis.sh +0 -86
  189. package/scripts/diagnostics/mcp-doctor.sh +0 -582
  190. package/scripts/diagnostics/perf.sh +0 -453
  191. package/scripts/diagnostics/scorecard.sh +0 -120
  192. package/scripts/diagnostics/secret-governance.sh +0 -65
  193. package/scripts/diagnostics/security-score.sh +0 -467
  194. package/scripts/diagnostics/smoke-test.sh +0 -88
  195. package/scripts/diagnostics/snapshot.sh +0 -90
  196. package/scripts/diagnostics/verify.sh +0 -108
  197. package/scripts/diagnostics/verify_state.sh +0 -73
  198. package/scripts/diagnostics/version-locks.sh +0 -94
  199. package/scripts/diagnostics/workstation-attestation.sh +0 -212
  200. package/scripts/dot/commands/agent.sh +0 -535
  201. package/scripts/dot/commands/agents.sh +0 -352
  202. package/scripts/dot/commands/ai.sh +0 -600
  203. package/scripts/dot/commands/aliases.sh +0 -277
  204. package/scripts/dot/commands/appearance.sh +0 -110
  205. package/scripts/dot/commands/completion.sh +0 -171
  206. package/scripts/dot/commands/core.sh +0 -217
  207. package/scripts/dot/commands/diagnostics.sh +0 -265
  208. package/scripts/dot/commands/env-emit.sh +0 -203
  209. package/scripts/dot/commands/fleet.sh +0 -711
  210. package/scripts/dot/commands/init.sh +0 -185
  211. package/scripts/dot/commands/lint.sh +0 -208
  212. package/scripts/dot/commands/manual.sh +0 -169
  213. package/scripts/dot/commands/meta.sh +0 -438
  214. package/scripts/dot/commands/patterns.sh +0 -55
  215. package/scripts/dot/commands/registry.sh +0 -455
  216. package/scripts/dot/commands/restore.sh +0 -232
  217. package/scripts/dot/commands/secrets.sh +0 -296
  218. package/scripts/dot/commands/security.sh +0 -102
  219. package/scripts/dot/commands/tools.sh +0 -570
  220. package/scripts/dot/data/alias-deprecations.tsv +0 -2
  221. package/scripts/dot/powershell/Dot.psm1 +0 -319
  222. package/scripts/fonts/install-nerd-fonts.sh +0 -75
  223. package/scripts/fonts/patch-fonts.sh +0 -36
  224. package/scripts/git-hooks/install.sh +0 -12
  225. package/scripts/git-hooks/pre-commit +0 -12
  226. package/scripts/git-hooks/pre-commit-audit.sh +0 -146
  227. package/scripts/git-hooks/pre-push +0 -105
  228. package/scripts/git-hooks/prepare-commit-msg +0 -29
  229. package/scripts/lib/secrets_provider.sh +0 -200
  230. package/scripts/nvim/headless-upgrade.lua +0 -81
  231. package/scripts/ops/ai-setup.sh +0 -71
  232. package/scripts/ops/bundle.sh +0 -104
  233. package/scripts/ops/chaos.sh +0 -50
  234. package/scripts/ops/chezmoi-apply.sh +0 -333
  235. package/scripts/ops/chezmoi-diff.sh +0 -16
  236. package/scripts/ops/chezmoi-remove.sh +0 -46
  237. package/scripts/ops/chezmoi-update.sh +0 -67
  238. package/scripts/ops/heal-chezmoi.sh +0 -87
  239. package/scripts/ops/heal-system.sh +0 -129
  240. package/scripts/ops/heal-tools.sh +0 -297
  241. package/scripts/ops/heal.sh +0 -223
  242. package/scripts/ops/post-apply-repair.sh +0 -107
  243. package/scripts/ops/prewarm.sh +0 -128
  244. package/scripts/ops/release.sh +0 -262
  245. package/scripts/ops/rollback.sh +0 -613
  246. package/scripts/ops/setup.sh +0 -138
  247. package/scripts/ops/teleport.sh +0 -34
  248. package/scripts/qa/check-feature-matrix.sh +0 -296
  249. package/scripts/qa/check-version-consistency.sh +0 -12
  250. package/scripts/qa/coverage-baseline.sh +0 -61
  251. package/scripts/qa/docs-coverage.sh +0 -118
  252. package/scripts/qa/examples-coverage.sh +0 -94
  253. package/scripts/qa/powershell-contract.ps1 +0 -95
  254. package/scripts/qa/reliability-audit.sh +0 -139
  255. package/scripts/qa/scorecard-snapshot.sh +0 -128
  256. package/scripts/qa/traceability-coverage.sh +0 -124
  257. package/scripts/qa/validate-examples.sh +0 -90
  258. package/scripts/qa/wsl-contract.sh +0 -12
  259. package/scripts/secrets/age-init.sh +0 -82
  260. package/scripts/secrets/create-secrets-file.sh +0 -46
  261. package/scripts/secrets/encrypt-ssh-key.sh +0 -44
  262. package/scripts/security/backup.sh +0 -58
  263. package/scripts/security/check-disclosure-key-expiry.sh +0 -111
  264. package/scripts/security/dns-doh.sh +0 -52
  265. package/scripts/security/encryption-check.sh +0 -55
  266. package/scripts/security/enforce-policies.sh +0 -552
  267. package/scripts/security/firewall.sh +0 -91
  268. package/scripts/security/lock-configs.sh +0 -67
  269. package/scripts/security/lock-screen.sh +0 -56
  270. package/scripts/security/manage-secrets.sh +0 -429
  271. package/scripts/security/ssh-cert.sh +0 -204
  272. package/scripts/security/telemetry-kill.sh +0 -51
  273. package/scripts/security/usb-safety.sh +0 -52
  274. package/scripts/theme/apply-gnome-theme.sh +0 -333
  275. package/scripts/theme/extract-heic-frames.sh +0 -115
  276. package/scripts/theme/extract-theme.py +0 -1020
  277. package/scripts/theme/install-boot-logo.sh +0 -63
  278. package/scripts/theme/install-catppuccin-themes.sh +0 -371
  279. package/scripts/theme/install-cursors.sh +0 -26
  280. package/scripts/theme/install-file-icons.sh +0 -27
  281. package/scripts/theme/install-grub-theme.sh +0 -62
  282. package/scripts/theme/install-lock-icon.sh +0 -31
  283. package/scripts/theme/merge-wallpaper.sh +0 -146
  284. package/scripts/theme/rebuild-themes.sh +0 -603
  285. package/scripts/theme/switch.sh +0 -476
  286. package/scripts/theme/wallpaper-rotate.sh +0 -137
  287. package/scripts/theme/wallpaper-sync.sh +0 -690
  288. package/scripts/tools/cmatrix.sh +0 -22
  289. package/scripts/tools/detect-collisions.py +0 -103
  290. package/scripts/tools/emoji-picker.sh +0 -49
  291. package/scripts/tools/figlet-banner.sh +0 -19
  292. package/scripts/tools/log-rotate.sh +0 -31
  293. package/scripts/tools/lolcat-wrap.sh +0 -20
  294. package/scripts/tools/pipes.sh +0 -49
  295. package/scripts/tuning/linux.sh +0 -186
  296. package/scripts/tuning/macos.sh +0 -56
  297. package/scripts/uninstall.sh +0 -86
  298. package/scripts/verify-release-versions +0 -156
  299. package/scripts/version-sync.sh +0 -714
  300. package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
  301. package/templates/chezmoi-data/mac-m1.toml.example +0 -16
  302. package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
  303. package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
  304. package/templates/projects/go/.github/workflows/ci.yml +0 -31
  305. package/templates/projects/go/README.md +0 -7
  306. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
  307. package/templates/projects/go/go.mod +0 -3
  308. package/templates/projects/go/go.sum +0 -0
  309. package/templates/projects/molecule/README.md +0 -7
  310. package/templates/projects/molecule/converge.yml +0 -7
  311. package/templates/projects/molecule/molecule.yml +0 -16
  312. package/templates/projects/node/.github/workflows/ci.yml +0 -30
  313. package/templates/projects/node/README.md +0 -7
  314. package/templates/projects/node/package-lock.json +0 -12
  315. package/templates/projects/node/package.json +0 -10
  316. package/templates/projects/node/src/index.js +0 -3
  317. package/templates/projects/packer/README.md +0 -15
  318. package/templates/projects/packer/main.pkr.hcl +0 -15
  319. package/templates/projects/python/.github/workflows/ci.yml +0 -34
  320. package/templates/projects/python/README.md +0 -7
  321. package/templates/projects/python/pyproject.toml +0 -25
  322. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
  323. package/templates/projects/python/tests/test_basic.py +0 -3
@@ -1,228 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Verification and Validation Report
6
-
7
- ## Document Control
8
-
9
- | Field | Value |
10
- |-------|-------|
11
- | Document ID | VV-DOT-001 |
12
- | Version | 0.2.501 |
13
- | Date | 2026-03-20 |
14
- | Author | Repository Maintainer |
15
- | Status | Active |
16
- | Classification | Internal |
17
- | Standard | ISO 13485:2016 Sections 7.3.6 / 7.3.7 (adapted) |
18
-
19
- ---
20
-
21
- ## Purpose
22
-
23
- This document constitutes the formal Verification and Validation (V&V) report for the chezmoi-managed dotfiles repository, adapted from ISO 13485:2016 Sections 7.3.6 (Design and Development Verification) and 7.3.7 (Design and Development Validation) for infrastructure-as-code.
24
-
25
- **Verification** confirms that each design output meets its corresponding design input requirement through inspection, analysis, and testing. **Validation** confirms that the deployed system satisfies its intended use under representative operating conditions (Linux, macOS, WSL).
26
-
27
- All verification activities are executed through automated CI pipelines, pre-commit hooks, and the repository test framework. Evidence is retained in CI logs, test output, and this document.
28
-
29
- ---
30
-
31
- ## Verification Matrix
32
-
33
- | Req ID | Requirement | Verification Method | Test File(s) | Result |
34
- |--------|-------------|---------------------|--------------|--------|
35
- | VR-01 | Shell scripts pass ShellCheck (severity=error) | Static analysis via `shellcheck --severity=error -e SC1091 -e SC2030 -e SC2031` | `ci.yml`, `ci-enforced.yml`, pre-commit hook | Pass |
36
- | VR-02 | All scripts have `set -euo pipefail` | Pattern scan across all `.sh` files; CI enforcement | `ci-enforced.yml`, `compliance-guard.yml` | Pass |
37
- | VR-03 | No secrets in source control (gitleaks clean) | Gitleaks scan with `config/gitleaks.toml` ruleset | Pre-commit hook, `security-enhanced.yml` | Pass |
38
- | VR-04 | Cross-platform compatibility (BSD + GNU) | Dual-platform CI matrix (ubuntu-latest, macos-latest) | `cross-platform-test.yml` | Pass |
39
- | VR-05 | TLS enforcement (no insecure curl/wget) | Pattern blocking for `curl -k`, `--insecure`, `wget --no-check-certificate` | Pre-commit hook, `compliance-guard.yml` | Pass |
40
- | VR-06 | Permission controls (no chmod 777/666) | CI pattern scan blocks world-writable permissions | Pre-commit hook, `compliance-guard.yml` | Pass |
41
- | VR-07 | Signed commits enforced | Pre-push hook verifies `git verify-commit` for all commits in range | `scripts/git-hooks/pre-push`, `compliance-guard.yml` | Pass |
42
- | VR-08 | Conventional commit format | Pre-commit hook validates `feat:`, `fix:`, `docs:` prefixes | Pre-commit hook (conventional-commits) | Pass |
43
- | VR-09 | Template rendering correctness | `chezmoi apply --dry-run` on Linux and macOS CI runners | `ci.yml` (Linux + macOS matrix), `tests/unit/test_*.sh` | Pass |
44
- | VR-10 | Alias system functional | Unit tests source alias files and verify command availability | `tests/unit/aliases/test_*.sh` (104 files) | Pass |
45
- | VR-11 | Neovim config loads without errors | Headless Neovim launch with error detection | `tests/unit/neovim/test_*.sh` (15 files) | Pass |
46
- | VR-12 | Fish/Zsh/Nushell configs valid | Syntax validation and functional tests per shell | `tests/unit/fish/` (33), `tests/unit/shell/` (12), `tests/unit/nushell/` (5) | Pass |
47
- | VR-13 | CI pipelines execute successfully | GitHub Actions workflow status across all triggers | `ci.yml`, `ci-enforced.yml`, `compliance-guard.yml`, `cross-platform-test.yml`, `security-enhanced.yml`, `codeql.yml` | Pass |
48
- | VR-14 | Pre-commit hooks functional | Hook execution via `pre-commit run --all-files` | `config/pre-commit-config.yaml` | Pass |
49
- | VR-15 | Age encryption operational | Chezmoi age-encrypted file decryption during apply | `chezmoi apply --dry-run` (encrypted targets), integration tests | Pass |
50
-
51
- ---
52
-
53
- ## Validation Summary
54
-
55
- ### Coverage Metrics
56
-
57
- | Metric | Value | Threshold | Status |
58
- |--------|-------|-----------|--------|
59
- | Total test files | 430 | N/A | Measured |
60
- | Total assertions | 2,217 | N/A | Measured |
61
- | Pass rate | 100% | 100% | Pass |
62
- | Module coverage | 100% | >= 95% | Pass |
63
-
64
- ### Category Breakdown
65
-
66
- | Category | Test Files | Status |
67
- |----------|-----------|--------|
68
- | Alias files | 104 | Tested |
69
- | Function files | 76 | Tested |
70
- | Fish functions + conf.d | 33 | Tested |
71
- | Misc / compliance | 34 | Tested |
72
- | Dot CLI | 30 | Tested |
73
- | Diagnostics | 28 | Tested |
74
- | Shell configs | 20 | Tested |
75
- | Ops | 18 | Tested |
76
- | Install | 17 | Tested |
77
- | Security | 16 | Tested |
78
- | Neovim Lua configs | 15 | Tested |
79
- | Theme | 11 | Tested |
80
- | Tools | 7 | Tested |
81
- | Nushell configs | 6 | Tested |
82
- | Secrets | 5 | Tested |
83
- | Integration tests | 10 | Tested |
84
- | **Total** | **430** | **All pass** |
85
-
86
- ### Validation Environments
87
-
88
- | Environment | OS | Shell | Bash Version | Status |
89
- |-------------|-----|-------|--------------|--------|
90
- | CI (Linux) | Ubuntu latest | Bash | 5.x | Validated |
91
- | CI (macOS) | macOS latest | Zsh | 3.2 (system) | Validated |
92
- | Local (Linux) | CachyOS / Arch | Fish, Zsh, Bash | 5.x | Validated |
93
- | Local (WSL) | Ubuntu | Bash | 5.x | Validated |
94
-
95
- ---
96
-
97
- ## Test Framework Architecture
98
-
99
- ### Directory Structure
100
-
101
- ```
102
- tests/
103
- ├── framework/
104
- │ ├── test_runner.sh # Test executor — discovers and runs all test_*.sh files
105
- │ ├── assertions.sh # 16 assertion functions (assert_equals, assert_contains, etc.)
106
- │ └── mocks.sh # Mock utilities for isolating external dependencies
107
- ├── unit/
108
- │ ├── aliases/ # Alias and command-surface tests
109
- │ ├── functions/ # Function behavior tests
110
- │ ├── dot-cli/ # `dot` command workflow tests
111
- │ ├── shell/ # Shell integration and completion tests
112
- │ ├── fish/ # Fish function and completion tests
113
- │ ├── nushell/ # Nushell configuration tests
114
- │ ├── nvim/ # Neovim configuration tests
115
- │ └── test_*.sh # 425 unit test files total
116
- ├── integration/
117
- │ └── test_*.sh # 11 integration test files
118
- └── performance/
119
- └── benchmark_runner.sh # Performance regression benchmarks
120
- ```
121
-
122
- ### Execution Model
123
-
124
- 1. `test_runner.sh` recursively discovers all `test_*.sh` files under `tests/`.
125
- 2. Each test file is executed in a subshell with `assertions.sh` sourced.
126
- 3. Tests source bash files directly from the repository (not Go templates).
127
- 4. `mocks.sh` provides stubs for external tools (`chezmoi`, `git`, `brew`, etc.).
128
- 5. Exit codes and assertion counts are aggregated into a final report.
129
-
130
- ### Assertion Library
131
-
132
- | Function | Purpose |
133
- |----------|---------|
134
- | `assert_equals` | Exact string equality |
135
- | `assert_not_equals` | String inequality |
136
- | `assert_contains` | Substring match |
137
- | `assert_not_contains` | Substring absence |
138
- | `assert_starts_with` | Prefix match |
139
- | `assert_ends_with` | Suffix match |
140
- | `assert_matches` | Regex match |
141
- | `assert_file_exists` | File presence |
142
- | `assert_file_not_exists` | File absence |
143
- | `assert_directory_exists` | Directory presence |
144
- | `assert_command_exists` | Command availability |
145
- | `assert_exit_code` | Process exit code |
146
- | `assert_empty` | Empty string |
147
- | `assert_not_empty` | Non-empty string |
148
- | `assert_true` | Boolean truth |
149
- | `assert_false` | Boolean false |
150
-
151
- ---
152
-
153
- ## Traceability Matrix
154
-
155
- This matrix maps compliance controls from COMPLIANCE.md to verification requirements defined in this document.
156
-
157
- ### SOC 2 Type II Traceability
158
-
159
- | SOC 2 Control | Description | Verification Requirement(s) |
160
- |---------------|-------------|----------------------------|
161
- | CC6.1 | Logical Access Security | VR-06 (Permission controls), VR-15 (Age encryption) |
162
- | CC6.8 | Unauthorized Code Protection | VR-07 (Signed commits), VR-03 (No secrets) |
163
- | CC7.1 | System Operations | VR-05 (TLS enforcement), VR-13 (CI pipelines) |
164
- | CC7.2 | Change Detection | VR-14 (Pre-commit hooks), VR-08 (Conventional commits) |
165
- | CC8.1 | Change Management | VR-07 (Signed commits), VR-08 (Conventional commits), VR-13 (CI pipelines) |
166
- | A1.2 | Audit Logs | VR-13 (CI pipelines — logs retained in GitHub Actions) |
167
-
168
- ### ISO 27001 Traceability
169
-
170
- | ISO Control | Description | Verification Requirement(s) |
171
- |-------------|-------------|----------------------------|
172
- | A.9.1.1 | Access Control Policy | VR-06 (Permission controls), VR-15 (Age encryption) |
173
- | A.9.4.1 | Information Access Restriction | VR-06 (No chmod 777/666) |
174
- | A.12.1.2 | Change Management | VR-07 (Signed commits), VR-08 (Conventional commits) |
175
- | A.12.6.1 | Technical Vulnerability Management | VR-03 (Gitleaks), VR-05 (TLS enforcement) |
176
- | A.13.1.1 | Network Controls | VR-05 (TLS enforcement) |
177
- | A.14.2.5 | Secure Engineering | VR-01 (ShellCheck), VR-02 (set -euo pipefail), VR-04 (Cross-platform) |
178
- | A.14.2.8 | System Security Testing | VR-09 (Template rendering), VR-10 (Aliases), VR-11 (Neovim), VR-12 (Shell configs) |
179
-
180
- ### GDPR / Privacy Traceability
181
-
182
- | Requirement | Description | Verification Requirement(s) |
183
- |-------------|-------------|----------------------------|
184
- | Data Minimization | Limit data collection | VR-03 (No secrets in source) |
185
- | Integrity | Protect against tampering | VR-07 (Signed commits), VR-14 (Pre-commit hooks) |
186
- | Encryption | Protect data at rest | VR-15 (Age encryption operational) |
187
-
188
- ---
189
-
190
- ## Acceptance Criteria
191
-
192
- All of the following criteria must be satisfied for this V&V report to remain valid.
193
-
194
- | Criterion | Verification Method | Required Outcome |
195
- |-----------|---------------------|------------------|
196
- | All unit and integration tests pass | `./tests/framework/test_runner.sh` | Exit code 0, 0 failures |
197
- | ShellCheck clean | `shellcheck --severity=error` on all `.sh` files | Zero findings |
198
- | Gitleaks clean | `gitleaks detect --config config/gitleaks.toml` | Zero findings |
199
- | Chezmoi dry-run clean | `chezmoi apply --dry-run` on Linux and macOS | Exit code 0, no errors |
200
- | Pre-commit hooks pass | `pre-commit run --all-files` | Exit code 0 |
201
- | Cross-platform CI green | `cross-platform-test.yml` on ubuntu-latest and macos-latest | All jobs pass |
202
- | Module coverage at threshold | Test runner coverage report | >= 95% (currently 100%) |
203
- | No world-writable permissions | `compliance-guard.yml` pattern scan | Zero `chmod 777` or `chmod 666` matches |
204
- | No insecure TLS patterns | `compliance-guard.yml` pattern scan | Zero `curl -k` or `wget --no-check-certificate` matches |
205
- | All commits signed | `git verify-commit` on HEAD~50..HEAD range | All commits verified |
206
-
207
- ---
208
-
209
- ## Sign-off
210
-
211
- | Role | Name | Date | Signature |
212
- |------|------|------|-----------|
213
- | Repository Owner | | | |
214
- | Security Reviewer | | | |
215
- | Quality Assurance | | | |
216
- | Release Manager | | | |
217
-
218
- ---
219
-
220
- ## References
221
-
222
- - [ISO 13485:2016](https://www.iso.org/standard/59752.html) — Medical devices, Quality management systems
223
- - [ISO 27001:2022](https://www.iso.org/standard/27001) — Information security management
224
- - [SOC 2 Type II](https://www.aicpa.org/soc2) — Trust Services Criteria
225
- - [SLSA Framework](https://slsa.dev/) — Supply chain Levels for Software Artifacts
226
- - [ShellCheck](https://www.shellcheck.net/) — Static analysis for shell scripts
227
- - [Gitleaks](https://gitleaks.io/) — Secrets detection
228
- - [Chezmoi](https://www.chezmoi.io/) — Dotfiles manager
@@ -1,201 +0,0 @@
1
- ---
2
- title: "Verify a Release"
3
- date: 2026-05-17
4
- ---
5
-
6
- # Verifying a Release
7
-
8
- Every release of the framework ships four independent attestations.
9
- Verify any of them, they're orthogonal and each rules out a
10
- different class of attack.
11
-
12
- | Artefact | Format | Tool | Threat covered |
13
- |----------|--------|------|----------------|
14
- | **SBOM** (`dotfiles-sbom.spdx.json`) | SPDX 2.3 JSON | any SBOM viewer | "what's in the release?", full component inventory |
15
- | **Cosign signature** (`.sig` + `.pem`) | sigstore keyless | `cosign verify-blob` | "did our CI actually produce this SBOM?", short-lived Fulcio cert + Rekor transparency-log entry |
16
- | **SLSA provenance** (`.intoto.jsonl`) | in-toto v1 / SLSA L3 | `slsa-verifier` | "what build process produced this?", workflow ID, source ref, builder identity |
17
- | **Unified manifest** (`ALL_SHA256SUMS` + `.sig` + `.pem`) | text + sigstore keyless | `cosign verify-blob` then `sha256sum -c` | "is every other asset on this release the one our CI produced?", one signed line per asset |
18
-
19
- All four are attached to every GitHub Release as assets, from v0.2.503 forward.
20
- Releases v0.2.500 through v0.2.502 carry the SBOM bundle only: the unified
21
- manifest landed in v0.2.503 and is forward-only (re-tagging earlier releases
22
- would break consumer pins on existing SHAs).
23
-
24
- ---
25
-
26
- ## TL;DR — verify v0.2.503+ end-to-end
27
-
28
- ```sh
29
- # 0. Pick the release to verify
30
- TAG=v0.2.503
31
- REPO=sebastienrousseau/dotfiles
32
-
33
- # 1. Download every attestation artefact
34
- gh release download "$TAG" --repo "$REPO" \
35
- --pattern dotfiles-sbom.spdx.json \
36
- --pattern dotfiles-sbom.spdx.json.sig \
37
- --pattern dotfiles-sbom.spdx.json.pem \
38
- --pattern dotfiles-sbom.spdx.json.intoto.jsonl \
39
- --pattern ALL_SHA256SUMS \
40
- --pattern ALL_SHA256SUMS.sig \
41
- --pattern ALL_SHA256SUMS.pem
42
-
43
- # 2. Verify Cosign signature on the SBOM (binds SBOM to CI workflow identity)
44
- cosign verify-blob \
45
- --certificate dotfiles-sbom.spdx.json.pem \
46
- --signature dotfiles-sbom.spdx.json.sig \
47
- --certificate-identity-regexp "^https://github.com/$REPO/" \
48
- --certificate-oidc-issuer https://token.actions.githubusercontent.com \
49
- dotfiles-sbom.spdx.json
50
-
51
- # 3. Verify SLSA provenance (binds SBOM to exact source tag + builder)
52
- slsa-verifier verify-artifact dotfiles-sbom.spdx.json \
53
- --provenance-path dotfiles-sbom.spdx.json.intoto.jsonl \
54
- --source-uri "github.com/$REPO" \
55
- --source-tag "$TAG"
56
-
57
- # 4. Verify the unified manifest, then verify every other asset against it.
58
- # One signed file covers all release artefacts in one shot.
59
- cosign verify-blob \
60
- --certificate ALL_SHA256SUMS.pem \
61
- --signature ALL_SHA256SUMS.sig \
62
- --certificate-identity-regexp "^https://github.com/$REPO/" \
63
- --certificate-oidc-issuer https://token.actions.githubusercontent.com \
64
- ALL_SHA256SUMS
65
-
66
- gh release download "$TAG" --repo "$REPO" --dir . # pull every other asset
67
- sha256sum -c ALL_SHA256SUMS # one line per asset
68
- ```
69
-
70
- All four commands should print "Verified" / "PASSED" / "OK" and
71
- exit 0. If any fails, **the release was tampered with**: open
72
- an issue at <https://github.com/sebastienrousseau/dotfiles/issues>
73
- and do **not** install.
74
-
75
- ---
76
-
77
- ## Tool installation
78
-
79
- | Tool | macOS | Linux | Windows |
80
- |------|-------|-------|---------|
81
- | `gh` (GitHub CLI) | `brew install gh` | `apt install gh` / [release page](https://github.com/cli/cli/releases) | `scoop install gh` |
82
- | `cosign` | `brew install cosign` | `curl -sSfL https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64 -o /usr/local/bin/cosign && chmod +x /usr/local/bin/cosign` | `scoop install cosign` |
83
- | `slsa-verifier` | `brew install slsa-verifier` | `go install github.com/slsa-framework/slsa-verifier/v2/cli/slsa-verifier@latest` | `scoop install slsa-verifier` |
84
-
85
- If you don't have Go installed, fetch the pre-built `slsa-verifier`
86
- binary from <https://github.com/slsa-framework/slsa-verifier/releases>
87
- (SHA256-verify per their release notes).
88
-
89
- ---
90
-
91
- ## What each verification actually proves
92
-
93
- ### `cosign verify-blob` succeeds
94
-
95
- - The SBOM was signed by a workflow run **on this repository** (the
96
- `--certificate-identity-regexp` enforces it).
97
- - The signing OIDC token was issued by **GitHub Actions** (the
98
- `--certificate-oidc-issuer` enforces it).
99
- - The signature is recorded in the **Rekor public transparency log**
100
- (cosign queries this automatically) — anyone can audit it.
101
- - The Cosign cert was issued by **Fulcio** (the sigstore CA) and
102
- was valid at the time of signing.
103
-
104
- This **does not** prove what the build process did — only that
105
- "the file you have is the file CI produced." For "what did CI do",
106
- see SLSA verification below.
107
-
108
- ### `slsa-verifier verify-artifact` succeeds
109
-
110
- - The SBOM digest matches a provenance statement.
111
- - The provenance was generated by the **SLSA-Generator** running on
112
- **GitHub-hosted runners** for **this exact repository**.
113
- - The build was triggered by the named tag (`--source-tag $TAG`).
114
- - The provenance is anchored in Rekor (immutable, third-party-auditable).
115
-
116
- SLSA Level 3 is achieved because: (a) the provenance is generated
117
- by a *trusted, isolated* builder (slsa-github-generator), not by
118
- us; (b) the builder runs with hermetic, non-falsifiable inputs;
119
- (c) the provenance is signed by the builder's own identity, not
120
- ours.
121
-
122
- ### What none of this proves
123
-
124
- The framework's source code is **not formally verified**. SBOM +
125
- SLSA + Cosign protect the *supply chain* (you got what we shipped)
126
- — not the *correctness* (what we shipped does what we claim).
127
-
128
- For correctness review:
129
-
130
- - Code is open under MIT — read it. Start at `bin/dot`.
131
- - CI runs ~75 checks per PR (shellcheck, shfmt, CodeQL, Semgrep, Codacy, etc.).
132
- - Pre-commit hooks reject typos, unsigned commits, raw secrets.
133
- - See `docs/security/SCORECARD.md` for the OpenSSF score posture.
134
-
135
- ---
136
-
137
- ## In-shell one-liner for ongoing verification
138
-
139
- If you intend to install or update from a release tag, add this to
140
- your shell startup (already in `dot_config/shell/*` for users who
141
- run `chezmoi apply`):
142
-
143
- ```sh
144
- verify-dot-release() {
145
- local tag="${1:-$(gh release view --json tagName --jq .tagName \
146
- --repo sebastienrousseau/dotfiles)}"
147
- local tmp
148
- tmp="$(mktemp -d)"
149
- ( cd "$tmp" \
150
- && gh release download "$tag" --repo sebastienrousseau/dotfiles \
151
- --pattern 'dotfiles-sbom.*' \
152
- && cosign verify-blob \
153
- --certificate dotfiles-sbom.spdx.json.pem \
154
- --signature dotfiles-sbom.spdx.json.sig \
155
- --certificate-identity-regexp '^https://github.com/sebastienrousseau/dotfiles/' \
156
- --certificate-oidc-issuer https://token.actions.githubusercontent.com \
157
- dotfiles-sbom.spdx.json \
158
- && slsa-verifier verify-artifact dotfiles-sbom.spdx.json \
159
- --provenance-path dotfiles-sbom.spdx.json.intoto.jsonl \
160
- --source-uri github.com/sebastienrousseau/dotfiles \
161
- --source-tag "$tag"
162
- )
163
- local rc=$?
164
- rm -rf "$tmp"
165
- return $rc
166
- }
167
- ```
168
-
169
- Usage:
170
-
171
- ```sh
172
- verify-dot-release # verify latest
173
- verify-dot-release v0.2.502 # verify specific tag
174
- ```
175
-
176
- ---
177
-
178
- ## If verification fails
179
-
180
- 1. **Don't install.** Stop the bootstrap script. `^C` any in-flight
181
- `chezmoi apply`.
182
- 2. **Compare assets**. The release page shows file sizes — if
183
- yours don't match what's on
184
- <https://github.com/sebastienrousseau/dotfiles/releases>, you
185
- downloaded from a man-in-the-middle.
186
- 3. **Report**: open an issue and email
187
- `security@sebastienrousseau.com` (encrypted to the WKD-published
188
- GPG key — fingerprint
189
- `55AFAD364FD9DB3819E61F0C8D688FAFA9144693`). Acknowledgement
190
- SLA: 72 hours per `SECURITY.md`.
191
-
192
- ---
193
-
194
- ## See also
195
-
196
- - `SECURITY.md` — coordinated disclosure policy.
197
- - `docs/security/KEY_ROTATION.md` — disclosure-key rotation procedure.
198
- - `docs/security/SCORECARD.md` — OpenSSF Scorecard posture.
199
- - `docs/operations/HARD_AUDIT_2026.md` Part 7 — the GPG key generation + WKD publication record.
200
- - [Sigstore Cosign docs](https://docs.sigstore.dev/cosign/signing/overview/)
201
- - [SLSA verifier docs](https://github.com/slsa-framework/slsa-verifier)
@@ -1,15 +0,0 @@
1
- -----BEGIN PGP PUBLIC KEY BLOCK-----
2
-
3
- mDMEagg20hYJKwYBBAHaRw8BAQdAk2HMi5IFTHBGhCtSFzqwsyuVb7mO0iIhoUXR
4
- mTv/PNK0R1NlYmFzdGllbiBSb3Vzc2VhdSAoRG90ZmlsZXMgU2VjdXJpdHkpIDxz
5
- ZWN1cml0eUBzZWJhc3RpZW5yb3Vzc2VhdS5jb20+iLUEExYKAF0WIQRVr602T9nb
6
- OBnmHwyNaI+vqRRGkwUCagg20hsUgAAAAAAEAA5tYW51MiwyLjUrMS4xMiwwLDMC
7
- GwMFCQWjmoAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQjWiPr6kURpOH
8
- qQEA4gl4pfhkR9Y3IM6oMHydavrx3CE6mX4YRIkYJ7fYj4UA/iO/54bdjG+wmIrE
9
- cQ077+ijTTCMnHrosn3E13oQ6NIJuDgEagg20hIKKwYBBAGXVQEFAQEHQKdKJLxe
10
- xsXBXELbxGHUz2asoTuOnsKk8WEdOyESH3dnAwEIB4iUBBgWCgA8FiEEVa+tNk/Z
11
- 2zgZ5h8MjWiPr6kURpMFAmoINtIbFIAAAAAABAAObWFudTIsMi41KzEuMTIsMCwz
12
- AhsMAAoJEI1oj6+pFEaTUw0A/14oNMWsx1gcyx9wl/vy+OgEXoOksxSV+FetAI2Q
13
- Q7qOAP9pohjVAi40dqfBXv3vet7CV0V4p2kQ+qpQTOPTVafkDA==
14
- =UtsL
15
- -----END PGP PUBLIC KEY BLOCK-----