Files
manual_slop/conductor/archive/feature_bleed_cleanup_20260302/spec.md

6.2 KiB

Track Specification: Feature Bleed Cleanup

Overview

Multiple tracks added code to gui_2.py without removing the old versions, leaving dead duplicate methods, conflicting menu bar designs, and redundant state initializations. This track removes confirmed dead code, resolves the two-menubar conflict, and cleans up the token budget layout regression — restoring a consistent, non-contradictory design state.

Current State Audit (as of 0ad47af)

Already Implemented (DO NOT re-implement)

  • Live comms history panel (_render_comms_history_panel, gui_2.py:3435-3560): Full-featured version with color legend, blink effects, prior-session tinted background, correct entry.get('kind') data key. This is the version Python actually uses.
  • _show_menus callback (gui_2.py:1620-1647): HelloImGui-registered menu callback. Has "Windows" and "Project" menus. This is what actually renders in the app menubar.
  • Token budget panel (_render_token_budget_panel, gui_2.py:2748-2819): Fully implemented with color bar, breakdown table, trim warning, cache status. Called from within _render_provider_panel.
  • __init__ first-pass state vars (gui_2.py:218-221): ui_new_track_name, ui_new_track_desc, ui_new_track_type, ui_conductor_setup_summary — correct first assignment.

Gaps / Confirmed Bugs (This Track's Scope)

  1. Dead _render_comms_history_panel at lines 3041-3073: Python silently discards the first definition when the second (3435) is encountered. The dead version uses the stale entry.get('type') key (current data model uses kind), calls self._cb_load_prior_log() (method does not exist — correct name is cb_load_prior_log), and uses begin_child("scroll_area") which collides with the ID used in _render_tool_calls_panel. This is ~33 lines of noise that misleads future workers.

  2. Dead inline begin_main_menu_bar() block at lines 1680-1705: HelloImGui renders the main menu bar before invoking show_gui (_gui_func). By the time _gui_func runs, the menubar is already committed; imgui.begin_main_menu_bar() returns False, so the entire 26-line block never executes. Consequences:

    • The "manual slop" > "Quit" menu item (sets self.should_quit = True) is dead — should_quit is never checked anywhere else, so even if it ran, the app would not quit.
    • The "View" menu (toggling show_windows) duplicates the live "Windows" menu in _show_menus.
    • The "Project" menu duplicates the live "Project" menu in _show_menus, with a slightly different _handle_reset_session() call vs direct ai_client.reset_session() call.
  3. Duplicate __init__ state assignments at lines 308-311: ui_conductor_setup_summary, ui_new_track_name, ui_new_track_desc, ui_new_track_type are each assigned twice — first at lines 218-221, then again at 308-311. The second assignments are harmless (same values) but create false ambiguity about initialization order and intent.

  4. Redundant double "Token Budget" labels in _render_provider_panel (lines 2741-2743): imgui.text("Token Budget:") followed by imgui.separator() followed by imgui.text("Token Budget") followed by the panel call. Two labels appear before the panel, one with trailing colon and one without. The journal entry says "Token panel visible in AI Settings under 'Token Budget'" — but there is no collapsing_header("Token Budget") in _gui_func; the panel is embedded inside the "Provider & Model" collapsing section with duplicate labels.

  5. Missing "Quit" in live _show_menus: The only functional quit path is the window close button. HelloImGui's proper quit API is runner_params.app_shall_exit = True (accessible via self.runner_params.app_shall_exit).

Goals

  1. Remove dead _render_comms_history_panel duplicate (lines 3041-3073).
  2. Remove dead inline begin_main_menu_bar() block (lines 1680-1705).
  3. Add working "Quit" to _show_menus using self.runner_params.app_shall_exit = True.
  4. Remove duplicate __init__ state assignments (lines 308-311).
  5. Fix double "Token Budget" labels; give the panel its own collapsing_header in AI Settings.

Functional Requirements

Phase 1 — Dead Code Removal

  • Delete lines 3041-3073 (_render_comms_history_panel first definition) from gui_2.py entirely. Do not replace — the live version at (renumbered) ~3400 is the only version needed.
  • Delete lines 308-311 (second assignments of ui_new_track_name, ui_new_track_desc, ui_new_track_type, ui_conductor_setup_summary) from __init__. Keep the first assignments at lines 218-221.

Phase 2 — Menu Bar Consolidation

  • Delete lines 1680-1705 (the dead if imgui.begin_main_menu_bar(): ... imgui.end_main_menu_bar() block) from _gui_func. The # ---- Menubar comment at line 1679 must also be removed.
  • In _show_menus (lines 1620-1647), add a "manual slop" menu before the existing menus, containing a "Quit" item that sets self.runner_params.app_shall_exit = True.

Phase 3 — Token Budget Layout Fix

  • In _render_provider_panel (lines ~2741-2744): remove the two text labels (imgui.text("Token Budget:"), imgui.separator(), imgui.text("Token Budget")) and the self._render_token_budget_panel() call. The separator before them (line ~2740) should remain to close off the Telemetry section cleanly.
  • In _gui_func AI Settings window (around lines 1719-1723), add a new collapsing_header("Token Budget") section that calls self._render_token_budget_panel(). It should appear after the "System Prompts" header.

Non-Functional Requirements

  • Zero behavior change to any feature that currently works.
  • No new dependencies.
  • After Phase 1-2, run uv run pytest tests/ -x -q to verify no test regressions.
  • Each phase should be committed independently for clean git history.

Architecture Reference

Out of Scope

  • Refactoring _render_mma_dashboard content organization.
  • Changing mma_tier_usage default model names (runtime concern, not code quality).
  • The mma_agent_focus_ux track (planned separately in TASKS.md).
  • Any new feature work.