@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.
- package/CHANGELOG.md +52 -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,280 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "RFC: v0.2.503 Repository Reorganisation"
|
|
3
|
-
status: Accepted — shipping incrementally in this PR
|
|
4
|
-
authors: ['@sebastienrousseau']
|
|
5
|
-
opened: 2026-05-17
|
|
6
|
-
accepted: 2026-05-17
|
|
7
|
-
target: v0.2.503
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# RFC: v0.2.503 Repository Reorganisation
|
|
11
|
-
|
|
12
|
-
> **Status: Accepted.** This RFC was opened in this PR and
|
|
13
|
-
> immediately accepted by the maintainer with explicit decision to
|
|
14
|
-
> ship the reorganisation incrementally within v0.2.503 rather
|
|
15
|
-
> than the originally-proposed two-version deprecation window.
|
|
16
|
-
> Phases land as separate commits on `feat/v0.2.503`; each is
|
|
17
|
-
> independently atomic and verified by `dot lint` + the existing
|
|
18
|
-
> test matrix.
|
|
19
|
-
|
|
20
|
-
## Summary
|
|
21
|
-
|
|
22
|
-
Split the current chezmoi-managed monorepo into a **framework layer**
|
|
23
|
-
(distributable CLI + library) and a **defaults layer** (user-facing
|
|
24
|
-
configuration), with the framework layer publishable as a
|
|
25
|
-
standalone tarball to Homebrew, Scoop, and AUR. Maintain
|
|
26
|
-
backwards-compatible behaviour for existing users via a one-shot
|
|
27
|
-
migration script that runs on first apply after upgrade.
|
|
28
|
-
|
|
29
|
-
## Motivation
|
|
30
|
-
|
|
31
|
-
R4 hard-audit identified the framework/user-config intermingling
|
|
32
|
-
as the **highest-leverage structural gap** blocking de-facto-
|
|
33
|
-
framework status (`HARD_AUDIT_2026.md` §8.5 Top-5 adoption gaps).
|
|
34
|
-
Concrete symptoms:
|
|
35
|
-
|
|
36
|
-
1. **Distribution stuck at "curl-pipe-bash".** The Homebrew /
|
|
37
|
-
Scoop / AUR manifests scaffolded in v0.2.503
|
|
38
|
-
(`install/{homebrew,scoop,aur}/`) cannot publish until there's
|
|
39
|
-
a single `bin/dot` tarball — chezmoi's `dot_*` / `executable_*`
|
|
40
|
-
/ `private_*` prefixes force the current layout. Until that's
|
|
41
|
-
fixed, downstream distros have nothing to package.
|
|
42
|
-
|
|
43
|
-
2. **New contributor onboarding cost.** Even with the v0.2.503
|
|
44
|
-
`STRUCTURE.md`, ~20 chezmoi-prefixed root paths require a
|
|
45
|
-
concept (the chezmoi naming contract) to navigate. A
|
|
46
|
-
`bin/` + `lib/` + `defaults/` layout is self-documenting.
|
|
47
|
-
|
|
48
|
-
3. **Framework forks are blocked.** Anyone wanting to fork the
|
|
49
|
-
*CLI* without the maintainer's personal configs has to
|
|
50
|
-
manually delete 80+ tool-specific directories under
|
|
51
|
-
`dot_config/`. A clean separation makes "fork the framework,
|
|
52
|
-
apply my own defaults" a one-command flow.
|
|
53
|
-
|
|
54
|
-
4. **Test surface bleed.** CI runs `chezmoi apply --dry-run` on
|
|
55
|
-
every PR, exercising both framework templates AND the
|
|
56
|
-
maintainer's personal defaults. A real consumer running the
|
|
57
|
-
framework will not exercise the maintainer's `dot_config/aider/`
|
|
58
|
-
etc. — and yet a regression there blocks CI.
|
|
59
|
-
|
|
60
|
-
The reorganisation is **breaking** for existing user installs:
|
|
61
|
-
chezmoi tracks deployed files by source path, so moving
|
|
62
|
-
`bin/dot` to `bin/dot` means the old
|
|
63
|
-
`~/.local/bin/dot` would be removed before the new path is
|
|
64
|
-
installed. Mitigation: ship a `migrate-v0.2-to-v0.3.sh` script
|
|
65
|
-
that runs before the first post-upgrade `chezmoi apply`.
|
|
66
|
-
|
|
67
|
-
## Detailed design
|
|
68
|
-
|
|
69
|
-
### Target layout
|
|
70
|
-
|
|
71
|
-
Following the [Debian/aws-cli](https://github.com/Debian/aws-cli)
|
|
72
|
-
discipline (every top-level path has a clear purpose; contributor
|
|
73
|
-
orients in <30 seconds):
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
.
|
|
77
|
-
├── bin/ # CLI entrypoints
|
|
78
|
-
│ ├── dot # was bin/dot
|
|
79
|
-
│ ├── dot-load-benchmark-pty # was bin/dot-load-benchmark-pty
|
|
80
|
-
│ ├── dot-theme-sync # was bin/dot-theme-sync
|
|
81
|
-
│ ├── dot-bootstrap # was bin/dot-bootstrap
|
|
82
|
-
│ └── dot-update # was dot_local/bin/executable_update (renamed)
|
|
83
|
-
├── lib/ # Framework library (no chezmoi)
|
|
84
|
-
│ ├── commands/ # was scripts/dot/commands/
|
|
85
|
-
│ ├── ui.sh # was scripts/dot/lib/ui.sh
|
|
86
|
-
│ ├── utils.sh # was scripts/dot/lib/utils.sh
|
|
87
|
-
│ ├── platform.sh # was scripts/dot/lib/platform.sh
|
|
88
|
-
│ ├── log.sh # was scripts/dot/lib/log.sh
|
|
89
|
-
│ ├── bento.sh # was scripts/dot/lib/bento.sh
|
|
90
|
-
│ └── secrets_provider.sh # was scripts/lib/secrets_provider.sh
|
|
91
|
-
├── share/ # OS-conventional resources
|
|
92
|
-
│ ├── man/man1/dot.1 # was dot_local/share/man/man1/dot.1
|
|
93
|
-
│ ├── completions/ # was dot_local/share/zsh/completions/
|
|
94
|
-
│ └── docs/ # was docs/
|
|
95
|
-
├── defaults/ # User-facing default config (was dot_config/, etc.)
|
|
96
|
-
│ ├── home/ # dotfiles deployed to $HOME (dot_X → .X)
|
|
97
|
-
│ ├── config/ # dotfiles deployed to $XDG_CONFIG_HOME
|
|
98
|
-
│ └── tools/ # per-tool configs (mise/, npmrc/, ...)
|
|
99
|
-
├── install/ # Distribution + bootstrap
|
|
100
|
-
│ ├── install.sh # was install.sh (moved one level down)
|
|
101
|
-
│ ├── homebrew/dot.rb # already at install/homebrew/ in v0.2.503
|
|
102
|
-
│ ├── scoop/dot.json # already at install/scoop/ in v0.2.503
|
|
103
|
-
│ ├── aur/PKGBUILD # already at install/aur/ in v0.2.503
|
|
104
|
-
│ ├── provision/ # was install/provision/ (chezmoi run_onchange_ hooks)
|
|
105
|
-
│ └── migrate/ # NEW: migrate-v0_2-to-v0_3.sh + rollback
|
|
106
|
-
├── tests/ # unchanged
|
|
107
|
-
├── examples/ # unchanged
|
|
108
|
-
├── tools/ # NEW: ops scripts not shipped to users
|
|
109
|
-
│ ├── ci/ # was tools/ci/
|
|
110
|
-
│ ├── release/ # was tools/release/
|
|
111
|
-
│ ├── maintenance/ # was tools/maintenance/
|
|
112
|
-
│ ├── docs/ # was tools/docs/
|
|
113
|
-
│ └── version-sync.sh # was scripts/version-sync.sh
|
|
114
|
-
├── .chezmoiroot # NEW: points at defaults/
|
|
115
|
-
├── README.md
|
|
116
|
-
├── LICENSE
|
|
117
|
-
├── CHANGELOG.md
|
|
118
|
-
├── CLAUDE.md / AGENTS.md / per-harness renders
|
|
119
|
-
└── (no more dot_X at root)
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### chezmoi adaptation
|
|
123
|
-
|
|
124
|
-
`.chezmoiroot` lets chezmoi treat a subdirectory as the source
|
|
125
|
-
root. With `.chezmoiroot = "defaults"`, chezmoi will look for
|
|
126
|
-
`defaults/home/dot_zshrc`, `defaults/config/dot_starship.toml`,
|
|
127
|
-
etc. — and deploy to the normal `~/.zshrc` / `~/.config/starship.toml`
|
|
128
|
-
paths.
|
|
129
|
-
|
|
130
|
-
This means:
|
|
131
|
-
|
|
132
|
-
- Repo top-level is no longer required to follow chezmoi naming.
|
|
133
|
-
- `bin/dot` is a plain shell script, not `dot_local/bin/executable_dot`.
|
|
134
|
-
- `share/man/man1/dot.1` is a plain file, not chezmoi-deployed.
|
|
135
|
-
- A Homebrew formula can `bin.install 'bin/dot'` directly.
|
|
136
|
-
|
|
137
|
-
### Migration tool
|
|
138
|
-
|
|
139
|
-
`install/migrate/migrate-v0.2-to-v0.3.sh`:
|
|
140
|
-
|
|
141
|
-
1. Detect existing chezmoi state at `~/.local/share/chezmoi` /
|
|
142
|
-
`~/.config/chezmoi/chezmoi.toml`.
|
|
143
|
-
2. Read the user's pinned source repo from chezmoi.toml; if it's
|
|
144
|
-
`sebastienrousseau/dotfiles@<v0.2.x>`, warn and confirm.
|
|
145
|
-
3. Run `chezmoi diff` and persist the per-file output to
|
|
146
|
-
`~/.local/state/dotfiles/v0_2_to_v0_3_pre_diff.log` so the
|
|
147
|
-
user has a record of pre-migration state.
|
|
148
|
-
4. Run `chezmoi forget` for paths that are moving (no destructive
|
|
149
|
-
delete — chezmoi forget only un-tracks).
|
|
150
|
-
5. Update `~/.config/chezmoi/chezmoi.toml` to point at the new
|
|
151
|
-
sourceDir with `.chezmoiroot` honoured.
|
|
152
|
-
6. Run `chezmoi apply` — picks up the new layout and re-creates
|
|
153
|
-
the user's files at their canonical paths.
|
|
154
|
-
7. Run `dot doctor` and `dot lint` to verify.
|
|
155
|
-
|
|
156
|
-
The migration is **idempotent** and **safe to abort**: at step 4
|
|
157
|
-
the chezmoi state is removed but no user data is deleted. At step
|
|
158
|
-
6 chezmoi notices "these files already exist on disk with content
|
|
159
|
-
matching the source" and is a no-op.
|
|
160
|
-
|
|
161
|
-
### Library bash-source paths
|
|
162
|
-
|
|
163
|
-
Today `scripts/dot/commands/<cmd>.sh` does:
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
167
|
-
source "$SCRIPT_DIR/../lib/utils.sh"
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
After reorganisation:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
174
|
-
source "$SCRIPT_DIR/../utils.sh" # commands/<cmd>.sh → lib/utils.sh
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
Or, more robustly, drive lookup from a single env var set by `bin/dot`:
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
: "${DOT_LIB:=$(dirname "$(realpath "$0")")/../lib}"
|
|
181
|
-
source "$DOT_LIB/utils.sh"
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
The Homebrew formula sets `$DOT_LIB` to `${libexec}/lib` so
|
|
185
|
-
`bin/dot` finds its library wherever the package manager installed
|
|
186
|
-
it.
|
|
187
|
-
|
|
188
|
-
### Distribution surface
|
|
189
|
-
|
|
190
|
-
Once `bin/dot` is standalone:
|
|
191
|
-
|
|
192
|
-
| Channel | Artefact | Verify command |
|
|
193
|
-
|---------|----------|----------------|
|
|
194
|
-
| Homebrew tap | `dot-${VERSION}-${OS}-${ARCH}.tar.gz` | `brew install sebastienrousseau/tap/dot && dot version` |
|
|
195
|
-
| Scoop bucket | `dot.json` → `dot-${VERSION}-windows-${ARCH}.zip` | `scoop install dot && dot version` |
|
|
196
|
-
| AUR | `dotfiles-git` PKGBUILD building from source | `paru -S dotfiles-git && dot version` |
|
|
197
|
-
| `install.sh` | Same SHA256-verified path as today | `bash install.sh` |
|
|
198
|
-
| Direct tarball | Cosign-signed + SLSA-attested release asset | per `docs/security/VERIFY_RELEASE.md` |
|
|
199
|
-
|
|
200
|
-
The chezmoi-managed `defaults/` subtree is **only** consumed when
|
|
201
|
-
a user wants the maintainer's opinionated config layer. It's a
|
|
202
|
-
strict superset: install `dot` standalone for the CLI; layer
|
|
203
|
-
`defaults/` on top if you want the wallpaper-theming +
|
|
204
|
-
multi-shell setup.
|
|
205
|
-
|
|
206
|
-
## Backwards compatibility
|
|
207
|
-
|
|
208
|
-
| Surface | v0.2.x behaviour | v0.2.503 behaviour | Breaking? |
|
|
209
|
-
|---------|------------------|------------------|-----------|
|
|
210
|
-
| `~/.local/bin/dot` | Deployed by chezmoi | Replaced by Homebrew/Scoop install, OR symlinked by chezmoi from the new source | Yes — path may move; migration script handles it |
|
|
211
|
-
| `~/.zshrc` etc | Source-pinned at `dot_zshrc` | Source-pinned at `defaults/home/dot_zshrc`, chezmoi reads via `.chezmoiroot` | No — destination path unchanged |
|
|
212
|
-
| `dot <cmd>` API | All subcommands work as documented | Same | No |
|
|
213
|
-
| `scripts/dot/commands/*.sh` consumers | Direct source paths used in user customisations | Path moves to `lib/commands/*.sh` | Yes — affects any user who source'd these directly |
|
|
214
|
-
| `.chezmoidata.toml` | Repo root | Repo root (unchanged for compatibility with old user `chezmoi init` flows) | No |
|
|
215
|
-
|
|
216
|
-
### Two-version deprecation window
|
|
217
|
-
|
|
218
|
-
v0.2.503 ships with the migration script and a deprecation warning
|
|
219
|
-
in `dot doctor`. v0.4.0 removes any v0.2.x shim code. Users who
|
|
220
|
-
skip v0.2.503 entirely (v0.2.x → v0.4.0) hit a hard error and must
|
|
221
|
-
run the migration tool from a v0.3.x release manually.
|
|
222
|
-
|
|
223
|
-
## Alternatives considered
|
|
224
|
-
|
|
225
|
-
### A) Keep the chezmoi monorepo as-is
|
|
226
|
-
|
|
227
|
-
**Pros**: zero migration cost; works today.
|
|
228
|
-
**Rejected**: blocks Homebrew/Scoop/AUR publication permanently. The
|
|
229
|
-
Top-5 adoption gap remains. R4 audit's "9.0/10 internal · 7.5/10
|
|
230
|
-
adoption" plateau persists.
|
|
231
|
-
|
|
232
|
-
### B) Two-repo split (framework + defaults)
|
|
233
|
-
|
|
234
|
-
Publish `dot` framework at `sebastienrousseau/dot` and the
|
|
235
|
-
maintainer's personal defaults at `sebastienrousseau/dotfiles`.
|
|
236
|
-
|
|
237
|
-
**Pros**: cleanest possible separation. Framework forks trivial.
|
|
238
|
-
**Rejected (for v0.3)**: requires a second repo, doubles the CI
|
|
239
|
-
matrix, and forces users to install from two sources. Defer to
|
|
240
|
-
v0.4 if v0.3 single-repo with `.chezmoiroot` proves insufficient.
|
|
241
|
-
|
|
242
|
-
### C) Rename current root files only (cosmetic)
|
|
243
|
-
|
|
244
|
-
Just rename `bin/dot` → `bin/executable_dot`
|
|
245
|
-
without `.chezmoiroot`.
|
|
246
|
-
|
|
247
|
-
**Rejected**: chezmoi only resolves the `executable_` /
|
|
248
|
-
`dot_` prefixes for files inside its source root, so moving the
|
|
249
|
-
prefixed file outside breaks chezmoi-driven install entirely
|
|
250
|
-
without giving us a standalone tarball.
|
|
251
|
-
|
|
252
|
-
## Unresolved questions
|
|
253
|
-
|
|
254
|
-
1. **How does the `defaults/` subtree behave when a user wants to override one default?** Today they edit `dot_config/X.tmpl` directly. Post-reorg, do they: (a) edit `defaults/config/X.tmpl` and live with merge conflicts on framework updates, or (b) use a chezmoi `data` override + template conditional, or (c) maintain a second repo layered atop `defaults/`?
|
|
255
|
-
2. **Should `install/migrate/` ship in the regular framework install, or only via a one-shot `https://...migrate.sh` URL?** Bundling it forever increases install size; URL-only requires the user to find and trust the right URL during a stressful upgrade moment.
|
|
256
|
-
3. **Does `.chezmoiroot` survive existing user customisations in `~/.config/chezmoi/chezmoi.toml`?** Needs verification on a real upgrade test.
|
|
257
|
-
4. **Windows-native `bin/dot`**: standalone PowerShell rewrite, or wrapper that shells to bash via WSL/git-bash? `POWERSHELL_PARITY.md` documents the current stub state.
|
|
258
|
-
|
|
259
|
-
## Implementation plan
|
|
260
|
-
|
|
261
|
-
| Phase | Scope | Effort |
|
|
262
|
-
|-------|-------|--------|
|
|
263
|
-
| 1 | Draft + ratify this RFC. Get user OK. | Done (this PR's draft) |
|
|
264
|
-
| 2 | Create `defaults/`, `bin/`, `lib/`, `share/`, `tools/` and copy files. Update bash source paths. Add `.chezmoiroot`. | 1 week |
|
|
265
|
-
| 3 | Write `install/migrate/migrate-v0_2-to-v0_3.sh`. Test against a synthetic v0.2.503-installed environment. | 3 days |
|
|
266
|
-
| 4 | Update CI: every workflow that references `scripts/`, `dot_local/`, `dot_config/` needs path updates. | 3 days |
|
|
267
|
-
| 5 | Update every doc that references the old paths. Most are in `docs/manual/`. | 1 day |
|
|
268
|
-
| 6 | Cut v0.2.999 RC as a deprecation-warning-only release; let real users dry-run the migration. | 1 day + 2-week soak |
|
|
269
|
-
| 7 | Cut v0.2.503 with the actual reorg + migration tool. | 1 day |
|
|
270
|
-
| 8 | Publish to Homebrew/Scoop/AUR using `install/{homebrew,scoop,aur}/` scaffolds. | 1 week |
|
|
271
|
-
| **Total** | | **~5 weeks calendar time** |
|
|
272
|
-
|
|
273
|
-
## See also
|
|
274
|
-
|
|
275
|
-
- `HARD_AUDIT_2026.md` §8.3 — cross-platform gap analysis.
|
|
276
|
-
- `HARD_AUDIT_2026.md` §8.5 — Top-5 de-facto adoption gaps.
|
|
277
|
-
- `STRUCTURE.md` — today's layout (honest about the chezmoi-prefix forcing function).
|
|
278
|
-
- `GOVERNANCE.md` — RFC process this document follows.
|
|
279
|
-
- `install/README.md` — distribution-channel publication checklist.
|
|
280
|
-
- Reference: [Debian/aws-cli](https://github.com/Debian/aws-cli) — clean top-level discipline.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# 2026 Roadmap
|
|
2
|
-
|
|
3
|
-
Historical content from this file has been consolidated into the canonical
|
|
4
|
-
[`../../ROADMAP.md`](../../ROADMAP.md).
|
|
5
|
-
|
|
6
|
-
This path is retained only for compatibility with older links. New roadmap work
|
|
7
|
-
belongs in the root roadmap or in GitHub issues and milestones.
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "v0.2.503 Roadmap - Historical"
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# v0.2.503 Roadmap
|
|
6
|
-
|
|
7
|
-
This v0.2.503 planning document is historical. Active roadmap content has been
|
|
8
|
-
consolidated into [`../../ROADMAP.md`](../../ROADMAP.md).
|
|
9
|
-
|
|
10
|
-
Release history remains in [`../../CHANGELOG.md`](../../CHANGELOG.md).
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Testing strategy
|
|
6
|
-
|
|
7
|
-
## Overview
|
|
8
|
-
|
|
9
|
-
The repo uses a multi-layer testing approach: unit tests for individual functions, integration tests for system-wide behavior, and performance benchmarks for resource efficiency.
|
|
10
|
-
|
|
11
|
-
## Quick start
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# Run all unit tests
|
|
15
|
-
./tests/framework/test_runner.sh
|
|
16
|
-
|
|
17
|
-
# Run a specific test suite
|
|
18
|
-
./tests/framework/test_runner.sh extract
|
|
19
|
-
|
|
20
|
-
# Run integration tests
|
|
21
|
-
RUN_INTEGRATION=1 ./tests/framework/test_runner.sh
|
|
22
|
-
|
|
23
|
-
# Run performance benchmarks
|
|
24
|
-
./benches/benchmark_runner.sh
|
|
25
|
-
|
|
26
|
-
# Run unit tests in parallel (parsed per-file output, deterministic order)
|
|
27
|
-
./tests/framework/test_runner.sh --jobs auto
|
|
28
|
-
|
|
29
|
-
# Strict mode: promote silent `command not found` / `unbound variable`
|
|
30
|
-
# inside cov_exercise_functions_file to test failures. Default is
|
|
31
|
-
# tolerant (the helper sources dot command files in a clean shell where
|
|
32
|
-
# their lib/dot/ helpers are intentionally unresolved). Use STRICT=1
|
|
33
|
-
# locally before pushing to catch the class of bug that escaped
|
|
34
|
-
# review pre-v0.2.503 (e.g. agent.sh: _agent_repo_root falling
|
|
35
|
-
# through to a missing require_source_dir).
|
|
36
|
-
DOT_STRICT=1 ./tests/framework/test_runner.sh
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
The runner's FINAL SUMMARY lists which test files failed (not just
|
|
40
|
-
the total count) so locating a regression in a 4000+ assertion run
|
|
41
|
-
doesn't require grepping back through the full log. Per-file failure
|
|
42
|
-
counts and crashed-file markers appear inline.
|
|
43
|
-
|
|
44
|
-
## Test structure
|
|
45
|
-
|
|
46
|
-
```text
|
|
47
|
-
tests/
|
|
48
|
-
├── framework/ # Test framework
|
|
49
|
-
│ ├── assertions.sh # 16 assertion functions
|
|
50
|
-
│ ├── mocks.sh # Mock utilities
|
|
51
|
-
│ └── test_runner.sh # Test executor
|
|
52
|
-
├── unit/ # 425 unit test files
|
|
53
|
-
├── integration/ # 11 integration test files
|
|
54
|
-
└── performance/ # Benchmarks
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Writing tests
|
|
58
|
-
|
|
59
|
-
### Test file template
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
#!/usr/bin/env bash
|
|
63
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
64
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
65
|
-
|
|
66
|
-
# Source the function under test
|
|
67
|
-
source "$HOME/.dotfiles/.chezmoitemplates/functions/myfunction.sh"
|
|
68
|
-
|
|
69
|
-
# Test cases
|
|
70
|
-
test_start "function_basic_usage"
|
|
71
|
-
assert_exit_code 0 "myfunction arg1"
|
|
72
|
-
|
|
73
|
-
test_start "function_no_args"
|
|
74
|
-
assert_exit_code 1 "myfunction"
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Available assertions
|
|
78
|
-
|
|
79
|
-
| Function | Description |
|
|
80
|
-
|----------|-------------|
|
|
81
|
-
| `assert_equals expected actual [msg]` | Two values are equal |
|
|
82
|
-
| `assert_not_equals unexpected actual [msg]` | Two values differ |
|
|
83
|
-
| `assert_exit_code code command` | Command exits with given code |
|
|
84
|
-
| `assert_output_contains needle command` | Output contains string |
|
|
85
|
-
| `assert_output_not_contains needle command` | Output lacks string |
|
|
86
|
-
| `assert_output_matches pattern command` | Output matches regex |
|
|
87
|
-
| `assert_file_exists path [msg]` | File exists |
|
|
88
|
-
| `assert_file_not_exists path [msg]` | File doesn't exist |
|
|
89
|
-
| `assert_dir_exists path [msg]` | Directory exists |
|
|
90
|
-
| `assert_dir_not_exists path [msg]` | Directory doesn't exist |
|
|
91
|
-
| `assert_true condition [msg]` | Condition is true |
|
|
92
|
-
| `assert_false condition [msg]` | Condition is false |
|
|
93
|
-
| `assert_empty value [msg]` | String is empty |
|
|
94
|
-
| `assert_not_empty value [msg]` | String isn't empty |
|
|
95
|
-
| `assert_file_contains file needle [msg]` | File contains text |
|
|
96
|
-
| `assert_file_not_contains file needle [msg]` | File lacks text |
|
|
97
|
-
|
|
98
|
-
### Mock utilities
|
|
99
|
-
|
|
100
|
-
| Function | Description |
|
|
101
|
-
|----------|-------------|
|
|
102
|
-
| `mock_init` | Initialize mock environment |
|
|
103
|
-
| `mock_command name output [exit_code]` | Create a mock command |
|
|
104
|
-
| `mock_command_spy name [output] [exit_code]` | Create a mock that records calls |
|
|
105
|
-
| `mock_get_calls name` | Get spy call history |
|
|
106
|
-
| `mock_call_count name` | Get number of spy calls |
|
|
107
|
-
| `mock_file content [filename]` | Create temp file with content |
|
|
108
|
-
| `mock_dir [prefix]` | Create temp directory |
|
|
109
|
-
| `mock_archive type [content]` | Create a mock archive file |
|
|
110
|
-
| `mock_env var_name value` | Set an environment variable |
|
|
111
|
-
| `mock_cleanup` | Clean up all mocks |
|
|
112
|
-
|
|
113
|
-
## Test categories
|
|
114
|
-
|
|
115
|
-
### Unit tests (`tests/unit/`)
|
|
116
|
-
|
|
117
|
-
Test individual functions in isolation. Each file follows the `test_*.sh` naming convention and is discoverable with `ls tests/unit/`.
|
|
118
|
-
|
|
119
|
-
### Integration tests (`tests/integration/`)
|
|
120
|
-
|
|
121
|
-
Test complete workflows like the installation script and end-to-end apply behavior.
|
|
122
|
-
|
|
123
|
-
### Performance tests (`benches/`)
|
|
124
|
-
|
|
125
|
-
Measure resource efficiency with shell startup benchmarks and load tests.
|
|
126
|
-
|
|
127
|
-
## Coverage goals
|
|
128
|
-
|
|
129
|
-
| Category | Target | Current |
|
|
130
|
-
|----------|--------|---------|
|
|
131
|
-
| Module coverage | >=95% | 100% |
|
|
132
|
-
| Unit test files | - | 425 |
|
|
133
|
-
| Integration test files | - | 11 |
|
|
134
|
-
| Total test files | - | 436 |
|
|
135
|
-
| Named tests (`test_start`) | - | 2149 |
|
|
136
|
-
| Unit test pass rate | 100% | 100% |
|
|
137
|
-
|
|
138
|
-
CI enforces module coverage via:
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
MIN_COVERAGE=95 ./tests/framework/module_coverage.sh
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
For a current local baseline, run:
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
bash ./scripts/qa/coverage-baseline.sh --with-module-coverage
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
For core internal behavior traceability, run:
|
|
151
|
-
|
|
152
|
-
```bash
|
|
153
|
-
bash ./scripts/qa/traceability-coverage.sh
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## CI integration
|
|
157
|
-
|
|
158
|
-
Tests run automatically on every push to main, every pull request, and weekly scheduled runs (Monday 6 AM UTC).
|
|
159
|
-
|
|
160
|
-
### GitHub Actions example
|
|
161
|
-
|
|
162
|
-
```yaml
|
|
163
|
-
- name: Run Tests
|
|
164
|
-
run: |
|
|
165
|
-
chmod +x ./tests/framework/test_runner.sh
|
|
166
|
-
./tests/framework/test_runner.sh
|
|
167
|
-
|
|
168
|
-
- name: Run Integration Tests
|
|
169
|
-
run: |
|
|
170
|
-
RUN_INTEGRATION=1 ./tests/framework/test_runner.sh
|
|
171
|
-
|
|
172
|
-
- name: Run Performance Benchmarks
|
|
173
|
-
run: |
|
|
174
|
-
./benches/benchmark_runner.sh
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## Environment variables
|
|
178
|
-
|
|
179
|
-
| Variable | Default | Description |
|
|
180
|
-
|----------|---------|-------------|
|
|
181
|
-
| `RUN_INTEGRATION` | `0` | Set to `1` to include integration tests |
|
|
182
|
-
| `VERBOSE` | `0` | Set to `1` for verbose output |
|
|
183
|
-
| `REPO_ROOT` | Auto-detected | Repository root directory |
|
|
184
|
-
| `TESTS_DIR` | Auto-detected | Tests directory |
|
|
185
|
-
|
|
186
|
-
## Best practices
|
|
187
|
-
|
|
188
|
-
1. **Isolation** -- Each test should be independent and self-contained.
|
|
189
|
-
2. **Cleanup** -- Use mocks that auto-cleanup via traps.
|
|
190
|
-
3. **No sleep** -- Avoid `sleep` or hardcoded delays.
|
|
191
|
-
4. **Descriptive names** -- Test names should describe what's being verified.
|
|
192
|
-
5. **Edge cases** -- Test error conditions, not just happy paths.
|
|
193
|
-
6. **Security** -- Include tests for dangerous input rejection.
|
|
194
|
-
|
|
195
|
-
## Troubleshooting
|
|
196
|
-
|
|
197
|
-
### Tests not found
|
|
198
|
-
|
|
199
|
-
Make sure test files match the `test_*.sh` pattern and are executable:
|
|
200
|
-
|
|
201
|
-
```bash
|
|
202
|
-
chmod +x tests/unit/test_*.sh
|
|
203
|
-
chmod +x tests/integration/test_*.sh
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### Function not available
|
|
207
|
-
|
|
208
|
-
If a test reports "function not available", verify the source file exists:
|
|
209
|
-
|
|
210
|
-
```bash
|
|
211
|
-
ls -la .chezmoitemplates/functions/
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Mock cleanup issues
|
|
215
|
-
|
|
216
|
-
If mocks aren't cleaning up, make sure you aren't running with `set -e` before mock operations that might intentionally fail.
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Behavioral Traceability
|
|
6
|
-
|
|
7
|
-
This matrix ties core internal behaviors to implementation files, automated tests, and prose documentation.
|
|
8
|
-
|
|
9
|
-
It is enforced by `bash ./scripts/qa/traceability-coverage.sh`.
|
|
10
|
-
|
|
11
|
-
| Behavior ID | Behavior | Implementation | Test Evidence | Documentation |
|
|
12
|
-
|-------------|----------|----------------|---------------|---------------|
|
|
13
|
-
| BT-01 | AI status, launcher, and cache lifecycle | `scripts/dot/commands/ai.sh` | `tests/unit/dot-cli/test_dot_commands_ai.sh` | `docs/AI.md`, `docs/reference/UTILS.md` |
|
|
14
|
-
| BT-02 | Agent profiles, checkpoints, and conformance | `scripts/dot/commands/agent.sh` | `tests/unit/dot-cli/test_dot_commands_agent.sh`, `tests/unit/dot-cli/test_dot_agent_mode.sh`, `tests/unit/dot-cli/test_dot_a2a_conformance.sh` | `docs/operations/TRUSTED_AGENT_WORKSTATION.md`, `docs/interop/A2A.md`, `docs/reference/UTILS.md` |
|
|
15
|
-
| BT-03 | MCP policy validation and registry inspection | `scripts/dot/commands/meta.sh`, `scripts/diagnostics/mcp-doctor.sh` | `tests/unit/dot-cli/test_dot_commands_meta.sh`, `tests/unit/dot-cli/test_dot_cli.sh` | `docs/security/MCP_POLICY.md`, `docs/operations/TRUSTED_AGENT_WORKSTATION.md`, `docs/reference/UTILS.md` |
|
|
16
|
-
| BT-04 | Fleet status, drift, namespace, and events workflows | `scripts/dot/commands/fleet.sh` | `tests/unit/dot-cli/test_dot_commands_fleet.sh`, `tests/unit/dot-cli/test_dot_fleet_enforcement.sh` | `docs/operations/TRUSTED_AGENT_WORKSTATION.md`, `docs/operations/ATTESTATION.md`, `docs/reference/UTILS.md` |
|
|
17
|
-
| BT-05 | Secrets command surface and shell autoload buckets | `scripts/dot/commands/secrets.sh`, `defaults/dot_config/shell/10-secrets.sh` | `tests/unit/dot-cli/test_dot_commands_secrets.sh`, `tests/unit/shell/test_shell_secrets_autoload.sh` | `docs/security/SECRETS.md`, `docs/reference/UTILS.md` |
|
|
18
|
-
| BT-06 | Theme synchronization and multi-tool theme application | `bin/dot-theme-sync` | `tests/unit/theme/test_dot_theme_sync.sh` | `docs/guides/THEMING.md`, `docs/reference/THEMES.md`, `docs/reference/SCRIPTS.md` |
|
|
19
|
-
| BT-07 | Reliability audit orchestration | `scripts/qa/reliability-audit.sh` | `tests/unit/misc/test_qa_reliability.sh`, `tests/unit/misc/test_qa_reliability_behaviour.sh` | `docs/operations/RELIABILITY.md`, `docs/operations/TESTING.md` |
|
|
20
|
-
| BT-08 | Repository coverage baseline audit | `scripts/qa/coverage-baseline.sh` | `tests/unit/misc/test_qa_coverage_baseline.sh` | `docs/operations/RELIABILITY.md`, `docs/operations/TESTING.md` |
|
|
21
|
-
| BT-09 | Documentation coverage contract for public surfaces | `scripts/qa/docs-coverage.sh` | `tests/unit/misc/test_qa_docs_coverage.sh`, `tests/unit/misc/test_qa_docs_repo_coverage.sh` | `docs/operations/RELIABILITY.md`, `docs/reference/UTILS.md`, `docs/reference/SCRIPTS.md` |
|
|
22
|
-
| BT-10 | Repository executable-surface coverage gate | `tests/framework/module_coverage.sh` | `tests/unit/tools/test_public_entrypoints.sh`, `tests/unit/misc/test_module_coverage_behaviour.sh` | `docs/operations/TESTING.md`, `docs/security/VERIFICATION_VALIDATION.md`, `docs/reference/SCRIPTS.md` |
|
|
23
|
-
| BT-11 | Core apply, diff, status, edit, and commit workflows | `scripts/dot/commands/core.sh` | `tests/unit/dot-cli/test_dot_commands_core.sh`, `tests/unit/dot-cli/test_dot_cli.sh` | `docs/reference/UTILS.md` |
|
|
24
|
-
| BT-12 | Alias discovery, search, and governance workflows | `scripts/dot/commands/aliases.sh` | `tests/unit/dot-cli/test_dot_commands_aliases.sh` | `docs/reference/ALIASES.md`, `docs/reference/UTILS.md` |
|
|
25
|
-
| BT-13 | Appearance and theme command workflows | `scripts/dot/commands/appearance.sh` | `tests/unit/dot-cli/test_dot_commands_appearance.sh` | `docs/guides/THEMING.md`, `docs/reference/UTILS.md` |
|
|
26
|
-
| BT-14 | Diagnostics command workflows | `scripts/dot/commands/diagnostics.sh` | `tests/unit/dot-cli/test_dot_commands_diagnostics.sh` | `docs/operations/RELIABILITY.md`, `docs/reference/UTILS.md` |
|
|
27
|
-
| BT-15 | Lint command workflow | `scripts/dot/commands/lint.sh` | `tests/unit/dot-cli/test_dot_commands_lint.sh`, `tests/unit/dot-cli/test_lint.sh` | `docs/operations/TESTING.md`, `docs/reference/UTILS.md` |
|
|
28
|
-
| BT-16 | AI steering pattern workflows | `scripts/dot/commands/patterns.sh` | `tests/unit/dot-cli/test_dot_commands_patterns.sh` | `docs/AI.md` |
|
|
29
|
-
| BT-17 | Restore and rollback workflows | `scripts/dot/commands/restore.sh` | `tests/unit/dot-cli/test_dot_commands_restore.sh` | `docs/reference/UTILS.md` |
|
|
30
|
-
| BT-18 | Security command workflows | `scripts/dot/commands/security.sh` | `tests/unit/dot-cli/test_dot_commands_security.sh` | `docs/reference/UTILS.md`, `docs/security/COMPLIANCE.md` |
|
|
31
|
-
| BT-19 | Tool catalog and sandbox workflows | `scripts/dot/commands/tools.sh` | `tests/unit/dot-cli/test_dot_commands_tools.sh` | `docs/reference/TOOLS.md`, `docs/reference/UTILS.md` |
|
|
32
|
-
| BT-20 | Example validation contract | `scripts/qa/validate-examples.sh` | `tests/unit/misc/test_qa_reliability.sh` | `docs/operations/RELIABILITY.md` |
|
|
33
|
-
| BT-21 | WSL parity contract | `scripts/qa/wsl-contract.sh` | `tests/unit/misc/test_qa_reliability.sh` | `docs/operations/RELIABILITY.md`, `docs/reference/SUPPORT_MATRIX.md` |
|
|
34
|
-
| BT-22 | Internal behavior traceability contract | `scripts/qa/traceability-coverage.sh` | `tests/unit/misc/test_qa_traceability_coverage.sh` | `docs/operations/TRACEABILITY.md`, `docs/operations/RELIABILITY.md` |
|
|
35
|
-
| BT-23 | Multi-format Manual pipeline | `tools/docs/build-manual.sh`, `tools/docs/check-manual.sh`, `scripts/dot/commands/manual.sh` | `tests/unit/docs/test_build_manual.sh`, `tests/unit/docs/test_check_manual.sh`, `tests/unit/dot-cli/test_dot_commands_manual.sh` | `docs/manual/`, `docs/README.md`, `README.md` |
|
|
36
|
-
| BT-24 | Multi-harness AI agent context (AGENTS.md generator) | `scripts/dot/commands/agents.sh` | `tests/unit/auto/test_auto_dot_driver.sh` | `AGENTS.md`, `CLAUDE.md`, `docs/operations/HARD_AUDIT_2026.md` |
|
|
37
|
-
| BT-25 | Bootstrap foreign dotfiles repo through chezmoi harness | `scripts/dot/commands/init.sh` | `tests/unit/auto/test_auto_dot_driver.sh` | `docs/operations/ROADMAP_2026.md`, `docs/manual/03-reference/01-dot-cli.md` |
|
|
38
|
-
| BT-26 | Module registry discovery and install scaffold | `scripts/dot/commands/registry.sh` | `tests/unit/auto/test_auto_dot_driver.sh` | `docs/operations/REGISTRY.md`, `docs/registry.json` |
|
|
39
|
-
| BT-27 | Workstation environment manifest emitter (`dot env emit`) | `scripts/dot/commands/env-emit.sh` | `tests/unit/dot-cli/test_cmd_env_emit.sh` | `docs/operations/MANIFEST.md`, `docs/schema/dot-env-v1.json` |
|
|
40
|
-
| BT-28 | Cross-file version-string consistency contract | `scripts/qa/check-version-consistency.sh` | `tests/unit/qa/test_check_version_consistency.sh` | `docs/operations/RELIABILITY.md` |
|
|
41
|
-
| BT-29 | OpenSSF Scorecard nightly snapshot artefact | `scripts/qa/scorecard-snapshot.sh` | `tests/unit/qa/test_scorecard_snapshot.sh` | `docs/security/SCORECARD.md` |
|
|
42
|
-
| BT-30 | Shell completion generator (`dot completion <shell>`) | `scripts/dot/commands/completion.sh` | `tests/unit/dot-cli/test_dot_completion.sh` | `docs/reference/UTILS.md` |
|
|
43
|
-
| BT-31 | Examples coverage contract (feature/command → example) | `scripts/qa/examples-coverage.sh` | `tests/unit/misc/test_qa_examples_coverage.sh` | `docs/reference/UTILS.md` |
|
|
44
|
-
| BT-32 | Feature matrix drift gate (command → test, benchmark, example) | `scripts/qa/check-feature-matrix.sh` | `tests/unit/misc/test_qa_check_feature_matrix.sh` | `docs/reference/FEATURE-MATRIX.md`, `docs/operations/TESTING.md` |
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Trusted Agent Workstation
|
|
6
|
-
|
|
7
|
-
This repository is more than shell setup.
|
|
8
|
-
|
|
9
|
-
It defines a signed, local-first workstation baseline for agentic development on macOS, Linux, WSL, and PowerShell.
|
|
10
|
-
|
|
11
|
-
## Core model
|
|
12
|
-
|
|
13
|
-
- bounded agent profiles
|
|
14
|
-
- tracked MCP policy and registry
|
|
15
|
-
- workstation attestation
|
|
16
|
-
- signed commits and verified merges
|
|
17
|
-
- cross-platform CLI and diagnostics
|
|
18
|
-
|
|
19
|
-
## Governance artifacts
|
|
20
|
-
|
|
21
|
-
The source of truth lives in tracked JSON artifacts:
|
|
22
|
-
|
|
23
|
-
- [policy-bundles.json](https://github.com/sebastienrousseau/dotfiles/blob/main/defaults/dot_config/dotfiles/policy-bundles.json)
|
|
24
|
-
- [agent-profiles.json](https://github.com/sebastienrousseau/dotfiles/blob/main/defaults/dot_config/dotfiles/agent-profiles.json)
|
|
25
|
-
- [mcp-policy.json](https://github.com/sebastienrousseau/dotfiles/blob/main/defaults/dot_config/dotfiles/mcp-policy.json)
|
|
26
|
-
- [mcp-registry.json](https://github.com/sebastienrousseau/dotfiles/blob/main/defaults/dot_config/dotfiles/mcp-registry.json)
|
|
27
|
-
- [model-registry.json](https://github.com/sebastienrousseau/dotfiles/blob/main/defaults/dot_config/dotfiles/model-registry.json)
|
|
28
|
-
- [prompt-registry.json](https://github.com/sebastienrousseau/dotfiles/blob/main/defaults/dot_config/dotfiles/prompt-registry.json)
|
|
29
|
-
|
|
30
|
-
## Enterprise path
|
|
31
|
-
|
|
32
|
-
Phase 1 establishes:
|
|
33
|
-
|
|
34
|
-
- product framing
|
|
35
|
-
- policy bundles
|
|
36
|
-
- prompt and model change control
|
|
37
|
-
- attestation evidence for governance state
|
|
38
|
-
|
|
39
|
-
Implemented next-layer controls:
|
|
40
|
-
|
|
41
|
-
- filesystem-backed fleet attestation export
|
|
42
|
-
- replayable agent checkpoints
|
|
43
|
-
- signed policy bundle release workflow
|
|
44
|
-
- tracked A2A conformance validation
|
|
45
|
-
|
|
46
|
-
Further phases add:
|
|
47
|
-
|
|
48
|
-
- central audit export
|
|
49
|
-
- fleet drift dashboards
|
|
50
|
-
- checkpoint policies and retention controls
|
|
51
|
-
- broader protocol interoperability coverage
|
|
52
|
-
|
|
53
|
-
## Validation
|
|
54
|
-
|
|
55
|
-
Run:
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
dot doctor
|
|
59
|
-
dot mcp --strict
|
|
60
|
-
dot mode list
|
|
61
|
-
dot agent card --json
|
|
62
|
-
dot attest --json
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Every governance change requires a signed commit.
|