Private
Public Access
0
0
Files
manual_slop/conductor/tracks/context_preview_fixes_20260516/spec.md
T
2026-05-16 16:43:32 -04:00

4.2 KiB

Track Specification: Context Preview & Slice Editor Fixes

Overview

Fix critical failures in the context composition feature: Preview button generates no content, and Inspect/Slices buttons fail to open their respective editor panels.

Current State Audit (as of 7f40630)

Already Implemented (DO NOT re-implement)

  1. Context Preview Window (gui_2.py:5308-5320): render_context_preview_window function exists and renders markdown via markdown_helper.render(app.context_preview_text, context_id="ctx_preview"). The window is opened via app._render_window_if_open("Context Preview", lambda: render_context_preview_window(app)) at line 1238.

  2. Context Batch Actions with Preview (gui_2.py:2805-2843): render_context_batch_actions contains the Preview button at line 2839:

    if imgui.button("Preview##ctx"):
        app.context_preview_text = app.controller._do_generate()[0]
        app.show_windows["Context Preview"] = True
    
  3. AST Inspector Modal (gui_2.py:2900-3036): render_ast_inspector_modal exists with dual-pane layout (tree + content). Triggered via app._show_ast_inspector = True and app.ui_inspecting_ast_file = f_item set in render_context_files_table at lines 3145-3146.

  4. Text Viewer Window (gui_2.py:4077-4145): render_text_viewer_window function exists with syntax highlighting via ImGuiColorTextEdit. Triggered via app.show_text_viewer = True and content set via app.text_viewer_content, app.text_viewer_title, app.text_viewer_type.

  5. Context Files Table (gui_2.py:3090-3198): render_context_files_table with Inspect and Slices buttons at lines 3143-3158.

  6. AppController._do_generate (app_controller.py:3433-3468): Returns (full_md, path, file_items, stable_md, discussion_text). Used by Preview button at gui_2.py:2840.

  7. render_context_modals (gui_2.py:5275-5306): Calls render_add_context_files_modal, render_ast_inspector_modal.

Gaps to Fill (This Track's Scope)

  1. Gap 1: The Preview button at gui_2.py:2840 calls app.controller._do_generate()[0] but AppController at line 991 shows self.context_files: List[models.FileItem] = []. The controller's context_files is NEVER synchronized with App.context_files from gui_2.py. The Preview therefore shows empty content.

  2. Gap 2: render_context_modals at line 5275 calls render_ast_inspector_modal but never actually calls render_text_viewer_window. The Slices button sets app.show_text_viewer = True and populates app.text_viewer_content, but render_text_viewer_window is NOT invoked in the main render loop.

  3. Gap 3: render_ast_inspector_modal uses app._show_ast_inspector flag and imgui.open_popup pattern, but this is not integrated into render_context_modals properly (modal rendering may conflict with window rendering timing).

Goals

  • Fix Preview button to show actual aggregated context content from context_files
  • Fix Inspect button to open AST Inspector modal properly
  • Fix Slices button to open Text Viewer window with file content

Functional Requirements

  1. Synchronize context_files between App and AppController: The Preview button calls app.controller._do_generate() which reads self.context_files (controller's empty list). Must sync App.context_filesAppController.context_files before calling _do_generate().

  2. Add Text Viewer Window to render loop: render_text_viewer_window(app) must be called in the main render loop (after line 1238 or in render_context_modals).

  3. Fix AST Inspector modal integration: Ensure render_ast_inspector_modal is properly called in render_context_modals and uses correct popup pattern.

  4. Add defensive empty-state handling: If context_files is empty, Preview should show "No files in context composition" message.

Architecture Reference

  • docs/guide_architecture.md#render-loop - Main render loop structure
  • docs/guide_architecture.md#modal-patterns - Modal and window rendering patterns
  • docs/guide_tools.md#mcp-bridge - Tool execution flow

Out of Scope

  • Changes to aggregation logic (only fixing invocation, not the aggregation itself)
  • Changes to the FileItem model structure
  • Changes to view_mode handling (only fixing the buttons that trigger editors)