audit(docs/29): 全项目审计——修分片载入卸载截断高危、Sidebar memo 击穿与 Rust 资源/搜索/恢复上限等 20 余处
三线并行审计(编辑器核心/Rust 后端/服务与组件)+ App 编排层自审。 高危:分片载入未收尾时窗格卸载回写部分序列化,干净标签会被静默 截断——cleanup 补 muted 守卫,create 完成回调补取消守卫。 性能:gitSync/outline/收起回调稳定化保住 Sidebar memo;光标行列 rAF 合并;图片显示解析加缓存;导出图片并发解析;chunkLoader 偏移前缀表;围栏切点只认顶格(列表内嵌围栏等价回归实测)。 Rust:资源命令 async 化 + 32MB 上限;搜索 junction 越界校验; recovery/workspace 条数与单条上限;启动坏库改名重建 + WAL; validate 补 ext:: 黑名单与 ref 形态;init 先种 .gitignore (含 .*.tmp-* 防崩溃残留被提交);游离 HEAD 不再猜分支。 验证:vitest 122+2、tsc、构建通过;Rust 过 rustfmt 解析、 validate 纯函数抽出实跑断言、命令对账 28=28。
This commit is contained in:
@@ -103,3 +103,31 @@ describe('分片载入与整篇解析等价', () => {
|
||||
expect(chunked).toBe(whole)
|
||||
}, 60_000)
|
||||
})
|
||||
|
||||
describe('列表内嵌围栏不被切开(docs/29)', () => {
|
||||
it('分片序列化与整篇逐字相等', async () => {
|
||||
const parts: string[] = []
|
||||
for (let s = 1; s <= 30; s++) {
|
||||
parts.push(`## 小节 ${s}`)
|
||||
parts.push('')
|
||||
parts.push('正文填充。'.repeat(420))
|
||||
parts.push('')
|
||||
parts.push('- 列表项,内含缩进围栏代码:')
|
||||
parts.push('')
|
||||
parts.push(' ```js')
|
||||
parts.push(` const v${s} = ${s}`)
|
||||
parts.push(' ```')
|
||||
parts.push('')
|
||||
parts.push('- 下一项')
|
||||
parts.push('')
|
||||
}
|
||||
const md = parts.join('\n')
|
||||
expect(md.length).toBeGreaterThan(60_000)
|
||||
const whole = getMarkdown(await load(md))
|
||||
const handle = prepareChunkLoad(md)
|
||||
expect(handle).not.toBeNull()
|
||||
const editor = await load(handle!.firstChunk)
|
||||
await handle!.appendRest(editor, () => undefined, () => false)
|
||||
expect(getMarkdown(editor)).toBe(whole)
|
||||
}, 60000)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user