claude-nomad 0.58.1 → 0.60.0

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 CHANGED
@@ -1,5 +1,58 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.60.0](https://github.com/funkadelic/claude-nomad/compare/v0.59.0...v0.60.0) (2026-07-15)
4
+
5
+
6
+ ### Added
7
+
8
+ * **links:** preserve live gsd hook entries across regenerateSettings ([#421](https://github.com/funkadelic/claude-nomad/issues/421)) ([10a18ca](https://github.com/funkadelic/claude-nomad/commit/10a18ca7ed6c1851cdc43e46ad616527d41a1f92))
9
+ * **sync:** compact output with merged tree and no-op collapse ([#415](https://github.com/funkadelic/claude-nomad/issues/415)) ([9bb9cdd](https://github.com/funkadelic/claude-nomad/commit/9bb9cdd7e901ea463d5c1fb5b66ffc39b2864f8a))
10
+ * **sync:** compact summary-only output by default, add --verbose ([#420](https://github.com/funkadelic/claude-nomad/issues/420)) ([b5b95b3](https://github.com/funkadelic/claude-nomad/commit/b5b95b372634a0b372023b399e7f16bb0063ff74))
11
+
12
+
13
+ ### Changed
14
+
15
+ * **lint:** enable sonarjs recommended ruleset with triaged exclusions ([#422](https://github.com/funkadelic/claude-nomad/issues/422)) ([f92fce8](https://github.com/funkadelic/claude-nomad/commit/f92fce8533e06814d5e3f58c1f120adf3e00ded7))
16
+ * **tests:** make Defender exclusion step non-fatal ([#419](https://github.com/funkadelic/claude-nomad/issues/419)) ([413a906](https://github.com/funkadelic/claude-nomad/commit/413a9065ef152dfaedd76b325de749070e2165ab))
17
+
18
+
19
+ ### Testing
20
+
21
+ * **integration:** cover extras deny-set, host overrides, and skills sync in round-trip ([#418](https://github.com/funkadelic/claude-nomad/issues/418)) ([70074b5](https://github.com/funkadelic/claude-nomad/commit/70074b5c5a8831a93726576e346e7e89ac511ffa))
22
+ * **pull:** fix flaky incomingChanges tests via shared mock instance ([#417](https://github.com/funkadelic/claude-nomad/issues/417)) ([6589887](https://github.com/funkadelic/claude-nomad/commit/6589887d0ac1c77f7696b89a1a518e469e913dae))
23
+ * **vitest:** raise subprocess project maxWorkers to 2 ([#423](https://github.com/funkadelic/claude-nomad/issues/423)) ([8fa28b5](https://github.com/funkadelic/claude-nomad/commit/8fa28b5a2ef4cae4816f5b6ad23bf90189a611d1))
24
+
25
+ ## [0.59.0](https://github.com/funkadelic/claude-nomad/compare/v0.58.1...v0.59.0) (2026-07-14)
26
+
27
+
28
+ ### Added
29
+
30
+ * native Windows support via win32 copy-sync modality ([#399](https://github.com/funkadelic/claude-nomad/issues/399)) ([524bce8](https://github.com/funkadelic/claude-nomad/commit/524bce8a3a4a1d900fb28778ed25ba7dd28ffb5d))
31
+
32
+
33
+ ### Changed
34
+
35
+ * add pinned actionlint job and single-source node version via .nvmrc ([#413](https://github.com/funkadelic/claude-nomad/issues/413)) ([e9fde67](https://github.com/funkadelic/claude-nomad/commit/e9fde67b50cbe0f0244a242a8dc9b9a8c7079079))
36
+ * drop the windows node 22 test leg ([#402](https://github.com/funkadelic/claude-nomad/issues/402)) ([1973b89](https://github.com/funkadelic/claude-nomad/commit/1973b89439b0d32db72c3046aca6d96b43d2a86c))
37
+ * **pages:** deploy docs on release publish instead of every main push ([#411](https://github.com/funkadelic/claude-nomad/issues/411)) ([c0f2658](https://github.com/funkadelic/claude-nomad/commit/c0f2658a8ed0369ef7216d08c7df07bb0635b9d1))
38
+ * platform stub helper and extras-sync collision-guard split ([#401](https://github.com/funkadelic/claude-nomad/issues/401)) ([5b3f906](https://github.com/funkadelic/claude-nomad/commit/5b3f906943004be5f3cf3411b6d0a250ce61ff04))
39
+ * **sonar:** fix doctor check smells and suppress S5976 for tests ([#409](https://github.com/funkadelic/claude-nomad/issues/409)) ([52e506e](https://github.com/funkadelic/claude-nomad/commit/52e506ebaa9a55b29d7946b408fd2db4b623cdc4))
40
+ * **tests:** declare shell pwsh on windows gitleaks step, drop lint ignore ([#414](https://github.com/funkadelic/claude-nomad/issues/414)) ([21a620f](https://github.com/funkadelic/claude-nomad/commit/21a620fb841fe7eb2432044f5ee69f8c0d11736b))
41
+ * **tests:** speed up windows leg via Defender scanning exclusion ([#412](https://github.com/funkadelic/claude-nomad/issues/412)) ([a7409bc](https://github.com/funkadelic/claude-nomad/commit/a7409bcf6e5ee4372a0e86c01ddde6653d531e40))
42
+
43
+
44
+ ### Testing
45
+
46
+ * isolate subprocess-heavy tests into a bounded vitest project ([#403](https://github.com/funkadelic/claude-nomad/issues/403)) ([579de5b](https://github.com/funkadelic/claude-nomad/commit/579de5b3583a4968e109fd8987ac25f8b7a9cc54))
47
+
48
+
49
+ ### Dependencies
50
+
51
+ * bump actions/labeler from 6.1.0 to 6.2.0 ([#405](https://github.com/funkadelic/claude-nomad/issues/405)) ([e582f9d](https://github.com/funkadelic/claude-nomad/commit/e582f9df0897614472a10b6ebbe30e2d94f3c9e9))
52
+ * bump astro in /docs-site in the prod-dependencies group ([#408](https://github.com/funkadelic/claude-nomad/issues/408)) ([7726450](https://github.com/funkadelic/claude-nomad/commit/7726450933cb54e320e60aa2903ca091c8e6206c))
53
+ * bump the codeql-action group across 1 directory with 2 updates ([#404](https://github.com/funkadelic/claude-nomad/issues/404)) ([ddd61c3](https://github.com/funkadelic/claude-nomad/commit/ddd61c34185d2702681d3a8af63ece19dbcfb4c1))
54
+ * bump the dev-dependencies group across 1 directory with 5 updates ([#410](https://github.com/funkadelic/claude-nomad/issues/410)) ([e9e98f8](https://github.com/funkadelic/claude-nomad/commit/e9e98f819cf80feeff59627678369cd63dd4b9df))
55
+
3
56
  ## [0.58.1](https://github.com/funkadelic/claude-nomad/compare/v0.58.0...v0.58.1) (2026-07-11)
4
57
 
5
58
 
package/README.md CHANGED
@@ -114,6 +114,57 @@ export NOMAD_HOST=<your-host-label> # add to ~/.zshrc or ~/.bashrc
114
114
  $ nomad pull
115
115
  ```
116
116
 
117
+ ### Windows
118
+
119
+ claude-nomad also runs natively on Windows, no WSL required (WSL2 still works fine too, if you
120
+ prefer it). The steps are the same as above with a couple of PowerShell-specific swaps:
121
+
122
+ ```powershell
123
+ # 1. Install the CLI.
124
+ > npm i -g claude-nomad
125
+
126
+ # 2. Create your private sync repo and scaffold it.
127
+ > nomad init
128
+
129
+ # 3. Add a stable host label. PowerShell has no ~/.bashrc equivalent, so set it
130
+ # as a persistent user environment variable instead, then restart your
131
+ # terminal so the new value is picked up.
132
+ > [System.Environment]::SetEnvironmentVariable('NOMAD_HOST', '<your-host-label>', 'User')
133
+ # Using cmd instead of PowerShell? The equivalent one-liner is:
134
+ # setx NOMAD_HOST <your-host-label>
135
+
136
+ # 4. Publish the scaffold to your private repo.
137
+ > nomad push
138
+ ```
139
+
140
+ A few Windows-specific things worth knowing:
141
+
142
+ - **Installing gh:** `winget install GitHub.cli` (or `scoop install gh`), then `gh auth login`.
143
+ Needed before `nomad init` on the first host; later hosts only clone with it.
144
+ - **Installing gitleaks:** `winget install gitleaks.gitleaks` (or `scoop install gitleaks` if you
145
+ use Scoop). `nomad doctor` prints the same hint whenever gitleaks is missing from PATH.
146
+ - **Shared config is copied, not symlinked.** On macOS and Linux, files like `CLAUDE.md` and your
147
+ skills live in the sync repo and are symlinked into `~/.claude/`, so there is one source of truth
148
+ on disk. Creating a symlink on Windows needs Developer Mode or admin rights, so on Windows these
149
+ are real copies instead. What this means for you: after editing a shared file on Windows, run
150
+ `nomad push` before your next `nomad pull` or `nomad sync`. `nomad sync` always pulls first, and
151
+ the pull half overlays the repo's copy onto yours (the prior content is snapshotted to the backup
152
+ dir first, so it is recoverable, but it is still reverted in place); pushing first is what
153
+ actually captures your edit. This is the same behavior claude-nomad's `skills/` sync already has
154
+ on every platform.
155
+ - **A `.gitleaksignore` allow entry may not travel across hosts.** gitleaks fingerprints each
156
+ finding using the file path exactly as it saw it: backslashes on Windows, forward slashes on
157
+ macOS/Linux. If you allow a finding with `nomad push --allow` (or `nomad allow`) on Windows, the
158
+ identical finding can reappear as "new" the first time it is scanned from a macOS/Linux host, and
159
+ the same happens in reverse. This is a known gitleaks limitation, not a claude-nomad bug; just
160
+ allow it again from the other host.
161
+ - **Line endings stay put.** A fresh `nomad init` writes a `.gitattributes` with `* -text`, so Git
162
+ never converts line endings between hosts. If you are joining a sync repo created before this file
163
+ existed, add that one line from any host (or watch for the `nomad doctor` warning that nudges
164
+ you), otherwise a Windows checkout with the common `core.autocrlf=true` Git default would rewrite
165
+ every text file's line endings, and every host would then see the whole tree as permanently
166
+ changed.
167
+
117
168
  Everyday loop on any host:
118
169
 
119
170
  ```bash
@@ -123,12 +174,13 @@ $ nomad sync # pull config, then publish local changes, in one step
123
174
 
124
175
  `nomad sync` is the command to reach for day to day: it always pulls first (so changes from your
125
176
  other machines land before anything is pushed, and work that exists only on this machine is kept,
126
- not deleted) and then pushes, under one lock, so there is no ordering to remember. `nomad pull` and
127
- `nomad push` are still available as lower-level commands for cases `sync` does not cover: recovering
128
- a wedged repo with `nomad pull --force-remote`, or resolving a detected secret without the
129
- interactive menu via `nomad push --redact-all` / `--allow` / `--allow-all` (see
130
- [Changing settings](#changing-settings) and
131
- [Recovery flows](https://funkadelic.github.io/claude-nomad/recovery/)). The
177
+ not deleted) and then pushes, under one lock, so there is no ordering to remember. Output is compact
178
+ by default: a run prints only a short Sync summary, not the full status tree; pass
179
+ `nomad sync --verbose` (or `--all` / `-v`) to see the full tree. `nomad pull` and `nomad push` are
180
+ still available as lower-level commands for cases `sync` does not cover: recovering a wedged repo
181
+ with `nomad pull --force-remote`, or resolving a detected secret without the interactive menu via
182
+ `nomad push --redact-all` / `--allow` / `--allow-all` (see [Changing settings](#changing-settings)
183
+ and [Recovery flows](https://funkadelic.github.io/claude-nomad/recovery/)). The
132
184
  [FAQ](https://funkadelic.github.io/claude-nomad/faq/) covers what `sync` does under the hood and the
133
185
  push/pull order it enforces.
134
186
 
@@ -235,6 +287,10 @@ independently from the CLI, but requires nomad `>= 0.35.0` because it calls rece
235
287
  - [`gitleaks`](https://github.com/gitleaks/gitleaks) (required for `nomad push`)
236
288
  - `gh` ([GitHub CLI](https://cli.github.com/)), required by `nomad init`
237
289
 
290
+ Works on macOS, Linux (including WSL2), and native Windows (PowerShell or cmd). See
291
+ [Windows](#windows) above for the Windows equivalents of the install and host-label steps, the
292
+ copy-sync trade-off, and the `.gitleaksignore` cross-host caveat.
293
+
238
294
  **Optional:** [curl](https://curl.se/) or [wget](https://www.gnu.org/software/wget/) for the
239
295
  version-staleness check and `nomad doctor --check-schema`. The CLI works without them. The opt-in
240
296
  `nomad doctor --check-remote` flag reads the locally-cached `origin/main` remote-tracking ref (no