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 +68 -0
- package/README.md +34 -29
- package/dist/nomad.mjs +704 -500
- package/package.json +4 -3
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
229
|
-
|
|
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
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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
|
|
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
|
|
344
|
+
design.
|
|
340
345
|
|
|
341
346
|
## Learn more
|
|
342
347
|
|
|
343
|
-
- [How it works](https://funkadelic.github.io/claude-nomad/how-it-works/)
|
|
344
|
-
|
|
345
|
-
- [GSD-aware sync](https://funkadelic.github.io/claude-nomad/gsd-aware-sync/)
|
|
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/)
|
|
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/)
|
|
350
|
-
|
|
351
|
-
- [Commands reference](https://funkadelic.github.io/claude-nomad/commands/)
|
|
352
|
-
- [Claude Code plugin](https://funkadelic.github.io/claude-nomad/plugin/)
|
|
353
|
-
|
|
354
|
-
- [Recovery flows](https://funkadelic.github.io/claude-nomad/recovery/)
|
|
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/)
|
|
357
|
-
|
|
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/)
|