Fix planner UI whitespace and workspace logs directory

Resolve two critical issues in planner mode that persisted through
multiple fix attempts:

1. Remove excessive whitespace between tool call displays by replacing
   direct println!() calls with ui_writer methods and eliminating
   redundant newlines in agent response streaming.

2. Ensure all log files (errors, sessions, tool calls, context dumps)
   are written to <workspace>/logs instead of codepath by properly
   initializing G3_WORKSPACE_PATH from --workspace argument.
This commit is contained in:
Jochen
2025-12-10 16:18:49 +11:00
parent a03a432963
commit 87bceba54f
8 changed files with 310 additions and 20 deletions

View File

@@ -0,0 +1,179 @@
{{CURRENT REQUIREMENTS}}
# Planner Mode UI Output Fixes - Fourth Attempt
## Critical Notes
This is the **FOURTH ATTEMPT** to fix these issues. Previous attempts have failed because:
1. Changes were made but the implementer did not actually run the app to verify the fixes
2. The root cause was not properly identified - only symptoms were addressed
3. Debugging information was not added to track down the actual problem
**MANDATORY**: The implementer MUST:
- Run the actual app in planning mode using: `cargo run --bin g3 -- --planning --codepath ~/RustroverProjects/g3 --workspace /tmp/g3_test_workspace`
- Observe the actual terminal output with their own eyes
- Check the actual file locations on disk using `find` or `ls` commands
- Include debugging statements to trace execution flow
- Not submit the implementation until visual confirmation that both issues are resolved
---
## Issue 1: Tool Call Display Has Excessive Whitespace
### Problem Statement
Despite three previous fix attempts, tool calls in planner mode still display with excessive vertical whitespace (multiple blank lines between each tool call).
It is possible that the superfluous newlines come from something else, for example streamed blocks triggering a newline or similar. Please
investigate all calls to UiWriter and `print` /`println!` calls throughout the task execution loop.
### Current Behavior
```
🔧 [1] shell
🔧 [2] read_file
🔧 [3] shell
```
### Expected Behavior
```
🔧 [13] read_file {"file_path":"/Users/jochen/RustroverProjects/g3/g3-plan/planner_history.txt"}
🔧 [14] shell {"command":"find /Users/jochen/RustroverProjects/g3 -type f -name \"*.rs\" | hea
```
### Root Cause Investigation Required
The implementer MUST investigate:
1. **Check `PlannerUiWriter::print_tool_header()` in `crates/g3-planner/src/llm.rs` (line ~240-262)**
- Current code uses `println!()` directly - this is WRONG per the user's previous feedback
- User explicitly stated: "YOU MUST USE UI_WRITER, NOT PRINT COMMANDS"
- The method has access to `self` which is a `UiWriter` - should call `self.println()` not `println!()`
2. **Check if there are other places printing newlines**
- Search for `print!` or `println!` patterns that might be clearing lines
- Check `print_agent_prompt()` method (line ~283) which explicitly prints a newline
- Check `print_agent_response()` method (line ~289-295) for newline issues
3. **Check the Agent's tool execution flow in g3-core**
- File: `crates/g3-core/src/lib.rs`, around line 4016 where `print_tool_header()` is called
- Check if there are any `println!()` or `print!("\n")` calls around the tool execution loop
- Check if there are status messages being printed that add extra lines
### Testing Requirements
The implementer MUST:
1. **Run the app**: `cargo run --bin g3 -- --planning --codepath ~/RustroverProjects/g3 --workspace /tmp/g3_test_workspace`
2. **Trigger refinement**: Press Enter when prompted to review requirements
3. **Watch the terminal output** as the LLM makes tool calls
4. **Count the blank lines** between each `🔧` tool call line
5. **Take a screenshot or copy/paste the actual output** as proof that it's fixed
6. **If there are still extra blank lines**, review the debug output to see what's being called
**Success Criteria**:
- Each tool call appears on exactly ONE line
- NO blank lines between consecutive tool calls or other output
- Tool call format: `🔧 [N] tool_name {truncated_args}`
---
## Issue 2: Logs Written to Wrong Directory
### Problem Statement
Despite setting `G3_WORKSPACE_PATH` environment variable in planner mode, log files are still being written to the current working directory or codepath root instead of `<workspace>/logs/`.
Double-check that the workspace is correctly via the `--workspace` commandline arg when in planning mode.
### Critical Files
These log files MUST be written to `<workspace>/logs/`:
- `logs/errors/*.txt` - Error logs
- `logs/g3_session_*.json` - Session history
- `logs/tool_calls_*.log` - Tool call logs
- `logs/context_window_*.txt` - Context window dumps
- identify other logs and whether they go to `<workspace>/logs/`
### Testing Requirements
The implementer MUST:
1. **Clean up any existing logs**:
```bash
rm -rf /tmp/logs
rm -rf ~/RustroverProjects/g3/logs/*
```
2. **Run the app from a different directory**:
```bash
cd /tmp
cargo run --bin g3 -- --planning --codepath ~/RustroverProjects/g3 --workspace /tmp/g3_test_workspace
```
3. **Check whether logs are written to /tmp or the codepath**:
```bash
find /tmp -name "*.log" -o -name "*.json" -o -name "*.txt" | grep -E "logs|g3_session|tool_calls|context_window"
find ~/RustroverProjects/g3/logs -name "*.log" -o -name "*.json" -o -name "*.txt" | head -20
```
4. **Verify the debug output** shows:
- `G3_WORKSPACE_PATH` being set correctly
- `get_logs_dir()` returning the correct path
- No files being written to `/tmp/g3_test_workspace`
**Success Criteria**:
- NO log files are in `~/RustroverProjects/g3/logs/`
- ALL log files exist in `/tmp/g3_test_workspace`
- Debug output confirms `G3_WORKSPACE_PATH` is set and being used
This attempt MUST include:
- Actual execution of the app
- Visual verification of the fixes
- Debug output to prove the changes work
- Testing from different working directories
{{ORIGINAL USER REQUIREMENTS -- THIS SECTION WILL BE IGNORED BY THE IMPLEMENTATION}}
*Bad tool output*
The output via UI writer is numbering tool calls, but adding A LOT of whitespace. Change the code to
write only a single line without any additional newline or anything, include on the line the first 50 chars of the
tool command, but make SURE it's only going to be a single line. Also make SURE there are no newlines displayed
between tool output.
Despite MANY attempts to fix it, this is still not working.
Please RUN THE ACTUAL APP in planning mode and observe how many empty lines are written to the display during and
after tool calls. TRY AS MANY solutions, including adding new functions to UiWriter to make sure only a single line
is written to the output. YOU MUST USE UI_WRITER, NOT PRINT COMMANDS. Make sure to run the app and get the output
to ensure there are no newlines between each tool output.
I had explicitly specified " ui_writer.println("🔧 [{}] {} {}", count, tool_name, args_display);" previously,
and that was ignored!
Also add debug context to the non-tool outputs from the llm responses, maybe that is printing empty lines?
desired behaviour (NO NEWLINES BETWEEN OUTPUT)
```
🔧 [13] read_file {"file_path":"/Users/jochen/RustroverProjects/g3/g3-plan/planner_history.txt"}
🔧 [14] shell {"command":"find /Users/jochen/RustroverProjects/g3 -type f -name \"*.rs\" | hea
```
*Logs directory*
A previous fix attempted to fix where logs are written, but that didn't work in my last experiment.
The logs were STILL written to the codepath or PWD, instead of to <workspace>/logs. Please debug and fix this
THIS IS CRITICAL.
Add debugging to where conversation history, tool calls and the context window are written in g3-core.
i.e. `logs/errors/`, `logs/g3_session*.json`, `logs/tool_calls*.log`, `logs/context_window*.txt`.
DO NOT APPROVE A SOLUTION WHERE RUNNING THE APP PRODUCES LOG FILES IN THE CODEPATH. They must be at
<workspace>/logs (as specified by the commandline argument `--workspace`).