role = "tier3-worker"
docs = ["conductor/workflow.md"]
prompt = """
Refactor the tier stream display in @gui_2.py: replace the 4 collapsing_header sections inside _render_mma_dashboard with 4 separate dockable imgui.begin() windows.

CHANGES NEEDED:

1. In __init__ (around line 207), in the _default_windows dict, add 4 new entries after "MMA Dashboard":
   "Tier 1: Strategy": True,
   "Tier 2: Tech Lead": True,
   "Tier 3: Workers": True,
   "Tier 4: QA": True,

2. In _render_mma_dashboard (find the 4 collapsing_header blocks added for Tier 1/2/3/4 and the _tier_stream_last_len auto-scroll logic), REMOVE all of it. The method should no longer render any tier stream content.

3. Add a new method _render_tier_stream_panel(self, tier_key: str, stream_key: str | None) to App class (place it after _render_mma_dashboard). It renders content for one tier:
   - If stream_key is not None (Tier 1, 2, 4): show self.mma_streams.get(stream_key, "") via imgui.text_wrapped inside a begin_child("##stream_content", ImVec2(-1, -1))
   - If stream_key is None (Tier 3): aggregate all keys in self.mma_streams containing "Tier 3", show each with a ticket sub-header (imgui.text(ticket_id) then begin_child per ticket)
   - Auto-scroll: if content length changed since last frame (tracked in self._tier_stream_last_len dict), call imgui.set_scroll_here_y(1.0)

4. In _gui_func, after the "MMA Dashboard" window block (around line 1592), add 4 new window blocks following the exact same pattern as other windows:
   if self.show_windows.get("Tier 1: Strategy", False):
    exp, self.show_windows["Tier 1: Strategy"] = imgui.begin("Tier 1: Strategy", self.show_windows["Tier 1: Strategy"])
    if exp:
     self._render_tier_stream_panel("Tier 1", "Tier 1")
    imgui.end()
   if self.show_windows.get("Tier 2: Tech Lead", False):
    exp, self.show_windows["Tier 2: Tech Lead"] = imgui.begin("Tier 2: Tech Lead", self.show_windows["Tier 2: Tech Lead"])
    if exp:
     self._render_tier_stream_panel("Tier 2", "Tier 2 (Tech Lead)")
    imgui.end()
   if self.show_windows.get("Tier 3: Workers", False):
    exp, self.show_windows["Tier 3: Workers"] = imgui.begin("Tier 3: Workers", self.show_windows["Tier 3: Workers"])
    if exp:
     self._render_tier_stream_panel("Tier 3", None)
    imgui.end()
   if self.show_windows.get("Tier 4: QA", False):
    exp, self.show_windows["Tier 4: QA"] = imgui.begin("Tier 4: QA", self.show_windows["Tier 4: QA"])
    if exp:
     self._render_tier_stream_panel("Tier 4", "Tier 4 (QA)")
    imgui.end()

5. Update @tests/test_mma_dashboard_streams.py — replace the 3 existing tests with new ones that test _render_tier_stream_panel instead:
   - test_tier1_renders_stream_content: call App._render_tier_stream_panel(app, "Tier 1", "Tier 1") with mma_streams={"Tier 1": "hello"}, assert imgui.text_wrapped called with "hello"
   - test_tier3_renders_worker_subheaders: call App._render_tier_stream_panel(app, "Tier 3", None) with mma_streams={"Tier 3 (Worker): T-001": "out1", "Tier 3 (Worker): T-002": "out2"}, assert imgui.text called with args containing "T-001" and "T-002"
   - test_mma_dashboard_no_longer_has_strategy_box: call App._render_mma_dashboard(app), assert imgui.collapsing_header NOT called with any string containing "Tier"

Also confirm @tests/test_mma_approval_indicators.py still passes unchanged.

Use exactly 1-space indentation for Python code.
"""
