[BUG] Full-width GFM table renders corrupted top border / first-row separators when the table reaches the terminal's last column (renderer-side; reproduces across terminals)

Status Open
Reported on v2.1.220
Maintainer reply None cached
Activity 0 comments · opened Jul 27, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When Claude Code renders a GitHub-flavored-markdown (GFM) table that is wide enough that its right border lands on the terminal's final column, the top of the table renders corrupted on the right-hand side: the top horizontal rule is broken/partial and the first body row loses its internal vertical column separators (), so adjacent cells run together. Every subsequent row and the table's bottom border rule render perfectly — only the top-right corner is "torn."

This is renderer-side, not terminal-side. The identical corruption reproduces in two unrelated terminal emulators — AbsoluteTelnet 13.17 RC9 and PuTTY 0.81 — so both are faithfully displaying malformed output that Claude Code emits. A terminal-side last-column autowrap glitch would corrupt the top and bottom rules equally (same width); only the top rule + first row breaking is consistent with a renderer layout bug. It is also model-independent (the repro table was read verbatim from a file, so no model generated it), and width-triggered — the same table given more width so it no longer touches the last column renders completely clean.

Environment: macOS 15.7.4; SSH from a Windows client to the macOS host; terminals AbsoluteTelnet 13.17 RC9 (~141-col screen) and PuTTY 0.81 (32-bit x86 Windows). Deterministic and scrollback-stable (scrolling away and back does not change it). See attached screenshots (AbsoluteTelnet + PuTTY) — the corruption is byte-identical across both.

<img width="1580" height="972" alt="Image" src="https://github.com/user-attachments/assets/2471e79b-bc09-40e9-af2a-c12186327aa7" />

<img width="1576" height="768" alt="Image" src="https://github.com/user-attachments/assets/a1f18619-265d-4e76-b69d-d4f23cc9b436" />

What Should Happen?

The top border rule and all vertical column separators should render intact — identical to the (correct) bottom border and lower rows of the same table — regardless of whether the table's right border reaches the terminal's last column.

Error Messages/Logs

None. This is a purely visual rendering defect; no errors are emitted (the errors array is empty: `[]`).

Steps to Reproduce

  1. Use a terminal ~140 columns wide.
  2. Have Claude Code print a GFM table with enough columns / long-enough cell text that the rendered table's right border reaches the terminal's last column. A reliable example is a 4-column table (Issue | Last reply | Maintainer | Title) with ~13 rows where the final column holds long strings (exact table below).
  3. Look at the top of the rendered table.

Result: the top rule is broken on the right, and the first body row's separators are missing on the right side; the table looks "torn" at the top-right corner. The bottom rule and lower rows are fine. Reproduces identically in AbsoluteTelnet 13.17 RC9 (~141 cols) and PuTTY 0.81; renders clean when the same content is given more width so it no longer touches the margin.

Reproduction table:

~~~
| Issue | Last reply | Maintainer | Title |
|---|---|---|---|
| gildas-lormeau/SingleFile-MV3#34 | 2025-01 | gildas-lormeau | Filename replacement character doesn't work |
| Genymobile/scrcpy#1214 | 2023-03 | rom1v | Way to simulate swipe gesture? |
| AnaviTechnology/anavi-macro-pad-2 #1/#2/#3 | 2021-10 | leon-anavi | swag stickers / QMK support / BIOS trigger |
| cxw42/TabFern #223/#265/#266 | 2021-10 | cxw42 | delete-jumps-to-top / add tab count / incognito |
| lierdakil/pandoc-crossref#322 | 2021-08 | lierdakil | Broken README links |
| retext-project/retext#567 | 2021-08 | mitya57 | Prefs writes file to wrong folder |
| ACheeseSandwich/ecobee-remote#1 | 2021-06 | ACheeseSandwich | Where to buy hardware / versions |
| reproteq/DiffPatchWpf#1 | 2021-04 | reproteq | Silently abends on DIFF |
| QL-Win/QuickLook#722 | 2020-09 | xupefei | Toggle-button tooltip/default |
| nowsecure/fsmon#45 | 2020-07 | trufae | fsevapi backend buggy |
| reynhout/chrx#94 | 2020-05 | reynhout | Firmware-upgrade clarification |
| openrazer/openrazer#97 | 2017-09 | terricain | Razer Blade 2012 support |
| ...plus older | 2013-2019 | owners | Tabsets#16, fitbit-hooks#8, TigerOnVBox#5, BlinkyTape#3, c-mon#7, gntp-send#5, clipboard-manager-chromeos#2 |
~~~

Related issues (searched; distinct from this):

  • #70014 (open) — "broken table borders and hides messages behind session prompt." That is the session-summary widget breaking with stray ────┘/────┤ and hiding messages, not a content GFM table corrupting at the last column.
  • #64691 (closed, not planned) — "Wide markdown tables render with overlapping rows and misaligned borders on resize." Distinct: this needs no resize (deterministic at first render) and reproduces identically across two independent terminals, localizing it to the renderer.

Claude Model

Opus

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.220

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Other

Additional Information

_No response_

View original on GitHub ↗