Files
manual_slop/conductor/tracks/feature_bleed_cleanup_20260302/plan.md

6.3 KiB

Implementation Plan: Feature Bleed Cleanup

Architecture reference: docs/guide_architecture.md


Phase 1: Dead Code Removal

Focus: Delete the two confirmed dead code blocks — no behavior change, pure deletion.

  • Task 1.1: In gui_2.py, delete the first _render_comms_history_panel definition.

    • Location: Lines 3041-3073 (use py_get_code_outline to confirm current line numbers before editing).
    • What: The entire method body from def _render_comms_history_panel(self) -> None: through imgui.end_child() and the following blank line. The live version begins at ~line 3435 after this deletion shifts lines.
    • How: Use set_file_slice to delete lines 3041-3073 (replace with empty string). Then run py_get_code_outline to confirm only one _render_comms_history_panel remains.
    • Verify: grep -n "_render_comms_history_panel" gui_2.py should show exactly 2 hits: the def line and the call site in _gui_func.
  • Task 1.2: In gui_2.py __init__, delete the duplicate state variable assignments.

    • Location: Second occurrences of ui_conductor_setup_summary, ui_new_track_name, ui_new_track_desc, ui_new_track_type. Currently at lines 308-311 (grep to confirm exact lines before editing: grep -n "ui_conductor_setup_summary" gui_2.py).
    • What: Delete these 4 lines. The first correct assignments remain at lines 218-221.
    • How: Use set_file_slice to remove lines 308-311 (replace with empty string).
    • Verify: Each variable should appear exactly once in __init__ (grep to confirm).
  • Task 1.3: Write/run tests to confirm no regressions.

    • Run uv run pytest tests/ -x -q and confirm all tests pass.
    • Run uv run python -c "from gui_2 import App; print('import ok')" to confirm no syntax errors.
  • Task 1.4: Conductor — User Manual Verification

    • Start the app with uv run python gui_2.py and confirm it launches without error.
    • Open "Operations Hub" → "Comms History" tab and confirm the comms panel renders (color legend visible).

Phase 2: Menu Bar Consolidation

Focus: Remove the dead inline menubar block and add a working Quit item to _show_menus.

  • Task 2.1: Delete the dead begin_main_menu_bar() block from _gui_func.

    • Location: gui_2.py lines 1679-1705 (the comment # ---- Menubar through imgui.end_main_menu_bar()). Use get_file_slice(1676, 1712) to confirm exact boundaries before editing.
    • What: Delete the # ---- Menubar comment line and the entire if imgui.begin_main_menu_bar(): ... imgui.end_main_menu_bar() block (~27 lines total). The # --- Hubs --- comment and hub rendering that follows must be preserved.
    • How: Use set_file_slice to replace lines 1679-1705 with a single blank line.
    • Verify: grep -n "begin_main_menu_bar" gui_2.py returns 0 hits.
  • Task 2.2: Add working "Quit" to _show_menus.

    • Location: gui_2.py _show_menus method (lines 1620-1647 — confirm with py_get_definition).
    • What: Before the existing if imgui.begin_menu("Windows"): line, insert:
      if imgui.begin_menu("manual slop"):
          if imgui.menu_item("Quit", "Ctrl+Q", False)[0]:
              self.runner_params.app_shall_exit = True
          imgui.end_menu()
      
    • Note: self.runner_params is set in run() before immapp.run() is called, so it is valid here.
    • How: Use set_file_slice or Edit to insert the block before the "Windows" menu.
    • Verify: Launch app, confirm "manual slop" > "Quit" appears in menubar and clicking it closes the app cleanly.
  • Task 2.3: Write/run tests.

    • Run uv run pytest tests/ -x -q.
  • Task 2.4: Conductor — User Manual Verification

    • Launch app. Confirm menubar has: "manual slop" (with Quit), "Windows", "Project".
    • Confirm "View" menu is gone (was dead duplicate of "Windows").
    • Confirm Quit closes the app.

Phase 3: Token Budget Layout Fix

Focus: Give the token budget panel its own collapsing header in AI Settings; remove the double label from the provider panel.

  • Task 3.1: Remove the double label + embedded call from _render_provider_panel.

    • Location: gui_2.py _render_provider_panel (lines ~2687-2746 — use py_get_definition to confirm). The block to remove is:
      imgui.text("Token Budget:")
      imgui.separator()
      imgui.text("Token Budget")
      self._render_token_budget_panel()
      
      These are 4 consecutive lines at the end of the method (before if self._gemini_cache_text:).
    • What: Delete those 4 lines. The if self._gemini_cache_text: block that follows them must be preserved in place.
    • How: Use Edit with old_string set to those exact 4 lines.
    • Verify: _render_provider_panel ends with the if self._gemini_cache_text: block and no "Token Budget" text labels.
  • Task 3.2: Add collapsing_header("Token Budget") to AI Settings in _gui_func.

    • Location: gui_2.py _gui_func, AI Settings window block (currently lines ~1719-1723 — get_file_slice(1715, 1730) to confirm). Current content:
      if imgui.collapsing_header("Provider & Model"):
          self._render_provider_panel()
      if imgui.collapsing_header("System Prompts"):
          self._render_system_prompts_panel()
      
    • What: Add after the System Prompts header:
      if imgui.collapsing_header("Token Budget"):
          self._render_token_budget_panel()
      
    • How: Use Edit to insert after the _render_system_prompts_panel() call.
    • Verify: AI Settings window now shows three collapsing sections: "Provider & Model", "System Prompts", "Token Budget".
  • Task 3.3: Write/run tests.

    • Run uv run pytest tests/ -x -q.
  • Task 3.4: Conductor — User Manual Verification

    • Launch app. Open "AI Settings" window.
    • Confirm "Token Budget" appears as a collapsing header (expand it — panel renders correctly).
    • Confirm "Provider & Model" section no longer shows any "Token Budget" label.

Phase Completion Checkpoint

After all phases pass manual verification:

  • Run uv run pytest tests/ -x -q one final time.
  • Commit: fix(bleed): remove dead comms panel dup, consolidate menubar, fix token budget layout
  • Update TASKS.md to mark this track complete.
  • Update JOURNAL.md with What/Why/How/Issues/Result.