feat/export-service
main
在 feat/export-service 分支补齐 Export 模块剩余两项开发:
cd backend && uv run uvicorn app.main:app --host 127.0.0.1 --port 8000
→ POST /api/exports(format=pdf/docx)→ 轮询 GET /api/exports/{job_id} 到 completed → GET /api/exports/{job_id}/file 下载,本机打开确认中文字体与内容。
🤖 Generated with Claude Code
审阅提交:dffafce
dffafce
本次更新已同步最新 main,合并冲突已解决,PR 标题和说明也已覆盖 PDF/DOCX 功能。但上一轮提出的 3 个 P2、1 个 P3 尚未修复,相关业务文件与文档没有发生修改。
位置:
backend/app/export/exporters/pdf.py:173–174
backend/app/export/exporters/docx.py:129–134
blockquote 的直接子节点是 paragraph,但两个导出器仍将其交给只支持行内节点的 _render_inline。
blockquote
paragraph
_render_inline
实测:
> quoted **content**
PDF 和 DOCX 中均不存在引用正文,只产生无法表示 paragraph 的警告。
建议按块级结构遍历引用中的 paragraph、list 等子节点,并继承引用缩进和文字样式。回归测试应检查实际产物正文。
list
位置:backend/app/export/exporters/pdf.py:201–212
backend/app/export/exporters/pdf.py:201–212
嵌套列表在遍历期间立即加入 story,父列表项却要等循环结束后才加入。
story
以下 Markdown:
- parent - child
实际输出顺序仍为:
child parent
请先输出父列表项正文,再递归输出子列表,并补充嵌套列表顺序测试。
位置:backend/app/export/service.py:224–239
backend/app/export/service.py:224–239
任务在获得 _render_slots 前就被标记为 running,取消标志则要等任务获得槽位后才检查。
_render_slots
running
当前面的渲染任务耗时较长时,排队任务调用取消后会继续显示为 running,直到前一个任务结束。
建议:
queued
cancel_event
started_at
docs/contracts/第二阶段接口契约-开发版.md:71
docs/contracts/第二阶段接口契约-开发版.md:1083
docs/contracts/第二阶段接口契约-开发版.md:1106
EXPORT_FORMAT_UNSUPPORTED
服务现在已经支持 HTML、PDF 和 DOCX,但接口契约仍写着仅 HTML 已实现,PDF/DOCX 暂缓并返回 EXPORT_FORMAT_UNSUPPORTED。
请更新接口总表、实现状态、请求参数说明、示例和错误码列表,避免前端按照过期契约禁用 PDF/DOCX。
git diff --check
虽然 Git 层面已经可以合并,但功能问题尚未解决,请修复后再提交复审。
No dependencies set.
The note is not visible to the blocked user.
变更概览
在 feat/export-service 分支补齐 Export 模块剩余两项开发:
关键实现
测试
手动验证
→ POST /api/exports(format=pdf/docx)→ 轮询 GET /api/exports/{job_id} 到 completed → GET /api/exports/{job_id}/file 下载,本机打开确认中文字体与内容。
🤖 Generated with Claude Code
审阅结论:请求修改,暂不建议合并
审阅提交:
dffafce本次更新已同步最新
main,合并冲突已解决,PR 标题和说明也已覆盖 PDF/DOCX 功能。但上一轮提出的 3 个 P2、1 个 P3 尚未修复,相关业务文件与文档没有发生修改。[P2] PDF/DOCX 导出仍会丢失引用块正文
位置:
backend/app/export/exporters/pdf.py:173–174backend/app/export/exporters/docx.py:129–134blockquote的直接子节点是paragraph,但两个导出器仍将其交给只支持行内节点的_render_inline。实测:
PDF 和 DOCX 中均不存在引用正文,只产生无法表示
paragraph的警告。建议按块级结构遍历引用中的
paragraph、list等子节点,并继承引用缩进和文字样式。回归测试应检查实际产物正文。[P2] PDF 嵌套列表顺序仍然颠倒
位置:
backend/app/export/exporters/pdf.py:201–212嵌套列表在遍历期间立即加入
story,父列表项却要等循环结束后才加入。以下 Markdown:
实际输出顺序仍为:
请先输出父列表项正文,再递归输出子列表,并补充嵌套列表顺序测试。
[P2] 排队任务取消仍需等待渲染槽位
位置:
backend/app/export/service.py:224–239任务在获得
_render_slots前就被标记为running,取消标志则要等任务获得槽位后才检查。当前面的渲染任务耗时较长时,排队任务调用取消后会继续显示为
running,直到前一个任务结束。建议:
queued;cancel_event;running和started_at;[P3] 团队接口契约仍称 PDF/DOCX 尚未实现
位置:
docs/contracts/第二阶段接口契约-开发版.md:71docs/contracts/第二阶段接口契约-开发版.md:1083docs/contracts/第二阶段接口契约-开发版.md:1106EXPORT_FORMAT_UNSUPPORTED服务现在已经支持 HTML、PDF 和 DOCX,但接口契约仍写着仅 HTML 已实现,PDF/DOCX 暂缓并返回
EXPORT_FORMAT_UNSUPPORTED。请更新接口总表、实现状态、请求参数说明、示例和错误码列表,避免前端按照过期契约禁用 PDF/DOCX。
验证结果
git diff --check:通过main:无冲突虽然 Git 层面已经可以合并,但功能问题尚未解决,请修复后再提交复审。
Pull request closed