@sebastienrousseau/dotfiles 0.2.520 → 0.2.521

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 +18 -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,196 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
-
5
- # Performance Budgets
6
-
7
- Every operation this repo owns falls into one of four performance tiers. Each tier has a **hard budget** enforced by `benches/test_perf_budgets.sh`. If a change pushes an operation past its budget's headroom, CI fails.
8
-
9
- ## The tiers
10
-
11
- | Tier | Budget | What belongs here |
12
- |---|---|---|
13
- | **INSTANT** | ≤ **500ms** | Anything a human sees at a shell prompt |
14
- | **FAST** | ≤ **2000ms** | Heavier gates + sandboxed CLI reads |
15
- | **MEDIUM** | ≤ **5000ms** | Full diagnostic runs |
16
- | **ACCEPTED-SLOW** | documented | Multi-second ops that are legitimately slow (see below) |
17
- | **OUT-OF-SCOPE** | not gated | Multi-minute ops we don't gate per-run |
18
-
19
- ## Reference baselines (2026-08-30, `rousseau-cachyos-geekom-a9`, Ryzen AI 9 HX 370)
20
-
21
- All medians in milliseconds. Budget = 2× median (or the tier ceiling, whichever is larger).
22
-
23
- ### INSTANT tier
24
-
25
- | Operation | Baseline | Budget | Headroom |
26
- |---|---:|---:|---:|
27
- | `dot version` | 10 | 500 | 50× |
28
- | `dot help` | 13 | 500 | 38× |
29
- | `dot help <cmd>` | 15 | 500 | 33× |
30
- | `dot search <keyword>` | 15 | 500 | 33× |
31
- | iCloud script single-run | 15 | 500 | 33× |
32
-
33
-
34
- ### FAST tier
35
-
36
- Currently empty.
37
-
38
- `dot status` and `dot diff` were placed here at 2000ms against reference
39
- medians of 1510 ms and 1420 ms — 1.3× and 1.4× headroom, short of the ≥ 2×
40
- this document requires of every budget. They have since moved to MEDIUM; see
41
- that section for the measurements that prompted it.
42
-
43
- > The baselines of 28 ms and 32 ms recorded before those were not real. The
44
- > perf sandbox never created chezmoi's source directory, so both commands
45
- > aborted immediately with *"no such file or directory"* — and `_measure`
46
- > discarded exit codes, so the gate timed the failure path and called it
47
- > excellent. The sandbox now links the repo into `XDG_DATA_HOME`.
48
-
49
- The QA gates and test suites that used to sit in this tier moved to GATES
50
- below: they are not interactive operations, so a ceiling defined by
51
- human-perceived latency never described them.
52
-
53
- ### MEDIUM tier
54
-
55
- | Operation | Baseline | Budget | Headroom |
56
- |---|---:|---:|---:|
57
- | `dot status` (sandbox) | 2329 | 5000 | 2.1× |
58
- | `dot diff` (sandbox) | 2157 | 5000 | 2.3× |
59
- | `dot doctor` | 3892 | 5000 | 1.3× |
60
- | `bench.sh --quick` | 826 | 5000 | 6× |
61
-
62
- The `dot status` and `dot diff` baselines are the **worst** of the two hosted
63
- runners, not the reference machine: macOS measured 2290 ms / 2157 ms and Ubuntu
64
- 2329 ms / 2136 ms, against 1139 ms / 1174 ms locally. Two unrelated platforms
65
- agreeing within 8% is a property of the commands rather than of one slow
66
- runner — both shell out to chezmoi, which walks the whole source tree, and that
67
- is disk-bound. A budget taken from the faster machine would have been a gate
68
- that only ever fired on other people's hardware.
69
-
70
- `dot doctor` and `bench.sh --quick` are diagnostics that report findings through
71
- their exit status — `dot doctor` exits 1 whenever it finds issues, and `bench.sh` exits 1
72
- when a shell breaches its own startup threshold. They are gated with
73
- `_gate_diag`, which permits exit 1 but still fails on 2+ (not-found,
74
- permission, signal, syntax error). That is far narrower than the blanket
75
- `|| true` it replaced.
76
-
77
- ### GATES tier (CI quality gates and test suites)
78
-
79
- Budgets are 2× the median measured on the **slowest supported platform**,
80
- not the fastest. Medians below: `rousseau-mbp-m1`, macOS 26 (Darwin 25.6),
81
- 2026-08-30.
82
-
83
- | Operation | macOS median | Linux median | Budget | Headroom |
84
- |---|---:|---:|---:|---:|
85
- | `check-version-consistency.sh` | 68 | 14 | 500 | 7.4× |
86
- | `docs-coverage.sh` | 969 | 148 | 2000 | 2.1× |
87
- | iCloud regression test (12 assertions) | 494 | 94 | 1000 | 2.0× |
88
- | iCloud unit test (29 assertions) | 1743 | 498 | 3500 | 2.0× |
89
- | iCloud manifest test (11 assertions) | 1575 | — † | 5000 | 3.2× |
90
- | `traceability-coverage.sh` | 2389 | 623 | 5000 | 2.1× |
91
- | `test_dot_subcommand_smoke.sh` | 3785 | 1308 | 7500 | 2.0× |
92
- | `test_dot_help_registry_symmetry.sh` | 4449 | 1381 | 9000 | 2.0× |
93
-
94
- † The manifest test hashes an entire sandbox tree before and after every
95
- scenario, so it is disk-bound in a way the other gates are not. Its budget is
96
- set at 3.2× the macOS median rather than the 2.0× used above, deliberately:
97
- `dot status` and `dot diff` were first budgeted at 1.3× and 1.4×, and both
98
- breached on the first CI run that measured them. The Linux median is left
99
- unfilled until CI reports one — guessing it would defeat the point of a table
100
- of measurements.
101
-
102
- These gates run **3–6× slower on macOS than on Linux** — fork/exec is markedly
103
- more expensive there and every one of them is fork-heavy shell. CI covers both
104
- platforms, so the original Linux-only calibration could not hold, and five of
105
- these sat red as a result. Re-capture the Linux column when convenient; it is
106
- carried over from the 2026-08-30 Ryzen baseline and is not the binding
107
- constraint.
108
-
109
- ### ACCEPTED-SLOW (documented, not gated per-run)
110
-
111
- | Operation | Baseline | Reason |
112
- |---|---:|---|
113
- | `test_dot_help_flag_universal.sh` | ~11s | Invokes `dot help --help` on ~100 commands via subshell each. The coverage it provides justifies the cost; regression is caught by `benches/test_help_gates_wall_clock.sh` at the suite level. |
114
-
115
- ### OUT-OF-SCOPE (not gated per-run)
116
-
117
- | Operation | Why we don't gate |
118
- |---|---|
119
- | `chezmoi apply` | Fresh macOS: minutes. Depends on iCloud sync + package installs. Gated at suite level only. |
120
- | `install.sh` full | Downloads + installs packages. Network-bound. |
121
- | `dot upgrade` | Runs `mise upgrade`, `chezmoi apply`, package manager upgrades. |
122
- | Full test suite | 15+ minutes on CI. Gated by workflow timeout, not per-run assertion. |
123
-
124
- ## Ratchet vs aspiration
125
-
126
- The budgets above are **regression gates**, not aspirations. If a real optimisation lowers a baseline, edit the doc + the perf test to lower the budget too. If a change pushes something over the budget, the test fails and CI blocks the merge.
127
-
128
- The aspirational shell-startup target (`<30ms`) is tracked separately in `benches/bench.sh` — that's a bench, not a budget.
129
-
130
- ## Adding a new operation
131
-
132
- When you add a new script that runs at a shell prompt:
133
-
134
- 1. Time it 5 runs on a warm system: `for _ in {1..5}; do time bash your-script; done`
135
- 2. Take the median.
136
- 3. Place it in the tier where `budget ≥ 2 × median`. If a median is 400ms it goes in FAST (500ms is uncomfortably tight); if it's 300ms, INSTANT is fine.
137
- 4. Add it to `benches/test_perf_budgets.sh` in the correct tier section.
138
- 5. Add its baseline to this doc.
139
-
140
- ## Where the enforcement lives
141
-
142
- - **Per-op budget test**: `benches/test_perf_budgets.sh`
143
- - **Suite-level wall-clock ratchet**: `benches/test_help_gates_wall_clock.sh`
144
- - **CI wiring**: `.github/workflows/ci.yml`, job `quality-performance` — runs on
145
- ubuntu-latest and macos-latest for every PR, with no `|| true` and no budget
146
- scaling. On the gates the hosted macOS runner is comparable to or faster than
147
- the reference machine — docs-coverage 679 ms vs 969, traceability 1775 vs
148
- 2389, help-registry 3318 vs 4449, `dot doctor` 1746 vs 4423. The exception is
149
- anything that drives chezmoi over the whole source tree: `dot status` and
150
- `dot diff` measured ~2× the local median on **both** hosted platforms, which
151
- is why they sit in MEDIUM rather than FAST. Budget a new operation against the
152
- slowest platform it will run on, not against this machine.
153
-
154
- ### How the time is measured
155
-
156
- `_measure` uses the `time` keyword with `TIMEFORMAT='%3R'`, not `date +%s%N`.
157
-
158
- `%N` is a GNU extension. BSD `date` — macOS 14 and earlier — copies the literal
159
- `N` through, so every arithmetic conversion failed, `_measure` returned nothing,
160
- and an empty median compares as `0` against any budget. The gate reported every
161
- budget met on those machines, for any command, including one that could not
162
- parse. `time` is a shell builtin, is millisecond-accurate in bash 3.2, and needs
163
- no external clock at all.
164
-
165
- Two consequences worth keeping:
166
-
167
- - `_gate_max_rc` rejects a non-numeric median outright rather than comparing it.
168
- Both fields go through `-gt` / `-le`, where bash reads a non-numeric operand
169
- as `0` — so a gate that cannot measure would otherwise report success.
170
- - `tests/regression/test_gate_integrity.sh` puts a `date` without `%N` first on
171
- `PATH` and requires the same verdicts. A future timing rewrite that
172
- reintroduces the dependency fails there rather than going quiet.
173
-
174
- ## Environment knobs
175
-
176
- | Variable | Default | Effect |
177
- |---|---|---|
178
- | `PERF_BUDGET_PERCENT` | `100` | Scales every budget. `0` makes them all impossible — that is how `test_gate_integrity.sh` proves the gate actually fires. |
179
- | `PERF_GATE_FILTER` | *(unset)* | Runs only gates whose label contains this substring. Skipped gates never call `test_start`, so `TESTS_RUN == PASSED + FAILED` still holds. |
180
- | `DOT_CLI` | `bin/dot` | Points the `dot` gates at another binary, so breakage detection can be exercised against a deliberately corrupted CLI. |
181
-
182
- ## When a budget fires
183
-
184
- The error looks like:
185
-
186
- ```
187
- ✗ instant_dot_help: median=612ms EXCEEDS budget=500ms
188
- ```
189
-
190
- Steps:
191
-
192
- 1. Bisect the change that pushed it over.
193
- 2. Fix the regression, or
194
- 3. If the increase is legitimate (real new work), move the operation to the next tier + update this doc + `test_perf_budgets.sh` in the same PR.
195
-
196
- **Never silently bump the budget.** The tier a thing lives in is a promise to users.
@@ -1,90 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- title: "Dot Module Registry"
4
- description: "How to publish and consume reusable dotfile modules."
5
- ---
6
-
7
- # Dot Module Registry
8
-
9
- The `dot registry` command discovers reusable dotfile modules from a JSON index published over HTTPS. The default registry is hosted by this repo at:
10
-
11
- ```
12
- https://sebastienrousseau.github.io/dotfiles/registry.json
13
- ```
14
-
15
- This page documents the JSON contract and the contribution flow. It is the §3 / Months 12-18 deliverable from [HARD_AUDIT_2026.md](./HARD_AUDIT_2026.md) — the registry is the network-effect feature that turns the framework into a category, not just one person's setup.
16
-
17
- ## Quick start (consumer side)
18
-
19
- ```sh
20
- dot registry list # list every published module
21
- dot registry search rust # filter by keyword
22
- dot registry info rust-dev-setup # full metadata for one module
23
- dot registry install rust-dev-setup # verify and preview changes
24
- dot registry install rust-dev-setup --yes # verify, persist, and apply
25
- dot registry installed # list locally installed modules
26
- dot registry url # show active registry URL
27
- dot registry set-url <url> # point at a different registry
28
- ```
29
-
30
- The registry index is cached locally under `${XDG_CACHE_HOME:-~/.cache}/dotfiles/registry/` with a 6 hour TTL, in a file named for the URL it was fetched from (`index-<digest>.json`) so changing the registry URL never serves the previous registry's index. Override the URL one-off via `DOTFILES_REGISTRY_URL=<url> dot registry list`.
31
-
32
- ## JSON contract
33
-
34
- A registry index is a single JSON document:
35
-
36
- ```json
37
- {
38
- "version": 1,
39
- "updated": "2026-05-15T16:30:00Z",
40
- "registry": "sebastienrousseau/dotfiles",
41
- "modules": [
42
- {
43
- "name": "rust-dev-setup",
44
- "description": "Rust toolchain + cargo plugins + Helix/Neovim editor config",
45
- "repo": "https://github.com/example/rust-dev-setup",
46
- "version": "1.2.0",
47
- "tags": ["rust", "language", "dev"],
48
- "maintainer": "alice@example.com",
49
- "archive_url": "https://example.com/rust-dev-setup-1.2.0.tar.gz",
50
- "sha256": "f9a2c1b0a8d27c41b99c8c93641a0d476a0e54b23161847c47c780025ac7c4a1",
51
- "license": "MIT"
52
- }
53
- ]
54
- }
55
- ```
56
-
57
- Required keys: `name` (kebab-case, no more than 32 characters), `description` (no more than 200 characters), `version` (semver), `archive_url` (immutable HTTPS archive), and `sha256` (64 lowercase hexadecimal characters).
58
-
59
- Optional keys: `repo` (HTTPS project URL), `tags` (lower-case array), `maintainer`, and `license` (SPDX identifier). The machine-readable contract is [`docs/schema/dot-registry-v1.json`](../schema/dot-registry-v1.json).
60
-
61
- ## Contributing a module
62
-
63
- 1. Build a gzip-compressed tar archive containing a chezmoi-source-compatible directory. Publish it at an immutable HTTPS URL, such as a versioned GitHub release asset.
64
- 2. Open a PR against `sebastienrousseau/dotfiles` adding one entry to `docs/registry.json` (alphabetical by `name`).
65
- 3. The PR runs CI checks for:
66
- - Runtime contract validity and unique, sorted module names.
67
- - Valid JSON for both the index and its published JSON Schema.
68
- - A pinned SHA-256 digest for every archive.
69
- 4. Once merged, the GitHub Pages workflow re-deploys the registry; `dot registry list` picks it up within 6 hours (or immediately if the consumer purges the cache).
70
-
71
- ## Install pipeline
72
-
73
- `dot registry install <name>` is preview-first and does not mutate the workstation. Pass `--yes` only after reviewing the chezmoi dry-run. The installer:
74
-
75
- 1. Resolve the module entry from the registry index.
76
- 2. Download the versioned archive using HTTPS and TLS 1.2 or newer.
77
- 3. Verify the archive against the registry's SHA-256 digest.
78
- 4. Reject absolute paths, parent traversal, symbolic links, and hard links before extraction.
79
- 5. Run `chezmoi apply --dry-run` against the isolated module source.
80
- 6. With `--yes`, persist it at `${XDG_DATA_HOME:-~/.local/share}/dotfiles/modules/<name>/<version>` and apply that exact verified source.
81
-
82
- ## Security model
83
-
84
- - Modules execute with the consumer's user privileges via chezmoi scripts. Review the default dry-run and publisher before passing `--yes`.
85
- - The SHA-256 pin binds installation to the reviewed archive bytes, even if the hosting release later changes.
86
- - The registry index itself is fetched over HTTPS; the GitHub Pages cert chain provides transport integrity.
87
-
88
- ## Why this lives in this repo (for now)
89
-
90
- A vendor-neutral registry would be ideal but adds operations cost. Hosting `registry.json` under this repo's `docs/` directory and serving it via GitHub Pages keeps the maintenance burden near zero while the registry is small. If/when the registry outgrows GitHub Pages, the JSON contract is stable and the index can move to a dedicated subdomain.
@@ -1,128 +0,0 @@
1
- ---
2
- title: "Release Pipeline"
3
- date: 2026-05-24
4
- ---
5
-
6
- # Release Pipeline
7
-
8
- End-to-end flow from `git tag v0.2.503 && git push --tags` to a fully
9
- signed, distributed release on GitHub + Homebrew + Scoop + AUR.
10
-
11
- Release workflows are triggered by either `release.created` or
12
- `release.published`. Packaging starts at creation; distribution and the
13
- single security chain start at publication and run in parallel where
14
- dependencies allow.
15
-
16
- ```
17
- git push --tags (you)
18
-
19
-
20
- ┌────────────────────────────┐
21
- │ GitHub creates Release │ (auto, from tag)
22
- └─┬──────────────────────────┘
23
- ├── on: release.created
24
- │ └── release-package-dot.yml
25
- │ → dot-VERSION.tar.gz + .zip
26
-
27
- └── on: release.published
28
-
29
- ├──────────────────────────────────┐
30
- ▼ ▼
31
- ┌─────────────────────────────┐ ┌─────────────────────────────┐
32
- │ release-distribute-*.yml │ │ security-release.yml │
33
- │ ┌─────────────────────┐ │ │ → SBOM + provenance │
34
- │ │ homebrew → tap PR │ │ │ → ALL_SHA256SUMS │
35
- │ │ scoop → bucket PR│ │ │ → cosign sig + cert │
36
- │ │ aur → AUR push │ │ │ → verify full bundle │
37
- │ └─────────────────────┘ │ └─────────────────────────────┘
38
- └─────────────────────────────┘
39
-
40
-
41
- ┌─────────────────────────────┐
42
- │ release-attestation-check │ (Mondays + on demand)
43
- │ → opens issue if missing │
44
- └─────────────────────────────┘
45
- ```
46
-
47
- ## Workflows
48
-
49
- | Workflow | Trigger | Owns | Outputs |
50
- |---|---|---|---|
51
- | `release-package-dot.yml` | `release.created`, dispatch | Build deterministic `dot-VERSION.{tar.gz,zip}` from `bin/`, `lib/`, `share/`, completions. | Two release assets. |
52
- | `security-release.yml` (sbom job) | `release.published`, dispatch | Generate SPDX SBOM via anchore/sbom-action. Cosign keyless sign the SBOM. | `dotfiles-sbom.spdx.json` + `.sig` + `.pem`. |
53
- | `security-release.yml` (provenance job) | needs sbom | SLSA L3 provenance via slsa-framework/slsa-github-generator. | `dotfiles-sbom.spdx.json.intoto.jsonl`. |
54
- | `security-release.yml` (manifest job) | needs provenance + complete asset set | Build `ALL_SHA256SUMS` over every release asset, Cosign-sign it, and verify its signature and digests. | `ALL_SHA256SUMS` + `.sig` + `.pem`. |
55
- | `release-distribute-homebrew.yml` | `release.published`, dispatch | Hash `dot-VERSION.tar.gz`, regenerate `pkg/brew/dot.rb`, push branch + PR to `sebastienrousseau/homebrew-tap`. | One PR on the tap repo. |
56
- | `release-distribute-scoop.yml` | `release.published`, dispatch | Hash `dot-VERSION.zip`, rewrite `pkg/scoop/dot.json` via jq (both 64bit + arm64 point at same zip), PR to `sebastienrousseau/scoop-bucket`. | One PR on the bucket repo. |
57
- | `release-distribute-aur.yml` | `release.published`, dispatch | Hash `dot-VERSION.tar.gz`, rewrite `pkgver` + `sha256sums` in `pkg/aur/PKGBUILD`, regenerate `.SRCINFO` via dockerised `makepkg`, push to `ssh://aur@aur.archlinux.org/dot-cli-git.git`. | One commit on AUR. |
58
- | `release-attestation-check.yml` | weekly cron + dispatch | Verify the latest release carries the full attestation bundle (SBOM + sig + cert + intoto + manifest + sig + cert). | Opens or comments on a tracking issue. |
59
-
60
- ## Event ownership and readiness
61
-
62
- GitHub fires `release.created` the moment a Release record exists.
63
- That starts the packaging step, which depends only on source bytes at
64
- the tag and does not need other assets to be present.
65
-
66
- `release.published` fires later, when a human flips the Release from
67
- draft to public (or when a Release is created already-public, the
68
- events fire together). Distribution and the security chain start from
69
- this event. Publication does not mean independently triggered asset
70
- publishers have finished, so the manifest job waits for all 13 required
71
- package, documentation, SBOM, signature, and provenance assets before
72
- it downloads or signs the bundle. The final integrity job then verifies
73
- the manifest's Cosign identity and every recorded digest.
74
-
75
- Both release and dispatch paths of `security-release.yml` are
76
- idempotent: re-running the manifest job after late asset uploads picks
77
- up the new state and the `--clobber` flag overwrites the previous
78
- manifest sig + cert.
79
-
80
- ## Secrets used
81
-
82
- | Secret | Used by | Setup |
83
- |---|---|---|
84
- | `GITHUB_TOKEN` | every workflow (auto) | n/a |
85
- | `ACTIONS_BOT_SIGNING_KEY` | distribute-* (signed commits on tap repos), `bump-reusable-pins.yml`, `update-deps.yml` | See `docs/security/AUTOMATION_SECRETS.md`. |
86
- | `AUR_SSH_KEY` | `release-distribute-aur.yml` only | SSH ED25519 keypair; public key on the `srousseau` AUR profile, private key in this secret. See `memory/reference_aur_account.md` for the AUR Edit-Account form quirk that bit us during setup. |
87
-
88
- ## Distribution targets
89
-
90
- | Target | Repo | First-run prereq |
91
- |---|---|---|
92
- | Homebrew | `sebastienrousseau/homebrew-tap` | Tap repo exists (currently bare README + LICENSE). Workflow creates the `Formula/dot.rb` path on first publish. |
93
- | Scoop | `sebastienrousseau/scoop-bucket` | Bucket repo exists (currently bare). Workflow creates `bucket/dot.json` on first publish. |
94
- | AUR | `ssh://aur@aur.archlinux.org/dot-cli-git.git` | **Manual one-time step**: the maintainer must create the package entry via the AUR web UI before the workflow's `git clone` can succeed. The workflow exits with a clear error message on the first run if the repo doesn't exist. |
95
-
96
- ## Verifying a release
97
-
98
- See `docs/security/VERIFY_RELEASE.md` for the consumer-facing
99
- verification recipe. The pipeline produces four orthogonal
100
- attestations (SBOM, Cosign signature on SBOM, SLSA provenance,
101
- unified Cosign-signed manifest) and a verifier can check any of them
102
- independently.
103
-
104
- ## Known caveats
105
-
106
- - **AUR `pkgname=dot-cli-git`**: AUR's `-git` convention means
107
- "tracks git HEAD", but the workflow publishes tagged stable
108
- releases. Either rename to plain `dotfiles` in
109
- `pkg/aur/PKGBUILD` and register that package, or accept the
110
- misnomer. Documented in the v0.2.503 PR (#895).
111
- - **Signed-Releases retroactive**: the unified manifest landed in
112
- v0.2.503. Releases v0.2.500-502 carry the SBOM bundle only.
113
- We do not re-tag older releases (would break consumer pins). The
114
- OSSF Scorecard score climbs naturally as new releases land.
115
- - **First-tag rehearsal**: tag a `v0.2.503-rc1` once before the real
116
- v0.2.503 to live-test the full pipeline without burning the final
117
- release tag. The workflows are idempotent so a real v0.2.503 still
118
- works after the rc.
119
-
120
- ## See also
121
-
122
- - `docs/security/VERIFY_RELEASE.md` — consumer-facing verification.
123
- - `docs/security/CI_PINNING.md` — reusable workflow pin policy + the
124
- `bump-reusable-pins.yml` auto-bump bot.
125
- - `docs/security/AUTOMATION_SECRETS.md` — how each automation secret
126
- is generated, scoped, and rotated.
127
- - `docs/operations/ROADMAP_V0_2_503.md` — the 7-workstream plan this
128
- pipeline executed.
@@ -1,122 +0,0 @@
1
- ---
2
- render_with_liquid: false
3
- ---
4
- {% raw %}
5
-
6
- # Reliability
7
-
8
- ## Reliability scorecard
9
-
10
- - Unit coverage: 100% module mapping target, enforced by `tests/framework/module_coverage.sh`
11
- - Integration depth: 11 integration test files in `tests/integration/`
12
- - Regression automation: 436 discovered test files and 2149 named tests in the current baseline
13
-
14
- ## Coverage gap map
15
-
16
- | Module | Missing path | Risk level | Proposed test case |
17
- | :--- | :--- | :--- | :--- |
18
- | `scripts/qa/reliability-audit.sh` | Quick mode and integration mode branch handling | Closed | Covered by `tests/unit/misc/test_qa_reliability_behaviour.sh` |
19
- | `scripts/git-hooks/pre-push` | Audit command failure path | Closed | Covered by `tests/unit/misc/test_git_hooks_pre_push_behaviour.sh` |
20
- | `tests/framework/module_coverage.sh` | False-positive module matches | Closed | Covered by `tests/unit/misc/test_module_coverage_behaviour.sh` |
21
- | `examples/*.sh` | Drift between examples and real commands | Closed | Examples execute in CI through `Examples Contract` and `validate-examples.sh` |
22
-
23
- ## Integration boundaries
24
-
25
- ```mermaid
26
- flowchart LR
27
- Dev[Developer] --> Hook[pre-push hook]
28
- Hook --> Audit[reliability-audit.sh]
29
- Audit --> Syntax[Shell syntax gate]
30
- Audit --> Unit[Unit suite]
31
- Audit --> Coverage[Module coverage]
32
- Audit --> Examples[Example validation]
33
- Audit --> WSL[WSL contract]
34
- Audit --> Integration[Integration suite]
35
- Integration --> Repo[Dotfiles workflows]
36
- WSL --> Repo
37
- ```
38
-
39
- ```mermaid
40
- sequenceDiagram
41
- participant Dev as Developer
42
- participant Git as Git client
43
- participant Hook as pre-push
44
- participant Audit as reliability-audit.sh
45
- participant Suite as tests/framework/test_runner.sh
46
- participant Cov as module_coverage.sh
47
- participant Ex as validate-examples.sh
48
- participant WSL as wsl-contract.sh
49
-
50
- Dev->>Git: git push
51
- Git->>Hook: invoke pre-push
52
- Hook->>Hook: verify signed commits
53
- Hook->>Audit: run quick gate
54
- Audit->>Suite: run unit suite
55
- Audit->>Cov: enforce 100% module mapping
56
- Audit->>Ex: execute examples
57
- Audit->>WSL: verify WSL parity contract
58
- Ex-->>Audit: pass
59
- Cov-->>Audit: pass
60
- WSL-->>Audit: pass
61
- Suite-->>Audit: pass
62
- Audit-->>Hook: pass
63
- Hook-->>Git: allow push
64
- ```
65
-
66
- ## CI gate
67
-
68
- ```yaml
69
- name: Reliability Gate
70
-
71
- on:
72
- pull_request:
73
- push:
74
- branches: [main]
75
- workflow_dispatch:
76
-
77
- jobs:
78
- reliability:
79
- strategy:
80
- fail-fast: false
81
- matrix:
82
- os: [ubuntu-latest, macos-latest]
83
- runs-on: ${{ matrix.os }}
84
- steps:
85
- - uses: actions/checkout@v6
86
- - name: Reliability audit
87
- run: bash ./scripts/qa/reliability-audit.sh --with-integration
88
-
89
- examples-contract:
90
- runs-on: ubuntu-latest
91
- steps:
92
- - uses: actions/checkout@v6
93
- - name: Validate executable examples
94
- run: bash ./scripts/qa/validate-examples.sh
95
-
96
- wsl-contract:
97
- runs-on: ubuntu-latest
98
- steps:
99
- - uses: actions/checkout@v6
100
- - name: Validate WSL parity contract
101
- run: bash ./scripts/qa/wsl-contract.sh
102
-
103
- reliability-summary:
104
- needs: [reliability, examples-contract, wsl-contract]
105
- runs-on: ubuntu-latest
106
- ```
107
-
108
- ## Functional examples
109
-
110
- - `examples/example-test-suite.sh`: Runs a focused unit slice.
111
- - `examples/example-coverage-gate.sh`: Runs the module coverage contract.
112
- - `examples/example-git-hooks.sh`: Shows the local hook entrypoints.
113
- - `examples/example-platform-contract.sh`: Shows the platform and host contract across macOS, Linux, and WSL.
114
-
115
- ## Local guardrail
116
-
117
- `make test` is the canonical reliability command. It runs syntax checks, unit tests, module coverage, executable examples, and integration tests.
118
-
119
- For a lightweight repository-wide snapshot, run `bash ./scripts/qa/coverage-baseline.sh --with-module-coverage`.
120
-
121
- Core internal behaviors are traced through `bash ./scripts/qa/traceability-coverage.sh`.
122
- {% endraw %}