claude-nomad 0.67.1 → 0.67.3

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,73 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.67.3](https://github.com/funkadelic/claude-nomad/compare/v0.67.2...v0.67.3) (2026-08-29)
4
+
5
+ ### What's new
6
+
7
+ **On native Windows (PowerShell or cmd).** Note: WSL2 behaves like Linux and this does not apply to it.
8
+
9
+ - **`nomad pull` now warns about a file that should never be synced, even when your gitignore hides it.** Before a pull, nomad checks your sync repo for files that have no business travelling between machines, such as credentials or per-host settings, and warns when one turns up under `shared/`. A file covered by a gitignore rule was invisible to that check, so it could sit there unmentioned. Nomad now names the file, along with the `git check-ignore` command that tells you which rule hid it, which is often a rule in your global git config rather than anything you wrote for this repo. It only warns. Nothing is deleted, because nomad cannot publish a file git ignores, so there is nothing to undo.
10
+
11
+ The rest of this release is internal: a regression test for the Windows `nomad sync` path, a stricter check on the test suite's own mock handling, and test-result reporting in CI. Nothing else changes what nomad does.
12
+
13
+
14
+
15
+ ### Fixed
16
+
17
+ * **pull:** report gitignored denylisted paths under shared/ ([#553](https://github.com/funkadelic/claude-nomad/issues/553)) ([b226902](https://github.com/funkadelic/claude-nomad/commit/b226902e4361a3325a2fd0495e5abbd532f7d806))
18
+
19
+
20
+ ### Changed
21
+
22
+ * report test results to Codecov Test Analytics ([#551](https://github.com/funkadelic/claude-nomad/issues/551)) ([a1fb555](https://github.com/funkadelic/claude-nomad/commit/a1fb5558185e6a97a8a026eeb05d3ef6a9834f28))
23
+
24
+
25
+ ### Documentation
26
+
27
+ * clean up the documentation prose ([#549](https://github.com/funkadelic/claude-nomad/issues/549)) ([cd8c40d](https://github.com/funkadelic/claude-nomad/commit/cd8c40d2f2877a868876e9ab338f4884060e90d9))
28
+
29
+
30
+ ### Testing
31
+
32
+ * scope the doMock/doUnmock symmetry guard to every describe ([#552](https://github.com/funkadelic/claude-nomad/issues/552)) ([ebe4af9](https://github.com/funkadelic/claude-nomad/commit/ebe4af988fed37b9ced1a3a42dd736fb1901c888))
33
+ * **sync:** add a cross-platform parity journey for nomad sync ([f87464d](https://github.com/funkadelic/claude-nomad/commit/f87464dcf7bf23341f1b8b8d4ae2eaefe0cc4e08))
34
+
35
+ ## [0.67.2](https://github.com/funkadelic/claude-nomad/compare/v0.67.1...v0.67.2) (2026-08-24)
36
+
37
+ ### What's new
38
+
39
+ **On all supported platforms, i.e. \*nix, Mac, WSL2, and native Windows.**
40
+
41
+ - **`nomad adopt` no longer calls a broken shortcut adopted.** If a name in `~/.claude/` already points into your sync repo but the repo side is missing, broken, or unreadable, adopt used to report it as already adopted and leave it there. It now says which of those three it found, so you can tell a healthy setup from one that quietly stopped working. It still finishes cleanly, since it only looks and reports.
42
+
43
+ **On native Windows (PowerShell or cmd).** Note: WSL2 behaves like Linux and none of these apply to it.
44
+
45
+ - **A push no longer reports success after skipping a broken shared item.** When an item in your sync repo pointed at something that was no longer there, the push dropped it without a word, so the edits you made on that machine never reached the repo and the push still said it worked. It now warns and names the item. Two more cases used to skip every shared item in silence and now report once: a `shared/` folder that cannot be read at all, and a file sitting where that folder should be.
46
+ - **`nomad adopt` refuses a broken shared item instead of claiming it worked.** `nomad pull` cannot repair a broken pointer, since it copies from it, so adopt now stops and says so rather than sending you to a command that cannot help.
47
+
48
+ **On \*nix, Mac, and WSL2.** Note: native Windows keeps a real copy of each shared item, so this state is normal there and never reported.
49
+
50
+ - **`nomad doctor` stops sending you to a command that would refuse.** When a folder of your own sits where a shared item belongs and your sync repo already holds content under that name, doctor used to tell you to run `nomad adopt <name>`, which turns that exact case away. Doctor now describes the collision and gives you both ways out, and warns that either one throws away a copy.
51
+
52
+ ### Fixed
53
+
54
+ * stop reporting success when a shared item is broken in the sync repo ([#538](https://github.com/funkadelic/claude-nomad/issues/538)) ([10961b9](https://github.com/funkadelic/claude-nomad/commit/10961b910ff49b4b146436aee860ae2b7b321fb6))
55
+ * warn once about a broken shared folder and only suggest adopt when it can help ([#540](https://github.com/funkadelic/claude-nomad/issues/540)) ([8d3033d](https://github.com/funkadelic/claude-nomad/commit/8d3033d6f72ae45b4329fbc6a0e8d66367a63db7))
56
+
57
+
58
+ ### Changed
59
+
60
+ * **tests:** skip the suite for docs-site-only changes ([#548](https://github.com/funkadelic/claude-nomad/issues/548)) ([52cbe18](https://github.com/funkadelic/claude-nomad/commit/52cbe18b9cd67e338f3a269d8ec42610312a4150))
61
+
62
+
63
+ ### Dependencies
64
+
65
+ * bump astro from 7.2.2 to 7.2.4 in /docs-site in the prod-dependencies group across 1 directory ([#545](https://github.com/funkadelic/claude-nomad/issues/545)) ([f888dbd](https://github.com/funkadelic/claude-nomad/commit/f888dbdb2e6caa2e8c6fdc8cf49113c990eea54a))
66
+ * bump the codeql-action group across 1 directory with 2 updates ([#544](https://github.com/funkadelic/claude-nomad/issues/544)) ([0754b7b](https://github.com/funkadelic/claude-nomad/commit/0754b7b0d38f6390ef319661219ed17cabfeb6ca))
67
+ * bump the dev-dependencies group across 1 directory with 2 updates ([#547](https://github.com/funkadelic/claude-nomad/issues/547)) ([1b0f539](https://github.com/funkadelic/claude-nomad/commit/1b0f5394e929e948082881486358f04347433330))
68
+ * bump the dev-dependencies group with 2 updates ([#541](https://github.com/funkadelic/claude-nomad/issues/541)) ([a1fef0c](https://github.com/funkadelic/claude-nomad/commit/a1fef0c37c7bcddf7571e5a40c8c78d620d8cd33))
69
+ * bump the stryker group from 9.6.1 to 10.0.0 ([#546](https://github.com/funkadelic/claude-nomad/issues/546)) ([e9980e8](https://github.com/funkadelic/claude-nomad/commit/e9980e8ec7c27307496946e2f45298d9c247e720))
70
+
3
71
  ## [0.67.1](https://github.com/funkadelic/claude-nomad/compare/v0.67.0...v0.67.1) (2026-08-20)
4
72
 
5
73
  ### What's new
package/README.md CHANGED
@@ -17,8 +17,8 @@ private Git repo you control. Run `nomad sync` on any machine and everything is
17
17
  included; it pulls in your latest config first, then publishes your local changes, so you never have
18
18
  to remember which one to run first.
19
19
 
20
- Not dotfiles, not rsync. **claude-nomad** understands Claude Code's state, so your session history
21
- survives different file paths and your secrets never ride along.
20
+ Dotfiles managers and rsync copy files. **claude-nomad** understands Claude Code's state, so your
21
+ session history survives different file paths and your secrets never ride along.
22
22
 
23
23
  **Full documentation: <https://funkadelic.github.io/claude-nomad/>**
24
24
 
@@ -81,7 +81,7 @@ opt-in per-project sync, transcript redaction, backup pruning, and more.
81
81
 
82
82
  ## Quickstart
83
83
 
84
- nomad works with two directories, and the difference is the one thing worth learning up front:
84
+ nomad works with two directories:
85
85
 
86
86
  - **`~/claude-nomad/`** is your private sync repo. This is the one you edit.
87
87
  - **`~/.claude/`** is Claude Code's live config. nomad regenerates it on every `pull`.
@@ -148,7 +148,13 @@ Native Windows cannot use symlinks, so claude-nomad keeps a real copy of your sh
148
148
  the repo before they fetch, so an edit you have not published yet is captured rather than
149
149
  overwritten. If a file cannot be read, because another program is holding it open or its permissions
150
150
  changed, the pull warns naming the file and the reason, skips that one file, and finishes everything
151
- else normally. Close whatever is holding it, or fix its permissions, and run again to pick it up.
151
+ else normally. Close whatever is holding it, or fix its permissions, and run again to pick it up. A
152
+ shared name whose copy in the sync repo is there but points at content that is not, usually because
153
+ the machine that shared it no longer has the original, is skipped the same way, with a warning
154
+ naming it. Remove it from the sync repo, or restore what it points at, by hand. A copy in the sync
155
+ repo that cannot be read at all is skipped and named too, with its own wording: nothing checked
156
+ where it leads, so the warning asks you to look at its permissions in the sync repo rather than to
157
+ restore anything.
152
158
 
153
159
  ```powershell
154
160
  # 1. Install prerequisites and the CLI. (Using Scoop instead? scoop install gh gitleaks.)
@@ -216,18 +222,17 @@ log output remains grep-stable.
216
222
  When `nomad push` detects a potential secret, it drops into an interactive menu (TTY) or aborts with
217
223
  a recovery hint (non-TTY/CI). Three non-interactive recovery paths are available without the menu:
218
224
 
219
- - `nomad push --full-scan` -- ignore the per-host push manifest and rescan all transcripts, then
225
+ - `nomad push --full-scan`: ignore the per-host push manifest and rescan all transcripts, then
220
226
  rewrite the manifest on success. Use this after upgrading gitleaks, after editing a gitleaks
221
227
  config file, or whenever you want to be certain nothing slipped through an incremental scan.
222
228
  Composes freely with `--dry-run` and all resolution modes.
223
- - `nomad push --redact-all` -- scrub every finding from the local transcript in place, then push.
229
+ - `nomad push --redact-all`: scrub every finding from the local transcript in place, then push.
224
230
  All-or-nothing: if any finding cannot be redacted (an active session, or one that does not map to
225
231
  a synced transcript), nothing is changed and the push stops so you can handle those sessions.
226
- - `nomad push --allow <rule>` -- record findings matching one gitleaks rule id as false positives
232
+ - `nomad push --allow <rule>`: record findings matching one gitleaks rule id as false positives
227
233
  (appends their fingerprints to `.gitleaksignore`), then re-scan and push.
228
- - `nomad push --allow-all` -- record every current finding as a false positive, then re-scan and
229
- push.
230
- - `nomad allow <fingerprint>...` -- pre-record specific fingerprints in `.gitleaksignore` without
234
+ - `nomad push --allow-all`: record every current finding as a false positive, then re-scan and push.
235
+ - `nomad allow <fingerprint>...`: pre-record specific fingerprints in `.gitleaksignore` without
231
236
  going through a push cycle.
232
237
 
233
238
  All allow paths always re-scan after writing the allowlist; a surviving finding still aborts the
@@ -308,16 +313,16 @@ false alarm from a concurrent run. Value `3` is reserved for future use.
308
313
 
309
314
  ## Crash reports
310
315
 
311
- If `nomad` ever hits an unexpected bug, it no longer dumps a raw stack trace at you. Instead it
312
- prints a short "this looks like a bug" banner (with a link to the issue tracker) and writes a small
313
- report you can attach to a bug report if you choose. The exit code is unchanged: an unexpected crash
314
- exits `1`, and a documented failure still exits with its own code from the table above. A prompt you
315
- cancel yourself is not a crash: it exits `130` and writes no report.
316
+ If `nomad` ever hits an unexpected bug, it does not dump a raw stack trace. It prints a short "this
317
+ looks like a bug" banner (with a link to the issue tracker) and writes a small report you can attach
318
+ to a bug report if you choose. The exit code is unchanged: an unexpected crash exits `1`, and a
319
+ documented failure still exits with its own code from the table above. A prompt you cancel yourself
320
+ is not a crash: it exits `130` and writes no report.
316
321
 
317
322
  What this means for you:
318
323
 
319
324
  - **The report stays on your machine.** It is written to `~/.cache/claude-nomad/crash/` and nothing
320
- is ever uploaded anywhere. The file just sits there until you decide to share it or delete it.
325
+ is ever uploaded anywhere. The file sits there until you decide to share it or delete it.
321
326
  - **The saved report is scrubbed twice.** First a structural pass rewrites your home directory to
322
327
  `~` and your hostname to a placeholder (absolute paths are personal information a secret scanner
323
328
  would not catch), and redacts credential-shaped tokens it recognizes (GitHub, GitLab, Slack, and
@@ -336,24 +341,24 @@ What this means for you:
336
341
  contents of any file.
337
342
  - **The directory manages itself.** Only the most recent reports are kept; older ones are pruned
338
343
  automatically on the next crash. There is no `nomad clean` flag for the crash directory, by
339
- design: it self-manages.
344
+ design.
340
345
 
341
346
  ## Learn more
342
347
 
343
- - [How it works](https://funkadelic.github.io/claude-nomad/how-it-works/) -- path remapping,
344
- settings merge, what syncs and what doesn't
345
- - [GSD-aware sync](https://funkadelic.github.io/claude-nomad/gsd-aware-sync/) -- what nomad does for
348
+ - [How it works](https://funkadelic.github.io/claude-nomad/how-it-works/): path remapping, settings
349
+ merge, what syncs and what doesn't
350
+ - [GSD-aware sync](https://funkadelic.github.io/claude-nomad/gsd-aware-sync/): what nomad does for
346
351
  GSD users out of the box
347
- - [Setup and migration](https://funkadelic.github.io/claude-nomad/quickstart/) -- full setup
352
+ - [Setup and migration](https://funkadelic.github.io/claude-nomad/quickstart/): full setup
348
353
  walkthrough, migrating an existing `~/.claude/`
349
- - [Recipes](https://funkadelic.github.io/claude-nomad/recipes/) -- copy-pasteable example configs
350
- for common setups, from scratch to cross-OS remapping and GSD integration
351
- - [Commands reference](https://funkadelic.github.io/claude-nomad/commands/) -- all CLI flags
352
- - [Claude Code plugin](https://funkadelic.github.io/claude-nomad/plugin/) -- /nomad slash commands
353
- and the session-start drift check
354
- - [Recovery flows](https://funkadelic.github.io/claude-nomad/recovery/) -- backups, drop-session,
354
+ - [Recipes](https://funkadelic.github.io/claude-nomad/recipes/): copy-pasteable example configs for
355
+ common setups, from scratch to cross-OS remapping and GSD integration
356
+ - [Commands reference](https://funkadelic.github.io/claude-nomad/commands/): all CLI flags
357
+ - [Claude Code plugin](https://funkadelic.github.io/claude-nomad/plugin/): /nomad slash commands and
358
+ the session-start drift check
359
+ - [Recovery flows](https://funkadelic.github.io/claude-nomad/recovery/): backups, drop-session,
355
360
  redact, gitleaks allowlist, non-interactive allow
356
- - [FAQ](https://funkadelic.github.io/claude-nomad/faq/) -- common questions, like the right
357
- push/pull order when both sides have changes
361
+ - [FAQ](https://funkadelic.github.io/claude-nomad/faq/): common questions, like the right push/pull
362
+ order when both sides have changes
358
363
  - [Contributing](https://funkadelic.github.io/claude-nomad/contributing/)
359
364
  - [Security policy](https://funkadelic.github.io/claude-nomad/security/)