# Manual Slop Edit Tool Workflow ## The Problem The `manual-slop_edit_file` tool requires **exact string matches** (character-for-character). Whitespace differences cause failures. The Python file uses **1-space indentation**. ## The Rules ### 1. ALWAYS Use Small, Incremental Edits **WRONG:** Replace large blocks (50+ lines) **RIGHT:** Replace 3-10 lines at a time, verify, repeat ### 2. Verify Before Editing Before ANY edit to a function you haven't touched recently: ``` 1. Run: git checkout -- src/gui_2.py 2. Run: py_check_syntax on src/gui_2.py 3. Get current state with get_file_slice ``` ### 3. Reading Before Editing (CRITICAL) - Use `get_file_slice` to get the EXACT text including all whitespace - Copy text directly from the tool output - do NOT reformat - If using get_definition, verify the text matches before editing ### 4. The Edit Tool Parameters (snake_case) ```python { "path": "src/gui_2.py", # Required: file path "old_string": "exact text", # Required: must match EXACTLY "new_string": "replacement", # Required: replacement text "replace_all": false # Optional: replace all occurrences } ``` ### 5. 1-Space Indentation in Python - Class methods: ` def` (0 spaces, then 1) - Method body: ` ` (2 spaces total) - Nested blocks: ` ` (3 spaces total) - NO 4-space indentation anywhere in this file ## Step-by-Step Workflow for gui_2.py ### Before ANY edit: ```powershell git checkout -- src/gui_2.py ``` ### Check current state: ```powershell py_check_syntax path=src/gui_2.py get_file_slice path=src/gui_2.py start_line=X end_line=Y ``` ### For each edit: 1. Make the smallest possible change (3-10 lines) 2. Run `py_check_syntax` to verify 3. If syntax error, immediately `git checkout -- src/gui_2.py` 4. Only proceed if syntax is OK ### If edit fails with "old_string not found": - The text you're trying to replace doesn't EXACTLY match - Use `get_file_slice` to get the exact text - Copy it character-for-character including whitespace - Try again with exact match ### If syntax error after edit: ```powershell git checkout -- src/gui_2.py ``` Then try again with smaller edit. ## Alternative: Update Definition Approach For large function rewrites, use `py_update_definition`: ``` name: function_name path: src/gui_2.py new_content: complete new function source ``` This replaces the entire function at once using AST detection. ## Context Composition Requirements ### Current Broken State Files & Media works. Context Composition needs: 1. Add state tracking at start of function: ```python if not hasattr(self, 'ctx_files_open'): self.ctx_files_open = True if not hasattr(self, 'ctx_shots_open'): self.ctx_shots_open = True ``` 2. Files section with collapsing header and child window: ```python if imgui.collapsing_header("Files", self.ctx_files_open): imgui.begin_child("ctx_files_child", imgui.ImVec2(-1, 200), True) # table code here imgui.end_child() ``` 3. Screenshots section with collapsing header and child window: ```python if imgui.collapsing_header("Screenshots", self.ctx_shots_open): imgui.begin_child("ctx_shots_child", imgui.ImVec2(-1, 100), True) # screenshot list here imgui.end_child() ``` 4. Fixed presets bar with push_item_width(150) on the combo 5. Remove the batch action bar entirely (Full/Agg/Sig/Def/None/Sel All/Del buttons) ## Key Files - `src/gui_2.py` - Main GUI (1-space indentation, CRLF) - `src/models.py` - Data models including FileItem - Context Composition function: line ~2748 ## Test Command ```powershell uv run sloppy.py ``` ## If Everything Goes Wrong ```powershell git checkout -- src/gui_2.py git checkout -- src/models.py ```