Private
Public Access
0
0

fix(controller): re-apply FR1+FR2 (mma_tier_usage pre-population + _flush_to_project defensive d.get)

This commit is contained in:
2026-06-10 11:49:30 -04:00
parent 14a329c1a9
commit d945cb7432
+13 -3
View File
@@ -2609,7 +2609,7 @@ class AppController:
# Save MMA State
mma_sec = proj.setdefault("mma", {})
mma_sec["epic"] = self.ui_epic_input
mma_sec["tier_models"] = {t: {"model": d["model"], "provider": d.get("provider", "gemini"), "tool_preset": d.get("tool_preset")} for t, d in self.mma_tier_usage.items()}
mma_sec["tier_models"] = {t: {"model": d.get("model"), "provider": d.get("provider", "gemini"), "tool_preset": d.get("tool_preset")} for t, d in self.mma_tier_usage.items()}
if self.active_track:
mma_sec["active_track"] = asdict(self.active_track)
else:
@@ -3378,8 +3378,18 @@ class AppController:
self.active_tickets = []
self.engines.clear()
self.mma_streams.clear()
# Reset mma_tier_usage to pre-populated default (prior tests pollute it)
self.mma_tier_usage = {'Tier 1': {}, 'Tier 2': {}, 'Tier 3': {}, 'Tier 4': {}}
# Reset mma_tier_usage to the same shape as __init__ (line 952-957). Prior
# tests pollute it; downstream consumers like _flush_to_project require
# every tier entry to have 'model' / 'provider' / 'tool_preset' keys. The
# pre-populated defaults (input=0, output=0, provider='gemini', model=
# tier default, tool_preset=None) restore the contract without retaining
# any polluted model names or token counts from a prior session.
self.mma_tier_usage = {
"Tier 1": {"input": 0, "output": 0, "provider": "gemini", "model": "gemini-3.1-pro-preview", "tool_preset": None},
"Tier 2": {"input": 0, "output": 0, "provider": "gemini", "model": "gemini-3-flash-preview", "tool_preset": None},
"Tier 3": {"input": 0, "output": 0, "provider": "gemini", "model": "gemini-2.5-flash-lite", "tool_preset": None},
"Tier 4": {"input": 0, "output": 0, "provider": "gemini", "model": "gemini-2.5-flash-lite", "tool_preset": None},
}
# Reset RAG engine state so the chroma collection from a prior test
# doesn't leak into the next session. The next _sync_rag_engine will
# rebuild the engine with the new active_project_root.