fix(gui): Skip empty strings in selectable to prevent ImGui ID assertion

Empty strings in bias_profiles.keys() and personas.keys() caused
imgui.selectable() to fail with 'Cannot have an empty ID at root of
window' assertion error. Added guards to skip empty names.
This commit is contained in:
2026-03-22 11:16:52 -04:00
parent 133fd60613
commit f6fe3baaf4
10 changed files with 48 additions and 43 deletions
+3 -3
View File
@@ -1,7 +1,7 @@
---
---
description: Fast, read-only agent for exploring the codebase structure
mode: subagent
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.2
permission:
edit: deny
@@ -78,4 +78,4 @@ Return concise findings with file:line references:
### Summary
[One-paragraph summary of findings]
```
```
+3 -3
View File
@@ -1,7 +1,7 @@
---
---
description: General-purpose agent for researching complex questions and executing multi-step tasks
mode: subagent
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.3
---
@@ -81,4 +81,4 @@ Return detailed findings with evidence:
### Recommendations
- [Suggested next steps if applicable]
```
```
+5 -5
View File
@@ -1,7 +1,7 @@
---
---
description: Tier 1 Orchestrator for product alignment, high-level planning, and track initialization
mode: primary
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.5
permission:
edit: ask
@@ -18,7 +18,7 @@ ONLY output the requested text. No pleasantries.
## Context Management
**MANUAL COMPACTION ONLY** Never rely on automatic context summarization.
**MANUAL COMPACTION ONLY** Never rely on automatic context summarization.
Use `/compact` command explicitly when context needs reduction.
Preserve full context during track planning and spec creation.
@@ -105,7 +105,7 @@ Use `manual-slop_py_get_code_outline`, `manual-slop_py_get_definition`,
Document existing implementations with file:line references in a
"Current State Audit" section in the spec.
**FAILURE TO AUDIT = TRACK FAILURE** Previous tracks failed because specs
**FAILURE TO AUDIT = TRACK FAILURE** Previous tracks failed because specs
asked to implement features that already existed.
### 2. Identify Gaps, Not Features
@@ -175,4 +175,4 @@ Focus: {One-sentence scope}
- Do NOT use native `edit` tool - use MCP tools
- DO NOT SKIP A TEST IN PYTEST JUST BECAUSE ITS BROKEN AND HAS NO TRIVIAL SOLUTION OR FIX.
- DO NOT SIMPLIFY A TEST JUST BECAUSE IT HAS NO TRIVIAL SOLUTION TO FIX.
- DO NOT CREATE MOCK PATCHES TO PSEUDO API CALLS OR HOOKS BECAUSE THE APP SOURCE WAS CHANGED. ADAPT TESTS PROPERLY.
- DO NOT CREATE MOCK PATCHES TO PSEUDO API CALLS OR HOOKS BECAUSE THE APP SOURCE WAS CHANGED. ADAPT TESTS PROPERLY.
+7 -7
View File
@@ -1,7 +1,7 @@
---
---
description: Tier 2 Tech Lead for architectural design and track execution with persistent memory
mode: primary
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.4
permission:
edit: ask
@@ -14,9 +14,9 @@ ONLY output the requested text. No pleasantries.
## Context Management
**MANUAL COMPACTION ONLY** Never rely on automatic context summarization.
**MANUAL COMPACTION ONLY** Never rely on automatic context summarization.
Use `/compact` command explicitly when context needs reduction.
You maintain PERSISTENT MEMORY throughout track execution do NOT apply Context Amnesia to your own session.
You maintain PERSISTENT MEMORY throughout track execution do NOT apply Context Amnesia to your own session.
## CRITICAL: MCP Tools Only (Native Tools Banned)
@@ -134,14 +134,14 @@ Before implementing:
- Zero-assertion ban: Tests MUST have meaningful assertions
- Delegate test creation to Tier 3 Worker via Task tool
- Run tests and confirm they FAIL as expected
- **CONFIRM FAILURE** this is the Red phase
- **CONFIRM FAILURE** this is the Red phase
### 3. Green Phase: Implement to Pass
- **Pre-delegation checkpoint**: Stage current progress (`git add .`)
- Delegate implementation to Tier 3 Worker via Task tool
- Run tests and confirm they PASS
- **CONFIRM PASS** this is the Green phase
- **CONFIRM PASS** this is the Green phase
### 4. Refactor Phase (Optional)
@@ -213,4 +213,4 @@ When all tasks in a phase are complete:
- Do NOT use native `edit` tool - use MCP tools
- DO NOT SKIP A TEST IN PYTEST JUST BECAUSE ITS BROKEN AND HAS NO TRIVIAL SOLUTION OR FIX.
- DO NOT SIMPLIFY A TEST JUST BECAUSE IT HAS NO TRIVIAL SOLUTION TO FIX.
- DO NOT CREATE MOCK PATCHES TO PSEUDO API CALLS OR HOOKS BECAUSE THE APP SOURCE WAS CHANGED. ADAPT TESTS PROPERLY.
- DO NOT CREATE MOCK PATCHES TO PSEUDO API CALLS OR HOOKS BECAUSE THE APP SOURCE WAS CHANGED. ADAPT TESTS PROPERLY.
+3 -3
View File
@@ -1,7 +1,7 @@
---
---
description: Stateless Tier 3 Worker for surgical code implementation and TDD
mode: subagent
model: MiniMax-M2.5
model: minimax-coding-plan/minimax-m2.7
temperature: 0.3
permission:
edit: allow
@@ -133,4 +133,4 @@ If you cannot complete the task:
- Do NOT modify files outside the specified scope
- DO NOT SKIP A TEST IN PYTEST JUST BECAUSE ITS BROKEN AND HAS NO TRIVIAL SOLUTION OR FIX.
- DO NOT SIMPLIFY A TEST JUST BECAUSE IT HAS NO TRIVIAL SOLUTION TO FIX.
- DO NOT CREATE MOCK PATCHES TO PSEUDO API CALLS OR HOOKS BECAUSE THE APP SOURCE WAS CHANGED. ADAPT TESTS PROPERLY.
- DO NOT CREATE MOCK PATCHES TO PSEUDO API CALLS OR HOOKS BECAUSE THE APP SOURCE WAS CHANGED. ADAPT TESTS PROPERLY.
+3 -3
View File
@@ -1,7 +1,7 @@
---
---
description: Stateless Tier 4 QA Agent for error analysis and diagnostics
mode: subagent
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.2
permission:
edit: deny
@@ -119,4 +119,4 @@ If you cannot analyze the error:
- Do NOT read full large files - use skeleton tools first
- DO NOT SKIP A TEST IN PYTEST JUST BECAUSE ITS BROKEN AND HAS NO TRIVIAL SOLUTION OR FIX.
- DO NOT SIMPLIFY A TEST JUST BECAUSE IT HAS NO TRIVIAL SOLUTION TO FIX.
- DO NOT CREATE MOCK PATCHES TO PSEUDO API CALLS OR HOOKS BECAUSE THE APP SOURCE WAS CHANGED. ADAPT TESTS PROPERLY.
- DO NOT CREATE MOCK PATCHES TO PSEUDO API CALLS OR HOOKS BECAUSE THE APP SOURCE WAS CHANGED. ADAPT TESTS PROPERLY.
+3 -3
View File
@@ -1,6 +1,6 @@
[ai]
provider = "gemini_cli"
model = "gemini-2.5-flash-lite"
provider = "minimax"
model = "MiniMax-M2.5"
temperature = 0.0
top_p = 1.0
max_tokens = 32000
@@ -61,7 +61,7 @@ Diagnostics = false
"Session Hub" = false
[theme]
palette = "10x Dark"
palette = "Nord Dark"
font_path = "fonts/Inter-Regular.ttf"
font_size = 16.0
scale = 1.0
+15 -15
View File
@@ -74,8 +74,8 @@ Collapsed=0
DockId=0xAFC85805,2
[Window][Theme]
Pos=0,249
Size=32,951
Pos=0,976
Size=635,951
Collapsed=0
DockId=0x00000002,2
@@ -91,8 +91,8 @@ Collapsed=0
DockId=0x00000010,0
[Window][Context Hub]
Pos=0,249
Size=32,951
Pos=0,976
Size=635,951
Collapsed=0
DockId=0x00000002,1
@@ -103,26 +103,26 @@ Collapsed=0
DockId=0x0000000D,0
[Window][Discussion Hub]
Pos=807,26
Size=873,1174
Pos=1936,24
Size=1468,1903
Collapsed=0
DockId=0x00000013,0
[Window][Operations Hub]
Pos=34,26
Size=771,1174
Pos=637,24
Size=1297,1903
Collapsed=0
DockId=0x00000005,0
[Window][Files & Media]
Pos=0,249
Size=32,951
Pos=0,976
Size=635,951
Collapsed=0
DockId=0x00000002,0
[Window][AI Settings]
Pos=0,26
Size=32,221
Pos=0,24
Size=635,950
Collapsed=0
DockId=0x00000001,0
@@ -513,12 +513,12 @@ Column 1 Weight=1.0000
DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y
DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A
DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,26 Size=1680,1174 Split=X
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,24 Size=3404,1903 Split=X
DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2175,1183 Split=X
DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2
DockNode ID=0x00000007 Parent=0x0000000B SizeRef=1071,858 Split=Y Selected=0x8CA2375C
DockNode ID=0x00000001 Parent=0x00000007 SizeRef=824,1037 CentralNode=1 Selected=0x7BD57D6A
DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,951 Selected=0x1DCB2623
DockNode ID=0x00000001 Parent=0x00000007 SizeRef=824,950 CentralNode=1 Selected=0x7BD57D6A
DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,951 Selected=0x8CA2375C
DockNode ID=0x0000000E Parent=0x0000000B SizeRef=2767,858 Split=X Selected=0x418C7449
DockNode ID=0x00000012 Parent=0x0000000E SizeRef=1297,402 Split=Y Selected=0x418C7449
DockNode ID=0x00000005 Parent=0x00000012 SizeRef=876,1749 Selected=0x418C7449
+2 -1
View File
@@ -71,5 +71,6 @@
"logs/**",
"*.log"
]
}
},
"plugin": ["superpowers@git+https://github.com/obra/superpowers.git"]
}
+4
View File
@@ -2652,6 +2652,8 @@ def hello():
if imgui.selectable("None", not self.ui_active_persona)[0]:
self.ui_active_persona = ""
for pname in sorted(personas.keys()):
if not pname:
continue
if imgui.selectable(pname, pname == self.ui_active_persona)[0]:
self.ui_active_persona = pname
if pname in personas:
@@ -4219,6 +4221,8 @@ def hello():
from src import ai_client
ai_client.set_bias_profile(None)
for bname in sorted(self.controller.bias_profiles.keys()):
if not bname:
continue
if imgui.selectable(bname, bname == getattr(self, 'ui_active_bias_profile', ""))[0]:
self.ui_active_bias_profile = bname
from src import ai_client