问题
流式输出 Markdown 表格时,如果后续行某个单元格比前面更宽,表格中途会改变列边界:前面的行保留旧的窄列宽,后续行使用新的宽列宽。最终同一张 box table 的分隔线不再对齐。
该现象可以在 Loushang CLI 中复现,Claude 的终端输出也能观察到相同现象,因此看起来是流式终端表格渲染问题,而不是某个模型特有的格式问题。
复现步骤
- 启动
uv run loushang。
- 输入:
请你输出一个表格,30行,最后一行的第一列特别宽。
- 观察表格输出。
复现结果通常表现为:前约 10 行使用窄列宽,从后续某一行开始第一数据列突然变宽;最后一行可能继续换行。
更大的回归场景:构造 100 行表格,前 99 行第一列较短,最后一行第一列明显更宽,并在流式追加过程中多次触发重绘。
预期行为
同一张表应始终使用一套列宽。发现后续宽单元格后,应满足以下任一策略:
- 等表格结束后再使用 box table 渲染;或
- 从表格顶部完整重绘整个表格块;或
- 流式阶段使用不会产生固定列边界的降级格式。
不能只重绘当前 viewport 或表格后缀,导致已输出的前缀保留旧列宽。
相关观察
静态地对完整 Markdown 表格进行一次渲染时,列宽可以正确统一。问题出现在流式输出和终端重绘/scrollback 交互阶段。
建议的回归断言
- 最后一行变宽后,所有分隔线的列边界位置一致;
- 重绘范围应覆盖表格顶部,而不是只覆盖后缀;
- 100 行场景下,终端最终可见/输出结果不能混合旧宽度和新宽度。
问题
流式输出 Markdown 表格时,如果后续行某个单元格比前面更宽,表格中途会改变列边界:前面的行保留旧的窄列宽,后续行使用新的宽列宽。最终同一张 box table 的分隔线不再对齐。
该现象可以在 Loushang CLI 中复现,Claude 的终端输出也能观察到相同现象,因此看起来是流式终端表格渲染问题,而不是某个模型特有的格式问题。
复现步骤
uv run loushang。请你输出一个表格,30行,最后一行的第一列特别宽。复现结果通常表现为:前约 10 行使用窄列宽,从后续某一行开始第一数据列突然变宽;最后一行可能继续换行。
更大的回归场景:构造 100 行表格,前 99 行第一列较短,最后一行第一列明显更宽,并在流式追加过程中多次触发重绘。
预期行为
同一张表应始终使用一套列宽。发现后续宽单元格后,应满足以下任一策略:
不能只重绘当前 viewport 或表格后缀,导致已输出的前缀保留旧列宽。
相关观察
静态地对完整 Markdown 表格进行一次渲染时,列宽可以正确统一。问题出现在流式输出和终端重绘/scrollback 交互阶段。
建议的回归断言