fix: --config flag now fully overrides ~/.strix/cli-config.json (#457)

* fix: --config flag now fully overrides ~/.strix/cli-config.json (fixes #377)

Previously, env vars applied from the default config at module import time
were not cleared when --config was later processed, causing settings from
~/.strix/cli-config.json to leak into runs that specified a custom config.

Track which vars were applied by the initial default-config load in
Config._applied_from_default. In apply_config_override, clear those vars
before applying the custom config so only the custom file's settings take effect.

* Add config override regression test

* Make config override test setup explicit

---------

Co-authored-by: octo-patch <octo-patch@github.com>
Co-authored-by: bearsyankees <bearsyankees@gmail.com>
This commit is contained in:
Octopus
2026-04-22 16:37:22 -04:00
committed by GitHub
co-authored by octo-patch bearsyankees
parent 60abc09ff9
commit 9fb101282f
3 changed files with 48 additions and 1 deletions
+10 -1
View File
@@ -2,7 +2,7 @@ import contextlib
import json
import os
from pathlib import Path
from typing import Any
from typing import Any, ClassVar
STRIX_API_BASE = "https://models.strix.ai/api/v1"
@@ -56,6 +56,10 @@ class Config:
# Config file override (set via --config CLI arg)
_config_file_override: Path | None = None
# Tracks env vars set by the initial default-config load so they can be
# cleared when a --config override is later applied (avoids leakage).
_applied_from_default: ClassVar[dict[str, str]] = {}
@classmethod
def _tracked_names(cls) -> list[str]:
return [
@@ -151,6 +155,11 @@ class Config:
os.environ[var_name] = var_value
applied[var_name] = var_value
# Record what was applied from the default config so it can be cleared
# if a --config override is later provided (prevents leakage).
if cls._config_file_override is None and not force:
cls._applied_from_default = applied
return applied
@classmethod