feat/export-service
main
函数图像静态渲染(Function Plot)与导出服务(Markdown → HTML)的复审修复。本 PR 是 #28 审阅结论(2 P2 + 1 P3)修复后的复审提交。
#28
ast
RecursionError
nan
_polyline
docs/contracts/第二阶段接口契约-开发版.md
function-plot
backend 全量 pytest:621 passed(新增 5 项边界回归:超深表达式、超量节点、HTML 深表达式回退、极端 domain/range 无 nan/inf)。
backend
pytest
backend/
审阅提交:b87f945
b87f945
上一轮提出的 2 个 P2、1 个 P3 均已正确修复:
本轮复审新发现 1 个 P1。
位置:backend/app/plot/parser.py:363–370
backend/app/plot/parser.py:363–370
当前复杂度限制只作用于单条表达式,parse_source 可以无限追加合法表达式。
parse_source
实测结果:
y=x
未保存 Markdown 当前允许最多 200,000 个字符,可容纳约 50,000 行简单表达式,理论上会生成约 280 MB SVG,并执行约 4,000 万次采样求值。生成过程中还会存在中间字符串和编码副本,实际内存占用会更高。
同时:
asyncio.to_thread
note
MAX_MARKDOWN_CHARS
多个并发任务可能耗尽内存和工作线程。
建议:
markdown
git diff --check
请修复上述资源上限问题并补充测试后再提交复审。
No dependencies set.
The note is not visible to the blocked user.
概述
函数图像静态渲染(Function Plot)与导出服务(Markdown → HTML)的复审修复。本 PR 是
#28审阅结论(2 P2 + 1 P3)修复后的复审提交。本轮修复(对应
#28结论)ast深度(200)/节点数(1000)上限拦截RecursionError;解析与渲染共同纳入局部异常回退,单个图像失败只回退占位 + warning,不阻断整篇导出。nan的 SVG:新增跨度校验(端点有限、跨度有限且 >0),domain/range 无效时回退安全范围;_polyline拒绝非有限像素坐标。docs/contracts/第二阶段接口契约-开发版.md,标注function-plot已支持静态 SVG、失败回退占位。测试
backend全量pytest:621 passed(新增 5 项边界回归:超深表达式、超量节点、HTML 深表达式回退、极端 domain/range 无 nan/inf)。说明
backend/代码 + 接口契约文档。审阅结论:请求修改,暂不建议合并
审阅提交:
b87f945上一轮提出的 2 个 P2、1 个 P3 均已正确修复:
nan的 SVG;本轮复审新发现 1 个 P1。
[P1] 函数数量没有限制,可能生成数百 MB 的 SVG
位置:
backend/app/plot/parser.py:363–370当前复杂度限制只作用于单条表达式,
parse_source可以无限追加合法表达式。实测结果:
y=x:约 0.56 MB SVG;y=x:约 5.59 MB SVG;未保存 Markdown 当前允许最多 200,000 个字符,可容纳约 50,000 行简单表达式,理论上会生成约 280 MB SVG,并执行约 4,000 万次采样求值。生成过程中还会存在中间字符串和编码副本,实际内存占用会更高。
同时:
asyncio.to_thread中,取消请求在渲染结束前无法停止线程;note来源没有执行MAX_MARKDOWN_CHARS检查。多个并发任务可能耗尽内存和工作线程。
建议:
function-plot图块的表达式数量;note和markdown来源统一执行输入大小限制;验证结果
git diff --check:通过main:无冲突请修复上述资源上限问题并补充测试后再提交复审。
Pull request closed