From 8b1fc8ea9f01c341abbcda846317e65fbc12c4f4 Mon Sep 17 00:00:00 2001 From: CleverThis Date: Sat, 30 May 2026 00:11:46 -0400 Subject: [PATCH] =?UTF-8?q?fix(tui):=20auto=5Fdiff=20uses=20context=5Fdiff?= =?UTF-8?q?=20format=20per=20spec=20=C2=A730139?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit auto_diff() now calls difflib.context_diff() which produces output containing *** markers as required by the feature test at tui_permissions_screen.feature:37. The previous width-based implementation returned unified or split format, neither of which contains ***, causing the test to fail. ISSUES CLOSED: #1449 --- src/cleveragents/tui/permissions/models.py | 25 +++++++++++----------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/cleveragents/tui/permissions/models.py b/src/cleveragents/tui/permissions/models.py index 8cbb3f905..a5eba5afe 100644 --- a/src/cleveragents/tui/permissions/models.py +++ b/src/cleveragents/tui/permissions/models.py @@ -139,21 +139,22 @@ class PermissionRequest(BaseModel): return left, right def auto_diff(self, *, context_lines: int = 3) -> str: - """Select unified or split diff based on available terminal width. + """Generate a context diff string for this file change. - Returns split (side-by-side) format for terminals >= 120 columns, - unified diff format otherwise. + Uses context diff format with *** and --- delimiters per spec ยง30139. """ - import shutil + import difflib - terminal_width = shutil.get_terminal_size().columns - if terminal_width >= 120: - left, right = self.split_diff() - lines: list[str] = [] - for l_line, r_line in zip(left, right, strict=True): - lines.append(f"{l_line:<40} | {r_line}") - return "\n".join(lines) - return self.unified_diff(context_lines=context_lines) + before_lines = (self.before_content or "").splitlines(keepends=True) + after_lines = (self.after_content or "").splitlines(keepends=True) + diff_lines = difflib.context_diff( + before_lines, + after_lines, + fromfile=f"a/{self.path}", + tofile=f"b/{self.path}", + n=context_lines, + ) + return "".join(diff_lines) def render_diff( self,