@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.
- package/CHANGELOG.md +18 -0
- package/LICENSE-APACHE +190 -0
- package/LICENSE-MIT +21 -0
- package/README.md +43 -37
- package/install.sh +76 -10
- package/package.json +7 -7
- package/tools/README.md +49 -0
- package/tools/ci/install-chezmoi-verified.sh +68 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
- package/docs/AI.md +0 -179
- package/docs/ARCHITECTURE.md +0 -117
- package/docs/CNAME +0 -1
- package/docs/CONFIG_STRATEGY.md +0 -124
- package/docs/COPYRIGHT +0 -7
- package/docs/ECOSYSTEM.md +0 -220
- package/docs/GOLD-STANDARD-AUDIT.md +0 -352
- package/docs/GOVERNANCE.md +0 -98
- package/docs/MAINTAINERS.md +0 -41
- package/docs/MINIMUM-TOOLCHAIN.md +0 -100
- package/docs/NAMING_CONVENTIONS.md +0 -102
- package/docs/OPENCODE.md +0 -127
- package/docs/README.md +0 -84
- package/docs/STRUCTURE.md +0 -102
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
- package/docs/adr/ADR-002-shell-performance.md +0 -130
- package/docs/adr/ADR-003-security-first.md +0 -158
- package/docs/adr/ADR-004-cli-architecture.md +0 -171
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
- package/docs/adr/ADR-006-shell-selection.md +0 -124
- package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
- package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
- package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
- package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
- package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
- package/docs/adr/README.md +0 -40
- package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
- package/docs/architecture/ARCHITECTURE.md +0 -20
- package/docs/architecture/INTEROP.md +0 -44
- package/docs/architecture/REPO_LAYOUT.md +0 -241
- package/docs/architecture/WALKTHROUGH.md +0 -86
- package/docs/architecture/fleet-deployment.md +0 -77
- package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
- package/docs/archive/LEGACY_ROADMAP.md +0 -6
- package/docs/archive/MILESTONE_v0.2.493.md +0 -47
- package/docs/archive/PLAN.md +0 -199
- package/docs/archive/REPO_AUDIT.md +0 -31
- package/docs/articles/.pages +0 -6
- package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
- package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
- package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
- package/docs/articles/index.md +0 -36
- package/docs/guides/INSTALL.md +0 -144
- package/docs/guides/MACOS_ICLOUD_SYMLINKS.md +0 -121
- package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
- package/docs/guides/THEMING.md +0 -230
- package/docs/guides/TROUBLESHOOTING.md +0 -176
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
- package/docs/index.md +0 -132
- package/docs/interop/A2A.md +0 -39
- package/docs/interop/POWERSHELL.md +0 -102
- package/docs/manual/00-introduction.md +0 -89
- package/docs/manual/01-concepts/01-architecture.md +0 -138
- package/docs/manual/01-concepts/02-trust-model.md +0 -183
- package/docs/manual/01-concepts/03-theme-engine.md +0 -186
- package/docs/manual/01-concepts/04-fleet.md +0 -148
- package/docs/manual/01-concepts/05-self-healing.md +0 -204
- package/docs/manual/02-tutorials/01-first-install.md +0 -197
- package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
- package/docs/manual/02-tutorials/03-create-profile.md +0 -244
- package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
- package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
- package/docs/manual/03-reference/01-dot-cli.md +0 -475
- package/docs/manual/03-reference/02-config-files.md +0 -265
- package/docs/manual/03-reference/03-environment.md +0 -124
- package/docs/manual/03-reference/04-templates.md +0 -190
- package/docs/manual/03-reference/05-feature-flags.md +0 -187
- package/docs/manual/04-cookbook/01-recipes.md +0 -285
- package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
- package/docs/manual/04-cookbook/03-faq.md +0 -175
- package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
- package/docs/manual/05-appendices/B-security-checklist.md +0 -85
- package/docs/manual/05-appendices/C-glossary.md +0 -40
- package/docs/manual/05-appendices/D-bibliography.md +0 -58
- package/docs/manual/05-appendices/E-license.md +0 -38
- package/docs/manual/_toc.yml +0 -58
- package/docs/manual/command-index.md +0 -175
- package/docs/manual/concept-index.md +0 -170
- package/docs/manual/index.md +0 -66
- package/docs/migration/README.md +0 -81
- package/docs/migration/from-bare-git-repo.md +0 -156
- package/docs/migration/from-gnu-stow.md +0 -165
- package/docs/migration/from-plain-chezmoi.md +0 -148
- package/docs/migration/from-yadm.md +0 -187
- package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
- package/docs/operations/ATTESTATION.md +0 -44
- package/docs/operations/CI_CADENCE.md +0 -107
- package/docs/operations/CI_COMPOSITES.md +0 -156
- package/docs/operations/COMPLETIONS.md +0 -123
- package/docs/operations/COVERAGE.md +0 -204
- package/docs/operations/DRIFT.md +0 -107
- package/docs/operations/HARD_AUDIT_2026.md +0 -631
- package/docs/operations/MAINTENANCE.md +0 -63
- package/docs/operations/MANIFEST.md +0 -127
- package/docs/operations/MIGRATION.md +0 -109
- package/docs/operations/OPERATIONS.md +0 -188
- package/docs/operations/PERFORMANCE.md +0 -133
- package/docs/operations/PERFORMANCE_BUDGETS.md +0 -196
- package/docs/operations/REGISTRY.md +0 -90
- package/docs/operations/RELEASE_PIPELINE.md +0 -128
- package/docs/operations/RELIABILITY.md +0 -122
- package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
- package/docs/operations/ROADMAP.md +0 -10
- package/docs/operations/ROADMAP_2026.md +0 -7
- package/docs/operations/ROADMAP_V0_2_503.md +0 -10
- package/docs/operations/TESTING.md +0 -216
- package/docs/operations/TRACEABILITY.md +0 -44
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
- package/docs/operations/VERSION_SYNC.md +0 -393
- package/docs/packaging.md +0 -222
- package/docs/reference/ALIASES.md +0 -131
- package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
- package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
- package/docs/reference/FEATURE-MATRIX.md +0 -646
- package/docs/reference/FEATURES.md +0 -66
- package/docs/reference/FONTS.md +0 -112
- package/docs/reference/POWERSHELL_PARITY.md +0 -82
- package/docs/reference/PROFILES.md +0 -69
- package/docs/reference/SCREENSHOTS.md +0 -121
- package/docs/reference/SCRIPTS.md +0 -71
- package/docs/reference/SUPPORT_MATRIX.md +0 -80
- package/docs/reference/THEMES.md +0 -117
- package/docs/reference/TOOLS.md +0 -110
- package/docs/reference/UTILS.md +0 -243
- package/docs/registry.json +0 -6
- package/docs/schema/dot-env-v1.json +0 -110
- package/docs/schema/dot-registry-v1.json +0 -33
- package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
- package/docs/security/AUDIT_BYPASS.md +0 -103
- package/docs/security/AUTOMATION_SECRETS.md +0 -26
- package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
- package/docs/security/CI_PINNING.md +0 -129
- package/docs/security/COMMIT_SIGNING.md +0 -138
- package/docs/security/COMPLIANCE.md +0 -458
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
- package/docs/security/DISCLOSURE.md +0 -130
- package/docs/security/ENCRYPTION.md +0 -57
- package/docs/security/FMEA.md +0 -159
- package/docs/security/FUZZING.md +0 -209
- package/docs/security/HISTORY_FILTERING.md +0 -132
- package/docs/security/INCIDENT_RESPONSE.md +0 -579
- package/docs/security/INSTALL_VERIFICATION.md +0 -122
- package/docs/security/KEYS.md +0 -49
- package/docs/security/KEY_ROTATION.md +0 -303
- package/docs/security/MCP_POLICY.md +0 -78
- package/docs/security/POLICY_RELEASES.md +0 -37
- package/docs/security/README.md +0 -28
- package/docs/security/SCORECARD.md +0 -195
- package/docs/security/SECRETS.md +0 -158
- package/docs/security/SECURITY.md +0 -45
- package/docs/security/SECURITY_CHECKLIST.md +0 -55
- package/docs/security/SHELL_EXEMPTIONS.md +0 -145
- package/docs/security/SOUP_REGISTER.md +0 -36
- package/docs/security/THREAT_MODEL.md +0 -130
- package/docs/security/VERIFICATION_VALIDATION.md +0 -228
- package/docs/security/VERIFY_RELEASE.md +0 -201
- package/docs/security/security-pubkey.asc +0 -15
- package/docs/stylesheets/extra.css +0 -444
- package/docs/themes/README.md +0 -10
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
- package/docs/themes/hero-shot.svg +0 -78
- package/scripts/README.md +0 -123
- package/scripts/ci/check-copyright-headers.sh +0 -8
- package/scripts/ci/check-shell-preamble.sh +0 -8
- package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
- package/scripts/demo/record.sh +0 -43
- package/scripts/diagnostics/a2a-conformance.sh +0 -163
- package/scripts/diagnostics/alias-governance.sh +0 -165
- package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
- package/scripts/diagnostics/aliases-manifest.sh +0 -77
- package/scripts/diagnostics/attest-verify.sh +0 -147
- package/scripts/diagnostics/benchmark.sh +0 -408
- package/scripts/diagnostics/conflicts.sh +0 -73
- package/scripts/diagnostics/doctor-unified.sh +0 -43
- package/scripts/diagnostics/doctor.sh +0 -797
- package/scripts/diagnostics/drift-dashboard.sh +0 -203
- package/scripts/diagnostics/health.sh +0 -656
- package/scripts/diagnostics/history-analysis.sh +0 -86
- package/scripts/diagnostics/mcp-doctor.sh +0 -582
- package/scripts/diagnostics/perf.sh +0 -453
- package/scripts/diagnostics/scorecard.sh +0 -120
- package/scripts/diagnostics/secret-governance.sh +0 -65
- package/scripts/diagnostics/security-score.sh +0 -467
- package/scripts/diagnostics/smoke-test.sh +0 -88
- package/scripts/diagnostics/snapshot.sh +0 -90
- package/scripts/diagnostics/verify.sh +0 -108
- package/scripts/diagnostics/verify_state.sh +0 -73
- package/scripts/diagnostics/version-locks.sh +0 -94
- package/scripts/diagnostics/workstation-attestation.sh +0 -212
- package/scripts/dot/commands/agent.sh +0 -535
- package/scripts/dot/commands/agents.sh +0 -352
- package/scripts/dot/commands/ai.sh +0 -600
- package/scripts/dot/commands/aliases.sh +0 -277
- package/scripts/dot/commands/appearance.sh +0 -110
- package/scripts/dot/commands/completion.sh +0 -171
- package/scripts/dot/commands/core.sh +0 -217
- package/scripts/dot/commands/diagnostics.sh +0 -265
- package/scripts/dot/commands/env-emit.sh +0 -203
- package/scripts/dot/commands/fleet.sh +0 -711
- package/scripts/dot/commands/init.sh +0 -185
- package/scripts/dot/commands/lint.sh +0 -208
- package/scripts/dot/commands/manual.sh +0 -169
- package/scripts/dot/commands/meta.sh +0 -438
- package/scripts/dot/commands/patterns.sh +0 -55
- package/scripts/dot/commands/registry.sh +0 -455
- package/scripts/dot/commands/restore.sh +0 -232
- package/scripts/dot/commands/secrets.sh +0 -296
- package/scripts/dot/commands/security.sh +0 -102
- package/scripts/dot/commands/tools.sh +0 -570
- package/scripts/dot/data/alias-deprecations.tsv +0 -2
- package/scripts/dot/powershell/Dot.psm1 +0 -319
- package/scripts/fonts/install-nerd-fonts.sh +0 -75
- package/scripts/fonts/patch-fonts.sh +0 -36
- package/scripts/git-hooks/install.sh +0 -12
- package/scripts/git-hooks/pre-commit +0 -12
- package/scripts/git-hooks/pre-commit-audit.sh +0 -146
- package/scripts/git-hooks/pre-push +0 -105
- package/scripts/git-hooks/prepare-commit-msg +0 -29
- package/scripts/lib/secrets_provider.sh +0 -200
- package/scripts/nvim/headless-upgrade.lua +0 -81
- package/scripts/ops/ai-setup.sh +0 -71
- package/scripts/ops/bundle.sh +0 -104
- package/scripts/ops/chaos.sh +0 -50
- package/scripts/ops/chezmoi-apply.sh +0 -333
- package/scripts/ops/chezmoi-diff.sh +0 -16
- package/scripts/ops/chezmoi-remove.sh +0 -46
- package/scripts/ops/chezmoi-update.sh +0 -67
- package/scripts/ops/heal-chezmoi.sh +0 -87
- package/scripts/ops/heal-system.sh +0 -129
- package/scripts/ops/heal-tools.sh +0 -297
- package/scripts/ops/heal.sh +0 -223
- package/scripts/ops/post-apply-repair.sh +0 -107
- package/scripts/ops/prewarm.sh +0 -128
- package/scripts/ops/release.sh +0 -262
- package/scripts/ops/rollback.sh +0 -613
- package/scripts/ops/setup.sh +0 -138
- package/scripts/ops/teleport.sh +0 -34
- package/scripts/qa/check-feature-matrix.sh +0 -296
- package/scripts/qa/check-version-consistency.sh +0 -12
- package/scripts/qa/coverage-baseline.sh +0 -61
- package/scripts/qa/docs-coverage.sh +0 -118
- package/scripts/qa/examples-coverage.sh +0 -94
- package/scripts/qa/powershell-contract.ps1 +0 -95
- package/scripts/qa/reliability-audit.sh +0 -139
- package/scripts/qa/scorecard-snapshot.sh +0 -128
- package/scripts/qa/traceability-coverage.sh +0 -124
- package/scripts/qa/validate-examples.sh +0 -90
- package/scripts/qa/wsl-contract.sh +0 -12
- package/scripts/secrets/age-init.sh +0 -82
- package/scripts/secrets/create-secrets-file.sh +0 -46
- package/scripts/secrets/encrypt-ssh-key.sh +0 -44
- package/scripts/security/backup.sh +0 -58
- package/scripts/security/check-disclosure-key-expiry.sh +0 -111
- package/scripts/security/dns-doh.sh +0 -52
- package/scripts/security/encryption-check.sh +0 -55
- package/scripts/security/enforce-policies.sh +0 -552
- package/scripts/security/firewall.sh +0 -91
- package/scripts/security/lock-configs.sh +0 -67
- package/scripts/security/lock-screen.sh +0 -56
- package/scripts/security/manage-secrets.sh +0 -429
- package/scripts/security/ssh-cert.sh +0 -204
- package/scripts/security/telemetry-kill.sh +0 -51
- package/scripts/security/usb-safety.sh +0 -52
- package/scripts/theme/apply-gnome-theme.sh +0 -333
- package/scripts/theme/extract-heic-frames.sh +0 -115
- package/scripts/theme/extract-theme.py +0 -1020
- package/scripts/theme/install-boot-logo.sh +0 -63
- package/scripts/theme/install-catppuccin-themes.sh +0 -371
- package/scripts/theme/install-cursors.sh +0 -26
- package/scripts/theme/install-file-icons.sh +0 -27
- package/scripts/theme/install-grub-theme.sh +0 -62
- package/scripts/theme/install-lock-icon.sh +0 -31
- package/scripts/theme/merge-wallpaper.sh +0 -146
- package/scripts/theme/rebuild-themes.sh +0 -603
- package/scripts/theme/switch.sh +0 -476
- package/scripts/theme/wallpaper-rotate.sh +0 -137
- package/scripts/theme/wallpaper-sync.sh +0 -690
- package/scripts/tools/cmatrix.sh +0 -22
- package/scripts/tools/detect-collisions.py +0 -103
- package/scripts/tools/emoji-picker.sh +0 -49
- package/scripts/tools/figlet-banner.sh +0 -19
- package/scripts/tools/log-rotate.sh +0 -31
- package/scripts/tools/lolcat-wrap.sh +0 -20
- package/scripts/tools/pipes.sh +0 -49
- package/scripts/tuning/linux.sh +0 -186
- package/scripts/tuning/macos.sh +0 -56
- package/scripts/uninstall.sh +0 -86
- package/scripts/verify-release-versions +0 -156
- package/scripts/version-sync.sh +0 -714
- package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
- package/templates/chezmoi-data/mac-m1.toml.example +0 -16
- package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
- package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
- package/templates/projects/go/.github/workflows/ci.yml +0 -31
- package/templates/projects/go/README.md +0 -7
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
- package/templates/projects/go/go.mod +0 -3
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/node/.github/workflows/ci.yml +0 -30
- package/templates/projects/node/README.md +0 -7
- package/templates/projects/node/package-lock.json +0 -12
- package/templates/projects/node/package.json +0 -10
- package/templates/projects/node/src/index.js +0 -3
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
- package/templates/projects/python/.github/workflows/ci.yml +0 -34
- package/templates/projects/python/README.md +0 -7
- package/templates/projects/python/pyproject.toml +0 -25
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
- 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 %}
|