长报告不再被咬掉一口:折叠只在行边界切

用户看到的是一份读起来完整、末尾却挂着半行原始 markdown 的报告:

    userID	用户名	邮箱	昵称	providerID	商家名称	联系人邮箱
    | 1 | ThearchyHelios | user@example.com | … | Test Marchant By Shop

表头是制表符(已渲染成表格),数据行是竖线(还是原始文本)——折叠是
text.slice(0, 3000) 按字符硬切的,切点落进表格中间,前面几行渲染成表格、
最后半行没能成行。报告本身是完整的,只是被折叠了,但界面上看不出来。

改成只在行边界切;切点落进表格时整块表格都不要——宁可少显示一段,也不给
一张半截的表。另外原来只有一个"展开全部"按钮,看上去像报告就这么长,
现在先说"…后面还有,这里先折叠了"。

顺带治了落库那一处:answerText 在 4000 字处无声截断,刷新页面后那份就永久
少一截,断点同样常常落在表格中间。上限提到 20000,真切到了会写明已截断、
完整内容见运行记录。喂给下一轮的那份另有更狠的截断,两回事。

check-stream 多一节,盯的就是"折叠后不许留下没渲染的原始表格行"。
把切法改回硬切,它会立刻抓到残留的 `| 24 | user_23 | …`。
This commit is contained in:
ThearchyHelios
2026-09-18 22:29:24 +08:00
parent dcadc0c48b
commit 152264b29c
4 changed files with 105 additions and 6 deletions
+24
View File
@@ -115,6 +115,30 @@ console.log('\n=== Markdown 渲染 ===')
await page.close()
}
console.log('\n=== 长报告的折叠 ===')
{
// 折叠以前是按字符硬切的,切点落进表格中间:前面几行渲染成表格、最后半行
// 留成原始的 `| 1 | ThearchyHelios | …`。用户看到的是一份被咬掉一口的报告。
const page = await browser.newPage({ viewport: { width: 1280, height: 900 } })
await page.goto(`${WEB}/preview.html?long=1`, { waitUntil: 'networkidle' })
await page.waitForTimeout(300)
const folded = await page.locator('body').innerText()
check('折叠时说破了"后面还有"', folded.includes('后面还有'))
check('给得出展开入口', folded.includes('展开全部'))
// 关键一条:折叠后不能留下没渲染成表格的原始 markdown 行
const rawRow = folded.split('\n').find((l) => /^\s*\|.*\|/.test(l))
check('没有半截的原始表格行', !rawRow, rawRow ? `残留:${rawRow.slice(0, 48)}` : '')
check('开头的正文还在', folded.includes('总结'))
await page.locator('button', { hasText: '展开全部' }).first().click()
await page.waitForTimeout(250)
const full = await page.locator('body').innerText()
check('展开后拿得到结尾', full.includes('身兼管理员与商家双重身份'))
check('展开后表格渲染完整', full.includes('user_39'))
await page.close()
}
console.log('\n=== 空态 ===')
{
const page = await browser.newPage({ viewport: { width: 1280, height: 900 } })