Skip to content

fix(bin): extend Claude migrate drift catalog with new regenerable sidecars - #96

Merged
pjungermann merged 1 commit into
mainfrom
pjungermann/claude-drift-catalog
Oct 26, 2026
Merged

pjungermann merged 1 commit into
mainfrom
pjungermann/claude-drift-catalog

Conversation

@pjungermann

Copy link
Copy Markdown
Owner

Summary

A backup run on an up-to-date Claude Code install hit 8 drift entries and refused to continue:

~/.claude/mcp-needs-auth-cache.json
~/.claude/policy-limits.json.signature-iat.json
~/.claude/policy-limits.json.signature.json
~/.claude/remote-settings.json.signature-iat.json
~/.claude/remote-settings.json.signature.json
~/.claude/remote-settings.json.synced-at
~/.claude/state
~/.claude/plugins/plugin-directory-cache-v2.json

Each is a server-signed sidecar, a sync timestamp, a cache, or runtime state that Claude Code regenerates on next launch; none hold anything a user would want on a new laptop. Classifying all 8 as excludes:

  • mcp-needs-auth-cache.json — MCP auth lookup cache.
  • policy-limits.json.signature{,-iat}.json — signature and issued-at sidecars for the Anthropic-signed policy-limits.json (which was already excluded).
  • remote-settings.json.signature{,-iat}.json, .synced-at — same pattern for remote-settings.json.
  • state — Claude Code's runtime state directory (one-time dialog flags, onboarding progress, etc.).
  • plugins/plugin-directory-cache-v2.json — plugin catalog cache, peer of the already-excluded plugin-catalog-cache.json.

Enumeration kept explicit rather than switching to a prefix match: a genuinely new sidecar name (e.g. a hypothetical .ciphertext.json that would warrant copying) still trips the drift gate instead of being silently swept.

Immediate user-side workaround while this merges: MAC_SETUP_SKIP_PULL=1 ./mac-setup.sh migrate-claude-code backup after editing the catalog locally, or patch the file in place.

…decars

A backup run on an up-to-date Claude Code install hit 8 drift entries
and refused to continue:

  mcp-needs-auth-cache.json
  policy-limits.json.signature-iat.json
  policy-limits.json.signature.json
  remote-settings.json.signature-iat.json
  remote-settings.json.signature.json
  remote-settings.json.synced-at
  state
  plugins/plugin-directory-cache-v2.json

All are server-signed sidecars, sync timestamps, caches, or runtime
state that Claude Code regenerates on next launch; none hold anything
the user would want on a new laptop. Classify them as excludes:

  * mcp-needs-auth-cache.json: MCP auth lookup cache
  * policy-limits.json.signature{,-iat}.json: signature + issued-at
    sidecars for the Anthropic-signed policy-limits.json (which is
    already excluded; its signature pair follows the same semantics)
  * remote-settings.json.signature{,-iat}.json, .synced-at: same
    pattern for remote-settings
  * state: Claude Code's runtime state dir (one-time dialog flags,
    onboarding progress, etc.); regenerable
  * plugins/plugin-directory-cache-v2.json: plugin catalog cache,
    peer of the already-excluded plugin-catalog-cache.json

Entries slot in alphabetically within each list. Enumeration kept
explicit rather than switching to a prefix match so a genuinely new
sidecar name (e.g. a future ".ciphertext.json" that would warrant
copying) still trips the drift gate instead of being silently swept.
@github-actions

Copy link
Copy Markdown

✅MegaLinter analysis: Success

Descriptor Linter Files Fixed Errors Max errors Warnings Elapsed time
✅ BASH bash-exec 1 0 0 0.51s
✅ BASH shellcheck 1 0 0 1.21s
✅ COPYPASTE jscpd yes no no 0.77s
✅ REPOSITORY git_diff yes no no 0.01s
✅ SPELL cspell 2 0 0 2.14s

See detailed reports in MegaLinter artifacts
Set VALIDATE_ALL_CODEBASE: true in mega-linter.yml to validate all sources, not only the diff

MegaLinter is provided by OX Security
Show us your support by starring ⭐ the repository

@github-actions

Copy link
Copy Markdown

✅MegaLinter analysis: Success

Descriptor Linter Files Fixed Errors Max errors Warnings Elapsed time
✅ BASH bash-exec 1 0 0 0.01s
✅ BASH shellcheck 1 0 0 1.0s
✅ REPOSITORY betterleaks yes no no 0.83s
✅ REPOSITORY checkov yes no no 22.55s
✅ REPOSITORY devskim yes no no 2.13s
✅ REPOSITORY dustilock yes no no 0.02s
✅ REPOSITORY grype yes no no 98.97s
✅ REPOSITORY kingfisher yes no no 8.33s
✅ REPOSITORY osv-scanner yes no no 0.14s
✅ REPOSITORY secretlint yes no no 1.38s
✅ REPOSITORY syft yes no no 1.71s
✅ REPOSITORY trivy yes no no 14.63s
✅ REPOSITORY trivy-sbom yes no no 0.13s
✅ REPOSITORY trufflehog yes no no 3.78s

See detailed reports in MegaLinter artifacts
Set VALIDATE_ALL_CODEBASE: true in mega-linter.yml to validate all sources, not only the diff

MegaLinter is provided by OX Security
Show us your support by starring ⭐ the repository

@pjungermann
pjungermann marked this pull request as ready for review October 26, 2026 17:36
@pjungermann
pjungermann merged commit bd66336 into main Oct 26, 2026
3 checks passed
@pjungermann
pjungermann deleted the pjungermann/claude-drift-catalog branch October 26, 2026 17:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant