Skip to content

收紧解析资源与异步取消清理边界 - #5

Merged
caichuanwang merged 1 commit into
masterfrom
fix/v010-review-hardening
Aug 4, 2026
Merged

caichuanwang merged 1 commit into
masterfrom
fix/v010-review-hardening

Conversation

@caichuanwang

Copy link
Copy Markdown
Owner

背景

v0.1.0 复审确认了几处需要立即收紧的资源与清理边界。本 PR 在不改变公开 API 的前提下补齐回归测试并修复。

变更

  • 为单页 PDF 视觉候选增加硬上限,并在阅读顺序分析产生候选时提前终止,避免异常重叠对象进入高复杂度区域合并。
  • 异步取消时立即清理 SDK 自有临时源文件;若后台写入尚未结束,由工作线程在写入结束后再次兜底清理,因此不再依赖事件循环继续存活。
  • 从 ppt/presentation.xml 预读幻灯片数量,在完整 PPTX 提取媒体与内容前执行 max_pages 校验,同时保留提取后的防御性校验。
  • 空 TXT、Markdown 与无名文本字节直接返回带明确消息的 NoUsableContentError。
  • 在 CHANGELOG 中记录上述未发布修复。

兼容性边界

  • DOCX 没有无需渲染即可稳定获得的物理页数;本 PR 保持现有逻辑流解析语义,不用段落数或分页标记伪装页数。
  • Strict OOXML / flat-OPC 缺少可再分发的真实样本,且依赖解析器兼容性尚未证实,本 PR 不做猜测性转换。
  • 未修改私有 corpus、M2 checklist 或 replay baseline。

验证

  • uv sync --all-groups --frozen
  • uv run --frozen pytest -q:599 passed,9 skipped
  • uv run --frozen ruff check .
  • uv run --frozen ruff format --check .
  • uv run --frozen ty check src tests
  • uv build
  • uv run --frozen pytest tests/test_acceptance_corpus.py -q --corpus-dir=@local:12 passed

已知本地门禁状态

M2 私有确定性回放为 14 passed、1 skipped、1 failed,失败原因是 request sequence mismatch。相同命令在未修改的基线提交 ee26984 上得到完全相同结果,确认不是本 PR 引入;未通过重生成私有 replay baseline 绕过该门禁。

Constraint: Preserve DOCX logical-flow semantics and prompt async cancellation

Rejected: Regenerating private replay baselines or guessing Strict OOXML conversion

Confidence: High

Scope-risk: Internal PDF limits, temp cleanup, PPTX preflight, and empty-content messages

Tested: uv run --frozen pytest -q; Ruff check and format; ty check; uv build; private corpus gate

Not-tested: Strict OOXML and flat-OPC compatibility without representative fixtures

Known-gate: M2 private replay request-sequence mismatch reproduces on base ee26984
@caichuanwang
caichuanwang merged commit 54394b9 into master Aug 4, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant