Skip to content

fix: preserve user-defined env in settings.json - #76

Merged
guyskk merged 1 commit into
mainfrom
fix/settings-env-handling
Mar 26, 2026
Merged

fix: preserve user-defined env in settings.json#76
guyskk merged 1 commit into
mainfrom
fix/settings-env-handling

Conversation

@guyskk

@guyskk guyskk commented Mar 26, 2026

Copy link
Copy Markdown
Owner

Summary

  • Fix Issue ccc removes user-defined env field from ~/.claude/settings.json on every run #74: delete(settingsWithHook, "env") previously removed all user-defined env from settings.json on every ccc run
  • Add FilterUserEnvForSettings to only keep safe user env keys (excluding managed/base/provider keys and ANTHROPIC_*/CLAUDE_* prefixed keys)
  • Add MergeEnvMaps to merge multiple env maps for subprocess env construction
  • Subprocess env now only contains base + provider env (not user env, since Claude Code reads settings.json directly)
  • Remove unused CleanEnvInSettings function and its tests
  • Update docs/settings-merge-strategy.md to reflect new env handling behavior

Test plan

  • TestFilterUserEnvForSettings — 8 subtests covering conflict exclusion, prefix exclusion, nil/empty input
  • TestMergeEnvMaps — 7 subtests covering basic merge, override, nil/empty handling
  • TestSwitchWithHookUserEnv/preserves user env without conflicts — verifies filtered user env in settings.json and base+provider-only subprocess env
  • TestSwitchWithHookUserEnv/removes conflicting user env — verifies conflicting keys are filtered out
  • Existing TestSwitchWithHook/switch to existing provider — no regression
  • ./check.sh — all checks passed (lint, test with race detector, build)

Previously, `delete(settingsWithHook, "env")` removed all user-defined
env from settings.json on every ccc run (Issue #74).

Now:
- Only write user's non-conflicting env keys to settings.json (filtered
  by managed keys and ANTHROPIC_*/CLAUDE_* prefix)
- Pass only base + provider env to subprocess (not user env)
- Add FilterUserEnvForSettings and MergeEnvMaps helper functions
- Remove unused CleanEnvInSettings function
@guyskk
guyskk merged commit 34dc00f into main Mar 26, 2026
3 checks passed
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