@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,458 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Compliance Architecture
|
|
6
|
-
|
|
7
|
-
This document describes the compliance, security, and cross-platform compatibility controls implemented in this repository, mapped to standard regulatory frameworks (SOC 2, ISO 27001, GDPR).
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
| Framework | Status | Description |
|
|
12
|
-
|-----------|--------|-------------|
|
|
13
|
-
| SOC 2 Type II | Aligned | Security, availability, and confidentiality |
|
|
14
|
-
| ISO 27001 | Aligned | Information security management controls |
|
|
15
|
-
| GDPR/HIPAA | Aligned | Privacy and data protection |
|
|
16
|
-
| ISO 13485 | Aligned | Risk management (FMEA), verification & validation |
|
|
17
|
-
| ALCOA | Implemented | Audit trail integrity |
|
|
18
|
-
| EU AI Act | Exempt | Minimal risk, open-source exemption (Article 2(12)) |
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## EU AI Act (Regulation (EU) 2024/1689)
|
|
23
|
-
|
|
24
|
-
| Requirement | Status | Implementation |
|
|
25
|
-
|-------------|--------|----------------|
|
|
26
|
-
| **Risk classification** | Minimal risk | No high-risk use cases (Annex III) |
|
|
27
|
-
| **Open-source exemption** | Applicable | MIT license, no model weights distributed (Article 2(12)) |
|
|
28
|
-
| **Prohibited practices** | Confirmed none | No subliminal, exploitative, or social scoring use (Article 5) |
|
|
29
|
-
| **Transparency** | Voluntary | Agent session logging, model registry, attestation |
|
|
30
|
-
| **GPAI provisions** | Not applicable | Consumer of AI APIs, not a provider |
|
|
31
|
-
|
|
32
|
-
See [AI_ACT_COMPLIANCE.md](AI_ACT_COMPLIANCE.md) for full assessment.
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Regulatory Mapping
|
|
37
|
-
|
|
38
|
-
### SOC 2 Type II
|
|
39
|
-
|
|
40
|
-
| Control | Description | Implementation |
|
|
41
|
-
|---------|-------------|----------------|
|
|
42
|
-
| **CC6.1** | Logical Access Security | `zsh` restricted permissions, SSH key management via `1Password`/Agents |
|
|
43
|
-
| **CC6.8** | Unauthorized Code Protection | GPG/SSH signed commits, `slsa-framework` workflow |
|
|
44
|
-
| **CC7.1** | System Operations | `compliance-guard.yml` blocks insecure patterns |
|
|
45
|
-
| **CC7.2** | Change Detection | Pre-commit hooks detect security violations |
|
|
46
|
-
| **CC8.1** | Change Management | Git-based IaC, PR templates, CODEOWNERS |
|
|
47
|
-
| **A1.2** | Audit Logs | `~/.local/share/dotfiles.log` tracks operations |
|
|
48
|
-
|
|
49
|
-
### ISO 27001
|
|
50
|
-
|
|
51
|
-
| Control | Description | Implementation |
|
|
52
|
-
|---------|-------------|----------------|
|
|
53
|
-
| **A.9.1.1** | Access Control Policy | Principle of Least Privilege (umask 022/077) |
|
|
54
|
-
| **A.9.4.1** | Information Access Restriction | `chmod 777/666` blocked by CI |
|
|
55
|
-
| **A.12.1.2** | Change Management | Git version control with CI/CD verification |
|
|
56
|
-
| **A.12.6.1** | Technical Vulnerability Management | Gitleaks, TruffleHog secrets scanning |
|
|
57
|
-
| **A.13.1.1** | Network Controls | TLS enforcement (no `curl -k`) |
|
|
58
|
-
| **A.14.2.5** | Secure Engineering | ShellCheck, cross-platform testing |
|
|
59
|
-
| **A.14.2.8** | System Security Testing | Module coverage gate (>=95%, currently 100%), weekly scans |
|
|
60
|
-
|
|
61
|
-
### GDPR / HIPAA (Privacy)
|
|
62
|
-
|
|
63
|
-
| Requirement | Description | Implementation |
|
|
64
|
-
|-------------|-------------|----------------|
|
|
65
|
-
| **Data Minimization** | Limit data collection | `privacy-mode` disables CLI telemetry |
|
|
66
|
-
| **Integrity** | Protect against tampering | `lock-configs` prevents modification |
|
|
67
|
-
| **Encryption** | Protect data at rest | Age encryption for sensitive dotfiles |
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Security Controls
|
|
72
|
-
|
|
73
|
-
### TLS Enforcement
|
|
74
|
-
|
|
75
|
-
All network operations require valid TLS certificates:
|
|
76
|
-
|
|
77
|
-
| Control | Pattern Blocked | Enforcement |
|
|
78
|
-
|---------|-----------------|-------------|
|
|
79
|
-
| Insecure curl | `curl -k`, `--insecure` | Pre-commit + CI |
|
|
80
|
-
| Certificate bypass | `wget --no-check-certificate` | Pre-commit + CI |
|
|
81
|
-
| Plaintext HTTP | `http://` URLs | CI warning |
|
|
82
|
-
|
|
83
|
-
**Files:**
|
|
84
|
-
|
|
85
|
-
- Pre-commit: `config/pre-commit-config.yaml`
|
|
86
|
-
- CI: `.github/workflows/compliance-guard.yml`
|
|
87
|
-
|
|
88
|
-
### Secrets Management
|
|
89
|
-
|
|
90
|
-
| Tool | Purpose | Configuration |
|
|
91
|
-
|------|---------|---------------|
|
|
92
|
-
| Gitleaks | Prevent secrets in commits | `config/gitleaks.toml` |
|
|
93
|
-
| TruffleHog | Deep secrets scanning | CI workflow |
|
|
94
|
-
| detect-secrets | Baseline secrets detection | `.secrets.baseline` |
|
|
95
|
-
| Age | Encrypt sensitive dotfiles | Chezmoi integration |
|
|
96
|
-
|
|
97
|
-
### Permission Controls
|
|
98
|
-
|
|
99
|
-
| Control | Implementation |
|
|
100
|
-
|---------|----------------|
|
|
101
|
-
| Least privilege CI | `permissions: contents: read` default |
|
|
102
|
-
| No world-writable | `chmod 777/666` blocked by CI |
|
|
103
|
-
| CODEOWNERS | All paths mapped to reviewers |
|
|
104
|
-
| Signed commits | GPG signing enforced |
|
|
105
|
-
|
|
106
|
-
### Dangerous Pattern Blocking
|
|
107
|
-
|
|
108
|
-
Patterns automatically blocked by CI and pre-commit hooks:
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
# Blocked - insecure TLS
|
|
112
|
-
curl -k https://...
|
|
113
|
-
wget --no-check-certificate https://...
|
|
114
|
-
|
|
115
|
-
# Blocked - world-writable permissions
|
|
116
|
-
chmod 777 /path
|
|
117
|
-
chmod -R 666 /files
|
|
118
|
-
|
|
119
|
-
# Blocked - hardcoded credentials
|
|
120
|
-
password="literal_value"
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Cross-Platform Compatibility
|
|
126
|
-
|
|
127
|
-
### Supported Platforms
|
|
128
|
-
|
|
129
|
-
| Platform | Tools | Default Shell | Bash Version |
|
|
130
|
-
|----------|-------|---------------|--------------|
|
|
131
|
-
| Linux | GNU | Bash | 5.x |
|
|
132
|
-
| macOS | BSD | Zsh | 3.2 (system) |
|
|
133
|
-
| WSL | GNU | Bash | 5.x |
|
|
134
|
-
|
|
135
|
-
### Line Ending Normalization
|
|
136
|
-
|
|
137
|
-
Configured in `.gitattributes`:
|
|
138
|
-
|
|
139
|
-
| Pattern | Line Ending | Reason |
|
|
140
|
-
|---------|-------------|--------|
|
|
141
|
-
| `*.sh` | LF | Unix scripts |
|
|
142
|
-
| `*.bash` | LF | Unix scripts |
|
|
143
|
-
| `*.zsh` | LF | Unix scripts |
|
|
144
|
-
| `*.bat` | CRLF | Windows batch |
|
|
145
|
-
| `*.ps1` | CRLF | PowerShell |
|
|
146
|
-
|
|
147
|
-
### BSD vs GNU Compatibility
|
|
148
|
-
|
|
149
|
-
The `cross-platform-test.yml` workflow validates scripts on both platforms:
|
|
150
|
-
|
|
151
|
-
| Pattern | Issue | Portable Alternative |
|
|
152
|
-
|---------|-------|---------------------|
|
|
153
|
-
| `sed -i ''` | BSD requires backup ext | Check `$OSTYPE` |
|
|
154
|
-
| `sed -i` | GNU style | Check `$OSTYPE` |
|
|
155
|
-
| `grep -P` | GNU-only PCRE | Use `grep -E` |
|
|
156
|
-
| `date -d` | GNU-only | Use `date +%s` |
|
|
157
|
-
| `readarray` | Bash 4+ only | Use `while read` |
|
|
158
|
-
| `declare -A` | Bash 4+ only | Use indexed arrays |
|
|
159
|
-
|
|
160
|
-
### Path Handling
|
|
161
|
-
|
|
162
|
-
| Requirement | Implementation |
|
|
163
|
-
|-------------|----------------|
|
|
164
|
-
| No hardcoded user paths | Use `$HOME` or `~` |
|
|
165
|
-
| Case-insensitive safe | No filename collisions |
|
|
166
|
-
| Cross-platform paths | No platform-specific path literals |
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## CI/CD Pipeline
|
|
171
|
-
|
|
172
|
-
### Workflow Matrix
|
|
173
|
-
|
|
174
|
-
| Workflow | Trigger | Purpose |
|
|
175
|
-
|----------|---------|---------|
|
|
176
|
-
| `ci.yml` | Push/PR | Full CI pipeline, ShellCheck, tests |
|
|
177
|
-
| `compliance-guard.yml` | Push/PR | Security pattern scanning |
|
|
178
|
-
| `cross-platform-test.yml` | Push/PR + weekly | BSD/GNU compatibility |
|
|
179
|
-
| `security-enhanced.yml` | Push/PR | Deep security analysis, SBOM |
|
|
180
|
-
| `codeql.yml` | Push/PR + weekly | Static code analysis |
|
|
181
|
-
| `sbom-diff.yml` | Pull request | SBOM diff and CVE correlation |
|
|
182
|
-
| `nightly.yml` | Daily 2 AM UTC | Dependency version checks |
|
|
183
|
-
|
|
184
|
-
### Compliance Guard Jobs
|
|
185
|
-
|
|
186
|
-
```text
|
|
187
|
-
compliance-guard.yml
|
|
188
|
-
├── insecure-patterns # TLS, credentials, chmod
|
|
189
|
-
├── portability # ShellCheck, paths, .gitattributes
|
|
190
|
-
├── dockerfile-lint # Hadolint
|
|
191
|
-
└── compliance-summary # Report generation
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### Cross-Platform Test Jobs
|
|
195
|
-
|
|
196
|
-
```text
|
|
197
|
-
cross-platform-test.yml
|
|
198
|
-
├── ubuntu-latest (GNU) # Linux compatibility
|
|
199
|
-
├── macos-latest (BSD) # macOS compatibility
|
|
200
|
-
└── compatibility-report # Summary
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### GitHub Actions Security
|
|
204
|
-
|
|
205
|
-
| Control | Implementation |
|
|
206
|
-
|---------|----------------|
|
|
207
|
-
| Pinned versions | All actions pinned to SHA or version |
|
|
208
|
-
| Minimal permissions | `contents: read` by default |
|
|
209
|
-
| Concurrency control | Cancel in-progress duplicates |
|
|
210
|
-
| Timeout limits | All jobs have explicit timeouts |
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## Pre-Commit Hooks
|
|
215
|
-
|
|
216
|
-
### Configuration
|
|
217
|
-
|
|
218
|
-
File: `config/pre-commit-config.yaml`
|
|
219
|
-
|
|
220
|
-
### Hook Matrix
|
|
221
|
-
|
|
222
|
-
| Hook | Stage | Purpose |
|
|
223
|
-
|------|-------|---------|
|
|
224
|
-
| `shellcheck` | commit | Shell script linting |
|
|
225
|
-
| `shfmt` | commit | Shell script formatting |
|
|
226
|
-
| `gitleaks` | commit | Secrets detection |
|
|
227
|
-
| `detect-secrets` | commit | Credential scanning |
|
|
228
|
-
| `checkov` | commit | Infrastructure security |
|
|
229
|
-
| `hadolint` | commit | Dockerfile linting |
|
|
230
|
-
| `insecure-tls-check` | commit | Block `curl -k` |
|
|
231
|
-
| `dangerous-chmod-check` | commit | Block `chmod 777/666` |
|
|
232
|
-
| `security-policy-enforcement` | pre-push | Policy validation |
|
|
233
|
-
|
|
234
|
-
### Installation
|
|
235
|
-
|
|
236
|
-
```bash
|
|
237
|
-
pip install pre-commit
|
|
238
|
-
pre-commit install
|
|
239
|
-
pre-commit install --hook-type pre-push
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
---
|
|
243
|
-
|
|
244
|
-
## Change Management
|
|
245
|
-
|
|
246
|
-
### Pull Request Requirements
|
|
247
|
-
|
|
248
|
-
| Requirement | Implementation |
|
|
249
|
-
|-------------|----------------|
|
|
250
|
-
| PR template | `.github/PULL_REQUEST_TEMPLATE.md` |
|
|
251
|
-
| Code owners | `.github/CODEOWNERS` |
|
|
252
|
-
| CI checks | Required to pass |
|
|
253
|
-
| Review required | Auto-assigned via CODEOWNERS |
|
|
254
|
-
|
|
255
|
-
### PR Template Checklist
|
|
256
|
-
|
|
257
|
-
```markdown
|
|
258
|
-
- [ ] `chezmoi apply --dry-run` verified
|
|
259
|
-
- [ ] Manual testing on macOS
|
|
260
|
-
- [ ] Manual testing on Linux
|
|
261
|
-
- [ ] CI checks pass
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### Commit Requirements
|
|
265
|
-
|
|
266
|
-
| Requirement | Implementation |
|
|
267
|
-
|-------------|----------------|
|
|
268
|
-
| Signed commits | GPG/SSH signing (cryptographically verified) |
|
|
269
|
-
| Conventional format | `feat:`, `fix:`, `docs:` prefixes |
|
|
270
|
-
| Co-author attribution | AI contributions attributed |
|
|
271
|
-
|
|
272
|
-
### Cryptographic Identity Verification (ALCOA: Attributable)
|
|
273
|
-
|
|
274
|
-
For SOC 2 compliance, the "Attributable" principle requires that all changes are linked to a **verified cryptographic identity**, not just a username.
|
|
275
|
-
|
|
276
|
-
**Enforcement layers:**
|
|
277
|
-
|
|
278
|
-
| Layer | Mechanism | Status |
|
|
279
|
-
|-------|-----------|--------|
|
|
280
|
-
| Local | Pre-push hook blocks unsigned commits | Enforced |
|
|
281
|
-
| CI | `compliance-guard.yml` verifies signatures | Advisory |
|
|
282
|
-
| GitHub | Branch protection (optional) | Configurable |
|
|
283
|
-
|
|
284
|
-
**Pre-push hook location:** `scripts/git-hooks/pre-push`
|
|
285
|
-
|
|
286
|
-
```bash
|
|
287
|
-
# The hook verifies each commit before push:
|
|
288
|
-
for c in $(git rev-list "$range"); do
|
|
289
|
-
if ! git verify-commit "$c" >/dev/null 2>&1; then
|
|
290
|
-
echo "Blocked: unsigned commit $c"
|
|
291
|
-
exit 1
|
|
292
|
-
fi
|
|
293
|
-
done
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
**Setup signing:**
|
|
297
|
-
|
|
298
|
-
```bash
|
|
299
|
-
# SSH signing (recommended)
|
|
300
|
-
git config --global gpg.format ssh
|
|
301
|
-
git config --global user.signingkey ~/.ssh/id_ed25519.pub
|
|
302
|
-
git config --global commit.gpgsign true
|
|
303
|
-
|
|
304
|
-
# GPG signing (alternative)
|
|
305
|
-
git config --global user.signingkey <YOUR_GPG_KEY_ID>
|
|
306
|
-
git config --global commit.gpgsign true
|
|
307
|
-
|
|
308
|
-
# Or use the dotfiles alias:
|
|
309
|
-
enable-signing ssh # or: enable-signing gpg
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
**Install pre-push hook:**
|
|
313
|
-
|
|
314
|
-
```bash
|
|
315
|
-
cp scripts/git-hooks/pre-push .git/hooks/pre-push
|
|
316
|
-
chmod +x .git/hooks/pre-push
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
**GitHub Branch Protection (recommended):**
|
|
320
|
-
|
|
321
|
-
Enable "Require signed commits" in repository settings:
|
|
322
|
-
`Settings > Branches > Branch protection rules > Require signed commits`
|
|
323
|
-
|
|
324
|
-
---
|
|
325
|
-
|
|
326
|
-
## Test Coverage
|
|
327
|
-
|
|
328
|
-
### Current Metrics
|
|
329
|
-
|
|
330
|
-
| Category | Count | Coverage |
|
|
331
|
-
|----------|-------|----------|
|
|
332
|
-
| Documentation files | 63 | Audited |
|
|
333
|
-
| Executable shell surfaces | 205 | Audited |
|
|
334
|
-
| Unit test files | 425 | Tested |
|
|
335
|
-
| Integration test files | 11 | Tested |
|
|
336
|
-
| **Total test files** | **436** | **Module coverage: 100% (threshold >=95%)** |
|
|
337
|
-
| **Named tests (`test_start`)** | **2149** | **Pass rate: 100%** |
|
|
338
|
-
|
|
339
|
-
### Test Framework
|
|
340
|
-
|
|
341
|
-
```text
|
|
342
|
-
tests/
|
|
343
|
-
├── framework/
|
|
344
|
-
│ ├── assertions.sh # 16 assertion functions
|
|
345
|
-
│ ├── mocks.sh # Mock utilities
|
|
346
|
-
│ └── test_runner.sh # Test executor
|
|
347
|
-
├── unit/
|
|
348
|
-
│ └── test_*.sh # 378 unit test files
|
|
349
|
-
├── integration/
|
|
350
|
-
│ └── test_*.sh # 9 integration test files
|
|
351
|
-
└── performance/
|
|
352
|
-
└── benchmark_runner.sh
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
### Running Tests
|
|
356
|
-
|
|
357
|
-
```bash
|
|
358
|
-
# Run all tests
|
|
359
|
-
./tests/framework/test_runner.sh
|
|
360
|
-
|
|
361
|
-
# Run specific test
|
|
362
|
-
bash tests/unit/test_dot_commands_apply.sh
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
---
|
|
366
|
-
|
|
367
|
-
## Security Documentation
|
|
368
|
-
|
|
369
|
-
### Required Files
|
|
370
|
-
|
|
371
|
-
| File | Purpose | Location |
|
|
372
|
-
|------|---------|----------|
|
|
373
|
-
| SECURITY.md | Vulnerability reporting | `SECURITY.md` |
|
|
374
|
-
| CONTRIBUTING.md | Contribution guidelines | `.github/CONTRIBUTING.md` |
|
|
375
|
-
| CODEOWNERS | Code ownership | `.github/CODEOWNERS` |
|
|
376
|
-
| INCIDENT_RESPONSE.md | Incident response plan | `docs/security/` |
|
|
377
|
-
| FMEA.md | Failure Mode & Effects Analysis | `docs/security/` |
|
|
378
|
-
| VERIFICATION_VALIDATION.md | ISO 13485-style V&V report | `docs/security/` |
|
|
379
|
-
| .editorconfig | Editor settings | Root |
|
|
380
|
-
| .gitattributes | Git attributes | Root |
|
|
381
|
-
|
|
382
|
-
### Vulnerability Response SLA
|
|
383
|
-
|
|
384
|
-
| Severity | Initial Response | Resolution Target |
|
|
385
|
-
|----------|------------------|-------------------|
|
|
386
|
-
| Critical | 24 hours | 48 hours |
|
|
387
|
-
| High | 72 hours | 7 days |
|
|
388
|
-
| Medium | 5 business days | 30 days |
|
|
389
|
-
| Low | 10 business days | 90 days |
|
|
390
|
-
|
|
391
|
-
---
|
|
392
|
-
|
|
393
|
-
## Audit & Forensics
|
|
394
|
-
|
|
395
|
-
### Immutability
|
|
396
|
-
|
|
397
|
-
Lock critical configuration files:
|
|
398
|
-
|
|
399
|
-
```bash
|
|
400
|
-
lock-configs # Sets chflags uchg (macOS) or chattr +i (Linux)
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
### Audit Trail
|
|
404
|
-
|
|
405
|
-
```bash
|
|
406
|
-
# View dotfiles operations log
|
|
407
|
-
dot audit
|
|
408
|
-
|
|
409
|
-
# Log location
|
|
410
|
-
~/.local/share/dotfiles.log
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
### Supply Chain Security
|
|
414
|
-
|
|
415
|
-
| Control | Implementation |
|
|
416
|
-
|---------|----------------|
|
|
417
|
-
| SBOM | Generated for every release (SPDX) |
|
|
418
|
-
| Provenance | SLSA Level 3 build attestation |
|
|
419
|
-
| Dependencies | Pinned versions, weekly updates |
|
|
420
|
-
|
|
421
|
-
---
|
|
422
|
-
|
|
423
|
-
## Verification Commands
|
|
424
|
-
|
|
425
|
-
### Manual Verification
|
|
426
|
-
|
|
427
|
-
```bash
|
|
428
|
-
# Run all pre-commit hooks
|
|
429
|
-
pre-commit run --all-files
|
|
430
|
-
|
|
431
|
-
# Run unit tests
|
|
432
|
-
./tests/framework/test_runner.sh
|
|
433
|
-
|
|
434
|
-
# Check for insecure patterns
|
|
435
|
-
grep -rn --include="*.sh" -E 'curl.*-k|wget.*--no-check' .
|
|
436
|
-
|
|
437
|
-
# Validate .gitattributes
|
|
438
|
-
grep "text=auto" .gitattributes && echo "OK"
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
### Automated Verification
|
|
442
|
-
|
|
443
|
-
| Schedule | Check |
|
|
444
|
-
|----------|-------|
|
|
445
|
-
| Every PR | compliance-guard, cross-platform-test |
|
|
446
|
-
| Weekly | Full security scan, CodeQL |
|
|
447
|
-
| Nightly | Tool version checks |
|
|
448
|
-
|
|
449
|
-
---
|
|
450
|
-
|
|
451
|
-
## References
|
|
452
|
-
|
|
453
|
-
- [SOC 2 Type II](https://www.aicpa.org/soc2)
|
|
454
|
-
- [ISO 27001:2022](https://www.iso.org/standard/27001)
|
|
455
|
-
- [OWASP Top 10](https://owasp.org/Top10/)
|
|
456
|
-
- [Google Shell Style Guide](https://google.github.io/styleguide/shellguide.html)
|
|
457
|
-
- [ShellCheck Wiki](https://www.shellcheck.net/wiki/)
|
|
458
|
-
- [SLSA Framework](https://slsa.dev/)
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
render_with_liquid: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# deps.dev Advisory Exceptions
|
|
6
|
-
|
|
7
|
-
The CI workflow `.github/workflows/deps-dev-validation.yml` scans
|
|
8
|
-
direct dependencies (npm + PyPI + GitHub Actions) against the
|
|
9
|
-
[deps.dev Insights API](https://docs.deps.dev/) on every PR, every
|
|
10
|
-
push to `main`, and every Tuesday at 04:00 UTC. When an advisory
|
|
11
|
-
is reported at or above the threshold (default `HIGH`), the workflow
|
|
12
|
-
fails.
|
|
13
|
-
|
|
14
|
-
This page is where time-bound exceptions live. An entry here suppresses
|
|
15
|
-
the check for one specific `(ecosystem, package)` pair, with an expiry
|
|
16
|
-
date so the exception cannot accumulate quietly.
|
|
17
|
-
|
|
18
|
-
Managed under [#877](https://github.com/sebastienrousseau/dotfiles/issues/877).
|
|
19
|
-
|
|
20
|
-
## Active exceptions
|
|
21
|
-
|
|
22
|
-
*(none currently)*
|
|
23
|
-
|
|
24
|
-
## Adding an exception
|
|
25
|
-
|
|
26
|
-
Add an entry below in this exact format — the scanner greps for
|
|
27
|
-
`` `<ecosystem>:<package>` `` at the start of a line (case-sensitive,
|
|
28
|
-
backtick-delimited):
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
`NPM:lodash` (expires 2026-12-31): Maintained fork; advisory affects
|
|
32
|
-
only the unused stream-API code path. Confirmed via static analysis.
|
|
33
|
-
Tracked under #NNNN.
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
`<ecosystem>` is one of:
|
|
37
|
-
|
|
38
|
-
| Ecosystem | Source |
|
|
39
|
-
|---|---|
|
|
40
|
-
| `NPM` | `package.json` direct deps |
|
|
41
|
-
| `PYPI` | `pyproject.toml` direct deps |
|
|
42
|
-
| `GITHUB_ACTIONS` | `uses:` references in `.github/workflows/*.yml` |
|
|
43
|
-
|
|
44
|
-
`(expires YYYY-MM-DD)` is required. Use a 90-day window for routine
|
|
45
|
-
work; longer windows need a sentence explaining why and a follow-up
|
|
46
|
-
issue link.
|
|
47
|
-
|
|
48
|
-
## When to add vs not add
|
|
49
|
-
|
|
50
|
-
**Legitimate exception**:
|
|
51
|
-
|
|
52
|
-
- The advisory is in a code path your usage doesn't reach (e.g.
|
|
53
|
-
vulnerable function isn't called by anything in this repo).
|
|
54
|
-
- The upstream fix is in flight and you've already opened a PR or
|
|
55
|
-
bumped to a beta.
|
|
56
|
-
- The package is end-of-life and you're tracking the migration to a
|
|
57
|
-
successor under a dedicated issue.
|
|
58
|
-
|
|
59
|
-
**Not an exception** — fix the dep instead:
|
|
60
|
-
|
|
61
|
-
- "Bumping the version is annoying" — that's the whole point of the
|
|
62
|
-
gate.
|
|
63
|
-
- "The advisory might be a false positive" — verify via deps.dev's
|
|
64
|
-
underlying source; if confirmed FP, file with deps.dev rather than
|
|
65
|
-
exception here.
|
|
66
|
-
- "We don't have time this sprint" — that's a deferral, not an
|
|
67
|
-
exception. Bump the issue to next sprint, don't suppress.
|
|
68
|
-
|
|
69
|
-
## Expiry policy
|
|
70
|
-
|
|
71
|
-
The scanner does not currently parse expiry dates (deferred — needs
|
|
72
|
-
a date-comparison helper). A monthly maintainer review of this page
|
|
73
|
-
is the human gate. Any entry past its expiry should either be
|
|
74
|
-
resolved (dep bumped, exception removed) or re-justified with a new
|
|
75
|
-
expiry.
|
|
76
|
-
|
|
77
|
-
When the date-parsing automation lands, expired exceptions will
|
|
78
|
-
auto-fail the gate even when they're still listed here.
|
|
79
|
-
|
|
80
|
-
## References
|
|
81
|
-
|
|
82
|
-
- [`tools/ci/check-deps-dev.sh`](https://github.com/sebastienrousseau/dotfiles/blob/main/tools/ci/check-deps-dev.sh) — the scanner.
|
|
83
|
-
- [`.github/workflows/deps-dev-validation.yml`](https://github.com/sebastienrousseau/dotfiles/blob/main/.github/workflows/deps-dev-validation.yml) — CI wiring.
|
|
84
|
-
- [`tests/unit/security/test_check_deps_dev.sh`](https://github.com/sebastienrousseau/dotfiles/blob/main/tests/unit/security/test_check_deps_dev.sh) — contract test against canned fixtures.
|
|
85
|
-
- [deps.dev API reference](https://docs.deps.dev/api/v3/).
|
|
86
|
-
- Issue [#877](https://github.com/sebastienrousseau/dotfiles/issues/877).
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
# Encrypted Security Disclosure — Reporter Workflow
|
|
2
|
-
|
|
3
|
-
This document is for **external security researchers** who have found
|
|
4
|
-
an issue in this repository and want to report it without exposing
|
|
5
|
-
sensitive details (PII, exploit chains, internal infrastructure) in
|
|
6
|
-
transit or at rest on third-party servers.
|
|
7
|
-
|
|
8
|
-
If your report doesn't need encryption, please use
|
|
9
|
-
[GitHub Security Advisories](https://github.com/sebastienrousseau/dotfiles/security/advisories)
|
|
10
|
-
instead — it's faster and the GitHub-side audit trail is stronger.
|
|
11
|
-
|
|
12
|
-
## 1. Fetch the maintainer's public key
|
|
13
|
-
|
|
14
|
-
```sh
|
|
15
|
-
# Web Key Directory is the modern recommendation.
|
|
16
|
-
gpg --auto-key-locate clear,wkd \
|
|
17
|
-
--locate-keys security@sebastienrousseau.com
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
If WKD fails (offline keyserver, corporate proxy), download directly:
|
|
21
|
-
|
|
22
|
-
```sh
|
|
23
|
-
curl -fsSL \
|
|
24
|
-
https://sebastienrousseau.com/.well-known/openpgpkey/hu/qpzqfwauiwxnu1xrf5h47bunsho44p6f \
|
|
25
|
-
| gpg --import
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 2. Verify the fingerprint
|
|
29
|
-
|
|
30
|
-
**Do not skip this step.** A MITM attacker can serve their own key.
|
|
31
|
-
|
|
32
|
-
```sh
|
|
33
|
-
gpg --fingerprint security@sebastienrousseau.com
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
The fingerprint must match the one published in
|
|
37
|
-
[`SECURITY.md`](https://github.com/sebastienrousseau/dotfiles/blob/main/SECURITY.md). Cross-verify
|
|
38
|
-
against the SSH signing key in `dot_config/git/allowed_signers.tmpl`
|
|
39
|
-
— the maintainer signs commits with the same identity, so both
|
|
40
|
-
fingerprints derive from the same identity claim.
|
|
41
|
-
|
|
42
|
-
If the two fingerprints don't match, **stop**. Open a private
|
|
43
|
-
[Security Advisory](https://github.com/sebastienrousseau/dotfiles/security/advisories/new)
|
|
44
|
-
and ask the maintainer to confirm the key out-of-band.
|
|
45
|
-
|
|
46
|
-
## 3. Encrypt your report
|
|
47
|
-
|
|
48
|
-
```sh
|
|
49
|
-
cat <<EOF | gpg --encrypt --armor \
|
|
50
|
-
--recipient security@sebastienrousseau.com \
|
|
51
|
-
--output disclosure.asc
|
|
52
|
-
Subject: <short description of the issue>
|
|
53
|
-
|
|
54
|
-
<full details — repro steps, affected versions, exploit, screenshots
|
|
55
|
-
referenced by base64-encoded attachments, contact info for follow-up>
|
|
56
|
-
EOF
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Verify the output is an ASCII-armored OpenPGP message before sending:
|
|
60
|
-
|
|
61
|
-
```sh
|
|
62
|
-
head -1 disclosure.asc
|
|
63
|
-
# Expected: -----BEGIN PGP MESSAGE-----
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## 4. Send
|
|
67
|
-
|
|
68
|
-
Attach `disclosure.asc` to an email to
|
|
69
|
-
**<security@sebastienrousseau.com>**.
|
|
70
|
-
|
|
71
|
-
Subject line: `[dotfiles] <severity>: <short description>` (no
|
|
72
|
-
encryption-sensitive content in the subject; mail relays log
|
|
73
|
-
subjects in plain text).
|
|
74
|
-
|
|
75
|
-
## 5. Acknowledgement
|
|
76
|
-
|
|
77
|
-
You should receive an acknowledgement within the SLA in
|
|
78
|
-
[`SECURITY.md`](https://github.com/sebastienrousseau/dotfiles/blob/main/SECURITY.md):
|
|
79
|
-
|
|
80
|
-
| Severity | Initial response |
|
|
81
|
-
|---|---|
|
|
82
|
-
| Critical | 24 hours |
|
|
83
|
-
| High | 72 hours |
|
|
84
|
-
| Medium | 5 business days |
|
|
85
|
-
| Low | 10 business days |
|
|
86
|
-
|
|
87
|
-
The acknowledgement will be signed with the same key you encrypted
|
|
88
|
-
to. Verify the signature:
|
|
89
|
-
|
|
90
|
-
```sh
|
|
91
|
-
gpg --verify response.asc
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
If you don't receive an acknowledgement in the SLA window, or the
|
|
95
|
-
acknowledgement signature doesn't verify, escalate by:
|
|
96
|
-
|
|
97
|
-
1. Opening a private GitHub Security Advisory.
|
|
98
|
-
2. DM-ing the maintainer on Mastodon: `@sebastienrousseau@hachyderm.io`.
|
|
99
|
-
|
|
100
|
-
## 6. After disclosure
|
|
101
|
-
|
|
102
|
-
The maintainer commits to:
|
|
103
|
-
|
|
104
|
-
- A fix timeline communicated within the SLA.
|
|
105
|
-
- A CVE assignment when severity ≥ Medium and the issue affects
|
|
106
|
-
published releases (npm package, release tarballs).
|
|
107
|
-
- Public credit at fix time in the release notes (unless you
|
|
108
|
-
request anonymity at report time).
|
|
109
|
-
- A backport to any actively-supported release line listed in
|
|
110
|
-
`SECURITY.md`.
|
|
111
|
-
|
|
112
|
-
## What NOT to do
|
|
113
|
-
|
|
114
|
-
- Don't post details in a public issue, even a "I found a bug, ping
|
|
115
|
-
me for details" placeholder — every public reference is a tip-off
|
|
116
|
-
to attackers monitoring the repo.
|
|
117
|
-
- Don't disclose to third parties (other dotfile maintainers,
|
|
118
|
-
security mailing lists, blog posts) before the embargo lifts.
|
|
119
|
-
- Don't access data or systems you don't own.
|
|
120
|
-
- Don't run automated scans against `*.sebastienrousseau.com` that
|
|
121
|
-
exceed normal browser-like traffic.
|
|
122
|
-
|
|
123
|
-
## See also
|
|
124
|
-
|
|
125
|
-
- [`SECURITY.md`](https://github.com/sebastienrousseau/dotfiles/blob/main/SECURITY.md) — policy
|
|
126
|
-
overview + fingerprint.
|
|
127
|
-
- [`docs/security/KEY_ROTATION.md`](KEY_ROTATION.md) — schedule for
|
|
128
|
-
when the disclosure key is rotated.
|
|
129
|
-
- [`docs/security/AUDIT_BYPASS.md`](AUDIT_BYPASS.md) — separate flow
|
|
130
|
-
for the pre-push audit bypass (not for disclosure).
|