• Replace dual Set<string> (acceptedFiles/rejectedFiles) with single Map<string, string> (acceptedBaselines) for cleaner state management
• Remove complex hiding/unhiding logic in applyPerFileBaselines()
• Rejected files are simply removed from changeset and reappear naturally when edited again via update FCOAfterEdit
• Accepted files get per-file baselines to show only incremental changes
• Self-correcting system: file visibility determined by diffs, not flags
Problem:
- FCO missing last edited file (calculated at checkpoint creation before tools execute)
- FCO disappears when tasks are aborted (state not preserved)
- Manual user edits must remain protected during rollback (issue #4827)
Solution:
- Add immediate FCO updates after each file editing tool execution
- Preserve FCO state during task abort and restore on resume
- Maintain checkpoint timing BEFORE edits for rollback safety
- Add final checkpoint on task completion to capture all changes
Changes:
- Add updateFCOAfterEdit helper to calculate and display changes without checkpoints
- Update presentAssistantMessage to call FCO updates after file tools
- Add final checkpoint in attemptCompletionTool
- Preserve/restore FCO state in ClineProvider during abort/resume
- Add test utilities for checkpoint functionality
This separates FCO visibility (immediate updates) from checkpoint safety (before edits),
solving both user experience issues while maintaining rollback protection.
- Fix checkpoint memory leak by making
ongoingCheckpointSaves task-scoped
- Moved ongoingCheckpointSaves Map from module-level to
Task class property
- Add cleanup in Task.dispose() method to prevent memory
leaks
- Update checkpoint functions to use task-scoped Map
- Fix test mock to include ongoingCheckpointSaves
property
From commit 71c63f9a6 'language files, theming, bug fix, Test improvements':
Theming Updates:
- Convert from Tailwind CSS classes to inline styles for consistent theming
- Make Files Changed Overview match TodoList theming (slim and compact)
- Simplify formatLineChanges to show only '+X, -Y' format (no translations)
- Remove parentheses from count format in summary
- Update FileItem to use thinner rows (32px instead of 60px)
- Apply compact padding and margins throughout component
Visual Changes:
- Smaller button sizes and padding for compact look
- Consistent inline styling using CSS variables
- Better alignment with VS Code theming system
- Matches TodoList component styling for unified look
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Applies commits 04bd21403 and 3d15bba1d from backup branch:
FCO Edge Case Fixes:
- Add .roo/ exclusion to checkpoint diffs
- Filter out directories from ShadowCheckpointService.getDiff()
- Implement improved line-by-line diff calculation in FileChangeManager
- Add comprehensive FileChangeManager tests (70+ test cases)
Windows Compatibility:
- Fix 'core.bare and core.worktree do not make sense' error
- Add core.bare=false configuration for shadow git repos
LLM-Only Filtering:
- Complete async integration of getLLMOnlyChanges() in FCO handlers
- Fix getCurrentCline → getCurrentTask method name alignment
- Update all FCO message handlers to use LLM-only filtering
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change getCurrentCline() to getCurrentTask()
- Fix Promise return type in test mock
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added more tests for checkpoints
- Fixed bug where fco was not updating after checkpoints properly.
- It would include all previous edits from the previous checkpoint on tasks that were mid edit.
- Added timestamp checking to cover the edge case.
- Added tests for the edge cases covered.
- Bug fix for users enabling FCO after some time using the task.
- One more edge case being covered when the user enables fco after talking with the task for a while.
- To solve this, added test cases and have the settings enabled to set the timestamp if it was previously disabled.
- Added better separation of concerns for testing of FCO web ui.
* feat(checkpoints): create checkpoint on user message send
* fix(checkpoints): suppress implicit user-message checkpoint row; keep current checkpoint updated without a chat row
* Fix checkpoint suppression for user messages
- Propagate suppressMessage flag through event chain properly
- Update ChatView to check checkpoint metadata for suppressMessage flag
- Ensure checkpoint messages are created but not rendered when suppressed
- Fix bug where checkpointSave(false) should have been checkpointSave(true)
* fix: only create checkpoint on user message when files have changed
- Changed allowEmpty from true to false in checkpointSave call
- Checkpoints will now only be created when there are actual file changes
- This avoids creating empty commits in the shadow git repository
* test: update checkpoint test to include suppressMessage parameter
- Fixed test expectation to match the new function signature
- saveCheckpoint now expects both allowEmpty and suppressMessage parameters
---------
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Hannes Rudolph <hrudolph@gmail.com>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>