diff --git a/auto-claude/core/workspace.py b/auto-claude/core/workspace.py index eb627196..ebfba65d 100644 --- a/auto-claude/core/workspace.py +++ b/auto-claude/core/workspace.py @@ -192,9 +192,12 @@ def merge_existing_build( # Smart merge handled it (success or identified conflicts) if smart_result.get("success"): # Check if smart merge resolved git conflicts directly - if smart_result.get("stats", {}).get("ai_assisted"): - # AI resolved git conflicts - changes are already staged - _print_merge_success(no_commit, smart_result.get("stats")) + stats = smart_result.get("stats", {}) + had_conflicts = stats.get("conflicts_resolved", 0) > 0 + + if had_conflicts: + # Git conflicts were resolved (via AI or lock file exclusion) - changes are already staged + _print_merge_success(no_commit, stats) # Cleanup the worktree since merge is done try: @@ -209,7 +212,7 @@ def merge_existing_build( spec_name, delete_after=True, no_commit=no_commit ) if success_result: - _print_merge_success(no_commit, smart_result.get("stats")) + _print_merge_success(no_commit, stats) return True elif smart_result.get("git_conflicts"): # Had git conflicts that AI couldn't fully resolve @@ -740,10 +743,13 @@ def _resolve_git_conflicts_with_ai( # Lock files should be excluded from merge entirely # They must be regenerated after merge by running the package manager # (e.g., npm install, pnpm install, uv sync, cargo update) + # + # Strategy: Take main branch version and let user regenerate lock_files_excluded.append(file_path) + simple_merges.append((file_path, main_content)) debug( MODULE, - f" {file_path}: lock file (excluded - regenerate after merge)", + f" {file_path}: lock file (excluded - will use main version)", ) else: # Regular file - needs AI merge diff --git a/auto-claude/core/workspace/display.py b/auto-claude/core/workspace/display.py index 1ac6bd43..07f0fc7d 100644 --- a/auto-claude/core/workspace/display.py +++ b/auto-claude/core/workspace/display.py @@ -75,12 +75,20 @@ def print_merge_success(no_commit: bool, stats: dict | None = None) -> None: from ui import Icons, box, icon if no_commit: - content = [ + lines = [ success(f"{icon(Icons.SUCCESS)} CHANGES ADDED TO YOUR PROJECT"), "", "The new code is in your working directory.", "Review the changes, then commit when ready.", ] + + # Add note about lock files if any were excluded + if stats and stats.get("lock_files_excluded", 0) > 0: + lines.append("") + lines.append("Note: Lock files kept from main.") + lines.append("Regenerate: npm install / pip install / cargo update") + + content = lines else: lines = [ success(f"{icon(Icons.SUCCESS)} FEATURE ADDED TO YOUR PROJECT!"),