# 待办与已知限制

按优先级排列。接手人可据此排期；每条都标了影响面和实现提示。

---

## A. 功能缺口（用户能感知）

### A1. 自动图纸只标总尺寸 + 孔表（高）
现状：`build_scene` 每个视图只画总宽/总高，孔靠孔表与分组标注。
影响：凸台直径、台阶高度、板厚、定位尺寸要人工补，正式生产图不能直接用。
提示：可以从 `detect_holes` 之外再增一类特征识别（轴向圆柱面=凸台，平面台阶=厚度变化）。
现状补充：**自动分析仍是总尺寸**，但 0.3.0 起有 `freecad_measure`，可以让模型自己量出凸台直径、板厚（`planeOffset`）、孔距、夹角，再交给人工或自绘图纸使用——这是“AI 按需补标注”的当前路径。

### A2. 非圆孔 / 异形孔（部分解决，0.4.0）
0.4.0 起 `detect_holes` 能认三类：
- **圆孔**：圆柱面（凹、轴向），含斜孔——深度按圆柱面自身的接缝长度计，不再被被切掉的长度骗；
- **腰形孔（长圆孔）**：两段平行的半圆柱 + 平直侧壁，自动合成一条记录（直径=宽、length=全长），孔表里记 `S1`、形状写 `宽×长`；
- **开在曲面/过渡面上的孔**：不再丢弃，另出一类 `curved` 特征（轴向、半径、覆盖率、包角），由模型自己判断要不要标。

仍不识别：**方孔、D 形孔、任意轮廓的切槽**（它们不是圆柱面，需要按“平面内环”识别）。
提示：取视图内闭周围环（外环包含、内环不包含于实体面），按周环形状分类。

需要注意的副作用：多个圆柱孔**同轴叠在一条轴线上**（沉头孔、阶梯孔）仍是各自一条记录，不会合并；半径相同、轴线相同的腰形孔若只差 0.5 mm 级的中心距，聚类容差是 `max(0.6, d*0.35)`，可能并成一条——遇到可疑结果可以用 `freecad_measure` 复核。

### A3. 孔表固定 10 行（已解决，0.2.6）
`_hole_table` 现在按可用高度分栏续排，最多三块，并把“共 N 孔”写进标题；超过三块会退化为分页提示。

### A4. PDF 文字不可检索（中）
matplotlib 的 Type3 子集绘制，视觉正确但不能搜索/复制。
提示：换 cairo/pdfkit 或改为嵌入 TrueType 子集；也可在 SVG→PDF 路径上用图形库重排。

### A5. 剖视图 / 局部放大 / 形位公差 / 粗糙度 / BOM 缺失（中）
目前只有正交视图和轴测图。
提示：FreeCAD 1.x 有 `TechDraw` 的 SectionView 能力，但 headless 可用性需先验证；局部放大可以基于已投影的精确图元做窗口裁剪 + 比例变换。

### A6. 三视图页未接入版面闸门（中）
`tools/layout_check.py` 目前用于专门的分页排版；`fc_render.build_scene` 的三视图输出还没有调用它。
影响：三视图可能出现文字压框/越框（这正是用户反馈过的问题类型）。
提示：在 `build_scene` 末尾调用 `check_scene`，失败时抛错（或在 manifest 里带 `layoutOK:false` 并提示）。

### A7. 大装配性能（中）
单次调用 5 分钟上限；大模型 HLR 很慢。
提示：先做 LOD（用简化 shape 做视图）、缓存 `project_view` 结果、按视图并行子进程。

### A8. 剖切与多实体分色（低）
多实体（多体 STEP）目前合并为一个 compound 出图，无法区分不同零件的线型。

---

## B. 工程与质量

### B1. 无自动化单测（高）
现状：只有 `node index.js --self-test` 与人工冒烟；独立 58 用例来自外部 QA 的手工 harness，没有进入仓库。
提示：把 QA 用例固化为 `test/` 下的脚本（可复用 `call_tool.mjs`），CI 用 `examples/` 的样例跑金标对比。

### B2. FreeCAD 1.0 未实测（中）
代码保留了 1.0 路径，但只在 1.1.3 上验证过。
提示：在 1.0 上跑一遍 `projectEx` 分组与 `optimalBoundingBox`，必要时做版本分支。

### B3. 平台仅 Windows（中）
默认路径、GBK DXF、字体均是 Windows 假设。
提示：Linux/macOS 需要：可执行文件探测（`which freecadcmd`）、字体回退（Noto Sans CJK）、DXF 可选 UTF-8 或 GBK 配置项。

### B4. 超时不可配置（低）
`TIMEOUT_MS` 写死 300 s。
提示：提到 `config.timeoutMs`。

### B5. 版本号手工维护（低）
`package.json` 与 `drawing_manifest.json` 的 `generatedBy` 都是手写 `0.1.0`。
提示：worker 从 `package.json` 读取版本。

---

## C. 文档与开源整理（交接人决定）

- README 目前是中文、面向使用者的说明，对外开源前要确认目标读者（是否补英文版）。
- `notes/` 下的验收/审查报告包含内部环境路径与本机信息，公开前需要脱敏或移出仓库。
- `tools/` 下为某次具体出图任务编写的一次性脚本（特定的分页排版、轮廓分析、版面闸门），**与插件运行时无关**；公开前要评估：保留作示例 / 移入 `examples/` / 不进仓库。
- `test/` 目录里混有大量临时参数文件与产物，公开前应清理。

---

## D. 已解决的问题（留作知识，不要重复踩）

| 问题 | 解决方式 |
|---|---|
| 重启后插件被 pnpm 清理掉 | 用 `file:` 依赖 + `pnpm install`，不直接复制到 `node_modules` |
| 圆柱接缝线出现在视图里 | HLR 只取 `projectEx` 的 0/3/5/8 组 |
| 标题栏/孔表压内框 | 标题栏与表格统一从内框（距边 13 mm）内缩排布 |
| `-0.0` 导致 DSH 拒绝结果 | 结果写出前 `_json_safe()` 规范化 |
| 包围盒被样条撑大 | `optimalBoundingBox()` |
| `mirror` 用不存在的 `shape.mirrored` | 用 `shape.mirror(point, normal)` |
| A4 放不下右视图/轴测图 | A4 降级为 front/top 固定 1:2 |
