Private
Public Access
0
0

fix(project): Reload personas and validate active AI settings on project switch

When switching projects, the previous project's project-specific persona and
presets remained selected in the AI Settings panel because:
1. self.personas was not reloaded after switching project root
2. self.ui_active_persona / tool_preset / bias_profile / project_preset_name
   were not validated against the newly-loaded personas/presets

Fix:
- Reload self.personas from self.persona_manager in _refresh_from_project
- Validate each active selection and reset to None/empty if it does not
  exist in the newly-loaded manager dictionaries
- Push the active tool preset and bias profile to ai_client after the swap
- Initialize self.ui_active_bias_profile in class attribute block (was only
  set later in __init__, causing AttributeError on direct attribute access)

Tests: 4 new tests in tests/test_project_switch_persona_preset.py verify
the reset behavior for persona, preset, tool preset, and global preset
preservation.
This commit is contained in:
2026-06-04 20:36:59 -04:00
parent ce211e76f8
commit b92daef34f
2 changed files with 151 additions and 0 deletions
+12
View File
@@ -951,6 +951,7 @@ class AppController:
self.prior_mma_dashboard_state = {}
self.diagnostic_log: List[Dict[str, Any]] = []
self.ui_active_tool_preset: str | None = None
self.ui_active_bias_profile: str | None = None
self.available_models: List[str] = []
self.all_available_models: Dict[str, List[str]] = {}
self.proposed_tracks: List[Dict[str, Any]] = []
@@ -2782,6 +2783,17 @@ class AppController:
self.tool_preset_manager.project_root = Path(self.active_project_root)
self.tool_presets = self.tool_preset_manager.load_all_presets()
self.bias_profiles = self.tool_preset_manager.load_all_bias_profiles()
self.personas = self.persona_manager.load_all()
if self.ui_active_persona and self.ui_active_persona not in self.personas:
self.ui_active_persona = ""
if self.ui_active_tool_preset and self.ui_active_tool_preset not in self.tool_presets:
self.ui_active_tool_preset = None
if self.ui_active_bias_profile and self.ui_active_bias_profile not in self.bias_profiles:
self.ui_active_bias_profile = None
if self.ui_project_preset_name and self.ui_project_preset_name not in self.presets:
self.ui_project_preset_name = None
ai_client.set_tool_preset(self.ui_active_tool_preset)
ai_client.set_bias_profile(self.ui_active_bias_profile)
raw_presets = proj.get("view_presets", [])
if isinstance(raw_presets, dict):
self.view_presets = [models.NamedViewPreset.from_dict({"name": name, **data}) for name, data in raw_presets.items()]